现代操作系统学习笔记----1---内核态跟用户态

3.3 内核态和用户态

就像世界上的人并不平等一样,并不是所有的程序都是平等的。世界上有的人占有资源多,有的人占有资源少,有的人来了,别人得让出资源,有的人则专门为别人让出资源。程序也是这样,有的程序可以访问计算机的任何资源,有的程序则只能访问非常受限的少量资源。而操作系统作为计算机的管理者,自然不能和被管理者享受一样的待遇,它应该享有更多的方便或特权。为了区分不用程序的不同权利,人们发胆了内核和用户态的概念。

那么什么是内核态,什么是用户态呢?只要想一想现实生活中,处于社会核心的人与处于社会边缘的人有什么区别就能明白处于核心的人拥有的资源多!因此,内核态就是拥有资源多的状态,或者说访问资源多的状态,我们也称之为特权态。相对来说,用户态就是非特权态,在此种状态下访问的资源将受到限制。如果一个程序运行在特权态,则该程序就可以访问计算机的任何资源,即它的资源访问权限不受限制。如果一个程序运行在用户态,则其资源需求将受到各种限制。

例如,如果要访问操作系统的内核数据结构,如进程表,则需要在特权态下才能办到。如果要访问用户程序里的数据,则在用户态下就可以了。

由于内核态的程序可以访问计算机的所有资源,这种程序的可靠性和安全性就显得十分重要。试想如果一个不可靠的程序在内核态下修改了操作系统的各种内核数据结构,结果会怎样呢?整个系统有可能崩溃。而运行于用户态的程序就比较简单了,如果其可靠性和安全性出了问题,其造成的损失只不过是让用户程序崩溃,而操作系统将继续运行。

很显然,内核态和用户态各有优势:运行在内核态的程序可以访问的资源多,但可靠性、安全性要求高,维护管理都较复杂;用户态程序访问的资源受限,但可靠性、安全性要求低,自然编写维护起来都较简单。一个程序到底应该运行在内核态还是用户态取决于其对资源和效率的需求。

一般来说,一个程序能够运行于用户态,就应该让它运行在用户态。只在迫不得已的情况下,才让程序运行于内核态。只要看看一个国家的治理就清楚了。我们拿什么标准来判断什么事情应该归国家领导管理。凡是牵扯到计算机本体根本运行的事情都应该在内核态下执行,只与用户数据和应用相关的东西则放在用户态执行。另外,对时序要求特别高的事情,也应该在内核态做。你有没有想过,国家领导出门怎么不塞车呢?

那么什么样的功能应该在内核态下实现呢? 首先,CPU管理和内存管理都应该在内核态实现。这些功能可不可以在用户态下实现呢?当然能,但是不太安全。就像一个国家的军队(CPU和内存在计算机里的地位就相当于一个国家的军队的地位)交给老百姓来管一样,是非常危险的。所以从保障计算机安全的角度来说,CPU和内存的管理必须在内核态实现。

诊断与测试程序也需要在内核态下实现。因为诊断和测试需要访问计算机的所有资源,否则怎么判断计算机是否正常呢?就像中医治病,必须把脉触摸病人。你不让中医触摸,他怎么能看病呢(当然,很多人认为中医是伪科学,根本治不了病,本书对此问题不做讨论)?输入输出管理也一样,因为要访问各种设备和底层数据结构,也必须在内核态实现。

对于文件系统来说,则可以一部分放在用户态,一部分放在内核态。文件系统本身的管理,即文件系统的宏数据部分的管理,必须放在内核态,不然任何人都可能破坏文件系统的结构;而用户数据的管理,则可以放在用户态。编译器、网络管理的部分功能、编辑器用户程序,自然都可以放在用户态下执行。图3.8描述的是Windows操作系统的内核态与用户态的界线。

 
图3.8Windows操作系统的内核态与用户态的界线

微内核架构

还没有意识到操作系统的存在,也没有将那些库函数称为操作系统,那个时候,人们想到什么功能,就把这个功能加进来,并没有对所有这些功能进行统筹兼顾的计划。自然,那个时候的操作系统也是杂乱的、无结构的。

            随着操作系统的进化,人们对操作系统的认识逐步加深,操作系统慢慢变得有一些结构了。各种功能归为不同的功能块,每个功能块相对独立,又经过固定的界面互相联系。他知道你是一个功能块可以调用另一个功能块的服务。整个操作系统本身是一个巨大单位一体(monolithical system),运行在内核态下,为用户提供服务,如图3.9所示。

        后来人们发现单一体的操作系统结构有很多缺点:功能块之间的关系复杂,修改任意功能块将导致其他所有功能块都需要修改,从而导致操作系统设计开发的困难;这种没有层次关系的网状联系容易造成循环调用,形成死锁,从而导致操作系统可靠性降低。这时候,人们想到了人类社会里面的层次关系,何不将人类熟悉的层次关系搬到操作系统设计里来,给操作系统也定义个层次关系呢?将操作系统的功能分成不同层次,低层次的功能为紧邻其上的一个层次的功能提供服务,而高层次的功能又为更高一个层次的功能提供服务。就像人类团体里面的结构:村长→镇长→县长→市长→……如图3.10所示。

 
(点击查看大图)图3.9单一体的操作系统结构
 
(点击查看大图)图3.10层次化的操作系统结构

从图3.9和图3.10可以看出,操作系统的所有功能都在内核态下运行。而这带来几个问题。首先,操作系统的所有服务都需要进入内核态才能使用,而从用户态转换为内核态是有时间成本的,这样就造成操作系统效率低下。在操作系统还比较简单时这个问题并不突出,但随着操作系统功能和复杂性的增加,这种问题就十分明显了。

其次,我们前面说过,在内核态运行的程序可以访问所有资源,因此其安全性和可靠性要求十分高。在操作系统很小时,将其设计得可靠和安全不是特别困难。再说,在操作系统历史的早期没有出现那么多的安全问题,自然安全上的考虑就不用太多。但随着操作系统越来越大,破坏者的水平越来越高,操作系统的可靠性和安全性就变得很难达到。只要想一想,1400行的操作系统和40 000 000行的操作系统有什么区别就知道了。

因此,人们又想出了一个办法,就是微内核结构,即只将操作系统核心中的核心放在内核态运行,其他功能都移到用户态。这样就同时提高了效率和安全性(见图3.11)。

 
(点击查看大图)图3.11微内核的操作系统结构
各种操作系统结构各有优缺点,但当前的趋势是第三种模式,即微内核的操作系统结构。至于这个微内核到底有多“微”,则是仁者见仁、智者见智的。例如,美国卡内基梅隆大学开发的Mach操作系统的内核非常小,而微软的Windows XP的内核就大多了。






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值