1.2 操作系统功能演进
在很久以前确实存在上述这种模式的程序,并且每次计算机中只存在一道这样的程序,运行完一道,手工装入第二道……你会发现这太慢了,也太麻烦了,对昂贵的计算机硬件的利用率也太低了,因为这样的程序是不可能让计算机内部所有的设备都工作起来的。
然而首先知道这个问题的不是我们,先辈早已看到这类问题,他们想了个方法,在计算机的内部放入一道监控程序,然后把要执行的所有程序放在一个固定的介质上,每次那个监控程序选择一道要运行的程序装入计算机内部去执行,这道程序执行完了,再装入下一道程序……直到运行完所有的程序。如图1-6所示。从全局看效率高了不少,但是从局部来看,它仍然没有让计算机的所有设备都工作起来。同时也还是没有降低程序员的难度,因为还是要操控程序要用到的硬件。
图1-6 古老的监控程序及其执行过程
我们马上会想到,能不能把那个所谓的监控程序稍稍改进和扩展一下,把那些操作各种硬件的代码和实现重要功能的代码,放进监控程序里。然后我们对这些功能进行编号,比如,1号功能是操作键盘的、2号功能是打开硬盘上的文件……最后应用程序要完成什么功能,只要call××号功能,计算机的控制权就会交给监控程序,当监控程序中的代码完成这个功能号对应的服务时就返回到应用程序中。图1-7展示了这一过程。
图1-7 进一步扩展的监控程序
这样给应用程序开发人员带来的不只是一点点方便,对他们而言,完全是种解脱。方便是方便了不少,但这还是只运行了一个应用程序,你或许想到了DOS操作系统。是的,DOS就是这样的操作系统。
我们继续思考一种情景:你正在用QQ软件和你的朋友聊天,QQ软件等待你输入消息,然后把这个消息通过网络发送给你的朋友。QQ软件等待你的输入,这个时间可能是几秒钟,甚至更久。这几秒钟对如此之快的计算机来说,无疑是巨大的浪费。如果这时内存中存在着另一个软件,这个几秒钟是否可以拿来运行另一个软件呢?那当然是可以的。比如,我们让这几秒钟切换到KuGou软件上,等到用户输入消息时,再换回来,于是我们就可以一边聊天,一边听音乐了,如图1-8所示。当然这是其中一种比较常见的情景,还有等待网卡上的网络数据包、等待磁盘上的数据、等待声卡缓冲区空闲、等待打印机打印完文档、等待扫描仪的输入等之所以会有以上这些“等待”,是因为计算机内部各种设备的速度不相同,如键盘的输入速度赶不上CPU的速度、磁盘的数据传输速度比不上CPU的数据处理速度……
图1-8 多道程序的设想
还是上面的情景,我们继续进一步思考一些问题。QQ和KuGou同时存在于内存中,那么就要占据不同的物理内存空间。作为操作系统当然就要知道哪些内存是空闲的,哪些内存是已经占用的,当然如果QQ程序退出了操作系统就要标识QQ占用的内存已经空闲了,从而可以被用于其他用途。QQ和KuGou是两个不同的程序,操作系统要知道它们的存在,包括它们的一些信息,例如,它们各自占用多大内存、在内存中的什么地址,它们各自执行到哪里了,以及当前CPU上执行的是哪个程序。QQ要记录你的聊天数据,KuGou要读取MP3音乐数据,操作系统就要组织这些数据的存放、读取,以及控制这些数据的访问权限。最后QQ要发送消息,KuGou要播放音乐,这最终都要用到计算机内部具体的硬件设备,QQ要用到网卡和磁盘、KuGou要用到磁盘和声卡,操作系统当然要知道计算机内部有多少设备,每个设备的状态、类型及访问操作方式,以便代替应用程序访问控制设备。
上述情景中,我们思考的问题,当然也是操作系统重点要解决的问题,也可以说是操作系统要完成的功能。先辈还对其进行规划并定义了如下专业的术语。
内存管理:最简单的原因是要在内存中放入不止一道程序。
进程管理:既然内存中有多道程序,首先要知道它们的存在、状态及与这道程序相关的重要信息。
文件系统:用户有那么多的数据,如音乐、电影、文档、其他数据,如何组织它们,以何种形式查找访问它们,如何才能把它们安全地保存在计算机中。
设备管理:由上可知,操作系统必须要知道计算机内部有多少个设备、设备各自是什么类型,设备当前能否被访问,最重要的任务是对应用程序屏蔽设备细节,代替应用软件访问控制设备。
如果站在全局较高的角度看,就是这样的:把计算机内部的设备和设备中的数据统称为“资源”,操作系统即是众多资源的管理者。应用程序无非就是通过操作系统这层软件获取资源、使用资源、释放资源。而操作系统则一边维护众多资源的状态,一边通过众多资源状态,如该资源当前能否使用,或者该资源是共享访问的资源还是互斥访问的资源,从而调度安排众多应用程序有序、高效地运行。最后达到高效使用计算机的目的。
上面所有这些描述或许看上去很陌生,先不要急,我们后面慢慢地一步一步介绍。我们根据上述所有的描述,用一张图来大致表示现代整个计算机系统的结构,如图1-9所示。
图1-9 现代操作系统模型
从图1-9不难看出,如此复杂的计算机,有如此多的功能,时刻影响并改变着人们的生活。然而它也是一层一层地建立起来的。或许我们还有很多疑问:如何实现设备管理、进程又是什么、如何实现系统调用……这正是我们后面要解决的问题,现在我们只要明白计算机中有一层叫操作系统的软件,它在背后默默地干了些十分重要的事情,如果没有它事情会变得很糟糕。