UNIX档案系统( 二 )

【UNIX档案系统】struct filsys{        int s- isize; /*i节点区总块数*/       int s- fsize; /*档案卷总块数*/      int s- nfree; /*直接管理的空闲块数*/       int s- free[100] ; /*空闲块号栈*/       int s- ninode; /*直接管理的空闲i节点数*/       int s- inode[100] ;/*空闲i节点号栈*/… …} 空闲块的管理方法是:将空闲块从后向前,若干个空闲块(如100个)分为一组(最后一组为99块),每组最后一块作为索引表,用来登记下一组100的物理块号和块数,最前的一组物理块号和块数存放在管理块的s_free[100]和s_nfree中 。这种对空闲块先分组,再把组与组进行连结的管理方法称为组连结法 。对空闲块的分配和释放类似于栈,使用后进先出算法 。但其管理机构分为两级,一级常驻记忆体(管理块的s-nfree和s-free[]),另一级则驻在各组的第一个盘块上 。其优点是常驻记忆体的只有一个组,而不是将所有组的空闲表都调入记忆体,这样就大大的节省了记忆体空间,同时软体开销也小 。缺点是可能导致物理块的利用率不均匀 。例如:假设当前的s-nfree= 80,此时某进程释放一个档案块,其占用的物理块号为300,系统回收它后,s-nfree= 81,s-free[81]= 300 。接着某用户又申请物理空间,档案系统总是从索引表中取最后一项的值,即s-free[81]出栈,将300号物理块又立即分配使用 。可以想像,300号块还会面临再释放,再分配的可能 。300号块多次被使用,而其它空闲块却未被分配使用,即有些物理块可能长期被使用,而有些物理块可能长期得不到使用,因此对外存储器的使用寿命不利 。结构和共享Unix的档案系统採用多级树型目录结构,其优点是有效的解决了档案重名问题,又可以很方便地实现档案共享 。基本档案系统和子档案系统是可安装和可拆卸的,但在多用户环境下,多用户间共享数据同样感到不方便,绝对路径名是档案的唯一符号名,用户难以用另外符号名使用已分享档案,因此Uinx档案又提供了如下两种连结机制 。1、硬连结技术 。如果想为档案1.c建立一个硬连结2.c,则只需将2.c的目录项指针指到档案1.c的i节点,同时将i节点连结数加1即可 。这样用户似乎是增加了一个物理拷贝,可实际却只有一个档案实体,当删除连结时,只要删除一个目录项和将连结数减1 。2、符号连结技术 。如果想为usr/sxk/1.c建立一个符合连结2.c,则Unix通过read link读出档案内容,即找到原档案路径名,再通过原档案路径名去打开档案 。符号连结相当于给档案增加了一个别名 。也可为目录建立符号连结,并且可以跨档案系统 。Unix档案连结的优点是用很小的开销为多用户已分享档案提供了有效方式,且能快速定位档案和目录;缺点是对多用户使用档案不能加以并发控制,易造成数据的不一致性 。硬连结只适用于普通档案,而不适用于目录档案和不同档案系统 。安全性Unix是多用户作业系统,且它的各种外围设备都由相应的档案表示,因此安全性就很重要,它的安全主要通过磁碟i节点的许可权设定来实现,每个Unix档案和Unix目录,都有3个允许的比特位设定,分别定义档案所有者、分组和其他人的使用许可权,如:允许读、允许写、允许执行、允许SUID、允许SGID等,系统对档案保护的支持是比较充分的,只要正确设定档案和目录的许可权,档案安全是有保障的 。但需要注意的是,许可权为SGID和SUID的执行档 。SGID(SUID)中的S指set,程式在运行时,其进程的EUID(Effective UserID)或EGID(Effective Group ID)会被设成档案拥有者的UID、GID,从而进程也具有了Owner或OwnerGroup的许可权 。因此,如果使用不当,SGID和SUID程式会给系统安全性带来极大的危害 。另外,在Unix系统中还应当留意设备档案,谨防它成为不安全的后门 。例如,如果某个用户拥有/dev/lmem的读写许可权,他就可以使用debugger(或其它程式)修改优先权或其它属性,也可以读取系统缓冲区的数据 。Unix中的日誌档案能够记录作业系统的使用状况,通过分析日誌档案可以发现攻击迹象 。