免费做网站哪个好,网页小游戏怎么下载,百度seo关键词优化推荐,项目管理师一.何为进程
教材一般会给出这样的答案:
运行起来的程序 或者 内存中的程序
这样说太抽象了#xff0c;那我问程序和进程有什么区别呢#xff1f;诶#xff1f;这我知道#xff0c;书上说#xff0c;动态的叫进程#xff0c;静态的叫程序。那么静态和动态又是什么意思…一.何为进程
教材一般会给出这样的答案:
运行起来的程序 或者 内存中的程序
这样说太抽象了那我问程序和进程有什么区别呢诶这我知道书上说动态的叫进程静态的叫程序。那么静态和动态又是什么意思呢且听我慢慢道来。
二.先描述再组织
我们编译完成运行之前的程序是放在哪的呢不用说肯定在磁盘上。我们常常听说要想运行一个程序首先要将它加载到内存这是由冯诺依曼体系结构决定的因为CPU读取数据肯定要和内存交换如果和外设打交道速度就太慢了。
程序本质上也就是各种各样的数据所谓的加载就是把磁盘上的程序拷贝到内存中。所以这就变成进程了这就有动态属性了凭什么呢
我们知道当电脑开机了肯定有一个软件肯定已经加载到内存了那就是操作系统。那么当我们在Windows上双击一个程序或者在LInux上点斜杠启动一个程序时操作系统就会帮我们把数据从磁盘搬到内存这样内存中的程序就变成“进程”了。
我们还可以同时启动多个程序所以操作系统内可能同时存在多个“进程”
当进程变得越来越多的时候操作系统必须要将这些进程有条不紊地管理起来。怎么管理还是上篇文章的六字箴言“先描述再组织”。
描述是在干什么就是把要管理的对象的属性信息罗列出来而操作系统是C语言写的所以描述就是创建struct结构体里面包含进程的各种属性一个进程对应一个结构体。组织又是在干什么就是将描述出来的信息以某种数据结构来组织以方便管理所以组织就是将struct结构体以链表的方式链接起来。
所以说操作系统对进程的管理就变成对链表的管理其中链表的一个个结点就对应着一个个进程。接下来我们重点来关注这个结构体。
三.进程的PCB
这个描述进程的结构体在大多数操作系统的教材里都把它叫做进程的PCBprocess control block。书上说一个进程被创建时该进程必须要有对应得到PCB但是却没有告诉我们为什么要有PCB。到这里就可以得出结论了因为操作系统要对进程进行管理要想管理就得先描述再组织而PCB就是用来描述进程的。
那么PCB结构体里有哪些信息呢里面的信息很多这里先简单列举几个后续的学习都会围绕里面的信息来展开 首先一个进程有一个id编号这个用来标识一个进程就像你在大学有一个自己的学号。
其次还有代码地址通过这个地址可以找到进程对应的代码也就是从磁盘拷贝进入内存的程序程序在执行时会在内存中产生数据例如创建一个个变量因此还有数据地址。
进程未来肯定是会被CPU调度的因此会存在状态和优先级这样的概念。比如你作为一个大学生在学校里会有学习状态和休闲状态什么样的状态决定你做什么样的事。你会有很多的任务这些任务会有优先级什么先做什么后做。
链接字段就像我们学习链表时的prevnext指针通过这些链接字段操作系统可以找到上一个或下一个PCB。
四.再谈进程
我们来梳理一下前面的内容再来谈一谈什么是进程。
一个程序最开始是在磁盘上当我们双击它时操作系统会将代码拷贝到内存中但操作系统还要能管理进程所以程序加载进来之后还要为其创建PCB其中包含能够找到代码和数据的指针字段所以PCB指向对应的代码和数据。同时PCB里还有链接字段所以一个个分散的PCB就被以链表的形式组织起来这样一来操作系统对进程的管理工作就变成了对链表的增删查改。
所以未来CPU想要调度一个进程它回去直接找拷贝到内存的程序吗不会的有什么可找的一个个长的都差不多CPU会去找PCB然后通过PCB找到对应的代码和数据这样就能愉快地执行了。
当有一天我想要关闭一个进程时操作系统会把内存中的代码和数据释放然后把这个进程的PCB从链表中移除出去这样操作系统就不再对它进行管理了。 回到最初的问题什么是进程
进程 可执行程序 内核数据结构(PCB)
这里的内核数据结构不止一种我们暂且将它就当做PCB今后还会学习到更多
内核数据结构存在的意义就是方便操作系统对进程进行管理今后我们一谈到进程首先要要想到的是PCB而不是那堆拷贝进来的代码。
五.进程和程序的区别
第一进程在内存中而程序在磁盘上当然这是最浅显的
第二进程比程序多了对应的内核数据结构(PCB)
第三程序是静态的进程是动态的。怎么理解这里的“动态“
首先我想问问大家都会有写过死循环代码的经历吧。当大家把这个死循环程序运行起来时进程是不是就一直占着CPU不下去了呢
但我们发现其它程序也还能运行只不过稍稍卡了一点。所以一个进程有时候是运行的有时候是处于等待状态的。所以PCB里才会有状态和优先级这样的概念。假设一个进程是一次性放在CPU上全部跑完那根本就不需要状态这样的概念。
所以进程是受操作系统和CPU的调度运行的当调度到你的时候你的代码就跑一跑没有叫你的时候就等一等等所有代码跑完后进程就结束了。所以以PCB为代表的进程就好像有了生命一般具有动态运行的属性。 结语
本期分享到此结束关注我分享更多干货内容。
下节预告:查看进程与利用fork创建进程