操作系统接口
接口: 连接两个东西、信号转换、屏蔽细节
接口需要实现什么?
- 要知道调用它的是什么东西
- 背后是怎么完成这件事情的?
计算机调用接口的三种方式
1.命令行
命令行,其实就是一个c函数
当我们操作系统启动后,会执行一个函数,该函数在目录 /bin/sh上
int main(int argc, char * argv[])
{
char cmd[20]
while(1)
{scanf("%s", cmd)}
if(!fork())
{exec(cmd);}
else
{wait();}
}
该函数是一个死循环,当我们输入命令之后,就会执行exec(cmd)
2.图形按钮
图形按钮就是利用消息机制实现的。
消息机制:
当硬件输入如鼠标点击等操作,我们将其放在一个消息队列中去,然后应用程序就利用GetMessage
函数获得消息,根据消息调用对应的函数实现图形按钮访问操作系统
总结一下:上面两种方法访问操作系统,实际上就是一些普通的c函数加上操作系统提供的重要函数,这些重要函数就是操作系统的接口.
操作系统的接口又称为系统调用(system_call)
系统调用的实现
CPL :当前特权级别,存放在cs寄存器中,当一个程序被打开时,CPL被初始化为3
DPL :目标特权级别,存放在GDT表中,内核初始化为0
只有CPL<=DPL时,才能成功跳转到目标程序
硬件提供了"主动进入内核的方法"
中断
中断是用户程序发起的调用内核代码的唯一方法,对于Inter x86, 中断指令就是int
int 指令将cs中的CPL改成0,成功进入内核
系统调用的核心
- 用户程序中包含一段包含int指令的代码
- 操作系统写中断处理