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

相關文章
相關標籤/搜索