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. Mysql5.0以下 手工注入

    order by 20 www. .com/product/introduction.php?id=-65 UNION SELECT user(),2 www. .com/product/introd ...

  2. Iterator之java.util.ConcurrentModificationException

    在运行以下代码时,会报java.util.ConcurrentModificationException异常, public class Demo { public static void main( ...

  3. android unique identifier

    android get device mac address programmatically http://android-developers.blogspot.jp/2011/03/identi ...

  4. hdu 2048

    PS:WA了两次...主要是没注意到fac的大小好像只能写到9...要用long long型递归求阶乘... 然后就是错排公式...百度下.. 代码: #include "stdio.h&q ...

  5. C/C++ static vs global

    static has a very simple logic to it. If a variable is static, it means that it is a global variable ...

  6. 【LeetCode】Rotate Array

    Rotate Array Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = ...

  7. 进程同步(二)—— 信号量&内存共享

    内存共享是进程间常用的通信方式,可以实现两个完全独立的进程通信. 在访问共享内存时,同时需要信号量进行访问控制. 使用ipcs -m命令可以查看系统共享内存,ipce -m + key 可以删除指定的 ...

  8. Linux交叉开发环境搭建 —— 效率之源

    楼主今天终于把所有Linux开发环境需要的软件下载完毕了.虽然以前也是搭建过的,时间久了又折腾了一晚上. 交叉环境: Windows.Linux文件共享 SecureCRT 连接虚拟机终端 工具: V ...

  9. 完美解决方案,可排除DATASET不支持System.Nullable错误

    完美解决方案,可排除DATASET不支持System.Nullable错误 using System; using System.Collections.Generic; using System.L ...

  10. Oracle数据库中char, varchar, nvarchar的差异

    1. char      固定长度,最长n个字符.   2. varchar      最大长度为n的可变字符串. (n为某一整数,不同数据库,最大长度n不同)   char和varchar区别:   ...