接下来,我开始阅读进程管理这章,首先把知识框架列在下面。
首先,早期的计算机只支持单道程序,计算机中所有的资源都用于该程序的运行。之后引入多道程序技术之后,为了方便操作系统管理、完成各程序并发执行,引入了进程、进程实体的概念。PCB、程序段和数据段三部分构成了进程实体(进程映像)。一般情况下,我们把进程实体简称为进程。其中PCB是系统为每个运行的程序配置的一个数据结构,称为进程控制块(PCB),用于描述进程的各种信息,同时PCB也是进程存在的唯一标志。操作系统通过PCB来管理进程,因此PCB中应该包含操作系统对其进行管理所需的各种信息。所谓创建进程,实质上是创建进程实体中的PCB。
引入进程实体的概念后,可把进程定义为:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。严格来说,进程实体和进程并不一样,进程实体是静态的,进程则是动态的,一般情况下,默认进程实体就是进程。
在一个系统中存在数以百计的PCB,为了对他们进行有效的管理,应该用适当方式把这些PCB组织起来。
进程和程序是两个截然不同的概念,具有以下几个特征,其中动态性是最基本特征。
进程是程序的一次执行,在执行的过程中,进程的状态是会变化的。为了方便对各个进程的管理,操作系统需要将进程合理的划分为几种状态。其中,在单核处理机环境下,每一时刻最多只有一个进程处于运行态。阻塞态的进程因一事件未满足,例如打印机未分配,等待读取磁盘。CPU是计算器中最昂贵的部件,为了提高CPU的使用率,需要先将其他进程需要的资源分配到位,才能得到CPU的服务。
进程状态的转换
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有新进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。原语采用“关中断指令”和“开中断指令”实现。显然,关/开中断指令是只能允许运行在核心态下的特权指令。无论哪个原语要做的无非三类事情。
1,更新PCB中的信息(如修改进程状态标志,将运行环境保存到PCB,从PCB回复运行环境)
a,所有的进程控制原语一定都会修改进程状态标志
b,剥夺当前运行进程的CPU使用权比如需要保存其运行环境。
c,某进程开始运行前必然恢复其运行环境。
2,将PCB插入合适的队列
3,分配/回收资源
进程创建原语:
进程撤销原语:
进程的阻塞和唤醒原语:
进程切换原语:
进程通讯指进程之间的信息交换。进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。为了保证安全,一个进程不能直接访问另一个进程的地址空间。但进程之间的信息交换又是必须的,为了保证进程间的通信安全,操作系统提供了一些方法。
共享通讯,在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行读写操作实现进程之间的信息交换。两个进程对共享空间的访问必须是互斥的。基于数据结构的共享是低级的通信方式,基于存储区的共享是高级通信方式。
管道只能采取半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
各进程要互斥的访问管道,未写满不允许读,为读空不允许写。
数据以字节流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞。
数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。
有的进程可能需要“同时”做好多事,但传统的进程只能串行的执行一系列程序,为此引入“线程”来增加并发度。传统的进程是程序执行流的最小单位。线程可以理解为“轻量级进程”,是一个基本的CPU执行单元,也会程序执行流的最小单位。引入进程后,不仅是进程之间可以并发,进程内的各进程之间也可以并发,从而进一步提升额系统的并发度,使得一个进程内也可以并发处理各种任务。引入线程后,进程只作为除CPU之外的系统资源的分配单位。