操作系统总结

文章目录

操作系统

操作系统

绪论

操作系统的定义与目标★★

  • 定义:操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件程序

  • 目标:方便性,有效性(提高系统资源的利用率、提高系统的吞吐量),可扩充性,开放性。

基本特征★★

  • 并发性★:是指两个或多个活动在同一给定时间间隔中进行(并行:同时进行)

  • 共享性★:是指计算机系统中的资源被多个进程共用

  • 不确定性:在多道程序环境下,允许多个进程并发执行,但由于资源等因素的限制,使进程的执行以“停停走走”的方式运行,而且每个进程执行的情况(运行、暂停、速度、完成)也是未知的

  • 虚拟性:把一个物理上的实体变为若干个逻辑上的对应物

    并发、共享(互为存在条件),虚拟和异步特性前提是具有并发性

主要功能★★

  • 处理机管理:进程控制、进程同步、进程通信、死锁处理、处理机调度等
  • 存储器管理:内存分配、地址映射、内存保护与共享、内存扩充等
  • 文件管理:文件存储空间管理、目录管理、文件读写管理和保护等
  • 设备管理:缓冲管理、设备分配、设备处理、虚拟设备等

发展★★

  • 手工操作阶段(无操作系统):人机速度矛盾

  • 批处理阶段(操作系统开始出现)

    • 单道(单进程式)
    • 多道(多进程式):提高系统资源利用率(减少cpu空闲)
  • 分时操作系统(不可以插队,有了人机交互):不能优先处理紧急事务

  • 实时操作系统(可以插队)★★

    • 特征:安全性、实时性、高可靠
    • 硬实时系统:必须在被控制对象规定时间内完成(火箭发射、抢票)
  • 软实时系统:时间松一些(订票)

可靠性:实时操作系统更强

交互性:分时操作系统更强

重要概念

两种指令

  • 特权指令:不允许用户程序使用(只允许操作系统使用)如IO指令、置中断指令
  • 非特权指令:普通的运算指令

两种程序

  • 内核程序:系统的管理者,可执行一切指令、运行在核心态
  • 应用程序:普通用户程序只能执行非特权指令,运行在用户态

处理机状态

  • 用户态(目态):CPU只能执行非特权指令
  • 核心态(管态、特权态、系统态):可以执行所有指令
  • 用户态到核心态:通过中断(是硬件完成的)
  • 核心态到用户态:特权指令psw的标志位 0用户态 1核心态

原语★★

  • 处于操作系统最底层,是最接近硬件的部分
  • 程序的运行具有原子性,操作只能一气呵成
  • 程序运行时间较短、调用频繁

中断和异常★★

  • 内中断(异常、例外、陷入)(信号来自CPU内部)
    • 自愿中断----访管指令程序员使用访管指令向操作系统请求服务★★
    • 强迫中断----硬件中断、软件中断
  • 外中断(中断)(信号来自CPU外部)★
    • 外设请求
    • 人工干预
  • 外中断的处理过程:
    • 每执行完一个指令后,CPU都需要检查当前是否有外部中断 信号;
    • 如果检查到外部中断信号,则需要保护被中断进程的CPU环境(如程序状态字PSW,程序计数器PC、各种通用寄存器)把他们存储在PCB(进程控制块中);
    • 根据中断信号类型转入相应的中断处理程序;
    • 恢复原进程的CPU环境并退出中断,返回原进程继续执行。

程序调用

系统给程序员(应用程序)提供的唯一接口,可获得OS服务。

在用户态发生、核心态处理

体系机构

大内核、微内核

进程调度

进程管理

目的★★
  1. 进程是系统进行**资源分配和调度的基本单位**;
  2. 进程作为程序独立运行的载体保障程序正常执行;
  3. 进程的存在使得操作系统资源的利用率大幅提升。
定义

是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位

结构/组成★★
  • 进程控制块(PCB):保存进程运行期间相关的数据,是进程存在的唯一标志
  • 程序段:能被进程调度到CPU的代码
  • 数据段:一段数据
状态种类★★
  • 运行态:进程获得CPU,其程序正在执行。
  • 就绪态:其它资源(进程控制块、内存、栈空间、堆空间等)都准备好、只差CPU的状态。
  • 阻塞态:进程因某种原因放弃CPU的状态,阻塞进程以队列的形式放置
  • 创建状态:创建进程时拥有PCB但其它资源尚未就绪。
  • 结束状态:进程结束由系统清理或者归还PCB的状态。
状态变化

image-20210830134139425

线程
  • 目的:为了更好的使用多道程序并发执行,提高资源利用率和系统吞吐量
  • 特点:是程序执行的最小单位,基本不拥有任何系统资源(调度的基本单位)★★★
进程与线程区别与联系
  1. 一个进程可以有一个或多个线程

  2. 线程包含在进程之中,是进程中实际运行工作的单位

  3. 进程的线程共享进程资源

  4. 一个进程可以并发多个线程,每个线程执行不同的任务

    image-20210826153718544

处理机调度

概念

是对处理机进行分配,即从就绪队列中按照定的算法(公平、高效)选择一个进程并将处理机分配给它运行,以实现进程并发地执行。

分类
  • 高级调度(作业调度)(次数少):外部存储、辅存-内存
  • 中级调度(内存兑换)(次数中等):等待进程调出
  • 低级调度(进程调度)(次数多):进程根据优先级调度
调度方式★★
  • 剥夺式(抢占式):进程插队(进程进入运行会被强制中断)
  • 非剥夺式(非抢占式):进程顺序执行(进程进入运行后不再退出)
调度准则
  • CPU利用率
  • 系统吞吐量
  • 周转时间
    • 周转时间=完成时间-提交时间
    • 平均周转时间=周转时间/进程数
  • 等待时间:运行未完成被中断,等待时间
  • 响应时间:提交到运行
进程调度算法★★▲

先来先服务算法:按照在就绪队列中的先后顺序执行。
短进程优先调度算法:优先选择就绪队列中估计运行时间最短的进程,不利于长作业进程的执行。(上一个进程完成前,已经提交等待运行的进程)
高优先权优先调度算法:进程附带优先权,优先选择权重高的进程,可以使得紧迫的任务优先处理。(高响应比=(运行时间+等待时间)/等待时间)
时间片轮转调度算法:按照FIFO的原则排列就绪进程,每次从队列头部取出待执行进程,分配一个时间片执行是相对公平的调度算法,但是不能保证就是响应用户。(一定是剥夺式)
多级反馈队列调度算法:每一级优先级不同

进程同步

引入原因

协调进程之间地相互制约关系

制约关系★★
  • 同步(直接制约关系):多个进程协调工作次序而等待、传递信息所产生的制约关系(同步的)
  • 互斥(间接制约关系):只能有一个进程进入临界区,另一个进程必须等待
临界资源

一次仅允许一个进程使用的资源(打印机,共享缓冲区、共享变量、公用队列)

临界区★★

在每个进程中访问临界资源的程序段

临界区互斥★★
  • 原则★★

    • 空闲让进:如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入
    • 忙则等待:任何时候,处于临界区内的进程不可多于一个,其它所有试图进入临界区的进程必须等待。
    • 有限等待:进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
    • 让权等待:如果进程不能进入自己的临界区,则应**让出CPU,避免进程出现“忙等”**现象。
  • 基本方法

    信号量----利用PV操作实现互斥

死锁

死锁的四个必要条件★★
  • 互斥条件必须互斥使用资源才会产生死锁
  • 请求保持条件进程至少保持一个资源,又提出新的资源请求,新资源被占用,请求被阻塞,被阻塞的进程不释放自己保持的资源;
  • 不可剥夺条件:进程获得的资源在未完成使用前不能被剥夺(包括OS),只能由进程自身释放
  • 环路等待条件:发生死锁时,必然存在进程-资源环形链,环路等待不一定造成死锁,但是死锁一定有循环等待。
定义

多个进程因竞争资源而造成的一种僵局,如果没有外力,这些进程将无法推进

进程死锁、饥饿、死循环的区别

死锁:两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。永远在互相等待的进程称为死锁进程。

饥饿:由于长期得不到资源导致进程无法推进;

死循环:代码逻辑BUG。

死锁的产生:竞争资源(共享资源数量不满足各进程需求)、进程调度顺序不当。

解决方法★★
  • 预防:源头掐死
    • 破坏互斥条件:将临界资源改造成共享资源(Spooling池化技术);(可行性不高,很多时候无法破坏互斥条件)
    • 破坏请求保持条件:系统规定进程运行之前,一次性申请所有需要的资源;(资源利用率低,可能导致别的线程饥饿)
    • 破坏不可剥夺条件:当一个进程请求新的资源得不到满足时,必须释放占有的资源;(实现复杂,剥夺资源可能导致部分工作失效,反复申请和释放造成额外的系统开销)
    • 破坏环路等待条件:可用资源线性排序,申请必须按照需要递增申请;(进程实际使用资源顺序和编号顺序不同,会导致资源浪费)
  • 避免:避免
    • 安全序列算法虽然保守,但可以保证系统时时处于安全状态。
    • 银行家算法:检查当前资源剩余是否可以满足某个进程的最大需求;如果可以,就把该进程加入安全序列,等待进程允许完成,回收所有资源;重复1,2,直到当前没有线程等待资源;
  • 检测:利用死锁原理
  • 解除:解除★
    • 资源剥夺法:去除资源
    • 撤销进程法:终止进程
    • 进程退回法:进程状态回退

存储管理

引入目的

存储管理为了确保计算机有足够的内存处理数据;确保程序可以从可用内存中获取一部分内存使用;确保程序可以归还使用后的内存以供其他程序使用。

主要功能

  • 内存空间的分配和回收
  • 存储的保护和共享:互不干扰
  • 地址转换
    • 逻辑地址
    • 物理地址
  • 内存扩充
    • 利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存

用户程序的主要处理阶段★★

  • 编辑阶段:创建源文件
  • 编译阶段:由编译程序将用户源代码编译成若干目标模块,生成目标文件
  • 链接阶段:由链接程序将编译后形成的一组目标模块及所需库函数链接在一起,形成一个完整的装入模块。生成可执行文件(生成逻辑地址)
  • 装入阶段:由装入程序装入模块运行(动态重定位
  • 运行阶段:得到结果(运行时重定位

相关概念★★

  • 程序的装入
    • 绝对装入(逻辑地址必须和实际的内存地址完全一样)
    • 静态重定位(在编译时进行)
    • 动态重定位★(在装载时进行)
  • 程序的链接
    • 静态链接
    • 装入时链接
    • 运行时链接
  • 地址空间
    • 逻辑地址空间(地址空间从0开始)
    • 物理地址空间(内存中物理单元的集合)

管理方式★★▲

  • 连续分配管理方式
    • 单一连续分配:分配到内存固定的区域(有内部碎片)
    • 固定分区分配:分配到内存不同的固定区域,分区可以相等、可以不等(内部碎片)
    • 动态分区分配
      • 可变分区存储管理:按照程序的需要进行动态的划分
      • 动态分区的分配策略算法★★
        • 首次适应(最好):空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区(顺序查找满足条件的分区)(增大查找开销)。
        • 最佳适应:空闲分区按容量递增的方式形成分区链,找到第一个能满足要求的空闲分区(容量最小且满足条件)(外部碎片过多)。
        • 最坏适应:空闲分区按容量递减的次序链接。找到第一个能满足要求的空闲分区(容量最大且满足条件)(对大进程不利)。
        • 邻近适应:由首次适应算法演变而成。不同之处是,分配内存时从上次查找结束的位置开始继续查找(即使该分区剩余位置足够,也寻找下一分区)。
  • **非连续分配管理方式(离散式)**★★
    • 页式存储管理:将进程逻辑空间等分成若干大小的页面,相应的把物理内存空间分成与页面大小的物理块,以页面为单位把进程空间装进物理内存中分散的物理块。
    • 段式存储管理:将进程逻辑空间分成若干段(不等分),段的长度由连续逻辑的长度决定。
    • 段页式存储管理:现将逻辑空间按照段式管理分成若干段,再将内存空间按照页式管理分成若干页,分页可以有效提高内存利用率分段可以更好的满足用户需求

页式和者段式存储管理对比

  1. 段式存储和页式存储都离散地管理了进程的逻辑空间
  2. 页是物理单位,段是逻辑单位
  3. 分页是为了合理利用空间,分段是满足用户要求页大小由硬件固定段长度可动态变化
  4. 页表信息是一维的,段表信息是二维的

内存扩充★★▲

  • 覆盖(同一程序或进程中)
  • 交换(不同进程/作业之间进行)
  • 虚拟内存
    • 引入原因:在逻辑上扩充内存
    • 虚拟内存的特征
      • 多次性:无需再作业运行时一次性全部装入内存,而是允许被分成多次调入内存;
      • 对换性:无需在作业运行时一直常驻内存,而是允许在作业运行过程中,将作业换入、换出;
      • 虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存用来,远大于实际的容量;
    • 组成部分
      • 页表机制
      • 中断机制
      • 地址变换机制
      • 内存与外存
    • 页面置换(淘汰)算法★★
      • 先进先出(FIFO)(最早进入的淘汰)
      • 最近最久未使用(LRU)(注意重新计数位置★★)
      • 最近最少使用(LFU)(使用次数最少的淘汰,次数一样多使用FIFO或LRU
      • 最优(最佳)(OPT)(未来最久不使用的淘汰)
      • 置换:内存与外存发生数据置换(外存进入内存、内存存储位置互换)
      • 缺页中断次数:不重复进程数(进入内存)+发生置换的次数(发生置换)
      • 缺页率:缺页中断次数/总页数的百分比
      • 页面淘汰是由缺页中断引起的,但缺页中断不见得一定引起页面淘汰
    • 抖动
      • 页面频繁的换进换出
      • 原因:分配给进程的进程块不足
    • 页面分配的策略
      • 固定分区局部置换(物理块不变)
      • 可变分配全局置换(动态增加物理块)
      • 可变分配全局置换(只允许从该进程的内存页面中挑选一页)

文件系统

文件、文件系统

概念
  • 文件:是以计算机硬盘为载体的存储在计算机上的信息集合
  • 文件系统:是操作系统中负责操纵和管理文件的一整套设施,实现文件的共享和保护,方便用户**“按名存取“(基本目标)**,提高文件的存取速度(最重要目标)
功能
  • 文件管理、目录管理、文件空间管理、文件共享和保护、提供方便的接口

文件的逻辑结构★★▲

  • 无结构文件(即流式文件)(二进制文件、链接库)
  • 有结构文件(记录式文件)(文本文件,文档,媒体文件)
    • 顺序文件(磁带上的文件)
    • 索引文件(索引表其中的地址登记项用来指出文件在外存上的位置信息
    • 索引顺序文件

目录和目录结构

  • 文件控制块:在文件系统内部给每一个文件唯一地设置一个文件控制块,用于描述和控制文件地数据结构,与文件一一对应(类似进程的PID)
  • 目录结构
    • 单机目录结构(不允许重名)
    • 二级目录结构(解决了重名问题)
      • 主文件目录
      • 用户文件目录
    • 树形目录(优:方便,缺:不便分享)
      • 绝对路径(从根目录出发)
      • 相对路径(从当前目录出发)
    • 图形目录(实现了共享)

文件实现(辅存的存储空间分配)

  • 文件(辅存)分配方式
    • 连续分配(有外部碎片,可以直接访问)
    • 链接分配(建立链接,不是直接访问,数据易丢失)
    • 索引分配(加入FAT表,可直接访问)
  • 文件(辅存)存储空间管理
    • 空闲表法
    • 空闲链表法
    • 位示图法

磁盘管理★★▲

  • 磁盘地址结构

  • 磁盘调度算法

    • 先到先服务算法(FCFS)(按顺序)
    • **最短查找时间优先算法(SSTF)(找最近的)**会出现饥饿现象
    • SCAN(电梯调度算法)(来回方向)(从小到大,掉头,从大到小)
    • SCCN(循环扫描算法)(单方向)(从小到大,不掉头,回到最小,从小到大)

设备管理

设备管理的目标

使用方便、与设备无关(虚拟)、效率高、管理统一

I/O设备

  • 分类
    • 按照使用特性分类:存储设备(内存、磁盘、U盘)和交互IO设备(键盘、显示器、鼠标);
    • 按照信息交换分类:块设备(磁盘、SD卡)和字符设备(打印机、shell终端);
    • 按照设备共享属性分类:独占设备,共享设备,虚拟设备;
    • 按照传输速率分类:低速设备,高速设备;
  • I/O控制方式
    • 程序直接控制方式(查询方式):(字节)cpu不断地取查询设备控制器是否将数据放到了数据存储器中,或者从数据存储器存到设备中,当完成IO时cpu才能去干别的事(CPU利用率低)
    • 中断方式:(字节)cpu发出指令(分配任务)(并行),当设备控制器把数据存在数据存储器后,向cpu发出中断请求,然后cpu再来处理这部分数据**(寄存器有限)(CPU利用率低)**
    • DMA方式:(数据块)DMA控制器直接将设备中地数据以数据块为单位直接传输到内存中,当传输结束后才向CPU发起中断(CPU介入频率降低)(介于IO设备和主存之间,不经过CPU)(不能传输离散数据块)
    • IO通道控制方式:**(硬件)(与CPU共享内存)(可以传输离散数据块)(不经过CPU)**CPU对IO通道发出指令,IO通道自己工作,等数据传输玩才向CPU发起中断。

引入缓冲的目的和缓冲区的设置方式

  • 引入缓冲的目的
    • 缓和CPU与外设间速度不匹配的矛盾
    • 提高CPU与外设之间的并行性
    • 减少对CPU的中断次数
    • 磁盘的高速缓存(磁盘中分出部分区域或由空闲空间)
  • 缓冲区的设置方式
    • 单缓冲:当数据达到率和离去率相差很大时,可采用单缓冲方式。
    • 双缓冲:当信息输入和输出率相同(或相差不大)时,可利用双缓冲区,实现两者的并行。
    • 多缓冲:对于阵发性的输入、输出,为了解决熟读不匹配问题,可以设立多个缓冲区。

常用设备分配技术

  • 根据设备的使用性质
    • 独占设备:不能共享的设备(打印机)。
    • 共享设备:可由若干个进程同时共享的而设备(磁盘机)。
    • 虚拟设备:利用某种技术把独占设备改造成可由多个进程共享的设备。
  • 对三种设备采用三种分配技术
    • 独占分配技术:固定分配给一个进程,直至该进程IO操作完成并释放。
    • 共享分配技术:多进程共享一台设备,每个进程只用其中一部分。适用于高速、大容量的直接存储设备。
    • 虚拟分配技术:SPOOLing技术(假脱机操作)。虚拟设备技术,把同步调用低速设备改为异步调用,在输入、输出之间增加了排队转储环节(输入井、输出井),SPoOLing负责输入(出)井与低速设备之间的调度,逻辑上,进程直接与高速设备交互,减少了进程的等待时间。

实现支持异步任务的线程池

线程池

  • 线程池是存放多个线程的容器,CPU调度线程执行后不会销毁线程,将线程放回线程池重新利用。

使用线程池的原因

  • 线程是稀缺资源 ,不应该频繁创建和销毁;
  • 架构解耦,业务创建和业务处理解耦,更加优雅;
  • 线程池是使用线程的最佳实践。
  • image-20210830160845040

实现线程安全的队列Queue

  • 队列:用于存放多个元素,是存放各种元素的“池”。
  • 实现的基本功能:获取当前队列元素数量,往队列放入元素,往队列取出元素。
  • 注意:队列可能有多个线程同时操作,因此需要保证线程安全,如下两种情况:

实现基本任务对象Task

  • 实现的基本功能:任务参数,任务唯一标记(UUID),任务具体的执行逻辑

实现任务处理线程ProcessThread

  • 任务处理线程需要不断地从任务队列里取任务执行,任务处理线程需要有一个标记,标记线程什么时候应该停止。
  • 实现的基本功能:基本属性(任务队列、标记),线程执行的逻辑(run),线程停止(stop)。

实现任务处理线程池Pool

  • 存放多个任务处理线程,负责多个线程的启停,管理向线程池的提交任务,下发给线程去执行。
  • 实现的基本过程:基本属性,提交任务(put,batch_put),线程启停(start,join),线程池大小(size)。

实现异步任务处理AsyncTask

  • 给任务添加一个标记,任务完成后,则标记为完成;任务完成时可直接获取任务运行结果;任务未完成时,获取任务结果,会阻塞获取线程。
  • 主要实现的两个函数:设置运行结果(set_result),获取运行结果(get_result)

算法

进程调度算法
  • 先来先服务算法
  • 短进程优先调度算法
  • 高优先权优先调度算法
  • 时间片轮转调度算法
  • 多级反馈队列调度算法
死锁解决算法
  • 银行家算法,安全序列
页面置换(淘汰)算法

https://www.bilibili.com/video/BV1xt4y1173x/

缺页率计算

  • 先进先出(FIFO)(最早进入的淘汰)
  • 最近最久未使用(LRU)(注意重新计数位置★★)
  • 最近最少使用(LFU)(使用次数最少的淘汰,次数一样多使用FIFO或LRU)
  • 最优(最佳)(OPT)(未来最久不使用的淘汰)
磁盘调度算法
  • 先到先服务算法(FCFS)
  • 最短查找时间优先算法(SSTF)
  • 电梯调度算法(SCAN)
  • 循环扫描算法(SCCN)
分页分段式内存分配

https://www.bilibili.com/video/BV1VK411o7Kc/

  • 分页式
    • 逻辑地址=页号*页面大小+页内位置
    • 物理地址=(块号)*块大小+位移量
    • 页号和(块号)一一映射,页面大小=块大小,页内位置=位移量
  • 分段式
    • ①判断:比较段长和段内地址,是否会发生越界中段
    • ②计算:物理地址=基址+段内地址
动态分区分配算法

https://www.bilibili.com/video/BV1uY411d7xH/

  • 首次适应
  • 最佳适应
  • 最坏适应
  • 邻近适应
临界区同步与互斥

  • 先进先出(FIFO)(最早进入的淘汰)
  • 最近最久未使用(LRU)(注意重新计数位置★★)
  • 最近最少使用(LFU)(使用次数最少的淘汰,次数一样多使用FIFO或LRU)
  • 最优(最佳)(OPT)(未来最久不使用的淘汰)
磁盘调度算法
  • 先到先服务算法(FCFS)
  • 最短查找时间优先算法(SSTF)
  • 电梯调度算法(SCAN)
  • 循环扫描算法(SCCN)
分页分段式内存分配

https://www.bilibili.com/video/BV1VK411o7Kc/

  • 分页式
    • 逻辑地址=页号*页面大小+页内位置
    • 物理地址=(块号)*块大小+位移量
    • 页号和(块号)一一映射,页面大小=块大小,页内位置=位移量
  • 分段式
    • ①判断:比较段长和段内地址,是否会发生越界中段
    • ②计算:物理地址=基址+段内地址
动态分区分配算法

https://www.bilibili.com/video/BV1uY411d7xH/

  • 首次适应
  • 最佳适应
  • 最坏适应
  • 邻近适应
临界区同步与互斥
  • 信号量----利用PV操作实现互斥
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值