操作系统之哲学原理连载之二

来源:互联网 发布:文明 太空 mac 编辑:程序博客网 时间:2024/04/28 20:45

 操作系统之哲学原理连载之二

 

 1 基础原理篇序


对于任何一门课来说,首要探讨的问题就是这门课的主题到底是什么?对于刚接触到操作系统的入门者来说,一个自然的问题当然也就是操作系统到底是什么东西。回答这个问题是本篇的职责。此外,操作系统作为计算机的核心控制系统,它在计算机运行过程中扮演什么角色?它的来历是如何?它有一些什么基本概念?我们应该如何看待操作系统?它是如何参与到程序的执行过程中来?这些也是需要回答的基本问题。

 

本书的基础原理篇就是针对上述问题而写成。它对这些问题进行解答和讨论,并为我们介绍操作系统的核心功能部件打下基础和铺垫。本篇包含操作系统导论、操作系统历史、和操作系统基本概念三章。第1章操作系统导论的内容包括智者的挑战、人造与神造、程序是如何运行的、什么是操作系统、魔幻与管理、用户程序与操作系统、操作系统范畴和为什么学习操作系统。第2章操作系统历史探讨操作系统演变的主要过程:从单一控制终端单一操作员、到批处理、到多道批处理、到分时操作系统、到实时操作系统、到现代操作系统;对商业操作系统演变之过程进行分析,然后探讨一下操作系统分类和操作系统的未来发展趋势。第3章操作系统基本概念则简要回顾计算机硬件基本知识、探讨什么是“抽象”,讲解用户态与内核态,阐述操作系统结构、系统调用、操作系统的壳等知识。

 

本篇最为重要的核心思想是操作系统在计算机运行过程中扮演的角色:魔幻师和管理者。魔幻师将丑陋变得美好,将没有变为有,将少变为多;而管理者则对所有计算机资源进行管理以达到公平和效率的双料境界。对操作系统这两个角色的理解将非常有助于对进程、线程、虚拟内存、文件系统、和输入输出系统的掌握。

majic.jpg

化丑为美:魔幻师是操作系统扮演的一个根本角色

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1操作系统背景之哲学原理(约10600字)

 

1.1    智者的挑战

西方有一个著名的故事,名曰智者的挑战。相传很久以前,有座村子里住着一位智者。同村有个年轻人学到一些知识后就想来挑战这位智者。于是,年轻人想到了一个方法,他来到智者面,将双手放在背后,问这个智者:

 

“我刚刚从树上抓了只鸟,现在我手上。但你能告诉我,这只鸟是活的还是死的?”

 

这是一个诡诈的问题。因为,如果回答“是活的”,则这个年轻人只需要在背后将鸟掐死,然后给智者看这只死鸟;如果回答“是死的”,则这个年轻人只需要将鸟放飞即可。这样,无论智者如何回答,年轻人都可以让智者答错,然后可以大大的嘲笑一番智者的水平。

 

作为智者,当然一眼看出了年轻人的诡计。但是又不能不回答这个问题。因为不回答问题等于承认答不上来,当然也就是不是什么智者了。但如何回答呢?

 

智者的回答简洁、精妙,甚至妙不可言:“As you will。”

咋看上去,这个答案没有什么神奇之处。但如果读者的英语修养很高,就可以看出其中的奥妙。Will这个词在英语中的意思是意愿或意志。因此这个答案的意思是:这只鸟的死活与年轻人的意志保持一致:年轻人的意志是让这只鸟活,这只鸟就是活的;年轻人的意志是让鸟死,则这只鸟就是死的。

 

如果仅此就止,则这个答案存在着巨大的漏洞:年轻人可以将鸟掐死,但可以坚持说自己的意志是让鸟活着,即自己不小心将鸟掐死了,而自己的意志却是想让鸟活着。这样的话,智者的回答就错了。

 

妙不可言的是,will在英语中还有一层意思:将要,即将要发生的事或将要采取的行动。就是说,这只鸟的死活与年轻人将要采取的行动保持一致:年轻人将要放飞这只鸟,这只鸟就是活的;年轻人将要掐死这只鸟,则这只鸟就是死的。

 

因此,智者的回答将人的意志与行为全部包括了进来。这样,即使年轻人可以声称他的意愿和行为并不一致,智者的回答也正确无误。

 

好,我们知道了智者的回答了。但这个与操作系统课程有什么关系吗?

 

有!很多人都觉得操作系统枯燥、乏味、甚至令人厌烦。更有人说懂不懂操作系统没有关系。不是很多人在还没有学习操作系统之前就已经写过程序了吗?有的人甚至已经写过很大很复杂的程序了。可见,不懂操作系统并不妨碍我们学习使用计算机。

 

如果读者这样想,我劝您再想一想。你虽然写过程序,可你知道程序到底是如何在计算机上运行的吗?如果不知道,你怎么敢肯定你的程序总是会运行正确呢?你怎么敢说你写的程序最大限度的利用了系统的能力了呢?一个人觉得操作系统没用,那是因为他不知道怎么用,或者他没有用操作系统的意愿。说明白一点,你如果认为操作系统没有用,那是因为你的编程和程序开发处在一个低级的水平上。如果你掌握了操作系统,你的编程水平将显著提高。

 

换句话说,操作系统有没有用,我的回答是“As you will。”

 

你如果有意愿或者有行动使用操作系统,操作系统就是有用的;如果你没有意愿或行动,则操作系统就是没有用的。当然了,我希望读者在看完这本书后能够发掘/领悟操作系统的巨大用途。万一在读完本书后,读者还是困惑或者觉得没用,我唯一能说的就只有“As you will”了。当然,我希望这种情况发生的概率不大

 

1.2    人造与神造

 

要想学好操作系统,具有恰当的思维模式将十分必要。这个思维模式就是本书所强调的哲学:一种思维方式或一种生活方式。我们以一个问题来说明这一点。这个问题是:

 

“什么是计算机的根本特征?”

 

对于这个问题,相信很多人会说计算机就是个计算机器,或者是用来进行大规模计算的机器。或者是用于数据处理的机器,或其它计算机所具备的某些具体功能。这些回答当然没有错,问题是这些答案并不能帮助我们更好地学习理解计算机。就像我们问“张三这个人的根本特点是什么?”,而回答是“张三有175厘米高”一样。这种答案虽然是正确的,但意义不大。因为我们无法从答案中推导出一系列有用的结论。

 

那这个问题该如何回答呢?这就要看我们对这个世界上事物的观察到什么程度。如果我们仔细看看身边的事物,就会发现所有的东西可以划分为两类:一类是本来就存在于自然中,人类所做的只不过是发现;另一类本来并不存在,人类所做的是发明。第一类事物我们称之为神造事物或者自然存在的事物,第二类事物当然就是人造事物。从这个思维模式上看,计算机毫无疑问就是人造事物。而这正是我们所需要的答案。即计算机的根本特征是“人造。”

 

引申一下,我们可知计算机学科就是一个人造学科。那么知道计算机学科是人造学科对我们学习计算机有什么帮助呢?有,太多了。下面我们来看看人造和神造有什么区别。

 

人造学科的四个特点:

1.         不精确、具有相对性

2.         从对人类活动的观察而导出

3.         依赖于人的主观判断力

4.         通常符合人的直觉

 

第一个特点说白了就是所谓的“没有对错”。在人造的学科里,没有什么绝对的对或者错,而只有所谓的“好”或“坏”,或者“有意义”和“没意义。”例如,如果本书在讨论计算机时某个方面论述得与你见到的计算机不一样,这不说明本书错了。就算世界上没有本书所论述的计算机存在,也不说明本书错了。我们只需要按照本书的论述再造一台计算机即可。但是,本书论述的计算机与你知道的计算机之间可以进行好和坏的比较。

 

第二个特点说的是人造学科是从什么得到灵感的,那就是对人类活动的观察。这样,读者只要对人类生活仔细观察,就可以容易地理解计算机里面的很多原理。例如,在操作系统里面广泛使用的栈和队列就是从生活中观察到的现象进行抽象所获得,图1-1

 

OSPrinciple2-2

1-1 从观察人类活动而获得的栈和队列结构

 

第三个特点说的是在人造学科里,人的主观能动性起到关键的作用。不同的人虽然可能观察到同样的现象,但得出的结论或抽象出的东西不见得一样,甚至完成相反。这样,多数人所认同的抽象就将成为人造学科里的标准。即存在所谓的少数服从多数的原则。

 

第四个特点说的是人造学科里面的许多原理与人的直觉直接呼应,即如果我们按照人的直觉去理解这些原理,则会十分直截了当。例如,操作系统里面的同步机制与人类男女谈恋爱时所用的约会机制十分相似。对于一个谈过恋爱或与别人约会过的人来说,如果将自己谈恋爱的直觉用在操作系统进程的学习上,就会发现进程同步是个十分容易理解的概念。

 

相对人造学科,自然存在的,或神造学科刚好具有相反的四个属性:

1.         精确、绝对

2.         从对自然存在的观察而导出

3.         不依赖于人的主观判断力

4.         通常违反人的直觉

 

第一个特点说的是神造的事物具有精确、绝对的属性。对于这种学科,存在正确与错误之分,我们提出的观点要么正确,要么错误,不存在中间。例如,纯数学领域的各种运算如22的结果应该是4。如果运算的结果不是4,则属于运算错误。

 

第二个特点说的是人类对这些事物的理解是从对自然存在的观察中获得。例如,牛顿通过观察苹果落地的自然现象和严密的推理,得出了万有引力定律。

 

第三个特点说的是这些观察的结果是不依赖于人的主观能动性的。这里说的是,如果一个人的观察是正确的话,她的观察将和所有观察正确的人的结果一样,而绝不会是两样。从另外一个角度说,一个人的观察抽象结果是可以被他人验证的。例如,30,000,000,000+ 20,000,000,000对于任何人来说,如果计算正确,则结果必然是50,000,000,000

 

第四个特点说的是如果我们按照人的直觉或直观感来学习,就会面临重重困难。因为人的思维与神不一样。自然,按照人的思维模式将很难理解神所创造的这一切。这就是为什么在这些学科耕耘的人都必须依赖灵感的出现,和严密、一丝不苟的数学与逻辑推理。

OSPrinciple2-3

1-2 从观察自然存在和严密的数学推理而获得的质能方程

 

明白了计算机是人造事物,操作系统是一个人造的系统,我们就可以按照人造物的特点来进行学习,从而易如反掌地掌握操作系统的原理。

 

1.3    程序是如何运行的

 

计算机程序是怎样运行的呢?对于多数人来说,或多或少地知道任何程序首先必须得有人写出来,即所谓的编程。然后放到计算机即可运行。这种解释当然是过于简单了。计算机程序的运行实际上是一件十分复杂的事情,牵扯到方方面面。

 

首先当然得进行编程,而编程需要计算机程序设计语言做基础。对于绝大多数编写程序的人来说,使用的编程语言是所谓的高级程序设计语言,如C, C++, JAVA等。但由于计算机并不认识高级语言编写的程序,编好的程序需要进行编译而变成计算机能够识别的机器语言程序,而这需要编译器和汇编器的帮助;再其次,机器语言程序需要加载到内存形成一个运动中的程序,即我们所称的进程,而这需要操作系统的帮助。而进程需要在计算机芯片即CPU上执行才算是真正在执行,而将进程调度到CPU上运行也由操作系统完成;最后,在CPU上执行的机器语言指令需要变成能够在一个个时钟脉冲里执行的基本操作,而这需要指令集结构和计算机硬件的支持。而整个程序的执行过程还需要操作系统提供的服务和程序语言提供的执行环境(所谓的Runtime Environment)。这样,一个从程序到微指令执行的整个过程就完成了。图1-3所示的就是这个过程。

OSPrinciple1-3

1-3 由程序到结果的演变

 

当然了,图1-3描述的从程序到结果的过程演变还是过于简单。我们只是从一个线性的角度来看程序的演变过程,而没有考虑到各种因素之间的穿插和交互过程。不过,对于才入门的计算机专业学生来说,这种描述能够帮助理解整个程序是如何在计算机上执行的问题。

 

从这个描述里可以看出:程序的运行至少需要如下4个因素:

1.         程序设计语言

2.         编译系统

3.         操作系统

4.         指令集结构(计算机硬件系统)

 

而这4个因素都将是大学学习的专业课程。这里的需要注意的是,操作系统在程序的执行过程中具有关键的作用,本书要做的就是要阐述这个关键作用是如何发挥的。

 

这里需要提请注意的是,图1-3给出的程序执行过程是从高级语言编写的程序开始。而这并不是总是这么回事。事实上,程序可以直接在机器语言或汇编语言上编写。在这种被称为“低级”的语言上编写出来的机器语言程序无需经过编译器的翻译就可以在计算机指令集上执行。如果是在汇编语言上编写的汇编程序,则只需要经过汇编器的翻译即可加载执行。

 

1.4 什么是操作系统?

 

操作系统这个术语听上去稀松平常,并不给人任何兴奋的感觉,甚至有点俗气。很多人一听操作系统这个名字就感到腻味。原因在于中文的“操作”这个词:提到操作员,通常让人想起操作车床、磨床和起重机的穿着油腻工作服的工人。自然让人兴奋不起来。而将英文的Operating翻译为中文的“操作”则是因为翻译的人没有理解英文Operating Systems这个名字所蕴含的精髓。

 

那么英文的Operating Systems意味着什么呢?

 

各位见过手术过程吗?在手术室里,主刀大夫被称为Operating Surgeon。也就是我们俗话说的操刀手。在整个手术过程种,主刀大夫具有至高无上的权威:她说要打麻药,麻醉师变得赶紧打麻药;她说需要手术钳,助理大夫就赶忙递给她手术钳;她说需要止血,护士就得忙不迭的拿止血药棉来止血。整个手术最关键的部分,切开皮肤、拿掉器官、安装移植器官等均有操刀手完成。当然,主刀大夫有时候也会将某些任务如缝合创口,交给助理大夫或护士来做,但整个手术的过程皆由其主控。一句话,Operating Surgeon就是掌控整个手术过程、具有精湛技术和敏锐判断力的医师。

 

引申至非医学领域,Operating Person就是操刀手,就是掌控事情的人。再将Person这个词换成System,则指的就是掌控局势的一种系统。也就是说计算机里面的一切事情均由Operating Systems来掌控。那么,我们现在面临两个问题:第一个问题是操作系统到底是什么东西?第二个问题是操作系统到底操控什么事情?

 

我们先回答第一个问题。

 

既然操作系统是掌控计算机局势的一个系统,自然是一个重要的东西。但这个说法并不能帮助读者理解操作系统,也无法形成什么有形的概念。如果我们换个说法:操作系统是一个介于计算机和应用软件之间的一个软件系统,则概念就具体多了。从这个定义出发,我们知道操作系统的上面下面都有别的东西存在:下面是硬件平台,上面是应用软件,如图所示:

 

OSPrinciple1-1

1-4 操作系统上下界面

 

 

再回来说Operating Systems。我们现在知道它代表的是掌控事情的系统。掌控什么事情呢?当然是计算机上或计算机里发生的一切事情。最原始的计算机并没有操作系统,而是直接由人来掌控事情,即所谓的单一控制终端、单一操作员模式。但是随着计算机复杂性的增长,人已经不胜任直接掌控计算机了。于是乎我们编写出操作系统这个“软件”来掌控计算机。将人类从日益复杂的掌控任务中解脱出来。这个掌控有着多层深远的意义。

 

首先,由于计算机的功能和复杂性不断发生变化(趋向更加复杂),操作系统所掌控的事情也就越来越多,越来越复杂。同时,操作系统本身能够使用的资源也不断增多(如内存容量)。这是早期驱动操作系统不断改善的根本原因。

 

其次,既然操作系统是专门掌控计算机的,那么计算机上发生的所有事情自然需要操作系统的知晓和许可,未经操作系统知情和同意的任何事情均被视为非法事情,也就是病毒和入侵攻击所试图运作的事情。作为操作系统的设计人员,我们当然要确保计算机不发生任何我们不知情或不同意的事情。但是人的能力是有限的,人的思维也是有缺陷的,自然我们设计出的系统不会是十全十美,自然也是有缺陷的。这就给了攻击者可乘之机。操作系统设计人员和攻击者之间的博弈是当前驱动操作系统改善的一个重要动力。

 

再其次,掌控事情的水平有高低之分,有效率不同之分。就像手术大夫之间也有水平高低、价钱贵贱之分。为了更好的掌控事情,为了更好的满足人类永不知足的各种越来越苛刻的要求,操作系统自然需要不断改善。这种改善是过去、现在、和将来都会继续的。

 

好了,说到这里,我们可以给操作系统做一个定义了:

 

1.  操作系统是一个软件系统

2.  操作系统使计算机变得好用(将人类从繁琐、复杂的对机器掌控的任务中解脱)

3.  操作系统是计算机运作变得有序(操作系统掌控计算机上所有事情)

 

合并起来我们有:

 

操作系统是掌控计算机上所有事情的软件系统。

 

从这个定义可以引申出操作系统的功能包括:

1.  替用户及其应用管理计算机上的软硬件资源

2.  保证计算机资源的公平竞争和使用

3.  防止对计算机资源的非法侵占和使用

4.  保证操作系统自身正常运转

 

1.5 魔幻与管理

将上面所陈述的操作系统功能进行提升,我们可以得出操作系统所扮演的两个根本角色是管理者和魔幻家。只要记住了这两个角色,就差不多明白了操作系统是什么东西。

 

魔幻家角色:

将计算机以一个更加容易、更加方便、更加强大的方式呈献给用户使用。直白地说,就是把差的东西变好,把少的东西变多,把复杂的变为容易。例如,如果在裸机上直接编程是很困难的,因为各种数据转移均需要用户自己来控制,对不同设备要不同命令来驱动,而这对一般人很难胜任。而操作系统将这些工作从用户手中接过来,从而让用户感觉到编程是一件容易的事(相对来说,编程对于有些人来说永远很难)。

 

2008271020431098

1-5 操作系统就是一个魔幻师(Illusionist

 

操作系统通过进程抽象让每一个用户感觉到有一台自己独享的CPU;通过虚拟内存的抽象,让用户感觉到物理内存空间具有无限扩张性等。这就是把少变多。当然,操作系统的把少变多不是无中生有,只有神能够无中生有。而变多也不是无限多,只是可以到磁盘容量的大小。

 

管理者角色:

管理计算机上软硬件资源也。例如,操作系统对CPU、内存、磁盘等的管理,使得不同用户之间、或者同一用户的不同程序之间可以安全有序的共享这些硬件资源。那怎么让用户很好地利用这些硬件资源?就是parcels out,即分块,把硬件分块出来给应用程序使用。这里关键的原则是有效和公平,这是管理者的必备素质。有效指的是不能浪费资源,公平指的是每个人都有享有资源的可能,即不能有不公平的现象。当然真正的公平是没有的事,这很像人类生活的现实。不过追求公平却是我们的本能,在虚拟世界里尽可能公平一点还是非常应该的,至少应该是操作系统设计时的不懈追求。

 

根据管理的资源不同,操作系统具体功能包括:

1.  CPU管理,即如何分配CPU给不同应用和用户。

2.  内存管理:即如何分配内存给不同应用和用户

3.  外存管理:即如何分配外存(磁盘)给不同应用和用户

4.  I/O管理:即如何分配输入输出设备给应用和用户

 

除了对上述资源进行管理和抽象外,操作系统作为掌控一切的软件系统,其自身必须是稳定和安全的,即操作系统自己不能出现故障。因此,操作系统本身的设计还需包括如下两项:

 

5.  健壮性管理:即如何确保操作系统自身的正常运作。

6.  安全性管理:即如何防止非法操作和入侵。

 

为完成上述所列的功能,操作系统设计人员构思了许多机制。而所有这些机制均有其来龙去脉,其背后隐含的是人的哲学思维。我们这门课就是要讲解操作系统后面哲学原理,并依据这些哲学原理阐述操作系统是通过何种机制、以何种方式完成上述列举的各种管理功能的。

 

1.6 用户程序与操作系统

我们在前面说过,操作系统上下分别是虚拟机器界面和物理机器界面。处于物理机器下面的是硬件,而硬件和操作系统的关系将是本书的关注点。处于虚拟机器界面上面的是应用软件,而应用软件和操作系统的关系则不是本书的重点,而是系统编程或底层编程等课程的关注点。在这里,我们只想来简要讨论一下应用程序和操作系统的关系。因为这个关系对理解操作系统非常重要。

 

那么,操作系统和应用程序之间是个什么关系呢?很显然,操作系统为用户程序提供了一个虚拟机器界面,而应用程序运行在这个界面之上。但这个答案似乎太抽象。并不能帮助深入理解它们之间的关系。我们前面讲过,操作系统是一个程序,而用户程序也是程序,程序和程序之间能有什么关系呢?无非是调用和被调用的关系。

 

那操作系统和用户程序之间到底谁是调用者,谁是被调用者呢?答案似乎很清楚:操作系统通过虚拟机器界面给用户程序提供各种服务,用户程序在运行过程中不断使用操作系统提供的服务来完成自己的任务。例如,用户程序在运行过程中需要读写磁盘,这个时候就需要调用操作系统的服务来完成磁盘读写操作;如果需要收发数据包,也需要调用操作系统的服务来完成。在调用这些服务时,控制从用户程序转移到操作系统,而操作系统在完成这些服务后将可控制返回给用户程序。即在这种思维模式下,用户程序是主程序,而操作系统是子程序,如图1-6所示。

OSPrinciple1-7

 

1-6 用户程序为主程序,操作系统作为子程序

 

但是有正就有反,这就是哲学中的矛盾论。如果我们从另一个角度来看,会得出相反的结论。系统启动之后最先启动的是什么程序?操作系统。用户程序不能在操作系统启用之前启动(除非是很厉害的病毒)。在此之后,每次启动一个用户程序,都相当于操作系统将控制转移给用户程序;而在用户程序执行完毕后,控制又回到操作系统。这样看上去,操作系统是主程序,它在一生当中不断调用各种应用程序,而每个应用程序执行完之后再回到操作系统。就这样循环往复,直到无穷或机器关闭。在此种思维模式下,操作系统是主程序,用户程序是子程序,如图1-7所示。

OSPrinciple1-6

1-6 操作系统为主程序,用户程序作为子程序

 

上述两种看法完全相反,但又似乎都有道理,有谁对谁错之分吗?没有。我们说过,人造学科没有对错之分,只有好坏之分。你喜欢哪个观点你就持那种观点,那个观点帮助你理解操系统,你就持那种观点。如果两种观点都有帮助,你可同时持有两种观点。

 

当然了,上述关系描述是非常简单化的。实际上,操作系统和各种用户程序可以看作是互相调用,从而形成一个非常复杂的动态关系。了解并阐述这种复杂的动态关系就是本书的目的。

 

1.7 操作系统的范畴

我们前面讲过了操作系统的两个角色:魔幻师和管理者。这两个角色之间既有区别,又有联系。为了完成不同的任务,有时需要扮演魔幻师的角色,有时需要扮演管理者的角色,有时则需要同时扮演这两个角色。那操作系统要完成的任务具体有哪些呢?前面提到过:

1.         CPU管理,即如何分配CPU给不同应用和用户。

2.         内存管理:即如何分配内存给不同应用和用户

3.         外存管理:即如何分配外存(磁盘)给不同应用和用户

4.         I/O管理:即如何分配输入输出设备给应用和用户

 

CPU管理就是我们将要讲的进程管理。进程管理的主要目的有三个:一个是公平,即每个程序都有机会使用到CPU;一个非阻塞,即non-blocking。这一点说的是任何程序不能无休止的阻挠其它程序的正常推进。如果一个程序在运行过程中需要输入输出或者别的什么事情而发生阻塞,这个阻塞不能妨碍别的进程继续前进。就像人类世界,缺了谁都不影响地球照样旋转。第三是优先级。在人类生活中人的地位不是完全一样的,地位高的就比你优先级高。人类把自己生活中的这种关系搬到操作系统里面,就有了所谓的优先级的概念。即某些程序比另外一些程序优先级高。如果高优先级的程序开始运行,则低优先级的程序就要让道,即让出资源。就像我们经常说的,我们坚决反对大锅饭,应该让一部分人(程序)先富起来。

 

内存管理主要是管理缓存、主存、磁盘、磁带等存储介质所形成的内存架构。为此目的,操作系统设计人员发明了虚拟内存的概念:即将物理内存(缓存和主存)扩充到外部存储介质(磁盘、光盘、和磁带)上。这样内存的空间就大大的增加了,能够运行的程序的大小也大大的增加了。内存管理的另一个目的是让很多程序共享同一个物理内存。这就需要对物理内存进行分割和保护,不让一个程序访问另一个程序所占的内存空间,计算机行话称之为运行时不能越界。在生活中,就是我家的东西不希望你跑来拿。

 

存储管理就是众所周知的文件系统了。文件系统的主要的目的是将磁盘变成一个很容易使用的存储媒介提供给用户使用。这样我们在访问磁盘时无需了解磁盘的物理属性或数据在磁盘上的精确位置,诸如磁道、磁柱、扇面等。当然,文件系统还可以建立在光盘和磁带上。只是使用最为频繁的文件系统都以磁盘为介质。

 

设备管理就是管理输入输出设备。其目的有两个:一是屏蔽不同设备的差异性,即用户用同样的方式访问不同的设备,从而降低编程的难度;二是提供并发访问,即将那些看上去并不具备共享特性的设备如打印机变得可以共享。

 

批处理则提供一种无需人机交互的程序运行模式。有时我们不需要人来交互,就批处理交给计算机。主要是要达到吞吐量最大化,单位时间完成的任务最多。图1-8描述的是操作系统的5个核心功能。

OSPrinciple1-8

1-8:操作系统的5个核心构件

 

当然,在真实的操作系统里,上述5个核心部件不一定界限分明,甚至他们不运行在同一个态势下(本书后面将说明这点)。图1-9描述的是Windows操作系统简化了的结构。

 

OSPrinciple1-9

1-9Windows操作系统系统结构图

 

 

1.8为什么学习操作系统?

到目前,本书论述了操作系统是什么,操作系统的主要任务,和操作系统与用户程序的关系后,读者应该体会到操作系统的重要性。但仅仅是因为操作系统重要就要学习它吗?世界上重要的东西多了去了,难道我们都要学吗?即使是计算机专业的学生,不学操作系统也照样可以编程写软件。那我们为什么要学呢?当然我们有一千个理由要学,但这里仅给出几个。

 

首先,操作系统的功能在很多领域都使用。如果你做并发程序的开发,Web Service,分布式系统,网络,你会发现,这些领域大量使用了操作系统的概念和技术。如果你学好了操作系统,你就可以对你做的事情更加有信心。

 

其次,操作系统的技巧也在很多领域使用。如抽象,缓存,并发等。操作系统说白了就是实现抽象:进程抽象、文件抽象、虚拟存储抽象等。而很多领域也使用抽象。如数据结构和程序设计就大量使用了抽象,记得抽象数据类型吗?记得抽象类吗?很多地方都用缓存。你做web要不要做缓存呢?这些你都得做。如果学了操作系统,你就掌握了这些。触类旁通,你学习别的东西时就容易多了。

 

不过最重要的理由并不是上面的两条,而是操作系统真的很有意思。对于一个计算机专业的人来说,难道不想知道自己写的程序到底是如何在计算机运行的吗?读者一定见过汽车吧。汽车前面那个盖子叫前盖,英语称为Hood。很多人买车后第一件事是什么?打开前盖。那么打开前盖看到的是什么东西?马达,变速箱。为什么第一件事要打开前盖呢?因为好奇这辆汽车是怎么开动的。

 

那么对于一个程序设计员来说,有没有在看到一台计算机的时候,想过为什么计算机能进行计算?有没有买来一台新计算机后就打开盖子的?多数人恐怕没有打开过计算机外壳。不过,没有打开过也不用遗憾。即使你把计算机后盖打开,还是不能明白计算机是怎么运转的。因为你只看到一堆硬件:芯片、主板、布线等。而这些硬件并不会告诉你太多有关计算机运转的信息,如果想真的知道计算机是怎么运转,你就得学操作系统。当然,如果你想知道计算机在硬件层面上是如何运转的,则还应该学习计算机组成和体系结构等课程。

 

虽然学习操作系统很有趣,但并不是所有人都有这样的感觉。历史证明,对很多人来说学操作系统是一件很痛苦的事情。不过我希望阅读本书对读者来说是一件乐事,难道窥探奥秘不是一件激动人心的事吗?

sub_under_the_hood_1

1-10 学习操作系统就是揭开覆盖在计算机上的前盖

 

思考题:

1.         什么是操作系统?请用一句话描述你对操作系统的理解

2.         你对操作系统和用户程序之间的关系有何看法?阐述你的视角。

3.         简要列出操作系统覆盖的范畴及每个范畴的核心内容

4.         你为什么要学习操作系统?与本书列出的理由相同吗?简要阐述你的动机。

5.         操作系统要对不同的部件进行管理,请论述这些管理之间的异同点。

6.         设备管理要达到的目的是什么?

7.         有人说设备管理软件(设备驱动程序)因为经常由第三方提供,因此不应该作为操作系统的一部分。你对此有何看法?你认为应该如何判断一个软件是否属于操作系统?

8.         请列出程序执行过程中操作系统的介入情况。

9.         我们说操作系统是人造学科,根据是什么?

10.人造学科的特点是什么?它对我们学习操作系统有何帮助?

原创粉丝点击