操作系统知识点总结
第一章 概述
操作系统在干嘛,底层思想
第二章 进程管理
操作系统的最大作用,核心功能
第三章 内存管理
物理地址到逻辑地址的映射,脱离硬件第一步
第四章 文件管理
再封装管理各种数据,脱离硬件第二部,到达软件层面
第五章 I/O管理
联通硬件和软件,捋一下各种功能
第一章 计算机系统概述
目的:为什么要有操作系统,拿来干嘛?管理什么?
思想:有什么底层思想支撑操作系统的开发?
历史:操作系统是怎样一步一步发展起来的?
组成:操作系统运行机制,靠什么实现的?
操作:由底层思想可以延伸出什么基本操作?
状态:操作系统在运行过程中有哪些状态?
结构:操作系统的结构,和位于计算机哪个位置?
目的:为什么要有操作系统,拿来干嘛?管理什么?
==概念、功能、管理、接口==
思想:有什么底层思想支撑操作系统的开发?
==并发、共享、虚拟、异步、封装==
历史:操作系统是怎样一步一步发展起来的?
==手工操作阶段、单道批处理、多道批处理、分时操作系统、实时操作系统、分布式、个人==
组成:操作系统运行机制,靠什么实现的?
==内核程序、自编程序、原语、时钟管理、中断机制==
操作:由底层思想可以延伸出什么基本操作?
==中断、异常、系统调用==
状态:操作系统在运行过程中有哪些状态?
==用户态、内核态==
结构:操作系统的结构,和位于计算机哪个位置?
==大内核、微内核、用户、应用程序、非内核功能、进程管理、存储管理、设备管理、时钟管理、中断处理、原语、裸机(纯硬件)==
第二章 进程管理
2.1进程和线程
进程是什么?
进程的功能有哪些特征实现?
进程的状态有哪些,怎么转换?
进程是怎样控制的?
进程由什么组成?
进程间怎么通信?
线程是什么和进程有什么不一样?
线程有哪些,多线程有哪些?
进程是什么?
==实现操作系统的并发性和共享性==
进程的功能有哪些特征实现?
==动态性、并发性、独立性、异步性、结构性==
进程的状态有哪些,怎么转换?
==运行态、就绪态、阻塞态、创建态、结束态==
==运行态可以返回就绪态,时间片结束==
进程是怎样控制的?
==进程创建(PCB)、进程终止(正常结束、异常结束、外界干预)、进程的阻塞和唤醒(阻塞原语、唤醒原语)、进程切换(内核态下完成)==
进程由什么组成,组织方式有哪些?
==进程控制块(进程描述信息、进程控制和管理信息、资源分配清单、处理及相关信息)、程序段(CPU执行程序代码段)、数据段(原始数据、中间数据、最终结果)==
==链接方式(PCB组成的队列)、索引方式(索引表)==
进程间怎么通信?
==共享存储、信息传递(原语)、管道通信(半双工)==
线程是什么和进程有什么不一样?
==进程是独立调度的基本单位,线程是支援的基本单位==
线程有哪些,多线程有哪些?
==用户级线程、内核级线程==
==多对一(效率高、一堵全堵、不能同时运行在处理机)、一对一(开销大)、多对多(提高并发性,又适当降低开销)==
2.2调度
调度是什么,有哪些?
调度的使用时机在哪?
调度的方式有哪些?
调度的基本准则是什么?
加入调度后进程的基本状态变为哪七种?
典型调度算法有哪些?
调度是什么,有哪些?
==合理的分配处理机==
==作业调度(高级调度,一次)、中级调度(内存调度,进出内存)、进程调度(低级调度,选取就绪队列)==
调度的使用时机在哪?
==不能切换的情况、可以切换的情况==
调度的方式有哪些?
==非剥夺调度方式、剥夺调度方式==
调度的基本准则是什么?
==CPU利用率(尽可能忙碌)、系统吞吐量(单位时间内处理的作业数量)、周转时间(作业提交到完成的时间)、等待时间(作业等待处理机的时间)、响应时间(提交到首次响应的时间)==
加入调度后进程的基本状态多了什么?
==就绪挂起、阻塞挂起==
典型调度算法有哪些?
先来先服务(不利于IO繁忙型业务)
短作业优先算法(平均周转时间最短、饥饿)
优先级调度算法(饥饿)
高响应比算法(响应比 =(等待时间+要求服务时间)/ 要求服务时间 = 1 + 等待时间 / 要求服务时间)
时间片轮转法(分时系统)
多级反馈队列调度法(饥饿)
2.3互斥同步
临界资源
同步
互斥
信号量机制
管程
临界资源
只允许一个进程使用
同步
直接制约关系,相互合作
==空闲让进、忙则等待、有限等待、让权等待==
互斥
间接制约关系,一个访问临界区另一个不能访问
信号量机制
wait:资源-1、signal:资源+1
两个原语
==互斥信号量mutex、进入区P(申请资源)、退出区V(释放资源)==
管程
模块化
2.4死锁
定义
原因
策略
预防
避免
检测和解除
区别
定义
资源竞争造成的僵局,没有外力作用无法解除
原因和必要条件
==资源竞争、顺序非法==
==互斥条件、不可剥夺条件、请求并保持条件、循环等待条件(你等我我等你)==
预防
破坏某一个必要条件
破坏互斥条件(==允许共享使用==)、破坏不可剥夺条件(导致饥饿)、破坏请求并保持条件(==一次申请完==它所需要的全部资源)、破坏循环等待条件(顺序资源分配法)
避免
银行家算法(只分配给会进入安全状态的程序)
检测和解除
资源分配图,只要能约掉就不存在死锁。矩形表示资源节点,小圆代表资源数量。
资源==剥夺==法、==撤销==进程法、进程==回退==法
2.5 信号量机制的各种问题应用
生产者消费者问题
多生产者多消费者问题
吸烟者问题
读者-写者问题
哲学家问题
生产者消费者问题
==互斥P一定要在同步P之后==
否则会导致:我要放东西通过了,没人占用但满了放不进去,去到消费者,通道被生产者占住了,形成死锁
同步:查看缓存区容量和非空区
互斥:消费者和生产者不能同时使用缓存区
多生产者多消费者问题
互斥:前P后V
同步、前驱:前V后P
吸烟者问题
供应者到抽烟者一一对应,==多个==信号量
抽烟者抽完只有==一种==返回信号
读者-写者问题
写和读,写和写不能同时访问,==但读和读可以同时访问==
- 读优先:==第一个读者先加两把锁,都关上,再打开互斥锁,让其他读者进行访问==
- 写优先(相对优先):==第一个读者先加三把锁,都关上,再打开互斥锁和写优先锁,且先打开写优先锁,使只要读者读完就给写==
哲学家问题
SB问题
第三章 内存管理
3.1 内存管理概念
为什么要有内存管理?
内存管理的功能是什么?
程序是怎么装入和链接的?
动态分区分配
分页
分段
为什么要有内存管理?
程序执行前需要先放到内存中才能被CPU处理——==缓和CPU与硬盘之间的速度矛盾==
内存管理的功能是什么?
==内存空间的分配与回收、地址转换、内存空间的扩充、存储保护==
分配与回收
连续分配管理方式:==单一连续分配==(低地址区,单用户、利用率低)、==固定分区分配==(固定划分相等或不等的区、内部碎片、多道程序、利用率低)、==动态分区分配==(根据大小建立分区、分区外部碎片、紧凑技术)
非连续分配管理方式:==分页、分段==
地址转换
绝对装入(单道程序阶段):无操作系统
可重定位装入(静态重定位)(早期多道批处理阶段):一次性全部装入,不能在内存中移动)
动态运行时装入(动态重定位)(==现代操作系统==):==当程序真正执行时才进行转换==
==地址转换过程:逻辑地址->界地址寄存器->重定位寄存器->物理地址==
内存空间的扩充(覆盖、交换、虚拟)
覆盖技术:将用户空间分为==一个==固定区和==若干==覆盖区,活跃部分放在==固定区==,即将访问的段放在==覆盖区==。
交换技术:把磁盘空间分为==文件区==和==对换区==两部分,将处于等待状态的程序从内存中转移到辅存,==暂时换出==外存。
覆盖与交换区别:覆盖是在==同一个程序==或进程中的;交换是在==不同进程(或作业)==之间的
内存保护
CPU中设置上、下限寄存器,==判断是否越界==
重定位寄存器(基址寄存器)和界地址寄存器(限长寄存器):重定位寄存器中包含最小物理地址值,界地址寄存器包含==逻辑地址的最大值==
程序是怎么装入和链接的?
步骤:编译(形成若干目标模块)、链接(目标模块与库函数链接)、装入(内存执行)
链接:静态链接(完整可执行)、装入时动态链接(边装入变链接)、运行时动态链接(需要时才链接)
装入:绝对装入(实际内存地址)、可重定位装入(相对地址)、动态运行时装入(需要时才地址转换)
动态分区分配
==首次适应算法==(不排序第一个)、==最佳适应算法==(容量递增顺序排列第一个、最多的外部碎片)、==最坏适应算法==(容量递减第一个、减少小碎片、不利于大工程)、==邻近适应算法==(上次结束位置查找,概率相同,所以容易把高地址大分区用完)
分页
第一步:分好块,在第几块第几个(页号P和页内偏移量W)
第二部:去问一下我的新家在哪,获得新家块(去==页表寄存器==看页表起始地址和判断,查==页表==找到内存块号)
第三步:新家号,在加上偏移量,就算出物理地址(内存块号加页内偏移W得到物理地址)
添加==块表==,直接省略第二步,因为如果有,直接就能查到内存块号
两级列表解决页表必须连续存储的问题
分段
页是信息的==物理单位==,完全是==系统行为==,对用户是==不可见的==。分页的用户进程地址空间是==一维==的,程序员只需给出一个记忆符即可表示一个==地址==。
段是信息的==逻辑单位==,分段对用户是==可见的==,用户编程时需要显式地给出==段名==。分段的用户进程地址空间是==二维==的,程序员在标识一个地址时,既要给出==段名==,也要给出==段内地址==。
3.2 虚拟内存管理
虚拟内存管理与传统存储管理的不同在哪?
什么是局部性原理?
虚拟内存是怎样实现的?
有哪些页面置换法?
有哪些页面分配策略?
抖动
工作集
虚拟内存管理与传统存储管理的不同在哪?
传统:作业必须一次性==全部装入==内存后,才能开始运行,作业装入内存后,==一直驻留在内存中==,任何部分不会被换出。
虚拟:基于局部性原理,程序的一部分装入内存,一部分留在外存,==需要的时候将外存内容调入内存==,就好像产生了一个巨大的内存空间
==多次性(一次作业多次调入)、对换性(换进换出)、虚拟性(大于实际内存)==
什么是局部性原理?
时间局部性
一条指令执行后,不就之后指令可能被再次执行,数据被访问后,不久后数据可能再次被访问
原因:程序中存在着大量的==循环操作==
时间局部性通过将==最近使用的指令==和数据存储在==高速缓冲存储器中==
空间局部性
一旦程序访问了某个存储单元,不久之后附近的存储单元也将被访问
原因:指令通常是==顺序存放==,顺序执行的,数据一般也是以向量、数组、表等形式簇聚存储的
空间局部性使用较大的==高速缓存==,将预取机制继承到高速缓存控制逻辑中实现
虚拟内存是怎样实现的?
请求==分页==存储管理、请求==分段==存储管理、==请求段页式==存储管理
一定容量的内存和外存、页表机制(或者段表机制)、中断机制、地址变换机制
有哪些页面置换法?
最佳置换算法(OPT):选择永不使用或者==最长时间内==不再访问的页面进行淘汰,但是现实中是无法预知的
先进先出页面置换算法(FIFO ):优先淘汰==最早进入==的页面,与进程的实际运行规律不匹配
最近最久未使用(LRU )置换算法:选择==最近最长时间==没有被访问的页面进行淘汰,每个页面设置一个访问字段,用来标识上次被访问到现在经历的时间
时钟(CLOCK)置换算法:当某页==被访问时,其访问位置为1==。当需要淘汰一个页面时,只需检查页的访问位。==如果是0,就选择该页换出==;==如果是1,则将它置为0==,暂不换出,继续检查下一个页面,若第一轮扫 描中所有页面都是1,则将这些页面的访问位依次置为0后,再进行第二轮扫描(第二轮扫描中一定会 有访问位为0的页面,因此简单的CLOCK 算法选择一个淘汰页面==最多会经过两轮扫描==)
改进型CLOCK算法:使用位(访问位)的基础上增加==修改位==
有哪些页面分配策略?
固定分配局部置换
可变分配全局置换
可变分配局部置换
抖动
==刚换出的页面又要换入内存==
工作集
某段时间内,==进程要访问的页面集合==。
第四章 文件管理
4.1 文件管理
文件相关概念
文件逻辑结构
目录结构
文件共享
文件保护
文件系统的实现
文件相关概念
数据项、记录、文件
名称、标识符、类型、位置、大小、保护、时间
创建文件、写、读、文件重定位(文件寻址)、删除文件、截断文件
文件逻辑结构
无结构文件:流式文件,==字符流==组成
有结构文件(记录式文件):顺序文件(效率高、增删改查难)、索引文件(定长、变长)、索引顺序文件(分组)、直接文件或散列文件(函数转换决定地址)
目录结构
单级目录(不能重名)、两级目录结构(不能分类)、多级目录结构(树形)、无环图目录结构(同一节点有向边,共享)
文件共享
基于索引节点的共享方式(==硬==链接):直接指针指向文件,只要还有一个指针,文件(索引节点)就==不能删除==
利用符合链实现文件共享(==软==链接):保存共享文件的路径(==快捷方式==),根据路径寻找文件。
文件保护
口令保护:用户请求访问时需要提供相应的口令,直接存储在系统内部==不安全==
加密保护:用户访问需要秘钥==解密==,加密和解密需要==花费一定时间==
访问控制:==规定每个用户名及其所允许的访问类型==
4.2 文件系统的实现
文件层结构
用户调用接口:文件系统==为用户提供==与文件及目录有关的==调用==
文件目录系统:==管理文件目录==,管理活跃文件目录表,管理读写状态信息表,管理用户进程的打开文件表,管理与组织存储设备上的文件目录结构,调用下一级存取控制模块。
存取控制验证:实现==文件保护==,将用户的访问请求与FCB中指示的访问控制权限进行比较,以确认访问的合法性
逻辑文件系统管理文件信息缓冲区:逻辑文件系统与文件信息缓冲区的主要功能是,根据文件的逻辑结构将用户要读写的逻辑记录转换成文件==逻辑结构内的相应块号==
物理文件系统:把逻辑记录所在的相对块号转换成实际的==物理地址==
辅助分配模块:管理辅存空间,负责==分配==辅存空闲空间和==回收==辅存空间
设备管理程序模块:==分配设备==,分配设备读写用缓冲区,磁盘调度,启动设备,处理设备中断,释放设备读写缓冲区,==释放设备==
目录实现
线性表、哈希表
文件分配方式
连续分配:每个文件在磁盘上占有一组==连续的块==,磁盘地址定义了磁盘上的一个线性排序。访存1次
链接分配:磁盘块分布在磁盘的任何地方,除最后一个盘块,其他盘块都有指向==下一个盘块的指针==
索引分配:索引分配解决了链接分配不能直接访问的问题,支持==随机访问==
文件存储空间管理
文件存储设备管理的实质是对空闲块的组织和管理,包括空闲块的组织、分配与回收等问题
空闲表法
属于连续分配方式,系统为空闲区建立一张空闲盘块表,每个空闲区第一个盘块号,该区的空闲盘块数等信息。
空闲链表法
将所有的空闲盘区拉成一条空闲链,根据构成链所有的基本元素不同,可以把链表分成两种形式
空闲盘块链:将磁盘上所有空闲空间以盘块为单位拉成一条链
空闲盘区链:将磁盘上所有空闲盘区拉成一条链
位示图法
采用二进制的一位来表示一个盘块的使用情况,磁盘上所有的盘块都有一个二进制位与之对应
成组链接法
UNIX使用,结合了空闲表和空闲链表法克服了表太大的缺点
把顺序的n个空闲扇区地址保存在第一个空闲扇区内,其后一个空闲扇区内则保存另一顺序空闲扇区的地址
4.3 磁盘管理
磁盘结构
磁盘、磁道(同心圆)、扇区(数据量相同)、盘面、柱面
磁头是否可移动
固定头磁盘∶磁头相对于盘片的径向方向固定
活动头磁盘:每个磁道一个磁头,磁头可以移动
盘片是否可更换
固定盘磁盘∶磁头臂可以来回伸缩定位磁道,磁盘永久固定在磁盘驱动器内
可换盘磁盘∶可以移动和替换
磁盘调度算法
读写时间组成
==寻找时间(寻道时间)TS==:在读/写数据前,将磁头移动到指定磁道所花的时间。
①启动磁头臂是需要时间的。假设耗时为s;
②移动磁头也是需要时间的。假设磁头匀速移动,每跨越一个磁道耗时为m,总共需要跨越n条磁道。则:寻道时间TS = s + m*n
==延迟时间TR==:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。
设磁盘转速为r(单位:转/秒,或转/分),则平均所需的延迟时间TR = (1/2)*(1/r) = 1/2r
==传输时间Tt==:从磁盘读出或向磁盘写入数据所经历的时间,假设磁盘转速为r,此次读/写的字节数为b,每个磁道上的字节数为N。则:传输时间Tt = (1/r) * (b/N) = b/(rN)
先来先服务(FCFS)
按照进程请求访问磁盘的先后顺序进行调度
优点:公平实现简单
缺点:适用于少量进程访问,如果进程过多算法更倾向于==随机调度==
最短寻找时间优先(SSTF)
选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道
优点:性能强于先来先服务算法
缺点:容易产生==饥饿==现象
扫描算法(SCAN)
在磁头当前==移动方向上==选择与当前磁头所在的磁道距离最近的请求作为下一次服务对象,只有磁头移动到==最外侧磁道的时候才能往内移动==,移动到最内侧磁道的时候才能往外移动,因此也叫电梯算法。
优点:寻道性能好,可以==避免饥饿==现象
缺点:对最近扫描过的区域不公平,访问局部性方面不如FCFS和SSTF好
循环扫描算法(c-SCAN)
磁头单向移动,回返时直接回到起始端,而不服务任何请求
LOOK与C-LOOK
在SCAN与C-SCAN算法的基础上规定了查看移动方向上是否有请求,如果没有就不会继续向前移动,而是直接改变方向(LOOK)或者直接回到第一个请求处( C-LOOK)
磁盘管理
磁盘初始化
低级格式化:磁盘分扇区,为每个扇区采用特别的数据结构(头、数据区域、尾部组成),头部含有一些磁盘控制器所使用的信息
进一步格式化处理∶磁盘分区,对物理分区进行==逻辑格式化==(创建文件管理系统),包括空闲和已分配的空间及一个初始为==空的目录==
引导块
计算机启动时运行==自举程序==,初始化CPU寄存器、设备控制器和内存等,然后启动操作系统
组局程序通常保存在ROM中,在ROM中保留很小的自举块,完整的自举程序保存在启动块上拥有启动分区的磁盘称为启动==磁盘或系统磁盘==
坏块
无法使用的扇区
对于简单的磁盘,可以在逻辑格式化时(建立文件系统时)对整个磁盘进行坏块检查,==标明哪些扇区是坏扇区==,比如:在FAT表上标明
处理方式
简单磁盘:==手动处理==,对坏块进行标记,程序不会使用
复杂磁盘:控制器维护一个==磁盘坏块链表==,同时将一些块作为==备用==,用于替代坏块(扇区备用)
第五章 输入输出管理(IO)
I/O控制器的主要功能是什么?
I/O有哪些控制方式?
I/O有哪些层次结构?
核心子系统包含哪些?
假脱机
设备的分配与回收
缓冲区管理
I/O控制器的主要功能是什么?
接收和识别CPU发出的命令(要有控制寄存器)、向CPU报告设备的状态(状态寄存器)、数据交换(数据寄存器)、地址识别(由I/O逻辑实现)
I/O有哪些控制方式?
程序直接控制方式
计算机从外部设备读取数据到存储器,每次读一个字的数据,对读入的每个字,CPU都要对外没状态进行==循环检查==,知道确定该字已经在I设备控制器的数据寄存器中。
读写单位:==字==
优点:容易实现,操作简单
缺陷∶CPU高速性和IO设备的低速性的矛盾(降低了CPU的利用率),CPU和IO设备只能串行工作
中断驱动方式
允许IO设备主动打断CPU的运行并请求服务,进而==解放CPU==,使其向IO控制器发送读命令后可以继续做其他有用的工作
读写单位∶==字==
优点∶比程序直接控制方式有效
缺点:数据的传输必须要经过CPU,仍然后消耗CPU的时间
DMA方式
在IO设备和内存之间开辟直接的数据交换通路,==彻底解放CPU==
读写单位:==数据块==
设备==直接送入内存==
只有当一个或多个数据块开始和结束的时候,CPU才会进行干预
命令/状态寄存器(CR):用于接收CPU发送的IO命令和有关控制信息或者设备状态
内存地址寄存器(MAR):数据直接在设备与内存之间交互
数据寄存器(DR):用于暂存从设备到内存或者从内存到设备的数据
数据计数器(DC) :存放本次要传送的字(节)数
通道控制方式
设置一个专门负责输入/输出的处理机(DMA方式的发展),实现对一组数块的读写以及相关控制和管理为单位干预
读写单位:==一组块==
优点:有效的提高了系统资源利用率
缺点:实现较为复杂
DMA与通道的区别
DMA需要==CPU来控制==传输的数据块大小、传输的内存位置、而通道方式中这些信息是由==通道控制==的
DMA控制器对应一台设备与内存传递数据,通道可以控制多态设备与内存的数据交换
I/O有哪些层次结构?
用户层IO软件
==实现与用户交互的接口==,用户可以直接调用在用户层提供的,与IO操作有关的==库函数==,对设备进行操作
设备独立性软件
用于实现用户程序与设备驱动器的==统一接口、设备命令、设备保护、差错控制及设备分配与释放==,同时为设备管理与数据传送提供必要的存储空间
设备独立性也称为设备==无关性==,使得应用程序独立于具体使用的物理设备(使用逻辑设备名)
使用逻辑设备名的好处:增加设备分配的灵活性;易于实现IO重定向
主要功能
执行所有设备的公有操作(设备的分配与回收,==逻辑设备名映射为物理设备名==,对设备进行保护,进制用户直接访问设备),屏蔽设备之间数据交换的速度差异等
向用户层(文件层)提供统一接口∶无论哪种设备,他们向用户提供的==接口都是相同的==
设备驱动程序
与硬件直接相关,负责实现系统==对设备发出的操作命令==,驱动IO设备工作的驱动程序
中断处理程序
用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完并恢复被中断进程的现场后,返回被中断进程
硬件设备
IO设备通常包括一个机械部件和一个电子部件
核心子系统包含哪些?
设备独立性软件、设备驱动程序、中断处理程序
主要提供==IO调度==,缓冲与高速缓存,设备分配与回收,假脱机,设备保护和差错处理
假脱机
输入进程∶模拟脱机输入时的外围控制机,将用户要求的数据从输入机==通过输入缓冲区送到输入并中==,当CPU需要数据,直接将==输出井中的数据送入内存==
输出进程:模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井中,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备
通俗一点就是,如果设备被占用,我们就先把数据暂存一下,等到设备空闲了就把这些数据输送到设备中
设备的分配与回收
―根据用户IO请求分配设备,原则:充分发挥设备的使用效率,避免进程死锁
缓冲区管理
缓和CPU与IO之间的速度差异矛盾
单缓冲、双缓冲、循环缓冲、缓冲池
高速缓存与缓冲区对比
相同点
都介于高速设备和低速设备之间
不同
存放数据
高速缓存:存放的是低速设备上的某些数据的==复制数据==
缓冲区:存放的是低速设备==传递==给高速设备的数据,这些数据在低速设备上==不一定有备份==,这些数据再从缓冲区传送到高速设备
目的
高速缓存∶高速缓存存放的是高速设备==经常要访问==的数据,如高速缓存中数据不在,高速设备就要访问低速设备
高速设备和低速设备的通信都要经过==缓冲区==,==高速设备永远不会去直接访问低速设备==