写点什么

为您收录的操作系统系列 - 进程管理(上篇)

用户头像
Arvin
关注
发布于: 2021 年 02 月 03 日
为您收录的操作系统系列-进程管理(上篇)

从操作系统"出发","品"技术演化,"深扎"知识树根。第一篇 技术根儿扎得深,不怕“首都”狂风吹! 中,将操作系统的发展过程做了系统的梳理,接下来将围绕操作系统的中的具体"点"展开学习。

第二篇:进程管理(上)

叙述部分

程序的顺序执行(单道批或无操作系统)

顺序性

处理机的操作,严格按照程序所规定的顺序执行,只有在前一个操作结束后,才能执行后续的操作。

封闭性

程序在封闭环境下运行的,程序独占全机资源,各个资源的状态只有程序本身可以修改。

可再现性

只要程序执行时的环境和初始化条件相同,当程序多次重复执行时,其执行结果相同。

如图所示,当前执行的程序有且仅有一个,执行程序独占操作系统资源。

程序的并发执行(多道批操作系统)

并行执行

同一时间间隔内运行多个程序,一个程序执行结束之前,可以运行其他程序。

间断性

程序并发执行时,由于他们的资源共享的,而且资源的数量往往少于并发执行程序的数量。系统不能保证每个程序不受限制的使用资源。因而,每个程序才 CPU 上运行都是时断时续的,当请求的某些资源的程序数量大于某些资源的数量时候,必然有因申请不到资源而暂停执行的程序。当其他程序释放资源后,该程序才可执行。

失去封闭性

程序在并发执行时,由于他们共享资源或合作完成一项任务,系统的状态不再只是正在执行的某一个程序可以“看见” 或 “改变”。

不可再现性

程序并发执行时候,由于失去了封闭性,也将导致失去结果的可再现性。

如果所示,并行执行体现在宏观上 程序 A,B,C 是同时运行的。间段性体现在程序 在不同的时间分片向前推进。由于 程序 A,B,C 的交替执行,因此系统资源不具有封闭性,最终导致结果的不可再现性。

进程的概念

进程定义

进程是允许并发执行的程序在某个数据集合上的运行过程。

进程是由:正文段,用户数据段,进程控制块共同组成的执行环境。

正文段:存放被执行的机器指令。

用户数据段:进程在执行过程中是直接进行操作的用户数据。

进程控制块:存放程序的运行环境,操作系统通过这些数据描述和管理进程。

程序装入内存后就可以运行了,根据指令计数器(PC)的值,不断将指令从内存取到 CPU 的指令寄存器中,经过译码后完成各种操作。

进程特征

并发性

多个进程实体在一段时间间隔内同时运行。

动态性

进程是进程实体的执行过程。表现在因执行程序而创建进程,因获得 CPU 而执行进程的指令,因运行终止而撤销的动态变化过程。

独立性

没有引入线程概念的操作系统,进程是独立运行和资源调度的基本单位

异步性

进程执行时断时续,进程什么时候执行,什么时候暂停都无法预知呈现一种随性的特性。

结构特征

进程的实体包括:用户正文段,用户数据段,进程控制块。

进程 VS 程序

区别

程序是静态的,进程是动态的。​ 程序是永久的,进程是暂时存在的。​ 程序和进程存在实体不同。

联系

进程是程序的一次执行,进程总是对应至少一个特定的程序,执行程序的代码。​ 一个程序可以对应多个进程。同一个程序可以在不同的数据集合上运行,因而构成若干个不同的进程。

进程控制块

什么进程控制块

应用程序对于的进程由程序,用户数据,和操作系统管理进程所需要的进程控制块构成。​ 进程控制块是进程实体的一部分,是操作系统中最重要的数据结构。进程控制块中记录了操作系统所需要的,用于描述进程情况,及控制进程运行所需要的全部信息。

进程控制块中的信息

进程标识符信息

用于唯一标示一个进程。

处理机状态信息

处理机器是被进程共享的资源,当一个进程在 CPU 上执行时,CPU 寄存器的值也随进程的执行不断变化,当发生进程切换时,当前的进程执行要被暂停,新的进程占用 CPU。为了使当前进程 CPU 的值不被新的进程覆盖而丢失,必须将当前进程的 CPU 寄存器值保存到内存中,以便于进程再次获得 CPU 时,能从内存中加载到寄存器的值,恢复上一次被暂停的 CPU 环境。使进程继续执行。组成部分

通用寄存器:用户可以访问的寄存器,用户暂存信息。

指令计数器:其中存方了 CPU 要访问的的下一个指令的地址。

程序状态字 PSW:其中包括状态信息,如条件码,执行方式,中断屏蔽标示等。

用户栈指针:每个用户进程都有一个与之相关的系统栈,用于存放过程和系统调用参数及调用栈,栈指针指向该栈栈顶。

进程调度信息:进程状态信息,进程优先级,进程调度所需要的其他信息。

进程控制信息:包括程序和数据的地址,进程同步,通信机制,资源清单,链接指针。

进程的状态

基本状态

就绪态

进程一旦获取 CPU 就可以运行的状态。

Linux 2.4 把所有的就绪进程组成一个先进先出的就绪队列。​ Linux 2.6 根据进程的优先权不同及就绪态的进程组织成多个不同的就绪队列。

执行态

进程获得 CPU 正在运行的状态。

阻塞态

进程由于等待资源或某个事件的发生而暂停执行的状态,系统不会为处于阻塞状态的进程分配 CPU。

状态转换

新创建的进程的状态一般处于就绪态,当操作系统为处于就绪态的进程分配 CPU 时,进程开始 CPU 上运行,进程的状态由就绪态变为执行态。执行态的进程可以变为就绪态,也可以变为阻塞态。如图所示:

进程的组织

链接方式

把系统中具有相同状态的进程的进程控制块用其中的链接字链接成一个队列。如下图所示:

索引方式

根据所有进程的状态,建立几张索引表,索引表的每一个表项指向 PCB 的物理块,如下图所示:

进程队列

当系统中有很多进程时,可以把进程控制块用队列的方式组织起来,形成进程队列。把具有相同状态的进程放在一个队列中,具有不同状态的进程形成了不同的进程队列。就绪,执行,阻塞队列。根据算法的需要又可以把就就绪队列按照优先级分成不同几个优先权不同的就绪队列。把阻塞进程根据阻塞原因的不同分成不同的阻塞队列,阻塞原因相同的进程再同一个阻塞队列中,如下图所示:


小结

整理过程中愈发发现一个新的概念的产生,首先要面对的是解决现有问题。现有问题明确之后,那么解决问题的方式方法通过不断的优化调整,便有了创新。这一点在上一篇中的操作系统的演化过程中也有体现,感兴趣的可以了解一下《 技术根儿扎得深,不怕“首都”狂风吹!》。接下来的内容将围绕着进程控制,进程同步展开,同时也会结合代码辅助理解。


以上为 《重拾操作系统》系列的第二篇"进程管理(上篇)",欢迎大家的留言讨论。最后结尾的最后分享一首诗给大家。

你灵魂里有生命的力量,探寻那生命吧。

你身体来的矿山里有宝石,探寻那矿山吧。

哦旅者,你若在找它,

不要往外看,要往自己里面看,然后寻到。


发布于: 2021 年 02 月 03 日阅读数: 219
用户头像

Arvin

关注

生活黑客35 2019.06.11 加入

向自己发问:“当下我应该做那些事情来增加自己的决心,强化自己的人格,找到继续前行的勇气?”

评论

发布
暂无评论
为您收录的操作系统系列-进程管理(上篇)