再看《操作系统》
缘起
上学的时候我总是看不明白《操作系统》这门课程,我不明白我是这门课程究竟有什么作用,现在想来不明白也是自然的了,那时一个星期能见到操作系统的日子也不超过一天,哪能有什么感觉。毕业几年后,天天与计算机打交道时间长了,有不少东西渐渐也能明白了。我想花些把以前学过的东西整理一下,便有了此篇。
1,什么是操作系统?
一台可以供我们上网,玩游戏的计算机其内部构造是复杂的。我们怎么样让这些硬件配合起来,以方便让我们“玩转”?答案是:借助操作系统(Operating System)。
要说清操作什么是什么,首先得看自己是站在什么样的立场。是操作系统本身,还是用户。把操作系统比喻成一个古时富贵人家的大管家,这个隐喻(Metepher)还是比较贴切的。从管家的角度来看,他需要做的工作比较繁琐,管理家里的各类大小事宜。从老爷(主子)的角度来看,有了大管家可以提高办事效率,不必什么事都事必躬亲,还有就是方便。对于那些老爷的来说没有管家的日子肯定是苦的要死 :-)
将上面管家那个隐喻延伸一下,就可以得到经典的关于什么是操作系统的定义:操作系统是管理计算机资源,提高资源利用率,方便用户的软件。
2,操作系统的层级。
2.1 操作系统在计算机系统中的层级。
操作系统也是软件。但操作系统这种软件离硬件更为接近。整个计算机系统也是分层的,这个跟思想跟OSI网络模型一致:底层封装细节,向上层提供透明的服务。上层不知道底层是什么,只是索取底层的服务。我们来看张图:
图中我们可以清楚地看到操作系统所处的层级。通常应用程序没有办法直接控制硬件资源,比如你在应用程序用使用COM接口,控制信号灯的打开或关闭。表面上你在控制硬件,其实你在呼叫操作系统,让操作系统来控制硬件——也就是说你几乎绕不开OS,直接从User Application来访问Comupter Hardware。足可见操作系统对资源的管控能力了。
2.2 操作系统本身的层级划分。
操作系统足够复杂,复杂到操作系统本身也采用的分层的思想来构建。而具体的构建要看不同的操作系统,但总体的思想大致相同。这就是所谓的“规范(Specification)”和“实现(Implementation)”。
我们再来看一张图:
从图中,我们可以看见操作系统的实现细节。较底层的硬件抽象层(Hardware Abstraction Layer)和驱动程序层。中间的内核层(Kernel)和文件系统层。较为上层的内置库(Libraries)和系统应用程序(System Application)。
注:这里的内核层,其实是Process Management,Virtual Memory,I/O Management等内核功能的总称。
作为比较,我们来看看我们常见的NT系统的内部结构图:
可见NT操作系统也采用分层式的结构。包括较底层的HAL,Device Driver。中间层的File System和GDI Interface。上层的System Service, System Interface等。
3,操作系统需要做些什么?
作为一个大管家,操作系统要做哪些工作呢?我们罗列一下:
*处理机(CPU)管理,主要包括进程创建,进程调度等。
*内存的管理,主要包括内页的分配,为提高内存利用率而产生的虚拟内存技术等。
*I/O设备管理,主要包括输入,输出系统,设备控制方法(通道,控制器)。
*提供系统调用,方便上层应用程序。
*文件管理,包括文件的组织,创建,删除等。
*安全管理,操作系统用户的创建,权限分配等。
为了完成上面的工作,操作系统会面临一些问题,针对这些问题必须作出一些决策,给出尽可能合理的解决方案,这就是《操作系统》这门课程所讲述和研究的内容。
4,到哪了?往哪去?
通过介绍,我们知道了操作系统的位置,又知道了它又是由哪些部分组成的,最后我们列举出了它要完成的工作。接下来我们依次看看操作系统所做的工作,从处理机管理开始。
这便是我们第二篇讨论的内容。