加入收藏 | 设为首页 | 会员中心 | 我要投稿 通辽站长网 (https://www.0475zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

smash类unix内核

发布时间:2022-12-07 13:04:17 所属栏目:Unix 来源:互联网
导读: smash 是一个类 Unix 的内核,实现了基于分段和分页的内存管理,单个进程最大 4GB 虚拟地址空间unix内核,支持 minix-v2l 文件系统,实现了写实复制(fork)、管道等机制。
项目演示:
编写

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);

android内核 linux内核_深入理解unix内核_unix内核

以 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的保护模式。

(编辑:通辽站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!