很久很久以前,有一台神奇的机器···

商务办公
很久很久以前,有一台机器,体型巨大,每秒钟可以进行几千次的加法运算,名震一时,人类给它取了个名字:计算机。

[[398165]]

计算机

很久很久以前,有一台机器,体型巨大,每秒钟可以进行几千次的加法运算,名震一时,人类给它取了个名字:计算机。

除了加法,它还能计算平方、立方、正弦、余弦,比人类的大脑算得快多了。

许多程序慕名而来,想在它上面运行一下,体会这飞一般的感觉。

“来来来,排好队,一个一个来”,计算机的管理员说到。

众程序挨个排好队,等待管理员传唤。

执行完一个,管理员再将其取出,换上下一个开始执行。

久而久之,程序们纷纷抱怨:排队十分钟,执行三秒钟。人类管理员太慢了,时间都用在排队上了,能不能让计算机自动完成程序切换,不要手动切换?

人工操作的速度比起计算机实在是慢太多了,人机矛盾日益凸显,人类决定对机器重新进行设计,并且开发了一个控制程序,在它的指挥下,可以批量执行程序,自动实现切换,不用再需要人工介入了,效率提高了不少。

多道程序处理

慕名而来的程序越来越多了,等待执行的队伍排的越来越长。

有些程序等的不耐烦了,询问控制程序:“大哥,你看前面那家伙在做输入输出,CPU给空出来了,一时半会儿用不上,这不是浪费吗,要不叫下一个上去执行吧”

控制程序皱着眉头说到:“那怎么行,前面程序执行的数据都在内存里放着了,再放程序进去,要是弄坏了谁负责?再说CPU只有一个,前面的程序忙完输入输出回来了又该如何处理?”

大家一时语塞,谁也给不出主意,纷纷叹气,只好作罢,继续等待。

不过聪明的人类倒是发现了这问题:让一个程序独占计算机确实浪费资源,执行输入输出的时候,CPU就空着了,执行计算操作的时候,输入输出设备又闲着了,总有一个闲着。

于是人类又重新设计了计算机,并开发了新版的控制程序,这一次,允许多个程序同时进入计算机执行了。

如果程序A执行输入输出,就把CPU空出来让给另一个程序B执行,一会儿B再执行输入输出,再把CPU分给A执行,彼此交替,这样一来就不会浪费了!

时间分片

不过没多久,又出现了新的问题。

这一天,其他程序都在排队等待控制程序翻牌子,可左等右等也不见传唤,众程序急了,质问控制程序,控制程序大倒苦水:“前面那个家伙写了个死循环,死活结束不了啊!”

听他这么一说,众程序都怒了。

“怎么能这样,这也太自私了”

“你这控制程序也不管管,要你有何用?”

“赶紧想办法啊!”

“我也没办法,他不执行输入输出,我也拿不到CPU的控制权,拿他没有办法啊”,控制程序叹气说到。

众程序七嘴八舌,吵的是不可开交。

敏感的人类又一次发现了这个问题,好一通研究,搞了一个叫“中断”的技术出来:可以给CPU发送中断信号,CPU收到信号后,就得停下手头的工作,转而执行控制程序处理中断信号,这样控制程序就有办法获得控制权了!

为了能够让控制程序及时获得控制权,人类搞了一个中断源,周期性的给CPU发送中断信号,并把这叫做时钟中断。

升级后的控制程序又上岗开始工作了,众程序闻风而来。

“大哥,听说你又升级了,这一次改了啥,可以搞定死循环的程序吗?”,一个程序问道。

“大家排好队,听好了,现在按照时间片来划分了,每个程序一次只有一小段时间,时间一用完我就得请他出来,让别的程序来了”

“那要是时间到了,我还没执行完可咋办呢?”

“大家不用担心,都是轮着来的,等下一轮又有机会执行了”,控制程序解释道。

“我们这么多程序,轮到下一轮,那不得等好久”

“这台计算机从里到外都升级过了,别看它个头变小了,里面都是大规模集成电路了,执行速度可比之前的大块头快了不少,每秒能执行几十万次运算呢~你们还没感觉到就转了一圈回来了”

众程序听后一片哗然,“几十万,我的乖乖!这也太快了,快让我们体验一下”

说完,大家都摩拳擦掌排好队,准备登上这台升级后的计算机运行。

果不其然,这升级后的计算机跑起来那叫一个快,有了时钟中断,控制程序总能按时获得CPU的控制权,在背后默默控制着程序们的运行,众程序丝毫感觉不到自己曾经停止过。

状态

不过,计算机速度虽然变快了,但慕名而来的程序也更多了,这些程序的功能也越来越复杂。

渐渐的,程序们不再满足于现状,开始出现了新的问题。

有些程序在sleep,有些程序在同步等待,白白浪费了时间片,大伙向控制程序提出了抗议,控制程序却说对待所有程序要一视同仁,要讲公平,大伙当面不敢说,背后却骂他不作为。

控制程序把这个问题反馈给了人类,聪明的工程师又开始琢磨:所有程序都排成一个队来轮转确实有些欠妥,得给这些程序划分成不同的状态,只有准备就绪的程序才有资格执行。

人类一口气搞了好些个任务状态出来,创建、就绪、运行、阻塞、终止···

控制程序一下变得复杂起来,原来只要挨个传唤执行就行,现在还得记录他们的状态,选择合适状态的程序来运行,工作量增加了不少。

优先级

本以为这么一改,大家就会满意了,没想到有几个老油条私下找到控制程序:“老哥,咱们几个程序对实时性要求比较高,能不能给咱们整个VIP队列,别跟他们一起排,优先执行我们?”

控制程序一听脸都绿了,断然拒绝。

其中有一个家伙说到:“我们几个程序可是非常重要的,要是延误了时间,你能担待的起吗?”

没办法,控制程序只能再次反馈给人类。工程师一想,倒也是,所有程序都是同样的优先级,确实太草率了。

工程师再一次升级了控制程序,这一次,不仅划分了任务状态,还设定了不同的优先级,划分了不同的队伍,让程序们去各自优先级所在的队伍排队,优先执行高优先级的程序。

不仅如此,如果有高优先级的程序出现,即使低优先级程序的时间片还没用完,也会被剥夺执行机会,工程师把这叫做抢占。

不过,这一次的改动,控制程序把大家伙都蒙在了鼓里,要是知道他们还被划分了三六九等,估计得闹翻天。

经过这一轮改动,大家总算过了一段清静日子。

多核时代

硬件技术发展的太快了,有一天,人类激动的告诉控制程序:现在CPU里面有多个核心了,可以真正同时执行多个程序了,我们决定再次对你升级!

可对于控制程序来说,这可不是什么好消息,本来一个核的程序调度管理已经让他够忙活的了,现在来了多个核,这调度管理任务就更复杂了。原来只是多个优先级的队列,现在每个核都得搞一套,真是想想都头大了。

人类开始对控制程序大动手术,把它变得越来越复杂,功能也越来越强大。

最后,还给他取了一个新的名字:操作系统。

本文转载自微信公众号「编程技术宇宙」,可以通过以下二维码关注。转载本文请联系编程技术宇宙公众号。

 

责任编辑:武晓燕 来源: 编程技术宇宙
相关推荐

2016-12-20 16:21:18

大数据数据分析

2019-11-07 10:37:36

CookieSessionToken

2023-01-04 08:31:10

转转测试环境

2017-08-21 21:00:33

Java长图文

2012-12-17 14:54:55

算法缓存Java

2015-11-04 10:30:06

前端文艺范程序员

2011-03-22 15:05:45

IBMWatson智慧

2014-07-30 09:40:30

Android

2015-12-28 10:57:18

2020-05-20 11:17:29

缓存服务器地址

2016-07-12 10:40:35

服务器

2013-07-08 15:16:25

2010-12-30 12:14:40

2020-06-08 08:20:11

Redis高可用集群

2019-03-21 12:40:33

华为云

2022-04-08 07:52:17

CSS面试题HTML

2009-09-22 18:26:14

运行多个JBoss

2018-09-27 10:47:45

机房计算机DNS

2013-05-30 09:15:16

微软团队成功秘诀微软

2010-11-22 09:29:31

宕机检测分布式
点赞
收藏

51CTO技术栈公众号