操作系统实验02——添加系统调用(理论知识)

命令行、图形按钮、应用程序

操作系统接口表现为函数调用,又由系统提供,所以称为操作系统——System_Call

系统调用:

在这里插入图片描述

用户程序
内核内存

用户程序为什么不能直接访问内核内存?
不能随意调用数据,不能随意的jmp。

凭什么? ---------------------> 硬件设计,将内核段和用户段隔离
在这里插入图片描述
DPL 目标段的特权级
CPL 当前段的特权级

如何进入内核?----------------------> 中断指令int

以实现一个whoaim来深入理解系统调用过程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于include/unistd.h中给出的每个系统调用宏,都有2+2*n个参数。其中第1个参数对应系统调用返回值的类型;第2个参数是系统调用的名称;随后是系统调用所携带的类型和名称。这个宏会被扩展成包含内嵌汇编语句的C语言函数

在这里插入图片描述
这里讲述了syscall3的宏定义对应的是一个内嵌汇编代码,把_syscall3(int, write, int, fd, char*, buf, off_t, count)带入将得到对应翻译代码,解释成汇编,大致意思即

int	 0x80
mov	%eax, __NR__write
mov	%ebx, fd
mov %ecx, count

所以int 0x80, 找IDT表,找到如下的中断处理程序。通过IDT表我们找到的对应CS,此时的CS段选择子,最后两位是0,也即代表此时进入内核态!

在这里插入图片描述
通过call _sys_call_table(, %eax, 4)找到我们真正需要调用的内核函数
在这里插入图片描述

上面的中断表是什么时候设置的呢,其实就是在上一节main()初始化sched_init()函数里实现的
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值