第1章 操作系统概述
基本没有考点
第2章 处理器管理
1、处理器的两个状态以及指令
-
指令系统
(1) 数据处理类指令;
(2) 转移类指令;
(3) 数据传送类指令;
(4) 移位与字符串指令;
(5) I/O类指令。 -
特权指令 & 非特权指令
特权指令是指只能提供给操作系统的核心程序使用的指令,如启动I/O设备、设置时钟、控制中断屏蔽位、清主存、建立存储键,加载PSW等。
非特权指令:应用程序可以使用的指令
-
用户态&核心态
处理器状态的转换
1) 用户态→系统态:
(1)程序请求操作系统服务;
(2)程序运行时产生中断;
(3)程序运行时产生异常。**2)系统态→用户态:**加载程序状态字(特权指令)
◼ **程序状态字PSW:**运行程序的一组动态信息
◼ 每个程序都有一个与其执行相关的PSW,每个处理器都设置一个PSW寄存器。程序占有处理器执行,它的PSW将占有PSW寄存器 。
◼ 用于OS在用户态与系统态之间的转换。
2、了解中断技术
-
中断源分类
◼ 外部中断:又称为中断或异步中断,是指来自于处理器之外的中断信号,包括时钟中断、键盘中断、它机中断和外部设备中断等。
◼ 内中断:又称为异常或同步中断,是指来自于处理器内部的中断信号,通常是由于在程序执行过程中,发现与当前指令相关联的、不正常的或错误的事件。可细分为:
① 访管中断:执行系统调用
② 硬件故障中断:电源失效、奇偶校验错误等
③ 程序性异常:非法操作、地址越界、页面故障、除数为零等
3、进程的三态,不考线程
4、处理器调度的三个层次
-
高级调度
➢ 作用:选择外存上处于后备队列的一个或几个作业调入内存、分配必要资源 ,并将新创建的进程排在就绪队列中。
-
低级调度
➢ 作用:从就绪队列中选择一个进程,分配处理机,执行进程。
-
中级调度
➢ 作用:负责进程在内存和外存对换区之间换进换出,是内存对换功能的一部分。
➢ 目的:提高内存利用率和系统吞吐量
5、调度算法,会求带权、平均带权等计算题
6、作业调度和低级调度算法
周转时间=完成时间-到达时间
平均周转时间 = 周转时间/作业数
带权时间=周转时间/cpu执行时间
平均带权周转时间 = 带权周转时间/cpu执行时间
-
先来先服务 SCFS
优点:易于实现,优待长作业
缺点:效率不高
特点:
(1) 比较有利于长作业,而不利于短作业。
(2) 有利于CPU繁忙的作业,而不利于I/O繁忙的作业。
(3) 简单公平 -
最短作业优先算法 SJF
◼ 优点:
比FCFS改善平均周转时间和平均带权周转时间,缩短作业的等待时间;
提高系统的吞吐量;
◼ 缺点:
对长作业非常不利,可能长时间得不到执行;
未能依据作业的紧迫程度来划分执行的优先级;
难以准确估计作业(进程)的执行时间,从而影响调度性能。
存在饥饿现象 -
最短剩余时间优先 SRTF
-
最高响应比优先算法 HRRF
响应比=1+等待时间/执行时间
• 短作业容易得到较高响应比,
• 长作业等待时间足够长后,也将获得足够高的响应比,
• 饥饿现象不会发生。 -
优先权调度算法
-
时间片轮转调度算法
-
多级反馈队列调度算法
第3章 同步、通信与死锁
主要是同步和死锁,编程题
一、生产者--消费者问题
类型1
1.问题描述
系统中的进程:n个生产者,m个消费者共享k个缓冲区
2. 问题分析
(1)互斥:缓冲池
(2)同步:缓冲池未满,生产者可将消息送入缓冲池;缓冲池未空,消费者可从缓冲池取走一个消息。
(3)进程间需要交换信息
3.信号量设计
(1)缓冲区互斥信号量(公用):mutex
(2)生产者信号量(私有):empty 空缓冲数量
(3)消费者信号量(私有):full 满缓冲数量
4.算法设计
item B[k];
semaphore empty=k; //可以使用的空缓冲区,empty=0表示缓冲区满
semaphore full=0; //已经占用的缓冲区,full=0表示缓冲区为空
//缓冲区内可以使用的产品数
semaphore mutex=1; //互斥信号量
int in=0;
//放入缓冲区指针
int out=0;
//取出缓冲区指针
main(){
cobegin
process producer_i ( ) //i=1,2,…n
process consumer_j ( ) // j=1,2,…m
coend
}
//生产者
process producer_i ( )
{
while(true) {
produce( );
P(empty);
P(mutex);
append to B[in];
in=(in+1)%k;
V(mutex);
V(full);
}
}
//消费者
Process consumer_j ( )
{
while(true){
P(full);
P(mutex);
take( ) from B[out];
out=(out+1)%k;
V(mutex);
V(empty);
consume( );
}
}
5. 生产者-消费者问题算法中的信号量使用分析
(1)PV操作必须成对出现(同一个程序中(互斥),不同的程序中(同步))
(2)P操作的次序很重要,使用不当会死锁
(3)V操作的次序无关紧要
类型2
1. 问题描述
系统中的进程:1个生产者,1个消费者,共享1个缓冲区(缓
冲区中只能放一个产品,即k=1的情形)
2.问题分析
由于缓冲区中只能放一个产品,生产者生产一个产品,消费者消费一个产品,生产者和消费者紧密同步,同步即互斥,所以缓冲池不需要互斥信号量。
3.信号量设计
(1)生产者信号量(私有):empty=1
(2)消费者信号量(私有):full=0
4.算法设计
int B;
semaphore empty=1;
//可以使用的空缓冲区数
semaphore full=0;
//缓冲区内可以使用的产品数
main(){
cobegin
process producer ( )
process consumer ( )
coend
}
process producer ( ) {
while(true) {
Produce( );
P(empty);
append( ) to B;
V(full);
}
}
process consumer( ) {
while(true) {
P(full);
take( ) from B;
V(empty);
consume( );
}
}
二、生产者消费者应用
例1.苹果桔子问题(多类生产者多类消费者共享一个缓冲池)
1. 问题描述
桌上有一只盘子,可容纳10个水果,每次只能放入一个水果。爸爸专向盘子中放苹果(apple),妈妈专向盘子中放桔子(orange),一个儿子专等吃盘子中的桔子,一个女儿专等吃盘子里的苹果。 请用信号量和PV操作写出能够正确执行的同步算法
2. 问题分析
多类生产者多类消费者共享一个缓冲池,生产者每类一个,消费者每类一个,缓冲池大小为10
(1)互斥:盘子
(2)同步:盘子未满,爸爸或妈妈可将水果放入盘子;盘子未空,儿子或女儿可从盘子取走一个水果。
(3)进程间需要交换信息
3.信号量设计
(1)盘子互斥信号量:mutex=1
(2)生产者信号量(爸爸和妈妈两类生产者共有):disk=10
(3)儿子(消费者)信号量:orange=0
(4)女儿(消费者)信号量:apple=0
4.算法设计
semaphore disk=10,apple=0,orange=0;
/* 盘子里可以放几个水果 , 盘子里有桔子 , 盘子里有苹果*/
semaphore mutex=1; //互斥的信号量
main() {
cobegin
process father ();
process mother();
process son ();
process daughter ();
coend
}
process father() {
While(1){
P(disk);
P(mutex);
把苹果放入plate;
V(apple);
V(mutex);}
}
process mother () {
While(1){
P(disk);
P(mutex);
把桔子放入plate;
V(orange);
V(mutex); }
}
process son(){
whle(1){
P(orange);
P(mutex);
从plate中取桔子;
V(disk);
V(mutex);
}
}
process daughter() {
while(1){
P(apple);
P(mutex);
从plate中取苹果;
V(disk);
V(mutex);
}
}
例2.橘子汁问题(一个生产者,三类消费者共享一个缓冲池)
1. 问题描述
设有一个供应者能源源不绝地供应糖、水和橘子精,有三个负责制造橘子汁的进程,每
个进程都已经拥有了一种原材料:A 拥有糖,B 拥有水,C 拥有橘子精。供应者每次随机拿
出两种原材料供加工者加工一次。当容器中有加工者进程所需的另外两种原材料时,可以
取走相应的材料。然后供应者再像容器中放入另外两种原材料。如果没有取走原材料,则
供应者睡眠。写出供应者与加工者能正确执行的同步程序。
2. 问题分析
一类生产者多类消费者共享一个缓冲池,生产者每类一个,消费者每类一个,缓冲池大小为1,紧密同步即互斥。
3. 进程设计
(1)四个进程:S,A,B,C
(2)S 为供应者,A,B,C 为三个负责制造橘子汁的进程,A 拥有糖,B 拥有水,C 拥有橘子精
4.信号量设计
缓冲池大小为1,紧密同步即互斥。
(1)mutex:S进程需要的信号量,初值为 1 (这里信号量的命名为mutex,但是不是互斥信号量,是同步,不要混淆)
(2)SA:A 进程需要的信号量,初值为 0
(3)SB:B 进程需要的信号量,初值为 0
(4)SC:C 进程需要的信号量,初值为 0
5.算法设计
semaphore mutex=1,SA=0,SB=0,SC=0;
cobegin
process S()
{ while(1)
{
P(mutex); //同步即互斥
取出两种原材料放到容器中;
if(orange&&water) V(SA); //如果放的是 A 进程需要的材料,则唤醒 A 进程
else if(orange&&sugar) V(SB); //如果放的是 B 进程需要的材料,则唤醒 B 进程
else V(SC); //如果放的是 C 进程需要的材料,则唤醒 C 进程
}
}
process A()
{ while(1)
{
P(SA); //测试有没有 A 需要的原材料,没有则睡眠
从容器中取走两种原材料;
V(mutex);//唤醒生产者 S
加工橘子汁;
}
}
process B()
{ while(1)
{
P(SB); //测试有没有 B 需要的原材料,没有则睡眠
从容器中取走两种原材料;
V(mutex);//唤醒生产者 S
加工橘子汁;
}
}
process C()
{ while(1){
P(SC); //测试有没有 C 需要的原材料,没有则睡眠
从容器中取走两种原材料;
V(mutex);//唤醒生产者 S
加工橘子汁;
}
}
coend
1、信号量与PV操作
P221 多个生产者 多个消费者 一个共享区
死锁产生原因
◼ (1)进程推进顺序不当产生死锁
◼ (2)PV操作使用不当产生死锁
◼ (3)资源分配不当引起死锁
2、死锁的必要条件
(1) 破坏条件1(互斥条件)
策略:使资源可同时访问而非互斥。
有些资源可以采取此策略,如:只读文件、时钟、磁盘等,有些资源不能采取,如:可写文件、键盘、磁带机等。
(2) 破坏条件2(占有和等待)
策略:采用静态分配策略
静态分配是指一个进程必须在执行前就申请它所要的全部资源,并且直到它所要的资源都得到满足后才开始执行。如果有一种资源不能满足进程,即使其它资源都空闲,也不分配给进程,而让进程等待。
优点:简单、易于实现、安全
缺点:降低了资源的利用率
(3) 破坏条件3(不剥夺条件)
策略:采用剥夺式调度方法。(适用于内存和处理器资源)
当进程在申请资源未获准许的情况下,应主动释放已经保持了的资源,以后再去重新申请。这被认为使进程已经占有的资源被剥夺了。
(4) 破坏条件4(循环等待条件)
策略:采用层次分配策略
资源被分成多个层次,当进程得到某一层的一个资源后,它只能再申请较高层次的资源。当进程要释放某层的一个资源时,必须先释放占有的较高层次的资源;当进程得到某一层的一个资源后,它想申请该层的另一个资源时,必须先释放该层中的已占资源。
3、灵活运用银行家算法
进程通信
- 信号通信机制
- 管道通信机制
- 共享主存通信机制
- 消息传递通信机制
第4章 存储管理
1、分页存储管理,主要是掌握p209页的翻译快表
2、分段存储管理,掌握地址转换,掌握P220页
3、各类算法:OPT\LRU\FIO
第5章 设备管理
1、设备管理技术:设备管理器软件、缓冲、虚拟技术等
2、磁盘:算法
第6章 文件管理
1、文件目录:什么情况用什么目录
2、文件组织与数据存储,其中物理结构重点与磁盘联系
3、文件空间管理:主要掌握p312页知识点