Linux device driver 3 笔记 之 内存映射
今天自己学习 Linux设备驱动程序 第三版 第15章 内存映射和DMA. 感觉有点吃力。主要是对内存映射很多术语和概念不是很清楚,理解起来有点费劲。
后来结合英文原版,静下心来仔细学习,才算是有了一点进展。
现在在这里做一个笔记,以备以后复习用。
低端内存和高端内存
书中的图15-1有点误导人。图中将 内核虚拟地址 和 内核逻辑地址 分开了。其实应该是并在一起的。
内核虚拟地址 是 内核逻辑地址 的一个超集。 所有的内核逻辑地址都是内核虚拟地址。 但内核虚拟地址不一定是内核逻辑地址。
在32位系统中,用32位最大能表示4G内存。这4G就形成了虚拟地址的范围。内核将这4G做了一个划分。
一般将3G划给用户空间,1G划给内核空间。这1G就是所谓的内核地址空间。也就是1G内核虚拟地址。(注意前面说了,内核虚拟地址是内核逻辑地址的超集)
内核只能访问这1G的内核地址空间。对所有物理内存的访问,都必须映射到这1G内核地址空间。
在这1G内核地址空间中,有一部分地址是与物理地址具有一一对应关系的,他们之间只不过是差了一个固定的偏移量。
这部分地址就是内核逻辑地址了。也就是说内核逻辑地址与物理内存的映射是线性的。
而与内核逻辑地址对应的物理内存,或者说通过内核逻辑地址映射到物理内存,就是所谓的低端内存。
前面说了,内核地址空间只有1G,那其中的内核逻辑地址范围一定会略小于1G。那在配置了很大内存的系统中(超过1G),有部分内存就肯定无法通过内核逻辑地址来直接映射。
这部分无法通过内核逻辑地址来直接映射的内存就是 高端内存。
内核只能通过自己的1G的内核地址空间来访问内存。那要访问这些高端内存,就必须进行必要的映射。把高端内存映射到内核地址空间范围内。
引用Linux device driver 一书 第三版 第15章 中 kmap() 函数的介绍:
对于高端内存,kmap在专用的内核地址空间创建特殊的映射。对该种映射的数量是有限的。
也即是说,内核在内核地址空间(1G)中划分出一部分,专门用来映射高端内存。
等于说,这部分内核地址空间的地址是所有高端内存共享的。要用的时候,通过kmap进行映射,用完了,通过kunmap返还。
内存映射 和 page struct
提到page,想到的应该是物理内存。可以把page理解成物理内存的一个单位。内核不是以字节为单位来管理内存的,而是以页为单位来管理内存的。
所有的page,都是指物理内存。
因为内核地址空间无法直接表示所有的物理内存,所以仅通过一个内存地址无法代表一个
相关文档:
http://hi.baidu.com/j_fo/blog/item/7412bb018deab109728da572.html
Linux内核 irq/soft irq/tasklet/同步
2009-10-08 21:22
1.中断处理程序结束之前,不允许产生相同的中断事件;(禁用PIC上该中断,但可以产生其他中断)
2.中断处理程序、软中断、tasklet既不可被抢占也不能被阻塞,最多发生中断嵌套;
3.执行中断 ......
http://hi.baidu.com/j_fo/blog/item/a43fa60fa6e2f4eaab6457d5.html
Linux2.6内核epoll介绍
2008-11-05 16:35
http://blog.csdn.net/rstevens/archive/2007/10/30/1858067.aspx
http://hi.baidu.com/jmlover/blog/item/24c28b131e6b48d7f7039ee6.html
http://hi.baidu.com/jmlover/blog/item/e64df724f12926348744f9 ......
[高性能技术] Linux2.6内核epoll介绍(0.1版本)
转自: http://mechgouki.blogdriver.com/mechgouki/601157.html
[作者]:滕昱,2005/3/30,0.1版本
[版权声明]:此文档遵循GNU自由文档许可证(GNU Free Documentation License).任何人可以自由复制,分发,修改,不过如果方便,请注明出处和作者:)
(1)导言:
首先,我强烈建议 ......
原帖:http://www.cnscn.org/read.php?tid-44684.html
iptables有三种链
1:INPUT (进来的链)
2:OUTPUT(出去的链)
3:FORWARD(转发的链)
iptables -A INPUT -p icmp -j DROP
-A(添加一个链) -p 协议 -j(添加动作) 说明添加一个进来的链。协议是icmp动作拒绝。
iptables -L -n (用树形结构来看一下iptables的设置)
......