linux 页管理,Linux页框管理

Linux页框管理

在前面的博文里,我们讲解了基于80x86体系的Linux内核分段和分页机制,并详细地讨论了Linux的内存布局。有了这些基本概念以后,我们就来详细讨论内核如何动态地管理那些可用的内存空间。

对于80386这种32位的处理器结构,Linux采用4KB页框大小作为标准的内存分配单元。内核必须记录每个页框的当前状态,例如,区分哪些页框包含的是属于进程的页,而哪些页框包含的是内核代码或内核数据。内核还必须能够确定动态内存中的页框是否空闲,如果动态内存中的页框不包含有用的数据,那么这个页框就是空闲的。在以下情况下页框是不空闲的:包含用户态进程的数据、某个软件高速缓存的数据、动态分配的内核数据结构、设备驱动程序缓冲的数据、内核模块的代码等等。

内核用数据结构page描述一个页框的状态信息,所有的页描述符存放在全局mem_map数组中,其数组的下标为页框号(pfn)。因为每个描述符长度为32字节,所以mem_map所需要的空间略小于整个RAM的1%。

那么一个页描述符怎样与一个占据4k的页框相联系(映射)呢?有了mem_map数组,这个问题就很简单了。因为如果知道了page数据的地址pd,用pd去减去mem_map就得到了pd的页框号pfn。那么这个物理页的物理地址是physAddr = pfn << PAGE_SHIFT  。

在得知该物理页的物理地址是physAddr后,就可以视physAddr的大小得到它的虚拟地址:

1.physAddr < 896M  对应虚拟地址是 physAddr + PAGE_OFFSET   (PAGE_OFFSET=3G)

2.physAddr >= 896M 对应虚拟地址不是静态映射的,通过内核的高端虚拟地址映射得到一个虚拟地址。

在得到该页的虚拟地址之后,内核就可以正常访问这个物理页了。

内核提供一个virt_to_page(addr)宏来产生线性地址addr对应的页描述符地址。pfn_to_page(pfn)宏产生与页框号pfn对应的页描述符地址。相反,也提供page_to_pfn(pg)宏来产生页描述符对应的页的页框号pfn。注意,针对80x86结构,上述宏并不是直接通过men_map数组来确定页框号的,而是通过内存管理区的zone_mem_map来确定的,不过原理是一样的:

#define page_to_pfn(pg)       \

({         \

struct page *__page = pg;     \

struct zone *__zone = page_zone(__page);   \

(unsigned long)(__page - __zone->zone_mem_map)

相关文档:

例一:发送Signaling Packet:

Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.

多个Command可以在一个C-frame(control frame)中发送。

如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......

一:前言

最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!

(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)

键盘驱动将检 ......

一. 以root身份建立tuxedo用户,并以tuxedu用户登陆,此用户将做为以后tuxedo管理员,用户默认目录为/home/tuxedo;

二. 用FTP把安装文件(tuxedo81_linux.bin)和用户许可证书文件(lic.txt)传到/home/tuxedo目录中;

三.   配置环境变量,.bash_profile文件,附文末;

四. 进入/home/tuxedo目录中,执行s ......

本人在最近的项目过程中,发现一个很严重的问题

在我们写的一个应用中,jboss作应用程序的容器,其中加载了webservice服务。每次服务运行一段时间后,大概几天时间以后,发现很奇怪的现象。我们的jboss控制台上看到的信息,显示出,jboss承载的多个服务还在运行,但唯独这个webservice服务down掉了

访问对应的url地址,提 ......

转自http://blog.chinaunix.net/u3/105004/showart_2088056.html

数据接收

网卡驱动的数据接收,实际上是一个生产者/消费者模型。核心是输入队列(全局的,或者网卡私有的)。网卡收到数据时,触发中断。在中断执行例程中,把skb挂入输入队列,并出发软中断。稍后的某个时刻,当软中断执行时,再从该队列中把skb取下来,� ......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值