接口
操作系统的接口其实就是一个个函数,知道它的功能然后直接调用就行,而不用管它内核里面是怎么实现的,因为这个函数是系统调用的,所以也称为系统调用。比如:write()、read()等等
操作系统的接口可以划分为两类:一是供用户使用的用户级接口,二是供程序使用的程序级接口。
系统调用
计算机硬件系统并不允许我们在内存中通过jmp等跳转指令直接调用操作系统内核提供的函数,只能由操作系统操作,也称为syscall。
计算机硬件为我们设计了内核态和用户态的模式,内核态可以访问用户态的信息,但用户态不能访问内核态。
- CPL寄存器表示当前程序执行在什么态,0表示内核态,3表示用户态;
- DPL寄存器表示即将访问的数据在什么段,同样0表示内核段,3表示用户段。
- 用户程序的CPL(Current Privilege Level)初始化结果是3,而操作系统内核里函数的DPL(Descriptor Privilege Level)是0
每次访问数据的时候检查两个寄存器的大小关系,若DPL≥CPL,则可以访问,反之,则不能访问
因此,用户无法访问内核(0<=3)
[
](https://blog.csdn.net/qq_53144843/article/details/120430561)
中断
为了实现系统调用,操作系统为我们提供了用户程序调用内核函数的唯一方法:中断指令int。(硬件中断/时钟中断)
当程序执行到int指令时,int指令会将CS中的CPL修改为0,当访问内核结束之后,又将CPL重置为3继续执行用户程序。
CPU工作原理
首先,操作系统需要事先帮 CPU 设置好 CPU 寄存器和程序计数器。
CPU的工作原理:取指执行(自动的取指执行)
CPU管理:核心是任务的切换,内存存放多个程序,多个程序交替执行。提高CPU的利用率
而CPU管理使用到的数据结构是PCB。