计算机系统的层次结构
(了解)操作系统的内核又可以分成大内核和微内核:
微内核结构—— 由于客户/服务器(Client/Server)模式,具有非常多的优点,故在单机微内核操作系统中几乎无一例外地都采用C/S模式,将操作系统中最基本的部分放入内核中,而把操作系统的绝大部分功能都放在微内核外面的一组服务器(进程)中实现。例如用于提供对进程(线程)进行管理的进程(线程)服务器,提供虚拟存储器管理功能的虚拟存储器服务器,提供I/O设备管理的I/O设备管理服务器等,它们都是被作为进程来实现的,运行在用户态,客户与服务器之间是借助微内核提供的消息传递机制来实现信息交互的。
用户态和核心态
CPU有两种状态,“内核态/核心态/管态” 和 “用户态/目态”
处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令
处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令
拓展:CPU中有一个寄存器叫程序状态字寄存器(PSW
),其中有个二进制位,1表示“内核态”,0表示“用户态”
应用程序和内核程序
我们普通程序员写的程序就是“应用程序”
微软、苹果有一帮人负责实现操作系统,他们写的是“内核程序”
由很多内核程序组成了“操作系统内核”,或简称“内核(Kernel)”。内核是操作系统最重要最核心的部分,也是最接近硬件的部分。甚至可以说,一个操作系统只要有内核就够了(如:Docker一>仅需Linux内核)
操作系统的功能未必都在内核中,如图形化用户界面GUI
特权指令和非特权指令
在CPU设计和生产的时候就划分了特权指令和非特权指令,因此CPU执行一条指令前就能判断出其类型
应用程序只能使用“非特权指令”,如:加法指令、减法指令等
操作系统内核作为“管理者”,有时会让CPU执行一些“特权指令”,如:内存清零指令。这些指令影响重大,只允许“管理者”即操作系统内核来使用
用户态和内核态的切换
内核态转用户态:执行一条特权指令修改PSW
的标志位为“用户态”,这个动作意味着操作系统将主动让出CPU使用权
用户态转内核态:由“中断”引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回CPU的使用权
中断是操作系统夺回CPU使用权的唯一方法、即CPU从用户态变为内核态的唯一方法
中断与异常
中断的分类
中断向量表
不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置。
系统调用
操作系统向上层主要提供两种接口:
命令接口:给用户用的程序接口(系统调用):给应用程序用的,可以理解为一种可供应用程序调用的制殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务
系统调用和库函数的区别
什么功能要用系统调用实现
应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、V/0操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
系统调用的过程
传递系统调用参数→执行陷入(访管)指令(用户态)→执行系统调用相应服务程序(核心态)→返回用户程序
注意:
1.陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,从而CPU进入核心态
2.发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行
3.陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令