[toc]
1.1运行状态#
- 行于用户态的进程可以执行的操作和访问的资源都会受到极大的限制
- 而运行在内核态的进程则可以执行任何操作并且在资源的使用上没有限制
1.1.1 用户态#
程在执行用户自己的代码时,则称其处于用户运行态(用户态),相当于运行用户自己的代码函数都是用户态,linux系统的底层调用接口不属于用户态。
- 访管指令是用户态调用的
1.1.2 核心态#
- 内核态,在操作系统内核运行的状态。
- 核心态运行时的特
- 负责管理进程、存储
用户态什么时候会进入核心态?就是下面提到的系统调用、中断和异常。
Q: 为什么要区分系统态和用户态?#
A:
- CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。
- 最主要原因是要把用户程序和系统程序区分开,以利于程序的共享和保护。显然,这也是以增加系统复杂度和系统开销为代价的。
1.2 系统调用#
- 系统调用概念:从用户进程自身堆栈 切换为系统堆栈
- 执行系统调用后,就会进入核心态
- 时钟管理属于核心态的概念(用于进程切换计时和系统时间)
- 和系统资源有关的都要用到系统调用,如下:
- 存储
- IO传输
- 文件管理
- 系统调用需要在用户态触发trap命令
陷入指令是指用户程序所依靠的指令,用于发起系统调用,请求操作系统提供服务。陷入指令有其中一点特殊在于,其只能在用户态下执行,而不可以在核心态下执行。
trap命令具体流程:
- 用户态程序将一些数据值放在寄存器中, 或者使用参数创建一个堆栈(stack frame), 以此表明需要操作系统提供的服务
- 用户态程序执行陷阱指令
- CPU切换到内核态, 并跳到位于内存指定位置的指令, 这些指令是操作系统的一部分,
- 后面的这些指令会读取程序放入内存的数据参数, 并执行程序请求的服务
- 系统调用完成后, 操作系统会重置CPU为用户态并返回系统调用的结果
1.3 中断和异常#
- 外中断 = 中断: 即外设请求或者人为程序干预
- 内中断= 异常: 指令中断(溢出)、 软件故障、硬件故障。
即中断就是正常行为, 异常则可能是故障引发。
1.4 linux延申#
https://www.cnblogs.com/bakari/p/5520860.html
Q: 插上电源之后,计算机系统做了什么?#
A:
- 加电––––打开电源开关,给主板和内部风扇供电。
- 启动引导程序––––CPU开始执行存储在ROM BIOS中的指令。
- 开机自检––––计算机对系统的主要部件进行诊断测试。
- 加载操作系统––––计算机将操作系统文件从磁盘读到内存中。
- 检查配置文件,定制操作系统的运行环境––––读取配置文件,根据用户的设置对操作系统进行定制。
在Windows中对运行环境进行配置的方法很多,比如修改注册表,编辑System.ini、Win.ini等系统配置文件,或将希望启动完Windows后立即执行的内容放入Windows的启动(Startup)组中。 - 准备读取命令和数据––––计算机等待用户输入命令和数据。
接通电源后,计算机做了那些基本操作