编辑: 学冬欧巴么么哒 | 2019-07-07 |
/*存取权限*/ unsigned short di_uid;
unsigned short di_gid;
unsigned long di_size;
文件大小*/ unsigned int di_addr[NADDR];
/*物理块号*/ };
/*超级块*/ struct filsys{ unsigned short s_isize;
/*i节点块块数*/ unsigned long s_fsize;
/*数据块块数*/ unsigned int s_nfree;
空闲块块数*/ unsigned short s_pfree;
/*空闲块指针*/ unsigned int s_free[NICFREE];
/*空闲块堆栈*/ unsigned int s_ninode;
/*空闲i节点数*/ unsigned short s_pinode;
/*空闲i节点指针*/ unsigned int s_inode[NICINOD];
/*空闲i节点数组*/ unsigned int s_rinode;
铭记i节点*/ char s_fmod;
超级块修改标记*/ };
3.2.3算法 函数名:ialloc 功能:申请磁盘i节点 算法:通过超级块的i节点管理数组,查找一个没有被占用的i节点,放回i节点id. 函数名:ifree 功能:释放磁盘i节点 算法:修改超级块的i节点记录数据,释放相应的内存i节点. 函数名:iget 功能: 获得磁盘i节点到内存 算法:通过i节点的id从磁盘上读i节点数据到内存.通过id号找到这个i节点的磁盘地址,之后读出i节点大小的数据到内存. 函数名:iput 功能:释放内存i节点 算法:根据内存中这个i节点的信息做处理,若i节点只被引用一次,没有被修改过则从内存中释放,否则存储到磁盘覆盖原来的磁盘i节点,若引用次数大于1则引用次数自减一. 3.3 装入和退出系统模块 3.3.1功能 是读磁盘的相关数据到内存,为了用户可以对文件系统的操作. 实现函数: void install()启动,安装文件系统 void halt()关闭系统. 3.3.2 数据结构及流程图 系统装载 关闭系统 3.3.3算法 函数名:install 功能: 装载系统数据 算法:先将超级块数据读到内存,然后初始化系统打开文本表(SOF),读根目录的i节点到内存,读根目录到内存,设置为当前目录. 函数名:halt 功能:关闭系统 算法:将当前目录写入覆盖到磁盘目录的数据,关闭所有系统打开文件表中的文件.退出文件系统. 3.4用户登录注销模块 3.4.1功能 此模块处理用户登陆系统和推出系统的管理,涉及到的操作函数主要有login()和logout(). 3.4.2 数据结构及流程图 数据结构: /*用户打开表*/ struct user{ unsigned short u_default_mode;
unsigned short u_uid;
/*用户标志*/ unsigned short u_gid;
/*用户组标志*/ unsigned short u_ofile[NOFILE];
/*用户打开表*/ };
/*用户密码*/ struct pwd{ unsigned short p_uid;
unsigned short p_gid;
char password[PWDSIZ];
};
用户登录 用户退出 3.4.3算法 函数名:login 功能: 用户登录文件系统 算法:根据用的输入用户名和密码,从passsword文件中判断是否正确,假如正确则将该用户加入到登录的用户表中,初始化此用户的打开文件表.返回用户的id. 3.5 目录管理模块 3.5.1功能 在系统中通过目录树来管理和操作文件,在目录管理模块中主要是创建目录、删除目录、改变当前目录、为目录重命名: 3.5.2 数据结构及流程图 文件目录结构 /*目录项 结构*/ struct direct{ char d_name[DIRSIZ];
/*目录名*/ unsigned int d_ino;
/*目录数*/ };
/*目录*/ struct dir{ struct direct direct[DIRNUM];
int size;
};
3.5.3算法 mkdir()函数:首先判断目录名大小是否合法,不合法则给出提示信息,合法则判断是否存在重名的目录,存在则给出提示信息,否则初始化目录结构,并分配i节点,初始化i节点,将目录结构写入其存储空间,将目录名和i节点号写入用户目录. chdir()函数:判断要改变 的目录是否为当前目录,是则不改变,判断要改变的目录是否为根目录,若是判断当前目录是否为根目录,是则返回,不是则查找根目录存放地址,取得根目录i节点号,释放当前目录. _dir()函数:每个目录分配12个目录项,分别读出每个目录项地址到缓冲区,分别列出每个目录项下面的目录或文件名. 3.6 创建删除文件模块 3.6.1功能 创建文件:在当前目录下创建文件,为其申请i节点. 删除文件:根据文件名删除文件,释放其i节点和文件数据的磁盘块. 3.6.2 数据结构及流程图 系统打开文件表 struct file{ char f_mod........