pkzd(一个类unix操做系统的实现)

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(全部的命令都在该目录下)
信号:
 系统的信号只存在两种状况, 终止或者忽略
时间:
 时间是北京时间, 其余的时区没法正确的显示时间.我不知道如何从硬件获取正确的时区信息, 若是你知道请告知我.
系统发布在sourceforge:地址以下
https://sourceforge.net/projects/pkzd/node

相关文章
相关标签/搜索