课后作业2.3:系统调用

这个是在版本1内核编译的前置步骤(应该是)。

如果题目要求在版本0,则直接 cd 0/linux 后 make 。

第1关:版本1内核执行的完整系统调用序列

在输入 b system_call 后直接 commands 2 ,不要直接 c (czj原话)

感谢czj,没有他的指导我是做不出来的

第2关:在版本1中输出系统调用信息

在94和95行间插入红圈三句(czj特别提醒是 %eax ,不是 $eax )

让我们一起大声喊:谢谢czj!

第3关:在版本0中输出系统调用信息

第4关:为版本0内核增加一个系统调用getjiffies

第5关:在用户程序中使用新增的系统调用

这里直接 ./run 就能进入虚拟机 不需要 ./rungdb (感谢xhx)

./rungdb 进来 bochs 一直是 loading system

敲了几下 c 很神奇的进来了

然后继续敲 c ,之后所有在 bochs 里敲完命令,都要在 mygdb 中敲 c 才能进行(所以为什么)

重启虚拟机

谢谢xhx

### 完成课堂练习2.3系统调用第二 为了完成课堂练习2.3中的系统调用第二任务,需要理解并操作特定的操作系统源码环境。具体来说,在版本1内核中实现新的系统调用涉及多个步骤。 #### 准备工作 进入指定的工作目录以访问正确的Linux内核版本。对于本案例而言,应当切换到版本1对应的路径下: ```bash cd 1/linux ``` 之后编译当前的内核代码库来确保一切正常运行: ```bash make ``` #### 修改`sys.c`文件 针对此卡的要求是在`sys.c`文件里添加自定义的系统调用函数。打开该文件后寻找合适的位置加入新功能。通常情况下,新增加的系统调用会被放置于已有相似功能附近以便维护逻辑一致性[^2]。 例如,假设创建了一个名为`my_syscall`的新系统调用,则可以在`sys.c`中这样声明它: ```c asmlinkage long sys_my_syscall(void) { // 实现具体的业务逻辑... } ``` #### 更新系统调用表 除了在`sys.c`中定义实际处理程序外,还需要更新系统的调用向量表(即syscall table),使得操作系统能够识别这个新引入的功能。这一般通过编辑包含所有可用系统调用列表的相头文件来达成目的;不过确切做法可能依据不同版本而有所差异[^3]。 #### 测试与验证 最后一步是对所做的更改进行全面测试,确认新添加的系统调用按预期工作。可以通过编写简单的应用程序来进行这项检验,利用汇编指令或其他编程方式触发目标系统调用,并观察返回的结果是否符合设计初衷。
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值