Linux那些事儿之我是Block层(引子)

很久以前,天还是蓝的,水也是绿的,庄稼是长在地里的,猪肉是可以放心吃的,耗子还是怕猫的,法庭是讲理的,上床是先结婚的,理发店是只管理发的,药是可以治病的,医生是救死扶伤的,拍电影是不需要陪导演睡觉的,照相是要穿衣服的,欠钱是要还的,孩子的爸爸是明确的,学校是不图挣钱的,白痴是不能当教授的,卖狗肉是不能挂羊头的,男就是男的女的就是女的.那时候Block层还是一部分附属于drivers/目录下一部分附属于fs/目录下的.

但后来一切都变了.2005年秋天,Block层搬出了drivers/和fs/目录,从2.6.15的内核开始,顶层目录下面有了一个叫做block的目录,内核目录结构变成了现在这个样子:

localhost-1:/usr/src/linux-2.6.22.1 # ls

COPYING  Documentation  MAINTAINERS  README  arch   crypto   fs       init  kernel  mm   scripts  sound  CREDITS  Kbuild Makefile  REPORTING-BUGS  block  drivers  include  ipc   lib     net  security usr

进入block目录,用旁光看一下:

localhost:/usr/src/linux-2.6.22.1/block # ls

Kconfig          Makefile      blktrace.c     deadline-iosched.c  genhd.c  ll_rw_blk.c     scsi_ioctl.c

Kconfig.iosched  as-iosched.c  cfq-iosched.c  elevator.c          ioctl.c  noop-iosched.c

用wc命令统计一下:

localhost:/usr/src/linux-2.6.22.1/block # wc -l *

    54 Kconfig

    73 Kconfig.iosched

    12 Makefile

  1485 as-iosched.c

   562 blktrace.c

  2254 cfq-iosched.c

   485 deadline-iosched.c

  1160 elevator.c

   831 genhd.c

   304 ioctl.c

  4117 ll_rw_blk.c

   118 noop-iosched.c

   654 scsi_ioctl.c

 12109 total

一万二千多行.还好我们不用每个文件都去看.

老规矩,先看一下Makefile和Kconfig,

#
# Makefile for the kernel block layer
#


obj-$(CONFIG_BLOCK) := elevator.o blk-core.o blk-tag.o blk-sysfs.o \
blk-flush.o blk-settings.o blk-ioc.o blk-map.o \
blk-exec.o blk-merge.o blk-softirq.o blk-timeout.o \
blk-iopoll.o blk-lib.o ioctl.o genhd.o scsi_ioctl.o \
uuid.o partition-generic.o partitions/



obj-$(CONFIG_BLK_DEV_BSG) += bsg.o
obj-$(CONFIG_BLK_DEV_BSGLIB) += bsg-lib.o
obj-$(CONFIG_BLK_CGROUP) += blk-cgroup.o
obj-$(CONFIG_BLK_DEV_THROTTLING) += blk-throttle.o
obj-$(CONFIG_IOSCHED_NOOP) += noop-iosched.o
obj-$(CONFIG_IOSCHED_DEADLINE) += deadline-iosched.o
obj-$(CONFIG_IOSCHED_CFQ) += cfq-iosched.o



obj-$(CONFIG_BLOCK_COMPAT) += compat_ioctl.o
obj-$(CONFIG_BLK_DEV_INTEGRITY) += blk-integrity.o

 

obj-$(CONFIG_BLK_DEV_IO_TRACE)  += blktrace.o        // kernel 3.0 已经移到/kernel/trace里啦

很显然,经常在地铁站里吆喝着说刘德华死了的那位卖报的哥们儿也知道,这里最重要的一个选项是CONFIG_BLOCK,而剩下几个我们看一下Kconfig以及Kconfig.iosched就知道,是和IO调度算法有关的,并不一定每种算法都要清楚,看其中一种就凑合了.

那么整个Block子系统的入口在哪里呢?一路走来的兄弟相信不难找到,在block/genhd.c中有这么一行:

    363 subsys_initcall(genhd_device_init);

所以很明显,genhd_device_init将为我们掀开故事的大幕.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值