5 Star 6 Fork 1

mcnns/pkzd

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause
pkzd: 一个类unix操作系统的简单实现, 由unix v6改写而成
	注: 系统的名字取自游戏pokemon和zelda(注意是pkzd不是pmzd哦) 
系统简介:
	pkzd是一个根据unix v6改写的简单的请求调页的类unix操作系统, 系统的设计力求简洁, 所以很多设计非常简陋.
模拟机:
	系统镜像pkzd.img可以在bochs, qemu和virtualbox中运行(virtualbox中的格式为hdd并口硬盘, 只要把pkzd.img改成pkzd.hdd就行了)
硬件支持: x86架构
	系统追求简单只支持键盘, 显示屏和IDE硬盘
系统调用: pkzd支持以下的系统调用:
	pid_t	fork(void);
	int	execve(char *filename, char **argv, char **envp);
	int	exit(int status);
	pid_t	wait(int *status);
	pid_t 	getpid(void);
	pid_t	getppid(void);
	uid_t	getuid(void);
	uid_t	geteuid(void);
	gid_t	getgid(void);
	gid_t	getegid(void);
	int	setpgid(void); 
		该函数为system v版, 在调用此系统调用时父进程应该保证没有子进程存在
	int	brk(uint addr);
	int	creat(const char *pathname, mode_t mode);
	int	open(const char *pathname, int flags, mode_t mode);
	int	close(int fd);
	int	dup(int fd);
	int	read(int fd, char *buf, size_t cnt);
	int	write(int fd, const char *buf, size_t cnt);
	off_t	lseek(int fd, off_t offset, int whence);
	int	mknod(const char *pathname, mode_t mode, dev_t dev);
	int	access(const char *pathname, mode_t mode);
	int	link(const char *oldpath, const char *newpath);
	int	unlink(const char *path);
	int	mkdir(const char *pathname, mode_t mode);
	int	rmdir(const char *pathname);
	int	chdir(char *pathname);
	int	stat(const char *pathname, struct stat *stbuf);
	int	fstat(int fs, struct stat *stbuf);
命令: 为了节省时间, 我并没有编写太多的命令, 目前只实现了以下命令
	ls 
		ls命令只支持参数-aclu
	date
	chdir
	cat
文件系统: pkzd所使用的是一个简单的基于inode的文件系统
	fs目录下有一个最简单的支持文件的命令子集
		mkfs命令:
			mkfs device swapsize inodenumber
			初始化一个虚拟磁盘, device为虚拟磁盘(pkzd.img), swapsize为交换空间的块数(至少1024), inodenumber为inode的数目(至少100)
		ls命令:
			ls device directory
			列出虚拟磁盘device指定目录directory下的所有文件, directory必须为绝对路径
		rm命令:
			rm device pathname 
			删除虚拟磁盘device的指定文件pathname, pathname必须为绝对路径, pathname可以是文件, 特殊文件或者空目录
		cat命令: 
			cat device pathname
			显示虚拟磁盘device的指定文件pathname, pathname必须为绝对路径, pathname可以是文件或特殊文件
		link命令:
			./link device dest source
			在虚拟磁盘中创建source的硬链接dest, dest和source必须为绝对路径
		mknod命令:
			./mknod device pathname mode dev
			在虚拟磁盘中创建一个特殊文件pathname, pathname必须为绝对路径, dev为设备号 
			mode为linux结构struct stbuf中的st_mode的值的十进制
			比如16895代表目录, 8630代表字符设备, 33279代表为普通文件
		add命令:
			add device dest source mode		
			复制linux中的普通文件source(unix/linux中的路径名)到虚拟磁盘的dest(虚拟磁盘中绝对路径)中, mode的值同mknod命令中的mode
	虚拟磁盘:
		虚拟磁盘必须包含内核文件/pkzd, /init, 字符设备/dev/tty(设备号必须为0), 目录/bin(所有的命令都在该目录下)
信号:
	系统的信号只存在两种情况, 终止或者忽略
时间:
	时间是北京时间, 其他的时区无法正确的显示时间.我不知道如何从硬件获取正确的时区信息, 如果你知道请告知我.
最后感谢吾的挚友顾靖业帮我将此文翻译成英文
Copyright (c) 2015, mcnns All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the {organization} nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

一个类unix操作系统的实现 展开 收起
C
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/mcnns/pkzd.git
git@gitee.com:mcnns/pkzd.git
mcnns
pkzd
pkzd
master

搜索帮助