33 增加系统调用(2)

代码的总体的逻辑:

首先时在 GDT表中添加 系统调用门 的描述符。

然后是 在汇编中实现关于 系统调用门描述符指向的函数。

然后是  使用C语言实现 在屏幕上显示字符。

然后将调用 汇编语言的SYSTEM_CALL 的函数专门封装一个函数

然后在 任务中调用 系统调用的时候,会从特权级3的栈,切换到特权级0的栈,还需要手动的 压入三个参数,3个参数是在 SYSTEM_CALL 的GDT表中指定的。

这里需要一张图

这张图不是很理解。

这是一张对比图:

系统调用VS切换特权级的图。

调用 do_syscall 是不是在模仿 C的函数调用

然后是在汇编中对 系统调用前的 寄存器状态压栈

然后是在汇编中,切换内核的数据段。

然后是在汇编中,系统调用完之后,进行 寄存器的出栈。

然后在调用 do_syscalll 之前还要手动的 压入栈中三个参数,这三个参数是从 已经有的栈中取的。

然后在调用完do_syscall 之后,还要手动的释放一下。

整个 系统调用完之后,还需要,进行 返回。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值