KEY:操作系统
操作系统是什么?它的本质是什么?操作系统是集策略和机制( policy and mechanism)、法则与无法则(algorithm and heuristic)和思想理论与实践经验于一身的高度复杂的混合物(mixtures)。本手册(vade mecum)尝试揉合对操作系统的各种不同观点,一步一步地引导初学者掌握这个计算机科学最复杂的主题。
操作系统主题内容之广以及独立内容之多,以致于学生和教师常常只关注局部而忽视统览全局的思想。我希望通过本书提出的双重思想——资源管理思想(resource management )和美化思想(beautification),矫正这种情况。
(KEMIN:所谓的揉合各种观点其实是抽象出操作系统最一般的理论,指出操作系统的本质)
To unify disparate threads of discussion, I have taken the liberty(随意, 冒失, 冒昧, 失礼 ) introducing names for recurrent themes and glorifying( 赞美, 赞扬, 美化) them with the title "principles", I hope that this organization and nomenclature(命名法, 术语, 专门语) will help the reader to understand the subject better and to integrate new ideas into the same framework.
I have striven to use a consistent nomenclature throughout the book. At times this nomenclature is at odds(可能的机会; 优势; 成败的可能性 ) with accepted American practice. For example, I prefer to call computer memory ‘‘store.’’ This name allows me to unify the various levels of the storage hierarchy, including registers, main store, swap space, files on disk, and files on magnetic tape. I also prefer the single word ‘‘transput’’ to the clumsier(笨拙的, 粗陋的, 不雅观的) but more common term ‘‘input/output.’’ Although I found this term jarring(刺耳的; 辗轧的; 不和谐的 ) at first, I have grown to like it.
没有实践项目的操作系统课程是不完整的。但是这个练习必须在软件上有实质性的投入(substantial investment),比如实现操作系统的部分功能。可以在课堂上通过良好定义的模块和接口给出完整的操作系统功能结构,然后为同学们设置作业,内容是用自己的设计实现这些模块。一个没那么雄心勃勃的项目是首先让学生为虚拟机写一个简单的调度程序。完成后可适当再优化它,比如添加虚拟内存、输入输出和其它功能。
在本书中,我小心认真的区分了机制和策略的关系。机制是执行事务的技术;策略是决定执行何种事务的规则。机制是操作系统的螺钉和螺母(nuts and bolts), 就是基本零件, 基础部分。而这些机制的种类和多少还取决于操作系统所运行的硬件体系。
KEMIN:请用“机制是一种人造性质”来再理解一下上面这段话,并参考这里 。
操作系统的结构和行为那么的复杂,它的本质是什么?我们通过给出两种不同的操作系统定义,希望给读者把握操作系统本质的一些提示。第一个定义叫资源原则(Resource Principle. ),第二是美化原则(Beautification Principle)。此外,我们还会介绍一项对操作系统非常重的结构化思想——层级原则(Level Principle)。
以下是资源原则的内容:
操作系统是一组分配资源给进程的算法。
资源是什么?资源是完成工作或事务必须的物品(commodity)。计算机硬件提供了很多完成计算事务的基本(fundamental )资源。我们知道,程序必须保存在主存、必须由CPU执行和一定的输入输出操作,可以把计算机硬件提供的基本资源理解成空间、时间和数据传递(transput)三类。
除了基本的原始的资源外,操作系统还引入一些新资源和一些对基本资源加工过的资源。比如,文件资源、管道资源和邮箱资源。
进程的概念是操作系统的核心,是出了名的(notoriously)难定义。一种粗浅的理解是,进程是程序的一次动态执行,是程序完成一次任务所需的资源的载体。我们可以把进程比喻成在戏剧院表演独角戏的演员,对于演员,舞台小道具就是他的资源。当演员需道具时,他到道具管理处(相当操作系统的资源分配程序)申请。由于资源是对所有演员共享的,管理处的工作就是当多个演员申请道具时代为解决资源竞争问题,满足两个冲突的目标:
KEMIN:由于各种资源(包括包装过的高级资源)的性质不一,所以对它们的[管理]方式都不一样的,从管理手段的名称就可看出这一点,处理器是[调度]的,主存是[分配]的。但从完成管理功能的高度看,它们都有实现管理的部分和如何管理的部分,实现管理就是机制问题,如何管理就是策略问题。比如,处理器的调度机制(必须有timer和进程切换指令等体系功能的支持)和调度策略。
另外,管理处也要对戏剧院的主人负责,职责目标有:
我们已经看了操作系统的资源原则的定义,现在我们来看看操作系统的另一个同样重要的定义——美化原则(Beautification Principle)。
操作系统是一组隐藏硬件细节和提供更亲切舒适环境的算法。
隐藏硬件细节是为了达到两个目标。
虽然操作系统与一般进程以相似的形式运行于主存,但作为资源分配者和虚拟环境支持者,内核进程与一般应用程序进程有明显安全边界。操作系统与硬件有亲缘性,从操作系统运行在CPU的核心态,能看见CPU的控制和状态寄存器就可以看出这一点。如果按严格的逻辑分层,应用程序进程与内核进程位于不同的逻辑层级。但由于成本、效率和灵活性,操作系统没有完全硬件化,CPU的可软件化的部分也是万分的设计过。另外,由于应用程序进程必须使用硬件资源才能完成事务(比如输入输出),两逻辑层级必须有接口。
操作系统不但是个资源的分配者,而还是资源的包装者,把低级的原始的资源打包成高级的虚拟的资源。这种打包称为抽象。操作系统和其它抽象支撑软件(比如编译器)一样,负责抽象的实现。这种抽象的目的很简单,为上层(比如进程)提供一个虚拟操作环境。虚拟环境在不同语境有不同的理解,谈进程调度时叫资源;谈具体编程(C语言虚拟机)时叫高级指令、库函数调用;谈系统结构时叫服务(services )……
KEMIN:如果从系统(元素、属性和关系)的角度看,抽象总是出现两个不同层次系统的边界,高级别层次的系统的演绎(工作、活动或事务)总是依赖于低级别层次的系统提供的抽象。这种依赖不完全是硬性的,为的是折中效率(好比一家公司有不同级别的职位,各司其职,下属听从指挥,协调合作才发挥团体的效能)
KEMIN:个人认为把美化原则划分安全和抽象不是合适的,会造成概念上的混乱。作者的这种划分的目的是想强调OS与硬件的特殊关系,强调OS是运行在特权级下的软件。但细心想想,安全到底是什么?安全是保证抽象的正确实现,它是抽象的一部分,把安全与抽象并列是不对的,会造成分类上的混乱。
b. 差点忘记开发驱动程序其实就是开发操作系统。所以把计算机系统分成汇编语言层和操作系统层这种混合方式是不清晰的。不过如果光以编程语言(也就是指令,或者叫命令)来结构化分层化计算机系统是不充分的,因为有很多实现机理(如中断机制)不属于编程语言概念,但是开发者却必须在开始工作前了解这些机理知识。 2009-6-3 10:15
b.现在很多计算机组成与体系结构方面的图书在划分计算机层次结构时,都把操作系统(系统软件和代码库)划分独立一层,介于汇编语言层和ISA层,我认为这种划法是不合适的。我认为只能按语言的抽象级别来划分才能清晰地把握计算机的层次结构。不过操作系统的角色的确不可忽视。OS很特殊,还有一个东西也很特殊,就是编译器。在为计算机分层时,OS和编译器应该独立出来再定性分析……2009-6-15 1:45
b.进程、线程、纤程和分布式任务都是“计算任务”,从纵向看只是粒度不同,从横向看会有任务性质的不同(比如管理任务和被管理任务),这些理解都不是十分难。但是加上个处理器实现和操作系统实现,问题的复杂度好像增加了一个数量级。这是什么现象?抽象的“计算任务”需要一个具体的物理载体来实现。如果我们把计算机系统分层,那么硬件的操作模式是一个比较明显的分隔线,分隔任务与实现。但是作为软件的操作系统却在实现的一层。可见操作系统与CPU有着相当的紧密的关系。 2009-5-3 13:05
o b.今天最大收获就是弄清了操作系统、应用软件与编程语言三者间的关系。纵向看,操作系统与应用软件都是软件产品,程序语言是构造它们的工具。操作系统比应用软件抽象级别低,使用更靠近硬件的低级语言构造;横向看,三者都是按工程需要开发设计的信息产品,只是编程语言更抽象一级,属于“方法论”级别。 2009-3-6 19:15
b.用电脑多了会有种错觉,以为计算机屏幕上跑了好多不同的程序,包括也以为操作系统也一个独立运行的程序。事实上,这种不同只存在于不同的应用程序之间,操作系统在逻辑上是应用程序的一部分。如果这种假设成立,那么有个概念很难理解,就是到底什么叫运行? 2009-4-9 20:04
b.之所以很理解应用程序和操作系统是“运行”的同一体,是因为操作系统具体双重角色。操作系统在作硬件的扩展一面是与应用程序一同“运行”;在作为资源管理一面则是管理应用程序,有自己的“运行”…… 2009-4-9 21:37
b. 操作系统与应用程序是“运行”的同一体可以从操作系统提供的DLL看出来。这些DLL都是操作系统提供的服务的具体代码,应用程序运行时要将其映射入地址空间,一并“运行”。可“运行”的计算机系统被模块化成很多部分。硬件、系统软件和应用软件是其中最主要的三个部分。 2009-4-10 11:47
a. 宗教有什么用?哲学有什么用?原来它们的都属“监管”范畴。这两天研究操作系统,发现计算机世界充满了监管的概念。并联想到各个领域只要涉及管理的都有一个额外的管理机构在作用着。比如,政治里的司法,人生中的宗教;而操作系统的CPU、内存、设备管理都有一个额外的负责管理的执行程序。 2009-4-11 19:57
b.总结一下这两天对操作系统研究。操作系统在计算机系统中的主要功能管理硬件资源,而这些管理功能目的是为了实现多道程序的运行。操作系统管理计算机系统的三大主要硬件:处理器、内存和外部设置;管理模块分别叫处理器管理(也叫进程管理)、内存管理(也叫虚拟内存管理)和设备管理。另外,硬盘除作为设备管理(硬盘储存设备,相对于其它的输入输出设备)外,由于具体计算的额外需要--数据的文件持久化,并且文件管理的复杂性,另设第四项管理,文件管理。 2009-4-14 22:51