【系统分析师之路】第十四章 操作系统记忆敲出

【系统分析师之路】第十四章 操作系统记忆敲出

1. 操作系统的基本概念

  • 操作系统的五大组成部分:进程管理,存储管理,设备管理,文件管理和作业管理五个部分所组成。
    其中进程管理和存储管理是最为重要的。操作系统章节的考点也是比较聚焦。
    进程管理也叫做处理器管理,它主要是用来管理进程的。它可以分为进程的三态图和五态图两种。
    进程管理:进程状态迁移,PV操作,前趋图、银行家算法
    存储管理:段页式存储,页面置换算法(先进先出,最近未使用等)
    文件管理:一级索引二级索引,位示图,绝对路径与相对路径
    设备管理:数据传输控制方式

2. 作业管理的概念

  • 作业管理:作业由程序、数据和作业说明书组成。在批处理系统中,作业是占据内存的基本单位。作业四种状态:提交,后备,执行,完成。
  1. 提交状态。作业由输入设备进入外存储器(也称输入井)的过程称为提交状态。 处于提交状态的作业,其信息正在进入系统。
  2. 后备状态。当作业的全部信息进入外存后,系统就为该作业建立一个作业控制块 (Job Control Block, JCB)。系统通过 JCB 感知作业的存在。 JCB 主要内容包括作业名、作业状态、资源要求、作业控制方式、作业类型及作业优先权等。
  3. 执行状态。一个后备作业被作业调度程序选中而分配了必要的资源并进入了内存, 作业调度程序同时为其建立了相应的进程后,该作业就由后备状态变成了执行状态。
  4. 完成状态。当作业正常运行结束,它所占用的资源尚未全部被系统回收时的状态为完成状态。
  • 个人理解作业管理就是对进程,存储,文件,设备的一个综合性的管理,一个作业要执行离不开资源的获取,这里的资源包括了CPU时间片的资源(进程管理),外部IO设备(设备管理),把用户程序从外存载入到内存,和用完写回外存(文件索引,存储管理)

3. 进程管理中的状态图

  • 三态图:就绪,运行,阻塞三种状态;就绪的时候等待时间片从而运行,而阻塞是说明进程没有被喂饱资源,有了资源就到就绪态。
  • 五态图:除了运行态以外,阻塞态分为了静止阻塞和活跃阻塞,而就绪态也被分为了静止就绪和活跃就绪,这样就一共有了五个状态。

4. 信号量与互斥同步

  • 信号量就是一个特殊的全局变量,使用这个特殊的全局变量就可以实现进程之间的同步与互斥,完成PV操作。
    PV操作就是应用在操作系统当中,用来完成进程之间同步和互斥的。同步和互斥看名字像是一对反义词,其实在操作系统的进程管理当中互斥与同步只是看问题的角度不太一样。聚焦缩小地看进程管理,进程A和进程B在同一时间只有一个。

5. PV操作

  • P操作是获取资源的操作,它执行一次会对临界值实施自减操作,S=S-1;它做是否大于零的判断,当S小于0时把当前进程放入阻塞队列。;
  • V操作是释放资源的操作,它执行一次会对临界值实施自增操作,S=S+1;它做是否大于等于零的判断,S小于等于零时,从阻塞队列唤醒一个进程。
  • PV操作最经典的应用模式就是生产者消费者模式和单代号网络图。
  • 其实在项目管理中也可以用到PV操作的思想。在以问题驱动的开发团队当中,测试团队相当于生产者,当发现有Bug的时候,做成一个Task,然后扔到项目Task的停车场中,而开发团队相当于消费者,他们要定期去停车场取Task,然后对应Bug后关闭Task;
  • 如果测试团队中人数远远大于开发团队,那么生产量会上升,但是开发团队却无法及时地消费完停车场中的Task,造成项目整体进度的落后;反之当开发团队中的人员远远大于测试团队中的人员,测试一发现Bug并放入停车场后马上就有开发团队来消费了。还会有很多维护的开发人员在等待状态,没有Bug票只能让他们空闲了。
  • 以上的这个比方很好的解释了生产者和消费者之间的关系,但没有很好的说明互斥与同步之间的关系。P操作中一旦获取资源后信号量小于0的话,那么进程就应该被阻塞了,只有等到V操作并且释放资源之后才可以再一次被执行。
  • 换一个比方来说明同步与互斥之间的竞争关系。做嵌入式开发需要试验机来完成,咱们开发团队有6个人,而试验机只有两台。这个时候6个人就竞争使用试验机了。如何在这种竞争关系中去推进项目呢,首先团队成员A要使用试验机,他执行P操作之后试验机资源变为了1;接下来团队成员B也要用试验机了,他也执行P操作之后资源变为了0,于是团队成员C也去申请试验机,但资源数量已经为0,变为-1后,团队成员C就只能咬牙切齿地等待A和B他们释放资源了,不然就需要无尽的等待。这个时候要是A同学用完了机器,S=S+1,然后计算把-1变为了0,于是C才等到了苦尽甘来的时候,这个时候S变为了0,那么就唤醒了C同学来用试验机。只有小于等于0时,才会去唤醒。
  • 以上就是PV操作运用的原理。单代号网络图则更加简单,P操作因为有阻塞功能,箭头指向P操作,全部前结点只要动作完成后执行V操作就可以激活紧后活动了。

6. 死锁及其银行家算法

  • 死锁可以预防也可以避免。这个和项目风险管理中的风险极其相似,风险也有风险预防和风险避免两块。风险预防就是采用各种对称不让风险发生,当风险发生的时候去避免风险。
  • 死锁如何预防?就是打破造成死锁的四个因素:互斥,不剥夺,请求和保持,环路等待。
  • 死锁除了预防还可以采用银行家算法去避免,也可以采用有序资源分配法去避免,但一般来说银行家算法最为常用。
  1. 环路等待:这个最好理解,A的执行需要等待B的某资源,而B的执行又需要等待C释放某资源,如此形成一个环状。
    破解方法:使用顺序资源分配法。给每个资源编号,进程必须根据编号从小到大申请资源。
  2. 不剥夺:各个进程获得资源后,除非进程执行完,不然就占着资源不放。
    破解方法:一个进程已占有的资源会被暂时释放,或者说是被剥夺了,或从而破坏了不可剥夺条件
  3. 互斥:某个资源在某段时间片只能供一个进程来使用。
    破解方法: 如果允许系统资源都能共享使用,则系统不会进入死锁状态。
  4. 请求和保持:保持已经获得的资源不放,请求当前无法获得的资源。
    破解方法:釆用预先静态分配方法,即进程在运行前一次申请完它所需要的全部资源,在它的资源未满足前,不把它投入运行。一旦投入运行后,这些资源就一直归它所有,也不再提出其他资源请求,这样就可以保证系统不会发生死锁。
  • 银行家算法就是仿效银行房贷的一个场景作为实例。银行要给你房贷款之前,它要先看看你的征信系统,看看你有没有还款的能力之后才可以放款(给资源),如果你的还款能力最强,银行优先给你放款,放款以后你就可以利用贷款(资源)来完成自己的事情,利用完贷款后要连本带息的还给银行,银行家回款以后再去判断下一个该借给谁。银行家算法把银行家唯利是图的一面展现的淋漓尽致。

7. 存储管理之页式存储

  • 运行一个大型的游戏,需要运行使用的内存是15G,而内存只有10个G可供载入游戏。如果在使用内存之前不做任何处理的话,那么这个游戏便无法玩了。当然虽然游戏有15个G,但是为了运行它并不是所有的时间都有必要将所有在外存上的内容都放入内存,而是需要用到外存的哪部分,就放入那部分到内存。
  • 页式存储就是将从外存载入内存的内容分成了大小相同的若干块,游戏在运行之前,并不是所有的内容都放入内存,而是将现在程序不得不使用的若干小块载入到内存中。
  • 相同大小的块,做一个很形象的比喻,它很像集装箱,我们要运输的货物,先放入到大小都相同的集装箱里面,然后再放到邮轮上。
  • 你可能会问把什么东西放到了哪个集装箱不是很清楚,为什么不拿一个表来存储呢?这样,就诞生了页表,页表就是用来记录外存逻辑地址块对应的是放在了内存中的物理地址,记录了外存和内存之间的映射关系。
  • 缺点:页式存储因为都是整块整块的载入载出内存,所以它的缺陷就是容易产生抖动现象。
  • 优点:内存空间利用率很高。分配简单。

8. 页式存储的页表

  • 页表中记录了外存逻辑地址和内存物理地址之间的映射情况的一张表,所以页表中就有页号和页帧号,这个信息是必须的;除了这两个段之外,还记录了状态位,访问位,修改位。
  • 在逻辑地址和物理地址转换的时候,需要特别注意的就是页内地址是不会变化的,只要页号和页帧号之间转化一下就好。
  1. 修改位记录本块中的页内地址是否已经被修改过,1表示已经修改过,0表示尚未修改过;
  2. 状态位是用来记录该块在不在内存中,1表示再内存中,0表示已经不在内存中了
  3. 访问位用来记录最近是否被访问过,1表示被访问过,0表示还没有被访问过
  • 页表可以放在Cache中,这个时候它就是快表,页表也可以放在内存中,这个时候它就是慢表,这个就让我联想到了橘生淮南则为橘这个典故。

9. 存储管理之段式存储

  • 页式存储强调化整为零的使用存储,而段式则不同它的每一块的大小都是不一样的。
  • 雷同于页表,这里因为是段式存储,所以就是段表。在段表中与页表中页帧号对应的是:基地址和段长两个字段。
  • 段表便于多道程序共享内存的使用,但是段式存储有一个很大的缺陷,大大小小杂乱无章地存入存出内存,碎片会越来越多,内存利用率不高。

10. 段页式存储管理

  • 综合了段式存储和页式存储的特点,是一个中庸化的技术(思想和内存-Cache中的组相联技术与之对应)。段页式强掉先分段再分页。
  • 缺点:系统复杂性和系统开销会增大

11. 位示图

  • 我们日常做飞机选座位也好,看电影选位置也好,都使用到了位示图。在位示图中1表示已经被使用,0表示还未被使用;非常的客观易懂。在操作系统的文件管理中,他记录的是磁盘的使用情况。占用中为1,空闲态为0。
  • 在具体的计算中要明白物理盘块都是从下标0开始,bit位也是从下标0开始,而只有字一般是从1开始的。

12. 页面的置换算法

  1. 最优算法:除非知道每个块先后的使用顺序,不然这算法就派不上用。
  2. 随机算法:把从外存换入内存的页这个算法决定权交给上天决定。和我们使用骰子决定四选一选择题是没有什么区别的。
  3. 先进先出:就是使用到了数据结构中的队列的构造,这种算法容易引起抖动。
  4. 最近最少使用LRU:从字面上就可以理解这个算法做什么事情,利用到了局部性原理,可以有效避免抖动。
  5. 最近经常使用LFU算法:需要用到统计的数据,记录数据历史访问的频率,过去被访问次数越多,将来被访问的概率也将越大。这是该算法的一个思想。

13. 文件系统的绝对路径和相对路径

  • 拨打电话时使用的国家号086,区号0571,再加上自己的电话号码,就是绝对路径;而我目前正在中国杭州,那么不使用国号086和区号0571,直接就可以拨打电话了,这就是使用到了相对路径的缘故。
  • 相对路径因为简短所以还被广泛应用在编码时文件IO的时候。

14. 文件管理之文件索引结构

  • 文件索引结构很像C语言中的指针,指针可以指向地址,也可以指向指针,指针的指针也还有可能指向指针。
    一个指针直接指向一个物理地址的话,我们就认为它是直接索引。
    一个指针直接指向另一个指针,而另一个指针指向一个物理地址,我们就认为它是一级索引结构。
    一个指针直接指向另一个指针,而另一个指针再指向一个指针,最后的这个指针才指向物理地址,我们就说它是二级索引结构。
    同理还有三级索引结构。直接索引效率最高,但是存的内容少,而间接索引技术的使用,容量扩大了,当然因为存在指针的指针等情况,所以效率比如直接索引。这就是效率和容量平衡的产物。
  • 在实际的计算中,涉及到逻辑块号到物理块号的变换。写在索引节点上的数字是物理块号,逻辑块号是逻辑上连续的位置偏移。
  • 逻辑地址连续的块在物理地址上可以是不连续的。尤其是在使用间接索引的时候。指针的指针肯定不是物理地址,如果是一级间接索引,物理地址至少是指针指向的地址。
  • 磁盘数据块如果为1KB,且每个地址项的大小为4字节,那么一个数据块中可以存放1024/4=256个索引值,这是求间接索引中索引个数的方法。

15. 嵌入式操作系统的特点有

  1. 实时性强:及时处理和响应的能力
  2. 可裁剪,可配置:只保留需要使用的操作系统的功能,不需要的直接裁剪来节约空间
  3. 微型化:要小要小。有点微内核的味道
  4. 代码质量高:嵌入式系统很难修复,要是动不动就死锁的话,想必体验感会很差
  5. 硬件与软件结合度高:硬件和软件结合度高,所以才叫嵌入式操作系统

16.设备管理-数据传输的方式

  • 程序控制查询方式:效率最低下,因为它需要CPU的介入,影响CPU的利用率,IO能力也有限。
  • 程序中断方式:CPU被解放出来,键盘等数据量不是很大的设备使用这个方式。实时性要求较高的场景会使用到程序中断的方式。
  • DMA方式:适用于数据量大的场景比如硬盘的数据交换。它实现了主存和外设之间的高速数据交换。
  • 通道方式,IO处理器在外设和主存之间有着更高效率的数据交换。

17. 微内核的概念

  • 微内核就是对操作系统进行瘦身,只保留最为基本的功能。众所周知,普通的操作系统内核包括了进程,存储,设备,文件,任务管理五个部分,而在微内核操作系统中,已对其进行了裁剪,文件系统,通信,外设管理都放到操作系统之外去处理了。
  • 内核分为了用户态和核心态两个状态。因为在微内核中,核心态功能少了,很多原本属于操作系统的操作放到了用户态去实施了。
  • 微内核系统的安全性,可靠性得到了提升。微内核操作系统在分布式中有着广泛的应用,它也成为了微内核操作系统的最大优势。
  • 当然微内核操作系统中,一个任务需要不断的在用户态和核心态直接切换来完成,频繁地切换效率自然不会很高。

18. 假脱机技术SPOOLing

  • 打印机属于外部设备,它是独占设备,所以是无法在多个任务之间并行使用的,也就是说在同一时间内,只有一个任务可以占用它。那么如果多个任务多个用户之间如何实现打印机的共享呢?答案就是假脱机技术SPOOLing。假脱机技术在主存和外设之间设置了一个缓存区,这个缓冲区实现了打印任务的先进先出,实现了当前只有一个任务在打印,而其他的打印请求在排队。这个缓存放在磁盘上面。
  • SPOOLing技术将一台独享打印机改造为可供多个用户共享的打印机。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章