3.3 内核态和用户态 您所在的位置:网站首页 为什么要分用户态和内核态 3.3 内核态和用户态

3.3 内核态和用户态

#3.3 内核态和用户态| 来源: 网络整理| 查看: 265

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

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

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

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

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

一般来说,如果一个程序能够运行于用户态,就应该让它运行在用户态。只在迫不得已的情况下,才让程序运行于内核态。凡是牵扯到计算机本体根本运行的事情都应该在内核态下执行,只与用户数据和应用相关的东西则放在用户态执行。另外,对时序要求特别高的操作,也应该在内核态完成。

 

那么什么样的功能应该在内核态下实现呢? 首先,CPU 的管理和内存管理都应该在内核态实现。这些功能可不可以在用户态下实现呢?当然能,但是不太安全。从保障计算机安全的角度来说,CPU和内存的管理必须在内核态实现。

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有