Chinaunix首页 | 论坛 | 博客
  • 博客访问: 692238
  • 博文数量: 192
  • 博客积分: 1875
  • 博客等级: 上尉
  • 技术积分: 2177
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 23:21
个人简介

有时候,就是想窥视一下不知道的东东,因为好奇!

文章分类

全部博文(192)

文章存档

2024年(8)

2023年(3)

2020年(1)

2019年(1)

2018年(1)

2017年(2)

2016年(69)

2015年(53)

2014年(14)

2013年(1)

2012年(5)

2011年(25)

2010年(9)

分类: LINUX

2016-06-22 22:22:35

内核知识收集
1. 几个重要部件的关系图
    
2. 内核读文件
        系统调用read()读取磁盘上的文件。内核响应步骤如下: 
    a. 系统调用read()传递文件描述符/文件偏移量/读取长度等参数, 触发相应的VFS函数。
     b. VFS确定请求的数据是否已经在缓冲区中, 若数据不在缓冲区中, 确定如何执行读块设备操作。
            内核将大多数最近从块设备读出或写入的数据保存在RAM,所以有时候没必要访问磁盘上的数据。

     c. 内核通过映射层(Mapping Layer)确定数据在物理设备上的位置。由对应文件所在的文件系统(ext4/fat32等)来确定。
            1>内核取得文件所在文件系统的块大小,计算所请求数据块的长度,确证数据所在块号。
            2>映射层调用具体文件系统的函数,访问磁盘节点,根据逻辑块号确定所请求数据在磁盘上的位置。
            3>磁盘也分块,内核须确定数据块(通用块)在磁盘上的块号(磁盘块)。

     d. 内核通过通用块层(Generic Block Layer)在块设备上执行读操作,启动I/O操作, 传输请求的数据。
            1>第个i/o操作只针对一组连续的块,请求的数据不必位于相邻的块中。
            2>通用块层为所有的块设备提供一个抽象视图,隐藏硬件块设备的差异,可用通用数据结构描述。

     e. 内核I/O调度层(I/O Scheduler Layer)根据内核的调度策略, 对等待处理的I/O等待队列排序。
            把物理介质上相邻的数据请求聚集在一起。

     f. 块设备驱动(Block Device Driver)通过向磁盘控制器发送相应的命令,执行真正的数据传输。
           
3. 各层具体干了些啥
       。。。
阅读(645) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~