当前位置:网站首页>进程在用户态和内核态的区别[独家解析]
进程在用户态和内核态的区别[独家解析]
2022-08-05 01:25:00 【alibaba_张无忌】
先看基础常识:
基础
内核在创建进程的时候,会为进程创建相应的堆栈。
每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。
当进程在用户空间运行时,CPU寄存器里面的内容是用户堆栈地址,使用用户栈
当进程在内核空间时,CPU寄存器里面的内容是内核栈空间地址,使用内核栈。
切换过程:
当发生系统调用时,用户态的程序发起系统调用。用户态程序权限不足,因此会中断执行,发生中断后,当前CPU执行的程序会中断,跳转到中断处理程序。内核程序开始执行,也就是开始处理系统调用。内核处理完成后,这样会再次发生中断,切换回用户态工作。
区别:
最重要的差别就在于特权级的不同,即权力的不同。运行在用户态下的程序不能直接访问操作系统内核数据结构和程序
系统中执行的程序大部分时间运行在用户态,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态。
用户态切换到内核态的3种方式
1. 系统调用
这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。
2.异常
当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
3.外围设备的中断
当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。
边栏推荐
- Pytorch使用和技巧
- [FreeRTOS] FreeRTOS and stm32 built-in stack occupancy
- Knowledge Points for Network Planning Designers' Morning Questions in November 2021 (Part 1)
- JZ搜索引擎solr研究-从数据库创建索引
- Interview summary: Why do interviewers in large factories always ask about the underlying principles of Framework?
- Opencv - video frame skipping processing
- Creative code confession
- 2022 Hangzhou Electric Power Multi-School Session 3 K Question Taxi
- 执掌图表
- 【Endnote】Word插入自定义形式的Endnote文献格式
猜你喜欢
B站7月榜单丨飞瓜数据B站UP主排行榜发布!
[FreeRTOS] FreeRTOS and stm32 built-in stack occupancy
ora-01105 ora-03175
活动推荐 | 快手StreamLake品牌发布会,8月10日一起见证!
深度学习:使用nanodet训练自己制作的数据集并测试模型,通俗易懂,适合小白
Memory Forensics Series 1
习题:选择结构(一)
软件测试技术之最有效的七大性能测试技术
The use of pytorch: temperature prediction using neural networks
Introduction to JVM class loading
随机推荐
LiveVideoStackCon 2022 Shanghai Station opens tomorrow!
行业现状?互联网公司为什么宁愿花20k招人,也不愿涨薪留住老员工~
How DHCP works
ORA-00257
If capturable=False, state_steps should not be CUDA tensors
主库预警日志报错ORA-00270
tensor.nozero(),面具,面具
IJCAI2022 | DictBert:采用对比学习的字典描述知识增强的预训练语言模型
GCC:头文件和库文件的路径
torch.autograd.grad求二阶导数
【Word】Word公式导出PDF后出现井号括号#()错误
[Machine Learning] 21-day Challenge Study Notes (2)
GCC:屏蔽动态库之间的依赖
阶段性测试完成后,你进行缺陷分析了么?
Method Overriding and Object Class
活动推荐 | 快手StreamLake品牌发布会,8月10日一起见证!
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?
day14--postman interface test
测试工作这么难找吗?今年32,失业2个月,大龄测试工程师接下来该拿什么养家?
3. pcie.v 文件