操作系统系列之概述 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跟程序之间的关系。
OS其实是一个大家都知道一些的概念。但是我说得有可能跟传统的说法有些不一样,我按照我的思路和节奏说这些问题。希望大家多提意见。
说到OS,一定要先从冯诺依曼抽象机器说起。冯诺依曼机器是图灵机器加上程序存贮这个特性形成的。冯氏机器本身也像图氏机器一样,并没有规定IO,但是根据系统论的基本原理,我们知道一个系统如果是封闭的,那么就是不可知的,没有什么价值的,所以,现代的计算机都配备有大量的IO部件。不过虽然IO部件非常之多,但是由于我们的抽象机器是冯诺依曼机器,所以,我们研究OS的时候并不分多少精力给IO。当然,我也会讲到IO的。
有了计算和存储这两类基本的部件,我们的计算机系统基本上就算是有了基础了,冯氏机器的存储程序特性这时候就要大放光彩了!计算机相较之以前的其他机械,最显著和诱人的特性就在这儿体现——程序存储。以前的机械都是死的,固定的特性,而自从引入程序存储,计算机这个机械就开始越过了龙门,升入九天了。
我粗略的说说程序存储吧。程序就是一堆指令,这些指令可以指导计算机的运算部件干活,它们会被放到计算机的存储部件中。同一个计算机,给它不同的程序,它就会表现出不同的特性。
有了冯诺依曼机器,我们就可以设计我们的程序,让计算机实现它存在的价值了,不过且慢,这里面有一些问题需要解决。
语义鸿沟。
对于我们的问题,我们可以用人类语言描述之,甚至可以描述得很清楚,可是计算机并不懂得我们描述问题所用的语言。在计算机看来,问题很简单,所有的问题不外是加减乘除逻辑运算等。这里有一个巨大的鸿沟。
复杂性问题。
这个前面的语义鸿沟有点关系,如果我们直接管理和控制冯诺依曼机器让它干我们希望它干的活,就会出现复杂性问题。这个问题会让人抓狂的。因为心理学家研究发现,一个人同时可以关注的事情是有限的。
好,有了上面的东西垫底,我们可以讨论问题了。
按照习惯,先明确几个必要的概念。:)
没有提到的概念要么大家都很清楚,要么可以查我原来的blog。
接口:一个系统跟外界交互的通道,接口定义一套语言。通过这套语言可以跟接口后面的系统交互。
语言:一套表意的体系结构,它可以而且必须用一定的方式承载,不同的系统提供不同的语言机制。举个简单的例子:杠杆的语言是:你用力往下压(告诉它一个信息),它帮你把某物撬起来。当然,杠杆很简单了,一般来说,越复杂的系统的语言符号越丰富,表达的方式也越多样化(不仅仅是简单的机械力,可能是电磁波,声波……什么的)。对于人这个极端复杂的系统,语言就是我们常说的人类语言了。它(人类语言)的体系恢宏壮丽,词汇、语法、惯用法、……无穷无尽的范畴。它的表达方式是声音,图形(印刷在纸上的文字),……也是多种多样的。一般我们跟计算机交互的时候都是采用的语言都隐喻成人类语言的:)。计算机的语言通道(也就是接口)有输入和输出两大类,其中,输入是我们对计算机的控制,输出是计算机对我们的回馈。抽象的计算机,输入和输出都是电信号,也就是电子的流,所以叫做电子计算机:)。
前面说了,冯诺依曼计算机面对的问题就是可计算性问题,简单而不精确地说,就是算术和逻辑运算问题。所以,它的语言(也就是他的接口可以理解的交流方式)也是比较简单的,主要就是算术和逻辑运算以及一些控制计算机本身的电子信号序列。由于我们人类很难通过这种手段直接跟计算机交互(你能发出0.0032v 的电流0.00002ms么?),所以我们一般给计算机配上各种输入输出的适配器,比如:键盘,鼠标,显示器,打印机,扫描仪……。其实,他们很多也都是经过别的适配器一层一层的适配到计算机主体上的。
就算我们有了IO适配器,我们也不想这样跟计算机交互,想想我前面描述的两个问题,语义鸿沟问题和复杂性问题。所以我们需要一个中间层次,我们通过这个中间层次所能理解的语言跟中间层次交互,而这个中间层次把我们的意图翻译成计算机所能理解的语言(也就是算术逻辑和控制)。这样,就给我们提供了一个更友好,更丰富的系统。
这个中间层次叫做OS。其实,可能会有很多别的东西,但是我这儿的焦点是OS,所以就说它了。
我们仍然从OS的接口开始看起,搞定它的基本概念。
OS主要向上层提供一个虚拟的机器,这个机器主要涉及到文件和进程(包括线程等)这两个主要概念。这俩概念其实是针对存储和计算的包装。文件包装了存储系统,进程包装了运算系统。事实证明,文件这个概念非常强大,已经推而广之到了IO空间,甚至运算空间。OS其实就是一个以进程概念为核心,以存储和文件为辅助的VM。
文件就是具名的数据。数据就是信息的编码。数据可以分成两大类,一类是被动数据性的,一类是主动指令性的。程序就是那种指令性的文件。所有的数据文件都需要被某个程序(也就是指令文件)解释才有相应的意义和表现。对人来说,数据文件是根本,程序文件是工具,对OS来说,它并不怎么关注数据文件(只要保证它们安安稳稳的呆在那儿就行了),它关注的是程序文件。
我们下一节就讲讲OS跟程序之间的关系。