前言:本文将逐步深入探讨进程相关内容。在进入进程讨论之前,我们需要再次回顾操作系统的基本概
前言:
本文将逐步深入探讨进程相关内容。在进入进程讨论之前,我们需要再次回顾操作系统的基本概念。接下来,我们会介绍进程的定义、如何查看进程,以及在Linux中与进程相关的文件等问题。进程是一个庞大的主题,会持续更新多节,因此其知识点较为复杂,同学们需要特别注意。
首先,我们需要理解为什么需要操作系统。
操作系统的主要工作是管理软硬件资源。管理硬件是通过驱动程序实现的,这些程序将硬件数据组织成链表,操作系统可以直接修改链表信息,从而通过驱动程序管理硬件。这种方法是先描述再组织,最终实现对硬件的管理。然而,操作系统的根本目的是为用户提供良好、稳定、高效和安全的服务,因此需要采用相应的方法来管理各种资源。
从操作系统的结构图中我们可以看到,操作系统包括进程管理等多种管理功能。操作系统在管理进程时,允许多个进程同时存在。例如:
这些都是进程。要查看电脑中的进程,只需按esc + shift + ctrl打开任务管理器即可。这证明了进程是可以多重存在的。
那么,什么是进程呢?
如果将某个工程的数据和代码加载到内存中,代码是否会自动运行呢?答案是否定的,因为CPU并没有读取这些数据。当代码开始运行时,就产生了一个进程。进程不仅仅是正在运行的程序,它是由PCB(进程控制块)加上自己的代码和数据构成的。
那么,什么是PCB呢?PCB是一个包含多种数据类型的结构体,用于存储进程的相关信息。类比于操作系统管理硬件时需要硬件信息来构建链表,操作系统通过修改链表实现对硬件的管理。PCB的全称是process control block,即进程控制块。之所以称为控制块,是因为操作系统可以通过对PCB的操作来控制进程。
因此,我们得出结论:进程 = PCB + 自己的代码和数据。
为什么需要PCB的概念呢?
因为操作系统遵循“先描述再组织”的原则。通过PCB,操作系统可以在内存中以链表的形式连接多个进程,每个PCB包含指向下一个PCB的指针。这样,操作系统可以通过管理链表来管理进程。
具体的PCB结构体名称是task_struct。外国人将其称为task,因为他们认为这是任务的一种表现形式。
进程是动态运行的,我们如何理解动态运行呢?
在内存中,操作系统占据一定空间,用于管理各种软硬件。当不同的进程进入内存时,需要排队处理。因此存在task_queue,即进程队列。动态运行实际上是多个PCB排队的过程。
具体内容将在后续文章中详细介绍。
现在让我们来看看task_struct的内部属性:
无论是运行指令还是编写代码,本质上都是创建一个进程。指令执行得非常快,我们通常看不到其过程。那么,如何区分不同的进程呢?每个进程都有一个唯一的标识,即pid(进程ID),类似于学生的学号。
我们如何查看pid呢?
在回顾上篇文章中介绍的系统调用接口:
系统调用是操作系统提供的函数,我们从未调用过它,现在是时候调用我们人生中的第一个系统调用接口了。我们使用man手册查询可知:
从手册说明中我们了解到,2号接口是系统库函数调用,即我们即将学习的getpid:
#include登录后复制#include #include int main(){ printf("I am a process\nMy pid is %d\n",getpid()); return 0;}
菜鸟下载发布此文仅为传递信息,不代表菜鸟下载认同其观点或证实其描述。
版权投诉请发邮件到 cn486com#outlook.com (把#改成@),我们会尽快处理
Copyright © 2019-2020 菜鸟下载(www.cn486.com).All Reserved | 备案号:湘ICP备2022003375号-1
本站资源均收集整理于互联网,其著作权归原作者所有,如有侵犯你的版权,请来信告知,我们将及时下架删除相应资源