操作系统复习
第1章 引论
概念
- 什么是操作系统
- 操作系统是控制和管理计算机系统各种硬件和软件资源,有效地组织多道程序运行的系统软件,是用户与计算机之间的接口
- 分类
- 作为扩展级机器级 or 资源管理者
- 是用户与计算机之间的接口
- 特点
- 并发性
- 共享性
- 虚拟性
- 不确定性
- 主要功能:
- 处理机管理:对处理机的分配和运行实施有效地管理
- 存储器管理:地址映射、对内存进行分配、保护和扩充
- 设备管理:设备分配、设备传输控制、设备独立性
- 文件管理:文件存储空间的管理、目录管理、文件的操作管理和文件的保护
- 用户接口:通常以两种方式提供给用户使用,一种是命令接口,另一种时程序接口
- 计算机启动步骤
- BIOS开始运行,检查所安装的RAM数量,键盘和其他基本设备是否已经安装并正常响应。
- 扫描ISA和PCI总线并找出连在上面的所有设备
- BIOS通过尝试存储在CMOS存储器中的设备清单决定启动设备
- 操作系统询问BIOS,以获得配置信息
- 调人配置信息到内核,初始化有关表格,创建需要的任何背景进程,并在每个终端上启动登陆程序或者GUI
操作系统类别
- 批处理:在实验室收集全部作业,然后用一台相对便宜的计算机,将其读到磁带上,另外用较昂贵的计算机来完成真正的计算。
- 分时:程序员希望很快得到响应,当有20个用户登录,其中17个在思考、谈论或喝咖啡,则CPU可分配给其他三个需要的作业轮流执行。
- 实时
- 多道批处理系统:用户作业成批的处理,作业建立、过渡、完成都自动由系统成批完成,而且在计算机内存中同时存放几道相互独立的程序,使他们在管理程序控制下,相互穿插运行。
- 允许多个程序同时进入内存并允许它们在CPU中交替进行,这些程序共享各种软硬件资源
- 提升资源利用率和系统吞吐量
- 多道程序设计特性:
- 多道
- 宏观上并行
- 微观上串行
- 分时系统:系统内存在若干并发程序对CPU时间片共享使用。如果一台计算机连接多个终端,各用户通过各自的终端同时使用这台计算机,计算机则是分时轮流地位各终端用户服务并能即使对用户服务请求予以响应,这样的系统称为分时系统。
- 同时性(多路性)
- 交互性:响应时间
- 独占性(独立性)
- 及时性
- 实时系统:计算机对外来信息能够以足够快的速度进行处理,并在被控制对象允许的时间范围内做出快速反应,先考虑及时性和可靠性,再考虑资源利用率
- 及时性
- 可靠性
- 网络操作系统:将分布在各处的计算机和终端设备通过数据通信系统结合在一起构成的系统
- 分布式操作系统:运行在不具有共享内存的多台计算机上,但在用户眼里却像是一台计算机
- 分布性
- 并行性
操作系统结构
- 单体系统(最老 3层)
- 主过程:处理服务过的请求
- 服务过程:执行系统调用
- 实用过程:辅助服务过程
中断
- 中断:指计算机在执行期间,系统内发生了某一急需处理的事件,使得CPU暂时中止当前正在执行的程序,而转去执行相应的事件处理程序,待处理完毕之后又返回到原来被中断处继续执行。
- 子程序调用:保存断点(下一个要执行的指令 PC)
- 中断子程序调用:保存断点(PC)+程序状态字寄存器(PSWR)
第二章 进程与线程
- 异同
概念
- 进程:具有独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的一个独立单位
- 进程映像:程序,数据段,PCB(进程是动态的而进程映像是静态的)
- 线程:是一个正在执行的程序的实例,包括程序计数器、寄存器和变量的当前值,是轻量级的进程,是被系统独立调度和分配的基本单位。
- 区别:线程是进程中执行运算的最小单位,即处理机调度的基本单位
- 一个线程只能属于同一个进程,而一个进程可以有多个线程
- 资源分配给进程(除CPU外的资源),同一进程的所有线程共享该进程的所有资源。处理机分配给线程,即真正在处理及上运行的是线程。
- 线程在运行过程中,需要协作同步,不同进程的线程要利用消息通信的办法实现同步。
- 作业:作业是用户在一次解题或事务处理过程中要求计算机系统所作工作的集合,包括用户程序、所需的数据及命令等
进程
-
进程的状态:就绪,运行,阻塞
-
进程的特性
- 动态
- 并发
- 独立
- 异步
- 结构
-
进程表:与一个进程有关的所有信息,除了改建成自身地址空间的内容以外,均存放在操作系统的一张表中,称为进程表
-
进程之间的关系
- 同步:直接制约关系。由于工作次序所产生的制约关系。源于之间的相互合作。
- 互斥:间接制约关系。当一个进程进入临界区使用临界资源的时候,另一个进程必须等待,当该进程退出临界区后,另一进程才可进去。
-
进程和程序的区别
对比 程序 进程 动态 程序是指令的有序集合,它本身没有任何运行含义,是一个静态的概念。 而进程是程序在处理机上的一次执行过程,是一个动态的概念 生存 程序的存在是永久的 进程则是有生命的,它因创建而产生,因调度而执行,因得不到资源而阻塞,因撤销而消亡 组成(结构) 程序仅是指令的有序集合 进程则是由程序、数据和PCB组成 关系 同一个程序运行在若干不同的数据集合上,将属于若干个不同的进程 一个进程可以执行多个程序
线程
- 实现
- 用户空间:内核对线程包一无所知,从内核角度:就是按正常的方式管理,即单线程
- 内核空间:当某个线程希望创建一个新线程或撤销一个已有线程时,它进行一个系统调度
- 王道上的实现部份讲解
- 用户级线程:有关线程管理的所有工作都由应用程序完成,内核意识不到现成的存在。
- 内核级线程:有关线程管理的所有工作都由内核完成,应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口。
- 混合:一个应用程序中的多个用户级线程被映射到一些(小于等于用户级线程的数目)的内核级线程上。
进程间通信
调度
-
基本准则
- CPU利用率
- 系统吞吐量:单位时间内CPU完成作业的数量
- 周转时间:从作业提交到完成所经历的时间(必要时减去等待时间)
- 带权周转时间:作业周转时间 / 作业实际运行时间
- 等待时间:等处理机状态的时间和
- 响应时间:从用户提交请求到系统首次产生响应所用的时间。(交互式)
-
三级调度
-
调度 操作 作业调度,高级调度,宏观调度 外存上后备状态的作业->分配内存, IO等必要资源,建立进程 多道批处理。频率低。 交换调度,内存调度,中级调度 暂时不能运行的进程(就绪态) <-> 外存等待(挂起态) 提高内存利用率和系统吞吐量 进程调度,低级调度,短期调度,微观调度 从就绪队列中选取一个进程,分配处理及资源。 最基本,不可或缺。频率高。 -
作业调度和进程调度的区别
- 作业调度:宏观调度,选择的作业只是由获得处理机的资格,但尚未占有处理机,不能立即在其上实际执行。频率低。
- 进程调度:微观调度。动态地把处理机实际地分配给所选择的进程,使之真正的活动起来。频率高。
-
-
实时调度中的调度
- 可调度性公式
- (sum_{i=1}^{m}frac{C_i}{P_i}le 1)
- 事件 i 以(P_i)周期发生,每次发生需要CPU处理(C_U)秒
-
批处理机系统中的调度(后台)
- FCFS:长作业友好
- SJR:最短作业优先的非抢占式版本,长作业饥饿
- 最短剩余时间(最短作业优先的抢占式版本)
-
交互系统中的调度(前台:交互式作业)
- 轮转调度RR:时间片
- 优先级调度:每个进程有优先级
- 多级队列:每个就绪队列赋予一个不同的优先级,就绪队列分为多个队列(ex:前台(交互式作业)和后台(批处理作业))。每个队列有自己的调度算法,ex:前台RR,后台FCFS。
-
高响应比:
- 作业调度
- (响应比=frac{等待时间+运行时间(即要求服务时间)}{要求服务时间})
- 兼顾短作业和长作业,避免长作业饥饿
经典的IPC问题
- 生产者消费者
- 哲学家就餐
- 读者-写者
shell
- 一般shell命令的执行过程
第三章 内存管理
概念
- 地址空间:
- 要保证多个应用程序同时处于内存中而且相互不影响,需要解决保护和重定位的问题,一次创建了一个新的内存抽象
- 地址空间:是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间。
- 物理地址:内存中物理单元的地址。
- 逻辑地址:
- 编译后,每个目标模块都从0号单元开始编址,这称为该目标模块的相对地址(逻辑地址)
- 链接之后,将各个模块链接成一个完整的可执行目标程序时,链接程序顺序依次按照各个模块的逻辑地址构成统一的从0号开始编制的逻辑地址空间(链接后的逻辑地址才是用于重定位的逻辑地址)
- 可重定位地址:地址重定位,将逻辑地址转换为物理地址
- 重定位:将程序中的逻辑地址空间变换成内存中的实际物理地址空间的过程
- 静态重定位:在程序装入内存的过程中完成,在程序开始运行之前,程序中的各个地址有关的项均已完成重定位,之后都不再修改。
- 动态重定位:不是在程序装入内存的时候完成的,而是在CPU每次访问内存时由动态地址变换机构(硬件)自动将逻辑地址转换为物理地址。(软硬件配合)
- 碎片:小的无法使用内存块
- 内部碎片:程序小于分配的分区大小时,也占用整个内存分区空间
- 外部碎片:分区外的存储空间中的太小的无法分配给申请内存的程序的内存。(紧缩)
- 交换:把一个进程完整调入内存,使该进程运行一段时间,然后把它存回磁盘。
- 覆盖:当整个程序所需的内存远大于内存空间时,程序员将程序划分为多个片段。(复杂,人工操作)
- 虚拟存储器:每个程序拥有自己的地址空间,这个空间被分割成多个块,每一块称作一页或页面。基于程序局部性原理,这些页被映射到物理内存中,只有一部分被调入内存的情况下运行。当所访问的信息不在内存时,再由系统将所需要的那部分内容调入内存。
- 效果上,计算机系统好像位用户提供了一个比实际内容更大的存储器,这个存储器称为虚拟存储器。
- 虚拟存储器的容量取决于内存和外存容量之和。
- 虚拟存储器的三个依据
- 有大量的外存足以放下多个用户的作业
- 有一定容量的内存
- 地址变换机构,能实现虚地址到是地址的动态变换
基础
- 三级存储结构
- 高速缓存
- 内存
- 外存
- 用户程序的主要处理阶段
- 编辑
- 编译
- 连接
- 装入
- 运行
- TLB:由于由于大多数程序大量访问少数页面,计算机配置的一个小的硬件设施,称为TLB或联想存储,映射虚地址到物理地址时不需要页表。
- 地址变换
- 存储器管理的功能
- 内存分配(与回收)
- 地址映射
- 内存保护
- CPU中一对上、下限寄存器
- 重定位寄存器(基址寄存器):最小
- 界地址寄存器(限长寄存器):最大
- 内存扩充:各道互不干扰
虚拟内存
- 虚拟存储器的基本特征
- 虚拟扩充
- 部分装入
- 离散分配
- 多次对换
- 页表
- 段表
- 分页和段页式的区别和特点
- 分页:每个进程一个页表
- 段页式:1个段,每个段一个页表
置换算法
- 会计算
- OPT
- NRU:RM位来判断
- FIFO
- LRU
- Belady异常:较多的页帧并不是总是导致较小的页故障
有关实现的问题
- 缺页中断处理
- 中断过程
- 硬件陷入内核。在内核堆栈中保存程序计数器。大多数机器将当前指令的各种状态信息保存在特殊的CPU寄存器中。
- 启动一个汇编代码例程保存通用寄存器和其他易失的信息,以免被操作系统破坏。
- 当操作系统发现一个缺页中断时,尝试发现需要哪个虚拟页面。
- 一旦直到了发生缺页中断的虚拟地址,操作系统检查这个系统是否有效,并检查存储与保护是否一致。
- 不一致:杀掉
- 一致:如果没有空闲页框,则置换
- 如果选的页框脏了,则写回磁盘。
- 当磁盘中断发生时,表明该页已经被装入。
- 恢复发生缺页中断指令以前的状态,程序计数器重新指向这条指令
- 调度引发缺页中断的进程,操作系统返回调用它的汇编语言例程。
- 该例程恢复寄存器和其他状态信息。
- 页故障处理(上面那一大堆的简化)
- 硬件陷入内核
- 保存通用寄存器
- OS确定需要哪个虚页
- OS检查地址的有效性,查找页帧
- 如果页帧时脏的,写回到磁盘
- OS装入新页
- 更新页表
- 被中断的指令重新开始执行
- 被打断的进程得到调度
- 恢复寄存器
- 程序继续
分页和分段的优缺点
- 两者都不要求作业连续存放
考察点 | 分页 | 分段 |
---|---|---|
物理单位 | 逻辑单位 | |
实现离散分配方式,以消减内存的外零头(外碎片),提高内存利用率 | 段含有一组意义相对完整的信息,分段的目的是为了更好的满足用户的需求 | |
程序员要了解吗 | 不用 | 要 |
碎片 | 内碎片 | 外碎片 |
大小 | 固定,由系统决定 | 长度不固定,决定于用户所编写的程序 |
地址空间 | 1维,只用给出一个地址就可以确定了 | 2维,既要给出段名,又要给出段内地址(因为长度不确定的原因) |
过程和数据的分离 | 难实现,无法分别对它们进行保护,不便于在用户间对进程进行共享 | 容易实现,可以对过程和数据进行保护,而且利于在用户间共享 |
用户间共享 | 不方便 | 方便 |
技术目的 | 得到大的线性地址空间,扩充内存(逻辑上) | 程序和数据逻辑上独立,便于共享 |
- 段页式
- 每个进程一个段表,每个段一个页表
文件系统
概念
- 文件:以计算机硬盘为载体的存储在计算机上的信息集合。具有符号名的,在逻辑上具有完整意义的一组相关信息项的集合
- 文件系统:操作系统中负责管理和存储文件信息的软件机构。文件系统是对文件的存储空间进行组织、分配,负责文件的存储并对存入文件进行保护、检索的系统。具体的说,它负责位用户建立、撤销、读写、修改和复制微机。使用户实现“按名存取”。
- 目录:管理文件系统结构的系统文件,用于维护文件系统的结构,便于对文件进行存储与管理。
- 目录结构:
- 路径名:
- 绝对路径名:从根目录到文件的路径名
- 相对路径名:从当前目录(工作目录)开始的路径
- 文件链接:
文件
- 文件的逻辑组织
- 流式文件。对文件内的信息不再划分单位。
- 记录式文件。把文件内的信息按逻辑上独立的含义划分为信息单位。
- 对象存储。
- 文件的物理组织:文件的内部组织方式。
- 连续组织
- 链接组织
- 索引组织
目录
- 作用:用于维护文件系统的结构
文件系统的实现
目录的实现
- 文件被打开时,文件系统使用路径名定位目录项
- 目录提供找到磁盘块的信息
- 整个文件磁盘地址(连续块)
- 第一个的块号(连接表)
- i-node:记录了文件的属性以及文件内容的存储地址
- 文件名+i 结点
- Unix:每个目录项指引 用 i-node
- 处理长文件名的两种方式
- 固定长度文件名:浪费空间
- 在行中:文件删除后,会留下一个长度不定的空隙(碎片)
- 在堆中:堆管理引入额外开销
- 目录中查找文件
- 线性查找
- 哈希表
- 将查找结果保存在cache
虚拟文件系统 VFS
- 作用:将多种文件系统统一成一个有序的结构
- 关键思想:抽象出所有文件系统共有的部份,并将这部分代码放在单独一层,该层调用底层的实际文件系统来具体管理数据。
UNIX V7
- linux
- 多少次访盘
- 目录项:
- 一项16B, i-node number: 2B, 16b, 决定了每个文件系统中的文件目录为(2^{16} = 64K)个
第五章 输入/输出
概念
-
设备管理功能
-
常用设备分配技术;
-
使用缓冲技术的目的;
-
系统调用的实施过程
-
通道:指专门用于负责输入/输出工作的处理机,它有自己的指令系统,该指令系统比较简单,一般只有数据传输指令、设备控制指令等。
-
设备的独立性:用户在编程时使用的设备与实际设备无关。一个程序应该独立于分配给它的某类设备的具体设备,即在用户程序中只指明IO使用的设备类型即可
-
优点:
方便用户编程
使程序运行不受具体机器环境的限制
-
IO硬件原理
-
虚拟设备(假脱机)
-
内存映射IO
- 分离IO和内存空间:每个控制器被分配一个IO端口,所有端口形成以IO端口空间
- 内存映射io:所有控制器寄存器映射到内存空间,称之为内存映射的io
- 混合:把IO数据缓冲映射到内存空间,但将io端口与内存分离
-
中断过程
-
精确中断:将机器停留在一个明确状态的中断
四个特性:
- PC保存在一个已知的地方
- PC所指向的指令之前的所有指令都已经执行完成了
- PC所指向的指令之后的所有指令都没有执行
- PC所指向的指令的执行状态的已知的
-
中断:
-
中断源:
-
中断请求:
-
中断响应:
-
中断响应完成的工作
-
中断处理的一般过程
-
中断驱动IO:将CPU从繁忙等待中解脱出来
- cpu初始化io并启动第一次io操作
- cpu去忙别的活
- 当io完成时,cpu将被中断
- cpu恢复中断
- cpu恢复被中断的程序
-
IO软件原理
- IO方式
- 程序控制IO
- 中断驱动IO
- 使用DMA的IO
- DMA的IO:
- 直接存储器存取方式
- 特点:外设在硬件支持下直接与内存交换成批数据而无需CPU干预。
- DMA方式下的系统地址总线和数据总线以及一些控制信号线都是与CPU共用的。平时由cpu管理使用。
- 设备分配技术
- 独占分配:设备被使用的时候不再允许其他进程使用该进程
- 共享分配:设备没有独占使用的要求
- 虚拟分配:
- spooling(假脱机):将独占涉笔改造为共享设备
- IO请求步骤
盘
- 磁盘臂调度算法(大题)
- FCFS:先来先服务
- SSF:最短寻道优先
- 效率最高,但是会有饥饿
- 电梯算法:总是往一个方向,直到那个方向没有请求了,再换一个方向
时钟
- 时钟:又称定时器,由于各种各样的原因决定了它对于任何多道程序设计系统的操作都是至关重要的。时钟负责维护时间,并且防止以一个进程垄断CPU,此外还有其他功能。
- 时钟硬件
- 时钟软件
- 软定时器
- 辅助时钟用于定时器中断
- 由应用指定
- 中断频率较低没有问题
- 软定时器避免了中断
- 内核在退到用户态之前检查软定时器是否到期
- 工作好坏取决于进入内核的速率
- 辅助时钟用于定时器中断
第六章 死锁
概念
- 死锁:如果一个进程集合中的每个进程都在等待只能由该进程中的其他进程才能引发的事件,那么该进程集合就是死锁
资源
- 可抢占资源:可以从拥有它的进程中抢占而不会产生任何副作用(内存)
- 不可强占资源:若从耶有它的进程中抢占将导致致命错误或相关计算的失败(光盘刻录机)
- 死锁与不可抢占资源有关,有关抢占资源的潜在死锁可以再进程之间重新分配资源而化解
死锁简介
- 四个必要条件!(同时发生)
- 互斥条件:每个进程要么已经分配到了一个进程,要么就是可用的
- 占有和等待条件:已经得到了某个资源的进程可以再去申请其他资源
- 不可抢占条件:已经分配给一个进程的资源只能被占有它的进程显示释放
- 环路等待条件:组成环路,环路上每个进程都在等待下一个进程所占有的资源
- 资源分配图
- 圆:进程
- 方:资源
鸵鸟算法
- 假装没有问题
- 单线程应用中死锁很少发生,防止死锁的代价很高
死锁检测和死锁恢复
- 让死锁发生,然后再检测是否有死锁发生,一旦发生,采取行动解决
- 死锁检测算法
- 死锁恢复
- 利用抢占恢复
- 利用回滚恢复
- 通过杀死进程恢复
死锁避免
- 安全和不安全状态
- 安全状态:如果存在某种调度顺序能使其每个进程都可以结束,即使所有进程都请求其所需要的全部资源
- 安全状态:系统可以保证所有进程都能安全,不安全状态则不可以
- 银行家算法(用于判断是否为安全状态)
- 死锁避免:仔细对资源进行分配,动态地避免死锁。对于每个请求进行检查,检查如果满足这一请求是否达到安全状态,若是则满足请求。
死锁预防(破坏四个必要条件之一)
必要条件 | 描述 | 效果 | 例子 |
---|---|---|---|
破坏互斥条件 | 让资源不被一个进程所独占,例如假脱机打印机 | 好,可以解决很多问题。不太可行,有的场合应该保护这种互斥性 |
假脱机 spooling |
破坏占有和等待条件 | 禁止已持有资源的进程再请求其他资源,例如:所有进程在执行之前就请求完全部的资源 | 不可行 | 静态分配法 |
破坏不可抢占条件 | 强制占有(非抢占式) | 有的地方也行 | |
破坏环路等待条件 | 消除环路。 1. 请求一个资源就要释放一个资源 2. 将所有资源统一编号,所有请求必须按照资源编号的顺序提出 |
顺序资源分配法 |
其他问题
- 两阶段加锁
- 阶段一:进程试图对所有的记录进行加锁,一次锁一条记录。如果发现记录已经被锁,则释放它的加锁记录,重新开始第一阶段。
- 阶段二:如果阶段一成功才执行阶段二
- 执行更新
- 释放锁
- 通信死锁:发生在两个或两个以上进程利用发送信息来通信时。一种普遍的情形使进程A向进程B发送请求信息,然后阻塞直至B回复。
- 假设A发送的信息丢失,A将阻塞以等待回复
- 而B会阻塞等待一个发送命令的请求。
- 活锁:活锁使拿到资源却又相互释放不执行。多线程中出现了相互谦让,都主动将资源释放给别的线程使用,这样这个资源在多个线程之间跳动而又得不到执行。
- 饥饿:多线程执行中有线程优先级,优先级高的线程能够插队并优先执行,这样如果优先级高的线程一直抢占优先级低的线程的资源,导致低优先级的线程无法得到执行。或者,一个线程一直占着一个资源不妨而导致其他线程得不到执行。
- 区别
第九章 安全
- 数字签名:用来验证服务端和客户端之间发送的报文信息是否被篡改了
- 对签名块进行计算
- 接收方获取信息
第十章
- Unix或Linux的特点
- Unix或Linux文件系统的目录组织是一个树形结构
- 文件本身是无结构的字符流
- Unix或Linux文件系统把外部设备做成特殊文件,与普通文件一并进行管理