由用户态转向核心态的例子
系统调用
发生一次中断
用户程序产生错误
用户企图执行特权指令
从核心态向用户态由一条指令实现,这也是特权指令,一般是中断返回指令
由用户态进入核心态,不只是状态需要切换,所使用的堆栈也可能需要由用户堆栈转为系统堆栈。
由用户态进入核心态时,需要用到访管程序,是在用户态使用的,所以不可能是特权指令。
1.3.4 习题&解析3.系统调用需要触发Trap指令,如基于x86的linux,该指令为int 0x80或sysenter
???系统调用不是一种很正常的,程序对OS的调用嘛,不是很异常的情况啊,为什么要调用trap?
5.用户程序在用户态下要使用特权指令引起的中断属于访管中断而非外部中断。
用户态到核心态的确需要访管指令,所以是访管中断。而这中断来自于执行的指令内部,所以不属于外部中断。
7.进程调度不需要硬件支持,由操作系统实现。地址映射中的重定位需要硬件支持。
15.广义指令而非寄存器清零只能在核心态下执行。
注意区分”调用“和”执行“。广义指令即为系统调用,调用系统调用的可能是在用户态,但是系统调用指令执行时一定是在核心态。
20.中断处理和子程序调用都需要压栈保护现场,中断处理一定会而子程序调用不需要保存的内容是程序状态字寄存器。子程序只需要保存程序断点,即该指令的下一条指令的地址;中断处理不仅需要保存断点(PC内容),还需要保存程序状态字的内容PSW(中断处理中,最重要的就是PC&PSW)
24.外部中断发生时,PC值由中断隐指令自动保存,而OS负责保存通用寄存器
MOV R0,addr可能出现缺页异常的情况
26.系统调用的过程:正在执行的进程先传递系统调用的参数,然后执行trap指令负责将用户态转化为核心态,并将返回地址压栈以备后用
27.多道程序并发执行是指,有程序正在CPU上执行,而另一些程序正在I/O设备上进行传输
通道是一种控制一台或多台外部设备的硬件,他一旦被启动就独立于CPU执行。
因此做到了CPU和I/O并行执行。
1.4 微内核与大内核大内核就是将OS的主要功能模块都作为一个紧密联系的整体运行在核心态,拥有无与伦比的性能优势。
但是,随着需求的不断增长,需要OS提供的服务也越来越多,使操作系统也面临“软件危机”的困境。
为了解决操作系统核心代码维护难得问题,有人提出了微内核。
将基本功能保留在内核,其他的迁移到用户态。它们独立执行,借助微内核,进程间通信的机制进行通信。
缺点是降低了性能,但是因为功能少了,所以更加稳定。