全部博文(86)
发布时间:2015-07-27 14:36:53
?kmap_atomic用于高端内存映射,用于紧急的,短时间的映射,它没有使用任何锁,完全靠一个数学公式来避免混乱,它空间有限且虚拟地址固定,这意味着它映射的内存不能长期被占用而不被unmap,kmap_atomic在效率上要比kmap提升不少,然而它和kmap却不是用于同一场合的。不管怎么说,它的设计是很完美的。......【阅读全文】
发布时间:2015-07-25 14:44:59
Mapping Layer
Linux内核的文件系统组件,主要是磁盘文件系统,同时也包括块设备文件等。
Generic block layer
隐藏硬件细节,提供block设备的抽象视图。用来完成块设备的相关核心功能。
I/O scheduler layer
I/O调度器层,主要用于对块设备请求队列中的请求进行调度,以最大程度优化硬件操作的性能。(比如I/O调度器可能会对请求队列中的某些请求进行合并或者调整各请求件的顺序,以尽可能减少磁盘磁头移动的距离。)
提高 I/O 调度器的效率也是影响整个系统对块设备上数据管理效率的一个方面。
Block Device Driver
设备驱动程序,完成和硬件的具体交互。
块设备相关数据结构
gendisk结构体
内核使用 gendisk 结构来表示一个独立的磁盘设备,内核还使用 gendisk 结构来表示分区,在此结构中,很多程序必须由驱动程序来进行初始化。......【阅读全文】
发布时间:2015-07-24 23:09:19
内核选项的解析完成之后,各个子系统的初始化即进入第二部分—入口函数的调用。通常USB、PCI这样的子系统都会有一个名为subsys_initcall的入口,如果你选择它们作为研究内核的切入点,那么就请首先找到它。
朱德庸在《关于上班这件事》里说,要花前半生找入口,花后半生找出口。可见寻找入口对于咱们这一生,对于看内核代码这件事儿都是无比重要的。
但是很多时候,入口并不仅仅只有subsys_initcall一个,比如PCI。
以下代码来自 linux内核源码中 include/linux/init.h 文件 ......【阅读全文】
发布时间:2015-07-24 22:50:30
内核选项的解析完成之后,各个子系统的初始化即进入第二部分—入口函数的调用。通常USB、PCI这样的子系统都会有一个名为subsys_initcall的入口,如果你选择它们作为研究内核的切入点,那么就请首先找到它。
朱德庸在《关于上班这件事》里说,要花前半生找入口,花后半生找出口。可见寻找入口对于咱们这一生,对于看内核代码这件事儿都是无比重要的。
但是很多时候,入口并不仅仅只有subsys_initcall一个,比如PCI。
以下代码来自 linux内核源码中 include/linux/init.h 文件 ......【阅读全文】
发布时间:2015-07-24 14:58:43
例如一些老设备只能访问16M以下的内存,但DMA的目的地址却在16M以上时,就需要在设备能访问16M范围内设置一个buffer作为跳转。这种额外的数据拷贝被称为“bounce buffering”,会明显地降低I/O 密集的数据库应用的性能,因为大量分配的bounce buffers 会占用许多内存,而且bouncebuffer 的复制会增加系统内存总线的负荷。......【阅读全文】