当前位置:网站首页>进程在用户态和内核态的区别[独家解析]
进程在用户态和内核态的区别[独家解析]
2022-08-05 01:25:00 【alibaba_张无忌】
先看基础常识:
基础
内核在创建进程的时候,会为进程创建相应的堆栈。
每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。
当进程在用户空间运行时,CPU寄存器里面的内容是用户堆栈地址,使用用户栈
当进程在内核空间时,CPU寄存器里面的内容是内核栈空间地址,使用内核栈。
切换过程:
当发生系统调用时,用户态的程序发起系统调用。用户态程序权限不足,因此会中断执行,发生中断后,当前CPU执行的程序会中断,跳转到中断处理程序。内核程序开始执行,也就是开始处理系统调用。内核处理完成后,这样会再次发生中断,切换回用户态工作。
区别:
最重要的差别就在于特权级的不同,即权力的不同。运行在用户态下的程序不能直接访问操作系统内核数据结构和程序
系统中执行的程序大部分时间运行在用户态,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态。
用户态切换到内核态的3种方式
1. 系统调用
这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。
2.异常
当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
3.外围设备的中断
当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。
边栏推荐
- Binary tree [full solution] (C language)
- torch.autograd.grad求二阶导数
- If capturable=False, state_steps should not be CUDA tensors
- LiveVideoStackCon 2022 上海站明日开幕!
- 深度学习训练前快速批量修改数据集中的图片名
- Three handshake and four wave in tcp
- linux(centOs7)部署mysql(8.0.20)数据库
- 【Endnote】Word插入自定义形式的Endnote文献格式
- GCC: paths to header and library files
- DHCP的工作过程
猜你喜欢
随机推荐
The principle of NMS and its code realization
金九银十面试跳槽季;你准备好了吗?
JWT简单介绍
4. PCIe interface timing
KingbaseES V8 GIS数据迁移方案(2. Kingbase GIS能力介绍)
After the staged testing is complete, have you performed defect analysis?
AI+小核酸药物|Eleven完成2200万美元种子轮融资
ExcelPatternTool: Excel表格-数据库互导工具
【翻译】CNCF对OpenTracing项目的存档
方法重写与Object类
手把手基于YOLOv5定制实现FacePose之《YOLO结构解读、YOLO数据格式转换、YOLO过程修改》
【Unity入门计划】2D游戏中遮挡问题的处理方法&伪透视
ORA-00257
Activity Recommendation | Kuaishou StreamLake Brand Launch Conference, witness together on August 10!
Introduction to JVM class loading
Bit rate vs. resolution, which one is more important?
Are testing jobs so hard to find?I am 32 this year and I have been unemployed for 2 months. What should an older test engineer do next to support his family?
GCC: Shield dependencies between dynamic libraries
pytorch的使用:卷积神经网络模块
Helm Chart