软件工程师——(三)操作系统基本原理(5-7分)

101 阅读20分钟

1. 操作系统概述

img6_3_1_1.png

  • 说明
    • 操作系统是用来管理整个系统软硬件资源的,是人与硬件之间的一种接口,也是应用软件和硬件之间的一种接口
    • 对于人和计算机之间而言,接口往往是命令的形式(Linux),为了方便,出现了图像化的(windows)
    • 应用软件和硬件之间的接口,是指API的这些接口(应用软件要调用一些硬件的资源时,可以通过操作系统专为应用软件提供的API接口来实现相关的功能)
    • 操作系统具备的管理职能包括———进程管理、存储管理、文件管理、作业管理、设备管理

2. 进程管理

1. 进程的状态

img6_3_2_1.png

  • 状态的基本定性(三态模型)
    • 运行态———指进程所需要的所有资源都已经配足了,并且给定了CPU资源,此时就处于运行状态
    • 就绪态———指其他的所有资源都已经配足了,但是缺少CPU资源,此时就处于就绪状态
    • 等待态———指除了没有CPU资源,还缺少其他资源
  • 状态之间的转换关系
    • 运行态——>等待态———需要等待某个事件(缺某种资源)
    • 等待态——>就绪态———等待的事件发生(已经调配所需的资源)
    • 就绪态——>运行态———CPU发起了调度指令
    • 运行态——>就绪态———运行态中未能完成任务(因为CPU资源比较宝贵,更多的时候采取时间片轮转的算法进行CPU资源的分配),但是时间片已经用完,因此只能等待下一次的时间片分配
  • 五态模型———三种状态不足以涵盖常见的各种情况提出
    • 运行态———对应三态模型的运行态
    • 活跃就绪态———对应三态模型的就绪态
    • 活跃阻塞态———对应三态模型的等待态
    • 静止就绪态
      • 1、运行态(人为)挂起后进入静止就绪态,并不缺少其他的资源
      • 2、静止就绪态通过恢复或激活重新进入活跃就绪态
    • 静止阻塞态
      • 1、活跃阻塞态挂起后进入静止阻塞态,并不缺少其他的资源
      • 2、静止阻塞态通过恢复或激活重新进入活跃阻塞态

2. 前趋图(和PV操作结合常考)

img6_3_2_2.png

  • 基本理念
    • 达要完成一系列活动的先后约束关系,通过前趋图可以直观的看到那些任务可以并行,那些任务有先后关系
  • 实例说明
    • 1、A\B\C三者可以并行
    • 2、D必须等A\B\C完成后才能进行
    • 3、E必须D完成才能开始

3. 进程的同步与互斥

img6_3_2_3.png

  • 说明
    • 进行PV操作分析的前提
    • 互斥————如同千军万马过独木桥
    • 同步————速度有差异,在一定情况停下等待
  • 生产者消费者问题 img6_3_2_4.png
    • 说明———(同步与互斥问题———需要能够找出哪里存在互斥和同步的情况,决定在哪里写P操作,哪里写V操作)
      • 单缓冲区情况
        • 互斥———市场容量只有一个,对于市场的操作,同一时刻不能既有生产者存放东西,又有消费者去搬东西
        • 同步———生产者将一个东西放在市场,不能再放资源,否则就会产生溢出情况,只能等到消费者将其消费掉
      • 多缓冲区情况
        • 互斥———市场容量有多个,对于市场的操作,市场容量满载的情况下,同一时刻不能既有生产者存放东西,又有消费者去搬东西
        • 同步———市场容量满载的情况下,生产者不能再放资源,否则就会产生溢出情况,只能等到消费者将其消费掉

4. PV操作(高难度)

img6_3_2_5.png

  • 作用———两大原子操作的组合,进行进程管理,解决并发进程之间某些约束关系问题的解决
  • 名词解释
    • 临界资源———诸进程间需要互斥方式对其进行共享的资源,如打印机,磁带机等
    • 临界区———每个进程中访问临界资源的那段代码称为临界区
    • 信号量(S)———一种特殊的变量,应用于PV操作的一种专属变量
  • 运作方式
    • P(S)操作
      • 1、S进行自减一操作
      • 2、判断S是否小于0
      • 3、是———进行进程阻塞并放入进程队列,进程进入等待状态
      • 3、否———继续执行当前程序
    • V(S)操作
      • 1、S进行自加一操作
      • 2、判断S是否小于等于0
      • 3、是———从系统的进程队列中获取一个进程进行唤醒,进程进入执行状态;
      • 3、否———继续执行当前程序
  • 单缓冲区生产者、消费者问题PV原语描述
    • 生产者
      • 1)生产一个产品———P(s1)
      • 2)送产品到缓冲区———V(s2)
    • 消费者
      • 1)P(s2)———从缓冲区取产品
      • 2)V(s1)———消费产品
    • S1初值为1,S2初值为0
  • 考题示例
    • 考题1 img6_3_2_6.png
      • 考点
        • 1、分析进程之间的约束关系
        • 2、那些地方需要需要阻塞起来,等待另外的进程进行相关的操作,等待其操作完成后,进行后续操作
      • 分析
        • 1、一个收银员(一个消费者)、n个购书者(n个生产者)
        • 2、分析没有PV操作面临带额问题
          • 1)收银员面临的问题——没有购书者不能收费的
            • b1处应该是一个P操作———b1=P(S1)
            • a1处应该是一个V操作———a1=V(S1)
            • b1应该由a1唤醒的,所以是同一信号量
          • 2)付款者,给了钱,需要等收费员的反馈,没找零钱和消磁不能直接走的
            • a2处应该是一个P操作———a2=P(S2)
            • b2处应该是一个V操作———b2=V(S2)
            • a2应该由b2唤醒的,所以是同一信号量
    • 考题2———必须掌握 img6_3_2_7.png
      • 考点
        • 1、PV操作和前趋图的结合
        • 2、将前趋图转换为PV操作的形式(讲前趋图的每一个活动,都转成PV操作的形式,即相应的进程,让其在并发执行的时候依然按前趋图的约束关系的先后顺序进行执行)
      • 分析
        • 1、A\B\C\D\E都对应了相应的进程,代表要完成的一系列任务
        • 2、对于A\B\C活动而言,其前没有其他活动,不受依赖约束,一开始就能执行,因此A/B/C进程可以直接分别进行V操作V(Sa)/V(Sb)/(Sc)
        • 3、对于D活动而言,一开始没法执行,必须等A\B\C进程结束才能开始执行,因此需要在D进程开始进行P(Sa)/P(Sb)/P(Sc)操作,之后再是V(Sd)操作
        • 4、对于E活动而言,一开始也没法执行,必须等D进程结束才能开始执行,因此需要在E进程开始进行P(Sd)操作
      • 实际考题 6_3_2_8.png
        • 解题思路
          • 1、遵循从左到右,从上到下的基本原则,在每条前趋图上标好信号量
          • 2、箭头的起点位置是V操作,终点位置是P操作
          • 3、所以答案是C、A、A

5. 死锁问题

  • 说明
    • 进程管理是操作系统的核心,但如果设计不当,就会出现死锁问题.如果一个进程在等待一件不可能发生的事,则进程就是死锁了.而如果一个或多个进程产生死锁,就会造成系统死锁.
  • 典型考题示例 6_3_2_9.png
    • 解题思路
      • 1、给每个进程分配其所需资源个数(Xn)Xn-1
      • 2、然后求和Sum(Xn-1)的基础上加1,得到的结果就是保证系统不会死锁而至少需要的资源数Sum(Xn-1)+1
  • 死锁的预防与避免 6_2_2_10.png
    • 死锁的必要条件(四大条件缺一不可)
      • 1、互斥———如果不存在互斥使用资源,各进程同时使用资源,就不会存在死锁问题
      • 2、保持和等待———各进程会保持自己的资源,并且等待其他进程释放更多的资源给自己
      • 3、不剥夺———系统不会去将分配给某个进程的资源进行剥夺而分配给其他进程
      • 4、环路等待———指进程之间的资源等待是一个闭环路(A——>B——>C——>A)
    • 解决死锁的方案
      • 1、死锁的预防(考察不多)———通过打破死锁的四大条件而防止死锁问题的出现
        • 打破互斥———让所有进程同时共享使用资源
        • 打破保持和等待———某个进程得不到资源的时候将自己的资源先释放出去
        • 打破不剥夺———剥夺其他进程的资源
      • 2、死锁的避免(比较重要)———通过有序资源分配法银行家算法
        • 有序资源分配法———依次对进程进行资源的分配,但是资源的利用率比较
        • 银行家算法———基本思想(采用银行放贷的思路进行资源分配)
    • 银行家算法
      • 基本思路———采用银行放贷的思路进行资源分配
      • 分配资源原则
        • 1、当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程
        • 2、进程可以分期请求资源,但请求的总数不能超过最大需求量 -3、当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使系统在有限的时间里得到资源
      • 示例 img_6_3_2_10.png img_6_3_2_11.png
        • 解题思路
          • 1、先计算系统所剩余的各类资源数=系统各类资源可用总数-各类资源已分配数
          • 2、计算每个进程还需要的各类资源数=最大需求量-已分配资源数
          • 3、尝试执行———计算现有+已分配,看进程是否可以执行,得到结果

3. 存储管理

1. 分区存储组织

img_6_3_3_1.png

  • 说明
    • 依据某种算法给某个作业在指定空白块分配内存空间的方案
  • 相关算法
    • 首次适应法———按照内存地址,顺序查找首次可分配的地方进行内存分配
    • 最佳适应法———将空白区域按照大小顺序连接成一个链,从小到大顺序查找首次可分配的地方进行内存分配(保证系统尽可能保留大空白区,但是随着时间的推移,系统中不好利用的零碎空间很多)
    • 最差适应法———将空白区域按照大小顺序连接成一个链,从大到小顺序查找首次可分配的地方进行内存分配(解决最佳适应法导致的缺陷)
    • 循环首次适应法————按照内存地址,将空白区域连接成一个环状,然后采用首次适应法进行内存分配

2. 段页式存储

1. 页式存储组织———考察点(逻辑地址和物理地址的转化\基本特点\运作方式)

img_6_3_3_2.png

  • 特点
    • 解决内存分区化管理时,内存中划分一个用户区域(供用户程序调入内存时使用),这种管理方式往往是将用户程序整体调入到内存中.假设内存空间4G,用户空间2G,此时如果运行2G以上的程序是不可能的,甚至1G都可能不能够运行,因为内存运行时的空间可能是被打碎的,虽然空闲的剩余空间之和比运行所需的空间大,但是不能运行,因为无法一次性装入.
  • 做法
    • 1、将用户程序分成大小相同(4k)的块,每个块称作一个页
    • 2、将内存中的存储区也分成大小相同(4k)的块
    • 3、调入用户程序到内存中运行的时候,不再是一次性的整个调入,而是采取需要运行那些块的时候,调用对应的块
    • 4、此时就需要一个页表记录用户程序页与内存存储区块的映射关系
    • 5、此时就能够解决小内存处理大程序的问题
  • 考点分析
    • 逻辑地址和物理地址的转化
      • 逻辑地址和物理地址的页内地址相同
      • 页号不一样,逻辑地址的页号对应物理地址的块号
      • 物理块号又称为页帧号
  • 例题 img_6_2_3_3.png
例题解析
- 1、物理地址计算分析过程
    - 1) `页面大小为4k`可知其为二进制的`2^12`,说明一个页的`页内地址为12`位,`高于`12位的部分为`页号`
    - 2) 16进制的每一位对应`4位二进制位`,所以逻辑地址5A29H中的`A29H`对应`页内地址`,`5`对应`页号`
    - 3) 通过查表可知页号为5对应的`物理块号(也叫页帧号)为6`
    - 4) `页帧号`拼接`页内地址`得到`物理地址为6A29H`
- 2、淘汰页号分析过程
    - 1) 状态位代表`是否在内存中`,页面淘汰只能淘汰`在内存中`的(即状态位为`1`的),所以只能从`页号为0/1/2`中淘汰一位
    - 2) 访问位代表`是否刚被访问过`,刚被访问过的不能被淘汰(即访问位为`0`的),所以只能淘汰`页号为1`

2. 段式存储组织———考察点(基本特点\运作基本方式)

img_6_3_3_4.png

  • 组成
    • 段号
    • 段内地址
  • 特点
    • 分隔方式与页式存储不同(按照逻辑结构划分,段的大小可以不相同————例如:主函数为一个段,第一个函数为一个段,从而便于共享)
  • 段表组成
    • 段号
    • 段长————描述该段的长度
    • 基址————即该段从地址的那个地址开始

3. 段页式存储组织———考察点(基本特点\运作基本方式)

img_6_3_3_5.png

  • 特点
    • 结合段式存储和页式存储的特点
  • 快表
    • 是一块小容量的相联存储器(Associative Memory),由高速缓存器(Cache)组成,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁少数活动页面的页号
    • 慢表———相对来说,一般把块表段表和页表放到内存中称之为慢表

3. 页面置换算法

1. 页面置换算法说明

  • 广泛应用于分层的存储体系中.例如在页式存储中,一个程序有100个页,但是内存可以给其分配的页十分有限(比如只有3个页),就不可避免的在程序运行中要把一些不用的页调出去,把一些现阶段要用到的页调进来,要依据一定的算法来进行识别那些页淘汰是比较好的,此时就涉及到页面的淘汰算法

2. 常见算法

    1. 最优(Optimal,OPT)算法(实际应用中没有办法之间应用)
    • 特点
      • 一种理论层面的算法(在整个事情发生之后———已经知道访问的序列的样子,然后根据该序列分析和计算出什么时间点淘汰什么样的页面,能够取得最高的效率性能,将其作为最优算法)
      • 针对每一个不同的实际场景,最优算法是不一样的,没有普遍的规律,而且在实际的执行过程中,没有办法从整体上面了解到要访问的页面顺序的样子
    • 应用
      • 计算出最优的,将其他的算法方案和最优方案进行对比,看差距还有多大
    1. 随机(RAND)算法(没有可讲点)
    • 特点
      • 随机的淘汰一个,性能不稳定
    1. 先进先出(FIFO)算法(一般考试考点)
    • 特点
      • 有可能产生“抖动”.例如———432143543215序列,用3个页面,比4个缺页要少
      • 先进入的在缺页的时候会被先淘汰掉
    • 抖动说明
      • 通俗语———分配给更多的资源,希望把这个事情做的更好一些,结果分配了更多的资源,不但没有起到正面的效果,反而让效率降低了
      • 页面置换算法中————在内存中分配三个页面.假设缺页率为9次,当分配4个页面,但是此时的缺页率却达到了10次,这就是抖动的现象
      • 抖动图示 img_6_3_3_6.png
    1. 最近最少使用(LRU)算法(一般考试考点)
    • 特点
    • 不会“抖动”,分配的资源越多,表现的性能越好
    • 根据使用情况,刚刚被访问过的,是不会被淘汰(因为存在局部性原理,刚刚被访问的可能再次被访问到)
    • 对比与先进先出的区别 img_6_3_3_7.png

3、练习题

img_6_3_3_8.png

  • 分析过程
    • 系统中没有快表———每读一次程序的块,需要先在内存上查一下表,才能读取相应的内存块,所以每一个块需要进行2次内存的访问,总共6个块,需要访问12次内存
    • 默认指令无论跨度为多少块,都会一次性调入———所以swap A,B虽然跨了2个页,但是只会产生1次缺页中断,而操作数A和B都分别跨了2个页,每个会产生2次缺页中断,所以将产生5次缺页中断

4. 文件管理

1. 索引文件

  • 文件结构 img_6_3_4_1.png
    • 基本情况(假设一个物理盘块大小为4KB)
      • 1、一般标准的有13个索引结点(存地址,地址对应盘块),编号从0~12,考虑到文件本身容量的扩展问题分为直接索引、一级间接索引、二级间接索引、三级间接索引
      • 2、直接索引———前10个索引节点地址直接对应物理盘块,物理盘块存了索引文件的内容,所以如图前10个容量为10*4KB=40KB
      • 3、一级间接索引———第11个索引节点指向的物理盘块存储的是物理盘块地址,那么一个地址对应一个物理盘块.每一个地址假设为4个KB,所以一个物理盘块可以存4KB/4B=1024个地址,所以第11个索引节点的容量为1024*4KB=4MB
      • 4、二级间接索引———第12个索引节点指向的物理盘块存储的是物理盘块地址,物理盘块地址对应的下一级还是对应物理盘块地址,一个地址对应一个物理盘块.那么一个地址对应一个物理盘块.每一个地址假设为4个KB,所以一个物理盘块可以存4KB/4B=1024个地址,所以第12个索引节点的容量为1024*1024*4KB=4GB
      • 5、...以此类推...,所以第13个索引节点的容量为1024*1024*1024*4KB=4TB
      • 6、间接的级别越多,访问的效率也越低
  • 示例题 img_6_3_4_2.png
例题分析
- 0、逻辑块号`从0开始`
- 1、每个地址项大小为4字节,每个磁盘索引块大小为1KB,所以一个地址块可以存储`1kB/4B=256`个地址,所以逻辑块号5和261对应的物理块号分别为`58和187`
- 2、101号物理块对应`i-addr[7]`存放的是`二级地址索引表`

2. 文件和树形目录结构(考察点———相对路径和绝对路径的概念)

img_6_3_4_3.png

3. 空闲存储空间的管理

img_6_3_4_4.png

  • 空闲区表法———可以用一个表来记录那些地方是空闲的,以便将其管理起来
  • 空闲链表法———将这些空闲区链接起来,链接成一条链表,然后需要进行空间分配的时候,从该条链表上划出相应的空间进行使用
  • 位示图法(重点)———高频考察
  • 成组链接法———分组也分链的方式

4. 位示图

  • 说明 在一个位示图,1表达的区域代表已经被占用,0表达的区域还是空闲的,将整个存储空间分成很多的物理块,就能直观的表达出那些物理块被占用,那些物理块是空闲的
  • 例题 img_6_3_4_5.png img_6_3_4_6.png
例题分析
- 1、物理块号`从0开始`,所以`4195号物理块``第4195+1=4196个`物理块
- 2、所以`4195号物理块`在位示图的第`(4195+1)/32=131.125·=132`个字中描述(即填满前131个字,第132个字开始)
- 3、`占用`该物理块,肯定是`置“1”`
- 4、因为物理块号`从0开始`,所以第131字的最后一个物理块号是`131*32-1=4192-1=4191`
- 5、因为`位置从0开始`,所以第132字的`第0位置位物理块号为4192`,...,从而得知`4195物理块号``第3位置`

5、设备管理———数据传输控制方式

img_6_3_4_7.png

  • 说明
    • 1、指的是解决内存与外设之间的数据的传输控制方式问题的方式
  • 问题解决方案
    • 1、程序控制方案,也被称为程序查询方式
      • 1)最为低级的,也是CPU介入最多的一种机制
      • 2)外设处于一种十分被动的方式,不会主动反馈信息,而是由CPU发出相应的查询指令
    • 2、程序中断方案
      • 1)任务完成会发送中断命令,系统进行下一步处理,效率会比程序控制方案更好一些
    • 3、DMA方案,也称之为直接存取控制方式
      • 1)会有专门的DMA控制器,外设和内存之间的数据交换,过程中由该控制器管控,CPU只需要开始的时候做一些介入,完成后由CPU接手
    • 4、通道(一般用专用的计算机解决传输控制问题,不在考察的范围之内)
    • 5、输入输出处理机(一般用专用的计算机解决传输控制问题,不在考察的范围之内)

6. 虚设备与SPOOLING技术(需要了解其核心思想)

img_6_3_4_8.png

  • 核心———在磁盘上开启了缓冲区,将要输出的或输入的数据先进行缓存,从而解决外设的低速和内部系统的高效之间的差异

5. 微内核操作系统

img_6_3_5_1.png

  • 考点
    • 1、微内核与单体内核相比之下的优缺点
    • 2、分为用户态和核心态——那些部分在核心态,那些部分在用户态,请求的情况