【操作系统】用户态与内核态的区别转换
来源:互联网 发布:销售新人被辞退 知乎 编辑:程序博客网 时间:2024/06/05 19:42
用户态跟内核态是建立在实时运行的程序(进程)基础上的。
当一个任务(进程)执行系统调用而执行内核代码时,称进程处于内核态,此时处理器处于特权级最高的(0级)内核代码中执行,当进程处于内核态时,执行的内核代码会使用当前进程的内核栈,每个进程都有自己的内核栈。当进程执行用户代码时,称其处于用户态,此时处理器在特权级最低的(3级)用户代码中运行。当正在执行的进程突然被中断程序中断时,此时进程可以象征性地称为内核态。因为中断处理程序将使用当前进程的内核栈。这与处于内核态的进程的状态有些类似。
一般情况下,系统调用运行在内核态上,不包含系统调用的函数运行在用户态。一些函数在内部使用了系统调用(如fopen),这样的函数在调用系统调用是进入内核态,其他时候运行在用户态。当用户程序调用系统的API时,就产生中断,进入内核态,执行相应的API,处理完成后,用中断再退出,返回用户态的调用函数。
2. 用户态和内核态的转换
1)用户态切换到内核态的3种方式
a. 系统调用
这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现。
b. 异常
当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
c. 外围设备的中断
当外围设备(如I/O)完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。
本人由Cout_Sev 搜集整理,
部分资料参考网络及课本,转载注明出处。
谢谢!
- 【操作系统】用户态与内核态的区别转换
- 内核态与用户态的区别
- 内核态与用户态的区别
- 内核态与用户态的区别
- 【操作系统】用户堆栈与内核堆栈的区别切换
- 操作系统的内核态和用户态
- 操作系统的用户态和内核态
- 用户态与内核态的切换与区别
- 用户态与内核态的切换与区别
- 操作系统的内核是干什么的?和应用程序的区别在哪里?如何调用内核干活?操作系统为什么要分用户态和内核态?
- linux下用户态与内核态的区别
- 用户态和内核态的转换
- 操作系统用户态和内核态之间的切换过程
- 操作系统用户态和内核态之间的切换过程
- 操作系统用户态和内核态之间的切换过程
- 内核态和用户态的区别
- 内核态和用户态的区别
- 内核态和用户态的区别
- 一个家庭幸不幸福,80%以上取决于女主人。有一种女人嫁给谁都幸福
- Timer异常停止后导致任务终止的解决方法
- Latex强制图片位置
- Java 中的继承
- 软考之路(五)---编译原理 概念篇
- 【操作系统】用户态与内核态的区别转换
- uva10790
- 开源CMS建站项目DNN研究与心得
- hdu1245 两个权值的最短路
- Debian配置cgit
- python学习[4-30进度]
- 虚拟机迁移过程中网络状况测试的测试程序
- CamShift算法,OpenCV实现2-Mean Shift算法 (转载)
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"