- 绪论
- OS硬件模型:冯,诺伊曼模型5部分:内存(MDR和MAR),处理单元(ALU和TEMP),控制单元(PC程序计数器和IR指令寄存器), 输入,输出
- OS的形成与发展
- 手工操作阶段
- 脱机输入输出(缓冲区或者spooling技术)
- 批处理技术
- 多道程序设计
- OS基本类型
- 技术:
- 单道批处理技术
- 解决人机矛盾中,CPU和I/O设备不匹配的矛盾中形成的
- 多道批处理技术
- 高效利用CPU的资源
- 特点:多道,宏观上并行,微观上串行;
- 优点:资源利用率高,系统吞吐量大;缺点:用户响应的时间比较长,不提供人机交互能力
- 单道批处理技术
- 批处理OS:用户脱机使用计算机或者批处理
- 分时OS:多路性,交互性,独占性
- 实时OS:提供及时响应和高可靠性
- 其他类型OS:嵌入式,集群,网路,分布式OS(统一,共享,透明,自治)
- 技术:
- OS特征
- 并发性
- 共享性(互斥共享和同时访问)
- 虚拟性
- 异步性
- OS分层
- 内部层次结构
- 软件分层
- 操作系统的性能指标:
- 资源利用率,吞吐量,周转时间,平均周转时间
- 进程的处理机制
- 持续透明,杀死或重新执行;等待或持续
- 系统调用和函数调用的区别:
- 系统调用比函数调用更加安全,但开销会增加
- 系统启动时,堆栈切换和权限的切换,常用调用时无堆栈切换
- X86中断处理:iret与ret,retf
- iret弹出EFI,AGS和SS/ESP
- ret弹出EIP
- retf弹出CS(code Segement)与EIP
- OS的体系结构
- 模块组合结构
- 层次结构
- 微内核结构:适合分布式系统
- 进程和线程管理(作业管理,处理器管理):控制,同步,通信,调度,死锁
- 进程
- 定义:执行中的文件,即程序和程序运行的状态
- 特点:动态性,并发性,独立性,异步性和结构性
- 组成:进程控制块(PCB),程序段和数据段
- 进程转换图(省略)
- 操作系统的内核功能:中断,时钟和原语相关
- 进程间通信:
- 共享存储器系统:内存
- 消息传递系统
- 定义:以消息为单位,直接利用一组通信命令(原语或者信号量)来实现通信
- 直接通信:直接把消息发送给接收进程,接收进程从消息缓存队列中取得消息
- 间接通信:发送给某个中间件实体,类似于程序中的MQ
- 管道通信系统(pipe):
- 类似于一个OS类
- 特点:半双工通信,数据只能单向流动,只能存在于子父进程中,如linux的kill命令
- 只有一个线程时可临时放弃,进程则不同放弃,原语也不可中断
- 特征:
- 管程类的数据只能被局限于管程内进行访问
- 进程只有通过调用管程才能
- 每次仅允许一个进程在管程内执行某个过程
- 信号量(Semophore):
- 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段;
- OS是管理者,优先级高于进程
- 信号量可表示系统资源二代数量,由Dijsktra提出
- 主要由一个整型变量(sem)和两个原子(记录型信号量)操作
- P, V->wait(S),signal(S);表示资源信号量,前者保证互斥,后者保证释放
- P过程:
- 检查s.value>=0是否成立
- 成立:表示存在该类资源,则将该资源分配给进程,将s.value-1;
- 不成立:表示该资源已经分配完毕,进程自我阻塞,放弃处理机;
- 检查s.value>=0是否成立
- V过程:
- 释放一个资源,执行操作s.value+1
- 执行后,若s.value>0,表示存在该资源;
- s.value<=0表示信号量在等待队列中,仍然继续等待;
- 释放一个资源,执行操作s.value+1
- 实现进程同步:V(s)完成后进行释放,P(s)检查是否互斥;
- 实现进程互斥:在一个进程中先P(s)进行加锁和进入临界区,结束和用V(s)进行释放相应的资源;
- 实现前驱关系:用P(s)检测前者是否已经完成,用V(s)表示前者已经完成;
- 信号(signal):与信号配合使用,用于通知接收进程某个事件已经发生
- 套接字(socket):与其他通信机制不同的是,它可用于不同进程间的通信
- 线程间通信(与同步互斥的方法有交叉):
- 锁机制:
- 互斥锁:提供了以排他方式防止数据结构被并发修改的方法
- 条件变量:条件变量可以以原子的方式阻塞进程。对条件的测试是在互斥锁的保护下进行的,条件变量始终与互斥锁一起使用
- 读写锁:允许多个线程同时读共享数据,而对写操作是互斥的
- 信号量机制(Semaphone):包括无线线程信号量和命名线程信号量
- 信号机制(Signal)类似进程间的信号处理,但是主要用于线程同步,所以线程没有数据通信机制
- 锁机制:
- 作业:计算机完成某项任务而要求计算机所做的工作集合,可由多个进程组成,一般存在于批处理OS
- 线程(多个组成进程):为了更好使多道程序并发,共享相同的地址空间。指令执行流量最小单位,CPU调度的基本单位。
- 线程与进程的比较
- 资源
- 进程是资源分配单位,线程是CPU的调度单位;
- 进程拥有完整资源平台,而线程只独立指令流执行的必要资源
- 调度:三态状况几乎一致
- 并发性:线程能减少并发的时空开销,共享内存和文件资源,可直接通信。
- 资源
- 线程的实现方式:
- 多对多模型(轻量级进程)
- 优点:开发者能够创建所用的用户级线程
- 举例:SOLARIS2,IRIX,HP-UX
- 多对一模型(用户-线程级)
- 优点:线程在用户空间进行管理,效率相对较高
- 缺点:只要一个用户阻塞则全部阻塞
- 举例:POSIX,PTHREDS,Solaris Thread
- 一对一模型(内核级线程)
- 优点:相对独立,并发性好
- 缺点:创建,终止和切换相对较大,创建用户线程,同时创建内核线程,以线程为单位耗费更多时间
- 举例:Windows,Solaris,Linux
- 多对多模型(轻量级进程)
- 不同os对线程的支持:
- 单进程系统。MSDOS
- 单进程多线程。PSOS,如路由器
- 多进程系统。传统unix
- 多进程系统。现代UNIX
- 为什么PCB是进程存在的唯一标志?
- PCB是一个能与其他进程并发执行的数据结构,因此,PCB是为了保证程序的并发执行能力。
- 调度
- 处理器的三级调度:高级调度(作业:一组进程)->中级调度(内存管理与扩充)->低级调度(运行频率很高)
- 进程切换调度程序SWITCH主要任务:
- 保存现运行进程的现场信息
- 就绪队列中选择一个在内存且最优资格运行的进程,以免使其占用CPU
- 为新选中的进程恢复现场
- 调度的基本准则:CPU使用率,吞吐量,周转时间,等待时间,响应时间
- 进程调度的方式:抢占式(剥夺),非抢占式(非剥夺)
- 引起进程调度的原因:
- 进程结束
- 因某种原因:如I/O请求,P操作,阻塞原语
- 执行完系统调用等系统程序后返回用户进程
- 高优先级的进程进入
- 分时系统中,分配给进程的时间片已用完
- 带权周转时间 = 作业周转时间/作业实际运行时间
- 典型调度算法:
- 作业调度
- 先来先服务FCFS
- 短进程优先SPN
- 优点:具有最优平均周转时间
- 缺点:可以产生饥饿;预估未来
- 最高相应比
- 相应比 = 作业响应时间 /估计运行时间
- 特点:不可抢占,关注进程的等待时间
- 优先级调度算法
- 静态优先级:按进程类确定,按作业的资源要求确定,按用户类型和要求确定
- 动态优先级:根据进程占有CPU时间的长短来确定,根据就绪进程等待CPU时间的长短确定
- 进程调度
- 时间片轮RR
- 时间片:分配处理机资源的时间基本单位
- 时间片结束,按FCFS切换到下一个片
- 缺点:时间片太长退化成FCFS,时间片太小产生大量切换影响系统的吞吐量,时间片长度合适
- 多级反馈队列MFQ
- 定义:就绪队列分成独立的队列,每一个队列一个策略,前台交互,后台批量处理
- 固定优先级:无前台,无后台可能会导致饥饿
- 时间片轮转:每个都得到一些队列分配
- 公平共享调度 Fair Sharing Schedule
- 一些用户组比其他更重要,保证不重要无法形成垄断
- 未使用按比例,没有达到资源使用率目标优先级更高
- 时间片轮RR
- 处理机调度:
- 定义:每个处理器运行自己的程序,调度程序对共享资源的访问需要同步
- 特点:多个处理机组成,处理机间可以共享
- 动态进程分配:
- 特点:可以任意分配,共享公共队列
- 缺点:调度开销
- 优点:负载均衡
- 作业调度
- 同步
- 定义:不同进程之间存在着相互制约的关系,为了协调进程之间的相互制约关系,引入了进程同步的概念
- 并发进程的正确性:共享性,不确定性,不可重现性,间歇性程序错误
- 临界资源的访问过程
- entry section //进入区
- critical section //临界区
- exit section //退出区
- reminder section //剩余区
- 临界资源:把一次仅允许一个进程使用的资源
- 临界区:访问临界资源的那段程序
- 同步互斥(互斥锁):OS在利用同步机制在并发的同时,保证一部分是原子操作;
- 同步互斥应该遵循的原则:空闲让进,忙则等待,有限等待,让权等待;
- 实现临界区域互斥的方法:
- 1.硬件实现方法【中断屏蔽,硬件指令等方法】
- 缺点:不满足让权等待;
- 关闭中断,进程也无法停止,导致饥饿发生;
- 临界区时间太长无法确定中断所需要的时间,要小心使用;
- 优点:适用于任意数目的进程,不管是单处理机还是多处理机,简单容易验证其正确性,可以支持进程内有多个临界点,只需要给临界点设置一个布尔变量
- 缺点:不满足让权等待;
- 2.软件实现方法【单标算法->双标算法->双标后检查算法->Perterson算法】
- 单标算法
- 缺陷:空闲让进
- 特点:设置一个标志位turn,每次执行前检测
- 伪代码:一个
- while(turn!=0){
- critical section;
- turn = 1;
- }
- remainder section
- while(turn!=0){
- 双标算法
- 缺陷:忙则等待,两个线程可以同时进入
- 优点:不用交替进入,可持续使用
- 特点:标志位:2个线程设置两个标志位,执行前检测其他线程标志位,执行前将自身设置为true,执行完成后将自身设置为false
- 伪代码:Pi
- while(flag[j]){
- flag[i] = true;
- critical section;
- flag[i] = false;
- }
- remainder section;
- while(flag[j]){
- 双标后检查
- 缺陷:有限等待
- 特点:将自身标志位设置为true的放在检测前
- 伪代码:Pi
- flag[i] = true;
- while(flag[j]){
- critical section;
- flag[i] = false;
- }
- Peterson算法
- 结合双标和单标
- 单标用来控制进入turn,双标用来表示想进入flag[i]
- 伪代码:Pi
- flag[i] = TRUE; turn=j;
- while(flag[j] && turn =j)
- critical section
- flag[i] = false;
- }
- remainder section
- 单标算法
- 3.高级抽象方法【信号量,锁】
- 信号量(Semophone):
- 1.硬件实现方法【中断屏蔽,硬件指令等方法】
- 经典同步问题:
- 分析进程同步和进程互斥的方法与步骤:
- 1.关系分析。找出进程数并分析关系,同步,互斥,前驱后进行改写
- 2.整理思路。确定PV顺序
- 3设置信号量。根据上面两步,设置需要的信号量,确定初值,完善整理。
- 1.生产者-消费者问题
- 关系分析:生产者与消费者对互斥访问是互斥关系;生产者生产后,消费者才能消费,是同步关系。
- 两个进程:
- 信号量设置:设置3个信号量。mutex作为互斥信号量,初始为1;full记录满缓冲数,初始0;empty记录对于当前的空缓冲区,记录为0,
- 实现思路:
- 生成者:produce->P(empty)->P(mutex)->add data to buffer->V(mutex)->V(full);
- 消费者: P(full)->P(mutex)->get data from buffer ->V(mutex)->V(empty)->consume;
- 注意:P(mutex)要紧挨着buffer不然会阻塞;
- 2.读者-写者问题
- 关系分析:读者和写者是互斥的,写者和读者也是互斥的,读者和读者无同步互斥问题
- 整理思路: 写者和任何进程都是互斥的,读者则会占用一个文件
- 信号量设置:设置3个信号量。count为计数器,初值为0;mutex为互斥信号量,rw用于保护读写互斥访问。##写者优先##将原来的rw分成两个信号量wmutex,cmutex,表示正在写或者等待写
- 实现思路:
- 读者优先:
- writer:P(rw)->writting->V(rw)
- reader:前半部分是为了检测并阻止写进程写,后半部分是读完后进行处理
- P(mutex)->P(rw)->count+±>V(mutex)->Reading->P(mutex)->count-- ->V(rw)->V(mutex)
- 写者优先(公平算法,更安全):
- reader:P(wmutex)->P(mutex)->count+±>V(mutex)->V(wmutex)->reading->P(mutex)->count-- ->V(mutex)->V(cmutex);
- writer:P(wmutex)->P(mutex)->writting->V(mutex)->V(wmutex);
- 读者优先:
- 3.哲学家进餐问题
- 关系分析:与贪心算法相反,在取筷时获得互斥信号量
- 整理思路:如奇数号则先拿左筷子,偶数号则先拿右筷子
- 信号量设置:设置一组信号量表示筷子chopsticks[i],和一个取筷子的信号量
- 实现思路:P(mutex)-> P(chopsticks[i])(左筷子)->P(chopstick[(i+1)%5])(右筷子)->V(mutex)->V(chopsticks[i])->V(chopsticks[(i+1)%5])
- 4.理发师问题
- 关系分析:与生成者和消费者关系类似
- 整理思路:顾客->若顾客人数大于n+1,则离开,否则等待,找凳子坐下->理发->离开,等待人数-1
- 信号量设置:设置mutex为互斥信号量,bchair代表理发师信号量,wchair代表凳子的信号量,用于同步理发师与顾客的信号量,ready,finish同步理发师与顾客的信号量
- 分析进程同步和进程互斥的方法与步骤:
- 死锁
- 原因:
- 1.系统资源的竞争
- 2.进程推进顺序非法
- 必要条件:
- 1.互斥条件
- 2.不可剥夺条件
- 3.请求和保持条件
- 4.循环等待条件
- 处理策略:破坏4个必要条件
- 死锁预防:一次请求所有资源,资源剥夺,【突发式处理进程】
- 死锁避免:寻找可能安全运行的顺序【不必剥夺】
- 银行家算法:
- 变量:
- Avaliable可利用的最大资源,Max最大需求矩阵,Allocation分配矩阵,Need需求矩阵
- 核心矩阵:Need[i][j]=Need[i][j]-Allocation[i][j]
- 思路:Request<=Need -> Request <=Avaliable -> Avaliable -= Request ;Allocation += Request;Need -= Request -> (安全检查)->确认分配否则回滚
- 变量:
- 安全检查算法:
- 思路:Work= Avaliable, Finish = false->Need[i]<Work(确认重新分配)->Finish=true?->安全,不安全
- 银行家算法:
- 死锁检测及解除:定期检查死锁是否已经发生;
- 死锁解除:
- 1.资源剥夺法。挂起(suspend)某些进程,并抢占其资源
- 2.撤销进程法。强制撤销部分,甚至全部进程并剥夺其资源
- 3.进程回退法。让一个或多个回退志足以回避死锁的办法
- 死锁解除:
- 原因:
- 进程
- 存储器管理(内存管理):内存分配,保护,和扩充
- 内存管理
- 内存管理方式:重定位(relocation),分段(segmention),分页(paging), 虚拟存储(virtual memory)
- 交换和覆盖(Swapping & Overlay):
- 定义:多道程序环境用来扩充内存的两种方法
- 交换:
- 主要介于外存和内存之间进行;
- 把暂时不用的某个程序以及数据部分(或全部)从内存移到外存中去,以便于腾出不必要的内存空间;
- 不要求程序员给出程序段之间的覆盖结构,而且交换主要在进程和作业之间;
- 打破一个程序一旦进入主存运行直到结束的限制。
- 覆盖:
- 大的程序段进行的一系列覆盖,每个覆盖是相对独立的东西
- 连续分配的管理方式:
- 单一连续分配
- 特点:适合单道程序,采用覆盖技术,不需要硬件支持,无法实现多道程序共享内存
- 优点:简单,无外部碎片,可采用覆盖技术;【静态重定位装入】
- 缺点:单用户,单任务的操作中,内部碎片,存储器的利用率极低。
- 固定分区分配
- 特点:通常采用静态重定位方式装入内存
- 划分分区的方法:
- 分区大小相等。缺乏灵活性,用一台计算机控制多个相同对象的场合。
- 分区大小不等。
- 内存分配:
- 分区号:大小:地址(起始地址):状态 = 1:20KB :100KB:是否分配
- 动态分区分配
- 特点:用链接指针将内存中的空闲分区链接起来,形成空闲分区链块
- 分区链头指针352KB -> 32KB ->520KB
- 动态分区分配算法:
- 首次适应算法(First Fit):每次都从最开始进行扫描
- 优点:简单,保留了高地址部分大的空闲分区,无内部碎片
- 缺点:外部碎片增加,分配大块变慢
- 下次适应(Next Fit):也叫循环首次适应算法,下一次寻找分块自动从上一次结束时进行寻找
- 优点:分块分区更加均匀,减少查找的开销;
- 缺点:导致缺乏大的空闲分区
- 最佳适应算法(Best Fit):先从小到大进行排序再分配
- 优点:避免大的空闲分配被拆分
- 缺点:五拆分难以利用
- 最差适应算法(Worst Fit)
- 优点:中等大小分配时效果最好
- 缺点:释放过于缓慢
- 首次适应算法(First Fit):每次都从最开始进行扫描
- 分区的回收:在空闲分区表中检查是否有相邻的空闲分区,如有则合并成一个大的空闲分区
- 四种情况:
- 回收上下邻接的空闲分区
- 回收下一个链接的空闲分区
- 回收上下邻接一个空闲分区
- 回收不与任何分区相邻的分区
- 分区分配的动态管理:
- 拼接技术:时机问题
- 在某个分区回收时立即进行拼接,这样在主体中总是有一个连续的空闲区;
- 当找不到足够大的空闲分区总是满足作业要求时进行拼接,这样可降低拼接的频率
- 动态重定位分区分配技术
- 紧凑(compaction): 所有的应用程序可动态重定位,等待状态以利用。
- 分区兑换(swapping in/out):通过抢占并回收等待状态进程的分区,以增大可用内存空间
- 优点:
- 实现了多道程序共用主存;
- 管理方案相对简单,不需要更多时间;
- 实现存储保护的手段比较简单;
- 缺点:
- 主存利用不够充分,存在外部碎片;
- 无法实现多进程共存存储器信息;
- 无法实现主存的扩充,进程地址空间受实际存储空间的限制;
- 拼接技术:时机问题
- 单一连续分配
- 非连续分配的设计:分页和分段
- 分页
- 分页表存储管理系统中的逻辑地址:页号:页内位移w = P:W
- 物理地址:Pysical Address = 2^w x P + A(偏移地址)
- 分页管理存在的2个问题:
- 每次访存都要进行逻辑到物理地址的转换,过程必须足够快,否则会降低访存速度
- 页表不能太大,否则内存利用率会降低;
- 具有块表地址变换的机构:页表缓存(TLB,Translation Lookside Buffer)-> 直接页号和表号的映射
- 地址变换的过程:
- \1. LA(CPU)->Page(页表)->Cache, page与快表中的page进行比较;
- 2.1 命中->直接形成物理地址PA,存取数据仅一次访存便可以实现;
- 2.2 未命中 -> 进入将主存中的页表存入快表,访问2次
- 顺序:TLB(LA只负责计算) -> 页表 ->cahce ->主存
- 多级的目的在于建立索引,不用浪费主存储空间去存储无用的页表项,也不用盲目地顺序式查找页表。
- 两级页表:为了查询方便,顶级页表最多只有一个页面
- 分页为内存提供两种方式的保护:
- 地址越界保护
- 通过页表访问信息对内存提供保护
- 分段
- 目的:方便编程,信息共享和信息保护;通过指向相同的页表,可实现内存间的段共享;
- 段式管理按照用户进程中的的自然划分逻辑空间
- 定义:段号:段内偏移量=S:W;
- PA=段起始地址+88(A),注意不是W
- 分段保护和分页保护类似:
- 一种是地址越界保护;
- 另一种是存取控制保护;
- 环保护机构(OS处于内核内,APP和S处于中间环)
- 分段与分页的区别:
- 分段是信息的物理单位,分页是信息的逻辑单位;
- 分段的目的为了更好地满足用户的需要;分页的目的是系统管理所需,为了提高内存;
- 段的长度不固定,不同的段有不同的段长;页的大小固定且系统确定;
- 分段的作业地址空间是一维的,分页的地址空间是二维的;
- 有内部碎片,无外部碎片;无内部碎片,有外部碎片
- 分段和分页的优点:
- 便于程序模块化处理和便于处理变换的DS;
- 便于动态链接
- 便于共享分段
- 可实现虚拟存储,不受主存容量的控制
- 无内部碎片
- 分段和分页的缺点:
- 处理机变换地址花费的时间,要为段提供附加存储空间
- 减少碎片采用拼接技术;
- 分段的最大尺寸受到主存可用限制
- 有外部碎片
- 段页式管理
- 无外部碎片,访问一次需要经过三次(先获取段,再获取页,再获取块);
- 段号S:页号P:页内偏移;
- b(块号) = d(起始页)+P* 页表项大小(2^w),即分段和分页前两项的组合;
- PA = b x 页表大小L + w;
- 分页提高内存利用率,分段反映逻辑利于共享;
- 优点:
- 分散存储
- 内存利用率较高
- 便于代码和数据
- 无外部碎片
- 缺点 :
- 访问效率下降
- 一次访问转换成了三次访问,有内部碎片
- 分页
- 程序的局部性原理
- 时间局部性原理
- 空间局部性原理
- 分支局部性原理:一条跳转指令的两项执行,很可能跳转到相同的内存位置
- 虚拟内存
- 原理:
- 装载程序时,只将当前指令执行需要的页面或段载入内存;
- 指令执行中时,处理器通知OS将相应页面或者段保存到虚拟存储;
- 特征:多次性,对换性,虚拟性,离散性(程序离散性存储)
- 常用技术:请求分页管理;请求分段管理,请求段页式管理
- 需要的硬件支持:
- 一定容量的内存和外存,页表机制。作为主要的数据结构;
- 中断机构,当用户程序要访问的部分未调入内存,则产生中断;
- 地址变换机构,逻辑地址到物理地址的变换
- 原理:
- 请求分页式管理:
- 定义;页号:物理块号:状态位P:访问位A:修改位A:外存地址
- 页号:基本定义同基本分页存储管理
- 访问位A:提供给置换算法
- 修改位M:页面修改则不需写到外存
- 外存地址:请求分页系统中的页表项
- 缺页中断:当访问的页面不在内存时,便产生一个缺页中断
- 与一般中断的两个明显区别:在指令执行期间产生和处理中断信号,属内部中断;一条指令在执行期间,可能产生多次缺页中断。
- 地址变换机构:
- 若找到要访问的页,便修改页表项中的访问位(写指令则还须重置修改位);然后利用页表项中给出的物理块号和页内地址形成物理地址;
- 若未找到该页的页表项->内存中查找页表项-> 对比页表项中的状态位p,看该页是否已调入内存,未调入则产生缺页终端,请求外存调入内存中
- 修改访问位和修改位进而产生物理地址【地址变换结束】
- 在何处保存未被映射的页?
- 交换空间(文件或磁盘)采用特殊格式存储未被映射的页面。
- 寻址路径:TLB(Translation Lookaside Buffer,即页表缓存)->页表->cache->主存->外存
- 1.考虑命中率和缺页率的有效访问时间的计算
- 访问页在主存且存在块表中:E=e(查找快表时间)+t(形成物理地址并访问内存物理数据时间)
- 访问页在主存中(不缺页)但是不存在于快表当中:EAT=e(快表)+t(页表)+e(修改)+t(快表
- 访问页表不存在主存中,设缺页中断时间为t1:EAT=e(快表)+t(页表)+e(修改)+t(快表
- 2.考虑缺页率和命中率的有效访问时间的计算
- EAT=查找快表的时间+a x 形成物理地址并访问内存数据时间+(1-a)x [查找页表时间+f x (处理缺页中断时间+查找快表时间+形成物理地址并访问+(1-f)x(修改快表时间+形成物理地址并访问内存时间))]
- 处理缺页中断时间;t1=p+ta+(1-p)t6;
- e=0,a=0时,则有效访问时间为;EAT = t+ f(t1+t)+(1-f)t
- EAT(有效访问时间)计算
- 无快表,访问内存所需时间t,EAT= t+2t(对应物理地址访问);
- 有快表,设表tlb的查找需要时间e,访问内存一次需要时间t,命中率为a,则有效访问时间分别为:查页表项的平均时间为ea+(t+e)(1-a);
- EAT=ea+(t+e)(1-a)+t=2t+e-ta;
- 请求调换页功能
- 页面置换算法OPT, FIFO, LFU, LRU, CLOCK
- 评价标准:
- 尽可能减少页面的调入次数;
- 把不再访问或短期页面调出;
- OPT 所淘汰页面是以后永不使用的或者是长时间不再被访问的
- FIFO 优先淘汰最早进入内存的页面,会产生bleady现象
- LRU 选择最长时间未被引用的页面进行置换
- CLOCK 原理:即最近未使用nru
- 1.增加访问位,描述过去的访问时间;
- 2.各页面形成环链表;
- 3.指针指向最先调入;
- 简单clock算法:
- 入口->p所指页面访问位=0?
- =0,选择淘汰掉该页面,后移;
- !=0 ,将页面访问位置换位0,后移;
- 入口->p所指页面访问位=0?
- 改进clock算法:
- 1.扫描过程中不改变访问位A,淘汰A=0,M=0;
- 2.1不成立,则淘汰A=0,M=1,将所有a置为0
- 3.2不成立,将所有a置为0重复
- 4种类型页面:
- a=0,m=0;未被访问,未被修改
- a=0,m=1;未被访问,被修改
- a=1,m=0;被访问,但未被修改
- a=1,m=1;被访问也被修改
- 评价标准:
- 页面分配策略
- 物理块的分配策略:固定的分配局部置换,可变分配全局置换,可变分配局部置换;
- 页面调入策略:
- 请求调页策略:缺:每次调入一页,需花费较大的开销;
- 预调页策略:缺:一次性调入多个相邻页面无法保证会被访问到;
- 从何处调入:
- 拥有足够的对换空间:全部从对换区调入所需页面
- 缺少足够的对换空间:可能被修改的部分,换出时需调至对换区
- unix方式:与进程有关的文件放在文件区,故未运行的应从文件区调入
- 定义;页号:物理块号:状态位P:访问位A:修改位A:外存地址
- Bleady现象:
- 产生:缺页率随着分配的物理块数的增加而增加
- 出现;被归类为堆栈算法的页面置换算法不可能出现, 如LRU,OPT
- 抖动
- 请求分页系统中的每个进程只能分配所需内存一部分
- 预防抖动:
- 局部置换原则
- 引入工作集算法
- 工作集原理:当局部随之稳定,工作集页随之稳定,位置改变,工作集则快速扩大或收缩过渡到另一稳定值
- 调解常驻集
- 若进程缺失率过高,常驻集增加;
- 若缺失率过低,常驻集减少;
- l=s准则(产生缺页平均时间与系统处理页时间相等),挂起若干进程
- 缺页率=所需调入次数[OPT] / 共需要的次数[实际运行状况]
- 虚拟地址如何转换为物理地址
- 1.利用虚拟页号查找页表,在TLB中(从前向后取)
- TLB+页内偏移->查找data cache
- TLB形式:虚拟页号(TLB标记:TLB索引):页内
- 2.利用虚拟页号查找TLB->页表
- 页表+页内偏移->查找data cache表
- 3.除以上两种产生缺页中断
- 1.利用虚拟页号查找页表,在TLB中(从前向后取)
- 内存管理
- 文件管理:文件管理,目录管理,逻辑结构,操作管理,文件保护
- 文件系统:文件的基础
- 有结构的文件:
- 基本数据项:数据元素+字段
- 组合数据项:若干基本数据项
- 无结构的文件(由若干字符组成,可以看作是一个字符流,即流式文件)
- 文件的分类:
- 用途;系统文件,库文件,用户文件
- 数据形式:源文件,目标文件,可执行文件
- 文件存取控制:只读文件,读写文件,只执行文件
- 组织形式和处理方式分类:普通文件,目录文件,特殊文件(系统中的各类I/O设备)
- 文件的操作:
- 创建文件,删除文件,读文件,写文件,截断文件,设置文件的读写位置
- 其他文件操作:
- 以提供有关文件操作的系统调用
- 关于目录
- 文件逻辑结构
- 有结构的记录式文件
- 顺序文件
- 串结构;各记录的顺序与关键字无关
- 顺序结构:所有记录按关键字排序,可递增排列,也可递减
- 索引文件
- 索引顺序文件
- 直接文件和哈希文件
- 优:提高存取速度;
- 缺;可以出现冲突;
- 顺序文件
- 无结构的流式文件
- 有结构的记录式文件
- 有结构的文件:
- 目录结构
- 主要功能;
- 实现按名存取;
- 提高对目录的检索速度;
- 文件共享;
- 允许文件重名;
- FCB(文件控制块);
- 基本信息类;
- 存取控制信息类;
- 通用信息类
- 单级目录结构:
- 目录结构:FCB1:FCB2:FCB3…:FCBn:数据文件;
- 优点:简单且能实现目录管理的按名存取的基本功能;
- 缺点:查找速度慢,不允许重名;不便于实现文件共享;
- 两级目录结构:
- 建立一个单独的用户目录UFD(User File Directory),在系统再建立一个文件目录MFD(Master File Directory);类似于 windows下的用户/文档
- 优点:提高了检索目录的速度,可以解决重命名的问题,不同用户可使用不同的文件夹进行共享内存
- 缺点:两级目录结构缺乏灵活性,不能对文件分类
- 多级目录结构:
- 结构:树形名+多级目录
- 优点:就多级目录与两级目录相比而言,其查询速度更快,同时层次更加清晰,能够更加有效地进行文件的管理与保护
- 缺点:在多级目录中查找一个文件,需按路径访问中间结点,这就增加了磁盘的访问速度,将影响查询速度
- 图形目录结构:(无环图形目录结构)
- 主目录分为:AB两个部分;A部分为头文件,另外一部分为偏移部分
- 优点:方便文件共享,两个不同目录中的同一文件仅在磁盘上保存一份
- 缺点:增加系统实现的难度
- 目录查询技术:
- 线性检索法:搜索目录,优点是编程简单,执行耗时
- Hash法:hash数据结构,优点是减少搜索时间。缺点是:可能存在2个冲突文件的hash值相同
- 主要功能;
- 文件共享:
- 索引节点
- 优点:能够实现文件的异名共享
- 缺点;文件拥有者不能删除他人共享的文件;由于每一个共享文件具有文件名,遍历时可能多次遍历该共享文件
- 符号链
- 如果目录项标记为链,那么就获取真正文件(或目录的文件),再搜索目录。
- 共享该文件的其他用户则只有该文件的路劲名,并不拥有其指向其索引节点的指针。
- 语义:
- 一致性语义,保证多进程能同时访问共享文件;
- UNIX语义:用户可见和允许多人同时写入;
- 会话语义:
- AFS文件系统使用
- 一旦用户打开文件的写不能同时被其他用户看见
- 一旦文件关闭,对其修改只能从以后打开的会话所看见
- AFS文件系统使用
- 永久共享文件语义
- 一旦创建者声明为共享,那么不能再被修改
- 索引节点
- 文件保护:
- 作用;用来防止文件受到物理破坏和非法访问等
- 访问类型:R,W,执行,ADD,Delete,列表清单,其他操作
- 访问控制
- 访问控制矩阵
- 访问控制列表(ACL),用户权限表,密码
- 文件系统与实现
- 文件系统的层次结构图;
- 应用程序->逻辑文件系统->文件组织模块->基本文件系统->I/o控制->设备
- 文件实现
- 外存分配方式
- 连续分配
- 链接分配
- 隐式链接,必须含有指向链接文件第一个盘块号和最后一个盘块的指针。如jeep 9 25,表示9->16->1->10->25
- 显式链接(类似于TlB表的Fat表)
- 索引分配
- 单索引分配
- 两级索引分配
- 混合索引分配
- 文件记录的成组与分解
- 优点:可以提高磁盘的空间利用率,减少磁盘的启动次数
- 缺点;成组与分解操作必须使用主存中的缓冲区,从而增加系统开销
- 空闲空表法:适于连续分配
- 空闲快链法;当所有空闲盘区拉成一条空闲链,称为空闲盘块链,其中每个盘区上含有用于指示下一个空闲盘区的指针外,还应能指明本盘区大小的信息
- 位示图法
- 当其值为“0”时,表示对应的盘块空闲;
- 当为"1时’,表示已分配
- 成组链表法
- 空闲盘块号栈的内容 N=100->S.free[99],前者指明区域和区域大小,后面是具体存储;
- 文件需要被挂载才能被访问,未挂载的文件被挂载到挂载点上
- 外存分配方式
- 操作系统常见的文件系统类型
- 磁盘文件系统: FAT->NTFS(>=64)
- 数据库文件系统;可被寻址,如winFS
- 日志文件系统;记录文件系统的修改
- 网络分布式文件系统:NFS,SMB,AFS
- 标准文件共享系统:NFS for unix
- 特殊/虚拟文件系统;管道(pipe)
- 文件系统的层次结构图;
- 磁盘的组织与管理:
- 磁盘结构的信息:引导控制块,分区控制块,目录结构,文件控制块
- 磁盘的访问时间计算Ta=Ts+Tr+Tt=m x n +s +1/2r+b/rN
- Ts寻道时间
- Tr旋转延迟时间
- Tt传输时间
- n磁道
- s启动磁道时间
- r转速
- b读写字节数
- N磁道上的字节数
- 磁盘的管理:格式化,坏块
- 提高磁盘io速度的方法:提前读,延迟写,优化物理盘分布,虚拟写
- 磁盘调度算法:
- FCFS:
- SSTF最短寻道时间优先
- SCAN电梯调度算法:单方向移动,沿着磁头去寻找离当前最近的
- CSCAN:单方向移动,在移动到最末尾时,移动点从最开始进行开始
- N-step-Scan N步扫描算法
- 解决以上三个出现的磁头黏着现象
- 主要步骤:
- 将磁盘请求队列分成长度为n的子队列
- 按fifo算法依次处理所有子队列
- 扫描算法处理每个队列
- F-Scan 简化N步扫描算法
- 将队列数目减少到2个队列,交替使用算法
- 磁盘缓存:磁盘扇区在内存中的缓存区,比虚拟存储复杂,且频率更低
- 单缓存:io设备-输入-缓存区-传送-工作区
- 双缓存:io设备-缓存1,工作区-缓存2
- UFS多级索引分配
- 文件头包含13个指针
- 10th指向数据块
- 11th指向索引块
- 12th指向二级索引
- 效果:提高了文件大小限制的阈值,动态分配数据块,方便文件扩展
- 多磁盘
- 通过并行提高吞吐量,通过冗余提高可靠性和可用性
- RAID
- 软件:OS内部的文件卷管理
- 硬件:RAID硬件控制器(I/0)
- RAID0:磁盘条带化,通过独立磁盘并行数据提高访问速度
- RAID1:磁盘镜像:可靠成倍,读取线性增加
- RAID3:基于位
- RAID4/5:基于数据块,带校验的磁盘条带化
- -4;带校验的磁盘条带化(允许从任意一个故障中恢复)
- -5;带分布式校验的磁盘条带化(检验和分布式存储)
- 文件系统:文件的基础
- 设备管理(I/O管理):分配,传输控制,独立性
- 分类
- 使用特性:人机交互外部设备,存储设备,网络通信设备
- 传输速率:低速设备,中速设备,高速设备
- 信息交换单位:
- 块设备:文件接口和访问定义
- 字符设备:内存映射文件访问
- IO控制方式
- 程序直接方式
- 设置标志位busy
- busy=1表示输入尚未完成,busy=0表示将输入数据送入设备控制
- 优:实现简单;缺:CPU的利用率相当低,因为CPU执行指令速度高出io几个数量级
- 中断驱动方式
- 提高了CPU的利用率
- 在每台设备每输入输出一个数据都要求中断CPU,这样在一次数据传送的过程中,中断次数过多而耗费大量的CPU处理时间。
- DMA方式
- 主机与控制器之间成数据块的方式进行直接交换,必须在DMA控制器中设置。
- 命令状态寄存器CR:用于接受IO有关控制信息或设备的状态
- 内存地址寄存器MAR:输入时,它存放把数据从设备传送到内存的的起使目标地址
- 数据寄存器DR:内存的启始目标地址,用于暂存从设备到内存,或内存到设备
- 数据计数奇 DC:存放本次要传送的字节数
- 程序直接方式
- 通道控制方式:
- 定义:专门用于负责输入输出工作的处理机制,它独立于CPU,有自己的指令系统。指令系统比较简单,一般至于数据传送指令,设备控制指令等
- 字节多路通道
- 数组选择通道:传输速率很高,只含有一个分配型的子通道
- 数组多路通道:存放本次要传送的字节数
- io通道与一般处理机的区别:无自己的内存,通道与CPU共享内存
- Io通道与DMA控制方式的区别:DMA需要CPU来控制传输的数据大小,传输的内存位置,而通道控制方式中这些信息由通道控制,一个通道可以控制多个设备
- IO软件层次结构
- IO请求:用户层软件->设备独立性软件->设备驱动程序->中断处理程序
- IO响应:当IO结束时唤醒驱动程序->建立设备寄存器,检查状态->命名,保护,阻塞,缓冲,分配->进行IO调用;格式化IO,Spooling等
- 中断处理程序:唤醒被阻塞的驱动程序进程->保护被中断进程的CPU环境->分析中断原因->进行中断处理->恢复中断进程的现象
- 设备处理程序:读抽象要求转换为具体要求->检查io请求的合法性->读出和检查设备的状态->传递必要参数->设置工作方式->启动IO设备
- Io调度
- 高速缓存与缓冲区
- 缓冲的实现
- 硬件缓冲器实现,但由于成本太高,除一些关键部位外,一般情况下不采用
- 内存划出一块存储区,专门用来临时存放输入输出数据
- 缓冲的分类
- 单缓冲
- 双缓冲
- 循环缓冲:将双缓冲中特定区域进行循环
- 缓冲池:缓冲池中缓冲区按使用状况可形成以下三个队列:空缓冲队列,装满输入数据的缓冲队列,装满输出数据的缓冲队列
- 除以上外,有用于收容输入数据,提取输入数据,收容输出数据,提取输出数据的工作缓冲区
- 缓冲的实现
- 设备分配
- 设备管理中的数据结构
- 设备控制表(DCT)
- 设备控制器控制表(COCT):反映通道状态
- 设备控制表(CHCT)
- 系统设备表(SDT)
- 设备分配策略
- 使用性质:独享设备,共享设备,虚拟分配
- 设备分享算法:先来先服务,优先级高者优先
- 设备分享的安全性:
- 安全分配方式
- 一旦进程已经获得某种设备后便阻塞,使进程不可能请求任何资源
- 不安全的分配方式
- 仅当进程所请求设备被另一半进程占用才进入阻塞状态
- 安全分配方式
- 设备分配的独立性
- 用户程序的设备独立性
- 用户程序不直接使用物理设备名,而只能使用逻辑设备名。
- 执行;逻辑设备名转换物理设备名
- I/O软件的设备独立性
- 除了直接与设备打交道外,其他部分的软件不依赖于硬件,I/0软件独立于设备,就可提高设备管道软件的设计效率
- 用户程序的设备独立性
- 设备管理中的数据结构
- 设备分配程序
- 单IO系统的设备分配:分配设备->分配设备控制器->分配通道;
- 多IO系统的设备分配;
- 1.根据设备类型,检索设备控制表,找到第一个空闲设备并检测分配设备的安全性,如安全,则分配,反之,插入该设备的等待队列。
- 2.设备分配后,检索设备控制器控制表,找到第一个与已分配设备相连的空闲设备控制器,若无空闲,则返回步骤D查找下一个空闲设备。
- 3.设备控制器分配后,同样查找与其相连的通道,找到第一个空闲通道,若无则返回2,查找下一个设备控制器,若有,则分配成功
- 设备回收:设备使用完后对占有设备,设备控制器以及通道,系统进行回收,修改对应的数据结构,以便下次分配时进行使用
- 假脱机技术(spooling)
- 外部设备同时联机的操作
- 特点:
- 提高了IO的速度
- 将独占设备改造为共享设备
- 实现了虚拟设备的功能
- 应用:打印机的多文件打印
- CPU与设备之间的数据传输:
- load/store传输指令
- 直接访问内存(DMA):设备控制器可直接访问系统总线
- 访问频率置换算法:短期用LRU,长期用LFU
- 新区域(new session):引用计数不变,中间区域(middle section),旧区域(old section)(计数都+1)
- 分类
- 分布式系统:
- 中间件(midware):标准接口和协议;一组驱动程序,应用编程接口或用于改善C/S之间的连接件
- C/S分类:
- 基于主机的处理(传统大型机环境)
- 基于服务器的处理(易维护,提升效果不明显)
- 基于客户的处理(抛开验证服务,其余都在本地进行)
- 合作处理
- 胖客户端 fat client
- 瘦客户端 thin client
- 中间件在C/S的结构
- 表示服务
- 应用服务
- 应用逻辑
- 中间件
- 通信服务
- os
- 硬件平台
- 集群:集群与对称多处理技术swap是相对的,这种方法提供了高性能和高可用性
- 开发swap主要难点:故障管理,负载平衡,并行计算(并行编译,参数化计算)
- 用户接口:命令接口,程序接口,图形接口
操作系统-速记版(个人幕布导出)
最新推荐文章于 2024-04-30 19:59:27 发布