系统调用相关功能涉及系统资源管理、进程管理之类的操作,运行在核心态。所以应用程序要通过系统调用请求操作系统的服务。系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
传递系统调用参数 -> 执行陷入指令(用户态)->执行相应的请求内核程序处理系统调用(核心态)->返回应用程序
整个过程是用户程序调用陷入指令(trap指令或访管指令)CPU先从用户态进入核心态,当系统调用的程序执行完会返回用户程序,CPU再从核心态转换为用户态。
注意:
陷入指令(访管指令)是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态。
发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行。
先传参再执行陷入指令。
操作系统中,通道技术是一种硬件技术。因为I/O通道实际上是一种特殊的处理器,它具有执行I/O指令的能力,并通过执行通道程序来控制I/O操作。
中断处理是操作系统必须提供的功能。
进程调度可不需要硬件的支持。但它是操作系统内核进程,在核心态执行。
计算机通过硬件中断机制完成有用户态到核心态的转换。
“访管”指令仅在用户态下使用。
要区分“在用户态执行”和“在用户态发生”两个概念,缺页处理程序和时钟中断处理程序都属于中断,进程调度程序也是操作系统内核程序,所以它们都只能在核心态下执行,而命令解释程序属于命令接口,在用户态下执行;系统调用、外部中断和缺页都发生在用户态,只是对于它们的处理是发生在核心态,但进程切换是不可能发生在用户态的,属于系统调用执行过程的事件,只能发生在核心态。
输入/输出必须在核心态下执行,因为涉及中断操作。
sin()函数调用是在用户态下进行的。
中断处理和子程序调用都需要压栈以保护现场,中断处理一定会保存而子程序调用不需要保存其内容的是程序状态字寄存器(PSW)。子程序调用只需要保存程序断点,即该指令下一条指令的地址。
内部异常是指来自CPU内部产生的中断,内部异常的检测是由CPU自身完成的,它一旦出现就应立即处理。对于非法指令、除数为零等异常,无法通过异常处理程序恢复故障,因此不能回到原断点执行,必须终止进程的执行。
处理外部中断过程中,PC值由中断隐指令自动保存,而通用寄存器内容由操作系统保存。
当操作系统不同时,底层逻辑、实现方式均不同,为应用程序提供的系统调用接口也不同。
当CPU检测到中断信号后,由硬件自动保存被中断程序的断点(即程序计数器PC),之后,硬件找到该中断信号对应的中断向量,中断向量指明中断服务程序入口地址(各中断向量统一存放在中断向量表中,该表由操作系统初始化),接下来开始执行中断服务程序,保存PSW、保存中断屏蔽字、保存各通用寄存器的值,并提供与中断信号对应的中断服务。整个过程中,由操作系统完成的是提供中断服务和初始化中断向量表。
区分执行态(核心态和用户态)的主要目的是保护系统程序。









网友评论