操作系统复习
进程与线程
通道和中断技术出现,才有了并发。(通道可以使IO设备无需CPU即可运行,但是需要不断轮询。中断解决了轮询问题。
基础
进程:PCB进程控制块、程序段、数据段
进程组织:链接方式、索引方式 (一般是链接方式:就绪队列、阻塞队列
进程的控制:就绪、运行、阻塞
调度:决策行为
切换:执行行为
进程通信:因为一个进程不能直接访问另一个进程的地址空间
共享存储:设置一个共享的空间
管道通信:类似于缓存机制,没写满就不能读,没空不能写。
消息传递:挂到对方的消息队列里
传统:进程是资源分配、调度的基本单位。
线程:处理机调度的单位 (TCB是线程控制块
进程:资源分配的单位 (统一进程的线程共享资源
线程:为了增加进程的并发度(有的进程可能需要同时做很多事(传统的进程是程序执行流的最小单位,现在是线程
多线程模型:多对一(并发度不高)、一对一(一个进程占用太多内核级线程,切换开销大)、多对多
调度
处理机调度:作业调度、内存调度、进程调度
调度算法的评价指标:CPU利用率、吞吐量、周转时间、等待时间、响应时间
周转时间中有带权周转时间。代权周转和周转时间越短越好。
调度算法:先来先服务(短作业不利)、短作业优先(容易饥饿)、高响应比优先 (等待时间+预计运行时间)/预计运行时间 1+等待/运行
以上三种算法不适用于交互式系统,适用于早期批处理系统。
调度算法:时间片轮转(不区分优先级)、优先级调度(可能导致饥饿)、多级反馈队列调度
同步、互斥
同步:A做完之后,B才能做
异步:A、B并发时独立的。
临界资源:一个时间段,只允许一个进程使用
临界区:一段互斥的执行程序。进程进入到临界区才可以使用临界资源
互斥访问原则:空闲让进、忙则等待、有限等待、让权等待
信号量机制:解决进程互斥与同步问题
信号量:一个变量,表示系统某种资源的数量
实现互斥:初值1、临界区之前P、临界区之后V
进程同步:初值0、前操作之后V、后操作之前P(这样可以实现前驱关系(如果要交替,则使用两个信号量
互斥同步使用:互斥在同步之后。(如果同步之前先加了锁,则生产者进不去,也就生产不了资源。
管程机制:
类似于class类,共享数据结构是类里面的变量,操作可以看做类里面的函数。
死锁:互斥、不剥夺、请求和保持、循环等待
预防死锁:破坏条件(互斥spooling、
避免死锁:防止系统进入不安全状态(银行家算法 → 安全序列
检测死锁:检测系统有无死锁发生
解除死锁:采取某种措施解除死锁(资源剥夺、进程撤销、进程回退
内存(页面)
代码程序运行:编译、链接、装入(装入内存)
链接方式:静态链接、装入时动态链接、运行时动态链接
装入:绝对装入、静态重定位、动态重定位
内存分配
连续分配:
单一连续分配(只能有一道用户程序,独占整个内存的用户区)、
固定分区分配(分区固定,会产生内部碎片)、
动态分区分配(根据进程大小动态建立分区)
记录内存使用情况:空闲分区表(放入表、空闲分区回收)、空闲分区链(删除节点)——分配和回收的问题
内部碎片:分配给某进程的内存区域中,有些部分没有用上
外部碎片:内存中某些空闲分区太小而难以利用
四种动态分区分配算法:首次适应算法、最佳适应算法、最坏适应算法、邻近适应算法
非连续分配:
基本分页存储管理
基本分段存储管理
段页式存储管理
内存空间分为许多相等的分区(分区、页框、页帧、内存块、物理块)
每个页框有一个编号(页框号、内存块号、页帧号、物理块号)
用户进程的地址空间分为与页框大小相等的一个个区域(页、页面)
每个页面一个编号(页号)
OS以页框为单位,给进程分配空间。页框与页一一对应。
逻辑地址→物理地址:
计算页号、页偏移量:
页号 = 逻辑地址 / 页面长度
偏移量 = 逻辑地址 % 页面长度
二进制表示:页面长度2的K次bit。 逻辑地址末尾K位表示偏移,前面的部分是页号。
逻辑结构:
页表:
页表寄存器:存放 页表在内存中的起始地址F,页表长度M。
页号二对应第三块内存块。因此直接取商就好。商就是页号。
越界中断:P>=M 页号在页表中不存在。
缺页中断:页框已经分配给进程了,但是进程还没有装入这个页面。
文件、磁盘
文件的逻辑结构
无结构:流式文件
有结构:记录式文件。由一组相似记录组成,每条记录又由若干数据项组成。
顺序文件、索引文件、索引顺序文件、多级索引顺序文件(100个记录为1组,每组平均查找50次)
目录结构
一个文件对应一个FCB,一个FCB就是一个目录项。多个FCB组成文件目录。
目录结构:单级目录、两级目录、多级目录、无环图目录
删除时,只是删除该用户的FCB,并且使共享计数器减一。 只有共享计数器为0时,才能删除文件。
文件的物理结构
磁盘中存储单元也被分块,与页面(内存块)大小相同。
分配方式:连续分配、链接分配、索引分配
磁盘
一次读写时间:寻道时间、延迟时间
磁盘调度算法:先来先服务、最短寻找时间优先算法、扫描算法、循环扫描算法(快速到达起始端)
IO
IO设备:机械部件、电子部件
电子部件:IO控制器(CPU → IO控制器 → 设备的机械部件
IO控制器的两种期存器编址方式:内存影响、寄存器独立编址
IO控制方式:程序直接控制方式、中断驱动方式、DMA方式、通道控制方式
程序直接控制方式:在IO的过程中,CPU需要不断轮询检查
中断驱动方式:CPU可和IO并行 但是每个字传输需要经过CPU,这样的中断处理太消耗时间(每次只能读写一个字
DMA方式:数据传送单位由字变成块 数据直接从设备到内存,或内存到设备。不需要CPU传递。
但如果读写多个离散存储的数据块,或者将数据分别写入到不同
的区域内存时,CPU需要发出多次IO指令,进行多次中断处理。
通道控制方式:通道是硬件,“弱鸡CPU”。 每次读写一组数据块。
IO软件层次:用户层软件、设备独立性软件、设备驱动程序、中断处理程序、硬件
用户层软件:用户使用库函数进行IO操作
设备独立性软件:实现与设备的硬件无关的功能。
1)向上层提供调用接口 2)设备保护 3)差错处理 4)设备的分配与回收 5)数据缓冲区管理
6)建立逻辑设备到物理设备的映射、根据类型选择驱动(逻辑设备表LUT)
设备驱动程序:对设备进行具体控制。
库函数翻译、设置设备寄存器、检查设备状态
中断处理程序:进行中断处理
用户层软件通过systemcall请求设备独立性软件层的服务。
设备独立性软件层根据LUT调用设备对应的驱动。
驱动程序向IO控制器发出命令。
等待IO完成的进程会被阻塞。因此需要进程切换。进程切换需要中断。
IO任务完成时,IO控制器发出中断信号。系统根据中断信号类型,找到相应的中断处理程序并执行。
IO核心子系统
IO的软件层次中,除了用户层,其他的是IO系统。
用户层软件:假脱机技术(SPOOLing)
设备独立性软件:IO调度(如:磁盘调度)、设备保护(UNIX中,设备被看做文件,有对应的FCB,判断用户是否有访问权限)
脱机:脱离主机控制,进行输入输出。
磁盘:输出井、输入井
内存:输入缓冲区、输出缓冲区(输入进程、输出进程分别模拟脱机输入的外围控制机
IO设备 ←→ 内存 ←→ 磁盘
SPOOLing技术可以把独占式设备改为共享设备。
IO设备的分配与回收
设备控制表:DCT 每个设备一张,用于记录设备情况
控制器控制表:COCT 每个设备控制器一张,OS根据COCT对控制器进行操作、管理。
通道控制表:CHCT 每个通道一张,OS根据CHCT对通道进行操作、管理。
系统设备表:SDT 记录了系统中全部设备的情况。
设备分配步骤:
根据设备名找SDT
根据SDT,找DCT 分配设备给进行
根据DCT,找COCT 分配控制器给进程
根据COCT,找CHCT 分配通道给进程
缓冲区管理
缓冲区充满后,才能把缓冲区的数据传出。
单缓冲、双缓冲、循环缓冲、缓冲池(h,s)

浙公网安备 33010602011771号