MIT6.s081-2020 Lab1 Xv6 and Unix utilities

MIT6.s081-2020 Lab1 Xv6 and Unix utilities

安装

我用的腾讯云的ubuntu20.4,按照官方指南“Installing via APT (Debian/Ubuntu)”一节安装较为流畅
如果是16和18会在apt install的时候容易找不到package,并且执意更改源容易存在不可未知的错误,所以在此建议直接使用ubuntu20.4或安装docker
需要补充的是安装完了之后还要apt install riscv64-unknown-elf-gcc
官方指南文档的安装部分

Lab Xv6 and Unix utilities

lab1 文档
做这个Lab之前首先应该先通读一下xv6-book的charpter1

$ git clone git://g.csail.mit.edu/xv6-labs-2020
Cloning into 'xv6-labs-2020'...
...
$ cd xv6-labs-2020
$ git checkout util
Branch 'util' set up to track remote branch 'util' from 'origin'.
Switched to a new branch 'util'

然后每次写完一个部分在项目目录先make cleanmake qemu就能跑起来了。

sleep

这里就是帮你熟悉一下怎么开始在6.s081里写程序,熟悉的过程可能比较曲折,调用sleep()系统调用就好。

引言

实现 UNIX 程序sleep对于 xv6;你的sleep应该暂停用户指定的 ticks。ticks是 xv6 内核定义的时间概念,即来自计时器芯片的两次中断之间的时间。您的解决方案应该在文件中 user/sleep.c.

实现
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
int main(int argc, char *argv[]) {
   
  int time;
  if (argc <= 1) {
   
    fprintf(2, "sleep: need one arg for sleep time");
    exit(1);
  }
  time = atoi(argv[1]);
  sleep(time);
  exit(0);
}

pingpong

引言

编写一个程序,使用 UNIX 系统调用通过一对管道在两个进程之间“乒乓”一个字节,一个管道用于每个方向。父母应该向孩子发送一个字节;子进程应该打印“: received ping”,其中 是它的进程 ID,将管道上的字节写入父进程,然后退出;父母应该从孩子那里读取字节,打印“: received pong”,然后退出。您的解决方案应该在文件中user/pingpong.c.

实现

根据文档提供的HINT,我们可以知道大致的实现流程如下:

  • 利用pipe创建管道。
  • 利用fork创造一个孩子。
  • 利用read从管道中读取,并且write写入管道。
  • 利用getpid查找调用进程的进程ID。
  • 将程序添加到UPROGS在生成文件中。
  • xv6 上的用户程序有一组有限的库函数可供他们使用。您可以在中查看列表 user/user.h; 源(系统调用除外)在user/ulib.c,user/printf.c, 和user/umalloc.c.
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"

//0 - read 1 - write
int
main(int argc, char *argv[])
{
   
  int p1[2], p2[2];
  int ppid, cpid;
  char buf[1];
  pipe(p1);
  pipe(p2);

  //child
  if(fork() == 0){
   
    //start
    close(p1[1]);
    close(p2[0]);

    cpid = getpid();
    read(p1[0], buf, 1);
    fprintf(1,"%d: received ping\n",cpid);

    write(p2[1],"x",1)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: xv6是一个基于Unix的操作系统,它是由麻省理工学院开发的一个教学用途的操作系统。它的设计和实现都非常简单,因此非常适合用于操作系统的教学和学习。Unix utilitiesUnix操作系统中的一些常用工具,例如ls、grep、awk、sed等,它们可以帮助用户完成各种任务,例如查看文件、搜索文本、处理数据等。这些工具也被移植到了其他操作系统中,成为了广泛使用的工具。 ### 回答2: xv6是一个教学目的的操作系统内核,它是根据Unix第六版(Version 6 Unix)设计而成的。Unix utilities是指Unix操作系统中提供的一系列实用工具程序。 xv6的设计灵感来自于Unix,因此它具有类似于Unix的文件系统、进程管理、内存管理等特性。它采用C语言编写,具有简洁的结构和易于理解的代码,这使得学生可以更好地理解操作系统的内部工作原理。xv6内核为学生提供了一个可用于学习和实验的平台,帮助他们深入了解操作系统和计算机系统的工作方式。 与此同时,Unix utilities是一些用于完成特定任务的Unix命令行工具程序。这些工具程序通常被用于处理文件、管理进程、网络通信、文本处理等方面。常见的Unix utilities包括ls(列出目录内容)、grep(查找指定模式)、cp(复制文件)、rm(删除文件)等等。这些工具程序非常强大且灵活,可以通过简单的命令行参数来满足各种不同需求。 xv6Unix utilities有着密切的关系。学习和理解xv6可以帮助我们深入理解Unix操作系统的设计和实现原理。而掌握Unix utilities可以使我们更加高效地处理各种系统管理任务和编程工作。通过学习和使用这些工具,我们可以更好地理解和应用操作系统的概念和原则,提高我们的计算机系统操作和编程技能。总之,xv6Unix utilities都为我们提供了学习和实践操作系统的机会,帮助我们更好地掌握计算机系统的核心知识。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值