内核空间的各种地址.pptx
《内核空间的各种地址.pptx》由会员分享,可在线阅读,更多相关《内核空间的各种地址.pptx(12页珍藏版)》请在装配图网上搜索。
内核空间中的各种地址,杨小帅 2012-5-24,提纲, 2010 WRI .,2,内核空间中的地址,有哪些?,如何理解?,如何使用?,内核空间地址种类, 2010 WRI .,3,物理地址; 线性地址; 虚拟地址; IO地址;,内核地址空间布局, 2010 WRI .,4,Linux内存线性地址空间大小为4GB,分为2个部分:用户空间部分(通常是3G)和内核空间部分(通常是1G)。我们主要关注内核地址空间部分。 在我们P4080/P4040中,0xC0000000 0xC0000000+768M是内核的线性地址空间(mem_map),768M以上的空间称之为高端内存(high memory)。 高端内存分为三个区域: vmalloc region; 永久映射区(Permanet Kernel Mappings); 固定映射区(Fix-mapped linear Address);,如何理解?(1), 2010 WRI .,5,硬件地址 硬件真正识别的地址;,线性地址 32位系统,能够访问的地址空间为4G(地址线只有32bit),可以称之为CPU的线性地址空间。内核中的线性地址指的是PAGE_OFFSET PAGE_OFFSET+768M。这段地址与真实的物理地址就相差一个PAGE_OFFSET,它有两个特点:物理地址连续,虚拟地址也连续;,如何理解?(2), 2010 WRI .,6,虚拟地址 软件真正使用的地址,在内核空间中,除了物理地址和IO地址,其他常见的地址都可以理解为虚拟地址;,IO地址 CPU控制外设是通过读写外设上的寄存器来进行的,外设寄存器也称为“I/O端口”,而IO端口有两种编址方式:独立编址和统一编址。 统一编址:IO寄存器与主存单元一样看待,将主存的一部分划出来用作IO地址空间,也称为“IO内存”(ARM,POWERPC一般采用这种方式); 独立编址: IO地址与存储地址分开独立编址,I/0端口地址不占用存储空间的地址范围。独立编址也称为“I/O端口”方式,外设寄存器位于“I/O(地址)空间”(x86一般是这种方式);,如何使用?(1), 2010 WRI .,7,硬件地址 如何使用硬件地址,跟软件没有关系,是硬件电路关心的事情;,线性地址 一般使用kmalloc来分配。gfp_mask标志常用场景如下:,如何使用?(2), 2010 WRI .,8,线性地址(续) 线性地址和物理地址之间可以灵活转换。 物理地址-线性地址 #define _va(x) (void *)(unsigned long)(x) + PAGE_OFFSET) 线性地址-物理地址 #define _pa(x) (unsigned long) (x) - PAGE_OFFSET),虚拟地址 用户空间中的变量地址一般都是虚拟地址。在内核中,虚拟地址是一个理解上的概念,它包含的范围比线性地址广。 注意:vmalloc出来的mem虽然虚拟地址仍然是连续的,但是物理上不一定连续,因为vmalloc不是工作在内核的低端内存空间。,如何理解?(3), 2010 WRI .,9,IO地址 访问IO内存的流程为: request_mem_region() - ioremap() - ioread8()/iowrite8() - iounmap() - release_mem_region() 其实,IO地址在ioremap之后,基本上可以把它当作普通的虚拟地址一样来操作。但是,需要注意的是,IO地址与RAM地址最大的区别在于IO操作具有边际效应。 由缓存引起的问题很好解决:访问IO区域时禁止硬件缓存; 由编译器优化引起的解决办法是:在特定顺序执行的操作之间使用内存屏障。,Summary (1), 2010 WRI .,10,内存分配: #include void *kmalloc(size_t size, int flags); Void kfree(void *obj); #include void *kmalloc(unsigned long size); Void kfree(void *addr); 页分配函数: struct page *alloc_pages(unsigned int flags, unsigned int order); struct page *alloc_page (unsigned int flags); void _free_pages(struct page * page, unsigned int order); void _free_page (struct page * page); int get_order(unsigned long size);,Summary (2), 2010 WRI .,11,内存区域的资源分配: #include #define request_mem_region(start,n,name) ; #define check_mem_region(start,n) ; #define release_mem_region(start,n) ; 映射IO地址空间到虚拟地址空间: #include void _iomem *ioremap(phys_addr_t address, unsigned long size); #define ioremap_nocache(addr, size) ioremap(addr), (size); void iounmap(volatile void _iomem *addr); 页分配函数: #include unsigned int ioread8(void _iomem *); unsigned int ioread16(void _iomem *); unsigned int ioread32(void _iomem *); void iowrite8(u8, void _iomem *); void iowrite16(u16, void _iomem *); void iowrite32(u32, void _iomem *);,Q & A, 2010 WRI .,12,- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内核 空间 各种 地址
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文