地址类型:
用户虚拟地址:这是用户空间程序能看到的常规地址。
物理地址:该地址在处理器和系统内存之间使用。
总线地址:该地址在外设总线和内存之间使用。
内核逻辑地址:组成了内核的常规地址空间。该地至映射了部分内存,并经常被视为物理地址,在大多数体系结构中,逻辑地址与相关的物理地址的不同,仅仅在于它们之间相差一个固定的偏移量。逻辑地址通常保存在UNSIGNED LONG ,和void*这样的内存变量中,用kmalloc返回的内存地址,就是内核逻辑地址。
内核虚拟地址:与逻辑地址相比,它与物理地址的映射不是线性和一一对应的。所有的逻辑地址都是虚拟地址,而虚拟地址不一定是逻辑地址。虚拟地址通常保存在指针变量中。
物理地址和页:
物理地址被分为很多离散单元称为页,ARM中一个页的大小为4096字节/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12 移动12位即得页帧数
#define PAGE_SIZE (1UL 低端内存:存在于内核空间上的逻辑地址内存。
高端内存:指那些不存在逻辑地址的内存,它们处于内核虚拟地址之上。
内存映射和页结构:
在高端内存中将无法使用逻辑地址,内存中处理内存的函数使用page结构的指针。
page结构中与驱动相关的成员:
atomic—t count;对该页的访问计数。
void *virtual: 如果该页被预设,则指向该页的虚拟地址,否则为NULL。
内核中维护一个或多个page数组,用来跟踪系统中的物理内存。
PAGE结构指针与虚拟地址之间的转换相关的宏:
struct page *virt_to_page(void *kaddr);
用来负责将逻辑地址转换为相应的page结构指针。
struct page *pfn_to_page(int pfn);
通过给定的页祯号,返回page结构指针。
void *page_address(struct page*page);
如果地址的话,返回该页的虚拟地址。
相关推荐
缺页处理是Linux内存管理中的一个重要概念,当进程尝试访问未映射到物理内存的虚拟地址时,就会触发缺页异常。内核会捕获这个异常,并分配物理内存,然后映射到虚拟地址空间。 #### 7. 内存管理体系建立流程 **7.1...
本章不仅提供了关于Linux内存管理及其与设备驱动编程相关的高级概述,而且还深入探讨了具体的实现细节和技术要点。无论是对于初学者还是有经验的开发者来说,掌握这些知识点都将对编写高效可靠的驱动程序产生积极的...
Linux内存管理是操作系统中的一项核心功能,负责在进程之间分配和管理物理和虚拟内存。本文将深入探讨Linux内存管理中的几种内存分配函数——malloc、vmalloc和kmalloc,阐述它们之间的区别以及相似之处,从而帮助...
1. Linux内存组织 在Linux中,内存被划分为多个节点,每个节点对应系统中的一个处理器。节点进一步被分为三个内存域:ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM。ZONE_DMA是用于直接映射到内核段的内存区域,适合DMA...
4. **内存碎片管理**:为了防止物理内存和虚拟地址空间出现碎片,Linux采用了多种策略,如伙伴系统分配大块内存,slab分配器用于缓存对象,以及内存区(zone)的概念,将内存按其访问速度分成不同区域,如DMA区、...
读者会了解到如何设置硬件环境,如内存映射、中断处理,以及如何启动第一个进程——init。 其次,书中对进程管理进行了深入探讨。这部分包括进程创建、调度、同步和通信机制。例如,读者可以学习到fork、execve和...
《Linux设备驱动开发详解——内存管理篇》 在Linux操作系统中,内存管理是核心功能之一,对于设备驱动开发者来说,理解和掌握内存管理机制至关重要。"ldd3-master.zip" 提供了一个关于Linux设备驱动和内存管理的...
1. **设备模型**:Linux设备模型是内核中的一个重要组件,它提供了一种统一的方式来组织和管理系统的各种设备。书中会介绍如何注册和管理设备节点,以及如何使用sysfs和udev等工具来处理设备。 2. **字符设备和块...
《Linux高级教程——内核解释》是一本专为Linux爱好者和专业人士准备的深入解析Linux内核的书籍。这本书详尽地介绍了Linux内核的工作原理、设计思想以及如何对其进行理解和优化,是提升Linux技能的重要资源。 在...
4. 设备管理:设备管理涉及I/O控制、缓冲区管理、中断处理和直接存储器访问(DMA)等。设备驱动程序是操作系统与硬件之间的桥梁,允许操作系统与各种硬件设备交互。 5. 网络通信:在网络环境下,操作系统提供网络...
- **2.1 Linux内存管理的基本框架** - 内存管理是操作系统的核心功能之一,包括物理内存和虚拟内存的管理。 - Linux内核通过复杂的算法来有效地管理内存资源,以满足不同进程的需求。 - **2.2 地址映射的全过程** ...
此外,它还包括LCD控制器、非易失性存储器(如NAND Flash)的引导单元、系统管理器、多个UART、DMA通道、PWM定时器、I/O端口、RTC、多通道ADC、IIC和IIS接口,以及USB主机单元等丰富的外设接口,为构建功能丰富的...
《dm9000——Linux下的网络驱动程序详解》 在深入探讨dm9000网卡驱动在Linux操作系统下的实现之前,我们首先要理解的是,驱动程序是硬件设备与操作系统之间的桥梁,它允许操作系统控制并利用硬件设备的功能。在...
7.2 Linux内存管理 7.3 Linux内存访问 7.4 LinuxI/O访问 7.4.1访问I/O 7.4.2申请与释放I/O资源 7.4.3 I/O访问流程 7.4.4设备地址与用户空间的映射 7.5 DMA 7.5.1 DMA与Cache的一致性 7.5.2 Linux下的DMA编程 第8章...
《Linux设备驱动程序详解——基于Linux源码分析》 Linux设备驱动程序是操作系统与硬件设备之间的桥梁,它们负责实现操作系统对硬件的抽象,使得应用程序能够通过标准接口与硬件交互,而无需关心底层硬件的具体实现...
因此,我们将主要围绕vim编辑器这一主题展开讨论,同时也会提及DMA的概念,尽管它们通常在编程和系统管理领域中是分开讨论的。 **Vim编辑器** Vim,全称Vi Improved,是一款强大的文本编辑器,广泛用于Linux、Unix...