操作系统——接口

一、接口

  • 用户使用计算机方式:命令行、图形按钮、应用程序
  • 用户通过普通函数+关键函数(open、fork...)使用计算机
  • 操作系统接口:系统调用的函数
  • 系统调用:操作系统提供的函数调用
  • 系统调用 <===> 接口

二、系统调用的实现

  •  用户态 ---->内核态:不能随影jump,因为不安全(比如可以随意看root密码)
  • 硬件设计区分用户态和内核态,保证不能随意jmp

  •  OS在系统初始化时,DPL设为0,即OS的DPL(代码段和数据段)都被head.s初始化为0,即GDT表象DPL=0
  • 数字越小,特权越大
  • DPL>=CPL  可访问
    • CPL = 0 ; DPL = 0 ; CPL可访问
    • CPL = 0 ; DPL = 3 ; CPL可访问
  • CPL(CS)、DPL(GDT)都在段寄存器中

中断指令 int 是硬件提供的唯一可进入内核的方法

系统调用的核心:

  • 用户程序包含一段int指令代码(int 0x80)
    • int指令:应用程序通过库函数、宏展开为内嵌汇编代码
  • OS中断处理,获取想调程序用程序的编号(system_call)
  • OS根据编号执行相应代码
  • OS规定只有 int 0x80 才能进入内核
  • int 0x80:查IDT表,取中断处理函数执行,返回

  •  int 0x80 通过将IDT表中的DPL=3保证其能调用IDT表
  • IDT表中CS置为8,将当前CPL变为0,从而通过int 0x80执行内核态

 printf(" ")调用过程:

 

猜你喜欢

转载自blog.csdn.net/weixin_45864705/article/details/127777057