6.S081 lab2 记录

主要对内核做了这些更改:

  • trace系统调用

  • 选择把一个新的变量watch_int添加到proc的结构体中(proc.h)在这里插入图片描述

  • 在allocproc增加一行:初始化proc的watch_int 为0 (proc.c)
    在这里插入图片描述

  • 在freeproc中增加一行:将proc的watch_int 重新设置为0(proc.c)
    在这里插入图片描述

  • 在fork中增加一行,让子进程继承父进程的watch_int(proc.c)在这里插入图片描述

  • 增加函数sys_trace,只需要将watch_int修改为传入参数即可(syscall.c)
    在这里插入图片描述
    trace实现中对内核做的修改主要内容就这些

  • sysinfo系统调用

  • 主要是增加了两个函数calnumproc(proc.c),用于统计目前总共的进程数,通过遍历全局变量proc(一个保存所有进程信息的数组),另外是cal_free(kalloc.c),根据kalloc函数可以看出xv6的物理内存由数据结构kmem串成的空闲链表管理,遍历这个链表就可以知道剩余的物理内存。

  • 总结:做完感觉没啥收获。可能主要原因这些系统调用的实现都是照本宣科,就模仿写好的系统调用来类似地写,但其实对这些系统调用更加基本的实现方法并不太清楚。等学习了后面的课再回来想想可能会有些收获吧

  • 先记录一下做这个lab的疑问,后面再回来思考:

  • 从内核到用户空间的数据转移为什么要用copyout,直接的赋值语句会发生什么?

  • 一个系统调用的大概流程是:ecall指令->cpu跳转到指定的处理地址->uservec, usertrap函数调用->syscall系统调用入口->跳转到指定的处理函数…这其中的细节目前完全不清楚

  • 内核栈的管理,与物理内存的映射关系,从用户空间到内核栈的参数传递,为什么要采用如此费力的实现方式?(比如用argint, argaddr来从进程的tramframe指针取参数),具体参数传送的细节也还没搞明白

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值