• 回答数

    3

  • 浏览数

    130

蜜糖Rose
首页 > 期刊论文 > 文件系统毕业论文

3个回答 默认排序
  • 默认排序
  • 按时间排序

成工1979

已采纳

计算机信息管理专科毕业论文计算机信息技术的管理尹全喜摘要:大量的信息数据被储存到计算机中,如何建立一个稳健的信息系统是一个需要研究的话题。本文概述了信息系统以及通常的信息系统结构,还有信息的载体技术,网络与数据库,只有合理的利用这些技术,才能够挖掘出信息的价值。关键词:信息系统;数据;计算机1. 信息系统从技术上说就是为了支持决策和组织控制而收集(或获取)、处理、存储、分配信息的一组相互关联的组件。除了支持决策、协作和控制,信息系统也可用来帮助经理和工人分析解决问题,使复杂性可视化,以及创造新的产品,从商业角度看,一个信息系统是一个用于解决环境提出的挑战的,基于信息技术的组织管理方案。通常用“信息系统”这个词时,特指依赖于计算机技术的信息系统。2. 信息系统结构国际标准化组织ISO在1979年提出了用于开放系统体系结构的开放系统互连(Open SystemInterconnection, OSI)模型。这是一种定义连接异种计算机的标准体系结构。OSI参考模型有物理层、数据链路层、网络层、传输层、会话层、表示层和应用层七层,也称七层协议。2.1 作业控制层次结构。主要为DPS(Data Processing System,数据处理系统)或称TPS(Transaction Processing System,交易处理系统),负责收集各项可用于管理的数据,处里日常例行的交易数据,并产生报表以支持组织的作业控制活动,即MRS。此类系统基本上是一种孤岛式的功能性文件系统,通常在信息系统发展的早期进行自动化时产生,可用来代替人工处里繁复的结构化数据。而此层次结构的管理人员也可以应用DSS(Decision Support System, 决策支持系统)完成相关决策工作。2.2 知识管理层次结构。主要是KWS(Knowledge Work System, 知识工作系统)与OS(Offi ceSystem, 办公室系统),负责累积知识与协助运用知识以提高组织的竞争力。而此层次结构的管理人员也可以应用DSS完成相关决策工作。2.3 管理控制层次结构。主要为MRS(Management Reporting System, 管理报告系统),即狭义的MIS(Management Information System, 管理信息系统),集成各个DPS所收集各项的数据,提供组织管理信息,反应部门现况,其内容通常是部门功能导向,用来解决各种结构性问题,可以产生综合摘要与例外报表以提供中阶管理人员使用,通常是一个大型的集成架构。而此层次结构的管理人员也可以应用DSS完成相关决策工作。2.4 策略规划层次结构。主要为EIS(Executive Information System, 主管信息系统)或称ESS(Executive Support System, 主管支持系统),提供组织状况,支持高层决策,是一种计算机化系统,支持、提供高级主管所需的决策信息,并支持主管规划、分析和沟通所需的能力,重点在于追踪、控制与沟通。又分成组之状况报道系统与人际沟通支持系统。而此层次结构的管理人员也可以应用DSS完成相关决策工作。 DSS是一种协助人类做决策的信息系统,协助用户规划与分析各种行动方案,常用试误的方法进行,通常是以交谈式的方法来解决半结构性或非结构性的问题,但其所强调的是支持而非代替人类进行决策。3. 计算机技术计算机的发展,在各行各业引发了信息革命,而这些都归功与计算机网络的发展与计算机数据处理的发展3.1 网络。由于计算机网络的快速发展,使企业经营,科学研究与计算机集合的更加的紧密。计算机网络用通讯介质把分布在不同的地理位置的计算机、计算机系统和其他网络设备连接起来,以功能完善的网络软件实现信息互通和网络资源共享。这些功能有效的提升了企业经营的效率,与科学研究的速度。根据组织的结构,还有使用计算机的用途不同,在计算机的网络结构也有所不同,不同的用途,有不同的计算机网络拓扑结构,拓扑结构是网络的链路和节点在地理上所形成的几何结构,并用以表示网络的整体结构外貌,同时也反映各个模块之间的结构关系。根据通讯的方式不同计算机网络的拓扑结构可分为点对点传输结构和广播传输结构两大类,而根据通信距离不同可分为局域网和广域网两种。3.2数据库技术在计算机中,信息是以数据的形式被存储的,而企业的商业活动,或者是业务也是以数据的形式被存储到计算机中。总之,信息系统的管理,就是数据的管理,对于海量数据来说,我们不能够用简单的文件去管理这些数据,因为用文件去管理,会存在性能瓶颈。应该有更新的技术去代替它,为此,数据库诞生了。数据库系统是对现实世界中的业务数据的存储,它有快速访问,整合业务数据的能力,由于数据库技术的发展,有些数据库 系统还支持数据挖掘功能。数据库的挖掘数据功能,能够预测未来的数据走向,起到一种数据预测的效果。要建立一个好的数据库系统,首先要建立实体联系模型(E-R模型),它是对现实世界的一种抽象,它抽取了客观事物中人们所关心的信息,忽略了非本质的细节,并对这些信息进行了精确的描述,它属于数据库系统的逻辑设计,其次是做数据库系统的物理设计,最后是数据库系统的实施与维护。参考文献:[1]刘泽.计算机信息管理基础.清华大学出版社,2004,9.[2] 赵泉. 21世纪高等院校计算机教材系列. 机械工业出版社,2003,3.计算机信息管理毕业论文浅谈信息管理与知识管理摘要:通过信息管理、知识管理概念的比较分析,论述了知识管理与信息管理的区别与联系,阐述了知识管理在管理的对象、管理的方式和技术以及管理的目标上的拓展、改进和深化。最后得出结论:知识管理是信息管理适应知识经济时代发展的必然结果,知识管理是信息科学发展中新的增长点。关键词:信息管理;知识管理;比较研究l信息管理与知识管理的概念1.1信息管理的概念。‘信息管理’,这个术语自20世纪70年代在国外提出以来,使用频率越来越高。关于 魏 管理”的概念,国外也存在多种不同的解释。尽管学者们对信息管理的内涵、外延以及发展阶段都有着种种不同的说法,但人们公认的信息管理概念可以总结如下:信息管理是个人、组织和社会为了有效地开发和利用信息资源,以现代信息技术为手段,对信息资源实施计划、组织、指挥、控制和协调的社会活动。既概括了信息管理的三个要素:人员、技术、信息;又体现了信息管理的两个方面:信息资源和信息活动;反映了管理活动的基本特征:计划、控制、协调等。通过对国内外文献资料的广泛查阅,发现人们对信息管理的理解表现在以下五种不同含义:信息内容管理,信息媒体管理,计算机信息管理,管理信息系统,信息产业或行业的队伍管理。l.2知识管理的概念。关于知识管理的定义,在国内外众{5{纷纭。在国外,奎达斯认为,知识管程,以满足现在或将来出现的各种需要,确定和探索现有和获得的知识资产,开发新的机会。巴斯认为,知识管理是指为了增强组织的效绩而创造、获取和使用知识的过程。丹利尔?奥利里认为,就唇降组织收到的各种来源的信息转化为知识,并将知识与人联系起来的过程。马斯认为,知识管理是—个系统的发现、选择、组织、过滤和表述信息的过程,目的是改善雇员对待特定问题的理解。美国德尔集团创始人之一卡尔?费拉保罗认为,知识管理就是运用。是为企业实现显性知识和隐性知识共享提供的新途径。而如何识别、获取、开发、分解、储存、传递知识,从而使每个员工在最大限度地贡献出其积累的知识的同时,也能享用他人的知识,实现知识共享则是知识管理的目标。在国内,乌家培教授认为,知识管理是信息管理发展的新阶层,它同信息管理以往各阶段不一样,要求把信息与信息、信息与活动、信息与人连结起来,在人际交流的互动过程中,通过信息与知识(除显性知识外还包括隐性知识)的共享,运用群体的智能进行创新,以赢得竞争优势。他指出。对于知识管理的研究,最宽的理解认为,知识管理就是知识时代的管理,最窄的理解则认为,知识管理只是对知识资产(或智力资本)的管理。2信息管理与知识管理的联系信息管理是知识管理的基础,知识管理是信息管理在深度和广度上的进一步深化和发展。信息管理为知识管理提供了坚实的基础,因为共享信息是其关键因素之一,因而如果—个组织不能进行有效的信息管理就不可能成功地进行知识管理。首先,知识管理需要信息管理理论与技术的支撑。知识管理的杨 黾知识仓嘶,知识仓! 是一个连续不断的过程。在知识经济时代,知识已成为一种基本的生产资料,但知识的创新离不开信息,而知识不能简单地从所得数据进行归纳概括中产生,由知识与信息的互动性决定了信息资源演变成为知识资源的过程中,不可避免地需要运用信息管理理论与技术对信息资源进行感知、提取、识别、检索、规划、传递、开发、控制、处理、集成、存储和利用,通过学习过程与价值认知使信息转化为知识。信息管理理论和技术的发展为知识的采集与加工、交流与共享、应用与创新提供了得天独厚的环境和条件,为知识管理项目的实施奠定了坚实的基础。因此,知识管理与信息管理是相互依存的。其次,知识管理是对信息管理的扬弃。这主要表现在三个方面:一是传统的信息管理以提供一次、二次文献为主,而知识管理不再局限于利用片面的信息来满足用户的需求,而是对用户的需求系统分析,向用户提供全面、完善的解决方案,帮助用户选择有用的文献,提高知识的获取效率。二是传统的信息管理仅局限于对信息的管理,而忽视对人的管理。其实在信息获取的整个流中,人才是核心。知识管理认为对人的管理既可以提供广泛的知识来源,又可以建立良好的组织方式用以促进知识的传播,这适应了知识经济时代的要求。三是姗识管理通过对知识的管理。抛弃了信息管理中被动处理信息资源的工作模式,它与知识交流、共享、创新和应用的全过程融合,使知识管理成为知识创新的核心能力。第三,知识管理是信息管理的延伸与发展。如果说售息管理使数据转化为信息,并使信息为组织设定的目标服务,那么知识管理则使信息转化为知识,并用知识来提高特定组织的应变能力和创新能力。信息管理经历了文献管理、计算机管理、信息资源管理、竞争性情报管理,进而演进到知识管理。知识管理是信息管理发展的新阶段,它同信息管理以往各阶段不一样,要求把信息与信息、信息与活动、信息与人联结起来,在人际交流的互动过程中,通过信息与知识(除显性知识外还包括隐性知识)的共享,运用群体的智慧进行创新,以赢得竞争优势。3信息管理与知识管理的比较研究信息管理与知识管理的主要区别:3.1信息管理活动主要涉及到信息技术和信息资源两个要素,而知识管理除信息技术和信息资源之外,还要管理人力资源。知识管理的目标就是运用信息技术、整合信息资源和人力资源,促进组织内知识资源的快速流动和共享。有效的控制显性知识(信息资源)和隐性知识(人力资源)的互相转化,实现知识创新。3.2从管理对象看,信息管理着重显性知识(信息资源)的管理,而知识管理着重隐性知识(信息资源)的管理与开发。3.3信息管理的工作重心是解决社会信息流的有序化、易检性和信息资源的整合问题。主要是通过对信息的收集、加工与处理,形成高度相关、比纳与检索和利用的信息资源。知识管理的工作重心是对信息进行分析、综合和概括,把信息提升为对用户决策有重大价值的知识资源,实现知识发现、知识创造和知识利用。3.4信息管理强调信息的加工、保存和服务;知识管理则以知识的共享、创新和利用为核心。传统戏系管理比较偏重于信息、知识资源的收集、整理、分析、传递、利用,把显性知识看作管理的唯一对象,忽略了知识包断。知识管理把信息管理的平台,机械的方式变为动态的知识创新活动,从而把信息管理提高到—个更高的层次。4信息管理向知识管理的转化知识管理是信息管理过程中的产物,也就是说知识管理是信息管理发展的—个新阶段。概括地说,知识管理是随着人们对资源认识的不断深化和管理能力的不断提高而产生和发展起来的,是人力资源管理和知识资源管理的高级化合物,代表了信息管理的发展方向。从信息管理到知识管理,大致经历了三个阶段:2O世纪40年代及40年代以前,被称为文献信息的管理阶段,也被称为传统的手工方式的信息管理阶段;20世纪50年代至80年代初,由于信息总量的迅速增加,信息涌流的严峻形势使信息处理技术受到高度重视,信息系统和办公自动化系统被广泛应用,这是信息技术管理阶段;20世纪8O年代至90年代中期,以信息资源和信息活动的各种要素为管理对象的这—时期,被称为信息资源管理阶段。自1995年以来,在现代怠息技术与网络技术的作用下,进入了知识管理阶段,即信息管理的综合集成阶段,它标志着信息管理扩大到了知识管理的应用领域。从信息管理到知识管理的转化是管理理论与实践中“以人为本”的管理的进一步体现。人成为知识管理的对象,也是知识管理的目的。知识管理是信息管理适应经济时代发展的必然结果和趋势,是信息科学发展中新的增长点,是信息科学的实质、目标和任务的充分体现。实行知识管理,推进信息化建设,标志着人类社会开始进入全球经济—体化的知识文明时代。参考文献[1]何平.高洁.信息管理概论[M].北京:科学出版社,2007。4[2]郭阳.信息管理系统与知识管理系统之比较[J]情报杂志.2006,~2.

268 评论

挪威森林北辰星

本文主要讲述 Linux 上比较流行的 ext2 文件系统在硬盘分区上的详细布局情况。Ext2 文件系统加上日志支持的下一个版本是 ext3 文件系统,它和 ext2 文件系统在硬盘布局上是一样的,其差别仅仅是 ext3 文件系统在硬盘上多出了一个特殊的 inode(可以理解为一个特殊文件),用来记录文件系统的日志,也即所谓的 journal。由于本文并不讨论日志文件,所以本文的内容对于 ext2 和 ext3 都是适用的。前言本文的资料来源是 Linux 内核中 ext3 文件系统的源代码。为了便于读者查阅源代码,本文中一些关键的技术词汇都使用了内核源代码中所使用的英语单词,而没有使用相应的中文翻译。(这种方法是否恰当,还请读者朋友们指教。)粗略的描述对于 ext2 文件系统来说,硬盘分区首先被划分为一个个的 block,一个 ext2 文件系统上的每个 block 都是一样大小的,但是对于不同的 ext2 文件系统,block 的大小可以有区别。典型的 block 大小是 1024 bytes 或者 4096 bytes。这个大小在创建 ext2 文件系统的时候被决定,它可以由系统管理员指定,也可以由文件系统的创建程序根据硬盘分区的大小,自动选择一个较合理的值。这些 blocks 被聚在一起分成几个大的 block group。每个 block group 中有多少个 block 是固定的。每个 block group 都相对应一个 group descriptor,这些 group descriptor 被聚在一起放在硬盘分区的开头部分,跟在 super block 的后面。所谓 super block,我们下面还要讲到。在这个 descriptor 当中有几个重要的 block 指针。我们这里所说的 block 指针,就是指硬盘分区上的 block 号数,比如,指针的值为 0,我们就说它是指向硬盘分区上的 block 0;指针的值为 1023,我们就说它是指向硬盘分区上的 block 1023。我们注意到,一个硬盘分区上的 block 计数是从 0 开始的,并且这个计数对于这个硬盘分区来说是全局性质的。在 block group 的 group descriptor 中,其中有一个 block 指针指向这个 block group 的 block bitmap,block bitmap 中的每个 bit 表示一个 block,如果该 bit 为 0,表示该 block 中有数据,如果 bit 为 1,则表示该 block 是空闲的。注意,这个 block bitmap 本身也正好只有一个 block 那么大小。假设 block 大小为 S bytes,那么 block bitmap 当中只能记载 8*S 个 block 的情况(因为一个 byte 等于 8 个 bits,而一个 bit 对应一个 block)。这也就是说,一个 block group 最多只能有 8*S*S bytes 这么大。在 block group 的 group descriptor 中另有一个 block 指针指向 inode bitmap,这个 bitmap 同样也是正好有一个 block 那么大,里面的每一个 bit 相对应一个 inode。硬盘上的一个 inode 大体上相对应于文件系统上的一个文件或者目录。关于 inode,我们下面还要进一步讲到。在 block group 的 descriptor 中另一个重要的 block 指针,是指向所谓的 inode table。这个 inode table 就不止一个 block 那么大了。这个 inode table 就是这个 block group 中所聚集到的全部 inode 放在一起形成的。一个 inode 当中记载的最关键的信息,是这个 inode 中的用户数据存放在什么地方。我们在前面提到,一个 inode 大体上相对应于文件系统中的一个文件,那么用户文件的内容存放在什么地方,这就是一个 inode 要回答的问题。一个 inode 通过提供一系列的 block 指针,来回答这个问题。这些 block 指针指向的 block,里面就存放了用户文件的内容。2.1 回顾现在我们回顾一下。硬盘分区首先被分为好多个 block。这些 block 聚在一起,被分成几组,也就是 block group。每个 block group 都有一个 group descriptor。所有这些 descriptor 被聚在一起,放在硬盘分区的开头部分,跟在 super block 的后面。从 group descriptor 我们可以通过 block 指针,找到这个 block group 的 inode table 和 block bitmap 等等。从 inode table 里面,我们就可以看到一个个的 inode 了。从一个 inode,我们通过它里面的 block 指针,就可以进而找到存放用户数据的那些 block。我们还要提一下,block 指针不是可以到处乱指的。一个 block group 的 block bitmap 和 inode bitmap 以及 inode table,都依次存放在这个 block group 的开头部分,而那些存放用户数据的 block 就紧跟在它们的后面。一个 block group 结束后,另一个 block group 又跟着开始。3.1 Super Block所谓 ext2 文件系统的 super block,就是硬盘分区开头(开头的第一个 byte 是 byte 0)从 byte 1024 开始往后的一部分数据。由于 block size 最小是 1024 bytes,所以 super block 可能是在 block 1 中(此时 block 的大小正好是 1024 bytes),也可能是在 block 0 中。硬盘分区上 ext3 文件系统的 super block 的详细情况如下。其中 __u32 是表示 unsigned 不带符号的 32 bits 的数据类型,其余类推。这是 Linux 内核中所用到的数据类型,如果是开发用户空间(user-space)的程序,可以根据具体计算机平台的情况,用 unsigned long 等等来代替。下面列表中关于 fragments 的部分可以忽略,Linux 上的 ext3 文件系统并没有实现 fragments 这个特性。另外要注意,ext3 文件系统在硬盘分区上的数据是按照 Intel 的 Little-endian 格式存放的,如果是在 PC 以外的平台上开发 ext3 相关的程序,要特别注意这一点。如果只是在 PC 上做开发,倒不用特别注意。struct ext3_super_block {/*00*/ __u32 s_inodes_count; /* inodes 计数 */__u32 s_blocks_count; /* blocks 计数 */__u32 s_r_blocks_count; /* 保留的 blocks 计数 */__u32 s_free_blocks_count; /* 空闲的 blocks 计数 *//*10*/ __u32 s_free_inodes_count; /* 空闲的 inodes 计数 */__u32 s_first_data_block; /* 第一个数据 block */__u32 s_log_block_size; /* block 的大小 */__s32 s_log_frag_size; /* 可以忽略 *//*20*/ __u32 s_blocks_per_group; /* 每 block group 的 block 数量 */__u32 s_frags_per_group; /* 可以忽略 */__u32 s_inodes_per_group; /* 每 block group 的 inode 数量 */__u32 s_mtime; /* Mount time *//*30*/ __u32 s_wtime; /* Write time */__u16 s_mnt_count; /* Mount count */__s16 s_max_mnt_count; /* Maximal mount count */__u16 s_magic; /* Magic 签名 */__u16 s_state; /* File system state */__u16 s_errors; /* Behaviour when detecting errors */__u16 s_minor_rev_level; /* minor revision level *//*40*/ __u32 s_lastcheck; /* time of last check */__u32 s_checkinterval; /* max. time between checks */__u32 s_creator_os; /* 可以忽略 */__u32 s_rev_level; /* Revision level *//*50*/ __u16 s_def_resuid; /* Default uid for reserved blocks */__u16 s_def_resgid; /* Default gid for reserved blocks */__u32 s_first_ino; /* First non-reserved inode */__u16 s_inode_size; /* size of inode structure */__u16 s_block_group_nr; /* block group # of this superblock */__u32 s_feature_compat; /* compatible feature set *//*60*/ __u32 s_feature_incompat; /* incompatible feature set */__u32 s_feature_ro_compat; /* readonly-compatible feature set *//*68*/ __u8 s_uuid[16]; /* 128-bit uuid for volume *//*78*/ char s_volume_name[16]; /* volume name *//*88*/ char s_last_mounted[64]; /* directory where last mounted *//*C8*/ __u32 s_algorithm_usage_bitmap; /* 可以忽略 */__u8 s_prealloc_blocks; /* 可以忽略 */__u8 s_prealloc_dir_blocks; /* 可以忽略 */__u16 s_padding1; /* 可以忽略 *//*D0*/ __u8 s_journal_uuid[16]; /* uuid of journal superblock *//*E0*/ __u32 s_journal_inum; /* 日志文件的 inode 号数 */__u32 s_journal_dev; /* 日志文件的设备号 */__u32 s_last_orphan; /* start of list of inodes to delete *//*EC*/ __u32 s_reserved[197]; /* 可以忽略 */};我们可以看到,super block 一共有 1024 bytes 那么大。在 super block 中,我们第一个要关心的字段是 magic 签名,对于 ext2 和 ext3 文件系统来说,这个字段的值应该正好等于 0xEF53。如果不等的话,那么这个硬盘分区上肯定不是一个正常的 ext2 或 ext3 文件系统。从这里,我们也可以估计到,ext2 和 ext3 的兼容性一定是很强的,不然的话,Linux 内核的开发者应该会为 ext3 文件系统另选一个 magic 签名才对。在 super block 中另一个重要的字段是 s_log_block_size。从这个字段,我们可以得出真正的 block 的大小。我们把真正 block 的大小记作 B,B = 1 << (s_log_block_size + 10),单位是 bytes。举例来说,如果这个字段是 0,那么 block 的大小就是 1024 bytes,这正好就是最小的 block 大小;如果这个字段是 2,那么 block 大小就是 4096 bytes。从这里我们就得到了 block 的大小这一非常重要的数据。3.2 Group Descriptors我们继续往下,看跟在 super block 后面的一堆 group descriptors。首先注意到 super block 是从 byte 1024 开始,一共有 1024 bytes 那么大。而 group descriptors 是从 super block 后面的第一个 block 开始。也就是说,如果 super block 是在 block 0,那么 group descriptors 就是从 block 1 开始;如果 super block 是在 block 1,那么 group descriptors 就是从 block 2 开始。因为 super block 一共只有 1024 bytes 那么大,所以不会超出一个 block 的边界。如果一个 block 正好是 1024 bytes 那么大的话,我们看到 group descriptors 就是紧跟在 super block 后面的了,没有留一点空隙。而如果一个 block 是 4096 bytes 那么大的话,那么在 group descriptors(从 byte 4096 开始)和 super block 的结尾之间,就有一定的空隙(4096 - 2048 bytes)。那么硬盘分区上一共有多少个 block group,或者说一共有多少个 group descriptors,这我们要在 super block 中找答案。super block 中的 s_blocks_count 记录了硬盘分区上的 block 的总数,而 s_blocks_per_group 记录了每个 group 中有多少个 block。显然,文件系统上的 block groups 数量,我们把它记作 G,G = (s_blocks_count - s_first_data_block - 1) / s_blocks_per_group + 1。为什么要减去 s_first_data_block,因为 s_blocks_count 是硬盘分区上全部的 block 的数量,而在 s_first_data_block 之前的 block 是不归 block group 管的,所以当然要减去。最后为什么又要加一,这是因为尾巴上可能多出来一些 block,这些 block 我们要把它划在一个相对较小的 group 里面。注意,硬盘分区上的所有这些 group descriptors 要能塞在一个 block 里面。也就是说 groups_count * descriptor_size 必须小于等于 block_size。知道了硬盘分区上一共有多少个 block group,我们就可以把这么多个 group descriptors 读出来了。先来看看 group descriptor 是什么样子的。struct ext3_group_desc{__u32 bg_block_bitmap; /* block 指针指向 block bitmap */__u32 bg_inode_bitmap; /* block 指针指向 inode bitmap */__u32 bg_inode_table; /* block 指针指向 inodes table */__u16 bg_free_blocks_count; /* 空闲的 blocks 计数 */__u16 bg_free_inodes_count; /* 空闲的 inodes 计数 */__u16 bg_used_dirs_count; /* 目录计数 */__u16 bg_pad; /* 可以忽略 */__u32 bg_reserved[3]; /* 可以忽略 */};每个 group descriptor 是 32 bytes 那么大。从上面,我们看到了三个关键的 block 指针,这三个关键的 block 指针,我们已经在前面都提到过了。3.3 Inode前面都准备好了以后,我们现在终于可以开始读取文件了。首先要读的,当然是文件系统的根目录。注意,这里所谓的根目录,是相对于这一个文件系统或者说硬盘分区而言的,它并不一定是整个 Linux 操作系统上的根目录。这里的这个 root 目录存放在一个固定的 inode 中,这就是文件系统上的 inode 2。需要提到 inode 计数同 block 计数一样,也是全局性质的。这里需要特别注意的是,inode 计数是从 1 开始的,而前面我们提到过 block 计数是从 0 开始,这个不同在开发程序的时候要特别留心。(这一奇怪的 inode 计数方法,曾经让本文作者大伤脑筋。)那么,我们先来看一下得到一个 inode 号数以后,怎样读取这个 inode 中的用户数据。在 super block 中有一个字段 s_inodes_per_group 记载了每个 block group 中有多少个 inode。用我们得到的 inode 号数除以 s_inodes_per_group,我们就知道了我们要的这个 inode 是在哪一个 block group 里面,这个除法的余数也告诉我们,我们要的这个 inode 是这个 block group 里面的第几个 inode;然后,我们可以先找到这个 block group 的 group descriptor,从这个 descriptor,我们找到这个 group 的 inode table,再从 inode table 找到我们要的第几个 inode,再以后,我们就可以开始读取 inode 中的用户数据了。这个公式是这样的:block_group = (ino - 1) / s_inodes_per_group。这里 ino 就是我们的 inode 号数。而 offset = (ino - 1) % s_inodes_per_group,这个 offset 就指出了我们要的 inode 是这个 block group 里面的第几个 inode。找到这个 inode 之后,我们来具体的看看 inode 是什么样的。struct ext3_inode {__u16 i_mode; /* File mode */__u16 i_uid; /* Low 16 bits of Owner Uid */__u32 i_size; /* 文件大小,单位是 byte */__u32 i_atime; /* Access time */__u32 i_ctime; /* Creation time */__u32 i_mtime; /* Modification time */__u32 i_dtime; /* Deletion Time */__u16 i_gid; /* Low 16 bits of Group Id */__u16 i_links_count; /* Links count */__u32 i_blocks; /* blocks 计数 */__u32 i_flags; /* File flags */__u32 l_i_reserved1; /* 可以忽略 */__u32 i_block[EXT3_N_BLOCKS]; /* 一组 block 指针 */__u32 i_generation; /* 可以忽略 */__u32 i_file_acl; /* 可以忽略 */__u32 i_dir_acl; /* 可以忽略 */__u32 i_faddr; /* 可以忽略 */__u8 l_i_frag; /* 可以忽略 */__u8 l_i_fsize; /* 可以忽略 */__u16 i_pad1; /* 可以忽略 */__u16 l_i_uid_high; /* 可以忽略 */__u16 l_i_gid_high; /* 可以忽略 */__u32 l_i_reserved2; /* 可以忽略 */};我们看到在 inode 里面可以存放 EXT3_N_BLOCKS(= 15)这么多个 block 指针。用户数据就从这些 block 里面获得。15 个 blocks 不一定放得下全部的用户数据,在这里 ext3 文件系统采取了一种分层的结构。这组 15 个 block 指针的前 12 个是所谓的 direct blocks,里面直接存放的就是用户数据。第 13 个 block,也就是所谓的 indirect block,里面存放的全部是 block 指针,这些 block 指针指向的 block 才被用来存放用户数据。第 14 个 block 是所谓的 double indirect block,里面存放的全是 block 指针,这些 block 指针指向的 block 也被全部用来存放 block 指针,而这些 block 指针指向的 block,才被用来存放用户数据。第 15 个 block 是所谓的 triple indirect block,比上面说的 double indirect block 有多了一层 block 指针。作为练习,读者可以计算一下,这样的分层结构可以使一个 inode 中最多存放多少字节的用户数据。(计算所需的信息是否已经足够?还缺少哪一个关键数据?)一个 inode 里面实际有多少个 block,这是由 inode 字段 i_size 再通过计算得到的。i_size 记录的是文件或者目录的实际大小,用它的值除以 block 的大小,就可以得出这个 inode 一共占有几个 block。注意上面的 i_blocks 字段,粗心的读者可能会以为是这一字段记录了一个 inode 中实际用到多少个 block,其实不是的。3.4 文件系统的目录结构现在我们已经可以读取 inode 的内容了,再往后,我们将要读取文件系统上文件和目录的内容。读取文件的内容,只要把相应的 inode 的内容全部读出来就行了;而目录只是一种固定格式的文件,这个文件按照固定的格式记录了目录中有哪些文件,以及它们的文件名,和 inode 号数等等。struct ext3_dir_entry_2 {__u32 inode; /* Inode 号数 */__u16 rec_len; /* Directory entry length */__u8 name_len; /* Name length */__u8 file_type;char name[EXT3_NAME_LEN]; /* File name */};上面用到的 EXT3_NAME_LEN 是 255。注意,在硬盘分区上的 dir entry 不是固定长度的,每个 dir entry 的长度由上面的 rec_len 字段记录。

268 评论

chihuoshiwo888

一. 简介 二、Linux系统下C编程原理 1. Linux系统的 2. Linux系统的主要构成 主要优异性能 3. gcc编译器的使用 三、总体设计 (1)、普通文件 (2)、目录文件 (3)、链接文件 (4)、设备文件 (5)、管道文件 2.进程基本介绍 3.库的使用

337 评论

相关问答

  • 计算机软件系统毕业论文

    科技的发展包括很多方面,计算机技术就是科技发展中的重要组成部分和表现形式。进入二十一世纪以来,世界各个国家的经济都在飞速的发展中,经济的发展必然会促进科技的进步

    吃货阿呀 2人参与回答 2023-12-09
  • 软件系统毕业论文范文

    随着我国现代化程度的不断提高,计算机软件被应用的领域愈发广泛,其本身的创造程度也越来越高,计算机产业现在已经成为一个规模庞大的产业。下面是我为大家整理的计算机软

    阿哥丶WLy 2人参与回答 2023-12-11
  • 文件系统毕业论文

    计算机信息管理专科毕业论文计算机信息技术的管理尹全喜摘要:大量的信息数据被储存到计算机中,如何建立一个稳健的信息系统是一个需要研究的话题。本文概述了信息系统以及

    蜜糖Rose 3人参与回答 2023-12-11
  • 毕业论文管理系统软件接口

    同阔论文系统前后经历一年多的时间调研、开发,于2011年11月取得《软件著作权》和《产品登记证书》 ,该软件产品主要包括三大功能:1)完整规范的毕业论文操作流程

    lilyran0910 3人参与回答 2023-12-05
  • 文件传输系统毕业论文

    你可以去中国月期刊网看看那里的文章挺多的,你可以去那参考一下:

    与口水长流 3人参与回答 2023-12-12