zoukankan      html  css  js  c++  java
  • 从零开始写操作系统(基于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.系统启动的第一个进程,其入口函数在哪个文件第几 行?它主要实现什么功能?

  • 相关阅读:
    LINQ to DataSet
    LINQ to SQL
    $.ajax()方法解析
    【转】数据库获得当前时间getdate()
    几种单例模式解析
    WebView上实现Java与JavaScript交互
    Dapper(.NET下的ORM框架)的基本使用
    IPtables中SNAT和MASQUERADE的区别
    我的桌面版fedora10安装
    我的fedora10的virtual box网络设置
  • 原文地址:https://www.cnblogs.com/zzzPark/p/6638021.html
Copyright © 2011-2022 走看看