1.什么是操作系统/操作系统功能
操作系统是计算机资源的管理者可以实现处理器管理、存储器管理、文件管理、设备管理,同时操作系统扩充了裸机使其功能更加强大,使用更加方便,为用户提供了计算机系统的接口(命令接口、程序接口(系统调用)、GUI)
2.操作系统的运行机制
操作系统运行的程序分为两类,一类是内核程序运行在核心态,一类是应用程序运行在用户态,内核程序可以执行特权指令。操作系统内核一般由与硬件密切相关的模块和调用频率高的程序两部分构成。
内核包括:
1.时钟管理
时钟管理第一功能是计时,其次通过时钟中断管理,可以实现进程切换。
2.中断机制
中断机制的引入一开始是为了提高多道程序运行环境中CPU利用率,后来得到发展成为操作系统各项操作的基础,中断机制中只有小部分功能属于内核,负责保护和恢复中断现场信息,这样可以减少中断处理时间,提高系统并行处理能力。
3.原语
他们处在操作系统最底层最接近硬件,原语程序具有原子性,运行时间短,调用频繁。
4.系统控制的数据结构及处理
系统中用于登记状态信息的数据结构有很多:程序控制块,设备控制块,作业控制块,为了方便管理,系统需要一些基本操作,常见操作有:存储器管理,设备管理,进程管理
3.中断和异常
中断是指外中断,不是因为运行指令而出现的中断如:I/O中断,时钟中断
异常是指由CPU执行指令而发生的中断如:地址越界、缺页异常
4.中断执行流程
1.中断隐指令:关中断->保存断点(PC)->引出中断服务程序
2.中断服务程序:保存现场和中断屏蔽字(PSWR,通用寄存器)->开中断->执行中断服务程序->关中断->恢复现场和屏蔽字->开中断->返回
5.系统调用
系统调用运行在核心态,是使用计算机系统资源的入口。
系统调用把用户从硬件编程中释放出来,提高了系统的安全性和程序的可移植性。
6.大内核和微内核
大内核是将操作系统作为一个整体放到内核中,各模块共享信息,性能高但难以维护
微内核是将操作系统部分移出内核,微内核可靠性高但在用户态和核心态切换会损失一定性能。
7.进程与线程
进程是计算机资源分配的基本单位,线程是CPU调度的基本单位。
线程依赖进程而存在,一个进程至少一个线程。
进程拥有独立的地址空间,线程共享所属进程地址空间
线程切换只需保存少量寄存器内容,线程切换开销远小于进程切换
线程间通信更方便,同一进程的线程间共享全局变量
8.进程和程序
进程是动态的,暂时的;程序是静态的,永久的
进程具有并发性,程序没有
进程是计算机资源分配的基本单位,程序不是
进程和程序不是一一对应的
9.进程通信方式
1.管道:管道是一种半双工的通信方式,数据只能单向流动
2.消息队列:消息队列是保存在内核中的消息链表,进程互相发送消息,只需把数据放在消息队列,之后进程可以正常返回,另一个进程会从消息队列中读取数据。
3.共享内存:共享内存的机制是拿出一块虚拟地址空间来,映射到相同的物理内存中。
4.信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。
10进程调度算法
1.先来先服务FCFS
非抢占,无饥饿,对短进程不利
2.最短作业优先SJF
非抢占,会饥饿,对长进程不利
3.高响应比优先HRRN
响应比=(等待时间+要求服务时间)/要求服务时间
非抢占,无饥饿,平衡长短进程
4.时间片轮转
抢占式,无饥饿
5.优先级调度
可抢占也可不抢占,会饥饿
6.多级反馈队列
抢占式,会饥饿
设置多个就绪队列,优先级递减,时间片递增,优先级高的队列空时调度当前队列进程,若当前进程时间片用完但没执行完,会被移到下一队列。
11.同步和互斥
同步:多个进程因合作使得进程执行有一定先后顺序
互斥:多个进程在同一时刻只能有一个进程进入临界区
互斥机制原则:空闲让进,忙则等待,有限等待,让权等待(自己进不了临界区,释放处理机)
12.死锁
死锁定义
两个及以上的进程在争夺资源的过程中出现相互等待的现象成为死锁
死锁产生原因
系统资源不足,进程推进顺序不合理
产生死锁的必要条件
1.互斥
一段时间某资源只能由一个进程占用
2.请求和保持
进程已至少有一个资源又提出新的资源请求,但该资源已经被其他进程占用,自己对已获资源不释放
3.不剥夺
已获得资源,未使用完前不被剥夺
4.循环等待
发生死锁时必存在进程资源环形链
处理死锁
预防死锁
破坏产生死锁的条件
互斥:SPOOLing计数
请求保持:运行前分配好所需资源,之后保持
不剥夺:申请资源得不到满足时,释放拥有资源;申请资源被其他进程占用时,由OS协助剥夺
循环等待:给资源编号,按编号大小顺序申请资源
避免死锁
银行家算法,如果系统处于安全状态一定不会发生死锁,不安全状态不一定发生死锁,发生死锁一定在不安全状态
检测死锁
资源分配图,依次消除不阻塞进程的边,直到无边可消,如果有边没被消除则发生死锁(死锁定理)
解除死锁
资源剥夺,撤销进程,进程回退
13.什么是饥饿,和死锁的差别
饥饿:等待时间给进程推进和响应带来明显影响
饥饿并不代表系统已经死锁,但至少有一个程序执行被无限期推迟
进入饥饿的进程可以只有一个,但死锁必须大于等于两个;处于饥饿状态的进程可以是一个就绪进程,但处于死锁状态的进程必定是阻塞进程
14.存储器管理具有的功能
内存的分配和回收
地址变换:将逻辑地址变为物理地址
扩充内存:从逻辑上扩充内存,为用户提供比内存大的地址空间。
存储保护:保证各作业都在自己的存储空间运行,互不干扰
15.将程序变为可执行程序的步骤
1.编译:将源码编译为若干目标块
2.链接:将目标块和所需库函数链接一起,形成完整装入模块
3.装入:由装入程序将装入模块装入内存
16.程序的连接方式
静态链接:在程序运行前,将目标块和所需库链接为完整可执行程序,之后不再拆开
装入时动态链接:将目标模块在装入内存时采用边装入边连接的方式
运行时动态链接:程序运行过程中对需要的模块进行链接
17.程序的装入方式
1.绝对装入:编译程序产生含有物理地址的目标模块,不适合多道程序设计
2.可重定位装入:地址变换在装入时一次完成,之后不再改变
3.动态运行装入:把装入模块装入到内存后都是相对地址,允许在内存中移动位置,需要依靠硬件地址变换机构
18.覆盖技术和交换技术
1.覆盖技术:将程序分为多段,内存分为一个固定区和若干覆盖区,常驻内存的段放在固定区,不再调出,不常用的放在覆盖区,需要时调入不需要时调出
2.交换技术:将内存中无用的数据移到外村,外存中有用的读到内存
区别:
1.交换技术主要在进程和作业间进行,覆盖技术主要在同一个进程或作业中进行
2.交换技术不需要给出程序段间的覆盖结构
19.内存连续分配管理方式
1.单一连续分配
支持单道程序,分有系统区和用户区,只能有一道用户程序独占整个用户区,可以采用覆盖技术扩充内存
2.固定分区分配
支持多道程序,用户空间划分为若干相同大小的固定分区
3.动态分区分配
根据进程大小动态建立分区
分区分配算法:
首次适应:按照地址递增
最佳适应:按照容量大小递增
最坏适应:按照容量大小递减
邻近适应:在首次适应的基础上,从上次查找结束位置继续下一次
20.基本分页地址变换机构
根据逻辑地址计算页号和页内偏移
判断页号是否越界
查询页表找到对应页号的内存块
内存块和页内偏移得到物理地址
访问内存单元
该过程访问内存两次
页表寄存器存放页表起始地址和页表长度
21.页面置换算法
1.最佳置换法OPT:
从主存中移出未来最长时间不需要访问的页面
2.先进先出置换法FIFO
优先淘汰最早进入内存的页面
3.最近最久未使用算法
优先淘汰过去最长时间未使用的
4.时钟置换算法LRU
一轮:置换访问位为0的页,检查页访问位为1的置为0
二轮:若一论未淘汰页面,进行二轮
5.改进的时钟置换算法(访问位,修改位)
一轮:置换(0,0)
二轮:置换(0,1)并将扫描过的访问位设置为0
三轮:置换(0,0)
四轮:置换(0,1)
22.磁盘调度算法
先来先服务FCFS:公平,简单,平均寻道时间长
最短寻道时间优先SSTF:优先调度离磁头近的磁道,用户请求服务的机会不均等
扫描算法SCAN:按照当前移动方向(设定外侧,下面都是)移动,直到最外侧,再像内侧移动
LOOK调度算法:在SCAN基础上,不需要再移动到最边缘移动到要访问的磁道最边缘即可
循环扫描算法CSCAN:移动到最外侧后迅速移动到最内侧再向外侧
C-LOOK:在CSCAN基础上,不需要再移动到最边缘移动到要访问的磁道最边缘即可
23.I/O控制方式有哪些
1.程序I/O:程序不断轮询
2.中断驱动(字节):CPU发出I/O命令后可以做其他事情,I/O准备数据,数据准备好后向CPU发送中断信号传输数据
3.DMA方式(块):外设发出DMA请求总线使用权后,数据传送由DMA控制器直接控制总线完成;传送后DMA向CPU发送中断请求
4.通道控制(多个块)
通道本质上是一个简单的处理器,,具有执行I/O指令的能力,并通过执行通道I/O程序来控制I/O操作
24.SPOOLing技术
过SPOOling技术可将一台物理I/O设备虚拟为多台逻辑I/O设备
SPOOLing系统组成部分:
输入输出井:在磁盘上开辟的两个存储空间,用于暂存I/O输入输出数据
输入输出缓冲区:缓和CPU和磁盘速度不匹配矛盾,输入缓存暂冲输入设备数据,再传到输入井,输出缓冲用暂存输出井输出数据,再传给输出设备。
输入输出进程:模拟外围控制机,把数据送到输入井或者把输出数据送到设备
SPOOLing技术特点
1.提高I/O速度:对低速I/O的操作变为对输入输出井操作,提高了速度,缓和了CPU和I/O设备速度不匹配
2.将独占设备改造为共享设备