进程的概述

📅 发布时间:2026/9/3 5:32:44
进程的概述 进程概述1、 什么是进程2、操作系统是如何管理进程的2.1、描述2.2、组织3、说回是什么4、为什么要有进程5、进程是动态的——进程调度的感性认识这篇文章中我们主要搞清楚三件事什么是进程为什么要有进程操作系统是如何管理进程的我们只有搞清楚这些东西才能认识到我们接下来学习进程到底学习的是什么。1、 什么是进程我们可能会在教材上发现进程是这样被描述的运行起来的程序就是进程加载到内存中的程序就是进程。但是这样对于进程的描述不准确。、为了讲清楚什么是进程我们就必须先讲一讲操作系统是如何管理进程的。2、操作系统是如何管理进程的注意以下都是大概的说法。操作系统内可以同时存在多个进程。windows下存在多个进程我们打开“任务管理器”就可以看到Linux下也存在多个进程我们可以执行指令top查看进程一旦多起来了操作系统就需要对这这么多个进程进行管理。如何管理呢先描述再组织2.1、描述操作系统(内核)存在一个个数据结构这些数据结构往往都是链表链表上串着一个个节点这些节点就是一个个进程structXXX{// ...};Linux下进程的类型名称为task_struct所以我们打开Linux内核通常会见到这些东西structtask_struct{// ...};我们学习的教材可能会提出一个名词叫PCBProcess Control Block进程控制块。PCB与task_struct的关系就与媒婆和王婆的关系一样因为不同系统下进程的类型名称是不一样的。task_struct中省略的内容就是进程的属性。所以task_struct结构体完成了对进程的描述。2.2、组织进程的描述完成了接下来要做的就是组织进程也就是对链表进行增删查改。task_struct里面不仅有对进程属性的描述(成员变量)还有链接字段structtask_struct{// ...structtask_struct*_next;// 链接字段};计算机刚开机时会有一段等待时间这段时间内计算机做的事情是将操作系统加载到内存当中。加载完成后我们一会儿就可以看到电脑的桌面内容。程序作为进程的前身制作完成后是存储在磁盘上的。程序需要加载到内存中才能变成进程。操作系统创建进程干了两件事将程序的代码、数据加载到内存中在操作系统内部创建task_struct进程对象对象中包含部分的指针成员指向了程序代码和数据在内存中的具体位置。多个程序需要运行就会有多个代码、数据以及多个task_struct对象加载到内存当中。当CPU想要选择一个进程进行调度CPU就不可能直接去看程序加载进来的代码和数据而是去查找对应的task_struct对象在对象中查找指向指针从而找到程序的代码和数据。打个比方代码和数据就是学生本身task_struct对象就是学生的学籍只有学生本人和他的学籍都在学校里那么这个学生才算真正存在这所学校当中。当进程有很多的时候我们就用链接指针将进程串联起来形成链表。以后操作系统想找出优先级最高的进程写入CPU执行时就可以遍历链表对比优先级从而选出符合要求的进程。操作系统对于进程的管理就转变为了对进程链表的增删查改进行了一定程度的建模。这就完成了组织。3、说回是什么在上面对于“操作系统如何管理进程”的话题中我们提到过吗操作系统将进程加载到内存的时候干了两件事程序的数据、代码加载到内存创建task_struct对象进行对进程的描述。那么我们就可以正式回答进程到底是什么进程 内核数据结构 程序的代码和数据就如同学生 学生本人 学生的学籍这也为我们指明了接下来学习进程的方向学习进程属性学习进程的组织——数据结构的增删查改。4、为什么要有进程我们创建一个C语言文件mycode.c写上这么一段代码#includestdio.h#includeunistd.hintmain(){while(1){printf(Im a process.\n);sleep(1);}return0;}然后编译运行我们就能看到I’m a process.持续被打印。当mycode程序执行的时候我们执行指令ps axj | head -1 ps axj | grep mycode就会发现mycode的进程程序运行终止后进程又消失了我们就看到了一个事实Linux下启动的所有程序全部会转换成进程被操作系统执行。我们可以理解为进程就是用户想干什么想听音乐想看视频想写代码那就把对应的指令、工具、软件加载到内存中以待调度这些就是进程(的一部分)。所以进程代表了用户的意志没有进程用户也就无法真正地用计算机完成任务。5、进程是动态的——进程调度的感性认识上面我们说进程 内核数据结构 程序的代码和数据这是对于进程的静态描述。操作系统对于进程的管理是一个动态的过程。我们可以通过“学生找工作”来感性认识进程动态的过程也就是进程调度。你是一名学生找工作之前你需要制作简历。所以你在简历上写下了你自己的面试官可能感兴趣的特征——这就是“先描述”。后来你开始投递简历。如果你投递的是一家大公司你的简历就会被放到一个叫做“简历池”的地方存起来公司里的HR就会在简历池中筛选出部分简历按一定顺序整理好然后提交给面试官。接着面试官就按照简历上的电话号码挨个给像你一样的受试者打电话通知你们进行面试。在这个故事中面试官就是CPU。HR就是操作系统。以你为代表的受试者就是程序的代码和数据你的简历就是task_struct对象当你未投递简历相当于程序还保存在磁盘中当你投递了简历相当于程序的代码和数据加载到了内存并且操作系统创建了一个task_struct。HR将简历挑选出来放在面试官的桌子上相当于进程从一个地方转移到另一个地方这就是进程调度的本质HR整理简历的过程相当于操作系统组织进程的过程。面试官通知你进行面试相当于CPU执行程序。面试官需要打电话通知你来参加面试电话号码就是task_struct对象内部的指针指针指向的就是代码和数据存储的位置。这样我们就对进程有了一个动态的认识即进程调度的本质就是进程从一个地方转移到另一个地方的过程。