认识编程:以Python语言讲透编程的本质
上QQ阅读APP看书,第一时间看更新

3.1 计算机的外包装

上一章一起探索了一台理论上的计算机是什么样子的。为了让大家能使用计算机,这样一台裸机肯定是不行的,不能让大家自己去管理CPU内存输入输出设备,管理程序装载。这些底层的工作是统一的,不需要每一个使用计算机的人自己动手去做。

这就诞生了操作系统,统一管理计算机的这些组成部件,使用计算机的人其实使用的是操作系统。

操作系统可以看成是一个调度程序,它负责管理计算机这台设备,包括CPU、内存和I/O设备。那么它调度什么东西呢?如果一台计算机是一种专用的机器,其实不需要调度,但是计算机设计之初就定位为一台通用的计算机器,所以原则上一台计算机会运行很多程序。如果规定这些程序要排队,运行完一个之后才运行下一个,实际上也不需要调度。

历史上,电子计算机刚发明出来的几年,是没有什么操作系统的,全是手工操作。程序员将穿孔的纸带装入输入机,然后启动输入机把程序和数据输入内存,接着通过控制台开关启动程序针对数据运行;计算完毕,打印输出计算结果;用户取走结果并卸下纸带(或卡片)后,才让下一个用户上机。

而现在读者熟悉的实际情况是一台计算机上会同时运行很多程序,可能是边写作边放音乐,还在通过网络下载文件,甚至同时在网络上聊天。对这些程序任务进行管理是操作系统要处理的核心事务,每一个程序都需要占用计算机的计算资源,如CPU、内存、输入输出设备,互相之间不能“打架”,所以需要一个调度机制。

历史上诞生过很多种操作系统。

首先出现的是批处理系统,在它的控制下,计算机能够自动、成批地处理一个或多个用户的作业(包括程序、数据和命令)。大大提高了效率,不过CPU的性能还是没有充分利用,因为输入输出这些操作要通过机电设备,很慢,作为纯粹的电子设备的CPU,大部分时间要等着这些设备完成工作。

为了克服这些矛盾,出现了多道程序技术,允许多个程序同时进入内存并运行。这里要理解“同时”这个词的含义,它是一种对人的感受来讲的“同时”,因为CPU只有一个,严格说起来,是没有同时的,一瞬间只执行一条指令。实际上,是让这些任务交替在CPU中运行,它们共享系统中的各种软、硬件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。CPU很快,虽然它是交替为这些程序服务,但是从人的感受来讲是多个任务同时在运行。

这样一步一步演变成现代的操作系统。

比较主流的操作系统如UNIX。UNIX是一种强大的多任务、多用户操作系统。1970年,Ken Thompson发布了第一个版本,后来Dennis M. Ritchie加入改写,因此一般把Thompson和Ritchie称为UNIX发明人。UNIX是强大的系统,但是它的核心却是非常小的,1979年发布的正式UNIX的核心只有40KB。