第一篇:操作系统总结
第一部分概述
一、导论
1.操作系统做什么
① 冯诺依曼体系结构 ② OS角色:对上:控制程序正确执行,使用方便;对下:资源分配器 ③ 核心功能:进程管理,内存管理,文件管理,输入输出,保护和安全 2.计算机系统组织
① 中断 ② 存储结构:寄存器→高速缓存→主存→电子磁盘→光盘→磁带 ③ I/O结构:I/O的同步、异步;慢速设备(中断)快速设备(DMA)3.操作系统结构:多道(使CPU总有一个任务执行)、分时(高频率切换任务)4.进程管理
① 进程有其生命周期,进程是执行中的程序 ② 管理活动:创建或删除用户或系统进程;挂起或重启进程;防死锁;提供进程同步、通信机制 ③ 目的:使进程可以运行,相互协调不死锁 5.内存管理
① 目标:内核健壮 ② 保护方法:独立操作模式:用户模式,内核模式;计数器定时中断防止死循环 6.存储管理
① 解决问题:速度匹配→缓存(缓存的命中率)② 等级问题:一致性;多处理器下各缓存的一致性
二、操作系统结构
1.操作系统服务:用户界面,程序执行,I/O操作,文件系统操作,通信,错误检测,资源分配,统计,保护和安全。
2.操作系统的用户界面:命令解释程序,图形用户界面
3.系统调用类型:进程控制,文件管理,设备管理,信息维护,通信
4.系统程序分类:文件管理,状态信息,文件修改,程序设计语言支持,程序装入和执行,通信,系统工具,应用程序。5.操作系统结构:
① 简单结构(MS-DOS):小空间多功能,应用程序直接操作硬件,不安全,无模块,接口和功能层次没有区分 ② 分层法:难划分,效率低,但是构造和调试简单化 ③ 微内核:包括最小的进程和内存管理以及通信,便于扩充操作系统。④ 模块化:动态加载模块,允许内核提供核心服务,也能动态的实现特定的功能 ⑤ 组合结构
第二部分进程管理
一、进程
1.进程的概念
① 进程通常包括:程序计数器,栈,数据段 ② 进程状态:新建,运行,等待,就绪,终止 ③ 进程控制块PCB:进程状态,程序计数器,CPU寄存器,CPU调度信息,内存管理信息,记账信息,I/O状态信息 ④ 2.进程调度
① 调度队列:作业队列,就绪队列,设备队列
P80 ② 调度程序:长期调度程序(作业调度程序):从作业池中选择进程,并装入内存准备执行。短期调度程序(CPU调度程序):从准备执行的进程中选择进程,并为之分配CPU时间。中期调度程序:能将进程从内存中移出。
长短期的区别是执行频率;长期调度控制多道程序设计的程度,中期调度可以降低多道。③ I/O绑定进程,CPU绑定进程 ④ 上下文切换:将CPU切换到另一个进程需要保存当前进程的状态和恢复另一进程的状态。
3.进程操作
① 进程创程:创建新进程的执行方式(父子进程并发执行;父进程等待直到某个或全部子进程执行完毕)
新进程地址空间(子进程是父进程的副本;子进程装入另一个新程序)资源共享(所有/子集/不共享)② 进程终止
父进程终止子进程的原因(子进程使用了超过它分配的资源;分配给子程序的任务不需要了;父进程结束)
4.进程间通信
① 通信基本模型:共享内存,消息传递 ② 共享内存:消费者可能等待生产者;无限缓冲区,有限缓冲区的区别 ③ 消息传递:
命名:直接通信(对称寻址:接受者命名发送者;非对称寻址:接受者不需要命名发送者)间接通信(邮箱、端口的参与)同步:阻塞与非阻塞(发送,接收),同步与异步 缓冲:零容量(无缓冲);有限容量、无限容量(自动缓冲)
5.客户机-服务器通信:套接字SOCKET,RPC远程调用,RMI远程方法调用
二、线程
1.概述:多线程优点:响应度高,资源共享,经济,多处理器体系结构的利用
2.多线程模型:用户层的用户线程或内核层的内核线程,用户线程受内核支持,而无需内核管理,而内核线程由操作系统直接支持和管理,这两种方法支持多线程。① 多对一模型(效率比较高,阻塞系统调用的后果)② 一对一模型(更好的并发功能,缺点是创建一个用户线程就需要一个内核进程)③ 多对多模型(用户可以创建任意多的线程;二级模型=多对多+一对一)3.多线程问题
① 系统调用fork().exex()② 线程取消异步取消(立即终止),延迟取消(检查是否应该终止)③ 信号处理:信号必须有一个处理程序 ④ 线程池:优点(处理请求速度快,线程数量可控制)
三、CPU调度
1.基本概念
① CPU区间和I/O区间的概念 ② 抢占与非抢占调度的概念(发生在:一个进程从运行切换到等待、运行切换到就绪、等待切换到就绪、以及终止,1,4非抢占,2,3抢占)2.调度准则:CPU利用率(使CPU尽量忙),吞吐量(测量工作的方法),周转时间(从进程提交到完成的时间),等待时间,响应时间 3.调度算法
① 先到先服务调度FCFS(非抢占的)② 最短作业优先调度SJF(抢占,最优算法,难知道下一CPU区间长度,用于长期调度)③ 最短剩余时间优先调度SRTF(强占式的SJF,适合长期调度)④ 优先级调度(问题:无穷阻塞或饥饿,老化来解决;非抢占方式不用占用CPU切换)⑤ 轮转调度RR(专为分时系统设计,是可抢占的,时间片过大变为FCFS,时间片过小等待时间段,但是切换频繁)⑥ 多级队列调度(前台与后台的调度算法不同,RR与FCFS)? ⑦ 多级反馈队列调度 ⑧ 实时调度:硬实时(在特定硬件上保证时间),软实时:尽力而为,优先级不变,没有饥饿现象
4.算法评估
① 确定性模型甘特图 ② 排队模型 N=入*W(N平均队列长度,W为队列的平均等待时间,入为新进程到达队列的平均到达率)③ 模拟 ④ 实现
四、进程同步
1. 背景:竞争条件:共享内存,共享变量 2. 临界区问题
① 临界区解决方案:进入去,临界区,退出区,剩余区 ② 效果:互斥,有空让进,有限等待 ③ 证明:1.互斥,临界区一个时间只能有一个进程2.前进,临界区内无进程执行,那么只有那些不在剩余区内执行的进程可参加选择,这种选择不能无限延迟3.有限等待,从一个进程做出进入临界区的请求,知道该请求允许为止,其他进程允许进入其临界区的次数有上限。④ PETERSON算法
3. 信号量:计数信号量,二进制信号量
① 技术信号量用于控制访问:当每个线程需要使用资源时,需要对该信号量执行acquire()操作,当线程释放资源时,需要对该信号执行release()操作。② 用信号量解决同步问题
4. 管程:管程结构确保一次只有一个进程能在管程内活动 5. 经典同步问题
① 生产者消费者问题 ② 读者写者问题 ③ 哲学家吃饭问题
五、死锁
1.死锁特征
① 必要条件:互斥,占有并等待,非抢占,循环等待 ② 资源分配图:分配图没有环则没有死锁,有环则有死锁;有环则可能有死锁。2.死锁预防
① 互斥:通常不能通过否定互斥条件来预防死锁:有的资源本身就是非共享的。② 占有并等待:协议一:每个进程在执行前申请并获得所有资源;协议二,允许进程在没有资源时才可以申请资源。协议缺点:资源利用率低,可能发生饥饿。③ 非抢占:协议:如果一个进程占有资源并申请另一个不能立即分配的资源,那么其现在已分配的资源都可被抢占。④ 循环等待:对所有资源类型进行完全排序,且要求每个进程按递增顺序来申请资源。
3.死锁避免
① 安全状态:如果系统能按某个顺序为每个进程分配资源并能避免死锁,那么系统状态就是安全的。② 单实例:资源分配图:申请边,分配边,需求边 ③ 多实例:银行家算法Available(向量),Max(矩阵),Allocation(矩阵),Need(矩阵), 4.死锁检测
① 单实例:等待图:当且仅当等待图中有一个环时,系统存在死锁 ② 多实例:类似银行家算法 5.死锁恢复
① 进程终止:终止所有死锁进程;一次只终止一个进程,直到取消死锁循环为止 ② 资源抢占:问题:选择一个牺牲品;回滚;饥饿
第三部分内存管理
一、内存管理
1.背景
① 地址绑定:编译时(编译时就知道进程将在内存中的驻留地址,那么就可以生成绝对代码),加载时(生成可重定位的代码),运行时(如果进程在执行时可以从一个内存段移到另一个内存段,那么绑定必须延迟到执行时才进行)② 逻辑地址(CPU所生成的地址)物理地址(内存单元所看到的地址)③ 动态加载(子程序只在调用时加载,优点不用的子程序绝不会被加载)④ 动态链接与共享库(将连接延迟到运行时)2.交换(没看)
3.连续内存分配:单分区,多分区
4.非连续内存分配:分页(分页技术不会产生外部碎片)5.动态存储分配问题:首次适应,最佳适应,最差适应 6.页表结构:层次页表,哈希页表,反向页表
二、虚拟内存
1.背景
① 多道尽可能多的程序,这也是内存管理的目标 ② 虚拟内存好处:可以运行比物理内存大的程序;更快的启动和响应(载入更快);更多的多道;更容易的共享文件盒地址空间;更少的输入输出。
2.按需调页:在需要时才调入页
① 有效位-无效位来来确定页是否在内存 ② 有帧就加入,无帧就换页,页错误处理流程:检查内部表确定引用是否合法→非法则终止,合法则调入→找到空闲帧,装入内存→修改内部表→重启指令 ③ 按需调页的有效访问时间:effective access time=(1-p)*ma+p*处理页错误的时间 3.页面置换(引用串)
① FIFO 先入先出 ② 最优算法:向后看,换页的时候看内存中哪个页最晚用;是所有算法中产生页错误最低的算法;问题:需要引用串的未来知识 ③ LRU最近最少使用算法:往前看,内存中哪页在列表序列中离的最远,无Belady异常 ④ 算法实现:计数器(最近最少使用:换计数器值最小的)代价大:系统级,可能溢出,一定会写全表
页码堆栈:每当引用一个页,该页就从栈中删除并放在栈顶。严格实现,但是代价高。
二次机会:引用位,引用时改为1,;换页时,是1则置零,是0则换 计数算法:LFU最不经常使用,MFU最经常使用(可采用老化)
4.帧分配
① 分配策略限制:所分配的帧不能超过可用帧的数量,大于最小需求 ② 每个进程帧的最少数量是由体系结构决定的,而最大数量帧是由可用物理内存决定的。③ 当指令完成之前出现页错误,该指令必须重新执行 ④ 帧分配方法:
固定分配:平均分配、按比例分配 优先级分配:全局置换(帧数可变),局部置换(固定);全局置换算法的一个问题是进程不能控制其页错误率,但是全局置换通常会有更好的系统吞吐量,且更为常用。
5.系统颠簸
① 颠簸产生的原因:抢帧→I/O上升→CPU使用率降低→多道继续增加→忙于换页 ② 工作集合策略防止了颠簸,并尽可能的提高了多道程序的程度,可以通过页错误频率PFF来直接测量和控制页错误以防止颠簸。上限之上分配更多,下限之下,减少帧数
6.其他问题
① 预调页关键问题:采用预调页的成本是否小于处理响应页错误的成本。② 页大小问题:最佳页大小的选择,大页,小页 ③ 优化程序结构
第四部分存储管理
一、文件系统接口
1.文件概念
① 文件是逻辑外存的最小分配单元,即数据除非在文件中,否则不能写到内存中。② 文件操作:写,读,重定位,删除,截短 ③ 文件加锁:共享锁,专用锁;强制,建议文件加锁机制 2.访问方法:顺序访问,直接访问,其他方法(索引)3.目录结构
① 目录操作:创建文件,删除文件,遍历目录,重命名文件,跟踪文件系统 ② 评价目录结构:命名(不同文件同名),分组(同一文件不同命名)③ 单层结构目录(命名,分组均无),双层结构目录(可命名不可分组),树状结构(绝对,相对路径;可命名分组),无环图目录(硬链接,软链接),通用图目录
二、文件系统实现
1.文件系统结构:应用程序→逻辑文件系统→文件组织模块→基本文件系统→I/O控制→设备
2.目录实现:线性列表(编程简单,运行费时,查找文件需要线性搜索)
哈希表(采取策略避免冲突)
3.分配方法
① 连续分配:每个文件在磁盘上占有一组连续的块;困难时为新文件找到空间,外部碎片问题也可能很大,确定文件分配多大空间,② 链接分配:解决了连续分配的所有问题;必须顺序访问文件,指针需要空间,由于指针分配在整个磁盘,可靠性就成了一个问题。
FAT文件分配表:改善了随机访问时间,但是需要大量磁头寻道时间 ③ 索引分配:把所有指针都放在一起,构成索引块;支持直接访问,且没有外部碎片问题,但是会浪费空间;索引块分多大是个问题 链接方案(一个索引块可以指向另一索引块构成链接)
多层索引(第一个索引块指向第二个索引块,第二个指向文件数据块)组合方案P404 N级间接块(计算)
4.空闲空间管理:为向量(1空0满)块号码计算:(值为0的数字)*(一个字的位数)+第一个值为1的位的偏移;链表(所有空闲的块用链表链接起来);组(将N个空闲块的地址存储在第一个空闲块中);计数()
第二篇:操作系统总结
什么是OS,OS有哪几个特征?其最基本的特征是什么?
答:操作系统是为了达到方便用户和提高利用率的目的而设计的,控制和管理计算机硬件和软件资源,合理的组织计算机工作流程的程序的集合它具有并发,共享,虚拟,异步性四个基本特征。其中最基本的特征为并发性
2什么是进程及与程序的区别与联系,为什么PCB是进程存在的唯一标志?
进程是程序的一次执行过程,是系统进行资源分配和调度的一个独立单位。
区别:(1)进程是动态的,程序是静态的。(2)进程具有并发性,而程序没有(3)进程是资源分配和处理机调度的独立单位,其并发性受系统制约(4)一个程序多次执行,对应多个进程,不同的进程可以包含同一程序PCB:因为在进程的整个生命期中,系统总是通过PCB对进程进行控制的3处理机三级调度分别完成什么工作?
(1)高级调度:就是作业调度,用于决定把外存上处于后备队列中的哪些作业调入内存,并为它们创建进程,分配必要的资源,然后,再将新创建的进程排在就绪队列上,准备执行
(2)低级调度:就是进程调度,它决定就绪队列中的哪个进程将获得处理机,然后由分派程序执行把处理机分配给该进程的操作
(3)中级调度:实际上就是存储器管理中的对换功能试说明引起进程调度的时机是什么?
(1)进程完毕(2)时间片用完(3)I/O请求发生某个事件(4)原语:wait操作,阻塞(5)高优先者进入 5什么是临界资源和临界区?
一次仅允许一个进程访问的资源称为临界资源。访问临界资源的代码段称为临街区
6试修改下面生产者---消费问题中,如果将两个wait操作即wait(full)和wati(mutex)互换 位置,或者将signal(mutex)与signal(full)互换位置,结果会如何?
(1)wait(full)和wait(mutex)互换位置后,因为mutex在这儿是全局变量,执行完wait(mutex),则mutex赋值为0,倘若full 也为0,则该生产者进程就会转入进程链表进行等待,而生产者进程会因全局变量mutex为0 而进行等待,使full 始终为0,这样就形成了死锁.(2)而signal(mutex)与signal(full)互换位置后,从逻辑上来说应该是一样的.7什么是死锁?死锁产生的有哪些
死锁是因多个进程因竞争资源而造成的一种僵局(1)互斥条件:一个资源每次只能被一个进程使用。(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4)环路等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。同步机制应遵循的基本准则是什么?
(1)空闲让进(2)忙则等待(3)有限等待(4)让权等待.程序有几种连接方式
(1)静态链接方式(2)装入时动态链接(3)运行时动态链接
10什么是动态重定位方式及为什么要引入动态重定位方式及如何实现?
程序和数据装入内存时需对目标程序中的地址进行修改。这种把逻辑地址转变为内存的物理地址的过程叫重定位
11什么是分页,什么是分段,在存储管理中两者的区别
(1)分页是将一个进程的逻辑地址空间分成若干大小相等的部分,每一部分称作页面,内存划分成与页面大小相等的物理块,进程的任何一页可放入内存的任何一个物理块中,段是信息的逻辑单位,含有一组意义相对完整的信息,更好的来满足用户的需要。
(2)分段是一组逻辑信息的集合,即一个作业中相对独立的部分。多个段在内存中占有离
散的内存单元,对每个段,在内存占有一连续的内存空间,其内存的分配与回收同可变分区的内存分配与回收办法
分页与分段的主要区别是?
(1)页是信息的物理单位,分页是为了实现离散分配方式,以消减内存的外零头,提高内存的利用率(2)页的大小固定,并且有系统决定,而段的长度不固定决定于用户所编写的程序(3)分页作业的地址空间是一维的,段是二维的。
12动态分区存储管理中内存的回收方式
13.什么是对换,对换的分类及主要用途在进程换出时应遵循什么原则
对换是把内存中暂时不能运行的进程或者暂时不用的程序和数据调出到外存上,以便腾出足够的内存空间,再把因具备运行条件的进程或者进程所需要的程序或数据调入内存。
分类:(1)整体对换(进程对换):以整个进程为单位(2)页面对换(分段对换/部分对换):以页和段为单位
规则:内存空间不够用才换出。系统处于阻塞状态,且优先级最低的进程最先换出。若换入:系统处于就绪状态,且优先级最高的进程最先换入,直至无可换入的进程为止。
14.什么是虚拟存储器虚拟存储器具有哪些特性,最基本的特性是什么?虚拟存储器的容量受哪两方面的限制?
虚拟存储器:是指具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。
特征:(1)离散性(最基本的特征)(2)多次性(3)对换性(4)虚拟性
虚拟存储器的容量主要受指令中表示地址的字长和外存的容量的限制。
15.在没有快表的分页存储管理中取一条指令需访问几次内存及访问内存的目的,及具有快表的分页存储管理系统的地址变换过程。
两次。第一次:访问内存中的页表,从中找到页的物理块号,再将块号与页内偏移量W拼接,形成物理地址。第二次:从第一次所得的物理地址中获得所需数据
地址变换过程:CPU给出有效地址后,地址变换机构将页号与快表中的所有页号进行比较,若有与此相匹配的页号,则表示所访问的页在快表中,从中读出物理块号与页内地址相拼接,得到物理地址;若访问的页不在快表中,则要访问在内存中的页表,从页表中读出物理块号与页内地址相拼接,得到物理地址,同时,还应将此页表项写入快表中,若此时快表已满,则OS必须找到一个老的并且被认为不再需要的页表项将它换出。
16.什么是紧凑技术及为什么要引入
紧凑:把原来多个分散的小分区拼接成一个大分区的方法
引入:提高内存的利用率,让大容量的作业可以装入并且减少零头或碎片
17程序的局部性原理是什么局限性的两个主要表现方面
局部性原理:(1)程序执行时,除少部分转移和过程调用指令外,大多数条件下任是顺序执行的(2)过程调用将会使程序的执行轨迹由一部分区域转至另一部分区域,但经验就看出过程调用的深度在大多数情况下不会超过5(3)程序中存在许多循环结构,这些虽然只能由少数指令构成但它们将多次执行(4)程序中还包括许多对数据结构的处理
主要表现在:(1)时间局限性(2)空间局限性
18.什么是spooling技术spooling系统有哪些组成Spooling技术是对脱机输入,输出系统的模拟。
组成:(1)输入井和输出井(2)输出缓冲区和输入缓冲区(3)输入进程SPi和输出进程SPo(4)请求打印队列
特点:(1)提高了I/O的速度(2)将独占设备改为共享设备(3)实现了虚拟设备功能
第三篇:操作系统总结
第一部分概述
一、导论
1.操作系统做什么
① 冯诺依曼体系结构
② OS角色:对上:控制程序正确执行,使用方便;对下:资源分配器
③ 核心功能:进程管理,内存管理,文件管理,输入输出,保护和安全
2.计算机系统组织
① 中断
② 存储结构:寄存器→高速缓存→主存→电子磁盘→光盘→磁带
③ I/O结构:I/O的同步、异步;慢速设备(中断)快速设备(DMA)
3.操作系统结构:多道(使CPU总有一个任务执行)、分时(高频率切换任务)
4.进程管理
① 进程有其生命周期,进程是执行中的程序
② 管理活动:创建或删除用户或系统进程;挂起或重启进程;防死锁;提供进程
同步、通信机制
③ 目的:使进程可以运行,相互协调不死锁
5.内存管理
① 目标:内核健壮
② 保护方法:独立操作模式:用户模式,内核模式;计数器定时中断防止死循环
6.存储管理
① 解决问题:速度匹配→缓存(缓存的命中率)
② 等级问题:一致性;多处理器下各缓存的一致性
二、操作系统结构
1.操作系统服务:用户界面,程序执行,I/O操作,文件系统操作,通信,错误检测,资源分配,统计,保护和安全。
2.操作系统的用户界面:命令解释程序,图形用户界面
3.系统调用类型:进程控制,文件管理,设备管理,信息维护,通信
4.系统程序分类:文件管理,状态信息,文件修改,程序设计语言支持,程序装入和
执行,通信,系统工具,应用程序。
5.操作系统结构:
① 简单结构(MS-DOS):小空间多功能,应用程序直接操作硬件,不安全,无模块,接口和功能层次没有区分
② 分层法:难划分,效率低,但是构造和调试简单化
③ 微内核:包括最小的进程和内存管理以及通信,便于扩充操作系统。
④ 模块化:动态加载模块,允许内核提供核心服务,也能动态的实现特定的功能 ⑤ 组合结构
第二部分进程管理
一、进程
1.进程的概念
① 进程通常包括:程序计数器,栈,数据段
② 进程状态:新建,运行,等待,就绪,终止
③ 进程控制块PCB:进程状态,程序计数器,CPU寄存器,CPU调度信息,内存
管理信息,记账信息,I/O状态信息
④
2.进程调度
① 调度队列:作业队列,就绪队列,设备队列P80
② 调度程序:长期调度程序(作业调度程序):从作业池中选择进程,并装入内存
准备执行。短期调度程序(CPU调度程序):从准备执行的进程中选择进程,并为之分配CPU时间。中期调度程序:能将进程从内存中移出。
长短期的区别是执行频率;长期调度控制多道程序设计的程度,中期调度可以降低多道。
③ I/O绑定进程,CPU绑定进程
④ 上下文切换:将CPU切换到另一个进程需要保存当前进程的状态和恢复另一进
程的状态。
3.进程操作
① 进程创程:创建新进程的执行方式(父子进程并发执行;父进程等待直到某个
或全部子进程执行完毕)
新进程地址空间(子进程是父进程的副本;子进程装入另一个新程序)
资源共享(所有/子集/不共享)
② 进程终止
父进程终止子进程的原因(子进程使用了超过它分配的资源;分配给子程序的任务不需要了;父进程结束)
4.进程间通信
① 通信基本模型:共享内存,消息传递
② 共享内存:消费者可能等待生产者;无限缓冲区,有限缓冲区的区别
③ 消息传递:
命名:直接通信(对称寻址:接受者命名发送者;非对称寻址:接受者不需要命名发送者)间接通信(邮箱、端口的参与)
同步:阻塞与非阻塞(发送,接收),同步与异步
缓冲:零容量(无缓冲);有限容量、无限容量(自动缓冲)
5.客户机-服务器通信:套接字SOCKET,RPC远程调用,RMI远程方法调用
二、线程
1.概述:多线程优点:响应度高,资源共享,经济,多处理器体系结构的利用
2.多线程模型:用户层的用户线程或内核层的内核线程,用户线程受内核支持,而无
需内核管理,而内核线程由操作系统直接支持和管理,这两种方法支持多线程。① 多对一模型(效率比较高,阻塞系统调用的后果)
② 一对一模型(更好的并发功能,缺点是创建一个用户线程就需要一个内核进程)③ 多对多模型(用户可以创建任意多的线程;二级模型=多对多+一对一)
3.多线程问题
① 系统调用fork().exex()
② 线程取消异步取消(立即终止),延迟取消(检查是否应该终止)
③ 信号处理:信号必须有一个处理程序
④ 线程池:优点(处理请求速度快,线程数量可控制)
三、CPU调度
1.基本概念
① CPU区间和I/O区间的概念
② 抢占与非抢占调度的概念(发生在:一个进程从运行切换到等待、运行切换到
就绪、等待切换到就绪、以及终止,1,4非抢占,2,3抢占)
2.调度准则:CPU利用率(使CPU尽量忙),吞吐量(测量工作的方法),周转时间(从
进程提交到完成的时间),等待时间,响应时间
3.调度算法
① 先到先服务调度FCFS(非抢占的)
② 最短作业优先调度SJF(抢占,最优算法,难知道下一CPU区间长度,用于长
期调度)
③ 最短剩余时间优先调度SRTF(强占式的SJF,适合长期调度)
④ 优先级调度(问题:无穷阻塞或饥饿,老化来解决;非抢占方式不用占用CPU
切换)
⑤ 轮转调度RR(专为分时系统设计,是可抢占的,时间片过大变为FCFS,时间片
过小等待时间段,但是切换频繁)
⑥ 多级队列调度(前台与后台的调度算法不同,RR与FCFS)?
⑦ 多级反馈队列调度
⑧ 实时调度:硬实时(在特定硬件上保证时间),软实时:尽力而为,优先级不变,没有饥饿现象
4.算法评估
① 确定性模型甘特图
② 排队模型 N=入*W(N平均队列长度,W为队列的平均等待时间,入为新进程
到达队列的平均到达率)
③ 模拟
④ 实现
四、进程同步
1. 背景:竞争条件:共享内存,共享变量
2. 临界区问题
① 临界区解决方案:进入去,临界区,退出区,剩余区
② 效果:互斥,有空让进,有限等待
③ 证明:1.互斥,临界区一个时间只能有一个进程2.前进,临界区内无进程执行,那么只有那些不在剩余区内执行的进程可参加选择,这种选择不能无限延迟3.有限等待,从一个进程做出进入临界区的请求,知道该请求允许为止,其他进程允许进入其临界区的次数有上限。
④ PETERSON算法
3. 信号量:计数信号量,二进制信号量
① 技术信号量用于控制访问:当每个线程需要使用资源时,需要对该信号量执行
acquire()操作,当线程释放资源时,需要对该信号执行release()操作。
② 用信号量解决同步问题
4. 管程:管程结构确保一次只有一个进程能在管程内活动
5. 经典同步问题
① 生产者消费者问题
② 读者写者问题
③ 哲学家吃饭问题
五、死锁
1.死锁特征
① 必要条件:互斥,占有并等待,非抢占,循环等待
② 资源分配图:分配图没有环则没有死锁,有环则有死锁;有环则可能有死锁。
2.死锁预防
① 互斥:通常不能通过否定互斥条件来预防死锁:有的资源本身就是非共享的。② 占有并等待:协议一:每个进程在执行前申请并获得所有资源;协议二,允许
进程在没有资源时才可以申请资源。协议缺点:资源利用率低,可能发生饥饿。③ 非抢占:协议:如果一个进程占有资源并申请另一个不能立即分配的资源,那
么其现在已分配的资源都可被抢占。
④ 循环等待:对所有资源类型进行完全排序,且要求每个进程按递增顺序来申请
资源。
3.死锁避免
① 安全状态:如果系统能按某个顺序为每个进程分配资源并能避免死锁,那么系统
状态就是安全的。
② 单实例:资源分配图:申请边,分配边,需求边
③ 多实例:银行家算法Available(向量),Max(矩阵),Allocation(矩阵),Need(矩
阵),4.死锁检测
① 单实例:等待图:当且仅当等待图中有一个环时,系统存在死锁
② 多实例:类似银行家算法
5.死锁恢复
① 进程终止:终止所有死锁进程;一次只终止一个进程,直到取消死锁循环为止 ② 资源抢占:问题:选择一个牺牲品;回滚;饥饿
第三部分内存管理
一、内存管理
1.背景
① 地址绑定:编译时(编译时就知道进程将在内存中的驻留地址,那么就可以生
成绝对代码),加载时(生成可重定位的代码),运行时(如果进程在执行时可以从一个内存段移到另一个内存段,那么绑定必须延迟到执行时才进行)
② 逻辑地址(CPU所生成的地址)物理地址(内存单元所看到的地址)
③ 动态加载(子程序只在调用时加载,优点不用的子程序绝不会被加载)④ 动态链接与共享库(将连接延迟到运行时)
2.交换(没看)
3.连续内存分配:单分区,多分区
4.非连续内存分配:分页(分页技术不会产生外部碎片)
5.动态存储分配问题:首次适应,最佳适应,最差适应
6.页表结构:层次页表,哈希页表,反向页表
二、虚拟内存
1.背景
① 多道尽可能多的程序,这也是内存管理的目标
② 虚拟内存好处:可以运行比物理内存大的程序;更快的启动和响应(载入更快);
更多的多道;更容易的共享文件盒地址空间;更少的输入输出。
2.按需调页:在需要时才调入页
① 有效位-无效位来来确定页是否在内存
② 有帧就加入,无帧就换页,页错误处理流程:检查内部表确定引用是否合法→
非法则终止,合法则调入→找到空闲帧,装入内存→修改内部表→重启指令 ③ 按需调页的有效访问时间:effective access time=(1-p)*ma+p*处理页错误的时间
3.页面置换(引用串)
① FIFO 先入先出
② 最优算法:向后看,换页的时候看内存中哪个页最晚用;是所有算法中产生页
错误最低的算法;问题:需要引用串的未来知识
③ LRU最近最少使用算法:往前看,内存中哪页在列表序列中离的最远,无Belady
异常
④ 算法实现:计数器(最近最少使用:换计数器值最小的)代价大:系统级,可
能溢出,一定会写全表
页码堆栈:每当引用一个页,该页就从栈中删除并放在栈顶。严格实现,但是代价高。
二次机会:引用位,引用时改为1,;换页时,是1则置零,是0则换
计数算法:LFU最不经常使用,MFU最经常使用(可采用老化)
4.帧分配
① 分配策略限制:所分配的帧不能超过可用帧的数量,大于最小需求
② 每个进程帧的最少数量是由体系结构决定的,而最大数量帧是由可用物理内存
决定的。
③ 当指令完成之前出现页错误,该指令必须重新执行
④ 帧分配方法:
固定分配:平均分配、按比例分配
优先级分配:全局置换(帧数可变),局部置换(固定);全局置换算法的一个问题是进程不能控制其页错误率,但是全局置换通常会有更好的系统吞吐量,且更为常用。
5.系统颠簸
① 颠簸产生的原因:抢帧→I/O上升→CPU使用率降低→多道继续增加→忙于换页 ② 工作集合策略防止了颠簸,并尽可能的提高了多道程序的程度,可以通过页错
误频率PFF来直接测量和控制页错误以防止颠簸。上限之上分配更多,下限之下,减少帧数
6.其他问题
① 预调页关键问题:采用预调页的成本是否小于处理响应页错误的成本。② 页大小问题:最佳页大小的选择,大页,小页
③ 优化程序结构
第四部分存储管理
一、文件系统接口
1.文件概念
① 文件是逻辑外存的最小分配单元,即数据除非在文件中,否则不能写到内存中。② 文件操作:写,读,重定位,删除,截短
③ 文件加锁:共享锁,专用锁;强制,建议文件加锁机制
2.访问方法:顺序访问,直接访问,其他方法(索引)
3.目录结构
① 目录操作:创建文件,删除文件,遍历目录,重命名文件,跟踪文件系统 ② 评价目录结构:命名(不同文件同名),分组(同一文件不同命名)
③ 单层结构目录(命名,分组均无),双层结构目录(可命名不可分组),树状结
构(绝对,相对路径;可命名分组),无环图目录(硬链接,软链接),通用图目录
二、文件系统实现
1.文件系统结构:应用程序→逻辑文件系统→文件组织模块→基本文件系统→I/O控
制→设备
2.目录实现:线性列表(编程简单,运行费时,查找文件需要线性搜索)
哈希表(采取策略避免冲突)
3.分配方法
① 连续分配:每个文件在磁盘上占有一组连续的块;困难时为新文件找到空间,外部碎片问题也可能很大,确定文件分配多大空间,② 链接分配:解决了连续分配的所有问题;必须顺序访问文件,指针需要空间,由于指针分配在整个磁盘,可靠性就成了一个问题。
FAT文件分配表:改善了随机访问时间,但是需要大量磁头寻道时间
③ 索引分配:把所有指针都放在一起,构成索引块;支持直接访问,且没有外部
碎片问题,但是会浪费空间;索引块分多大是个问题
链接方案(一个索引块可以指向另一索引块构成链接)
多层索引(第一个索引块指向第二个索引块,第二个指向文件数据块)
组合方案P404 N级间接块(计算)
4.空闲空间管理:为向量(1空0满)块号码计算:(值为0的数字)*(一个字的位
数)+第一个值为1的位的偏移;链表(所有空闲的块用链表链接起来);组(将N个空闲块的地址存储在第一个空闲块中);计数()
第四篇:操作系统总结
操作系统基本基础概念
多任务是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务。像Windows、LINUX就是支持多任务的操作系统。每个任务使用由操作系统分配的短暂的时间片(Timeslice)轮流使用CPU,由于CPU对每个时间片的处理速度非常快,在用户看来好像这些任务在同时执行,这叫做时间片轮转调度法。还有更多的多任务调度方法。
实时系统
(REAL TIME system)是指系统能及时的响应外部时间的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致的运行。分为硬实时任务和软实时任务,系统对任务的截止时间有要求否则会出现难以预测的结果,这就是硬实时任务,反之要求不是很严格则为软实时任务。
操作系统的基本特性
并发与并行:并发性是两个或多个事件在同一时刻发生。而并行性是两个或多个事件在同一时间间隔内发生。
进程:为了使多个程序能并发的执行,系统必须为每个程序建立进程(process)。简单说来~进程是指在操作系统中能独立运行并作为资源分配的基本单位。他是由一组机器指令数据、堆栈等组成的,是一个能独立运行的活动实体。多个进程之间可以并发的执行和交换信息。一个进程在运行时需要一定的资源,如CPU、内存空间、IO设备等。
我的注解:进程很重要。Linux的进程之间的关系可以这样描述:一个完整的main函数运行的时候,在linux里是以进程的形式存在的。系统启动之后运行的第一个进程的进程号是1,叫做init进程,一切进程都从它派生出来,一个父进程可以派生另一个进程,即为子进程,这俩进程为并行关系。子进程也可以创建子进程。
进程的创建在linux里边用fork()函数它有两个返回值,一个是在父进程中返回,返回的是子进程号,一个是在子进程中返回,如果子进程创建成功,则返回的是0。子进程是父进程的一个拷贝,现代的进程创建都用vfork()创建子进程之后,并不拷贝全部的进程空间,只有在用到时才拷贝,叫做写时复制技术(copy on write)。
Linux里边这样创建子进程:
pid_t pid=fork();//这里的pid_t是一种数据类型(如int),这里代表进程号(实质上也是个整形变量int)
If(pid==0){这里边就是子进程代码}
Else if(pid>0){这里边是父进程代码,pid的值是子进程的进程号PID}
线程:通常在一个进程中可以包含若干个线程,他们可以利用进程所拥有的资源。在引入线程的操作系统中,一般都把进程作为分配资源的基本单位。而把线程作为独立运行和独立调度的基本单位。优点:运行效率更高。
进程的状态:一般分为就绪状态。执行状态。阻塞状态。
操作系统产生死锁的原因:1.竞争资源。2.进程间推进顺序非法。比如说:一个进程占有一个资源A,当他运行到需要用到被另一个进程占用的资源B时,没有得到,于是进入等待退出运行,而这个占有资源B的进程还想得到资源A,但是占有A的进程此刻在休眠,也没得到,所以这个进程也进入等待退出运行。这样两两相互等待造成了死锁。解决方法:1.在进程运行开始时就把所有资源占好。2.按顺序加锁。比如要得到资源B首先要对A加锁,如果得不到就不能加锁。所有进程都按照这个方法进行。
第五篇:操作系统实验总结
操作系统实验总结
学号:
姓名:
班级:
在本学期的计算机操作系统这门课学习当中,为了更好的了解操作系统相关知识,我们通过OS Lab平台做了几个实验。在实验室的过程中,我对课堂上学到的操作系统的一些知识有了新的认识,同时还接触到了操作系统的相关源代码,而且通过实验的运行效果了解了平时我们看不到的操作系统的一些状况,收获还是很大的。下面先简要归纳在实验课上我做的几个实验的主要实验内容和实验步骤:
实验一:实验环境的使用
实验步骤:
1.1启动OS Lab
OS Lab每次启动后都会首先弹出一个用于注册用户信息的对话框(可以选择对话框标题栏上的“帮助”按钮获得关于此对话框的帮助信息)。在此对话框中填入学号和姓名后,点击“确定”按钮完成本次注册。观察OS Lab主窗口的布局。OS Lab主要由下面的若干元素组成:菜单栏、工具栏以及停靠在左侧和底部的各种工具窗口,余下的区域用来放置编辑器窗口。
1.2 学习OS Lab的基本使用方法
练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab的基本使用方法(主要包括新建项目、生成项目、调试项目等)。
实验二:操作系统的启动
实验步骤:
2.1 准备实验
启动OS Lab,新建一个EOS Kernel项目,在“项目管理器”窗口中打开boot文件夹中的boot.asm和loader.asm两个汇编文件,按F7生成项目,生成完成后,使用Windows资源管理器打开项目文件夹中的Debug文件夹。找到由boot.asm生成的软盘引导扇区程序boot.bin文件,找到由loader.asm生成的loader程序loader.bin文件,记录下此文件的大小1566字节。
2.2 调试EOS操作系统的启动过程
2.2.1 使用Bochs做为远程目标机
将调试时使用的远程目标机修改为Bochs
2.2.2 调试BIOS程序
按F5启动调试,Bochs在CPU要执行的第一条指令(即BIOS的第一条指令)处中断,从Console窗口显示的内容中,我们可以获得关于BIOS第一条指令的相关信息,然后查看CPU在没有执行任何指令之前主要寄存器中的数据,以及内存中的数据。
2.2.3 调试软盘引导扇区程序
练习从0x7c00处调试软盘引导扇区程序;查看boot.lst文件;调试过程——软盘引导扇区程序的主要任务就是将软盘中的loader.bin文件加载到物理内存的0x1000处,然后跳转到loader程序的第一条指令(物理地址0x1000处的指令)继续执行loader程序;
2.2.4 调试加载程序
调试过程——Loader程序的主要任务是将操作系统内核(kernel.dll文件)加载到内存中,然后让CPU进入保护模式并且启用分页机制,最后进入操作系统内核开始执行(跳转到kernel.dll的入口点执行);
2.2.5 调试内核
2.2.6 EOS启动后的状态和行为
查看EOS的版本号;查看EOS启动后的进程和线程的信息;查看有应用程序运行时进程和线程的信息
实验三:进程的创建
实验步骤:
3.1 准备实验
启动OS Lab;新建一个EOS Kernel项目;分别使用Debug配置和Release配置生成此项目,从而在该项目文件夹中生成完全版本的EOS SDK文件夹;新建一个EOS应用程序项目;使用在第3步生成的SDK文件夹覆盖EOS应用程序项目文件夹中的SDK文件夹
3.2 练习使用控制台命令创建EOS应用程序的进程
3.3 练习通过编程的方式让应用程序创建另一个应用程序的进程
使用OS Lab打开本实验文件夹中的NewProc.c文件;查看应用程序创建另一个应用程序的进程的执行结果。
3.4 调试CreateProcess函数
调试CreateProcess函数创建进程的过程;分别验证应用程序和操作系统内核在进程的4G虚拟地址空间中所处的位置;
3.5 调试PsCreateProcess函数
调试PspCreateProcessEnvironment函数;调试进程控制块的创建过程;调试初始化进程控制块中各个成员变量的过程。
3.6 练习通过编程的方式创建应用程序的多个进程
使用OS Lab打开本实验文件夹中的参考源代码文件NewTwoProc.c,仔细阅读此文件中的源代码。使用NewTwoProc.c文件中的源代码替换EOS应用程序项目中EOSApp.c文件内的源代码,生成后启动调试,查看多个进程并发执行的结果。
实验四:线程的状态和转换
实验步骤:
4.1 准备实验
启动OS Lab,新建一个EOS Kernel项目
4.2 调试线程状态的转换过程
查看一下loop命令执行的效果;调试线程状态转换的过程;对断点进行一些调整。
4.2.1 线程由阻塞状态进入就绪状态:
将线程从等待队列中移除;将线程的状态由Waiting修改为Zero;将线程插入其优先级对应的就绪队列的队尾;将线程的状态由Zero修改为Ready。
4.2.2 线程由运行状态进入就绪状态:
线程中断运行,将线程中断运行时的上下文保存到线程控制块中;如果处于运行状态的线程被更高优先级的线程抢先,就需要将该线程插入其优先级对应的就绪队列的队首。(注意,如果处于运行状态的线程主动让出处理器,例如时间片用完,就需要将程插入其优先级对应的就绪队列的队尾);将线程的状态由Running修改为Ready
4.2.3 线程由就绪状态进入运行状态:
将线程从其优先级对应的就绪队列中移除;将线程的状态由Ready修改为Zero;将线程的状态由Zero修改为Running;将线程的上下文从线程控制块(TCB)复制到处理器的各个寄存器中,让线程从上次停止运行的位置继续运行。
4.2.4 线程由运行状态进入阻塞状态:
将线程插入等待队列的队尾;将线程的状态由Running修改为Waiting;将线程中断执行,并将处理器上下文保存到该线程的线程控制块中。
4.3 为线程增加挂起状态
观察loop线程被挂起的情况:删除之前添加的所有断点;按F5启动调试;待EOS启动完
毕,在EOS控制台中输入命令“loop”后按回车。此时可以看到loop线程的执行计数在不停增长,说明loop线程正在执行,记录下loop线程的ID;按Ctrl+F2切换到控制台2,输入命令“suspend 31”(如果loop线程的ID是31)后按回车;按Ctrl+1切换回控制台1,可以看到由于loop线程已经成功被挂起,其执行计数已经停止增长了。
在PsResumThread函数第119行需要添加的代码的流程可以是:首先调用List Remove Entry函数将线程从挂起线程队列中移除,然后调用PspReadyThread函数将线程恢复为就绪状态,最后调用PspThreadSchedule宏函数执行线程调度,让刚刚恢复的线程有机会执行。
实验过程:
做实验时,最开始并不是很了解OS Lab平台的使用,即使对着老师给的实验教程做还是不怎么会,于是请教会做的同学,通过同学的讲解我知道了怎样在OS Lab平台上建立项目,怎样更改路径并找到项目的源文件等等基本操作。
掌握对平台的简单应用后,做后面的实验我是按照实验教程上的步骤一步步的实施,并且每次都认真观察相应的运行结果,每个实验都会建议我们学习实验教程前面的理论部分,我想如果对他的理论不熟悉,就算试验成功了我也不知道为什么,所以我一般在做实验前会对前面的理论部分进行简要的学习和熟悉。做实验的过程中,有时候按照实验教程上的步骤做平台还是会出现一些错误,比如做实验三到调试CreateProcess函数时,出现的调试异常对话框中,本来是要点击“是”的,但做到这里电脑总是会出现像死机一样的状况,关掉平台重做到这里老是出现同样的问题,最后换电脑也是这样,然后我尝试不按照实验步骤点击“是”也不行,最后还是又还了电脑才做成功,问其他同学也有出现同样的问题,我想可能是平台和电脑上有什么地方有冲突吧。
之后做试验是遇到问题我还是选择多问同学,毕竟每个人擅长的是不同的,有些问题这个同学会解决,有些问题则是那个同学才懂解决,通过互相交流和学习,我们通过实验不仅巩固了课堂上学到的相关知识,也对操作系统有了更深的了解。
体会:
其实做完实验我还是不能保证我对OS Lab这个平台有很好的全面的了解,但是对一些基本操作及其快捷键我算是大致掌握了,通过这个平台我也是认识到了“没有做不到的,只有想不到的”,我觉得创建这个平台的人们真的是很了不起,这个平台让我们便动手便了解了平时我们看不到的操作系统的相关知识。要做好实验,得按照实验教程上面的内容一步步落实,要边做变领悟相关原理及运行结果的出现的原因,这样我们才能在试验中学到更多、掌握更多。其次,也遇到问题我们自然是要先自己思考,通过不同的尝试来解决,之后不能解决的我们要多向老师同学请教,通过互相交流得来的知识也是会让我们难忘的。