Mit6.S081-實驗1-Xv6 and Unix utilities
- 前言
- 一、Boot xv6
- 1,實驗目的
- 2,操作流程
- 1)切換到xv6-labs-2020代碼庫的lab1分支
- 2)啟動xv6
- 3)測驗xv6
- 4)程序分析
- 5)其他操作
- 二、在xv6中添加一個自己撰寫的程式
- 1,原始碼準備
- 2,編譯配置
- 3,測驗添加程式
- 4,程序分析
- 三、xv6中shell簡析
前言
一、Boot xv6
1,實驗目的
利用qemu啟動xv6
2,操作流程
1)切換到xv6-labs-2020代碼庫的lab1分支
git checkout util
參考:https://pdos.csail.mit.edu/6.828/2020/labs/util.html
2)啟動xv6
make qemu

參考:https://pdos.csail.mit.edu/6.828/2020/labs/util.html
3)測驗xv6
ls

參考:https://pdos.csail.mit.edu/6.828/2020/labs/util.html
4)程序分析
xv6通過qemu啟動完成后,啟動了shell行程,通過shell,啟動子行程ls,顯示了xv6目錄下的檔案,
5)其他操作
查看xv6中的行程:Ctrl+p(xv6沒有實作ps程式)
退出qemu啟動的xv6:Ctrl+a x
二、在xv6中添加一個自己撰寫的程式
1,原始碼準備
在user目錄下創建copy.c
// copy.c: 將控制臺輸入內容輸出到控制臺
#include "kernel/types.h"
#include "user/user.h"
int
main()
{
char buf[64];
while(1){
//從console讀取輸入,通過system call的read函式實作
int n = read(0, buf, sizeof(buf));
//無輸入結束程式
if(n <= 0)
break;
//將console輸入輸出到控制臺,通過system call的write函式實作
write(1, buf, n);
}
exit(0);
}
參考:https://pdos.csail.mit.edu/6.828/2020/lec/l-overview/copy.c
2,編譯配置
在Makefile 152行添加配置

3,測驗添加程式
啟動xv6后,執行copy

4,程序分析
xv6通過qemu啟動完成后,啟動了shell行程,通過shell,啟動子行程copy,
三、xv6中shell簡析
shell也是一個用戶行程,不過在xv6啟動后就運行了,原始碼為user/sh.c,入口函式在145行,
在shell下輸入命令列,shell程式讀取輸入內容,通過呼叫fork(system call)開啟一個shell的子行程,
shell行程利用wait(system call),等待子行程執行完后繼續執行,
//創建子行程
//父行程中fork1()回傳創建的子行程pid;子行程中fork1執行成功回傳0,所以子行程才會執行runcmd()
if(fork1() == 0)
//在子行程中執行shell中輸入的程式
runcmd(parsecmd(buf));
//父行程等待子行程執行結束
wait(0);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/96889.html
標籤:其他
