smash:一个类unix内核
前言
每一个蹩脚的C++程序员都有一颗做操作系统内核的心。我从大学毕业开始就对操作系统内核感兴趣,将其看作是术之尽头,可惜那时候一直在无忧无虑的忙着玩网游,也就搁置了。随着时间的推移,逐渐就将其淡忘了,但无忧无虑的日子终有到头的时候,在这个寒冬,不情愿的放了个假,也终于有时间来完成一个简陋的内核。
简介
项目地址:https://github.com/wangzq0807/smash
smash是一个类Unix的内核,实现了基于分段和分页的内存管理,单个进程最大4GB虚拟地址空间,支持minix-v2l文件系统,实现了写实复制(fork),管道等机制。
项目演示(请忽略我蹩脚的英语...):
具体的编译安装方法请参照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; }
然后就可以编译了。
注:printf()本身不是一个系统调用,而是通过write()系统调用实现的一个函数。
感谢
最后,感谢赵炯博士的宝书:《Linux内核完全剖析-基于0.12内核》
前五章对我帮助很大,尤其是第四章,
如果没有这本书,以我蹩脚的英语,不可能看懂x86的保护模式。
ps:有对内核感兴趣的可以一起交流,我的微信wangzq0807
转载于:https://www.cnblogs.com/SuperFlanky/p/10092140.html
smash:一个类unix内核相关推荐
- Redox随笔(1)-用Rust语言编写的类UNIX操作系统
Redox是一个用Rust语言编写的类UNIX操作系统 , 它的目标是把Rust语言的创新带入到一个现代的微内核和全系列的应用程序. https://www.redox-os.org/zh/docs/ ...
- UNIX家族及类UNIX系统
UNIX家族及类UNIX系统 BSD FreeBSD NetBSD OpenBSD Sun Solaris SCO UNIX Darwin MINIX Linux DOS和它的接班人 DOS Wind ...
- Redox随笔(2)-用Rust语言编写的类UNIX操作系统
与其他操作系统相比,Redox如何 我们与其他操作系统有很多共同之处. 由于 Redox syscall接口是Unix-y.例如,我们有open, pipe, pipe2, lseek, read, ...
- 又一位纯手工打造CPU的牛人,并且汇编语言实现类Unix系统,支持文件系统
作者:安富莱电子,排版:晓宇 微信公众号:芯片之家(ID:chiphome-dy) 硬件设计: GR8CPU是在面包板上构建功能齐全的计算机.第一个版本GR8CPU Rev2拥有600多条电线 ...
- Linux 及其它类 Unix 系统的系统服务管理和控制程序(初始化系统/init system)简单梳理
文章目录 一.Linux 的启动过程 二.初始化程序 (一)System V init (二)Upstart init (三)systemd (四)Launchd (五)Epoch (六)Mudar ...
- 【转载】Linux等类Unix系统学习用书那点事儿!
Linux并不是一个比windows更神秘的系统. 是的Linux没有MSDN,但Linux和相关软件的文档绝对不比MSDN要少记得,一个看官方网站的文档,一个google.我想,大多问题都会解决的. ...
- 对Windows和类Unix争论的观点] 谁是谁的躯壳,谁又是谁的灵魂
虽然不一定是完全正确, 但还是有理有据的认真写的........ 我觉得有一定价值, 转来了 -----------------------------------------------原文---- ...
- 类Unix系统目录结构
文件和目录 Windows和Linux文件系统区别 在 windows 平台下,打开"计算机",我们看到的是一个个的驱动器盘符: 每个驱动器都有自己的根目录结构,这样形成了多个树并 ...
- 类UNIX的 history……
1 OS内核工作项目 存储器管理 进程管理 硬件管理 CPU的时间分配 IO管理 等-- 具体了解:计算机组成原理,操作系统,数据结构,计算机网络 2. 要实现+.-.* 等功能,在底 ...
- SerenityOS 操作系统类 Unix 操作系统
创建于2018年的SerenityOS是一个类似Unix的操作系统,但是带有图形化界面,适合X86台式计算机,,其界面类似90 年代的Win98/NT.几乎由一个人完成额操作系统.这几天其Web浏览器 ...
最新文章
- 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)
- Win7启动显示无法加载用户配置文件
- windbg-.process切换进程
- 021Python路--单例设计模式
- pyqt5知识:如何接受密码输入?
- Kibana停止kibana的方法命令:找到5601端口对应的进程ID 把此进程进行kill即可
- j2me手机游戏结构分析和实际小例子系列一 游戏背景和游戏精灵
- php var_export与var_dump 输出的不同
- leetcode159. 至多包含两个不同字符的最长子串
- python 示例_Python日历类| yeardatescalendar()方法与示例
- CentOS7显卡驱动问题
- 云平台队列服务-Qbus实践
- Mybatis(2)——Mapper映射文件
- 极客大学架构师训练营 系统安全架构 系统稳定高可用 PBKDF2加密算法 第11次作业
- 修改MySQL的配置文件
- MYSQL Error:You must SET PASSWORD before execut...
- VUE2.X全教程--基础详解(二)
- 论文总结与展望怎么写?
- wince 百度地图懒人包_百度地图winCE版 V10.9.2 安卓版
- c语言进行数据统计分析的研究报告,【干货分享】CCTS:临床试验统计分析计划及统计分析报告...
热门文章
- Tuple Class
- 5-01表达基本概念
- 调用 WebService 请求因 HTTP 状态 407 失败
- Linux 文件类型
- word 的脚注横线和文字怎么调整为左对齐?
- 【征收SCI稿件】厦门大学信息学院主办!通讯技术与信息科技征稿中!
- 中文NER的正确打开方式: 词汇增强方法总结 (从Lattice LSTM到FLAT)
- 【一分钟论文】轻松解读Semi-supervised Sequence Learning半监督序列学习
- 20191202_k-中心聚类算法和k-mean算法Python实现
- 【每日算法Day 103】老题新做,几乎不会有人想到的解法,它来了