答案主要基于苏州大学的操作系统课程内容
多道程序设计技术与分时技术的联系和区别
1、多道程序设计技术:适合批处理作业
核心思想:内存中可以同时存在多道作业,它们并发或并行运行
通过合理调度,让多道作业交替占用处理机,同时使用不同的资源。
无交互性:用户直到作业结束前,都不能干预作业的执行。
2、分时技术:适合交互作业
联系:分时技术同样采用多道程序设计技术。
分时技术:每个用户获得相同的时间片,让多个进程轮流占用处理机,每个进程不管是否结束,在规定的一个时间片内都会被强制停止,更换等待队列中的下一个进程。如此循环执行。
(running–>ready状态:时间片终止)
效果:每个用户感觉独占处理机
交互性:用户则可以干预作业的执行(可以根据系统响应结果,提出下一个要求)
关注指标:响应时间
为什么要引入I/O保护机制
I/O设备都是外部设备,和硬件连接。
为了防止用户程序执行非法I/O操作,导致系统崩溃,则需要引入I/O保护机制----I/O指令全为特权指令,只能在内核模式下运行。
OS的服务和结构
系统程序 vs 应用程序
区分标准:对于计算机和用户的用处
1、系统程序:
系统程序主要:控制和协调计算机和外部设备,调度,监督和维护计算机系统;管理计算机系统中独立的硬件,使之协调工作。
是无需用户干预的程序集合
系统程序使得:计算机使用者和其他程序,把计算机当成整体,无需考虑低层硬件如何工作。
例子:
任务管理器;性能监视器;命令提示符;时钟管理程序
文件资源管理器;设备管理器;电源管理器;用户管理器
windows defender安全中心;系统更新和安全保护程序
2、应用程序
应用程序是:
用户可以使用的程序设计语言
各种程序设计语言编制的应用程序的集合
例如:IE浏览器,PPT,计算器等…
OS的结构举例
虚拟机
进程概念
进程和程序的区别
从创建进程和终止进程角度谈谈父子进程的关系
讨论方面
- 创建:父子进程的概念;进程树
- 资源共享:3种
- 执行:并发;父等待子终止
- 地址空间:完全复制fork;子装入新程序
- 终止:1、子请求exit+wait:2、父终止子:abort
上下文切换:cpu切换
切换:保存当前–装入执行新–恢复旧
进程通信
讨论直接通信和间接通信
- 是否需要第三者
- 原语格式,需要信息
- 连接和进程之间的对应关系
线程
进程和线程的区别
线程映射模式和特点:映射+阻塞+并行并发+切换开销
讨论性能
多处理器系统某应用程序采用多对多线程模式。
用户线程数量>系统处理器数量
(1)程序分配的到的内核线程数量 < 处理器数量
必然有一些处理器会处于空闲状态
(2)程序分配的到的内核线程数量 = 处理器数量
处理器可能有空闲,也可能所有处理器都被使用
(3)程序分配的到的内核线程数量 > 处理器数量
OS会封锁一个内核线程调出内存,换入ready的内核线程。
因此cpu利用率高
CPU调度
什么是抢占式调度,非抢占式调度
1、抢占式调度
正在运行进程非自愿释放cpu给 新到达且状态为ready 的进程。
适合交互式系统:如可抢占的动态优先级算法
2、非抢占式调度
正在运行进程只能自愿释放cpu,一旦CPU分配给某个进程,系统不可以抢占已分配的CPU给其他进程。
适合批处理系统
比较三种调度
挂起状态参考:https://www.cnblogs.com/zhxmdefj/p/12059174.html
进程同步
解释临界区;临界区访问的准则
- 临界资源:一次只能给一个进程使用的资源,许多物理设备例如打印机
- 对临界资源的访问:必须互斥进行
- 临界区:访问临界资源的那段代码
PV操作内部实现
同步信号量 值的含义
同步信号量和二值信号量同属于记录型信号量。
记录型信号量:通过PV操作,增加等待队列,消除了忙等问题。
同步信号量一般成对使用在不同进程中。
Semaphore S;初值不能为负数
- S > 0:表示资源S未被使用的数量,或者被释放的数量。代表此时可以分配进程申请此资源
- S = 0:表示资源S被分配完毕,或者没有任何一个被释放。此时若有进程申请资源S,会进入资源S 的等待队列并阻塞。
- S < 0:其绝对值表示,因等待资源S被阻塞的进程数量
死锁
死锁概念和产生原因
死锁:多个进程因为竞争资源造成的一种僵局。若无外力作用,这些进程将永远无法向前推进。这种状态称为死锁。
死锁原因
- 多个进程竞争不可抢占资源、可消耗资源
- 进程推进顺序不当:PV操作不合理啥的。
死锁的4个必要条件
互斥:至少有一个资源必须处于非共享模式。即一次只有一个进程使用
占有并等待:一个至少持有一个资源的进程,等待获得额外的由其他进程所持有的资源。
非抢占:资源不能被抢占,只能自愿释放。即资源只有在持有它的进程完成任务后自动释放。
循环等待:一组等待资源的进程(Po, P2….Pn}之间存在循环等待现象,即P0等待P1占有的资源,P1等待P2占有的资源,Pn-1等待Pn占有的资源,Pn等待Po占有的资源。
死锁预防(deadlock prevention):限制资源申请
只要确保至少一个必要条件不成立,就可以预防死锁
1、互斥:现代OS中的虚拟化技术,可以将互斥资源改造为共享资源
2、 占有并等待
- 破坏占有:静态分配协议:当进程不拥有资源时才可以申请资源;即若有资源,要先释放在申请:破坏占有
3、破坏非抢占:剥夺式分配
可抢占别人的,自己的在等待时也可以被抢占
4、循环等待:按序分配算法
把所有资源进行排序,按照递增顺序申请资源
死锁避免:确保永远不进入不安全状态
银行家算法:
在资源分配之前,根据系统资源信息进行预分配,寻找安全序列,预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。
安全状态一定不死锁,死锁一定不安全;不安全不一定死锁
死锁检测和解除:允许死锁发生
允许系统进入死锁状态 。然后检测死锁并恢复系统。
死锁检测方法:
- 等待图。等待图有环必死锁!!!
- 死锁检测算法
死锁解除方法:人工+抢占+撤销
内存管理+虚存
重定位redirect = 地址变换
重定位:装入程序时将目标程序中的指令和数据,从逻辑地址转换为物理地址的过程
分类:
- 静态重定位:地址变换装入时一次完成
- 动态重定位:运行前只装入部分代码就立刻投入运行,运行期间,根据程序需要,动态分配内存
保证一个进程在主存中被【改变了存放位置后】仍能正确执行
动态重定位技术依赖于重定位寄存器(基址寄存器)
程序的局部性原理
虚拟内存:物理–>逻辑
虚拟存储的实现是【基于程序局部性原理】,其实质是借助外存将内存较小的物理地址空间转化为较大的逻辑地址空间
虚拟页式存储管理
进程开始运行前,不装入全部页面。
进程运行后,根据需要请求分页,动态装入其他页面。
内存空间已满时,根据某种页面置换算法,置换出内存中某个页面,装入外存新页面。
页面置换算法
- FIFO先进先出:置换在内存驻留时间最长的页面
- OPT最优置换算法(无法实现):置换将来不需要的,或者最远的将来才需要的页面
- LRU(Least Recently Used)最近最少使用:置换最久没有被使用的页面
颠簸(Thrashing)
由于主存太小或页面置换算法不当,导致页面频繁换入换出,这种状态称为颠簸。颠簸时CPU利用率极低,因为时间都用来换入换入I/O操作了。
缓解颠簸,提高CPU利用率:
解决颠簸:让驻留集 >= 工作集
working-set工作集:某段时间间隔里,进程实际访问的页面集合。
因此OS跟踪每个进程的工作集,为每个进程分配>其工作集的页框数
文件系统
1、逻辑文件系统
文件系统接口:
- 文件的属性、FCB
- 文件逻辑结构:面向用户(顺序;直接;索引)
- 文件操作:系统调用
文件目录
-
目录文件:存在磁盘
-
目录相关操作:创建、删除…
-
目录的组织
-
文件检索(文件的按名存取):目录是文件检索的桥梁(把文件名转换为文件在存储设备上的位置)
平均访问物理块数 1 2 ∗ ( ⌈ d s ∗ n b ⌉ + 1 ) 平均访问物理块数{{1}\over{2}}*({⌈{{ds * n}\over{b}}⌉+1}) 平均访问物理块数21∗(⌈bds∗n⌉+1)
inode:降低目录项大小
树形结构:减少要读入的文件目录项数量 -
文件保护:即目录访问控制。FCB/inode中添加访问控制列表(UNIX:用户分为owner,group,公共用户,访问类型有:读写执行)
-
文件共享:不同目录中的文件指向同一个物理文件(属性目录无法实现,只有图形目录可以)
1、硬链接(Unix)(Hard Link):
硬链接:一个物理文件可以有多个文件名(硬链接本质就是另一个文件名),但只有一个FCB。每个文件名有自己的目录项,即索引结点inode(文件目录中提高文件检索效率),但共享一个FCB。
用count技术有几个inode共享了一个FCB,删除文件count-1,删除inode即可
------------------------------------------------------
2、符号链接(Symbolic Link) :windows/linux实现文件共享:称为快捷方式文件
符号链接指向path,包含另一个文件的路径名
1、优点:包含的文件名可以是任意的文件或目录,可以链接不同文件系统的文件,甚至可以链接不存在的文件,即断链。
2、缺点:链接文件可以循环链接自己
当原文件从一个目录移到其他目录,再访问链接文件,系统就找不到
2、文件组织模块
- 磁盘给文件分配物理块的方式(连续;链式(隐式,显式),索引)
- 地址转换:文件逻辑地址(逻辑块号,块内偏移)–>物理地址(物理块号)
- 空闲磁盘块分配与回收:空闲表,空闲链表,位示图,成组链接(大型文件系统,UNIX)
3、基本文件系统
- 物理块的读写
- 磁盘结构
- 磁盘访问时间 = 定位时间+传输时间+系统开销
- 磁盘调度算法(减少寻道时间)FCFS,SSTF,SCAN,C-SCAN
- 磁盘管理(低级格式化(划分扇区)+分区+高级格式化(创建文件系统))
设备管理
I/O系统主要任务
完成用户提出的I/O请求
提高I/O速率
改善I/O设备的利用率:缓冲,spooling
I/O核心子系统
I/O控制器对设备控制方式:设备-cpu-内存数据交互
一步步解放CPU
1、轮询:CPU已知检查设备是否完成I/O
由CPU代表进程给I/O模块发I/0命令,CPU不断读取设备状态寄存器,询问设备是否忙;如果不忙则清除忙位,进行I/O。否则重复前面过程,直到操作完成才继续执行。
可能使进程进入:忙等(while死循环)
2、引入中断:设备执行完后(准备好),才会发送中断请求,CPU定期检查中断信息。而不是CPU一直都在检查设备状态寄存器
在中断驱动方式中,IO设备和内存之间的数据交换还是要经过cpu寄存器。速度还是受限。
而DMA:在iO设备和内存之间直接开辟一条数据交换通路,彻底解放CPU
3、DMA:进一步提高数据存取速度,直接内存—I/O设备,不用CPU
- 主机向内存中写入DMA命令块。该块包括:
传输的源地址指针、目标地址指针、传输的字节数。 - CPU在将DMA命令块的地址写入到DMA控制器后,就继续其他工作。
- DMA控制器则继续下去。直接操作内存总线,无需CPU的帮助。就可以将地址放到总线开始传输
4、通道是专用I/O处理机,CPU只需发出I/O指令,由通道具体完成,大大减轻了CPU的工作,同时一台通道能控制多台外设
什么是spooling假脱机技术
为了缓和CPU的高速性与I/O设备的低速性间的矛盾而引入了SPOOLING技术。
基本原理是:
- 利用其中的一道程序,模拟脱机输入时的外围控制机功能,把低速I/O设备上的数据传送到高速磁盘上;
- 用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备
这样,就可以在主机的直接控制下,实现脱机输入、输出功能。
此时的外围操作与CPU对数据的处理同时进行,这种在联机情况下实现的同时外围操作称为SPOOLing或假脱机技术。
利用共享打印机例子说明spooling技术
可以利用spooling技术把打印机这种独占设备,【虚拟为共享设备】,提高设备利用率,方便用户
假脱机打印系统主要由以下三部分:
-
磁盘缓冲区(输出井):暂存用户程序的输出数据。
-
打印缓冲区(输出缓冲区):设在内存,暂存从磁盘缓冲区送来的数据。
-
假脱机管理进程、假脱机打印进程
当用户进程发出打印请求时,假脱机打印系统并不是立即把打印机分配给该用户进程,而是由假脱机管理进程完成两项工作:两次申请
- 在磁盘缓冲区中为之申请一个空闲盘块,并将要打印的数据送入其中暂存;
- 为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入表中,再将该表挂到假脱机文件队列上。
完成这两项工作后,对用户程序而言,其打印请求已经得到满足(实现了虚拟独占设备为共享设备)
真正的打印输出由假脱机打印进程负责:
- 当打印机空闲时,进程从请求打印队列的队首取出一张请求打印表,根据表中的要求将要打印的数据,从输出井传送到内存缓冲区,再由打印机进行打印;
- 打印完,进程再次察看请求打印队列,若非空,重复上述工作,直到队列为空。此后进程才将自己阻塞起来。仅当下次再有打印请求时,进程才被唤醒
中断处理过程
- 关中断
- 保护现场,保存断点等信息
- 开中断
- 执行中断服务程序
- 关中断
- 恢复现场
- 开中断
- 中断返回
系统
OS 和DS的关系
OS通过提供用户接口,系统调用,系统程序等服务,以及管理计算机软硬件资源,是距离硬件最近的一层软件。
我们运行的所有程序,实际上都是操作系统帮我们运行的。
操作系统会管理计算机所有软硬件资源,通过进程管理,内存管理,文件管理以及设备管理,来调度CPU,分配内存(提高内存利用率),组织目录,分配物理块,管理空闲磁盘,访问磁盘,管理设备,硬件中断信号的响应等。
操作系统位于底层硬件与用户之间,是两者沟通的桥梁。用户不用了解低层硬件,就可以操作系统。
用户通过OS提供的用户接口服务,输入命令。操作系统则对命令进行解释,驱动硬件设备,实现用户要求。
数据结构的作用,就是为了提高硬件利用率。
比如操作系统需要查找用户应用程序"office"在硬盘的哪个位置,盲目的搜索一遍硬盘肯定是低效的,这时候搞个b+树作为索引,搜索office这个单词就很快,然后就能很快的定位office这个应用程序的文件信息,再找到文件信息中对应的磁盘位置了。
- 进程管理中,使用到等待队列。比如PV操作
- 进程通信的消息队列
- 内存管理中,页面置换算法LRU最近最久未使用,使用栈,栈底存放的就是最近最久未使用的页面
- 进程的创建:进程树
- 链表:空闲磁盘块,可以使用成组链表法