博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内核态和用户态
阅读量:7259 次
发布时间:2019-06-29

本文共 717 字,大约阅读时间需要 2 分钟。

 

intel cpu提供Ring0-Ring3三种级别的运行模式,Ring0级别最高,Ring3最低。Linux使用了Ring3级别运行用户态,Ring0作为 内核态,Ring3状态不能访问Ring0的地址空间,包括代码和数据,一条工作在0级特权级的指令具有了CPU能提供的最高权力,而一条工作在3级特权级的指令具有CPU提供的最低或者说最基本权力。

 

用户态切换到内核态的3种方式

a. 系统调用

这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。

b. 异常

当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。

c. 外围设备的中断

当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

从触发方式上看,可以认为存在前述3种不同的类型,但是从最终实际完成由用户态到内核态的切换操作上来说,涉及的关键步骤是完全一致的,没有任何区别,都相当于执行了一个中断响应的过程,因为系统调用实际上最终是中断机制实现的,而异常和中断的处理机制基本上也是一致的。

转载地址:http://grodm.baihongyu.com/

你可能感兴趣的文章
[20170112]为什么提示不一样.txt
查看>>
ThinkPHP连接sql server数据库
查看>>
css优先级计算规则
查看>>
zookeeper使用和原理探究 (注意linux下防火墙导致启动失败的坑,使用service iptables stop 关闭防火墙 使用service iptables status确认)...
查看>>
【数值分析】复化积分公式
查看>>
改善C#程序的建议5:引用类型赋值为null与加速垃圾回收
查看>>
DMR技术白皮书
查看>>
搭建Tomcat
查看>>
如何写一份简单易懂的软件外包需求说明书
查看>>
安全漏洞问题4:跨站请求伪造
查看>>
leetcode 101 Symmetric Tree
查看>>
关于网页内容加速黑科技的趣谈
查看>>
四大趋势六大场景,麦肯锡预测汽车行业新革命
查看>>
NALU(NAL单元)
查看>>
OpenCV特征点检测匹配图像-----添加包围盒
查看>>
Serverless:重新定义DevOps
查看>>
Linux 关机和重启命令
查看>>
云计算新常态:是时候用在所有地方了吗
查看>>
智能医疗器械爆发 产业整合趋势明显
查看>>
中国人工智能学会通讯——艺术与人工智能的明天——人机信任合作 三、可解释性人工智能...
查看>>