文章目录
思考题与练习题
选择与填空
- 操作系统提供给应用程序的接口是: (
系统调用
) - wait(s) 操作中的block(s.L) 阻塞的进程是(
调用wait(s)的进程
) - 在一个单处理系统中存在5个进程, 处于就绪队列中的就绪进程数最多为(
5个
) - 若记录型信号量的wait(s)和signal(s)操作的信号量s的初始值为2, 当前值为-1, 则在s的阻塞队列中处理阻塞状的进程数为: (
1个
)
- 解析: 假定有p1, p2, p3,…pn 个进程, p1 进入临界区, 此时s=2-1=1, p1可以访问临界资源; 同时p2试图进入临界区, s=1-1=0, p2依然可以访问临界资源; 此时p3试图进入临界区, 此时s=0-1=-1,也就是当前值, 此时执行 block(s.L), s.L中只有p3这一个进程 ,处于阻塞态的也只有p3这一个进程, 处于执行态的有p1和p2两个进程 , 处于就绪态的就是n-3个进程了
- 进程是由
正文段, 用户数据段, 进程控制块
构成的实体 - 进程的3种基本状态是:
就绪态, 执行态, 阻塞态
- 整型信号量的值只能被
wait操作
和signal操作
改变, 不允许系统中的其它程序改变信号量的值 - 临界区是指访问
临界资源
的代码
简答题
1. 什么是进程? 说明进程与程序之间的区别和联系(p44)
- 进程:
- 进程是允许并发执行的程序的某个数据集合上的运行过程
- 进程由正文段, 用户数据段和进程控制段共同组成的执行环境
- 进程与程序的区别:
- 程序是静态的, 进程是动态的
- 程序是永久性的, 进程是暂时性的
- 两者存在的实体不同, 程序是指令的集合, 进程是包含了正文段, 用户数据段和进程控制块的实体
- 两者的联系:
- 进程是程序的一次执行, 进程总是对应至少一个特定的程序, 执行程序的代码.
- 一个程序可以对应多个进程, 同一个程序可以不同的数据集合上运行, 因此构成若干不同的进程
- 多个进程可以并发的执行相同的程序代码, 而同一个进程能顺序地执行几个程序.
2. 操作系统在什么时候创建进程? 操作系统如何创建一个进程. ?(p52)
- 操作系统通常在下列情况下创建进程:
- 用户登录
- 作业调度
- 提供服务
- 应用请求
- 调用创建新进程的系统调用来创建进程的一般步骤如下:
- 申请空白PCB(PCB即进程控制块)
- 为新进程分配资源
- 初始化进程控制块
- 将新进程插入就绪态队列
3. 时钟中断信号是如何产生的?(p60) 时钟中断处理程序(时钟驱动程序)的功能是什么?(p60)
- 时钟中断信息的产生:
- OS时钟管理硬件的功能是按指定的时间间隔产生时间中断, 测量逝去的时间, 并触发与时间有关的操作.
- 主要由3部分构成: 晶振, 计数器, 寄存器
- 晶振能够产生固定频率的脉冲, 每产生一次脉冲, 计数器的值减1, 当计数器的值为0时, 产生一次时钟中断信号, 保持寄存器的值再次赋值给计数器.
- 时钟驱动程序的功能:
- 维护日期和时间
- 对CPU使用情况进行记账
- 递减当前进程在一个时间片内的剩余执行时间,并检查是否为零, 防止进程运行超时.
4. 说明单重中断的处理过程(p57, 图2-8即是)
假定中断处理过程中不再响应新近产生的中断信息, 直到本次中断处理完毕. 同时假定中断处理完毕,CPU返回被中断的程序断点继续执行被中断的程序
CPU在反复执行指令的过程中,每执行完一条指令, 都会检测是否有外部中断信号的到来. 如果检测到中断信息, 则转中断处理过程.
关键过程过程如下:
- 系统关闭中断, 保护断点,把当前要执行的下一条指令的地址保存到内存中, 以便中断时返回,能把这个地址恢复到程序计数器PC中, 使被中断的程序从断点处开始继续执行.
- 转中断处理程序, 保护现场
- 执行特定的中断服务子程序
- 恢复现场
- 开中断
- 中断返回 继续执行被中断的程序
5. 进程具有哪些特征?(p45)
进程是操作系统管理的产体, 有以下几个特征:
- 并发性
- 动态性
- 异步性
- 独立性
- 结构特征
6.什么是线程? 为什么为引入线程?(p81)
- 线程是进程的一个实体, 是被
系统独立调度
和分派的基本单位
. - 由于进程是独立执行的基本单位, 又是资源拥有者,在进程创建, 撤销和切换时需要较大的时空开销, 所以系统中所设置的进程数和进程切换的频率都受到了限制, 影响了操作系统并发程度的提高. 引入线程作为独立调度和分派的单位, 不独立拥有资源, 而与其他线程共享同一进程的资源, 减小了系统的时空开销.
7. 实现进程互斥的基本原理是什么?(p66)
- 在临界区前面加
进入区代码
, 在临界区后加退出区代码
进入区代码
在临界区代码之前
执行, 检查进程是否可以进入临界区,并对临界区进行'加锁'
.退出区代码
在临界区代码之后
执行, 完成释放临界区访问权
的功能
综合应用
有两个进程pA, pB合作解决文件打印问题: pA将文件记录从磁盘读入主存的缓冲区, 每执行一次读一个记录; pB将缓冲区的内容打印出来, 每执行一次打印一个记录. 缓冲区的大小等于一个记录的大小. 请用记录型信号量机制的wait(s)和signal(s)操作来保证文件的正确打印, 并写出同步代码.
# 声明变量
type semaphore = record
Value: integer;
L: list of process;
end
# 定义wait(s)函数
procedure wait(s)
var s; semaphore;
begin
s.value = s.value-1;
if s.value < 0 then block(s.L)
end.
# 定义signal(s)函数
procedure signal(s)
var s: semaphore;
begin
s.value = s.value+1
if s.value <=0 then wakeup(s.L)
end.
# 执行代码
var s: semaphore;
s.value = 1
Begin
Repeat
wait(s) // 调用wait()函数
pA();
signal(s);
pB();
Until false;
End