当前位置: 首页 > 软件库 > 其他开源 > >

smash

类 unix 内核
授权协议 MIT
开发语言 C/C++
所属分类 其他开源
软件类型 开源软件
地区 国产
投 递 者 葛承教
操作系统 UNIX
开源组织
适用人群 未知
 软件概览

smash 是一个类 Unix 的内核,实现了基于分段和分页的内存管理,单个进程最大 4GB 虚拟地址空间,支持 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的保护模式。

  • 这几天配置一批联想服务器,ipmi管理时,有时管理页面打不开,所以尝试了下使用ssh登录ipmi,然后进行管理,顺便总结下。 一、 SMASH-CLP介绍 SMASH-CLP 是由 DMTF 和 SMWG 推动的一项协议,提供了系统管理 CLI 实施的标准。 定义的 SMASH 体系结构做了很多工作,旨在为更多标准系统管理组件建立基础。 SMWG SMASH-CLP 是 DMTF 推动的整个 SM

 相关资料
  • WebSphere sMash 是 IBM WebSphere 家族提供的一个新应用平台产品, 它提供了一个 Web 2.0 应用的平台, 覆盖了开发, 部署和运行管理的全部过程. 程序员们利用动态脚本语言, 像 Groovy 和 PHP, 来开发 REST 风格的服务, 丰富体验的用户交互组件, 以及 Mashup (也就是Web 2.0 风格的集成). 为什么提供一个新的产品? 跟 WebSp

  • SMASH是一款增强设计者产能的极好的模拟数字信号混合仿真器,先前的SMASH注重于提高设计者产能,现在则由于对资产的重视产生新的需求:从虚拟测试和诊断通过从前端到后端的专业化来生成评估,SMASH更加注重高需求的新功能。 混合信号兼顾多层次模拟软件,能完全符合混合模拟与逻辑讯号电路的需求。混合讯号指的是SMASH能处理模拟或是连续时间的讯号与不连续时间的讯号,例如: 逻辑(二进制 binary)

  • 简单匹配 # fnmatch_fnmatch.py import fnmatch import os pattern = 'fnmatch_*.py' print('Pattern :', pattern) print() files = os.listdir('.') for name in sorted(files): print('Filename: {:<25} {}'.for

  • unix进程间通信方式(IPC) 管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。 命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。 信号(Signal):信号是

  • Unix Remote Control (IOT) Runs Scripts on Mac/Linux remotely. Why : I was setting up homebridge (iOS HomeKit Accesory Protocol) on my rasberryPi and after hooking up my IR Blaster, RF Transmitter and

  • Modern Unix bat A cat clone with syntax highlighting and Git integration. exa A modern replacement for ls. lsd The next gen file listing command. Backwards compatible with ls. delta A viewer for git a