02 操作系统运行机制

操作系统运行机制

程序怎么运行?

高级语言-》汇编-》二进制代码,一条条指令执行

内核、应用程序

操作系统运行机制之:基于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指令执行对应的异常处理程序)是在内核态,由操作系统执行。


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注