设备驱动 相关基础知识

来源:互联网 发布:类似prisma的软件 编辑:程序博客网 时间:2024/05/17 02:23

1、设备号:内核通过主设备号将设备和相应的驱动程序对应起来
次设备号 当一个驱动程序控制若干个设备时,就要用次设备号来区分
2、inode
Inode 解释 文件存储在硬盘上,硬盘分为好多扇区,每个扇区固定大小为512字节。操作系统读取硬盘的时候,每次不可能只读取一个扇区,而是读取多个扇区sector,读取的单位是块即block,通常块的大小是8sector。Block是文件存取的最小单位,文件的数据都存在block中,那么文件的元信息就存在inode中,中文译名文件索引节点。
Inode 大小 inode 也会占用硬盘大小 ,操作系统自动把硬盘分成俩个区,数据区和inode 区,当硬盘格式化的时候,inode 节点数也已经确定了,所以当硬盘上有很多小字节的文件时,有可能inode 节点 已经用完,但是硬盘数据区仍有空余空间。这时就无法创建新文件。
说明:表面上 你是通过文件名,来打开文件。实际上文件名只是文件对应inode的别名。系统是通过找到文件名对应的inode号码 ,从inode号码获取inode信息,根据inode 信息中block 找到硬盘上文件位置。

软硬连接
一般情况下一个文件名对应 一个inode号码,但是linux 允许多个文件名指向一个inode号码,这意味着可以使用不同的文件名来访问同样的内容,对文件内容修改会影响到所有文件名,但是删除文件名不会影响另一个文件的访问。这种情况就被称为硬链接。
每天一个linux 命令
ln 它的功能就是为某一个文件在其他目录下创建一个同步的连接。当我们需要在不同的目录使用同一个文件,不必在每一个文件夹下放一个相同的文件,而是固定一个目录放文件,然后在其他目录ln(link)它就可以,不必占用不必要的磁盘空间。
硬链接:以文件副本的形式存在,但不占用实际的空间。不允许给目录创建硬链接,只有在一个文件系统中才能创建硬链接。
软连接:可以跨文件系统,可以对不存在的文件名进行连接,可以对目录进行连接。
现在假设做这样一个实验
Vi a.txt 编辑ABCD
创建硬链接 ln a.txt a
创建软连接 ln -s a.txt aink
由上面的介绍 可知 对a, vi a 编辑 ABCDE那么a.txt内容同样会变,删除a.txt alink连接会失效 在ls -l link 变为红色 意为不可用;但是a文件还是存在。因为在硬盘上实际上他并未删去,只是将文件对应的inode连接数减1;当连接数为0时才会删除硬盘上数据区的文件内容。

文件描述符
在linux 下一切皆为文件,普通文件 目录文件 设备文件 链接文件
文件描述符是内核为了高效管理打开的文件所创建的索引,每次打开文件必须使用当前进程中最小的可用文件描述符。一个进程打开的文件描述符也是有限的,因为文件描述符是重要的系统资源。
重要一点:多个文件描述符 可能指向同一个文件,一个文件可以在一个进程被打开多次,也可以在多个进程中被打开,系统为每一个进程维护了其打开的文件描述符表,该表的值是从0开始的。所以在不同的进程中你会看到相同的文件描述符。这时有可能指的是同一个文件,有可能指的是不同的文件。这是我们就需要了解内核维护的3 个数据结构

进程级的文件描述符列表、系统级的打开文件描述符列表、文件的inode表

进程级的文件描述符表每一条目记录了单个文件的描述符的相关信息
1、控制描述符操作的一组标志
2、对文件描述符的引用(指针)
系统级的打开文件表
1、文件偏移量
2、打开文件所用的标志open() flags 参数
3、文件的访问模式 open 时所设置的
4、对inode 对象的引用
文件系统的inode 表
1、文件类型和访问权限
2、指针指向的是稳健所持有的锁列表
3、文件的各种属性如大小 不同型操作的时间戳这里写图片描述

这里老提到句柄的概念 我也是有点蒙,
句柄是一个标识符 只要我们获得文件的句柄就可以对文件进行操作。
那么我们这里的文件描述符我认为可以是句柄的一种,我们在应用程序中open文件,内核会为该进程分配一个进程级文件描述符表,这个表其实是一个指针数组,找到一个未占用的文件描述符来给该打开的文件,那么该fd就相当于数组下标,从而用户只能通过系统调用来访问内存中的东西。

原创粉丝点击