欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

操作系统系列之概述 OS虚拟机电信数据结构多线程 

程序员文章站 2022-07-12 17:33:28
...
对操作系统的研究已经很久了,一直以来比较喜欢这方面的东西,从现在开始,我要把我所了解的OS的各个方面一一描述出来。基本的描述风格事先抽象后具体,先轮廓后细节。

OS其实是一个大家都知道一些的概念。但是我说得有可能跟传统的说法有些不一样,我按照我的思路和节奏说这些问题。希望大家多提意见。

说到OS,一定要先从冯诺依曼抽象机器说起。冯诺依曼机器是图灵机器加上程序存贮这个特性形成的。冯氏机器本身也像图氏机器一样,并没有规定IO,但是根据系统论的基本原理,我们知道一个系统如果是封闭的,那么就是不可知的,没有什么价值的,所以,现代的计算机都配备有大量的IO部件。不过虽然IO部件非常之多,但是由于我们的抽象机器是冯诺依曼机器,所以,我们研究OS的时候并不分多少精力给IO。当然,我也会讲到IO的。

有了计算和存储这两类基本的部件,我们的计算机系统基本上就算是有了基础了,冯氏机器的存储程序特性这时候就要大放光彩了!计算机相较之以前的其他机械,最显著和诱人的特性就在这儿体现——程序存储。以前的机械都是死的,固定的特性,而自从引入程序存储,计算机这个机械就开始越过了龙门,升入九天了。

我粗略的说说程序存储吧。程序就是一堆指令,这些指令可以指导计算机的运算部件干活,它们会被放到计算机的存储部件中。同一个计算机,给它不同的程序,它就会表现出不同的特性。

有了冯诺依曼机器,我们就可以设计我们的程序,让计算机实现它存在的价值了,不过且慢,这里面有一些问题需要解决。

语义鸿沟。
对于我们的问题,我们可以用人类语言描述之,甚至可以描述得很清楚,可是计算机并不懂得我们描述问题所用的语言。在计算机看来,问题很简单,所有的问题不外是加减乘除逻辑运算等。这里有一个巨大的鸿沟。

复杂性问题。
这个前面的语义鸿沟有点关系,如果我们直接管理和控制冯诺依曼机器让它干我们希望它干的活,就会出现复杂性问题。这个问题会让人抓狂的。因为心理学家研究发现,一个人同时可以关注的事情是有限的。

好,有了上面的东西垫底,我们可以讨论问题了。

按照习惯,先明确几个必要的概念。:)
没有提到的概念要么大家都很清楚,要么可以查我原来的blog。

接口:一个系统跟外界交互的通道,接口定义一套语言。通过这套语言可以跟接口后面的系统交互。

语言:一套表意的体系结构,它可以而且必须用一定的方式承载,不同的系统提供不同的语言机制。举个简单的例子:杠杆的语言是:你用力往下压(告诉它一个信息),它帮你把某物撬起来。当然,杠杆很简单了,一般来说,越复杂的系统的语言符号越丰富,表达的方式也越多样化(不仅仅是简单的机械力,可能是电磁波,声波……什么的)。对于人这个极端复杂的系统,语言就是我们常说的人类语言了。它(人类语言)的体系恢宏壮丽,词汇、语法、惯用法、……无穷无尽的范畴。它的表达方式是声音,图形(印刷在纸上的文字),……也是多种多样的。一般我们跟计算机交互的时候都是采用的语言都隐喻成人类语言的:)。计算机的语言通道(也就是接口)有输入和输出两大类,其中,输入是我们对计算机的控制,输出是计算机对我们的回馈。抽象的计算机,输入和输出都是电信号,也就是电子的流,所以叫做电子计算机:)。

前面说了,冯诺依曼计算机面对的问题就是可计算性问题,简单而不精确地说,就是算术和逻辑运算问题。所以,它的语言(也就是他的接口可以理解的交流方式)也是比较简单的,主要就是算术和逻辑运算以及一些控制计算机本身的电子信号序列。由于我们人类很难通过这种手段直接跟计算机交互(你能发出0.0032v 的电流0.00002ms么?),所以我们一般给计算机配上各种输入输出的适配器,比如:键盘,鼠标,显示器,打印机,扫描仪……。其实,他们很多也都是经过别的适配器一层一层的适配到计算机主体上的。

就算我们有了IO适配器,我们也不想这样跟计算机交互,想想我前面描述的两个问题,语义鸿沟问题和复杂性问题。所以我们需要一个中间层次,我们通过这个中间层次所能理解的语言跟中间层次交互,而这个中间层次把我们的意图翻译成计算机所能理解的语言(也就是算术逻辑和控制)。这样,就给我们提供了一个更友好,更丰富的系统。

这个中间层次叫做OS。其实,可能会有很多别的东西,但是我这儿的焦点是OS,所以就说它了。

我们仍然从OS的接口开始看起,搞定它的基本概念。

OS主要向上层提供一个虚拟的机器,这个机器主要涉及到文件和进程(包括线程等)这两个主要概念。这俩概念其实是针对存储和计算的包装。文件包装了存储系统,进程包装了运算系统。事实证明,文件这个概念非常强大,已经推而广之到了IO空间,甚至运算空间。OS其实就是一个以进程概念为核心,以存储和文件为辅助的VM。

文件就是具名的数据。数据就是信息的编码。数据可以分成两大类,一类是被动数据性的,一类是主动指令性的。程序就是那种指令性的文件。所有的数据文件都需要被某个程序(也就是指令文件)解释才有相应的意义和表现。对人来说,数据文件是根本,程序文件是工具,对OS来说,它并不怎么关注数据文件(只要保证它们安安稳稳的呆在那儿就行了),它关注的是程序文件。

我们下一节就讲讲OS跟程序之间的关系。