【MIT6.S081】xv6学习路线、用户程序的编写、系统调用编写



一、前言

  MIT麻省理工学院本科操作系统课程,本次操作系统课程实践的任务是:借助现有的xv6环境,熟悉xv6内核相关代码,根据操作系统内核实现逻辑添加相关的系统调用,包括进程管理相关ps()、pstree()、getprocount()、getppid()内存管理相关getfreemem()、vmprint()函数,文件管理相关umask()、chmod()、ls()、ls -a、symlink、lseek、cdd()、pwd()、cat --help等。

二、预备知识

2.1 用户程序的编写,以helloworld为例

Step 1: user/路径下编写helloworld.c用户程序

在这里插入图片描述

Step 2: 修改xv6-labs-2021目录下的Makefile文件命令:vim Makefile

在这里插入图片描述
  按照格式$U/_**\完成配置工作:找到UPROGS,添加$U/_helloworld\

Step 3: xv6-labs-2021目录下执行make qemu,进行测试。

在这里插入图片描述
  执行***,得到运行结果。(注:***为编写的用户程序名)
   
注意!: 这里编写的用户程序与一般的C/C++有所区别,需要注意以下两点。
1.导库:与C/C++类似,这里常用的头文件包括"kernel/param.h"、"kernel/types.h"、"user/user.h"
2.不要return 0、要exit(0),否则编译会出错。

2.2 系统调用的编写,以ps系统调用为例

Step 1: 修改用户代码

  • user/usys.pl 添加系统调用函数的定义

在这里插入图片描述

  • user/user.h 添加入口entry("ps")

在这里插入图片描述

Step 2: 修改内核代码

  • kernel/syscall.h 定义系统调用号

在这里插入图片描述

  • kernel/syscall.h syscalls函数指针数组中添加对应的函数

在这里插入图片描述
在这里插入图片描述

  • kernel/syspro.c 将系统调用与功能函数关联起来

在这里插入图片描述

  • kernel/pro.c 实现具体的系统调用函数功能

在这里插入图片描述
Step 3: 编写应用工具

  • user/ps.c

在这里插入图片描述

Step 4: 修改Makefile,将$U/_ps\添加到MakefileUPROGS

在这里插入图片描述
Step 5: make qemu,然后测试


补充于3月10日,答辩PPT

在这里插入图片描述


三、Makefile深入解读

3.1 前言

  在实验过程中,多次遇到 make:*** No rule to make target ‘user/_ps’,needed by ’fs.img’.Stop. 错误,导致在编写相关系统调用的过程中频频出错。因此,通过调用一些命令探究make qemu、make clean等命令的执行过程对分析问题是相当重要的,有助于我们进一步调试。

3.2 Makefile核心格式

  Makefile的核心格式为:目标:目标的依赖1 目标的依赖2 【目标依赖得到满足后执行的代码】
  定义一个目标,后面写明一个目标依赖,当这个目标依赖的目标已经存在时,便通过下面的命令来产生该目标。

  我们先来拿一下例子来具体的理解一下Makefile内部的工作机理。
  如下图右下角所示,我们需要完成的目标是包饺子,需要的依赖(材料)是饺子皮和肉馅,当二者满足后执行的操作是用饺子皮包裹肉馅。同时,对于目标饺子皮又有两个依赖:面粉和水,当两者满足时执行下面的操作。即和面和擀面,然后得到饺子皮,完成总目标的一个依赖,接下来再去完成肉馅这个依赖,依次下去。

  我们可以发现这是一个深度遍历的过程,make也是通过类似的方式对Makefile执行深度遍历来解析这些依赖关系并生成它们。

在这里插入图片描述

3.3 xv6系统

  对于xv6系统而言,总目标为:make qemu,依赖于$K/kernel以及fs.imgKernel是负责生成内核的可执行文件,也就是最终编译得到的操作系统内核。fs.img负责生成文件系统的镜像,用于存放所有用户程序的硬盘。

四、推荐MIT6.S081学习路线

  1. 编写第一个用户程序
  2. 阅读xv6代码,了解关于进程管理、内存管理、文件管理的内容
  3. 熟悉xv6系统用户程序与内核程序进行参数传递的几个函数
  4. 编写第一个系统调用
  5. 编写带参数的系统调用,例如ls -a

可以参见下面的流程进行学习:


来源:答辩PPT

在这里插入图片描述


五、MIT学习相关的资料

  1. xv6课程网站:链接
  2. xv6-book-riscv-rev1:链接
  3. 课程视频:链接
  4. 课程视频翻译:链接
  • 7
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

For 丶I Forever

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值