unix内核可以免费使用吗 软件推荐自制类

unix内核可以免费使用吗 软件推荐自制类(1)

点击右上方,关注开源中国OSC头条号,获取最新技术资讯

前言

每一个蹩脚的程序员都有一颗做操作系统内核的心。我从大学毕业开始就对操作系统内核感兴趣,将其看作是术之尽头,可惜那时候一直在无忧无虑的忙着玩网游,也就搁置了。随着时间的推移,逐渐就将其淡忘了,但无忧无虑的日子终有到头的时候,在这个寒冬,不情愿的放了个假,也终于有时间来完成一个简陋的内核。

简介

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

项目演示(请忽略我蹩脚的英语...):

unix内核可以免费使用吗 软件推荐自制类(2)

具体的编译安装方法请参照项目README

编写应用程序

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

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

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

add_executable (helloworld helloworld.c ${CORE_SRCS})

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

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

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

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

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

#include "stdio.h" int main(int argc, const char **argv) { printf("Hello,World!\n"); return 0; }

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

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

感谢

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

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

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

软件作者:SuperFranky

点击下方“了解更多”,获取软件下载地址。

↓↓↓

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页