操作系统——进程管理

来源:互联网 发布:出身不好知乎 编辑:程序博客网 时间:2024/05/21 21:37



进程管理

4.1 什么是进程

被执行的指令称为代码段。被加工的数据段称为源程序。生成的目标文件也是数据段。

进程是程序的一次执行过程。进程包括数据段和代码段,还有一个进程的控制块PCB。

         进程具有以下特性:动态性,并发性,独立性(系统中独立存在的实体)。进程是操作系统分配资源的基本单位动态性和并发性使进程的具有同步、互斥和死锁功能一个程序可以对应多个进程,但一个进程只能对应一个程序

4.2 进程状态变迁

就绪(Ready)状态:准备运行(运行所需要的资源都已经满足,就等CPU来运行)。

阻塞(Blocked)状态:因为等待I/O,或其他事件,处于暂停的状态。

运行状态:CPU执行进程的过程。

4.3 进程的组成

PCB结构——进程控制块是进程存在的唯一的标记,PCB是一个数据结构。记录进程的全部信息(进程名,标识符等信息)。

正文段(代码段)——记录进程的代码。

数据段——进程的数据。

PCB通过指针指向数据段和代码段。

4.3.1 进程控制块

一个进程只有一个PCB,PCB是进程存在与否的唯一标记。

描述信息:进程名字,标识符(PID),用户组号和用户号反映进程家族关系。

管理信息:管理进程的状态、优先级(为调度所用)、正文段、数据段。

资源清单:包括主存量,外设,优先级等

现场保护区:保护进程的上下文。

其他:包含一些其他信息(例如指向下一个PCB链接指针)。

4.3.2 实例

UNIX系统中,把proc结构,正文段和数据段称为进程映像。所以定义UNIX的进程为进程映像的执行过程。

4.4 进程上下文

研究进程上下文的目的是知道进程调度时应该保存哪些信息。

4.5 进程的控制

4.5.1 内核和微核

内核(Kernel):OS中最靠近硬件的部分。内核中包含进程控制的软件模块

         微核(micro kernel):是把内核进一步细化,是内核中靠近硬件的部分,内核中包含很小的软件模块(原语:直接操作硬件的模块)。相当于把内核中直接操作硬件的部分软件叫做微核。所以微核的最大好处是便于OS在不同的硬件上的移植。

     微核提供四类小型服务

  1. 进程间通信(IPC,InterProcess Communication);
  2. 底层输入输出;
  3. 有限调度和有限进程控制;
  4. 最低级的存储管理。

        内核或微核提供核外调用的过程或函数称为原语(primitive)。原语是一段用机器指令编写的完成特定功能的程序,在执行过程中不允许中断。

4.5.2 进程控制原语

创建原语create:生成一个新的进程。例如UNIX中的fork()调用。

撤消原语kill:撤销一个进程。例如UNIX中的kill()。

唤醒原语wakeup:

阻塞原语block:

4.6 进程互斥

4.6.1 临界资源

        一次只能由一个进程使用,这样的资源称为临界资源(critical resource),使用临界资源的那段程序称为临界段(critical section)。从进程角度看,临界资源被各个进程互斥且顺序地使用。

4.6.2 互斥工具——PV操作(即可互斥,也可同步)

lock为true表示该资源正在被使用,lock为false表示该资源空闲。

         PV操作原语是荷兰科学家提出的互斥工具。把临界资源抽象成信号量,信号量有两个字段,一个为value,开始为1,当有程序使用它时,把value置为0,表示这个资源正在被使用;另一个为list,开始也为空闲,当资源被使用时(该进程进入阻塞状态),恰巧又有个进程申请资源,则把进程排列到list上,同时把value置为-1,-1表示后面有程序需要使用这个资源。

P(申请资源)操作的物理意义:某进程申请一个资源,如果申请成功则返回;申请失败,则挂在该资源的信号量上。

V(归还资源)操作的物理意义:如果没有进程等待该资源,则返回;如果有进程等待,把等待的进程从list移到就绪队列中。

  1. 识别临界资源,一看是否被共享,二看是否有排他性使用要求;
  2. 临界段代码应尽量短小,不能由死循环;
  3. P和V原语应分别紧靠临界段的头尾部。

4.7 进程同步

4.7.1 PV操作的同步机制

生产者和消费者(producer/consumer)问题是经典的进程同步问题。生产者和消费者同步,生产者之间互斥,消费者之间互斥。

4.7.2 条件临界区

4.7 .3管程

         把分散在各个进程中的同步段代码集中起来管理的想法引出管程(monitor)的机制。资源及其对资源的操作被认为是一种抽象数据类型,进程同步是发生在这种抽象数据类型上的事件。管程是关于资源抽象数据类型的一种实现机制,因为它对进程同步相当有效。

        管程(monitor);线程(thread);进程(process);过程(procedure);例程(routine)。

4.8 进程间通信

        信号量上的PV操作是最简单的进程间通信

4.8.1 软中断

        软中断是通过发送规定的信号到指定进程。软中断是对硬终端的一种模拟。

4.8.1.2 信号发送

        供用户进程发送软中断信号的系统调用时kill(pid,sig),其中pid对对方进行的标识号,sig为信号名称。

4.8.1.3 信号接收与处理

        UNIX系统V有一条系统调用signal(sig,func)用于软中断信号的接收与处理。Sig为信号名,func为对该信号的处理方式。

4.8.2 共享存储(在主存上实现共享)

        把需要交换的信息发送到某一约定的存储区域,接收进程从该区域读取信息,从而实现2个或2个以上进程间的通信。这种通信方式称为共享存储。

        涉及共享区的系统调用通常有创建、附接、断接、状态查询。

4.8.3 共享文件(在外存上实现共享)

        利用共享文件进行通信的方式,在UNIX系统中称为管道通信。

4.8.3.1 PIPE机制

//Pipe的语法格式:    int pipe(fildes)    int fildes(2)
        读进程可以使用fildes[0],把管道中的数据取走。

        写进程可以使用filder[1],往管道中写入数据。

4.8.3.2 PIPE通信

        管道的最简单用法是在UNIX Shell命令中用符号“|”把两个相关命令连接起来。

        例如:who|sort|more;who表示有谁在系统中?显示各个联机用户名;sort表示分类,按字母顺序分类排列;more表示分屏显示

4.8.4.3 信箱

        信箱是两个进程为了达到通讯的目的而使用的工具。

        信箱通信是构造电子邮件系统的基础。

        缓冲容量问题:有限容量的情况下,生产者和消费者的进程通信产生了同步消息传递。

        容量为零的情况下,没有缓冲区。

        无限容量的情况下,发送消息和接收消息的进程通信,是异步消息传递。

4.8.4.5 微核中的IPC

        Mach采用消息传递(message passing)方式通信

        Port集(portset)概念

        Message passing通信方式使Mach更为适合于松耦合的分布式多机体系结构。

        Mapping(映射)方法和thread hand off(线程转手调度)方法。


4.9 进程调度

4.9.1 概述

        剥夺方式(preemptive mode)和非剥夺方式(non-preemptive mode)。

  • 剥夺方式是指当就绪队列中出现优先级高的进程时,进程调度则把运行中的优先级低的进程剥夺,使优先级高的进程开始运行
  • 非剥夺方式是指优先级高的进程不剥夺,静静等待运行进程的结束,再运行这个进程

        周转时间TT(turn around time)和平均周转时间ATT(average turn around time)。

        响应时间RT(response time)

4.9.2.1 先来先服务(FCFS:first come first service)

        根据队列中的顺序依次运行进程。FCFS本质上是非剥夺式的。

4.9.2.2 最短周期优先(Shortest Burst First,SBF)

        SBF是把当前就绪队列中的下一个CPU周期最短的那个进程调度运行。即运行时间较短的进程优先被调度运行。

剩余最短优先:当新来的进程到来时,需要和正在运行的进程进行比较,若剩余时间大于新来的进程运行时间,则需要优先运行新来的进程。

4.9.2.3 优先级法

        优先级调度的基本思想是,把当前处于就绪队列中优先级最高的进程投入运行,而不管各进程的下一个CPU周期的长短和其他因素。

  优先级是如何确定的?

        静态确定:进程运行前,根据某种或其他因素而算定。

        动态确定:进程运行过程中,根据某种原则而确定的。

4.9.2.4 轮转法

        轮转法是按一定时间片(记为q)轮番运行各个进程。Q的大小不仅影响CPU的利用率,也影响平均周转时间。

4.9.3 调度实现

  1. 保存下行进程的上下文;
  2. 按上述调度算法从就绪队列选出上行进程;
  3. 恢复上行进程的上下文,此时上行进程由断点处开始执行而成为现行进程。

4.10 进程死锁

4.10.1 死锁概念

        死锁是多个进程竞争资源而形成的一种僵持局面。

        死锁产生的根本原因有二,一是系统内的资源数量不足;二是进程推进的顺序不当。

        系统某一时刻的状态可用进程资源图(PRG,process resource graph)表示。

        系统进锁——全部进程处于死锁。

        环路上的进程有可能死锁,也有可能不死锁。

    死锁的产生条件

  1. 互斥使用;(资源本省的性质)
  2. 保持和请求;(进程的行为)
  3. 不剥夺性;(系统的规定)
  4. 循环等待。(进程和资源之间的关系)

4.10.2 死锁的排除(预防,避免,检测)

        死锁的排除就是破坏死锁产生的条件。

4.10.2.1 死锁预防——破坏死锁的必要条件

        资源的静态分配:进程运行之前,把它所需的资源全部分配给它。缺点是资源利用率低。

        资源编序:进程申请资源必须从低到高(破坏环路条件)。缺点是资源的序号不容易合理化。

4.10.2.2 死锁避免——银行家算法

        定义:在T时刻系统是安全的或系统处于安全状态,仅当存在一个进程序列<p1,p2...pn>,对于进程pi(i=1,2,3...)满足:,称该序列为安全序列。

        银行家算法:该算法判断当前资源分配是否是会导致系统进入不安全状态,若会则拒绝分配。

4.10.2.3 死锁检测

        很多实际操作系统都采用死锁检测算法。检测到死锁时,则进行死锁解除。

4.10.2.4 死锁解除

方法一:撤销处于死锁状态的进程并收回它们的资源。

方法二:剥夺资源的方法。

方法三:进程回退。



0 0
原创粉丝点击