操作系统的设计指导思想——主奴机制

        在学习操作系统的过程中我们会发现一个问题:应用程序是应用程序,操作系统也是程序,操作系统程序凭什么能对应用程序进行组织、管理和协调而不受应用程序损害呢?我们认为凭的是特权机制。要想让操作系统做到能够对应用程序进行组织、管理和协调,同时又不受到损害,最有效的方法就是使操作系统与应用程序之间,应用程序与应用程序之间进行有效的分离,同时要做到操作系统能随意访问应用程序,而应用程序不能访问操作系统,应用程序之间也不能相互访问。

        这一意味着,操作系统必须能过做到,如果它要让应用程序在内存的什么位置运行,该应用程序就必须老老实实的在那里运行;操作系统应该在内存中为应用程序划出清晰的边界,应用程序不能越雷池半步。操作系统允许应用程序占用CPU运行多长时间,应用程序就运行多长时间,运行玩这些时间后,还要讲CPU的使用权交还给操作系统,没有权利自动扣留CPU的使用权。如果某个应用程序想要使用外设,不能和直接想外设伸手,而是要像操作系统申请,如果操作系统认为可以让这个应用程序使用外设,就让它使用,如果操作系统认为不可以使用外设,则该应用程序就不能使用.....

在这样的特权机制下,操作系统和应用程序的关系变成了主子和奴才的关系,我们把这种特权机制叫做主奴机制。

主奴机制中的进程及进城创建的机制

1、进程边界与进程

为了实现主奴机制,首先要在操作系统内核程序与应用程序之间,应用程序与应用程序之间建立有效的边界。

程序代码在计算机中的情况与气体液体的情况类似,也没有天然、确定的边界,这就需要操作系统人为确定边界,起到类似于容器的分离和承载的作用。为此,现代操作系统提出了进程的概念,用task_struct结构来实现明确的划分边界的作用。Task_struct是进程的主要标志,从操作系统的角度看,进程是运行中的接收操作系统组织、管理和协调的程序。

2、进程的创建

从技术上讲,进程的创建方法不止一种,Linux操作系统的进程创建采用的是对象创建模式。对象创建的就是用已有的对象创建对象,用已有的进程创建进程,也就是所谓的父子进程创建机制。从本质上讲,创建进程最主要的就创建task_struct。父子进程创建的主要机制就是从父进程的task_struct复制一份作为子进程的task_struct

从逻辑上很容易推出,父子进程创建机制意味着最初的父进程必须独立存在,这就是进程0。进程0不能由父子进程创建机制创建,所以只能由操作系统设计者手工编写进程0tak_struct。有了进程0,父子进程创建机制就可以用进程0作为父进程创建子进程。有了进程。就有了主奴机制的组织、管理和协调对象。

操作系统的设计如何体现主奴机制?

1、操作系统在进程调度中体现咱主奴机制

2、操作系统在内存管理中体现的主奴机制

3、操作系统在文件系统中体现的主奴机制

实现主奴机制的三种关键技术

1、保护和分页

2、特权及

3、中断

建立主奴机制的决定性因素——先机

         到此为止,主奴机制已经大概表述完了,如果大家还相对各个部分的细节知识进行了解,可以参考《Linux内核设计艺术》来加深理解。现在只有一个问题无法解释:用户程序是程序,操作系统也是程序,用的是同一个CPU、同一套指令集,为什么操作系统内核程序能用的指令,用户程序就不能用呢?答案似乎是内核的特权及比用户程序的特权级高。进一步问:为什么内核程序能获得高的特权级,而用户程序就不能?

        我们认为,关键的就是先机。

        计算机开机启动的时候是实模式,实模式没有特权级的概念。这是操作系统内核开始加载。正常情况下,此时不应该有BIOS、操作系统以外的任何程序。当操作系统的启动程序打开PE的时候,特权级状态必须是最高特权级,否则有一部分指令将永远也无法执行。这是个关键的时刻,操作系统设计者就是利用这个最有利的时间,以时间换特权,先霸占所有特权,并充分利用这些特权,创建这些进程。因为所有的进程都是操作系统直接或者是间接创建的,所以,操作系统有充分的条件和机会把进城的特权级降低。一旦进程的特权级被降低,就再也无法翻身,除非操作系统代码设计错误,误把进城的特权级提上来。显然操作系统设计者会认真审查这种错误,消灭这类错误。假设操作系统的代码没有错误,进程一旦被创建,就再也无法获得内核特权级,只能终身为奴。由此可见,掌握先机对操作系统主奴即使的形成有着决定性的作用。

        一些恶意程序进入计算机的时机虽然晚于操作系统,但是它们会想法设法利用操作系统设计上的一切可以利用的漏洞,变被动为主动,抢占先机。一旦掌握先机,马上获得最高特权级,就可以为所欲为......有一类病毒,就通过利用这一点,利用操作系统的漏洞,想办法驻留到硬盘的系统引导区,甚至是BIOSBIOS和硬盘的引导程序是先于操作系统进入内存的。这类病毒自然就先于从做系统进入内存,一旦他们抢占先机,获得最高特权级,操作系统就非常麻烦了!有上述可见操作系统的主奴机制在整个操作系统的运行中起着主导地位,就是这个机制是我们可以将应用程序顺畅的运行在操作系统上。