unix内核学习心得(一)

原创 2002年06月06日 09:49:00

(一)文件系统的内部表示

在unix中文件系统在磁盘上的分布是如下的:

========================================
==引导块--超级块--索引结点表----数据块==
========================================

其中超级块与索引结点表为重点。

一,索引结点表

索引结点(index node,简称inode)是文件系统的核心内容,也是内核最重要的数据结构。unix中一个文件只有一个inode与其相对应,它的储存在磁盘的索引结点表里。索引结点表是一个线性数组。索引结点的各个域的内容如下:
1,文件所有者的标识号。
2,文件类型。
3,文件的存取权限。
4,文件的存取时间。
5,文件的联结数。
6,文件在磁盘上的位置。
7,文件大小。

(注意:索引结点不表明该文件的路径)

当索引结点被某个进程引用是,它被调入内存中。在内存中存在另外一个索引结点表(in-core inode list)和一个空闲索引结点表。当索引结点被调入内存时(在内核中使用iget算法),将索引结点放入内存索引结点表里,并将其引用数加1。

内存索引结点里的数据域除了磁盘索引结点的内容以外,还有以下新的域:
1,内存索引结点的状态
2, 含有该文件的文件系统的逻辑设备号。
3,索引结点号。(索引结点在磁盘上数组里索引)
4,指向其他内存索引结点的指针。
5,引用数。

内核用文件系统和索引结点号来标识特定的索引结点,在高层的系统调用请求是使用iget算法来分配一个索引结点的内存拷贝,即内存索引结点。内核独立的操纵索引结点锁和引用数。在系统调用执行期间将起锁住,防止其他的进程在此期间使用此结点,调用结束后开锁。在两次系统调用之间结点是不上锁的。

而iget算法主要完成的任务:索引结点号为参数,如果索引结点位于内存索引结点表中则引用数加1,返回索引结点,如果位结点位于空闲索引结点表中(此表中索引结点的引用数为0),则从该表中取出该索引结点,放入在内存索引结点表中,并将其引用数加1,如果在两个表中都没有该索引结点,则在空闲表中移出一个新的索引结点,在磁盘索引结点表中寻找到该结点,读入内存索引结点表中,然后返回该索引结点。

当内核释放索引结点时,引用数减1。如果引用数降为0,而且文件的内存拷贝与磁盘拷贝不同,则执行写磁盘操作,并把索引结点放入空闲表里。这里用到的算法是iput。如果文件的联结数为0,则内核释放该文件的所有数据块,并释放该文件的磁盘索引结点。

二,正规的文件结构

索引结点包含着文件在磁盘上位置的明细表。磁盘的每个块都编了号。在unix系统V中,块的大小是1k,(在windows里为4k),索引结点里包含指向各个数据块的指针,其中有10个直接块,1个1次间接块,1个2次间接快,1个3次间接块,如果使用到3次间接的话,单个文件的大小可以最大为16G,存取文件时,内核调用bmap算法将逻辑文件的字节偏移量映射到文件系统的块上。


三,目录

目录是使文件系统具有树型结构的那些文件。目录是文件,它只是数据是一些目录表项的文件,每个目录表项有他们的索引结点号和此目录下的文件名构成,路径就是有/分割成的各个独立分量构成的。
目录的读权限为允许进程读目录,写权限为允许进程创建子目录或删除子目录,执行权限为允许进程寻找文件而搜索整个目录。

注意:读权限与执行权限的区别。

(未完)

Unix Shell 学习总结 -- Unix学习总结之一

学习Unix有很长一段时间了,下一段时间可能很少有机会搞Unix了!我毕业设计要用MFC,进单位以后也是Windows下的编程!总结一下吧,也算是对Unix的学习告一段落!书籍:《Unix Text ...
  • mayo
  • mayo
  • 2006年03月27日 21:17
  • 1644

unix内核学习心得(二)

(一)文件的内部表示四,路径名到索引结点的转换在后面的系统调用中,如open,对文件的操作用到的参数是文件的路径名。内核是通过一个名为namei的算法寻着路径,找到文件的索引结点。namei算法每次分...
  • yixudong
  • yixudong
  • 2002年06月06日 09:39
  • 766

Linux内核和传统Unix内核的比较

  所有的Unix内核都同宗同源,并且提供相同的API,现代的Unix内核存在许多设计上的相似之处。Unix内核几乎毫无例外的都是一个不可分割的静态可执行块(文件)。也就是说,它们必须以完整、单独的可...
  • armman
  • armman
  • 2007年04月13日 17:11
  • 999

《Unix内核源码剖析》读书笔记(一)

**第一部分** 就如同第一部分扉页上所写的三点:**UNIX V6内核具有哪些功能**、**内核如何向用户程序提供功能的**、**运行UNIX V6的系统由怎样的硬件构成**,理解这三者,有利于理解...
  • xieweiyang
  • xieweiyang
  • 2016年12月28日 19:11
  • 187

宏内核与微内核、Linux内核与Unix内核的区别

操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些术语定义如下: 单内核:也称为宏内核。将内核从整体上作为一个大过程实现,并同时运行在一...
  • Silencegll
  • Silencegll
  • 2016年05月25日 10:06
  • 3413

UNIX---常用命令(软件安装、内核参数、进程分析)

SUN系统:pkginfo、  pkgadd 、 pkgrm HP系统:swinstall Linux系统:rpm Aix系统:installp、   smit install...
  • jinhao_csdb
  • jinhao_csdb
  • 2014年03月18日 05:19
  • 1447

Unix内核源码剖析 摘记

2016,开始阅读Unix&Linux相关。从源码开始吧! 选了《Unix内核源码剖析》: 青柳隆宏 这本书。 第一章 什么是UnixV6 从UNIX V6派生出来的产品还有很多,但是本书以其原始版...
  • yulinhuyang
  • yulinhuyang
  • 2016年01月01日 21:23
  • 349

《深入理解Linux内核(第三版)》 §1.6 Unix 内核概述

§1.2  硬件的依赖性 支持的硬件平台(略) §1.3  Linux 版本 一直到2.5版本的内核,Linux 都通过简单的编号来区别内核的稳定版和开发版。每个版本号用三个数字描述,由圆点分隔。前两...
  • zhangxinrun
  • zhangxinrun
  • 2010年05月14日 17:42
  • 1159

基于UNIX的操作系统内核——Mach、驱动程序支持、BSD

Darwin      接口的易用性是Mac OS X的基石,以UNIX为系统内核使Darwin具有极佳的稳定性、可靠性和性能。Darwin拥有许多技术:Mach 3.0、基于FreeBSD 5的操作...
  • adc2008
  • adc2008
  • 2008年04月16日 10:59
  • 814

Unix网络编程卷一笔记

1.connect函数调用会激发TCP三路握手协议,调用失败返回以下三种情况: 1.TCP客户端没有收到SYN分节,返回ETIMEOUT错误。如果发送一个SYN分节,等待6s没有响应,再发送一个,等待...
  • damenhanter
  • damenhanter
  • 2016年07月12日 23:01
  • 1302
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:unix内核学习心得(一)
举报原因:
原因补充:

(最多只允许输入30个字)