OS第一弹---6.s081 lab1

提示:本文大约需要10min阅读


写在前面

为什么要开始写lab

最近虽然到了复习周,但是复习是真的烦,所以干脆摆烂,直接冲去学OS,MIT开源的6s081,属于一整个爱住了。


lab1

这次实验就是对于基础环境的熟悉,以及对xv6操作系统的简单了解。或者通俗点来说,这次实验就是对于使用c语言来调用系统函数。了解一下操作系统的基础操作。

实验环境搭建

本次实验采用的是linux系统下的qemu模拟器。因此需要进行linux搭建,由于觉得虚拟机太麻烦,所以干脆换个平台来进行实验。wsl提供了一个linux子系统,首先是环境安装。逻辑命令行下输入wsl --install,会将现在可行的所有适用版本都列出来,这个时候直接进行安装即可。
在这里插入图片描述
比如这里使用ubuntu20.0,使用wsl --install Ubuntu-20.04,由于这里我已经安装过环境,所以这里换一个系统来演示,使用wsl --install Ubuntu-18.04
install
安装成功后,进行初始化配置。配置成功之后,需要将资源安装

也可以访问这个微软的官方安装指南以及配置指南

成功安装
设置自己的用户名与密码即可。然后更新apt,并进行资源安装

$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu

这里有一个小tips,就是安装成功之后win之后键入Ubuntu便可直接进入。
便捷打开
之后便是进入正题。

boot(开机)

首先是将已经写好的操作系统进行开机。
利用git将远程的项目clone到本地,并切换为初始版本

$ git clone git://g.csail.mit.edu/xv6-labs-2021
Cloning into 'xv6-labs-2021'...
...
$ cd xv6-labs-2021
$ git checkout util
Branch 'util' set up to track remote branch 'util' from 'origin'.
Switched to a new branch 'util'
## 接下来就可以直接运行了
$ make qemu
riscv64-unknown-elf-gcc    -c -o kernel/entry.o kernel/entry.S
riscv64-unknown-elf-gcc -Wall -Werror -O -fno-omit-frame-pointer -ggdb -DSOL_UTIL -MD -mcmodel=medany -ffreestanding -fno-common -nostdlib -mno-relax -I. -fno-stack-protector -fno-pie -no-pie   -c -o kernel/start.o kernel/start.c
...  
riscv64-unknown-elf-ld -z max-page-size=4096 -N -e main -Ttext 0 -o user/_zombie user/zombie.o user/ulib.o user/usys.o user/printf.o user/umalloc.o
riscv64-unknown-elf-objdump -S user/_zombie > user/zombie.asm
riscv64-unknown-elf-objdump -t user/_zombie | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$/d' > user/zombie.sym
mkfs/mkfs fs.img README  user/xargstest.sh user/_cat user/_echo user/_forktest user/_grep user/_init user/_kill user/_ln user/_ls user/_mkdir user/_rm user/_sh user/_stressfs user/_usertests user/_grind user/_wc user/_zombie 
nmeta 46 (boot, super, log blocks 30 inode blocks 13, bitmap blocks 1) blocks 954 total 1000
balloc: first 591 blocks have been allocated
balloc: write bitmap block at sector 45
qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 3 -nographic -drive file=fs.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0

xv6 kernel is booting

hart 2 starting
hart 1 starting
init: starting sh
$ ls
.              1 1 1024
..             1 1 1024
README         2 2 2059
xargstest.sh   2 3 93
cat            2 4 24256
echo           2 5 23080
forktest       2 6 13272
grep           2 7 27560
init           2 8 23816
kill           2 9 23024
ln             2 10 22880
ls             2 11 26448
mkdir          2 12 23176
rm             2 13 23160
sh             2 14 41976
stressfs       2 15 24016
usertests      2 16 148456
grind          2 17 38144
wc             2 18 25344
zombie         2 19 22408
console        3 20 0

这里还有一个tips,就是可以在Vscode安装一个Remote Development使用vscode来进行非命令行编辑。在这里插入图片描述
安装成功之后全局启用,然后在wsl中使用code .进入vscode
vscode

sleep

接下来是利用系统函数实现sleep,这里首先参考一些已有的函数,来进行参数的获取。然后就是根据实验给的提示来进行,其中atoi是系统提供的函数,将字符转变为数字。总之就是给的提示很清晰,会让人觉得很简单。但是写完之后,需要注意的是要在makefile里面添加tag,重新编译以后才能执行。
insert tag

#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"

int
main(int argc, char  *argv[])
{
   
        if (argc != 2
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值