smash类unix内核
项目演示:
编写
smash 是一个类 Unix 的内核,实现了基于分段和分页的内存管理,单个进程最大 4GB 虚拟地址空间unix内核,支持 minix-v2l 文件系统,实现了写实复制(fork)、管道等机制。 项目演示: 编写应用程序 目前已开发的 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的保护模式。 (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |