操作系统的任务调度机制(一)演进历史

操作系统的任务调度机制(一)演进历史

2月 5, 2021
操作系统

之前说到了 Goroutine 的运行时调度机制,引发了我对操作系统调度的进一步回忆,发现已经非常模糊,只能从头再来。在很多大型系统中,包括编程语言,都有调度器的概念,其核心的作用都是对有限的处理器资源进行最大化利用。具体到我目前关注的,也就是操作系统中关于进程和线程的调度策略以及并发处理机制。

操作系统的任务调度机制(一)演进历史

操作系统的任务调度机制(二)进程和线程模型

操作系统的任务调度机制(三)调度器策略

操作系统的任务调度机制(四)通信、同步和死锁

参考书主要有:

现代操作系统

操作系统之哲学原理

现代操作系统:原理与实现

操作系统 – 精髓与设计原理

Linux/UNIX系统编程手册

本篇是第一篇,主要先介绍下操作系统中任务调度的演进历史。稍微看一些操作系统的教科书就会发现,几乎每本都会介绍计算机发展的这几个发展阶段,了解这些有助于明白操作系统中进程、线程等概念产生的背后原因,这里也按照时间线列举一下发展历史。

真空管和穿孔卡片(1945 ~ 1955) #

公认的第一代计算机ABC 机 和宾夕法尼亚大学的 ENIAC 为代表,虽然从功能上看,很难称之为现在我们理解的计算机。这一时期,硬件的设备以真空管和插件版为主,后来的改良版将插件版替换成了打孔卡片来承载计算机输入输出的数据。这种计算机的工作方式,也就只能限定了一次只能由一个操作人员,执行一项任务。值得一提,冯·诺伊曼也是 ENIAC 的后期参与者,后来他的 冯·诺伊曼模型 的体系结构开始逐渐成型。

批处理系统(1955 ~ 1965) #

晶体管的发明改善了整个状况,硬件质量变得可靠,厂商也就可以批量的生产并销售第二代计算机。在这种机器中要运行一个作业,仍然需要程序员先将程序(FORTRAN 或汇编语言)写在纸上,然后穿孔成卡片,然后放在读卡机中,再将程序刷到磁带上执行。由于当时的计算机的运行成本还是非常高,所以人们还是会尽量减少计算机的运行时长。这就形成了批处理的思想:在工作人员等待读卡机积累到一定工作量的卡片后,再开始集中工作,最后运行完再将程序的结果通过打印机输出。

多道批处理系统(1965 ~ 1975) #

后来随着集成电路技术的发展,硬件的革新再次加速了计算机的计算性能,各大厂商开始开辟新的生产线来制造第三代计算机。到了这一时期,计算机的计算速度已经开始远远大于磁带的 I/O 的速度了,而 CPU 在这些 I/O 操作时只能处于等待状态,造成非常严重的资源浪费,可能一个程序的运行过程中有 90% 的时间都处于等待状态,已经很过分了,于是催生了多道程序设计的思想产生:若当前作业处于等待 I/O 操作,就可以让 CPU 执行另一个作业,只要内存中可以存放足够的作业,CPU 的利用率就可以达到 100%。这一时期具有代表性的计算机就是 IBM 的 System/360,各类教科书基本都有提到。

分时操作系统(1970 ~ 1980) #

有了多道批处理操作系统,经过实践发现,这时 CPU 的利用率确实满了,但是又有了新的问题。一台计算机一小时可以运行的程序变多了,这意味着机房门口等待结果的程序员也变多了,程序员自古以来都很贵,资本家肯定不希望看到这种理直气壮摸鱼的情况。为了提高程序员的利用率,这个高优需求导致了分时系统的出现。尤其在第三代计算机技术成熟之后,分时操作系统也开始逐渐流行起来。

分时操作系统的核心思想是:每个用户都有一个大型机的联机终端(个人机的出现),可以有多个用户同时登陆,每个用户可以有一些交互指令(I/O 密集)和程序的运行(计算密集)操作,每个程序运行一段时间后都主动出让 CPU 给其他程序,再依靠多道程序的机制(后来我们叫做进程的上下文切换)成熟,每个用户都会感觉 CPU 是在为自己进行相对之前已经相当“实时”的反馈服务,这时程序员也就可以开开心心地一直坐在自己的终端前写程序了,资本家也露出了满意的笑容。这个时期具有代表性的操作系统是 MULTICS。

从 MULTICS 以后的操作系统大家就耳熟能详了,贝尔实验室的 Ken Tompson(创造了 B 语言、参与创造了 Go 语言)、Dennis Ritchie(创造了 C 语言)退出 MULTICS 项目后,共同开发了 UNIX 操作系统,并因此一起获得了 1983 年的图灵奖。而由于 UNIX 系统的版权和收费机制,芬兰的 Linus Torvalds 于 1991 年发布了开源的 Linux 操作系统。

现代操作系统(1980 ~ 至今) #

随着处理器性能的持续提升以及硬件成本的持续降低,个人计算机开始大规模普及,进一步促进了操作系统的发展,另外操作系统也随着应用场景向不同的方向进化,比如适合个人 PC 端使用的图形操作系统 Windows、MacOS,也有适合服务器的 Unix、Linux 操作系统,还有手机端的 iOS、Android 等,都是真正意义上的现代操作系统。

还有一些 Unix 衍生系统的历史,比如 System V、BSD、SunOS、Solaris、Linux 以及 POSIX 标准的诞生,可以阅读 Linux/UNIX系统编程手册 第一章,应该会得到一个比较清晰的脉络,这里就不 copy 了。
本文共 1959 字,上次修改于 Jul 9, 2024,以 CC 署名-非商业性使用-禁止演绎 4.0 国际 协议进行许可。

相关文章

» 操作系统的内存管理机制

» 使用 DOSBox 和 Debug 命令调试汇编程序

» 汇编语言不会编?

» CPU 与寄存器