從零開始寫操作系統(基於XV6):echo重寫與並發進程控制功能構思


像這種教學目的操作系統(例如XV6 Minix)是不能小看的。

比如上古傳說Linus Torvalds大神在上Minix操作操作系統課時突發奇想!

在芬蘭的赫爾辛基大學用Minix操作平台建立了一個新的操作系統的內核,他把它叫做Linux。

我也希望走走人家大神當年走的路.

 

關於xv6 的編譯,為了能夠重寫拓展xv6需要將修改后的xv6重新編譯

1.要將 xv6 的源碼拷貝到linux 系統下!不能是windows系統。然后cd 如xv6文件夾。執行make 命令!

2 然后執行chmod 777 ./sign.pl 

3 執行make clean

4 最后執行 make 可生成xf.img  xv6.img 兩個文件即可!

把這些文件拷貝出來,用boch 運行就可以了。

 

關於echo功能

xv6 運行一次echo 功能一下

這個功能由echo.c文件負責,

echo.c源碼如下:

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

int
main(int argc, char *argv[])
{
int i;

for(i = 1; i < argc; i++){
puts(argv[i]);
puts(" ");
}
puts("\n");
exit();
}

假如想小小修改一下echo 把echo 改成單詞倒置比如輸入hello world!

變成olleh !dlrow 單詞順序不變化 單詞字母順序倒置可以這樣:

#include "types.h"
#include "stat.h"
#include "user.h“

void f(char *s)

{
 if(*s||(*s)==' ')
{
   f(s+1);
   putchar(*s);

}

}

int
main(int argc, char *argv[])
{
int i;

for(i = 1; i < argc; i++){

f(argv[i]);
//puts(argv[i]);
puts(" ");
}
puts("\n");
exit();
}

 可以先在linux 下測試一下功能然后打包進去重新編譯。

 

如果希望設計哲學有所突破,需要參考xv6並發設計

1.Xv6中並發進程有幾種狀態,在源碼中分別以什么常量代表,試解釋每種狀態的意義。

 

2.Xv6中PCB是以什么方式存放的,鏈表還是數組?系統 最多允許同時運行多少個進程?

3.Xv6是否支持多核cpu? 如果支持的話,是通過哪個數 據結構支持的?

4.系統啟動的第一個進程,其入口函數在哪個文件第幾 行?它主要實現什么功能?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM