`
jianchen
  • 浏览: 336262 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

unix核心编程原理(二)

阅读更多

                                                                                                  文件系统篇

文件系统可以用来存储文件内容,文件属性(文件所有者,日期等)和目录,这些不同类型的数据是如何存储在被编号的磁盘块上的呢?
Unix使用了一个简单的方法。它将这些磁盘块分成了3部分:
1,超级块
文件系统中的第一个块被称为超级块。这个块存放文件系统本身的结构信息。例如,超级块记录了每个区域的大小。超级块也存放未被使用的磁盘块的信息。不同版本的Unix的超级块的内容和结构稍有不同。
2,i-节点表
文件系统的下一个部分称为i-节点表。每个文件都有一些属性,如大小,文件所有者和最近修改时间等。这些性质被记录在一个称为i-节点表的结构中。所有的i-节点都有相同的大小,并且i-节点表是这些结构的一个列表。文件系统中的每个文件在该列表中都有一个i-节点。如果你有root权限,就可以像操作文件一样将分区打开,阅读并显示i-节点表。在显示utmp文件时就用过类似的技术。
以下一点很重要:表中的每个i-节点都通过位置来标识。例如,标识为2的i-节点(inode 2)位于文件系统i-节点表的第三个位置。
3,数据区
文件系统的第3个部分是数据区。文件的内容保存在这个区域。磁盘上所有块的大小都是一样的。如果文件包含了超过一个块的内容,则文件会存放在多个磁盘块中。

文件有内容和属性,内核将文件内容存放在数据区,文件属性存放在i-节点,文件名存放在目录。



创建一个新文件的过程:
1,存储属性    文件属性的存储:内核先找到一个空的i-节点,假如编号是47。内核把文件的信息记录其中。
2,存储数据   根据文件的大小,分配相应数目的块
3,记录分配情况    文件内容按顺序存放在块中,内核在i-节点的磁盘分布区记录了上述的块序列。磁盘分布区是一个磁盘块序号的列表,这3个编号放在最开始的3个位置。
4,添加文件名到目录   假设文件名是usrlist,内核将入口(47,usrlist)添加到目录文件。文件名和i-节点号之间的对应关系将文件名和文件的内容及属性连接了起来。

当用cat命令查看文件内容时,首先在目录文件中根据文件名usrlist找到所在记录的包含编号为47的i-节点号。定位i-节点号47并读取其内容。内核在文件系统中的i-节点区域找到i-节点47.i节点包含数据块编号的列表。然后cat不断的调用read函数,使得内核不断将字节从磁盘复制到内核缓冲区,进而到达用户空间。

可以得到一下结论:
目录包含的是文件的引用,每个引用被称为连接。文件的内容存储在数据块,文件的属性被记录在一个被称为i-节点的结构中,i-节点的编号和文件名存储在目录中。“目录包含子目录”的原理与此相同。

磁盘空间不足的概念:
一个Unix文件系统有一个i-节点区域和一个数据区域。因此,即使数据区有空间,i-节点空间也有可能不足。当Unix上安装了一个新的磁盘,需要将磁盘分成i-节点表和数据区。文件系统的每个文件都需要一个i-节点。i-节点表越大,则留给文件内容的空间越小。

分享到:
评论

相关推荐

    UnixLinux 核心编程教程

    Unix/Linux操作系统简介 GNU编译工具GCC GNU C 内存管理 文件I/O 进程管理 信号 进程间通信 多线程 网络通信

    Unix系统编程(程序设计语言+系统调用)

    本课程主要讲述在Unix/Linux环境下高级编程的方法,其内容包括文件、信号、POSIX线程、UDP、WEB和客户机服务器等相关知识,并由浅入深讲述通信、并发和多线程编程的核心技术、实用技术。 前导课程: ①操作系统原理 ...

    UNIX操作系统教程

    《UNIX操作系统教程(第3版)》讲解细致,由浅入深,全面论述了UNIX系统的核心技术与操作系统的基本原理。新版教材更加实用,非常适合作为高等院校计算机及相关专业的操作系统等课程的教材,同时也适合对UNIX系统技术...

    unix大全(涵盖了UNIX学习的方方面面)

    15.SCO UNIX5 的动态核心表 16.进程管理的两个命令(PS,Sar) 评论 17.进程管理的两个命令(PS,Sar) 18.性能相关的几个核心参数(CPU,I/O,MEMORY) 19.SCO NFS详解 20.SCO命令--df 21.SCO OpenServer 5.0.5中DHCP如何...

    UNIX操作系统教程 张红光

    第1章绪论.1 1.1操作系统概述1 1.1.1建立操作系统的目标1 1.1.2操作系统是用户与计算机的接口1 1.1.3操作系统是资源管理器2 1.2UNIX系统的主要特性3 1.3UNIX系统的发展史4 1.4开源软件与UNIX的推广发展6 1.4.1开源...

    网络游戏框架服务端编程

    本书作者以其在韩国多年从事网络游戏开发的经验,向读者展示了网络游戏开发的核心——服务器编程的基本原理和特定技巧。书中首先介绍了计算机网络的基础知识,以及unix socket、winsock编程;然后全面讲述网络游戏...

    大学计算机专业书籍推荐.pdf

    * UNIX网络编程:史蒂文斯UNIX 网络编程、史蒂文斯Unix 网络编程(第二卷):进程间通信 数据库: * 数据库系统导论:史蒂文斯数据库数据库系统导论 * 数据库系统基础教程:戴特数据库系统基础教程 * 数据挖掘:...

    Linux系统设计-深入浅出 Linux 操作系统:操作系统原理、Linux 应用实践、并发编程、物联网操作系统

    它继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Linux是许多企业和服务提供商的首选操作系统,用于部署Web服务器、数据库服务器、邮件服务器等。Linux系统具有高效的网络功能和稳定的...

    Linux内核工作原理 word版本 强烈推荐

    早期UNIX是用汇编语言编写的,但其第三个版本用一种崭新的编程语言C重新设计了。C是Richie设计出来并用于编写操作系统的程序语言。通过这次重新编写,Unix得以移植到更为强大的 DEC PDP-11/45与11/70计算机上运行。...

    网络编程教程,很好的一本写linux网络编程书,这是我上传的源码

     第十二章 BPC远程过程调用原理和实践  12.1 RPC的原理  12.1.1 XDR的更进一步  12.1.2 本地函数调用的过程  12.1.3 用远程调用来虚拟本地调用  12.2 RPC的实现  12.2.1 远程过程的标识  ...

    linux操作系统内核技术-uestc课件

     1掌握处理器在进程地址空间上的三种运行位置,了解内核编程不能使用C库函数和FPU,以及可能产生内存故障、核心栈溢出和四种内核竞争情形的原因。(2学时)  2熟悉进程描述符的组织,进程上下文和进程状态转换,和...

    java多线程tcpsocketserver源码-Java-Book:Java学习资料整理

    Unix环境高级编程 --(这三本书主要还是看看Linux下的IO模型,select 和epoll的区别,后面有的框架会涉及到这些内容,比如netty) Unix网络编程 Linux 系统编程手册 Java 基础和进阶 疯狂Java讲义 Java 核心基础卷1/2 ...

    TUXEDO:基于IPC机制浅析TUXEDO及其应用.doc

    本文从底层IPC机制出发,结合UNIX核心系统参数和ATMI技术,借用ipcs观察Tuxedo所消耗的IPC系统资源状况,浅析了Tuxedo强大功能背后的工作原理,进一步加深对Tuxedo应用和ATMI编程的理解,提出了解决实际工作中关键...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    最近几年,他专注于研究Oracle内部原理以及解决性能问题。他的博客主页是 kerryosborne.oracle-guy.com。  ROBYN SANDS 思科公司的软件工程师,为思科的客户设计开发嵌入式Oracle数据库产品。从1996年开始使用...

    从零开发操作系统:从加电自检到内核引导

    本门课程是《C语言核心编程》的姊妹篇,正如C和Unix是孪生兄弟一般,本门课程向K?&?R致敬,探索计算机装置的本身原理。本课程基于X86架构,实现了从机器加电自检开始,到一个内建命令操作系统(内核雏形)的实现。...

    开源bbs源码java-Share:分享

    开源 bbs 源码 java 致学弟学妹 & 书单 前言啦 一些自己的积累,不全 希望你们喜欢 ...会不定期更新,欢迎大家补充 ...核心原理与案例分析(推荐) 构建高性能web站点(推荐) 大型网站系统与java中间件

    基于Linux的光纤通道网卡驱动程序开发.pdf

    Linux操作系统是基于Unix的开源操作系统,它具有开放式的架构和自由的授权模式,使得它成为了最流行的操作系统之一。Linux操作系统的核心是Linux内核,它负责管理计算机的硬件资源和提供系统服务。 设备驱动程序是...

    计算机应用基础练习题 .doc

    为了更好地理解计算机应用基础,我们需要了解计算机软件和硬件的基本概念和原理。 1. 软件分类:计算机软件可以分为系统软件、应用软件和编译程序。系统软件主要包括操作系统、设备驱动程序和实用程序。应用软件则...

Global site tag (gtag.js) - Google Analytics