首页 > 其他 > 详细

L5 系统调用的实现 System Call

时间:2020-11-10 23:42:01      阅读:56      评论:0      收藏:0      [点我收藏+]

1 系统调用的直观实现

技术分享图片

2 操作系统分割用户态和核心态

DPL (Destination Privilege Level) 目标段的特权级
CPL (Current Privilege Level) 当前段的特权级
RPL (Request Privilege Level)
特权级的数值从0到3,代表的特权级别从高到低
特权级高的段可以访问特权级低的段,也就是特权级数值小的段可以访问特权级数值大的段
特权级数值低的段(最低是0)可以访问特权级数值高的段(最高是3)
技术分享图片
硬件来检查跨段间的访问是否合法

硬件提供了“主动进入内核的方法"

技术分享图片

中断是进入内核的唯一方法

技术分享图片
通过宏定义来展开成包含int指令的代码

下图中,可以根据上图右边的

 _syscall3(int, write, int, fd, const char *, buf, off_t, conut)

来对应下边的宏展开

下图中type对应int,name对应write,atype对应int,a对应fd,btype对应const char *,b对应buf,ctype对应off_t, c对应count
则展开后,代码为:
int write(int fd, const char * buf, off_t, count)
{
    long __res;
    __asm__ volatile("int 0x80":"=a"(__res):""(__NR_write),"b"((long)(fd)),"c"((long)(buf)),"d"((long)(count)));
   if(__res>=0)    return (int)__res; errno=-__res; return -1;}

技术分享图片
其中__NR_write是中断函数表的索引,4代表的是sys_write函数的索引

int指令去查IDT表,找到中断转去哪个地方执行:
技术分享图片

中断处理程序

技术分享图片
其中_sys_call_table是一个中断函数的入口地址表,%eax在前面的代码中被赋值为了被调用的中断函数的位置,乘以的数字4表示一个地址在中断函数入口表中占4个字节。

再来看_sys_call_table

技术分享图片
第四个位置(从0开始)放的是sys_write的地址





L5 系统调用的实现 System Call

原文:https://www.cnblogs.com/scnbhit/p/13956517.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!