1.特权级
特权级用来管理和控制程序执行。
如Intel x86架构的CPU,有0~3四个特权级,0级最高,3级最低。
硬件在执行每条指令时都会检查指令具有的特权级。
硬件提供了特权级使用机制,对操作系统来说,负责确定指令的特权级。
如Linux中,只使用了0和3级特权级,工作在0级特权级的指令具有CPU提供的最高权力,
而三级特权级指令只具有CPU提供的最基本权力。

2.用户态和内核态的区别
当程序运行在3级特权级时,称为运行在用户态,普通的用户进程一般运行在用户态。
当程序运行在0级特权级时,称为运行在内核态。

用户态和内核态最主要的差别在于特权级的不同。运行在用户态的程序不能直接访问操作系统内核。

我们通过以下示例来分析用户态和内核态:

void testfork(){
if(==fork()){
printf("create new process success");
}
}

当程序调用fork()时,最终会调用sys_fork()函数来创建一个子进程。
testfork()函数中不能直接调用sys_fork(),因为前者是用户态程序,而sys_fork()工作在内核态。此时,进程会在操作系统的帮助下,由用户态切换到内核态。

3.用户态和内核态切换的三种方式
1)系统调用
用户态进程主动要求切换到内核态。
用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。
如上例的sys_fork()
2)异常
当CPU在执行运行在用户态下的程序时,发生某些异常后,会触发当前运行进程切换到异常的内核相关程序中,也就转到了内核态,如缺页异常。
3)外围设备的中断
当外围设备完成用户请求的操作后,会向CPU发送相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前知心的指令时用户态下的程序,那么这个转换也就是由用户态到内核态的切换。如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作。

4.用户态和内核态切换的原理
用户态和内核态的切换,是系统调用了中断机制,执行了一个中断响应的过程。
步骤主要包括:
1)从当前进程的描述符中提取其内核栈的ss0及esp0信息。
2)使用sso和esp0执行的内核栈将当前进程的cs,eip,eflags,ss,esp信息保存起来,这个过程完成了由用户栈到内核栈的切换过程,同时保存了被暂停执行程序的下一条指令。
3)将先前由中断向量检索得到的中断处理程序的cs,eip信息装入相应的寄存器,执行中断处理程序,这时就转到了内核态的程序执行了。

Linux 用户态和内核态的更多相关文章

  1. Linux用户态和内核态

    究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子: 1)例 ...

  2. Linux探秘之用户态与内核态

    一. Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核).内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程 ...

  3. 【转载】 Linux用户态和内核态

    [说明]转载自 http://my.oschina.net/liubin/blog/27795 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分 ...

  4. Linux操作系统学习_用户态与内核态之切换过程

    因为操作系统的很多操作会消耗系统的物理资源,例如创建一个新进程时,要做很多底层的细致工作,如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录.页表等,这些操作显然不能随便让任何程序都可以做,于是就产 ...

  5. 【Linux 系统】Linux探秘之用户态与内核态

    一. Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核).内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程 ...

  6. (转)linux用户态和内核态理解

    原文:https://blog.csdn.net/buptapple/article/details/21454167 Linux探秘之用户态与内核态-----------https://www.cn ...

  7. Linux 用户态与内核态的交互【转载】

    Linux 用户态与内核态的交互  在 Linux 2.4 版以后版本的内核中,几乎全部的中断过程与用户态进程的通信都是使用 netlink 套接字实现的,例如iprote2网络管理工具,它与内核的交 ...

  8. linux 用户态和内核态以及进程上下文、中断上下文 内核空间用户空间理解

    1.特权级         Intel x86架构的cpu一共有0-4四个特权级,0级最高,3级最低,ARM架构也有不同的特权级,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查.硬件已经提 ...

  9. linux之用户态和内核态

    一. Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核).内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程 ...

随机推荐

  1. (转)mysql账号权限密码设置方法

    原文:http://www.greensoftcode.net/techntxt/2013410134247568042483 mysql账号权限密码设置方法 我的mysql安装在c:\mysql 一 ...

  2. BZOJ 3181 BROJ

    像我这种SB还是早点退役. #include<iostream> #include<cstdio> #include<cstring> #include<al ...

  3. swift系统学习控件篇:UIbutton+UIlabel+UITextField+UISwitch+UISlider

    工作之余,学习下swift大法.把自己的学习过程分享一下.当中的布局很乱,就表在意这些细节了.直接上代码: UIButton+UILabel // // ViewController.swift // ...

  4. WCF中DataContractAttribute 类

    一.这个类的作用 使用提供的数据协定,将类型实例序列化和反序列化为 XML 流或文档.无法继承此类,(DataContractSerializer 用于序列化和反序列化在 Windows Commun ...

  5. Visual Studio Usage

    Navigation Double click on UI element goes to its _click event. F12 – for method or variable, go to ...

  6. 重学STM32----(一)

    在这学习stm32半年的时间中,虽然明显的感觉到自己在进步,但是还是发现学习方法的错误.由于急功近利的性格,在学习stm32之初,我选择了最简单的办法,用库函数来写程序,而且也由于我这急功近利的性格, ...

  7. 四、CCSprite

    在介绍CCSprite之前,先要理解游戏开发中的一个核心概念:精灵.精灵也称为游戏对象,它可以用来表示游戏中的任何物体,比如敌人.子弹.甚至是一个背景图片.一段文字.CCSprite可以说是在coco ...

  8. js缓速运动

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  9. 简单的将内容加入到drupal的主页面

    首先要管理员用户 然后进入结构目录 进入菜单项 在main行 选择 列出list 选择添加链接 完善信息 保存即可 eg: http://peach.fafu.edu.cn/ 将papaya的jbro ...

  10. (实用篇)PHP实现队列及队列原理

    队列是一种线性表,按照先进先出的原则进行的: PHP实现队列:第一个元素作为队头,最后一个元素作为队尾 <?php /** * 队列就是这么简单 * * @link */ $array = ar ...