smash 类 unix 内核开源项目

我要开发同款
匿名用户2018年12月12日
184阅读

技术信息

开源地址
https://github.com/wangzq0807/smash
授权协议
MIT

作品详情

smash是一个类Uix的内核,实现了基于分段和分页的内存管理,单个进程最大4GB虚拟地址空间,支持miix-v2l文件系统,实现了写实复制(fork)、管道等机制。

项目演示:

编写应用程序

目前已开发的API一共18个:

// 进程退出exter it exit(it code);// fork一个进程,父进程返回子进程的id,子进程返回0exter it fork(void);// 读文件exter it read(it fd, char *buf, it cout);// 写文件exter it write(it fd, cost char *buf, it cout);// 打开文件exter it ope(cost char *pathame, it flags, it mode);// 关闭文件exter it close(it fd);// 等待指定进程结束exter it waitpid(it pid, it *status, it optios);// 创建文件exter it creat(cost char *pathame, it mode);// 创建硬链接exter it lik(cost char *oldpath, cost char *ewpath);// 删除硬链接或删除文件exter it ulik(cost char *pathame);// 执行一个可执行程序exter it execve(cost char *pathame, char *cost argv[], char *cost evp[]);// 变更当前路径exter it chdir(cost char *pathame);// 创建目录exter it mkdir(cost char *pathame, it mode);// 删除目录exter it rmdir(cost char *pathame);// 切换到其他进程执行exter it pause(void);// 获取当前进程idexter it getpid(void);// 创建管道exter it pipe(it fd[2]);// 复制文件描述符exter it dup(it fd);

以helloworld为例,要编写一个应用程序首先要在usr/CMakeLists.txt文件中追加一行:

add_executable (helloworld helloworld.c ${CORE_SRCS})

括号内第一项helloworld指的是可执行文件名称

后面的项helloworld.c和${CORE_SRCS}是编译所需的源文件

所有应用程序都应该包含 ${CORE_SRCS},因为这里面定义了系统API。

然后就可以打开helloworld.c进行编辑。

跟在liux环境编写c语言代码类似:

#iclude "stdio.h"it mai(it argc, cost char **argv){    pritf("Hello,World!\");    retur 0;}

然后就可以编译了,编译方法请参照项目README

注:pritf()本身不是一个系统调用,而是通过write()系统调用实现的一个函数。

感谢

最后,感谢赵炯博士的宝书:《Liux内核完全剖析-基于0.12内核》

前五章对我帮助很大,尤其是第四章,

如果没有这本书,以我蹩脚的英语,不可能看懂x86的保护模式。

功能介绍

smash 是一个类 Unix 的内核,实现了基于分段和分页的内存管理,单个进程最大 4GB 虚拟地址空间,支持 minix-v2l 文件系统,实现了写实复制(fork)、管道等机制。 项目演示...

示例图片

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论