二十Summer

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

操作系统接口

什么是操作系统接口?系统调用。

POSIX:Portable Operating System Interface of Unix(IEEE制定的一个标准族)

分类 POSIX定义 描述
任务管理 fork 创建一个进程
execl 运行一个可执行程序
pthread_create 创建一个线程
文件系统 open 打开一个文件或目录
EACCES 返回值,表示没有权限
mode_t st_mode 文件头结构:文件属性
 

系统调用的实现
内核(用户)态,内核(用户)段:
  • 区分内核态和用户态:一种处理器“硬件设计”;
  • 当前程序执行在什么态?由于CS:IP是当前指令,所以用CS的最低两位来表示:0是内核态,3是用户态;
  • 内核态可以访问任何数据,用户态不能访问内核数据;
  • DPL用来表示要访问的目标内存段的特权级;
  • CPL用来表示当前的特权级;
  • 检查DPL>=CPL,DPL>=RPL

硬件提供了“主动进入内核的方法”:对于Intel x86,那就是中断指令int(int 0x80)

  • int指令将使CS中的CPL改为0,“进入内核”。这是用户程序发起的调用内核代码的唯一方式;
  • 系统调用的核心:
    • 用户程序中包含一段包含int指令的代码(由库函数来做)
    • 操作系统写中断指令,获取想调程序的编号
    • 操作系统根据编号执行相应代码
  • 应用程序调用printf() --> C函数库的库函数printf() --> C函数库的库函数write() --> OS内核系统调用write()

 

   _syscall3的3表示是三个参数;宏展开;

  __asm__这块是内嵌汇编,"=a"(__res)表示将eax中的返回值赋给__res,后面""里面是空的,表示和前面一样指的是eax,即把__NR_##name表示的系统调用号赋给eax作为参数(宏展开后就是__NR_##write),后面就是把参数a b c赋给ebx ecx edx,参数都赋好后,int 0x80执行进入内核...

      

      还是很晕...

 

 


 

操作系统历史

 


我们的学习任务

 

posted on 2023-03-14 16:20  naiveSummer  阅读(9)  评论(0编辑  收藏  举报