驱动初识与文件系统的理解

驱动框架:
驱动程序分为两大类:字符设备和块设备


字符设备:每次传输数据时将字符作为最基本单位的设备,如键盘和声卡等。他们通常不支持随机存取数据,因此对字符设备的处理非常直观简单,字符设备在实现时也大多不需要缓存,系统直接从设备读取/写入每一个字符


块设备:与字符设备相对的,以批量方式进行数据传输的一类设备,如硬盘,CD-ROM等。块设备支持随存取和寻址并使用缓存,这几点与字符设备相对的,操作系统会为块设备的输入或输出过程分配缓存,以存储临时读出或写入的数据。当缓存被填满时,会采取适当的操作把数据传走,而后系统清空缓存。这种针对设备的缓存机制其实是广泛存在的,目的就是使访问速度较慢的块设备,能够适当的提高读写效率


操作系统把设备分为这两大类,就是对设备的高度抽象,所有的设备都可以按类分成字符设备或者是块设备,这样内核只需要实现一个字符设备框架或一个块设备框架,就可以管理系统中的所有设备了


文件系统是怎么引入的?
因为几乎所有的应用程序都需要对数据做处理,所以操作系统需要对数据进行管理,而数据就是一堆二进制数,由于不能将数据存储到存储器上,这又是因为,直接对存储器进行读写操作,反复的操作会产生内存碎片降低存储器的工作效率,所以Linux引入文件系统,就是将二进制的数据进行加工,使加工后的数据加载到存储设备中


文件系统的特性:

1.文件系统其实就是操作系统的一种抽象,它可以让存储设备的操作变得容易,用户不再需要了解存储器的原理,而只需要知道文件系统的基本概念,如文件、文件夹等,就可以直接进行数据的读写了。


2.由于要存储的数据是被重新加工后再被存储的,因此我们可以将数据的存储位置、大小等信息也存到存储器中,这样,再进行数据查找、插入或删除时,就会便得到相当容易,就是因为这种抽象性,文件系统才不能代表一个具体的存储载体,而必须依托某一个具体的存储设备才会有意义

注:数据在存储之前要按照某种格式加工一下,再存储到存储器中,这种格式就叫做文件系统类型,例如FAT和NTFS,不同文件系统类型下的文件内容是一致的,只不过组织的方法不同,而将某个存储设备组织成某种文件系统类型的过程就叫做格式化
文件系统框架:以文件的形式操作数据-》文件系统-》文件系统类型(数据加工)-》存储设备


文件系统的架构之中首先肯定是要有一个结构,用来描述文件系统的一个对象也就是文件,从而这里引入索引节点的概念

索引节点(inode):列出了文件的属性等信息以及文件中各个数据块在磁盘中的相应位置。因此,我们可以得出如下结论:每个存储在存储器中的文件都会有一个索引节点与之对应。也就是说,索引节点就是存储在存储器中的数据抽象。


当我们想从设备中读取一段数据时;

1.要找到对应这个数据的索引节点
2.调用与索引节点相配套的数据操作函数,通过索引节点中记录的数据信息正确的读出数据,这个函数在传统的UNIX中被称为namei,使用namei能够得到对应文件的索引节点,而索引节点里又记录了必要的数据信息,在得到索引节点后,就得到了必要的数据信息
3.再调用存储器对应的驱动程序,将数据从索引节点里面记录的实际数据存储地址中读出来,从而实现对数据的读取

猜你喜欢

转载自blog.csdn.net/weixin_42135997/article/details/81032093