xv6操作系统 实验1小结

这几天做完了xv6 OS综合实验,心情果真轻松了不少,还是得小结一下,以便为一个月后的xv6 OS综合实验二做预备

在xv6上构建简单的应用程序

相当于在IDE上编写代码然后运行一样,xv6中代码能否运行跟引入头文件的顺序有关系,一般先引入types.h,这里定义了一些数据类型,如果没有先引入,则在此之前的头文件找不到数据类型,运行会出错,所以types.h是第一个引入的;stat.h一般放在第二位,最后放用户系统函数声明头文件user.h。

然后就自己编写类C程序,在Makefile中添加文件名以加入编译集合,make就生成了可执行文件。这个过程看似简单,但可以深挖有很多,比如系统是如何一步一步地编译文件、连接动态库、生成磁盘映像文件。

实现系统调用

实现系统调用的过程很繁琐,涉及到操作系统如何发现并调用系统API的过程。常规的必备操作包括:给系统调用增加调用号 – 添加、定义用户态入口 – 在分发函数表中添加表项 – 声明调用全局可用 – 实现系统调用的处理函数 – 真正落实调用逻辑

修改调度器时间片

总的来说,肯定需要有一个新的数据成员,叫时间片,用于进程轮转控制。而最终要的就是修改调度器,通过一个循环来消耗时间片。

实现优先级调度

总的来说,肯定需要有一个新的数据成员,叫优先级,用于优先级控制。最终还是落实到调度器上:找到RUNNABLE的优先级最高的进程上处理机就可以了。

实现信号量机制

信号量!信号量!这是操作系统中一个十分十分重要的概念,同时我们也要用代码工程来实现它。信号量的PV操作都是原子的,因此数据成员中应该有一个锁(xv6中采用自旋锁)、等待这个信号量的进程队列、信号量是否已经分配,信号资源数量。接下来重点就是实现信号量的PV操作,过程都得加锁操作。

实现slab内核内存管理

slab就是微缩版的页,解决内部碎片问题。那么,我们用页管理的思维来管理slab就ok. 分配slab时,找到一个大小合适的且没被占用的object作为存储空间,并建立虚存页表项;释放时,根据释放的地址找到相应的object,将其使用标志位置为0,就表示释放这块空间了,同时还要释放页表项。

实现COW

一开始页映射 – 写时触发中断 – COW – 释放

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值