从零开始写操作系统(基于XV6):echo重写与并发进程控制功能构思

摘要:
XV6 Minix等用于教学的操作系统不可小觑。例如,古老的传说说,莱纳斯·托瓦尔兹在学习Minix操作系统时突发奇想!在芬兰赫尔辛基大学,他使用Minix操作平台构建了一个新的操作系统内核,他称之为Linux。我也希望走其他人曾经走过的路。对于xv6的编译,为了重写和扩展xv6,您需要重新编译修改后的xv6。1.将xv6的源代码复制到Linux系统!不能是Windows系统

像这种教学目的操作系统(例如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 功能一下

从零开始写操作系统(基于XV6):echo重写与并发进程控制功能构思第1张

这个功能由echo.c文件负责,

从零开始写操作系统(基于XV6):echo重写与并发进程控制功能构思第2张

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.系统启动的第一个进程,其入口函数在哪个文件第几 行?它主要实现什么功能?

免责声明:文章转载自《从零开始写操作系统(基于XV6):echo重写与并发进程控制功能构思》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JQuery中查找父元素,子元素,追加元素,插入元素和删除元素 及其他常用方法Linux大文件传输(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

UVA 11404 简单LCS模型DP 字典序比较

这个题目求某个字符串中含的最长的回文子串。 就是一个很简单的LCS模型吗,而且我不明白为什么网上这么多人都说仿照某写法把字符串先逆序一下,然后求LCS,我只想问一下,有必要吗? 直接按LCS的套路来就行了啊,只不过方式变了下,按上面的写法,又麻烦,又根本没利用的LCS的精髓思想 即,先从间隔0位开始做起,然后是间隔1位。。2.。。n-1位,d[i][j]代...

HDU 2064 汉诺塔III(递归)

题目链接 Problem Description 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。现在我们改变游戏的玩法,不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到...

更新Linux下openssl路径和库路径

更新Linux下openssl路径和库路径 参考ubuntu 中更新openssl库 新版openssl路径为老师博客中默认的路径/root/rocopenssl mv /usr/bin/openssl /usr/bin/openssl.bak mv /usr/include/openssl /usr/include/openssl.bak ln -s...

Qt之读取配置文件

一、读取配置文件增删功能与修改参数数据 1 #ifndef CONFIG_H 2 #define CONFIG_H 3 4 #define QS_FILEPATH "E:\woo\Code\Qt\APP_002_READCONF\config.ini" 5 6 #endif //CONFIG_H View Code 1 #ifndef MAINW...

redis 安装配置(开机启动)

1、安装wget     yum -y install wget 2、下载redis安装包(版本3.0以上) wget http://download.redis.io/releases/redis-3.0.4.tar.gz 3、安装redis    1)解压:tar -zxvf redis-3.0.4.tar.gz    2)进入src目录    3)m...

bat脚本以管理员身份运行时,目录没有定位到当前目录问题的解决方法

我们时常使用bat脚本去处理一些事情,有事bat中的命令需要以管理员的身份运行,但是运行后文件的目录自动定位到了C:Windowssystem32下,而不再脚本所在的目录下。 这是我的文件目录,WindosActive.bat脚本会读取WindosSerial.ini中的文件信息,但是脚本中的有些命令要以管理员的身份才可以正常运行。如果直接右键管理员运行...