操作系统
1. os概述
- 中断
- 外中断,也称中断。包括可屏蔽和不可屏蔽
- 内中断,也称异常。包括
- 故障:缺页、除数为0、运算溢出
- 自陷:系统调用
- 终止:硬件故障如控制器出错、存储器校验错。和外部中断合称硬件中断。
- 处理器运行模式
- 用户态(目态)——非特权指令
- 核心态(管态、内核态)——特权指令——管理资源、原语、时钟、中断(硬件完成从用户态到核心态的转换,自动保存断点。os执行中断服务程序、保存PSW、保存中断屏蔽字、通用寄存器的值)
- 系统调用过程
- 首先要传递系统调用参数,因为之后会进入内核态,用户不能传参。再执行trap指令
- 用户态到核心态由硬件中断完成,核心态到用户态由os程序执行后完成
2. 进程管理
-
进程是除了CPU以外的系统资源的分配单元,线程是处理机的分配单元
-
线程的实现方式(os只为内核级线程建立TCB)
- 用户级线程:线程切换不需要转换到内核空间,每次只有一个线程执行
- 内核级线程:线程切换需要到核心态执行,内核同时调度同一进程的多个线程
-
处理机的三层调度图
-
带权周转时间是作业周转时间与作业实际运行时间的比值
-
先有资源调度(在队列里给进程排位置),后有进程切换,广义的进程调度包括选择进程和切换进程。
-
上下文切换与模式切换
- 上下文切换只能发生在内核态
- 模式切换:用户态和内核态之间的切换。进程运行在用户态,因中断或异常进入内核态,执行后返回原进程。
-
处理机调度算法中
- 时间片和多级队列肯定是抢占式
-
软件实现互斥方法理解
- 单标志法:turn=0意为P0可以进入,之后修改为1。如果P0不进入,则P1也不能进。违背“空闲让进”。
- 双标志法(flag数组2)先检查:定义flag数组,flag[i]为false则Pi未进入。先检查对方未进入,再进入并设置标志。如果同时检查都通过,会同时进入,违背“忙则等待”。
- 双标志法后检查:先设置标志为true,再检测。如果都设置为true,都进不去。出现“饥饿”现象。
- 皮特森算法:算法一和三的结合。每个进程设置flag后再设置turn标志,同时检测对方的flag和turn。
-
硬件方法有TestAndSet和Swap
-
整形信号量wait里面是循环,会阻塞。记录型信号量,wait会把进程加到等待队列中,使用block原语阻塞单个进程。signal会唤醒。
-
PV问题解题思路
-
生产者消费者问题
- 把进程分类,一种进程对应一个函数,函数内中文描述动作
- 考虑每个动作前P什么,如果P,找出V。缓冲区必须互斥访问。
- 所有PV写完之后定义信号量
- 检查多个P连续的时候,是否可能死锁,调整多个P的顺序。
-
读者写者问题(同类不互斥,异类互斥)
- 用count计数,同类进程第一个上锁,最后一个解锁
-
哲学家问题(只有一类进程)
- 只有能拿两双筷子才能就餐
-
理发师问题
-
-
死锁与循环等待:死锁的进程互相占有对方需要的资源,循环等待中的进程可以从别的地方获取资源从而打破等待的循环链。
-
死锁预防:破坏死锁的四个条件
- 破坏互斥:资源共享
- 破坏不剥夺:得不到满足的话释放所有资源
- 破坏请求并保持:预先静态分配法,运行前一次性申请完所有资源
- 破坏循环等待:顺序资源分配法,进程只能按照编号递增申请资源,不存在申请对方的资源。
3. 内存管理
- 链接的时候,把相对地址构成逻辑地址
- 装入的时候,把逻辑地址改为物理地址(地址重定位)
- 进程的内存映像:当程序调入内存运行,就形成了进程的内存映像。包括代码段(只读,多个进程可共享)、数据段、PCB、堆栈
- 内存保护中,cpu先把逻辑地址和界地址寄存器比,再加上基地址寄存器(重定位寄存器)的值
- 分段为什么方便进程的只读内存区域共享:若共享40页的代码区,每个进程都要建立40个页表项,而分段的话,每个进程只需要一个段表项(始址+段长)
- 覆盖用于同一个程序或进程,交换用于不同作业进程之间。
- 紧凑技术:内存时不时对进程进行移动和整理,用于克服外部碎片。
- 首次适应算法性能最好
- 连续分配管理和非连续例子:1GB的作业,需要连续的1GB空间,非连续的话,可以分散。
- 分页不会有外部碎片,有很少的内部碎片,分段有外部碎片
- 进程未执行的时候,页表始址和页表长度存放在进程PCB中,进程调度执行时,放入页表寄存器中。
- 地址变换过程由硬件自动完成
- 分级页表:例如1024个页表,每次查页表都需要调入这么多页面,如果分级,只需要调入一级页表,然后调入一个二级页表,总共两个页表,不用浪费空间存储无关页表。
- 段的保护
- 请求分页的地址变换机构图
4. 文件管理
- 文件的逻辑结构(理解)
- 顺序结构:记录定长,读写大批记录时效率高
- 索引文件:可以根据位序计算地址,有定长和变长(需要索引表)
- 索引顺序文件:索引+顺序,索引间有序,索引内顺序查找,类似分块排序。eg:字典
- 直接文件或散列文件:就是通过哈希算物理地址
- 文件分配方式☞非空闲块;文件存储空间管理☞空闲块管理
- 文件物理结构
- 分配方式
- 连续分配(数组)
- 链接分配(链表):隐式链接(链表,顺序查找);显式链接(FAT表就是静态链表数组,也显示空闲块)
- 索引分配:每个文件有个索引块,包括所有盘号。
- UNIX混合索引分配(重点计算题!):10个直接地址,一级间址,二级间址,三级间址。
- 空闲管理
- 空闲表法(内存动态分配)空闲链表法
- 位示图
- 成组链接法UNIX:空闲表+空闲链表法:顺序n个空闲盘块号存在第一个成组链块中,成组链块的最后一个空闲盘块号指的那个块,作为成组链块,保存第二组空闲盘块。
- 分配方式
- 目录:FCB的有限集合,一个FCB就是一个文件目录项
- Linux操作系统中,“/dev/hda"就是绝对路径,”./ls"是相对路径,"."表示当前工作目录
- 建立硬链接(索引结点)和软链接(符号链)的流程图
- os维护一个包含所有打开文件信息的表(打开文件表)。每个进程的打开文件表存储对文件的使用信息,系统表包含文件相关信息如位置,进程调用open时,在进程打开表中增加条目指向系统表。系统表对每个文件有一个计数器,计数为0,可以删去。
- 文件系统存放在磁盘上,多数磁盘划分为一个或多个分区,每个分区有一个独立的文件系统。MBR主引导记录负责引导计算机,确定活动分区,读入引导块。引导块程序负责启动分区中的操作系统。
5. I/O管理
- I/O设备:磁盘、打印机、鼠标、键盘、光盘等
- I/O接口(设备控制器):位于CPU与设备之间,与CPU和设备通信。结构图!
- I/O端口:设备控制器中可以被CPU直接访问的寄存器(数据、状态、控制寄存器)
- I/O控制方式(理解)
- 直接控制(轮询)和中断驱动方式都是一次一个字,且都经过CPU存入主存。前者CPU发出读命令之后要等待I/O设备准备好,后者发命令之后不需要等待,只需要在指令周期末尾检查中断,若I/O设备发出中断,则接受一个字。
- DMA在设备和内存间开辟一条数据通路,传输的是数据块,只需要在开始和结束传输前请求CPU。
- 通道是一个处理机,与DMA区别:DMA需要通道来控制数据块大小和内存位置,通道方式由通道控制;DMA对应一台设备和内存,通道可以控制多台设备与内存。
- 通道与一般处理机区别:通道指令类型单一,没有自己的内存,与CPU共享内存。
- I/O软件的层次记忆(软件☞软件☞程序☞程序)
- 用户层I/O软件(使用read命令)
- 设备独立性软件(设备无关性:逻辑设备和物理设备,每个设备都能执行的共有操作)
- 设备驱动程序(I/O进程与设备控制器之间的通信程序,每个设备接受命令之后行为不同,解析read指令)
- 中断处理程序(中断当前进程,执行命令)
- 磁盘高速缓存不同于介于CPU与内存之间的小容量存储器,而是指利用内存中的存储空间暂存磁盘中读的信息。
- 高速缓存与缓冲区的区别:
- 高速缓存有的,低速设备必有。缓冲区存放的是低速设备给高速设备的数据,不一定有备份。
- 如果高速缓存没有,会访问低速设备。但有缓冲区的话,不会直接访问低速设备。
- 缓冲区处理数据时间(处理机C,输入到缓冲区T,输出到处理机M)
- 单缓冲max(c, t) + m
- 双缓冲max(c, m) + t
- SPOOLING假脱机技术(理解)
- 输入输出井(磁盘)、输入输出缓冲区(内存)、输入输出进程
- 因为向磁盘输出数据速度快于向打印机输出数据,所以当有用户进程请求打印输出,SPOOLING系统同意打印,但不会给进程分配打印机。由假脱机管理进程把打印数据送给缓冲区暂存,送入输出井。对用户进程而言,打印已经完成。
- 要打印的作业在输出井排队,等到设备空闲,按顺序打印。(SPOOLING就是多了输入井和输出井这两个排队环节)
- 图(预输入程序、井管理程序、缓输出程序)