第一章 绪论
背诵部分
- (背)操作系统的功能:
- 用户与计算机硬件系统之间的接口:用户使用计算机的三种方式是 命令方式,图标窗口方式、系统调用方式
- 计算机系统资源的管理者
- 作为扩充机器,实现了计算机资源的抽象
- (背)操作系统的特征:并发、共享、虚拟、异步
- 操作系统体系结构:大内核,微内核
- (操作系统分类:(单道、多道)批处理系统、分时系统、实时系统)
- 操作系统五大功能:进程管理、存储管理、设备管理、文件管理、用户接口
- 操作系统主要功能:资源管理、用户接口
- 结构设计:无结构OS,模块化结构,分层结构,微内核结构
理解部分
- 并行:两个或多个事件在同一时刻发生;并发:两个或多个事件在同一时间间隔发生
- 操作系统发展过程:单道批处理系统、多道批处理系统、分时系统、实时系统、微机操作系统、通用操作系统
- 操作系统的功能:
- 处理机(进程)管理:进程控制、进程同步、进程通信、进程调度
- 存储管理
- 设备管理
- 文件管理
- 用户接口
- 操作系统结构设计:无结构OS,模块化结构,分层结构,微内核结构
- 操作系统的目标:方便性、有效性、可扩充性、开放性
第二章 进程管理
背诵部分
-
程序顺序执行的特征:程序执行的顺序性、环境的封闭性、结果的可再现性
-
程序并发执行的特征:间断性、失去封闭性、不可再现性
-
进程的特征:结构性(PCB、程序段、数据段)、动态性、并发性、独立性、异步性
-
(背)进程和程序:
- 关系:
- 每个进程实体中包含了PCB、程序段和数据段这三个部分,因此进程与程序是紧密相关的
- 进程与程序的对应。同一个程序的多次运行,将形成多个不同的进程;同一个程序的一次执行也可以产生多个进程(通过fork调用);而一个进程也可以执行多个程序(通过exec调用)
- 区别
- (动态性)程序是指令的有序集合,能永久的保存在某种介质上,没有任何执行的含义,是一个静态概念。而进程是程序的一次执行过程,是一个动态概念,强调执行过程,它动态地被创建、调度执行、撤消
- (并发性)进程具有并发性,而程序没有
- (独立性)进程是一个能够独立运行、独立分配资源和独立接受调度的基本单位。而程序不具有PCB,所以它是不可能在多道程序环境下独立运行
- 关系:
-
进程的三个状态:
- 程序运行状态——运行状态
- 程序等待CPU的状态——就绪状态
- 程序等待I/O设备的状态——阻塞状态
-
(背)进程间的基本状态转换
-
(背)PCB的作用::PCB 是进程实体的一个组成部分,在PCB 中记录了OS所需的、用于描述进程的当前状态及控制进程的全部信息。PCB 的作用是将程序变成可并发执行的进程。
-
(背)为什么说PCB是进程存在的唯一标志: PCB 的作用是将程序变成可并发执行的进程。系统根据进程的PCB感知到该进程的存在,并对它进行控制,因此,PCB 是进程存在的唯一标志。
-
(背)进程同步应遵循的原则:空闲让进、忙则等待、有限等待、让权等待
-
信号量:整型、记录型
-
实现临界区互斥的软件方法:单标志法(违背空闲让进)、双标志法先检查(违背忙则等待)、双标志法后检查(饥饿现象)、Peterson算法
-
实现临界区互斥的硬件方法:中断屏蔽方法、硬件指令方法
-
生产者消费者
/*
利用记录型信号量解决生产者—消费者问题
*/
int in=0, out=0;
item buffer[n];
semaphore mutex=1; //临界区互斥信号量
semaphore empty=n; //空闲缓冲区
semaphore full=0; //缓冲区初始化为空
void procedure(){ //生产者进程
do{
produce an item nextp;
wait(empty);
wait(mutex);
buffer[in]:= nextp;
in:=(in+1) % n;
signal(mutex);
signal(full);
}while(TRUE);
}
void consumer(){ //消费者进程
do{
wait(full);
wait(mutex);
nextc:= buffer[out];
out:=(out +1) % n;
signal(mutex);
signal(empty);
consume the item in nextc;
}while(TRUE);
}
void main(){
cobegin
procedure(); consumer();
coend
}
/*
利用AND型信号量解决生产者—消费者问题
*/
int in=0, out=0;
item buffer[n];
semaphore mutex=1, empty=n, full=0;
void procedure(){ //生产者进程
do{
produce an item in nextp;
Swait(empty, mutex);
buffer(in)∶=nextp;
in∶=(in+1) % n;
Ssignal(mutex, full);
}while(TRUE);
}
void consumer(){ //消费者进程
do{
Swait(full, mutex);
nextc∶ =buffer[out];
out∶ =(out+1) % n;
Ssignal(mutex, empty);
consume the item in nextc;
}while(TRUE);
}
-
进程通信分为低级通信和高级通信;
-
进程通信高级通信方式包括:共享存储器系统、管道通信系统、消息传递系统、客户机-服务器系统。
-
进程间的数据交换以格式化的消息为单位,分为 直接通信(消息队列)、间接通信(信箱)
-
(背)消息队列、共享内存、管道的区别
- 消息队列自身有同步机制;但不支持广播机制; 当传输大量数据时,花费较高
- 共享内存必须自己考虑同步问题,但支持广播机制;当传输大量数据时,系统开销小
- 管道能传递大量数据,但只支持半双工通信,只能用于有血缘关系的进程之间
-
低级通信优点:速度快;缺点:传送信息量小,编程复杂
-
进程和线程的比较:
- 调度性:在传统的OS中,拥有资源的基本单位和独立调度、分派的基本单位都是进程。而在引入线程的OS中,则把线程作为调度和分派的基本单位,而把进程作为资源拥有的基本单位
- 并发性:在引入线程的OS中,不仅进程间可以并发执行,而且在一个进程的多个线程间也可以并发执行,因而它比传统的OS具有更好的并发性
- 拥有资源:在这两种OS中,拥有资源的基本单位都是进程。线程除了一点在运行中必不可少的资源(如线程控制块、程序计数器、一组寄存器和堆栈)外,本身基本不拥有系统资源,但它可访问其隶属进程的资源
- 系统开销:由于创建和撤销进程时,系统都要为之分配和回收资源,进程切换时所要保存和设置的现场信息也要明显的多于线程,因此,OS在创建、撤销以及切换进程时所付出的开销将明显地大于线程。另外,由于隶属同一个进程的多个线程共享同一地址空间和该进程的所有已打开文件,从而使它们之间的同步和通信的实现也比进程更方便
- 地址空间和其他资源:进程的地址空间互相独立,同一进程的各线程间共享进程的资源,某进程内的线程对于其他进程不可见。
-
线程也是三个状态:执行状态、就绪状态、阻塞状态
理解部分
-
进程和线程的其他区别:
-
独立性:同一进程内的不同线程: 独立性低, 因为同一进程内的不同线程是为了提高并发性和相互之间的合作而创建的,他们共享进程内的地址空间和资源;不同进程内的不同线程: 独立性高,为了防止进程之间彼此干扰和破坏,每个进程都拥有一个独立的地址空间和其他资源,除了共享变量以外,不允许其他进程访问
-
支持多处理及系统:单线程进程:在多处理机系统中,进程只能运行在1个处理机上;多线程进程:在多处理机系统中,进程可以在多个处理机上并发运行,无疑加速了进程了完成
-
每个进程有一个进程控制块(PCB)一样,系统为每个线程配置了一个线程控制块(TCB)
-
-
临界区:每个进程中,访问临界资源的那段代码
-
多线程OS中的进程:进程是一个可拥有资源的的基本单位;可包括多个线程,多个线程可并发执行;进程不是一个可执行的实体。
-
理解:
- 进程是一个可以拥有资源的独立实体,同时又是一个可以独立调度的基本单位
- PCB必须常驻内存
- 控制进程是操作系统内核通过原语实现的
- OS有很多原语,他们运行在系统状态下
- 处理机有两种状态:系统状态(管态、核心态)和用户状态(目态)
-
进程控制原语:
- 创建原语:用户登录、作业调度、提供服务、应用请求
- 撤消原语:正常结束、异常结束、外界干预
- 阻塞原语:向系统请求共享资源、等待某种操作完成、新数据尚未到达、无新工作可做
- 唤醒原语
- 挂起原语:终端用户的请求、父进程请求、负荷调节的需要、操作系统的需要
- 激活原语
-
线程实现方式
- 内核支持线程:创建、撤消和切换等,是依靠内核实现的。此外,在内核空间还为每一个内核支持线程设置了一个线程控制块。
- 用户级线程:对线程的创建、 撤消、同步与通信等功能,都无需内核的支持。而内核完全不知道用户级线程的存在。当线程执行一个系统调用时,不仅该线程被阻塞,而且,进程内的所有线程会被阻塞
- 组合方式
semaphore chopsticks[5] = {1, 1, 1, 1, 1};
action_i(int i){
while(true){
if(i % 2 == 1){
wait(chopsticks[i]);
wait(chopsticks[(i + 1) % 5]);
eat;
signal(chopsticks[(i + 1) % 5]);
signal(chopsticks[i]);
think;
}
else{
wait(chopsticks[(i + 1) % 5]);
wait(chopsticks[i]);
eat;
signal(chopsticks[i]);
signal(chopsticks[(i + 1) % 5]);
think;
}
}
}
semophore rcount = 0, wcount = 0; //分别用于记录当前读者和写者的数量
semophore rmutex = 1, wmutex = 1; //分别用于实现对rcount和wcount的互斥访问
semophore rw = 1; //用于保证读者和写者互斥访问文件
semophore S = 1; //用于实现“写优先”
whiter(){
while(true){
wait(wmutex);
if(wcount == 0) wati(S);
wcount++;
signal(wmutex);
wait(rw);
writing;
signal(rw);
wait(wmutex);
wcount--;
if(wcount == 0) signal(S);
signal(wmutex);
}
}
reader(){
while(true){
wait(S);
wait(rmutex);
if(rcount == 0) wait(rw);
rcount++;
signal(rmutex);
signal(S);
reading;
wait(rmutex);
rcount--;
if(rcount == 0) signal(rw);
signal(rmutex);
}
}
第三章 进程调度
背诵部分
-
调度方式:剥夺式、非剥夺式
-
处理机调度的层次:
- 高级调度(作业调度)
- 中级调度(内存调度)
- 低级调度(进程调度、分为非抢占方式和抢占方式)
-
(背)高级调度的主要任务:决定把外存上处于后备队列中的哪些作业调入内存,为它们分配必要的资源,并创建进程。
-
(背)低级调度的主要任务:保存处理机的现场信息,按某种算法先取进程,再把处理器分配给进程。
-
(背)为什么要引入中级调度:其作用是提高内存利用率和系统吞吐量。将那些暂时不能运行的程序调至外存等待,把此时的进程状态称为挂起态。
-
(背)多级反馈队列调度算法优势:
- 终端型作业用户:终端型用户提交的作业属于交互型作业,通常较小,此算法可以保证短作业优先。
- 短批处理作业用户:周转时间较短。
- 长批处理作业用户:经过前面几个队列得到部分执行,不会长期得不到处理。
-
(背)死锁定义:死锁是指多个并发进程彼此等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源,从而使得各进程不能继续向前推前
-
(背)死锁原因:
- 竞争不可抢占性资源引起死锁
- 竞争可消耗资源引起死锁
- 进程推进顺序不当引起死锁
-
(背)死锁产生的必要条件
- 互斥条件
- 不可剥夺条件
- 请求和保持条件
- 环路等待条件
-
(背)解决死锁的方法、策略:
- 预防死锁
- 避免死锁
- 检测和恢复死锁
-
(背)预防死锁
- 破坏“请求和保持”条件
- 破坏“不剥夺”条件
- 破坏“环路等待”条件
- 破坏“互斥”条件
-
避免死锁:银行家算法、安全性算法
-
死锁检测:资源分配图
-
死锁定理:S为死锁状态的充分条件是:当且仅当S状态的资源分配图是不可完全简化的。
-
(背)解除死锁
- 资源剥夺法:挂起死锁进程并抢占资源
- 撤销进程法:撤销部分甚至全部死锁的进程并且剥夺这些进程的资源
- 进程回退法:让一个或多个进程回退到足以回避死锁的地步
理解部分
- 周转时间:作业完成时间-作业提交时间
- 带权周转时间,即作业的周转时间T与系统为它提供服务的时间Ts之比
- 响应比:(等待时间+要求服务时间)/要求服务时间
- 实时调度算法分类
- 非抢占式调度算法
- 抢占式调度算法
第四章 内存管理
背诵部分
-
源程序变为可执行程序步骤:编译、链接、装入
-
程序的链接方式:静态链接、装入时动态链接、运行时动态链接
-
可用哪几种方式将程序装入内存?它们分别适用于何种场合?
- 绝对装入方式:单道程序环境
- 可重定位装入方式:多道程序环境
- 动态运行时装入方式:多道程序环境
-
连续分配管理方式:单一连续分配方式(无外部碎片有内部碎片)、固定分区分配方式(无外部碎片有内部碎片)、动态分区分配方式(有外部碎片)、可重定位分配方式
-
分页存储管理和分段存储管理的比较:
- 页是信息的物理单位,分页是出于系统管理的需要;段则是信息的逻辑单位,它含有一组其意义相对完整的信息,分段是出于用户应用的需要。一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处
- 页大小是系统固定的;而段大小则通常不固定,由编译程序在对源程序进行编译时,根据信息的性质来划分;通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度
- 逻辑地址表示:分页是一维的,各个模块在链接时必须组织成同一个地址空间;分段是二维的,各个模块在链接时可以每个段组织成一个地址空间
-
动态分区分配方式的分配算法:首次适应算法、循环首次适应算法、最佳适应算法、最坏适应算法
-
存储器管理目标:方便用户使用、提高内存的利用率、从逻辑上扩充存储空间
理解部分
答案:
2
35
,
2
19
2^{35},2^{19}
235,219
第五章 虚拟存储器
背诵部分
-
局部性原理:时间局部性、空间局部性
-
请求分页系统包含的数据项及其各自的作用:包含 页号、物理块号、状态位P、访问字段A、修改位M、外存地址
- 状态位P:用于指示该页是否已调入内存,供程序访问时参考
- 访问字段A:记录本页在一段时间内被访问的次数,或记录本页最近已有多长时间未被访问,供置换算法换出页面时参考
- 修改位M:标识该页在调入内存后是否被修改过
- 外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考
-
虚拟存储技术的特征:多次性、对换性、虚拟性
-
请求分页的组成:页表机构、缺页中断机构、地址变换机构
-
最小物理块数的确定:最小物理块数与计算机的硬件结构有关,取决于指令的格式、 功能和寻址方式
-
物理块的分配策略:固定分配局部置换、可变分配全局置换、可变分配局部置换
-
物理块分配算法:平均分配算法、按比例分配算法、 考虑优先权的分配算法
-
页面置换算法:最佳置换算法、先进先出置换算法、最近最久未使用置换算法、CLOCK置换算法
理解部分
- 页面置换算法
- 最佳置换算法
- 先进先出页面置换算法(FIFO)——Belady异常
- 最近最久未使用置换算法(LRU)
- 最少使用置换算法
- Clock置换算法(最近未使用算法)
- 请说明请求分页系统中的地址变换过程
第六章 文件管理
背诵部分
-
按逻辑结构,文件分为:无结构文件(流式文件)、有结构文件(记录式文件)
-
有结构文件组成:数据项、记录
-
文件逻辑结构:顺序文件、索引文件、索引顺序文件、(直接文件或哈希文件)
-
文件控制块:基本信息,存取控制信息,使用信息
-
文件目录的目录结构:单级目录结构、两级目录结构、多级目录结构(树形目录结构)、(图形目录结构)
-
文件共享:基于索引结点(硬链接)、利用符号链接(软链接)
-
文件分配(外存组织方式):连续分配、链接分配、索引分配
-
混合索引:
- 直接地址:iaddr(0)~iaddr(9)
- iaddr(10) :一次间接地址
- iaddr(11) :二次间接地址
- iaddr(12) :三次间接地址
-
文件系统模型分为三层:
- 最低层为对象及其属性说明,主要包括物理文件相关功能;
- 中间层是对对象进行操纵和管理的软件集合,是文件系统的核心部分,主要是逻辑文件相关功能
- 最高层是文件系统提供给用户的接口
-
引入“打开”这一系统调用的原因和含义:原因是为了避免多次重复检索目录;含义是系统调用将文件打开,磁盘索引结点被拷贝到内存中,后面的目录检索都在内存中进行
-
文件存储空间管理(空闲磁盘空间):空闲表法、空闲链表法、位示图法、成组链接法
-
UNIX系统使用的是成组链接法
-
位视图法申请一块磁盘的流程:
① 顺序扫描位示图,找到一个或一组值为“0”的位
② 将找到的位转换成与之相对应的盘块号:b=n(i-1)+j
③ 修改位示图 -
位视图法归还一块磁盘的流程:
① 将回收的盘块号转换成位示图中的行号和列号:i=(b-1) DIV n +1,j=(b-1) MOD n +1
② 修改位示图 -
位视图优点:
① 从位示图中很容易找到一个或一组相邻接的空闲盘块
② 位示图占用空间小,可常驻内存
理解部分
- windows使用的文件管理系统是FAT和NTFS:FAT文件系统包括FAT12、FAT16和FAT32等版本,它们都以文件分配表(File Allocation Table)作为基础性的数据结构,因此被称为FAT系统
第七章 输入输出系统
-
I/O系统管理的主要对象:I/O设备、设备控制器
-
I/O系统的主要任务:完成用户提出的I/O请求,提高I/O速率,以及提高设备的利用率,并能为更高层的进程方便地使用这些设备提供手段。
-
I/O设备基本功能:隐藏物理设备的细节、与设备无关性、提高处理机和I/O设备的利用率、对I/O设备进行控制、能确保对设备的正确共享、错误处理
-
I/O系统层次:用户层软件、设备独立性软件、设备驱动程序、中断处理程序、硬件设备(I/O子系统指的前四个)
-
I/O系统接口:块设备接口、流设备接口、网络通信接口
-
I/O控制方式:采用轮询的I/O方式、采用中断的I/O方式、直接存储器访问DMA方式、I/O通道方式
-
I/O设备按设备的共享属性分类:独占设备、共享设备、虚拟设备
-
中断技术的重要性:进程之间的切换是通过中断来完成的;中断也是设备管理的基础,为了提高处理机的利用率和实现CPU与I/O设备并行执行,也必需有中断的支持;中断处理程序是I/O系统中最低的一层,它是整个I/O系统的基础
-
根据中断源产生的条件:外中断、内中断
-
DMA中的四类寄存器:命令/状态寄存器、内存地址寄存器、数据寄存器、数据计数器
-
设备独立性也称设备无关性。其基本含义是:应用程序独立于具体使用的物理设备,使用逻辑设备名来请求某类设备,系统在执行时,则使用该类设备的物理设备名
-
与设备无关的I/O软件:设备分配、缓冲管理
-
SPOOLing系统
- 组成:输入井和输出井、输入缓冲区和输出缓冲区、输入进程和输出进程、井管理程序
- 特点:提高了I/O的速度,缓和了CPU与低速I/O设备速度不匹配的矛盾;利用高速共享设备,将独占设备改造为共享设备;实现了虚拟设备功能:用户都感到独占了一台设备
-
根据系统设置缓冲器的个数,缓冲技术分为以下几种:单缓冲、双缓冲、循环缓冲、缓冲池
-
设备使用方式:独占式使用设备(独占设备)、分时式共享使用设备(共享设备)、以SPOOLing方式使用外部设备(虚拟设备)
-
磁盘访问时间:寻道时间、延迟时间、传输时间
-
调度算法:先来先服务、最短寻找时间优先、扫描算法、循环扫描