操作系统学习随记3

进程管理

1. 进程的概念

一个描述计算机程序的执行过程和作为资源分配的基本单位,充分反映操作系统的执行并发、资源共享及用户随机的特点

1.1 程序的并发执行

  1. 程序(program)描述计算机所要完成的具有独立功能的,并在时间上按严格次序前后相继的计算机操作序列集合,是一个静态的概念。

程序的顺序执行,可以分为顺序执行和并发执行。CPU是通过时序脉冲来控制顺序执行指令的。

repeat<-M[PC]
    PC<-PC+1
    <Execute (instruction in IR)>
until CPU halt
  1. IR为指令寄存器,PC为程序计数器,M为存储器,程序的顺序性与计算机硬件的顺序性是一致的。一个具有独立功能的程序独占处理机直至最终结束的过程称为程序的顺序执行。具有如下特点:1)顺序性 2)封闭性 3)可再现性
  2. 多道程序系统中程序执行环境的变化 计算机需要能够同时处理多个具有独立功能的程序

1)独立性 2)随机性 3)资源共享性

程序的并发(concurrent)执行

一种同时操作技术。可进一步分为两种:第一种是多道程序系统的程序执行环境变化所引起的多道程序的并发执行;第二种并发执行是在某道程序的几个程序段中(例如几个程序)包含着一部分可以同时执行或顺序颠倒执行的代码。

综上所述,程序的并发执行可总结为:一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在客观上互相重叠,即一个程序段的执行尚未结束,另一个程序段的执行已经开始的这种执行方式。

程序的并发执行不同于程序的并行执行。程序的并行执行是指一组程序按独立的、异步的速度执行。并行执行不等于时间上的重叠。

S0
Cobegin
P1;P2;...;Pn
Coend
Sn

S0,Sn分别表示并发程序段P1,P2,...,Pn开始执行前和并发执行结束后的语句。

Bernstein提出了两个相邻语句S1、S2可以并发执行的条件

R\left ( S_{_{i}}\right )=\left \{ a_{1} ,a_{2},a_{3},...,a_{m}\right \}

W\left ( S_{_{i}}\right )=\left \{ b_{1} ,b_{2},b_{3},...,b_{n}\right \}

如果对于语句S1和S2,有

R\left ( S_{1} \right )\bigcap W\left (S _{2} \right )= \left \{ \phi \right \}

W\left ( S_{1} \right )\bigcap R\left (S _{2} \right )= \left \{ \phi \right \}

W\left ( S_{1} \right )\bigcap W\left (S _{2} \right )= \left \{ \phi \right \}

程序的并发执行所带来的影响

如果并发执行的各程序段中语句或指令满足上述Bernstein的3个条件,则认为并发执行不会对执行结果的封闭性和可再现性产生影响。但一般情况下,系统要判定并发执行的各程序段是否满足Bernstein条件是相当困难的。

有例子可证明之。 必须采取某些措施来制约、控制各并发程序段的执行速度。

用程序段作为描述其执行过程和共享资源的基本单位既增加操作系统设计和实现的复杂性,也无法反映操作系统所应该具有的程序段执行的并发性、用户随机性以及资源共享等特征。用程序作为描述其执行过程以及共享资源的基本单位是不合适的。需要一个基本单位。

1.2 进程的定义

定义各式各样,本质相同,主要注重进程是一个动态的执行过程这一概念。也可以这样定义进程:并发执行的程序在执行过程中分配和管理资源的基本单位。

进程和程序是两个既有联系又有区别的概念。

(1)进程是一个动态概念,程序则是一个静态概念。程序是指令的有序集合,没有任何执行的含义。进程则强调执行过程,它动态地被创建,并被调度执行后消亡。

(2)进程具有并发特征,而程序没有。进程具有独立性和异步性。不考虑资源共享的情况下,各进程的执行是独立的,执行速度是异步的。

(3)进程是竞争计算机系统资源的基本单位,从而其并发性受到系统自己的制约。制约就是对独立性和异步性的限制

(4)不同的进程可以包含同一程序,只要该程序所对应的数据集不同。

2. 进程的描述

描述程序执行活动的进程? 系统中需要有描述进程存在和能够反映其变化的物理实体,即进程的静态描述。由3部分组成:进程控制块(PCB),有关程序段和该程序段对其进行操作的数据结构集。进程的控制块详细说,进程的程序部分描述进程所要完成的功能。数据结构集是程序在执行时必不可少的工作区和操作对象。这两部分是进程完成所需功能的物质基础

2.1 进程控制块

进程控制块(PCB)包含一个进程的描述信息、控制信息及资源信息,有些系统中还有进程调度等待所使用的现场保护区。PCB集中反映一个进程的动态特征。

在创建一个进程时,首先创建其PCB,然后才能根据PCB中的信息对进程实施有效的管理和控制。当一个进程完成其功能后,系统则释放PCB,进程也随之消亡。

必需内容:

描述信息

  1. 进程名或进程标识号
  2. 用户名或用户标识号
  3. 家族关系

控制信息

  1. 进程当前状态    进程在活动期间可分为初始态、就绪态、执行态、等待状态和终止状态。任一进程在任一时刻只能处于这5种状态中的一种。
  2. 进程优先级
  3. 程序开始地址
  4. 各种计时信息
  5. 通信信息

资源管理信息

  1. 占用内存大小及其管理用数据结构指针
  2. 在某些复杂系统中,还有对换或覆盖用的有关信息
  3. 共享程序段大小及起始地址
  4. 输入输出的设备号,所要传送的数据长度、缓冲区地址、缓冲区长度及所用设备的有关数据结构指针等。
  5. 指向文件系统的指针及有关标识等

CPU现场保护机构  当前进程因等待某个事件而进入等待状态或因某种事件发生被中止在处理机上的执行时,为了以后该进程能在被打断处恢复执行,需要保护当前进程的CPU现场。

PCB中设有专门的CPU现场保护机构,以存储退出执行时的进程现场数据。

由于PCB中包含较多的信息,因此,一个PCB表往往要占据较大的存储空间。在有的系统中,为了减少PCB对内存的占用量,只允许PCB中最常用的部分,如CPU现场保护、进程描述信息和控制信息等常驻内存。其他部分则存放于外存之中,待该进程将要执行时与其他数据一起装入内存。

2.2 进程上下文

程序段和数据集在内的上下文(context)的概念

进程上下文实际上是进程执行过程中顺序关联的静态描述。进程上下文是一个与进程切换和处理机状态发生交换有关的概念。另外,进程执行过程中还经常出现调用子程序的情况。需要记忆

进程上下文是一个抽象的概念,它包含了每个进程执行过的、执行时的以及待执行的指令和数据,在指令寄存器、堆栈和状态字寄存器等中的内容。

已执行过的进程指令和数据在相关寄存器与堆栈中的内容称为上文,正在执行的...的内容称为正文,待执行的...称为下文。

在不发生进程调度时,进程上下文的改变都是在同一进程内进行的,此时,每条指令的执行对进程上下文的改变较小,一般反映为指令寄存器、程序计数器以及保存调用子程序返回接口用的堆栈值等的变化。

同一进程的上下文的结构由与执行该进程有关的各种寄存器中的值、程序段经过编译后形成的机器指令代码集(或称正文段)、数据集及各种堆栈值与PCB结构构成。

UNIX System V中,进程上下文由用户级上下文、寄存器上下文以及系统级上下文组成。

用户级上下文由进程的用户程序段部分编译而成的用户正文段、用户数据和用户栈等组成。

寄存器上下文则由程序寄存器(PC)、处理机状态字寄存器(PSW)、栈指针和通用寄存器的值组成。其中,PC给出CPU将要执行的下条指令的虚地址;PSW给出机器与该进程相关联时的硬件状态;栈指针指向下一项的当前地址;通用寄存器则用于不同执行模式之间的参数传递等。

系统级上下文又分为静态部分与动态部分。

静态部分包括PCB结构、将进程虚地址空间映射到物理空间用的有关表格和核心栈,核心栈主要用来装载进程中所使用的系统调用的调用序列。

动态部分是与寄存器上下文相关联的。层次概念体现在动态部分中,即动态部分可以看成是一些数量变化的层次组成的。其变化规则满足先进后出的堆栈方式,每个上下文层次在栈中各占一项。、

2.3 进程上下文切换

进程上下文切换发生在不同的进程之间而不是同一个进程内。

一般包含3个部分,并涉及3个进程。第一部分为保存被切换进程的正文部分至有关存储区。第二部分是操作系统进程中有关调度和资源分配程序执行,并选取新的进程。第三部分则是将被选中进程的原来被保存的正文部分从有关存储区中取出,并送至有关寄存器与堆栈中,激活被选中进程执行。

进程上下文切换过程涉及谁来保护和获取进程的正文问题,也涉及系统调度和分配程序。

为了提高系统执行效率,有的计算机在设计时采用了多组寄存器技术。即切换时,不保留被切换进程上下文的正文,但保留切换进程执行时所使用的寄存器。

为了进一步提高执行效率,又提出了线程的概念。

2.4 进程空间与大小

任一进程,都有一个自己的地址空间,该空间称为进程的进程空间或虚空间。其大小只与处理机的位数有关。程序的执行都在进程空间内执行。用户程序、进程的各种控制表格等都按一定的结构排列在进程空间中。另外,在UNIX及Linux等操作系统中,进程空间还被划分为用户空间和系统空间两大部分。用户程序在用户空间内执行,操作系统内核程序在系统空间内执行。

计算机系统还通过程序状态寄存器等设置不同的执行模式,即用户模式和系统模式来进行保护。用户执行模式和系统执行模式也分别被称为用户态和系统态。

3. 进程状态及其转换

3.1 进程状态

一个进程的生命期可以划分为一组状态。在进程的生命期内,一个进程至少具有5种基本状态:初始态、执行状态、等待状态、就绪状态和终止状态。

处于就绪状态的进程已经得到除CPU之外的其他资源,只要由调度得到处理机,便可立即投入执行。

在有些系统中,为了有效地利用内存,就绪状态又可进一步分为内存就绪状态和外存就绪状态。

在单CPU系统中,任一时刻处于执行状态的进程只能有一个。只有处于就绪状态的进程经调度选中之后才可进入执行状态。

在某些操作系统中,一个进程在其生命期内的执行过程中,总要涉及用户程序和操作系统内核程序两部分。因此,进程的执行状态又可进一步划分为用户执行状态和系统执行状态。原因是要把用户程序和系统程序区分开,以利于程序的共享和保护。

进程因等待某个事件发生而放弃处理机进入等待状态。显然,等到状态可根据等待事件的种类而进一步划分为不同的子状态,例如内存等待、设备等待、文件等待和数据等待等。这样做的好处是系统控制简单,发现和唤醒相应的进程较为容易。

3.2 进程状态转换

5个基本状态的转换关系。事实上,进程的状态转换是一个非常复杂的过程。从一个状态到另一个状态的转换除了要使用不同的控制过程,有时还要借助于硬件触发器才能完成。

4. 进程控制

进程控制,就是系统使用一些具有特定功能的程序段来创建、撤销进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。

把系统下执行的某些具有特定功能的程序段称为原语。原语可分为两类:一类是机器指令级的,其特点是执行期间不允许中断,是一个不可分割的基本单位;另一类是功能级的,其特点是作为原语的程序段不允许并发执行。这两类原语都是在系统态下执行,且都是为了完成某个系统管理所需要的功能和被高层软件所调用。

显然,系统在创建、撤销一个进程以及要改变进程的状态时,都要调用相应的程序段来完成这些功能。这些程序段必须是原语。用于进程控制的原语有创建原语、撤销原语、阻塞原语和唤醒原语等。

4.1 进程创建与撤销

  1. 进程创建 有以下几种:(1)由系统程序模块统一创建 (2)由父进程创建 由系统统一创建的进程之间的关系是平等的,它们之间一般不存在资源继承关系。而父进程与其创建的进程之间则存在隶属关系,且互相构成树形结构的家族关系。子进程可以继承其父进程所拥有的资源。必须用创建原语来实现。创建原语扫描系统的PCB链表,在找到一定的PCB表之后,填入调用者提供的有关参数,最后形成代表进程的PCB结构。
  2. 进程撤销 以下几种情况:(1)该进程已完成所要求的功能而正常终止;(2)由于某种错误导致非正常终止;(3)祖先进程要求撤销某个子进程。无论哪一种情况,进程都必须释放它所占用的各种资源和PCB结构本身,以利于资源的有效利用。另外,当一个祖先进程撤销某个子进程时,还需审查该子进程是否还有自己的子孙进程,若有的话,还需撤销其子孙进程的PCB结构并释放它们所占有的资源。 撤销原语首先检查PCB进程链或进程家族,寻找所要撤销的进程是否存在。如果找到了所要撤销的进程的PCB结构,则撤销原语释放该进程所占有的资源之后,把对应的PCB结构从进程链或进程家族摘下并返回给PCB空队列。如果被撤销的进程有自己的子进程,则撤销原语先撤销其子进程的PCB结构并释放子进程所占用的资源之后,再撤销当前进程的PCB结构并释放其资源。

4.2 进程的阻塞与唤醒

实现进程的执行状态到等待状态,又由等待状态到就绪状态转换的两种原语,即阻塞原语与唤醒原语。

阻塞源于在一个进程期待某一事件发生,但发生条件尚不具备时,则该进程自己调用来阻塞自己。阻塞原语在阻塞时,先中断处理机和保存该进程的CPU现场。然后将被阻塞进程置“阻塞”状态后插入等待队列中,再转进程调度程序选择新的就绪进程投入运行。

当等待队列中的进程所等待的事件发生时,等待该事件的所有进程都将被唤醒。处于阻塞状态的进程不可能自己唤醒自己。唤醒有两种方法:一种是由系统进程唤醒。另一种是由事件发生进程唤醒。当由系统进程唤醒等待进程时,系统进程统一控制事件的发生并将“事件发生”这一消息通知等待进程。从而使得该进程因等待事件已发生而进入就绪队列。

由事件发生进程唤醒时,事件发生进程和被唤醒进程之间是合作关系。因此,唤醒原语即可被系统进程调用,也可被事件发生进程调用。调用唤醒原语的进程称为唤醒进程。

唤醒原语首先将被唤醒进程从相应的等待队列中摘下,将被唤醒进程置为就绪状态之后,送入就绪队列。在把被唤醒进程送入就绪队列之后,唤醒原语既可以返回原调用程序,也可以转向进程调度,以便让调度程序有机会选择一个合适的进程执行。

5. 进程互斥

5.1 资源共享所引起的制约

临界区

把不允许多个并发进程交叉执行的一段程序称为临界部分(critical section)或临界区(critical region)。临界区是由属于不同并发进程的程序段共享公用数据或公用数据变量而引起的,临界区不可能用增加硬件的方法来解决。因此,临界区也可以被称为访问公用数据的那段程序。

间接制约

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值