[OS] 现代操作系统

操作系统

现代计算机系统由一个或多个处理器,主存,磁盘,打印机,键盘,鼠标,显示器,网络接口以及各种其他输入/输出设备组成。
一般而言,现代计算机系统是一个复杂的系统。
如果每位应用程序员都不得不掌握系统所有的细节,那就不可能再编写代码了。
而且,管理所有这些部件并加以优化使用,是一件挑战性极强的工作。
所以,计算机安装了一层软件,称为操作系统,它的任务是为用户程序提供一个更好,更简单,更清晰的计算机模型,并管理刚才提到的所有这些设备。

多数计算机有两种运行模式:内核态和用户态。
软件中最基础的部分是操作系统,它运行在内核态。
在这个模式中,操作系统具有所有硬件的完全访问权,可以执行机器能够运行的任何指令。
软件的其余部分运行在用户态。
在用户态下,只使用了机器指令中的一个子集。
那些影响机器的控制或可进行I/O操作的指令,在用户态中的程序里是禁止的。

很难给出操作系统的准确定义,操作系统是一种运行在内核态的软件——尽管这个说法并不总是符合事实。
部分原因是操作系统执行两个基本上独立的任务,为应用程序提供一个资源集的清晰抽象,并管理这些硬件资源,而不仅仅是一堆硬件。
另外,还取决于从什么角度看待操作系统。

(1)作为扩展机器的操作系统
抽象是管理复杂性的一个关键。
好的抽象可以把一个几乎不可能管理的任务划分为两个可管理的部分。
其第一部分是有关抽象的定义和实现,第二部分是随时用这些抽象解决问题。
操作系统的任务的创建好的抽象,并实现和管理它所创建的抽象对象。

操作系统的一个主要任务是隐藏硬件,呈现给程序良好,清晰,优雅,一致的抽象。
需要指出,操作系统的实际客户是应用程序,它们直接与操作系统及其抽象打交道。
相反,最终用户与用户接口所提供的抽象打交道,或者是命令行shell或者是图形接口。

(2)作为资源管理者的操作系统
把操作系统看作是向应用程序提供基本抽象的概念,是一种自顶向下的观点。
按照另一种自底向上的观点,操作系统则用来管理一个复杂系统的各个部分。
现代计算机包含处理器,存储器,时钟,磁盘,鼠标,网络接口,打印机,以及许多其他设备。
从这个角度看,操作系统的任务是在相互竞争的程序之间有序的控制对处理器,存储器以及其他I/O接口设备的分配。

处理器

计算机的大脑是CPU,它从内存中取出指令并执行之。
在每个CPU基本周期中,首先从内存中取出指令,解码以确定其类型和操作数,接着执行之,然后取指,解码并执行下一条指令。
按照这一方式,程序被执行完成。

每个CPU都有其一套可执行的专门指令集。
由于用来访问内存以得到指令或数据的时间要比执行指令话费的时间长得多,因此,所有CPU内部都有一些用来保存关键变量和临时数据的寄存器。
除了用来保存变量和临时结果的通用寄存器之外,多数计算机还有一些对程序员可见的专门寄存器。
其中之一是程序计数器,它保存了将要取出的下一条指令的内存地址。
在指令取出之后,程序计数器就被更新以便指向后继的指令。

另一个寄存器是堆栈指针,它指向内存中当前栈的顶端。
当然还有程序状态字寄存器(PSW),这个寄存器包含了条件码位,CPU优先级,模式(用户态或内核态),以及各种其他控制位。

操作系统必须知晓所有的寄存器。
在时间多路复用CPU中,操作系统经常会中止正在运行的某个程序并启动(或再启动)另一个程序。
每次停止一个运行着的程序时,操作系统必须保存所有的寄存器,这样在稍后该程序被再次运行时,可以把这些寄存器重新装入。

为了改善性能,CPU设计师早就放弃了同时读取,解码和执行一条指令的简单模型。
许多现代CPU具有同时取出多条指令的机制。
例如,一个CPU可以有分开的取指单元,解码单元和执行单元,于是当它执行指令n时,它还可以对指令n+1解码,并且读取指令n+2。
这样一种机制称为流水线。
在多数流水线设计中,一旦一条指令被取进流水线中,它就必须被执行完毕,即便前一条取出的指令是条件转移,它也必须被执行完毕。
流水线使得编译器和操作系统的编写者很头疼,因为它造成了在机器中实现这些软件的复杂性问题。

比流水线更先进的设计是一种超标量CPU。
在这种设计中,有多个执行单元,例如,一个CPU用于整数算术运算,一个CPU用于浮点算术运算,而另一个用于布尔运算。
两个或更多的指令被同时取出,解码并装入一个保持缓冲区中,直至它们执行完毕。
只要有一个执行单元空闲,就检查保持缓冲区中是否还有可处理的指令,如果有,就把指令从缓冲区中移出并执行之。
这种设计存在一种隐含的作用,即程序的指令经常不按顺序执行。

多数CPU都有两种模式,即前面已经提及的内核态和用户态。
通常在PSW中有一个二进制位控制这两种模式。
当在内核态运行时,CPU可以执行指令集中的每一条指令,并且使用硬件的每种功能。
操作系统在内核态下运行,从而可以访问整个硬件。
相反,用户程序在用户态下运行,仅允许执行整个指令集的一个子集和访问所有功能的一个子集。
一般而言,在用户态中有关I/O和内存保护的所有指令是禁止的。
当然,将PSW中的模式位设置成内核态也是禁止的。

为了从操作系统中获得服务,用户程序必须使用系统调用(system call)。
TRAP指令把用户态切换成内核态,并启用操作系统。
当有关工作完成之后,在系统调用后面的指令把控制权返回给用户程序。

有必要指出,计算机使用陷阱而不是一条指令来执行系统调用。
其他的多数陷阱是由硬件引起的,用于警告有异常情况发生,诸如试图被零除或浮点下溢等。

进程

多数操作系统都使用某些基本概念和抽象,诸如进行,地址空间以及文件等。
在所有操作系统中,一个重要的概念是进程(process)。
进程本质上是正在执行的一个程序。
与每个进程相关的是进程的地址空间(address space),这是从某个最小值的存储位置(通常是零)到某个最大值存储位置的列表。
在这个地址空间中,进行可以进行读写。
该地址空间中存放有可执行程序,程序的数据,以及程序的堆栈。
与每个进程相关的还有资源集,通常包括寄存器(含有程序计数器和堆栈指针),打开文件的清单,突出的报警,有关进程清单,以及运行该程序所需要的所有其他信息。
进程基本上是容纳运行一个程序所需要所有信息的容器。

一个进程暂时被这样挂起后,在随后的某个时刻里,该进程再次启动时的状态必须与先前暂停时完全相同,这就意味着在挂起时该进程的所有信息都要保存下来。
在许多操作系统中,与一个进程有关的所有信息,除了该进程自身地址空间的内容以外,均存放在操作系统的一张表中,称为进程表(process table)。
进程表是数组(或链式)结构,当前存在的每个进程都要占用其中一项。
所以,一个(挂起的)进程包括:进程的地址空间,往往称作磁芯映像(core image),以及对应的进程表项,其中包括寄存器以及稍后重启该进程所需要的许多其他信息。

地址空间

每台计算机都有一些主存,用来保存正在执行的程序。
在非常简单的操作系统中,内存中一次只能有一个程序。
如果要运行第二个程序,第一个程序就必须被移出内存,再把第二个程序装入内存。
较复杂的操作系统允许在内存中同时运行多道程序。
为了避免它们彼此互相干扰(包括操作系统),需要有某种保护机制。
虽然这种机制必然是硬件形式的,但是它由操作系统掌控。

上述观点涉及对计算机主存的管理和保护。
另一种不同的但是同样重要并与存储器有关的内容,是管理进程的地址空间。

个体重复系统发育

一个个体重复着物种的演化过程。
在计算机的历史中,类似情形依稀发生。
每个新物种(大型机,小型计算机,个人计算机,掌上,嵌入式计算机,智能卡等),无论是硬件还是软件,似乎都要经过它们前辈的发展阶段。
计算机科学和许多领域一样,主要是由技术驱动的。
古罗马人缺少汽车的原因不是因为他们非常喜欢步行,是因为他们不知道如何造汽车。
个人计算的存在,不是因为成百万的人们有几个世纪被压抑的拥有一台计算机的愿望,而是因为现在可以很便宜的制造它们。
特别的,技术的变化会导致某些思想过时并迅速消失,这种情形经常发生。
但是,技术的另一种变化还可能再次复活某些思想。
在生物学上,消失是永远的,但是在计算机科学中,这一种消失有时不过只有几年时间。
暂时消失的结果会造成我们有时需要反复考察一些“过时”的概念,即那些在当代技术中并不理想的思想。
而技术的变化会把一些“过时概念”带回来。
正由于此,更重要的是要理解为什么一个概念会过时,而什么样的环境的变化又会启用“过时概念”。

系统调用

任何单CPU计算机一次只能执行一条指令。
如果一个进程正在用户态中运行一个用户程序,并且需要一个系统服务,比如从一个文件读数据,那么它就必须执行一个陷阱或系统调用指令,将控制转移到操作系统。
操作系统接着通过参数检查,找出所需要的调用进程。
然后,它执行系统调用,并把控制返回给系统调用后面跟随者的指令。
在某种意义上,进行系统调用就像进行一个特殊的过程调用,但是只有系统调用可以进入内核,而过程调用则不能。

参考

现代操作系统 第一章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容