为什么操作系统分为用户态与内核态?
????????在计算机系统中,有两类程序,一种是操作系统内核程序,一种是用户编写的程序。操作系统内核程序执行一些特权指令如:I/O指令,置中断指令等来管理用户自编程序。而出于安全考虑,用户编写的程序无法执行特权指令。用户编写的程序运行在用户态,操作系统内核程序运行在核心态。具体实现是将cpu划分为用户态和内核态。
中断和异常
????????用户程序运行在用户态,需要使用到核心态的功能。所以需要在内核态建立一些"门",以便CPU能从用户态进入到内核态。在实际操作系统中,实现从用户态到内核态的转换便是通过中断或异常。
用户态->内核态:发生中断或异常时,运行在用户态的CPU会立即进入到内核态。
内核态->用户态:执行一个特权指令,将程序状态字的标志位设置为用户态。
????????中断:也称外中断,指来自CPU执行指令以外的事件的发生。比如设备I/O处理完成发出的I/O中断,时间片结束发出的时钟中断等。
? ? ? ? 异常:也称内中断,例外或陷入。指CPU执行指令内部的事件,如地址越界,算数溢出,发生缺页等。对异常的处理一般依赖于当前程序的运行环境,而且异常不能被屏蔽,出现应立即处理。
如何处理中断?
- 关中断。CPU响应中断后需要保护程序的现场状态,并且在保护现场的过程不能响应更高级中断源的中断请求。
- 保存断点。为了执行中断服务程序后能正确恢复到原来的位置,需要保存断点,即程序计数器PC。
- 引出中断服务程序。将中断服务程序的入口地址放入程序计数器。
- 保存现场和屏蔽字。进入中断服务程序后需要保护现场,一般是程序状态字寄存器和一些通用寄存器。
- 开中断。允许响应更高级中断源的中断请求。
- 执行中断服务程序。中断请求的目的。
- 关中断。保证在恢复现场和屏蔽字时不被中断。
- 恢复现场和屏蔽字。
- 开中断,中断返回。返回到原程序的断点处,继续执行原程序。
系统调用
????????应用程序通过系统调用请求操作系统的服务。凡是与资源有关的操作,都必须通过系统调用的方式向操作系统提出服务请求,由操作系统内核程序进行相应处理。系统调用可分为:设备管理、文件管理、进程控制、进程通信、内存管理。由于系统调用对系统影响非常大,所以需由操作系统内核完成。
? ? ? ? 用户可以执行陷入指令(访管指令或trap指令)来发起系统调用请求系统服务。访管指令不是特权指令。使用访管指令会产生一个中断事件(自愿中断),也叫访管中断。
?
?
|