目录
- 1 进程的概念及特征
- 1.1 进程的引入
- 1.2 进程的概念
- 1.3 进程的理解
- 2 进程的状态及转换
- 2.1 三态模型
- 2.2 五态模型
- 3 进程组织、控制与通信
- 3.1 进程的组织
- 3.2 进程控制块
- 3.3 进程的控制
- 3.4 进程通信
1 进程的概念及特征
1.1 进程的引入
在单道操作系统中,任何时候内存中只有一道程序,程序运行的蓝本只有一个,程序与计算之间具有一对一的关系,将依照蓝本进行的计算活动称为程序,并无明显不妥之处。
在多道操作系统中,内存中可以同时存在两道或两道以上的程序运行,若每道程序互不相同,则仍可以程序的概念描述。但如果有某两道计算的蓝本(程序)相同,仅处理的数据(原料)不同,则称这两个计算是一个程序或两个程序均自相矛盾。因为以“程序”的命名产生了混淆,由此提出了“进程”这个名词来称呼“程序”。
1.2 进程的概念
进程是程序关于某个数据集合的一次执行过程,是一个可并发执行的具有独立功能的动态实体,也是操作系统进行资源分配、调度和保护的基本单位。
—有些系统称进程为“任务”(task)或“活动”(active)。
进程包括:程序(代码/文本)、数据、工作栈、堆、进程控制块PCB(Process Control Block)
1.3 进程的理解
进程的属性 (进程与程序比较):
- 结构性:进程包含了数据集合和运行于其上的程序。每个进程至少包含三个组成要素:程序块、数据块和进程控制块。
- 共享性:同一程序运行于不同数据集合上时,构成不同的进程。多个不同的进程可以共享相同的程序,所以进程和程序不是一一对应的。 (函数的递归调用也是不同数据共享相同函数,在这一点上类似于进程,但不相同,因为函数不是进程)
- 动态性:进程由创建而产生,由调度而执行,由撤销而消亡。程序是一组有序指令序列,作为一种系统资源是永久存在,是静态的概念。
2 进程的状态及转换
2.1 三态模型
进程的三种基本状态 。
进程从创建而产生至撤销而消亡的整个生命周期,可用一组状态加以刻划:
- 运行态(running):进程占有处理器正在运行。
- 就绪态(ready):进程具备运行条件,系统若为之分配处理器便可运行。
- 等待态(wait):又称为阻塞(blocked)态或睡眠(sleep)态,进程不具备运行条件,正在等待某个事件的完成。
通常,当一个进程创建后,就处于就绪状态。每个进程在执行过程中,任一时刻只能处于上述三种状态之一。在一个进程执行过程中,它的状态将会发生变化。
2.2 五态模型
五态模型在三态模型的基础上,引进了新建态和终止态(又称结束态)。
新建态---对应进程刚被创建的状态。为一个新进程创建必要的管理信息,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。
终止态---进程的终止,首先,等待操作系统进行善后,然后,退出主存。进入终止态的进程不再执行,但依然临时保留在系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,系统将删除该进程。
3 进程组织、控制与通信
3.1 进程的组织
进程有4个要素:进程控制块、程序块、数据块、堆栈。
进程程序块:即被执行的程序,规定了进程一次运行应完成的功能。通常它是纯代码,可被多个进程共享。
进程数据块:程序加工处理的对象,包括全局变量、局部变量和常量等的存放区以及开辟的工作区,为一个进程专用。
系统堆栈/用户堆栈:每一个进程都有一个系统/用户堆栈,用于过程调用或系统调用时的信息存储和参数传递。
进程控制块:每一个进程都有唯一的进程控制块,存储进程的标志信息、现场信息和控制信息。创建进程时建立进程控制块,撤销进程时回收进程控制块。
那么主存储器中的进程是如何组成的?
进程上下文(context)---操作系统中把进程物理实体和支持进程运行的环境合称为进程上下文(context)。
当系统调度新进程占有处理器时,新老进程随之发生上下文切换。进程的运行被认为是在上下文中执行。
进程上下文分成3类:
- 用户级上下文:由用户进程的程序块、用户数据块和用户堆栈组成的进程地址空间。
- 系统级上下文:包括进程控制块、内存管理信息、进程环境块,及系统堆栈等组成的进程地址空间。
- 寄存器上下文:由程序状态字(PSW)寄存器和各类控制寄存器、地址寄存器、通用寄存器、用户栈指针等组成。
3.2 进程控制块
进程控制块是进程存在的唯一标识。每个进程都有且仅有一个进程控制块( Process Control Block)。
PCB是操作系统用于记录和刻划进程状态及有关信息的数据结构,也是操作系统掌握进程的唯一数据结构,是操作系统控制和管理进程的重要要依据。
PCB包括了进程执行时的情况,以及进程让出处理器后所处的状态、断点等信息。
进程控制块中保存了与进程相关的全部信息:进程状态、程序计数器、CPU寄存器、CPU 调度信息、内存管理信息、I/O 状态信息
3.3 进程的控制
进程控制是对系统中所有的进程实施有效的管理,具有创建新进程、撤销已有进程、实现进程状态的切换等。
在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,是一个不可分割的基本单位。
进程的控制-创建
- 允许已存在的进程创建新的进程。 生成其它进程的进程称父进程(Parent Process),被生成进程称子进程(Child Process) 。
- 子进程可以继续创建自己的子进程,由此系统中形成了一棵进程树。
- 子进程可以继承父进程所有资源.子进程撤销,应归还资源给父进程,父进程撤销,同时撤销其所有子进程.
创建步骤:
- 分配一个唯一的进程标识号,申请一个空白PCB。
- 为新进程分配资源,包括内存空间(保存程序、数据、栈等),还有其他各种资源。
- 查找辅存,找到进程正文段并装入到进程地址空间的正文区。
- 初始化进程控制块(如状态、PSW、栈等),设置优先级。
- 把进程加入就绪进程队列,或直接将进程投入运行。
- 通知操作系统的某些模块,如记账程序、性能监控程序。
进程的控制-阻塞唤醒
进程的阻塞是指一个进程让出处理器,去等待一个事件。通常,进程自己调用阻塞原语(block)阻塞自己。阻塞是自主行为,只有处于运行态的进程才能将其转换成阻塞态。
当一个等待事件结束时会产生一个中断,从而激活操作系统,在系统的控制之下被阻塞的进程唤醒。进程的阻塞和唤醒是由进程切换来完成的。
进程的控制-终止
进程终止的原因:
- 进程正常运行结束。
- 异常结束,如发生存储区越界、保护错、非法指令、严重的输入输出错误等。
- 外界干预,进程应外界的请求而终止。如用户干预、父进程请求、父进程终止。
3.4 进程通信
进程通信是指进程之间的信息交换。根据信息量的多少分为:
- 低级通信— 进程之间交换的信息量较少且效率低。如进程同步和互斥。
- 高级通信—进程之间交换的信息量较多且效率高。又分:
- 共享存储器,指进程之间通过对共享存储区读写来交换数据。
- 消息传递系统,指进程间的通信以消息为单位,程序员可通过通信原语实现通信,按其实现方式不同可分为:
- 直接通信方式,发送进程直接把消息发送给接收进程。
- 间接通信方式,发送进程把消息发送到某个中间实体(信箱),接收进程从中取得消息。
- 管道通信系统,利用称为管道的文件实现进程通信。
进程的通信--管道
解释:用于连接读进程和写进程以实现它们之间通信的共享文件,称为“管道”。发送进程(写进程)以字符流形式将大量数据送入管道,接收进程(读进程)从管道接收数据。
管道(共享文件)通信机制 :
- 管道属于一种共享文件通信机制。
- 管道连接读写进程实现通信。写进程往管道一端写入信息,读进程从管道另一端读信息。
- 管道机制应具备互斥(一次仅由一个进程读写)、同步(阻塞和唤醒)和确定对方是否存在。
- 在LINUX系统中,管道大小为1页,即4K字节。若写满,则对管道的write()调用被阻塞。若读空,则对管道的read()调用被阻塞。
- 管道是一次性操作,数据一旦被读取,它就从管道中被抛弃,释放空间以便写入其他数据。
如果想获取思维导图文件,请关注公众号《程序员二毛》,回复【操作系统】获取。
未完待续,敬请期待下个系列文章...