Contents
操作系统运行机制
程序怎么运行?
高级语言-》汇编-》二进制代码,一条条指令执行
内核、应用程序
操作系统运行机制之:基于CPU的两种状态切换,实现用户程序和内核的切换
基于cpu两种状态(特权态和用户态)的切换。 PSW寄存器和中断。
两种CPU状态
CPU一般至少有 “内核态”和“用户态” 两个状态, 可能由PSW寄存器控制。
两种指令
内核作为管理者,允许执行一些特权指令。
用户程序只允许执行一些非特权指令。
CPU设计时,已经区分了特权指令与非特权指令。
CPU处于内核态时,允许执行特权指令。
两种应用程序
操作系统中运行着两类程序:内核程序,用户程序
CPU状态转换
开机时,cpu内核态,执行系统初始化: 开机完成后,cpu切换用户态,允许执行应用程序 对于非法事件、手动触发中断,都可以触发中断,cpu处理中断。
内核态-》用户态:PSW寄存器控制
用户态-》内核态:触发中断。
中断和异常
内中断(软中断)
外中断
中断发生时,打断(用户态)CPU上正在执行用户程序(非特权指令),(CPU进入内核态)执行特定的中断程序
内中断
内中断来源于cpu内部,由cpu执行 (有时也称异常)
- 主动执行 陷入指令 trap(非特权指令)
- 故障fault (缺页故障等)
- 终止abort (发生整数除以0等,需要终止程序)
外中断
外中断来源于cpu外部
-
时钟中断,可用于实现基于时间片的程序调度
-
IO设备中断
中断机制的基本原理
检查中断信息:内中断在执行指令时回见检查是否有异常发生;外中断在每个指令执行某个时期检查是否有外中断到来。
中断向量表:地址数组,存储各中断处理程序地址的数组。
系统调用
系统调用: 操作系统提供给上层应用的接口
基于trap指令。
操作系统–提供系统调用–》 上层编程语言–库函数—》应用程序
为什么需要系统调用?作用:
多个进程需要并发访问资源(eg两个程序同时打印文件等)
系统调用分类(实际上就是把cpu的功能封装好提供给上层): 设备管理:完成设备的请求、释放、启动等功能。 文件管理:完成文件的读、写、创建、删除等功能。 进程控制:完成进程的创建、撤销、阻塞、唤醒等功能。 进程通信:完成进程间的消息传递、信号传递等功能。 内存管理:完成内存的的分配、回收等功能。
参考:Linux系统调用进一步学习。
对共享资源(内存、IO操作、文件管理等)的操作等,都需要使用系统调用。
系统调用过程: 一般是应用程序使用,寄存器传参,trap陷入指令执行,执行内中断处理程序(处理trap异常)
引发系统调用是在用户态,执行系统调用(trap指令执行对应的异常处理程序)是在内核态,由操作系统执行。
发表回复