手写操作系统(六十四)-DreamsOS完成

代码、内容参考来自于包括《操作系统真象还原》、《一个64位操作系统的设计与实现》以及《ORANGE’S:一个操作系统的实现》。

我们的系统还差个help命令

输出帮助信息,比如我们系统支持的命令

修改fs/fs.c

/* 显示系统支持的内部命令 */
void sys_help(void) {
    printk("\
\
Welcome to DreamsOS! \n\
\n\
Available commands :\n\
    ls: show directory or file information\n\
    cd: change current work directory\n\
    mkdir: create a directory\n\
    rmdir: remove a empty directory\n\
    rm: remove a regular file\n\
    pwd: show current work directory\n\
    ps: show process information\n\
    clear: clear screen\n\
\n\
Example:\n\
    mkdir dir\n\
\n\
Thank you for using DreamsOS!\n\
\n\
");
}

 

对应fs.h加入函数声明

void sys_help(void);

 

/lib/user/syscall.c

/* 显示系统支持的命令 */
void help(void) {
    _syscall0(SYS_HELP);
}

 

/lib/user/syscall.h

enum SYSCALL_NR {
    SYS_GETPID,
    SYS_WRITE,
    SYS_MALLOC,
    SYS_FREE,
    SYS_FORK,
    SYS_READ,
    SYS_PUTCHAR,
    SYS_CLEAR,
    SYS_GETCWD,
    SYS_OPEN,
    SYS_CLOSE,
    SYS_LSEEK,
    SYS_UNLINK,
    SYS_MKDIR,
    SYS_OPENDIR,
    SYS_CLOSEDIR,
    SYS_CHDIR,
    SYS_RMDIR,
    SYS_READDIR,
    SYS_REWINDDIR,
    SYS_STAT,
    SYS_PS,
    SYS_EXECV,
    SYS_EXIT,
    SYS_WAIT,
    SYS_PIPE,
    SYS_FD_REDIRECT,
    SYS_HELP
};
void help(void);

 

修改/userprog/syscall-init.c,加入syscall_table[SYS_HELP]

/* 初始化系统调用 */
void syscall_init(void) {
    put_str("syscall_init start\n");
    syscall_table[SYS_GETPID]       = sys_getpid;
    syscall_table[SYS_WRITE]        = sys_write;
    syscall_table[SYS_MALLOC]       = sys_malloc;
    syscall_table[SYS_FREE]     = sys_free;
    syscall_table[SYS_FORK]     = sys_fork;
    syscall_table[SYS_READ]     = sys_read;
    syscall_table[SYS_PUTCHAR]      = sys_putchar;
    syscall_table[SYS_CLEAR]        = cls_screen;
    syscall_table[SYS_GETCWD]       = sys_getcwd;
    syscall_table[SYS_OPEN]     = sys_open;
    syscall_table[SYS_CLOSE]        = sys_close;
    syscall_table[SYS_LSEEK]        = sys_lseek;
    syscall_table[SYS_UNLINK]       = sys_unlink;
    syscall_table[SYS_MKDIR]        = sys_mkdir;
    syscall_table[SYS_OPENDIR]      = sys_opendir;
    syscall_table[SYS_CLOSEDIR]     = sys_closedir;
    syscall_table[SYS_CHDIR]        = sys_chdir;
    syscall_table[SYS_RMDIR]        = sys_rmdir;
    syscall_table[SYS_READDIR]      = sys_readdir;
    syscall_table[SYS_REWINDDIR]        = sys_rewinddir;
    syscall_table[SYS_STAT]     = sys_stat;
    syscall_table[SYS_PS]       = sys_ps;
    syscall_table[SYS_EXECV]        = sys_execv;
    syscall_table[SYS_EXIT]     = sys_exit;
    syscall_table[SYS_WAIT]     = sys_wait;
    syscall_table[SYS_PIPE]     = sys_pipe;
    syscall_table[SYS_FD_REDIRECT]   = sys_fd_redirect;
    syscall_table[SYS_HELP]     = sys_help;
    put_str("syscall_init done\n");
}

 

修改/shell/buildin_cmd.c

/* 显示内建命令列表 */
void buildin_help(uint32_t argc UNUSED, char** argv UNUSED) {
    help();
}

 

对应/shell/buildin_cmd.h加入函数声明

void buildin_help(uint32_t argc, char** argv);

 

最后在shell.c加入分支

} else if (!strcmp("help", argv[0])) {
    buildin_help(argc, argv);

 

我们看看执行结果

 

整个系统如下:

 

到这里这个简易的操作系统已经完成了,我给他取名为Dreams,哈哈!

 

慷慨一下

在大一开学,虽然选择了软件工程专业,但是第一次接触电脑,根本不会用,当时电脑开机不用长按,都是同学告诉我的。

大一开学学C语言的时候,就对计算机有了兴趣。之后选择了java方向,开始学javaweb,ssm,springboot,springcloud,之后做了几个微服务项目,学一大堆的底层JVM、JUC以及第三方redis、消息中间件等等。

某一天突然就想好了毕业设计,畅想自己实现一个简易的操作系统,在这之上运行自己实现的简易的JVM,上面再来用我自己实现的spring和mybatis,可能说起来有一点绕。虽然早就有了这个想法,但是为了就业,也还是先学后端。

又学汇编,操作系统,经典书籍《深入理解计算机系统》,再次感谢B站,王道算入门了,哈工大李治军老师的就有接触代码,还不错。

到现在确实已经实现了手写操作系统、手写JVM、手写mybatis、手写spring、手写springMVC。

不过可惜的是由于从简单到困难,先实现手写mybatis、手写spring这些,再实现操作系统的,其实一开始就已经发现了,我实现的JVM是用GO写的,我实现的spring这些是用java写的,但是这个简易操作系统不可能支持的,不过还是全部实现了,我自己也是有一个目标的,那就是实现一个开源框架。

也算不负此行。

开学就大四了~~~~~~~~

 

参考

郑钢著操作系统真象还原

田宇著一个64位操作系统的设计与实现

丁渊著ORANGE’S:一个操作系统的实现

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇