您的位置 首页 动态

Linux用户形式和内核形式

MS-DOS等操作系统在单一的CPU模式下运行,但是一些类Unix的操作系统则使用了双模式,可以有效地实现时间共享。在Linux机器上,CPU要么处于受信任的内

MS-DOS等操作体系在单一的CPU形式下运转,可是一些类Unix的操作体系则运用了双形式,能够有效地完成时刻同享。在Linux机器上,CPU要么处于受信赖的内核形式,要么处于受限制的用户形式。除了内核自身处于内核形式以外,一切的用户进程都运转在用户形式之中。

内核形式的代码能够无限制地拜访一切处理器指令集以及悉数内存和I/O空间。假如用户形式的进程要享有此特权,它有必要经过体系调用向设备驱动程序或其他内核形式的代码宣布恳求。别的,用户形式的代码答应产生缺页,而内核形式的代码则不答应。

在2.4和更早的内核中,只是用户形式的进程能够被上下文切换出局,由其他进程抢占。除非产生以下两种状况,不然内核形式代码能够一向独占CPU:

(1) 它自愿抛弃CPU;

(2) 产生中止或反常。

2.6内核引入了内核抢占,大多数内核形式的代码也能够被抢占。

下面是从网上贴过来的,或许说的更理解一些。

一、内核空间和用户空间

Linux简化了分段机制,使得虚拟地址与线性地址总是共同,因而,Linux的虚拟地址空间也为0~ 4G.Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核运用,称为内核空间.而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程运用,称为用户空间)。由于每个进程能够经过体系调用进入内核,因而,Linux内核由体系内的一切进程同享。所以,从详细进程的视点来看,每个进程能够具有4G字节的虚拟空间。

二、内核态和用户态

当一个使命(进程)履行体系调用而堕入内核代码中履行时,咱们就称进程处于内核运转态(或简称为内核态)。此刻处理器处于特权级最高的(0级)内核代码中履行。当进程处于内核态时,履行的内核代码会运用其时进程的内核栈。每个进程都有自己的内核栈。当进程在履行用户自己的代码时,则称其处于用户运转态(用户态)。即此刻处理器在特权级最低的(3级)用户代码中运转。当正在履行用户程序而忽然被中止程序中止时,此刻用户程序也能够标志性地称为处于进程的内核态。由于中止处理程序将运用其时进程的内核栈。这与处于内核态的进程的状况有些相似。

三、进程上下文和中止上下文

处理器总处于以下状况中的一种:

1、内核态,运转于进程上下文,内核代表进程运转于内核空间;

2、内核态,运转于中止上下文,内核代表硬件运转于内核空间;

3、用户态,运转于用户空间。

用户空间的应用程序,经过体系调用,进入内核空间。这个时分用户空间的进程要传递许多变量、参数的值给内核,内核态运转的时分也要保存用户进程的一些寄存器值、变量等。所谓的进程上下文,能够看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和其时的环境等。

硬件经过触发信号,导致内核调用中止处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核经过这些参数进行中止处理。所谓的中止上下文,其实也能够看作便是硬件传递过来的这些参数和内核需求保存的一些其他环境(主要是其时被打断履行的进程环境)。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/297615.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部