我们每天都在和操作系统打交道,所以了解一些操作系统的基本知识非常有必要,本文用通俗易懂的语言讲解了一些基本原理,没有晦涩的专业解释,只有一看就懂的大白话。
1 为什么要有操作系统
操作系统在计算机中起着重要的作用,它为所有的应用程序提供一个运行的环境,并将应用程序同具体硬件隔离。比如在机器中换一块声卡,只需要重新安装一下声卡驱动程序就完事了。但如果没有操作系统,你就必须为这块新的声卡重新购买所有的应用程序,以便这些应用程序能够认识这块声卡并能够使用它。
操作系统就象计算机的大管家,管理着计算机的各种资源,比如内存、磁盘、CPU 等,应用程序想使用这些资源,都必须经过操作系统同意(资源申请),并且由操作系统统一安排使用时间(资源分配),应用程序用完后必须将资源还给操作系统(资源回收),以便其他应用程序使用。这样,计算机系统在操作系统的管理下以尽可能高的效率有条不紊地工作着。
2 什么是进程
进程是程序在计算机上的一次执行活动。当你运行一个程序时,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。
进程可以分为系统进程和用户进程,它是操作系统进行资源分配的单位。在 Windows 下,进程又被细化为线程,是进程下能多个独立运行的更小的单位。
3 什么是中断
比如莲莲和唐唐在下象棋,眼看莲莲就快招架不住了,正当此紧要关头,唐唐的女友来了,非要唐唐陪她上街买衣服不可(唐唐晕倒),于是唐唐不得不同莲莲商量,先把棋盘封了,待买完衣服后继续战斗。
掌灯时分,唐唐带着满脸疲惫回到了棋盘前,结果莲莲不费吹灰只力便反败为胜,这就是整个中断过程。我们来看看中断过程是如何发生的:
- 3.1 中断请求:唐唐的女友要他逛街
- 3.2 中断响应:唐唐准备放下棋局陪女友逛街
- 3.3 现场保护:先把棋盘封了
- 3.4 中断处理:唐唐陪女友逛街买衣服
- 3.5 恢复现场:把棋盘解封
- 3.6 中断返回:继续战斗
- 3.7 中断屏蔽:唐唐把棋移到密室中下,不让他的女友打扰
在计算机中,中断机制是非常重要的,它用于协调系统对各种外部事件的响应和处理,并且是实现多任务的必要条件。可以这么说,如果没有中断机制,就没有计算机。
4 RING3 和 RING0 是什么意思
这得从 CPU 指令系统(用于控制 CPU 完成各种功能的命令)的特权级别说起。在 CPU 的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机 n 回就不足为奇了。
所以,CPU 将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。形象地说,特权指令就是那些儿童不宜的东东,而非特权指令则是老少皆宜。
Intel 的 CPU 将特权级别分为 4 个级别:RING0,RING1,RING2,RING3。Windows 只使用其中的两个级别 RING0 和 RING3,RING0 只给操作系统用,RING3 谁都能用。如果普通应用程序企图执行 RING0 指令,则 Windows 会显示「非法指令」错误信息。
5 什么是多任务
在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行态,这便是多任务。现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行。多任务带来的好处是明显的,比如你可以边听 mp3 边上网,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。
6 并发和并行
一个 CPU 一次只能运行一个进程,不能一心多用,如果想同时运行多个进程,就必须使用并发技术。实现并发技术相当复杂,最容易理解的是「时间片轮转进程调度算法」,它的思想简单介绍如下:
在操作系统的管理下,所有正在运行的进程轮流使用 CPU,每个进程允许占用 CPU 的时间非常短(比如 10 毫秒),这样用户根本感觉不出来 CPU 是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有 CPU。
如果一台计算机有多个 CPU,情况就不同了,如果进程数小于 CPU 数,则不同的进程可以分配给不同的 CPU 来运行,这样,多个进程就是真正同时运行的,这便是并行。但如果进程数大于 CPU 数,则仍然需要使用并发技术。在 Windows 中,进行 CPU 分配是以线程为单位的,一个进程可能由多个线程组成,这时情况更加复杂,但简单地说,有如下关系:
- 总线程数 <= CPU数量:并行运行
- 总线程数 > CPU数量:并发运行
并行运行的效率显然高于并发运行,所以在多 CPU 的计算机中,多任务的效率比较高。但是,如果在多 CPU 计算机中只运行一个进程(线程),就不能发挥多 CPU 的优势,会造成资源的浪费。
7 可抢占式多任务
进程是有优先级的。如果即将被运行的进程的优先级比正在运行的进程的优先级高,则系统可以强行剥夺正在运行的进程的 CPU,让优先级高的进程先运行。可见,人类社会的特权思想在计算机世界中表现得多么淋漓尽致。
实际的操作系统一般将时间片思想同可强占思想结合起来进行 CPU 分配。可抢占式多任务的好处是很多的,比如当一个进程发生意外无法运行时,如果不能强行剥夺其 CPU 占有权,则整个系统都得瘫痪。
8 多个进程在并发/并行运行过程中会产生冲突吗
如果没有任何保护机制,肯定是会的。这种冲突一般发生在对资源的争夺上。显然,如果一条马路窄到只能通过一辆马车,则当有两辆马车想同时通过时,某个马车夫就必须发扬风格,先让一让,否则结果肯定是人仰马翻。操作系统细心地管理着这一切,以避免进程间的冲突,程序员们也常常需要细心地按照某种既定规则编写程序,以便操作系统管理。
9 什么是虚拟存储器
虚拟存储技术是非常重要的存储管理技术,它的核心思想是利用巨大的硬盘空间来弥补不足的实际内存空间。在虚拟内存管理下,应用程序可以使用的存储空间远远大于实际的内存大小。我们将一台计算机实际安装的内存称为物理存储器,将通过虚拟存储技术得到的比实际内存空间大得多的存储空间称为虚拟存储器。虚拟存储技术的实现也是非常复杂,这里只提一提最简单的思想。
内存单元在计算机中是有编号的,叫内存地址。如果你的计算机中有 1M 物理内存,则物理内存的地址范围为 0 到 1048575(1024 x 1024 )。如果想访问地址为 1048576的单元,显然是不可以的,因为最大只到 1048575 了 。但是,如果这时我将物理内存中所有的东西先保存到硬盘上,然后通过某种方法将 1048576 映射到地址为 0 的物理内存单元上,我不就又得到另外整整一个 M 的存储空间了吗,当程序要访问地址为 0 的单元时,我把原先存储在硬盘上的内容调回物理内存中就可以了。
这个想法够巧妙吧,它就是虚拟存储技术的核心思想。于是我就可以得到 n 个 1M 空间了。真正的虚拟存储管理比上面我所提的还要复杂、巧妙得多,它能够实现让不同的进程在不同的地址空间上运行(即让每个进程认为自己占有所有的存储空间,可以任意使用,不必在乎系统中的其他进程是如何使用存储空间的。这犹如让不同的进程运行在不同的计算机上),并且要考虑最优的内存使用效率。
10 如果一个进程访问了不属于自己地址空间内的存储单元会怎样
在 Windows 下你肯定会看到一个「该程序执行了非法操作,即将被关闭……」之类的对话框。看到这样的对话框常令我们无比沮丧,但这是操作系统必须做的事,我们称它为「存储保护」。存储保护的目的是保护系统进程不被用户进程破坏,不允许进程读写不属于自己的区域。
道理是很简单的:考试的时候,你只被允许在自己的试卷上面作答,如果你想看别人的试卷,甚至想改别人试卷上的内容,你就执行了「非法操作」,肯定是要被监考「关闭」的(前提是监考人员工作正常,否则就乱了套了,会有很严重的后果)。注意:在 Windows 中引起系统关闭一个进程的原因很多,除了非法读写其他进程存储区(地址越界)外,还有如执行了只有操作系统才能执行的 ring0 指令、程序中出现除数为 0 的情况等等。
11 硬盘分区
最早的时候,操作系统无法管理较大的硬盘空间,所以将一个大的硬盘空间分为多个较小的区域以便于管理。另外,有时需要在系统中安装多个操作系统,也需要将硬盘分为不同的区域,让不同的操作系统分别管理,互不干扰。
现在已经没有因为操作系统无法管理大硬盘而需要对硬盘进行分区的可能性了,但我们仍然对硬盘进行分区,除了安装多个操作系统外,主要的还是为了对各种文件进行管理比较方便。操作系统为不同的硬盘分区赋予不同的盘符,这样就在逻辑上把一个大硬盘分割成了多个小硬盘。
12 什么是硬盘分区的主引导记录
主引导记录是每个硬盘分区的命根子,上面记录着一个分区所占用的硬盘空间的位置等重要信息。如果一个分区的主引导记录被破坏,这个分区就算玩完了。
13 什么是活动分区
活动分区是在系统加电后具有自举(引导系统)能力的分区,在活动分区上的主引导记录中有一段主引导程序,每当系统启动后,这段程序被调入内存运行,以引导(启动)保存在硬盘上的操作系统。不同的操作系统引导的方法是不同的,所以这段主引导程序随着系统上安装的操作系统的不同而不同。
14 Windows 是怎样储存磁盘文件的
首先,Windows 以「簇」为单位使用硬盘上的空间。根据硬盘空间的大小,一个簇的大小是不一样的。一般说,簇越小,硬盘空间的利用率越大,簇越大,存储速度越快。每个文件必须被分成以簇的大小为单位的多个块,然后储存在硬盘上。为此,需要一个表格来记录一个文件被分成的块都储存在硬盘的哪些簇上,这个表格在 Win9x 中就是 FAT 表。FAT 表也储存在硬盘上。所以,FAT 表是文件系统的命根子,破坏了它,一个磁盘所有的文件就玩完了。于是,Windows 除了使用一个 FAT 表外,还会备份一个。
15 什么是文件目录表
文件目录表同 FAT 表一样是非常重要的,它记录着所有文件的文件名、属性和在 FAT 表中的起始位置。当你需要读写一个文件时,Windows 就从文件目录表中找这个文件,如果找到,按照文件目录表中所指示的该文件在 FAT 表中的起始位置读出 FAT 表中与这个文件有关的存储信息,就可以读写这个文件了。
16 什么叫虚拟设备
不同的 I/O 设备速度有快有慢。在操作系统中,为了有效地利用各种设备,可以使用高速设备来模拟低速设备,从而得到的就是虚拟设备。
在 Windows 中典型的例子就是打印机。我们不难发现在启动打印时打印机并没有工作,而是硬盘在响,然后所有的打印文档都进入打印队列,排队打印。在前一个文档还在打印机上打印的时候,下一个文档已经进入打印队列,提交这个文档的进程无须等待打印机将这个文档打印完毕,就可以继续处理别的事情了。这是由于 Windows 使用硬盘模拟打印机。所有的打印工作实际上都「打印」到了硬盘上。硬盘速度比打印机快得多,所以一下子就完成了。此时有另一个进程负责从硬盘上读出打印数据,打印到实际的打印机上,这个进程在后台工作,不影响前台的其他进程。
17 什么是与设备无关性(设备独立性)
计算机的外部设备很多,同种类型的设备又有不同厂家、不同型号的产品。这些产品总会有些细微的差别。这就给应用程序的编写带来很大的困难,因为一个应用程序不可能顾及到所有硬件的兼容性。
为此,操作系统将具体的硬件设备同整个系统隔离开来,对硬件的具体操作、与硬件有关的兼容性问题等统统由设备驱动程序来解决,同时操作系统向应用程序提供统一的操纵设备的方法,应用程序只需要按套路调用操作系统提供的功能即可,无须关心实际的设备是什么,这就是与设备无关性。这样,每增添或改动一个系统上的硬件,只需要安装相应的驱动程序即可。
18 什么是缓冲技术
在数据到达与离去速度不匹配的地方,就应该使用缓冲技术。缓冲技术好比是一个水库,如果上游来的水太多,下游来不及排走,水库就起到「缓冲」作用,先让水在水库中停一些时候,等下游能继续排水,再把水送往下游。
通常 CPU 的速度要比 I/O 设备的速度快得多得多,所以可以设置缓冲区,对于从 CPU 来的数据,先放在缓冲区中,然后设备可以慢慢地从缓冲区中读出数据。