操作系统原理


 


我们每天都同操作系统打交道,了解一些操作系统原理上的知识是绝对有必要的,它能够让你了解操作系统内部是怎么工作的,为什么会出现这样那样的问题,为我们解决这些问题提供思路。

    本文全然是为普通电脑用户写的,省略了全部难以理解的算法、原理,没有太多细节上的东西,仅仅是针对普通电脑用户可能感兴趣的问题给出了实现思想。写这些东西仅仅是我的一相情愿,就怕我还是写得深了些,刚開始学习的人读不懂。假设这10K文字能让你对操作系统有更深的了解,那也就不枉了这几个汗流浃背的夏日午后了。


Q:什么是中断?

A:中断嘛,举个easy理解的样例吧。

   比方莲莲和唐唐在下象棋,眼看莲莲就快招架不住了,正当此紧要关头,唐

唐的女友来了,非要唐唐陪她上街买衣服不可(唐唐晕倒:-) ),于是唐唐

不得不同莲莲商议,先把棋盘封了,待买完衣服后继续战斗。掌灯时分,唐

唐带着满脸疲惫回到了棋盘前,结果莲莲不费吹灰仅仅力便反败为胜。

这就是整个中断过程。我们来看看中断过程是怎样发生的:

  1)中断请求:唐唐的女友要他逛街

  2)中断响应:唐唐准备放下棋局陪女友逛街

  3)现场保护:先把棋盘封了

  4)中断处理:唐唐陪女友逛街买衣服

  5)恢复现场:把棋盘解封

  6)中断返回:继续战斗

  在计算机中,中断机制是非常重要的,它用于协调系统对各种外部事件的响

应和处理,而且是实现多任务的必要条件。能够这么说,假设没有中断机制,

就没有计算机。噢,对了,假设唐唐把棋移到密室中下,不让他的女友打搅,

这就叫“中断屏蔽”。


Q:RING3、RING0是什么意思?

A:这得从CPU指令系统(用于控制CPU完毕各种功能的命令)的特权级别说起。

在CPU的全部指令中,有一些指令是非常危急的,假设错用,将导致整个系统

崩溃。比方:清内存、设置时钟等。假设全部的程序都能使用这些指令,那

么你的系统一天死机n回就不足为奇了。所以,CPU将指令分为特权指令和非

特权指令,对于那些危急的指令,仅仅同意操作系统及其相关模块使用,普通

的应用程序仅仅能使用那些不会造成灾难的指令。形象地说,特权指令就是那

些儿童不宜的东东,而非特权指令则是老少皆宜。

   Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。Windows仅仅

使用当中的两个级别RING0和RING3,RING0仅仅给操作系统用,RING3谁都能用。

假设普通应用程序企图执行RING0指令,则Windows会显示“非法指令”错误信

息。虽然有CPU的特权级别作保护,遗憾的是WINDOW98本身漏洞非常多,使用

Windows 98的系统一天死机n回也是正常的。


Q:为什么要有操作系统?

A:哈哈,难道你还没感受到操作系统的魅力吗?由于有了象Windows这样优秀的

操作系统,我们的机器才一天到晚地出问题——这个那个的问题,我们才需

要一天到晚地重装Windows,这样才使我们牢牢地记住了象微软这种公司的

名字,和象比尔盖茨这样优秀的程序猿兼老板的名字……


   好了,说正经的,虽然Windows不稳定,但绝对不是否能认它是当今最棒的操

作系统之中的一个。操作系统在计算机中起着重要作用,它为全部的应用程序提供

一个执行环境,并将应用程序同详细硬件隔离。比方在机器中换一块声卡,仅仅

须要又一次安装一下声卡驱动程序就完事了,但假设没有操作系统,你就必须

为这块新的声卡又一次购买全部的应用程序,以便这些应用程序能够认识这块声

卡并能够使用它。

   操作系统就象计算机的大管家,管理着计算机的各种资源,比方内存、磁盘、

CPU等。应用程序想使用这些资源,都必须经过操作系统同意(资源申请),

而且由操作系统统一安排使用时间(资源分配),应用程序用完后必须将资源

还给操作系统(资源回收),以便其它应用程序使用。就这样,计算机系统在

操作系统的管理下以最可能高的效率有条不紊地工作着。


Q:什么叫进程?进程同程序有什么区别?

A:进程是程序在计算机上的一次执行活动。当你执行一个程序,你就启动了一个

进程。显然,程序是死的(静态的),进程是活的(动态的)。

进程能够分为系统进程和用户进程。凡是用于完毕操作系统的各种功能的进程

就是系统进程,它们就是处于执行状态下的操作系统本身;用户进程就不必我

多讲了吧,全部由你启动的进程都是用户进程。

进程是操作系统进行资源分配的单位。在Windows

下,进程又被细化为线程,也就是一个进程下有多个能独立执行的

更小的单位。


Q:什么是多任务?

A:在同一个时间里,同一个计算机系统中假设同意两个或两个以上的进程处于运

行状态,这便是多任务。现代的操作系统差点儿都是多任务操作系统,能够同一时候

管理多个进程的执行。多任务带来的优点是明显的,比方你能够边听mp3边上网,

与此同一时候甚至能够将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。


Q:什么是“并发”?什么是“并行”?

A:俗话说,一心不能二用,这对计算机也一样,原则上一个CPU仅仅能分配给一个

进程,以便执行这个进程。我们通常使用的计算机中仅仅有一个CPU,也就是说

仅仅有一颗心,要让它一心多用,同一时候执行多个进程,就必须使用并发技术。

实现并发技术相当复杂,最easy理解的是“时间片轮转进程调度算法”,它

的思想简介例如以下:

   在操作系统的管理下,全部正在执行的进程轮流使用CPU,每一个进程同意占用

CPU的时间非常短(比方10毫秒),这样用户根本感觉不出来CPU是在轮流为

多个进程服务,就好象全部的进程都在不间断地执行一样。但实际上在不论什么

一个时间内有且仅有一个进程占有CPU。假设一台计算机有多个CPU,情况就不同

了,假设进程数小于CPU数,则不同的进程能够分配给不同的CPU来执行,这样,

多个进程就是真正同一时候执行的,这便是并行。但假设进程数大于CPU数,则仍然需

要使用并发技术。在Windows中,进行CPU分配是以线程为单位的,一个进程可能

由多个线程组成,这时情况更加复杂,但简单地说,有例如以下关系:

总线程数 <= CPU数量:并行执行

总线程数 > CPU数量:并发执行

   并行执行的效率显然高于并发执行,所以在多CPU的计算机中,多任务的效率

比較高。可是,假设在多CPU计算机中仅仅执行一个进程(线程),就不能发挥多

CPU的优势。值得注意的是,Windows 9x并不支持多CPU系统,假设在多CPU系统  

上安装Windows 9x,有再多的CPU也是白搭。


Q:什么叫“可抢占式多任务”?

A:进程是有优先级的。假设即将被执行的进程的优先级比正在执行的进程的优先

级高,则系统能够强行剥夺正在执行的进程的CPU,让优先级高的进程先执行。

可见,人类社会的特权思想在计算机世界中表现得多么淋漓尽致。:-)

实际的操作系统一般将时间片思想同可强占思想结合起来进行CPU分配。

可抢占式多任务的优点是非常多的,比方当一个进程发生意外无法执行时,假设

不能强行剥夺其CPU占有权,则整个系统都得瘫痪,由于早期的Windows 3.1不

是可抢占式多任务系统,所以Windows 3.1非常不可靠。


Q:多个进程在并发/并行执行过程中会产生冲突吗?

A:假设没有不论什么保护机制,肯定是会的。这种冲突一般发生在对资源的争夺上。

显然,假设一条马路窄到仅仅能通过一辆马车,则当有两辆马车想同一时候通过时,

某个马车夫就必须发扬风格,先让一让,否则结果肯定是人仰马翻。

操作系统细心地管理着这一切,以避免进程间的冲突,程序猿们也经常须要

细心地依照某种既定规则编敲代码,以便操作系统管理。

更详细的方法、原理已经远远超过了刚開始学习的人能接受的水平,我还是把它略去

吧。


Q:什么是虚拟存储器?

A:虚拟存储技术是非常重要的存储管理技术,它的核心思想是利用巨大的硬盘

空间来弥补不足的实际内存空间。在虚拟内存管理下,应用程序能够使用的

存储空间远远大于实际的内存大小。我们将一台计算机实际安装的内存称为

物理存储器,将通过虚拟存储技术得到的比实际内存空间大得多的存储空间

成为虚拟存储器。虚拟存储技术的实现也是非常复杂,假设细讲的话肯定又

是吃力不讨好,这里仅仅提一提最简单的思想。内存单元在计算机中是有编号

的,叫内存地址。假设你的计算机中有1M物理内存(天哪,286的说?呵呵,

举样例方便嘛),则物理内存的地址范围为0到1048575(1024 x 1024 - 1)。

假设想訪问地址为1048576的单元,显然是不能够的,由于最大仅仅到1048575了

。可是,假设这时我将物理内存中全部的东西先保存到硬盘上,然后通过某种

方法将1048576映射到地址为0的物理存储单元上,我不就又得到另外整整一个

M的存储空间了吗,当程序要訪问地址为0的单元时,我把原先存储在硬盘上的

内容调回物理内存中就能够了。这个想法够巧妙吧,它就是虚拟存储技术的核

心思想。于是我就能够得到n个1M空间了。真正的虚拟存储管理比上面我所提的

还要复杂、巧妙得多,它能够实现让不同的进程在不同的地址空间上执行(即

让每一个进程觉得自己占有全部的存储空间,能够随意使用,不必在乎系统中的

其它进程是怎样使用存储空间的。这宛如让不同的进程执行在不同的计算机上)

,而且要考虑最优的内存使用效率。


Q:假设一个进程訪问了不属于自己地址空间内的存储单元,会发生什么情况?

A:在Windows下你肯定会看到一个“该程序执行了非法操作,即将被关闭……”

之类的对话框。看到这种对话框常令我们无比沮丧,但这是操作系统必须

做的事,我们称它为“存储保护”。存储保护的目的是保护系统进程不被用

户进程破坏,不同意进程读写不属于自己的区域。道理是非常easy的:考试的

时候,你仅仅被同意在自己的试卷上面作答,假设你想看别人的试卷,甚至想

改别人试卷上的内容,你就“执行了非法操作”,肯定是要被监考“关闭”

的(前提是监考人员工作正常,否则就乱了套了,会有非常严重的后果)。

注意:在Windows中引起系统关闭一个进程的原因非常多,除了非法读写其它

进程存储区(地址越界)外,还有如执行了仅仅有操作系统才干执行的ring0

指令、程序中出现除数为0的情况等等。


Q:什么是硬盘分区?

A:最早的时候,操作系统无法管理较大的硬盘空间,所以将一个大的硬盘空间

分为多个较小的区域以便于管理。另外,有时须要在系统中安装多个操作系

统,也须要将硬盘分为不同的区域,让不同的操作系统分别管理,互不干扰。

如今已经没有由于操作系统无法管理大硬盘而须要对硬盘进行分区的可能性

了,但我们仍然对硬盘进行分区,除了安装多个操作系统外,基本的还是为

了对各种文件进行管理比較方便。

操作系统为不同的硬盘分区赋予不同的盘符,这样就在逻辑上把一个大硬盘

切割成了多个小硬盘。


Q:什么是硬盘分区的主引导记录?

A:主引导记录是每一个硬盘分区的命根子,上面记录着一个分区所占用的硬盘空

间的位置等重要信息。假设一个分区的主引导记录被破坏,这个分区就算玩

完了。


Q:什么是活动分区?

A:活动分区是在系统加电后具有自举(引导系统)能力的分区,在活动分区上

的主引导记录中有一段主引导程序,每当系统启动后,这段程序被调入内存

执行,以引导(启动)保存在硬盘上的操作系统。不同的操作系统引导的方

法是不同的,所以这段主引导程序随着系统上安装的操作系统的不同而不同。


Q:Windows是怎样储存磁盘文件的?

A:首先,Windows以“簇”为单位使用硬盘上的空间。依据硬盘空间的大小,一

个簇的大小是不一样的。一般说,簇越小,硬盘空间的利用率越大,簇越大,

存储速度越快。每一个文件必须被分成以簇的大小为单位的多个块,然后储存在

硬盘上。为此,须要一个表格来记录一个文件被分成的块都储存在硬盘的哪些簇

上,这个表格在Win9x中就是FAT表。FAT表也储存在硬盘上。所以,FAT表是文件

系统的命根子,破坏了它,一个磁盘全部的文件就玩完了。于是,Windows除了使

用一个FAT表外,还会备份一个。


Q:什么是文件文件夹表?

A:文件文件夹表同FAT表一样是非常重要的,它记录着全部文件的文件名称、属性和在

FAT表中的起始位置。当你须要读写一个文件时,Windows就从文件文件夹表中找

这个文件,假设找到,依照文件文件夹表中所指示的该文件在FAT表中的起始位置

读出FAT表中与这个文件有关的存储信息,就能够读写这个文件了。


Q:什么叫虚拟设备?

A:不同的I/O设备速度有快有慢。在操作系统中,为了有效地利用各种设备,能够

使用快速设备来模拟低速设备,从而得到的就是虚拟设备。

在Windows中典型的样例就是打印机。我们不难发如今启动打印时打印机并没有

工作,而是硬盘在响,然后全部的打印文档都进入打印队列,排队打印。在前

一个文档还在打印机上打印的时候,下一个文档已经进入打印队列,提交这个

文档的进程无须等待打印机将这个文档打印完毕,就能够继续处理别的事情了。

这是由于Windows使用硬盘模拟打印机。全部的打印工作实际上都“打印”到了

硬盘上。硬盘速度比打印机快得多,所以一下子就完毕了。此时有还有一个进程

负责从硬盘上读出打印数据,打印到实际的打印机上,这个进程在后台工作,

不影响前台的其它进程。


Q:什么是与设备无关性(设备独立性)?

A:计算机的外部设备非常多,同种类型的设备又有不同厂家、不同型号的产品。这

些产品总会有些细微的区别。这就给应用程序的编写带来非常大的困难,由于一

个应用程序不可能顾及到全部硬件的兼容性。为此,操作系统将详细的硬件设

备同整个系统隔离开来,对硬件的详细操作、与硬件有关的兼容性问题等统统

由设备驱动程序来解决,同一时候操作系统向应用程序提供统一的操纵设备的方法,

应用程序仅仅须要按套路调用操作系统提供的功能就可以,无须关心实际的设备是

什么,这就是与设备无关性。

  这样,每增添或修改一个系统上的硬件,仅仅须要安装对应的驱动程序就可以。


Q:什么是缓冲(buffering)技术?

A:在数据到达与离去速度不匹配的地方,就应该使用缓冲技术。缓冲技术好比是

一个水库,假设上游来的水太多,下游来不及排走,水库就起到“缓冲”作用,

先让水在水库中停一些时候,等下游能继续排水,再把水送往下游。

  通常CPU的速度要比I/O设备的速度快得多得多,所以能够设置缓冲区,对于从

CPU来的数据,先放在缓冲区中,然后设备能够慢慢地从缓冲区中读出数据。