《操作系统原理》读书笔记(三)

  • Post author:
  • Post category:其他




1


、进程的定义:

1.程序在处理器上的执行。

2.进程是一个可调度的实体。

3.进程是逻辑上的一段程序,它在每一瞬间都含有一个程序控制点,指出现在正在执行的指令。

4.顺序进程是一个程序及其数据在处理器上顺序地执行时所发生的活动。

5.进程可以和别的进程并行运行。

国内对进程的定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。

进程与程序的区别:

1.进程是程序的执行,属于动态概念,而程序是一组指令的有序集合,是静态概念。

2.进程的存在是暂时的,程序的存在是永久的。

3.进程的组成应包括程序和数据,进程还由记录状态信息的进程控制块组成。

4.一个程序可能对应多个进程。

5.一个进程可以包含多个程序。




2


、进程有三种基本状态:

1.运行状态(running):当进程在处理器上运行时,称为运行状态。

2.就绪状态(ready):当进程获得除处理器外的一切资源,一旦得到处理器即可运行,称进程处于就绪状态。

3.等待状态(blocked):一个进程正在等待某事件(如等待资源成为可用,等待输入输出完成等)发生而暂时停止运行,这时即使把处理器分配给该进程也无法运行,称此进程处于等待(阻塞)状态。

在这里插入图片描述

1.当就绪的进程被进程调度程序选中后,就分配处理器来运行。

2.处于运行的进程在其运行过程中需等待某一事件发生后才能继续运行,所以进程由运行变为等待。

3.在运行中的进程,当分给它的处理器时间片用完而让出处理器,由运行变为就绪。

4.处于等待的进程,若其等待的事件已发生,则由等待变为就绪(像上面所说的当需要的资源足够后就变成就绪等CPU翻牌)。




3


、为了更好地管理和调度进程以及适应系统的功能目标,在许多系统中都有

挂起



解除挂起

一个进程的功能。因为:

1.系统有时可能出故障或某些功能受到破坏,所以需要暂时将系统中的进程挂起,以便系统把故障消除后,再把这些进程恢复到原来状态。

2.用户检查作业中间执行情况和中间结果时,将其挂起以便进行某些检查和改正。

3.系统中有时负荷过重,资源数相对不足,从而造成系统效率下降。这时需要挂起一部分进程以调整系统负荷。

所以系统中进程状态可以分为:

挂起就绪(readys)



挂起等待(blockeds)



活动就绪(readya)



活动等待(blockeda)



在这里插入图片描述

如果原来一个进程在

运行(runnnig)

或者

活动就绪(readya)

时,可因挂起命令而由原来的状态变成

挂起就绪(readys)

,此时它不能参与争夺处理器,即进程调度程序不会把处于

挂起就绪(readys)

的进程挑选来运行。




4


、通常,操作系统用一个称为

进程控制块简称PCB

的数据结构来记录进程的属性信息,不同的操作系统的PCB设计不同,一般PCB包含下三类信息:

1.

进程标识信息



本进程的ID

,通常用系统中唯一的数字作为标识,该数字是该PCB在系统中的PCB表中的序号。

建立本进程的父进程的ID



用户标识



2.

处理器状态信息



用户使用的寄存器



控制和状态寄存器

,包括程序计数器PC和条件寄存器或程序状态字PSW。

堆栈指针



3.

进程控制信息



调度和状态信息

,包括进程的状态,进程的调度优先级,与调度有关的信息一般包括进程已等待的时间和已使用的处理器时间等。

进程在有关队列中的链结构指针



进程间的通信信息

,包括标志位、信号量、消息队列等。

主存使用信息

,包括分给进程的主存大小和位置。

进程使用的其他资源信息



进程得到有关服务的优先级

PCB不但记录进程的属性信息,以便操作系统对进程进行控制和管理。且因为PCB的存在,操作系统根据PCB判断进程存在与否。进程建立的同时建立PCB,撤销的时候取消PCB。PCB就是进程存在的表现。没有PCB的进程不是好的进程。




5


、为了调度和管理进程,常将各进程的PCB用适当的方法组织起来:

1.把所有不同状态的PCB组织在一个表格中,适用于系统中进程数目不多的类型,缺点是调度进程时,往往要查找整个PCB表。

2.分别把有相同状态的进程的PCB组织在同一表格中,所以分有就绪进程表,运行进程表,各种等待事件的等待进程表,系统中的一些固定单元分别指出各表的起始地址。

3.分别把具有相同状态的所有进程的PCB安优先数排成一个或多个队列。就分成了就绪队列、等待队列等。采用队列形式时,PCB为一链表形式连接。




6


、操作系统与进程控制,操作系统是通过中断驱动的,其中操作系统所有的打断的机制有:

1.

中断

,使用于外部的随机事件。

2.

trap

,使用于错误或异常条件管理。

3.

访问管理程序SVC

,使用于调用操作系统功能。

其中常见的中断:

1.

时钟中断

,若进程的时间片终止或定时时钟唤醒实时进程或延迟处理进程。这时中断处理程序将调用进程处理程序调用其它进程来执行。

2.

IO设备中断

,若中断处理程序发现IO正常完成并有一个或多个进程正被堵塞等待IO中断。那么中断处理程序把堵塞进程的状态改为就绪,并转移队列,最后调度进程调度程序决定在运行进程与就绪进程的命运。

3.

存储访问故障

,当进程要访问的地址不在主存中时,需要把它们调入主存,这时涉及需要时间较长的IO操作,于是可以调度其它就绪的进程运行。

4.

访问管理程序中断

,当处理器发现用户中的指令是SVC(访管指令),则自动触发本中断。SVC中断管理程序调用相应的管理程序为用户进程服务,如启动IO,打开文件,分配主机等,通常会导致现行进程被堵塞。

上述有两个特点:

处理器执行模式



处理器在进程间的执行

用户进程被中断或调用操作系统功能都会引起处理器执行模式的改变,即目态和管态之间的变化,这种变化引起的系统开销比较小。

而操作系统中进程间的执行模式变化开销就比较大,当一个运行进程中断后,操作系统把处理器控制权交给其它就绪进程,此时,原来的运行进程的状态要改变为就绪或堵塞,它的PCB有关信息均要做出相应的变化且要移到相应的队列中去。其次要把新选出的就绪进程的PCB改为运行状态,移出就绪队列,修改存储管理有关的表格,把新选出的进程的PCB的寄存器和PSW中的值装入系统处理器的各寄存器和PSW中。进程调度的开销比系统模式变化大的多。

操作系统执行进程的三种方式:

1.

非进程的内核方式

,操作系统执行于所有进程的外部,并与它们分离。每当运行的用户进程被中断或要求访问管理程序时,进程的现场被保存起来,控制转给操作系统并执行内核模式。这种方式是多数老操作系统采用的方式。

2.

在用户进程内部执行

,多用在小型机(个人PC)中,由于每个进程都要使用操作系统服务和功能,所以我们可以假想每个进程都有一个操作系统,操作系统的地址空间被包含在每个进程的地址空间中。当进程中断时,操作系统均在用户进程的地址空间内执行,但处理器执行模式还是从目态转成管态。UNIX就属于这种方式。

3.

操作系统进程方式

,操作系统各个功能作为系统进程运行,操作系统的实现是系统进程集合运行的结果。Windows NT可认为是这种方式。




7


、在UNIX中,每个用户在自己的虚拟计算机上运行,虚拟计算机的当前状态称为一个映像。映像内容有

用户级部分:

1.

进程正文

,用户程序可执行的机器指令。

2.

进程数据

,进程的程序可访问的数据。

3.

用户堆栈

,存放参数,局部变量,指针。

4.

共享存储区

,用作进程间通讯。

寄存器部分:

1.

程序计数器PC



2.

处理器状态寄存器



3.

堆栈指针



4.

通用寄存器



系统级部分:

1.

进程表表目

,描述进程状态。

2.

U区(用户区)

,内核执行进程上下文时所需的附加的控制信息。

3.

每个进程的域表

,虚地址与实地址的映像表,包含有进程访问权限。

4.

内核堆栈

,进程执行在内核模式时使用的堆栈。

在UNIX中进程定义为一个映像的执行。

UNIX操作系统也建立在进程的概念上,并以进程作为基本的组织概念。系统为了管理这些进程的活动,必须为每个进程设立一个PCB(进程控制块)在记录数据。通常PCB占空间比较大,所以系统把每个PCB分为两部分:

1.常驻主存部分,称proc结构,其中包含有进程调度时必须使用的一些主要信息。

2.非常驻主存部分,称user结构,里面登记了有更多的进程运行时才要用到的信息,它随用户的程序和数据部分而进出主存。

UNIX进程表目:

1.

进程状态

,表进程当前状态。

2.

指针

,指向主存中正文区、数据区、堆栈和user结构。

3.

进程大小

,分给进程的空间。

4.

用户标识

,实际用户标识和有效用户标识。

5.

进程标识


6.

事件描述

,当事件发生,进程状态变为就绪。

7.

优先级


8.

信号

,发给进程的计数信号。

9.

计时信号

,包括进程执行时间、内核资源利用、用户建立发送给进程唤醒信号的定时器。

10.

链指针

,就绪队列链指针。

11.

存储状态

,进程映像是否在主存。

UNIXuser结构:

1.

进程表指针

,指向在user结构中相应表目。

2.

用户标识

,实际和有效用户id,用以决定用户优先级。

3.

计时

,记录进程在用户态和内核态执行时间。

4.

信号管理数组

,存储信号的数组。

5.

控制终端

,进程login的终端。

6.

错误字段

,记录系统调用遇到的错误。

7.

返回值

,系统调用的结果。

8.

I/O参数

,数据传送量、源数据地址,文件偏移量。

9.

文件参数

,当前目录、根目录。

10.

用户文件描述符表

,记录进程已打开的文件。

11.

限制字段

,对进程大小和进程可以写的文件大小限制。

12.

屏蔽字段

,进程建立文件的屏蔽码。

UNIX中进程的九种状态:

1.

用户运行

,运行在用户模式。

2.

内核运行

,运行在内核模式。

3.

准备运行在主存

,调度程序立刻调度去运行。

4.

在主存睡眠

,等到事件发生后才能运行,进程在主存中。

5.

准备运行

,被交换,进程准备运行时,交换程序要在内核调度它运行前把进程交换进入主存。

6.

睡眠

,被交换,进程正等待事件且已经被交换到外存中。

7.

被抢占

,进程正从内核模式返回到用户模式,但内核抢占它的执行,调度其他进程。

8.

被建立

,进程被新建立,尚未准备运行。

9.

撤离

,进程gg,但它给父进程留下一个记录以便其收集。




版权声明:本文为ToDong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。