讲讲用户态和内核态之间的爱恨情仇(面试篇)

简介: 讲讲用户态和内核态之间的爱恨情仇(面试篇)

前言



本文深度为上层语言(Java、go等)后端实习生面试难度,力求简洁明了。


一、什么是用户态?什么是内核态?


     

操作系统为了保护自己,严格控制用户程序的资源访问。不需要外部资源的程序运行状态是用户态,反之如果需要内核帮忙操作资源,此时就是内核态。


内核态下,CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序;


用户态下,只能受限的访问内存, 且不允许访问外围设备。占用CPU的能力被剥夺, CPU资源可以被其他程序获取。


二、为什么需要划分用户态和内核态



主要是为了安全。


在CPU指令中,有些指令是非常危险的,如果错用将导致系统崩溃,比如清内存、设置时钟等,所以CPU将指令分为特权指令和非特权指令。对于危险指令,只允许操作系统及其相关模块使用,普通应用程序只能使用不危险的指令。


三、用户态和内核态之间的切换



用户态 --> 内核态 的三种情况:


1、系统调用


系统调用的本质其实也是中断,相对于外围设备的硬中断,这种中断称为软中断。这是用户态进程主动要求切换到内核态的一种方式。用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。


例如:fork()就是执行了一个创建新进程的系统调用


2、异常


当cpu在执行运行在用户态下的程序时,发生了一些没有预知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关进程中,也就是切换到了内核态。


例如:缺页异常


3、外围设备的中断


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


例如:硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后边的操作等。


操作完成后,会从内核态退回用户态。

参考:【linux】10分钟搞懂用户态与内核态_哔哩哔哩_bilibili 


相关文章
|
3月前
|
存储 调度 C++
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
81 1
|
4月前
|
存储 Linux 程序员
【操作系统原理】—— Linux内存管理
【操作系统原理】—— Linux内存管理
42 0
|
4月前
|
存储 Linux 调度
[操作系统]秋招面试问到进程扩展知识!!!面试官喜欢的答案
[操作系统]秋招面试问到进程扩展知识!!!面试官喜欢的答案
|
10月前
|
存储 算法 程序员
进程相关概念(避坑指南-通透多进程开发)
进程相关概念(避坑指南-通透多进程开发)
41 0
|
存储 消息中间件 算法
《对线面试官》| 高频 Linux 面试题 Pt.2
给大家分享一些在校招面试中常见的 Linux 面试题
|
缓存 Ubuntu Unix
《对线面试官》| 高频 Linux 面试题 Pt.1
今天打算给大家分享一些校招面试中面试官提问频率较高的关于 Linux 系统的面试题
|
存储 监控 算法
操作系统之考研高频考点 1
操作系统之考研高频考点
|
存储 移动开发 算法
操作系统之考研高频考点 2
操作系统之考研高频考点
|
人工智能 移动开发 算法
王道考研操作系统同步与互斥(王道大题详解)(一)
王道考研操作系统同步与互斥(王道大题详解)(一)
225 0
王道考研操作系统同步与互斥(王道大题详解)(一)
|
机器学习/深度学习 人工智能 算法
王道考研操作系统同步与互斥(王道大题详解)(二)
王道考研操作系统同步与互斥(王道大题详解)(二)
169 0
王道考研操作系统同步与互斥(王道大题详解)(二)