从零开始写操作系统(基于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(" ");
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(" ");
exit();
}

 可以先在linux 下测试一下功能然后打包进去重新编译。

如果希望设计哲学有所突破,需要参考xv6并发设计

1.Xv6中并发进程有几种状态,在源码中分别以什么常量代表,试解释每种状态的意义。

2.Xv6中PCB是以什么方式存放的,链表还是数组?系统 最多允许同时运行多少个进程?

3.Xv6是否支持多核cpu? 如果支持的话,是通过哪个数 据结构支持的?

4.系统启动的第一个进程,其入口函数在哪个文件第几 行?它主要实现什么功能?

原文地址:https://www.cnblogs.com/zzzPark/p/6638021.html