当前位置:
文档之家› 《操作系统概念》中文版chapter4
《操作系统概念》中文版chapter4
6
进程控制块示意图
7
CPU在进程间的切换图
8
进程调度队列
作业队列 - 包括系统中的所有进程 就绪队列 - 所有驻留在内存中就绪的等待运 行的进程列表. 设备队列 - 所有等待I/O设备的进程列表 进程在不同的队列之间移动
9
就绪队列和各种I/O设备队列
10
表示进程调度的队列图
11
调度程序
长期调度程序(或作业调度) - 从作业池中 长期调度程序 选择进程,并将它们装入内存以执行. 短期调度程序(或CPU调度)- 从就绪可执 短期调度程序 行的进程中选择进程,并为其中之一分配CPU. CPU
30
4.6 客户机-服务器系统通信
套接字(sockets) 远程过程调用(Remote Procedure Calls, RPC) 远程方法调用(Remote Method Invocation, RMI)
31
套接字(Sockets)
套接字可定义为通信的端点. 套接字由IP地址和端口号连接组成 套接字161.25.19.8:1625指的是主机 161.25.19.8上的1625端口 通信由一对套接字组成
操作系统概念
第四章:进程
本章主要内容
进程概念 进程调度 进程操作 进程协作 进程间通信 客户机-服务器系统通信
2
4.1 进程概念
一个操作系统执行一系列的程序
批处理系统 - 作业 分时系统 - 用户程序或任务
在本书中,作业与进程几乎是可以互换的 进程 - 执行中的程序;进程执行必须以一种 有序的方式来进行 进程包括:
} else if (pid == 0) {
execlp("/bin/ls", "ls", NULL);
} else {
wait(NULL); printf("Child Complete"); exit(0);
}
}
18
一个典型的UNIX系统中的进程树
19
进程终止
当进程完成执行最后的语句并使用系统调用exit请求操 作系统删除它时,进程终止.此时
程序计数器 堆栈 数据段
3
进程状态
进程在执行时会改变状态,每个进程可能处于 下列状态之一
新建 运行 等待 就绪 终止
4
进程状态转换图
5
进程控制块(PCB)
每个进程在OS内用进程控制块来表示,它包 含与特定进程相关的许多信息
进程状态 程序计数器 CPU寄存器 CPU调度信息 内存管理信息 计帐信息 I/O状态信息
父进程与子进程共享所有资源 子进程共享父进程中的部分资源 父进程与子进程不共享任何资源
当进程创建新进程时,有两种执行可能
父进程与子进程并发执行 父进程等待,直到某个或全部子进程执行完毕
16
进程创建(续)
地址空间
子进程是父进程的复新的进程 exec系统调用在fork调用后用新程序来取代进 程的内存空间
25
间接通信
对于间接通信,消息通过邮箱或端口来发送和接收.
每个邮箱都有一个惟一的标识符 进程只有共享一个邮箱才能相互通信
通信线路具有如下属性
只要一对进程中的两个成员共享一个邮箱,那么就建立 了它们之间的通信线路 一个线路可以与两个或多个进程相关联 两个通信进程之间可有多个不同的线路,每个线路对应 于一个邮箱 线路可以是单向的或双向的
解决办法
允许一条线路与两个以上的进程关联 任一时刻只允许一个进程执行接收操作 允许系统选择接收者,并且可以告诉发送者谁 是接收者
28
同步
消息传递可以是阻塞或非阻塞的 阻塞的消息传递也称为同步消息
阻塞send:发送进程阻塞,直到消息为接收进 程或邮箱所接收 阻塞receive:接收者阻塞,直到有消息可用
22
4.5 进程间通信
进程间通信(Interprocess Communication, IPC)是 用于进程间通信和行为同步的机制 消息系统 - 允许进程间相互通信而不需要利用共享变 量 IPC工具至少提供两个操作
发送(消息) 接收(消息)
如果进程P和Q需要通信,那么他们需要
相互建立通信线路 通过发送/接收来交换消息
非阻塞的消息传递也称为异步消息
非阻塞send:发送进程发送消息并再继续操作 非阻塞receive:接收者收到一个有效消息或无 效消息
29
缓冲
通信线路用消息队列来保存消息,有以下三种 实现方式
零容量:队列中的最大长度为0.这种情况发送 零容量 者必须阻塞,直到接收者接收消息 有限容量:队列的长度为有限的n;因此,最多 有限容量 只能有n个消息难留其中. 无限容量:队列长度可以无限;因此,不管多 无限容量 少消息都可在其中等待.发送者不阻塞
32
使用套接字通信
33
远程过程调用(RPC)
RPC设计成抽象过程调用机制,用于通过网络 进行连接的系统. 存根(Stubs)- RPC语言允许客户机调用位 于远程主机上的过程,就如同调用本地过程一 样.RPC系统通过在客户机端提供存根来做到 这一点. 客户机存根定位服务器,并编组(marshalls) 调用参数. 服务器存根接收到调用消息,解析参数,并执 行过程.
24
直接通信
需要通信的进程必须明确地命名通信的接收者 或发送者
send(P, message) - 发送消息至进程P receive(Q, message) - 从进程Q接收消息
通信线路具有以下属性
通信线路自动建立 一个线路只与两个进程相关 每对进程之间只有一个线路 通信线路可能是单向的,但通常情况下是双向 的
17
fork另外一个进程的C程序
#include <stdio.h> void main(int argc, char *argv[]) {
int pid; /*fork another process */ pid = fork(); if (pid < 0) {
fprintf(stderr, "Fork Failed"); exit(-1);
26
间接通信(续)
操作
创建一个新邮箱 通过该邮箱发送和接收消息 删除邮箱
原语
send(A, message) - 发送消息给邮箱A receive(A, message) - 从邮箱A接收消息
27
间接通信(续)
邮箱共享
P1, P2, P3共享邮箱A P1发送消息;P2和P3接收 谁将获得这个消息?
34
远程过程调用的执行过程
35
远程方法调用(RMI)
RMI是java的一个类似RPC的功能. RMI允许一台计算机上的Java程序调用远程对 象的方法.
36
编排参数
37
作业
P96 4.2 P97 4.4, 4.5, 4.6, 4.7, 4.8
38
�
信息共享(Information sharing) 加快计算(Computation speed-up) 模块化(Modularity) 方便(Convenience)
21
生产-消费者问题
生产者进程产生信息,以供消费者进程消费.
无限缓冲(unbounded buffer) - 对缓冲区大 小没有实际限制 有限缓冲(bounded buffer) - 假设缓冲区大 小固定
通信线路的实现
物理方式(如,共享内存,硬件总线) 逻辑方式(如,逻辑工具)
23
进程间通信必须解决以下实际问题
通信线路如何建立? 一个通信线路能否与两个以上进程关联 每一对通信的进程之间允许存在多少通信线路? 通信线路的能力是什么? 通信线路容纳的消息的长度是固定还是可变的? 线路是单向的,还是双向的?
14
上下文切换
将CPU切换到另一进程需要保存原来进程的状 态并装入新进程的保存状态. 上下文切换时间是额外开销,因为切换时系统 并不能做什么有用的工作. 上下文切换时间与硬件支持密切相关.
15
4.3 进程操作 - 进程创建
父进程创建子进程,子进程又创建其他进程, 从而形成了进程树 三种资源共享方式
12
增加了中期调度的队列图
13
调度程序(续)
短期调度程序执行频率非常高(毫秒级), 执行效 率要非常快 长期调度程序执行得并不频繁(秒,或分为计量单位) 执行过程也许比较慢 长期调度程序控制多道程序设计的程序,即内存中的 进程数量 绝大多数进程可以分为
I/O为主的进程 - 在执行I/O方面比执行计算要花费更多 I/O为主的进程 的时间 CPU为主的进程 CPU为主的进程 - 很少产生I/O请求,与I/O为主的进程 相比将更多的时间用在执行计算上.
进程可以返回数据到其父进程(通过系统调用wait) 进程资源会被OS所释放
在以下情况下,父进程可以通过abort系统调用终止另 一个进程
子进程使用了超过它所分配到的一些资源 分配给子进程的任务已不再需要 父进程退出 级联终止
20
4.4 进程协作
如果一个进程不能影响或被在系统内执行的其 他进程所影响,那么该进程是独立的. 如果一个进程能影响或被在系统内执行的其他 进程所影响,那么该进程是协作的. 进程协作的优点