- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux操作系统期末复习 题型: 选择题(20个20分) 填空题(10个10分) 简答题(9个45分) 编程题(5个25分) C语言编译系统 UNIX文件系统是UNIX成功的关键。其特点主要表现为以下几点: 目录结构采用树形层次结构 可安装拆卸的文件系统 文件是无结构的字符流式文件 把外部设备和文件目录作为文件处理。 一个分区创建一个文件系统。Unix的文件系统通常由4部分构成: 引导块 超级块 索引节点表 数据区 引导块(bootblock): 处于文件系统的开始部分(0#块),其中存放操作系统的引导信息或系统启动代码。显然在操作系统管理的多个文件系统中,只有具有引导能力的文件系统的引导块中装有代码,其余文件系统此块均为空。 超级块(superblock):此块(1#块)中存放文件系统中的文件和目录在磁盘上静态分布的描述信息,超级块对文件系统的维护很重要。 索引节点表(inode list): 见下一页 数据区(data area):存放本文件系统中文件数据和目录文件数据。 文件系统中的文件有一些属性信息,比如创建时间、修改时间、文件大小、访问权限等。为了便于管理,Unix将每个文件的这些信息存放在其对应的索引节点 (inode)中,每个文件唯一对应一个索引节点。索引节点是Unix中一个很重要的概念。 索引节点也称i节点.每个索引节点在索引节点表中有一个编号,称为索引节点号。ls命令的i选项可以查看文件的索引节点号。 目录(directory)的实现 目录是一种特殊的文件。目录的功能是实现文件名到文件地址的映射。目录中的一项称为目录项(dentry, directory entry)。所以,文件名和地址这两项在目录中是必不可少的。而文件的其他属性是否放到目录中,不同的操作系统有不同的做法。 下图是一个MS-DOS的目录项,它总共32个字节。 目录的实现 UNIX中采用的目录结构非常简单,如图,每个目录项占16个字节,其中只包含文件名及其索引节点号。有关文件类型、长度、时间、所有者和磁盘地址等信息都放到索引节点(inode, index node)中,inode的引入为文件共享提供了便利。 Unix采用inode的好处?(?必考) 优点1. 加快检索文件的速度 存取文件信息时要检索文件目录。如果把有关文件的全部说明信息都存放在相应的目录项中,势必使每个目录的规模庞大,而在进行检索时,又要把目录的全部内容都读入内存查找,这显然浪费了大量的I/O传送时间。 Unix的目录项只包含文件名和对应的inode编号,这样大大减少了系统各级目录的规模。 Unix采用inode的好处? 优点2. 采用inode为文件共享提供了便利 由于Unix系统把文件名和文件的其他信息分开存放:文件名字存放在目录项中,而文件的其他信息存放在索引节点中,这样为多个逻辑文件名共享同一个物理文件提供了便利。 管道是一种先进先出(FIFO)的特殊文件,常量PIPE_BUF指定一个管道缓冲区可容纳的最大字节数。管道分为两类: 无名管道 有名管道 无名管道主要用于具有同一祖先的进程间通信。 系统调用: status=pipe (fds) fds是一个二元整型数组,用于存放标识管道的两个文件描述符。当调用pipe后,返回两个文件描述符fds[0]和fds[1]。父进程创建子进程时,子进程会继承父进程中的这两个文件描述符。当需要完成通信的进程结束时,无名管道也自行结束. 传统的UNIX系统命令创建的管道是单向的,即所创建的文件描述符一端只能用于读,另一端只能用于写。而现在的UNIX系统版本中pipe系统调用可以返回两个全双工的文件描述符。 main(int argc,char *argv[]) { int f_des[2]; static char message[BUFSIZ]; pipe(f_des); switch(fork()) { case -1: perror(fork); exit(3); case 0: close(f_des[1]); if(read(f_des[0],message,BUFSIZ)!=-1){ printf(Message received by child: [%s]\n,message); fflush(stdout); } break; defa
文档评论(0)