Linux操作系统设备管理ppt课件

上传人:痛*** 文档编号:179478586 上传时间:2023-01-01 格式:PPT 页数:17 大小:136.50KB
收藏 版权申诉 举报 下载
Linux操作系统设备管理ppt课件_第1页
第1页 / 共17页
Linux操作系统设备管理ppt课件_第2页
第2页 / 共17页
Linux操作系统设备管理ppt课件_第3页
第3页 / 共17页
资源描述:

《Linux操作系统设备管理ppt课件》由会员分享,可在线阅读,更多相关《Linux操作系统设备管理ppt课件(17页珍藏版)》请在装配图网上搜索。

1、10.4 10.4 设备管理设备管理内容内容 设备文件设备文件 设备管理相关数据构造设备管理相关数据构造 块设备文件的块设备文件的open()open()、readread操作操作10.4.1 10.4.1 设备文件的概念设备文件的概念传统的传统的UnixUnix系统均把设备当成文件来处置系统均把设备当成文件来处置,因此因此可以用可以用read()/write()read()/write()对设备进展操作。设备对设备进展操作。设备文件普通在文件普通在/dev/dev目录下。目录下。LinuxLinux下的设备大体分为三类下的设备大体分为三类:(1)(1)块设备块设备:一次一次I/OI/O操作以

2、固定大小的数据块为操作以固定大小的数据块为单位单位,且可随机存取。且可随机存取。(2)(2)字符设备字符设备:一次一次I/OI/O操作存取数据量不固定操作存取数据量不固定,只只能顺序存取。能顺序存取。(3)(3)网卡网卡:网卡是特殊处置的网卡是特殊处置的,它没有对应的设备它没有对应的设备文件。文件。设备文件的属性 文件名:如 hda1 类型:是字符设备还是块设备 主设备号:主设备号一样的设备被同一设备驱动程序处置。从设备号:用来指明详细的设备mknod()创建设备文件,它的参数是上面提到的四个属性。Linux安装完成之后曾经在/dev目录下生成了绝大多数能够要用到的设备文件10.4.2 10.

3、4.2 相关数据构造相关数据构造VFSVFS与设备驱动程序接口:与设备驱动程序接口:namefopsblkdevs块设备driver操作表 chrdevs字符设备driver操作表namefopsdentryFiles_operationsinodeInode_operationsfd_arrayfilefiles_structtask_struct一、字符设备管理字符设备管理的主要数据构造如下:struct device_struct const char*name;struct file_operations*fops;s t a t i c s t r u c t d e v i c e

4、 _ s t r u c t chrdevsMAX_CHRDEV;全局数组chrdevs记录了一切字符设备驱动程序的称号name及其对应的设备操作函数接口fops。数组的下标,那么对应于设备的主设备号。加载设备驱动时,设备在系统中的注册是经过函数register_chrdev(),其原型如下:int register_chrdev(unsigned int major,const char*name,struct file_operations*fops);不 同 的 字 符 设 备 驱 动 程 序 要 提 供 不 同 的file_operations实现。当 设 备 不 再 运 用 时,可

5、以 经 过unregister_chrdev()函数注销。二、块设备管理主要数据构造有blkdevs和blk_dev:static struct const char*name;struct block_device_operations*bdops;/*特定于设 备的操作集*/blkdevsMAX_BLKDEV;struct blk_dev_struct request_queue_t request_queue;/*恳求队列*/queue_proc*queue;void*data;struct blk_dev_struct blk_devMAX_BLKDEV;数组的下标对应设备驱动程序的主

6、设备号,blkdevs 记录设备文件名及相应的操作集合,blk_dev 记录各个设备的恳求队列。Request_fnBuffer headBuffer head Buffer head 相关数据构造blk_dev blk_dev_struct requestrequest内存外存三三 、buffer cache buffer cache 块设备的操作是以块为根本单位块设备的操作是以块为根本单位,普通情普通情 况况块的大小不会超越页面的大小。块的大小不会超越页面的大小。buffer cache buffer cache 是对物理磁盘块的缓冲,是对物理磁盘块的缓冲,一个一个bufferbuffer

7、的大小等同于一个块的大小的大小等同于一个块的大小 buffer buffer cachecache目的:提高性能。目的:提高性能。每个每个bufferbuffer由由buffer_headbuffer_head构造描画,内核根据构造描画,内核根据buffer_headbuffer_head的形状信息操作的形状信息操作bufferbufferstruct buffer_head struct buffer_head*b_next;/*用来链接hash值一样 的buffer_head*/unsigned long b_blocknr;/*块号*/unsigned short b_size;/*块的

8、大小*/kdev_t b_dev;kdev_t b_rdev;/*设备号*/struct buffer_head*b_this_page;/*同属一个页面的 buffer 链表*/struct buffer_head*b_reqnext;/*同一个操作恳求 的buffer_head链表*/struct buffer_head*b_pprev;/*用来链接hash值相 同的buffer_head*/char*b_data;/*buffer所在的位置*/struct page*b_page;/*buffer所属的页面*/wait_queue_head_t b_wait;/*进程等待队列*/stru

9、ct inode*b_inode;/*该buffer所属的inode构造*/.;每个buffer由设备号和块号独一确定,并以两者为hash关键字在buffer cache定位。通常块的大小为1KB,而物理页帧的大小为4KB,所以一个物理页帧可以包容4个bufferpage cache和buffer cache的区别1buffer cache用于读取文件系统分区和文件的元数据。2page cache主要用来存放常规文件的数据,数据也并不一定在物理上延续。3page cache尽量不与buffer cache存放一样数据。四、四、设备恳求队列设备恳求队列每类块设备都维护一个恳求队列每类块设备都维护

10、一个恳求队列队列的每一个成员称之为操作恳求。队列的每一个成员称之为操作恳求。struct request struct request int cmd;/int cmd;/*操作行为:读或写操作行为:读或写 */s t r u c t b u f f e r _ h e a d s t r u c t b u f f e r _ h e a d *b h;b h;/*buffer_headbuffer_head链表链表*/struct buffer_head struct buffer_head*bhtail;bhtail;.;.;每个操作恳求都维护着一个buffer_head链表。每当需求对

11、一个块进展操作时要将相应的buffer_head参与设备恳求队列,这个过程有两个优化措施:能否合并。检查已有的块设备操作恳求中的块和如今操作的块能否在物理上相邻并且操作行为一致(2)假设不能合并的话那么生成一个新的块设备操作恳求,并参与相应设备恳求队列的适宜位置,使磁头的挪动途径尽能够短。10.4.3 10.4.3 块设备文件的块设备文件的open()open()、readread操操作作 可以把块设备整体看成一个文件来访问可以把块设备整体看成一个文件来访问一、一、块设备驱动程序组成块设备驱动程序组成块设备驱动程序分为两部分块设备驱动程序分为两部分:(1)(1)与与VFSVFS的接口层。的接口

12、层。blkdevsblkdevs (2)(2)真正对设备真正对设备(普通是磁盘控制器普通是磁盘控制器)操作操作的部分的部分,如如 blk_devmajor.request_fn blk_devmajor.request_fn。二、二、open open函数函数翻开一个设备文件与翻开一个普通文件不同的特翻开一个设备文件与翻开一个普通文件不同的特殊处置以原来的设备文件方式为例殊处置以原来的设备文件方式为例在在VFSVFS处置处置openopen系统调用时,会调用对应文件系系统调用时,会调用对应文件系统的统的super_operationssuper_operations中的中的read_inode

13、read_inode方法将设方法将设备文件备文件inodeinode读入内存;读入内存;当得知是设备文件时,会将当得知是设备文件时,会将filefile中的中的f_opf_op域置为域置为def_blk_fops/def_chr_fopsdef_blk_fops/def_chr_fops表地址,其中有表地址,其中有blkdev_open()/chrdev_open()blkdev_open()/chrdev_open()操作;操作;然后会调然后会调filefile中中f_opf_op域指向的操作表的域指向的操作表的openopen方法。方法。以blkdev_open()为例:得到主设备号;fi

14、lp-f_op=blkdevsmajorfops#用blkdevs 表中的对应操作表地址重填file的f_op域;调filp-f_op-open().设备driver的open()函数主要任务:假设driver是动态加载模块,运用计数1;检查设备能否存在;如有必要,初始化设备;初始化设备的数据构造如登记中断效力程序等。三、三、read read函数函数块设备将调用块设备将调用block_readblock_read函数。函数。(在版本在版本2.42.4中中block_write/readblock_write/read变成了变成了generic_file_write/read,generic_

15、file_write/read,它先访问它先访问page page cache.)cache.)block_read()block_read()函数首先计算出要读出的块。函数首先计算出要读出的块。对于要读的每一块对于要读的每一块,首先检查首先检查buffer cachebuffer cache能否能否曾经存在,存在那么前往。曾经存在,存在那么前往。假设不存在那么恳求一个假设不存在那么恳求一个bufferbuffer并将相应的并将相应的buffer_headbuffer_head参与对应设备的恳求队列,然后进参与对应设备的恳求队列,然后进程进入程进入buffer headbuffer head的等待队列睡眠。的等待队列睡眠。操作恳求将在适宜的时候被触发,驱动程序完成操作恳求将在适宜的时候被触发,驱动程序完成读操作后将操作恳求移出恳求队列,进程被唤醒读操作后将操作恳求移出恳求队列,进程被唤醒把把bufferbuffer中的数据读到本人的缓冲区。中的数据读到本人的缓冲区。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!