当前位置:  技术问答>linux和unix

关于unix(minix),nachos的文件系统的菜鸟问题

    来源: 互联网  发布时间:2015-09-11

    本文导语:  学校作业。我比较弱,大家包涵。如果有大虾知道nachos的东西就更好了。 nachos中的文件长度是被固定的。也就是生成后不能被改变。但是为什么是被固定的呢?它采用的是索引表分配空间的方法。难道这样的方法导...

学校作业。我比较弱,大家包涵。如果有大虾知道nachos的东西就更好了。

nachos中的文件长度是被固定的。也就是生成后不能被改变。但是为什么是被固定的呢?它采用的是索引表分配空间的方法。难道这样的方法导致了它的文件长度不能改变吗?

为什么unix和minix中的文件长度就不是固定的呢?

如果大家不知道我提问的具体内容,就大概说一下,一个简单的操作系统中,要实现文件长度不是生成时固定的,以后可以修改,写文件超出文件长度时能自动添加,需要做哪些工作吧。
多谢了。

|
不管是逻辑还是物理,总要有个什么方法来找到具体的块吧?这样的方法还必须非常高效,就算不高效,也要是在常数时间内可以找到对应的块,这样的话,索引表就是比较高效的实现了,逻辑块也是基于这样的实现,所以还是会产生我上面说的那种情况的……

如果要解决这种问题,类似于FAT或者inode的方案是比较好的。如果你想单纯靠索引表解决问题的话,代码会变得非常复杂,并且可能伴随着大量的效率损失(想想看也知道,否则malloc干啥不用这种方案呢?)……

|
我认为Unix (system V)种用的是混合索引,在i-node中有char i_addr[40],没3个字节为一项,总共为13项(最后1个字节保留),这样i_addr[0-9]作为直接索引,后面的3项分别作为间接索引(指向一个索引表),2级索引,3级索引。。。。。
索引表4B为一个表项(若一个块的大小为1k,一个表项将可以容纳256项)

所以Unix可以支持很大的文件

对pipe文件,为了提高文件读写速度,限制为10k(当块为1k时),这样就只用到直接索引,将10个地址项作为循环队列使用

|
以传统System V的文件系统为例

struct dinode
{
unsigned short di_mode;      /* mode and type of file */
short di_nlink;     /* number of links to file */
short di_uid;       /* owner's user id */
short di_gid;       /* owner's group id */
off_t di_size;      /* number of bytes in file */
char   di_addr[40]; /* disk block addresses */
time_t di_atime;    /* time last accessed */
time_t di_mtime;    /* time last modified */
time_t di_ctime;    /* time created */
};

di_addr[40],实际可用39,每3个字节一组,共13个地址,你可能误以为一个文件最长只有1k * 13 = 13k,其实UNIX的文件系统还有一个间址块的概念,即所谓的直接块、一次间址块、二次间址块和三次间址块,这样,一个unix下的普通文件的最大长度就可以为:
10个直接块,最多可有10k字节
1个具有256个直接块的一次间址块最多可有256k字节
1个具有256个一次间接块的二次间址块最多可有64M字节
1个具有256个二次间址块的三次间址块最多可有16G字节
(10 + 1 + 1 + 1 = 13)
但受到di_size的限制(32位长整形),实际上一个文件的最大长度不能超过4G(2的32次方)

这样说你知道是怎么一回事了吧

|
文件长度不能改变的原因你不是已经说到了吗?就是因为分配表的问题,假设文件大小可以修改的话,那么你在修改之前在文件A后面紧接着写入了B文件,当你需要修改的时候则会产生什么样的问题呢?如果是依赖于簇的文件系统(譬如M$的FAT16/32),可以在簇里面包含指向下一个簇的指针,但是分配表的就不行。

如果你修改A的大小势必修改分配表,但是数据的连续性要求你把B的一部分空间也占用了,如此一来,B就会被损坏或者B后移,但是又可能导致B后面的文件要后移,如此一来,文件操作就变得非常复杂且低效……

所以为了比较简单,干脆就不允许修改文件的大小。主要是系统设计的时候就是这么干的,所以你也没办法了……

    
 
 

您可能感兴趣的文章:

  • 我是菜鸟,听说去银行工作最好精通unix,可我现在学的是基于win2000的《现代操作系统》请问对以后学unix帮助大吗?
  • 菜鸟向sco unix+oracle高手请教
  • 菜鸟提问:请问Unix下面有没有类似Win32下_T这样的宏?
  • 菜鸟问题:现在要做unix下的c/c+编程的几个问题?
  • 菜鸟弱问Unix与硬件的兼容性问题
  • 菜鸟问题:unix中有像windows那样的自定义的环境变量吗?用java如何取
  • 关于SCO UNIX安装的菜鸟问题
  • 菜鸟提问:如何修改UNIX的shell提示符?
  • 菜鸟问题(sco unix网卡驱动安装)
  • 菜鸟提问:在Unix下如何象Windows一样抓屏?
  • 菜鸟询问关于Unix版本的问题
  • 安装sco unix 5.05 时,提示输入lisense number: 时找不到!!!!(菜鸟问题)
  • [菜鸟求助]unix_ident服务是什么东东?
  • 菜鸟问题:Linux/Unix下做C++开发,一般用什么工具??
  • unix 菜鸟发问,发言有分!!!!
  • 菜鸟问题:请问unix的内核部分的内容是不是能够调出到外存(对换区)?
  • 菜鸟问:windows和unix之间能否做磁盘镜像
  • unix c编程 菜鸟问题求助!
  • 菜鸟问题(可以安装Unix(AIX)+IBM DB2的最便宜的IBM机器是多少RMB)
  • 菜鸟问题,全文Linux和 Unix有 什么区别?
  • 小问题, Unix 如何建立一个文件 ,unix 文件有后缀名吗
  • .zip文件怎样在Unix下解压缩?.tar.tar文件怎样在Unix下解压缩
  • java中使用jxl生成excel文件,在unix中比在windows中明显慢,有高手知道原因吗?或者说unix和windows的文件系统哪个更快?
  • 各位兄弟帮忙,cut-ftp连接hp-unix,连接上了,但是unix上的文件不能显示,还能上传文件
  • 用oracle pl/sql 从A unix机器,去读取B unix机器上的一个文件,怎么实现?
  • 在 WINDOWS 2000 用 TELNET + IP 登录到 UNIX 中,怎样 GET UNIX 中的指定文件?
  • 在unix下如何拷贝文件?在windows下如何访问安装unix系统的硬盘?
  • UNIX怎样处理ASCII文件与文本文件
  • 新学者,各位不要吐血:哪儿有Unix的操作系统安装文件,我没有它的概念,我想学习之。Unix好神秘呀!
  • UNIX下how to 查找所有的文件夹下的文件?
  • 求助批处理实现dos -〉unix文件的转换,要将^M 替换为unix回车
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.util.regex类pattern的类成员方法: unix_lines定义及介绍
  • 刚刚接触Unix系统和Unix编程。急需Unix下多线程程序设计和网络Socket程序设计方面的资料。
  • unix/Linux下c++ boost thread库读写锁介绍
  • 关于UNIX的历史 : 1973年,K.Thompson和D.M.ritchie,用C改写UNIX。那么,在此之前,UNIX是用什么写的?
  • php将标准字符串格式时间转换成unix时间戳_strtotime
  • 没有unix系统我如何学习unix
  • php将unix时间戳转换成字符串时间函数(date)
  • unix盘哪里有下载的??哪里有比较好的unix论坛??万分感谢!!!!!!!!!
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • 急!装完unix5.06,再装win2000。重启后不能进unix.
  • UNIX特急!!!digital unix问题,请专家快来!!!
  • UNIX支持中文否,请推荐UNIX好书
  • SCO UNIX 5.0用软盘启动之后无法启动UNIX
  • 散分!!unix 用户调查!!!你使用哪款unix
  • hp unix 和 sco unix的区别
  • 入门问题,我想向UNIX编程方向发展,单目前不会UNIX,我该如何做
  • 强烈建议将linux/Unix栏目放到“软件开发者”大类里面来。----Unix开发的人助威支持!!!
  • 现在那些unix比较流行?Linux和 Unix有 什么区别?
  • 我想学习Unix,请高手给个下载网址,用linux来学习Unix差别大吗?
  • 请问各位unix大虾,哪有免费的unix下载?
  • 学UNIX从SOC UNIX开始好吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3