操作系统:一个老汉的无声告白

c/c++

浏览数:173

2019-6-27

老夫生于上世纪五十年代,作为八零后的大叔,九零后的老伯,同时也是你们动辄就要重装的操作系统,我的学名是“计算机管理控制程序”,英译“operating system”,小老弟们常喊我“OS”。虽说是老弟,目的却都不怎么单纯,大部分人只想玩我,剩下一小撮人却钟爱探索我的身体,他们沉迷于当下,但真正愿意了解我过去的所剩无几。今儿个趁机会给你们介绍一下我的过去。  

人工操作

在我幼年时期,虽然跟我打交道的绝大部分都是精英程序员,但做的事还是很基础的,想执行一段程序必须先把代码写到卡片上,塞到我身体里,打开开关,等我对数据进行计算,计算完毕后再把卡片卸下来,这才把控制权交给下一个人,这就叫做“人工操作方式”。但是很明显,我的处理能力是有目共睹的,本来几秒钟就能处理完的作业,偏偏人工操作就等了几分钟,不仅我心急,后面排队的人也很容易跟他干架,可如果把浪费的时间用来处理其它作业,效率一定会蹭蹭的往上涨。  

单道批处理系统

为了解决等待人工操作的问题,绝顶聪明的我想到了一个好方法,首先准备一个磁带作为存储设备,程序员将作业聚在一起塞给我,然后我成批的将作业读入磁带,这时候程序员们就可以走开做别的事了。showtime!接下来只需依次将作业装入内存,计算数据并输出结果即可。因我引以为傲的处理能力自然而然的就省下了等待人工操作的时间。   虽然有了批量处理的能力,但还是有很大的缺陷,因为我一次只能执行一个作业,所以作业执行时是独占我所有资源的。这意味着当我进行I/O时,我的CPU是无事可做的,非常浪费资源,如果让空闲的CPU去处理其它作业,理论上就能做到同时处理两个作业了。  

多道批处理系统

说干就干,接下来我进行了一些改造,目的就是“谁闲给谁活干”——当一个作业在使用CPU时,另一个作业可以进行I/O,反之亦然。这样不仅实现了多个作业的同时处理,还提高了老夫的资源利用率和吞吐能力。与此同时,我不再严格按照顺序装载作业,而是由我的作业调度程序负责分配作业的装载,并由进程调度程序分配CPU,这样权责分明,更有利于日后调度策略的优化和调整。   现在的作业已经不同以往,不再独占全机,但它们却面临着共享CPU、内存、设备等问题。有共享就会有资源归属权的冲突,既然可预见到冲突就得提前预防,怎么预防呢?这就需要有专门的模块来管理规避由共享产生的冲突问题,比如CPU管理、内存管理、设备管理等,这些模块是我的灵魂,也是以后主要围绕的发展方向。   虽然比起单道时期的我性能得到极大提升,但人嘛毕竟是不知足的,机器也一样。我的平均周转时间还有很大的改善空间,周转时间呢,是指从作业提交给系统到执行完毕所花费的时间,而平均周转时间是指“所有作业的时间总和与作业总数的比值”,平均周转时间越小意味着性能越高。减少该时间最有效的方式就是调整调度策略,让所有作业尽可能快的执行完毕,调度策略相对复杂,以后的章节再给大家讲解。除平均周转时间外,与用户交互能力的提升也是我的重中之重,现在的我只能同时与一个程序员进行交流,但这是远远不够的,要和人类长期打交道,他们的满意度才是我迈向成功的最高准则。  

分时操作系统

为解决人类强烈的交互欲望,努力修炼的我终于练就了一套绝世武功——时间片轮转法。这是一套极强的掌法,用户可以通过若干个终端连接到我这里,我按一定时间间隔轮流的为各个终端服务,由于我极快的处理速度,用户完全无法感知我做了什么手脚,以至于他们认为我只为他们本人服务,而现在每天打游戏的你仍然在走着我的套路/滑稽,正所谓“天下武功唯快不破”,而这种戏弄你们的感觉让我奇爽无比。  

实时操作系统

如果说分时的我一定要有缺陷的话,那么在某些场景下公平的分时就是我的缺陷。刚才讲到分时是用时间片轮转法轮流的为每个用户服务,虽能诓得了小白,但在高精尖领域不太适用,比如航空航天、海底探测,丝毫的处理延迟可能会导致无法挽回的后果,想要解决延迟,时间片就不能过于均衡,优先级高的要先执行,但总执行优先级高的又会导致低权重的一直得不到执行,或是两个同样高优先级的作业因互抢资源发生死锁,听起来很复杂吧,但这就是调度策略的艺术之处。不过我一时半会也解释不清楚,要不就先到这里吧,我要关机了,以下是我为你们整理的思维导图,拜拜。

作者:平也