`
waterlife
  • 浏览: 65918 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Linux内核之外设存贮空间的地址映射

阅读更多

Linux对于外设的访问一般有两种方式:一种叫内存映射,另一种叫I/O映射。随着外设的寄存器和自身存贮空间的增加,采用第二种方式已经远远不能满足外设的需要。Linux看到的外设的地址都是总线地址,相应的存贮空间都在系统空间(3GB以上)。

 

内核为自己保持一个虚存区间队列vmlist,这是由一串vm_struct数据结构组成的一个单链队列。相似于供进程使用的vm_area_struct结构。

struct vm_struct {
	unsigned long flags;
	void * addr;
	unsigned long size;
	struct vm_struct * next;
};

 

内核使用的虚拟地址与物理地址存在一种简单的映射关系,只要在物理地址上加上3G的偏移量就可以得到虚拟地址。high_memory就是对应具体物理内存的上限所对应的虚拟地址。内核需要分配虚存空间的时候,就从这个地址加8MB处分配。

 

每个进程都有一个mm_struct结构,从中可以找到相应的页面目录。但是,内核不属于一个特定的进程,所以设置了一个内核单独的init_mm。

 

另外,kswapd根本看不到init_mm的虚存空间,这些空间会常驻内存。

 

 

分享到:
评论

相关推荐

    Linux内核源代码情景分析 (上下册 高清非扫描 )

    2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3.2 中断向量表IDT的初始化 3.3 中断请求队列的初始化 3.4 中断的响应和...

    Linux内核 内容很全

    ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储地址 空间的窗口 51 5.5.2 PCI-PCI桥:PCI配置周期和PCI 总线编号 52 5.6 Linux PCI初始化 53 5.6.1 Linux内核PCI数据结构 53...

    Linux系统下的内存映射原理

    对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。  进程的4GB内存空间被人为的分为两个部分--...

    Linux编程--Linux内核

    5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储地址 空间的窗口 51 5.5.2 PCI-PCI桥:PCI配置周期和PCI 总线编号 52 5.6 Linux PCI初始化 53 5.6.1 Linux内核...

    Linux内核情景分析(二级标题).pdf

    2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 第4章 进程与进程调度 第5章 文件系统 第6章 传统的Unix进程间通信 第7章 基于socket的进程间通信 第八章 ...

    linux 内核源代码分析

    2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3. 2 中断向量表IDT的初始化 3. 3 中断请求队列的初始化 3. 4 中断...

    LINUX内核源代码情景分析

    2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() . 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3. 2 中断向量表IDT的初始化 3. 3 中断请求队列的初始化 3. 4 ...

    linux内核源代码情景分析

    2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3.2 中断向量表IDT的初始化 3.3 中断请求队列的初始化 3.4 中断的响应...

    linux地址映射的全过程

    Linux 内核采用页式存储管理。虚拟地址空间划分成固定大小的“页面”,由 MMU 在运行时将虚拟地址“映射”成某个物理内存中的地址。与段式存储管理相比,页式存储管理有很多好处

    Linux内核情景分析

    2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3. 2 中断向量表IDT的初始化 3. 3 中断请求队列的初始化 3. 4 中断的响应和...

    LINUX内核源代码情景分析(上).part1.rar

    2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() . 第3章 中断、异常和系统调用 3.1 x86 cpu对中断的硬件支持 3. 2 中断向量表idt的初始化 3. 3 中断请求队列的初始化 3. 4 ...

    Linux系统内核中的DeviceMapper机制

    本文结合具体代码对Linux内核中的devicemapper映射机制进行了介绍。Devicemapper是Linux2.6内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的...

    Linux内核情景分析(非扫描版)

    2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3. 2 中断向量表IDT的初始化 3. 3 中断请求队列的初始化 3. 4 中断的响应和...

    LINUX编程白皮书 (全集)

    5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储地址 空间的窗口 51 5.5.2 PCI-PCI桥:PCI配置周期和PCI 总线编号 52 5.6 Linux PCI初始化 53 5.6.1 Linux内核...

    udmabuf:适用于Linux的用户空间可映射dma缓冲区设备驱动程序

    u-dma-buf是Linux设备驱动程序,用于在内核空间中分配连续的内存块作为DMA缓冲区,并使它们在用户空间中可用。 当用户应用程序使用UIO(用户空间I / O)在用户空间中实现设备驱动程序时,打算将这些存储块用作DMA...

    libkrunfw:以便利的存储格式捆绑Linux内核的动态库

    libkrunfw是一个将Linux内核捆绑在动态库中的库,它可以由轻松使用。 通过将内核捆绑在动态库中, libkrun可以将链接部分映射到进程中的工作留给链接器,然后将这些映射直接注入来宾中,而无需进行任何其他工作或...

    Linux编程从入门到精通

    5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储地址 空间的窗口 51 5.5.2 PCI-PCI桥:PCI配置周期和PCI 总线编号 52 5.6 Linux PCI初始化 53 5.6.1 Linux内核...

    linux编程白皮书

    5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储地址 空间的窗口 51 5.5.2 PCI-PCI桥:PCI配置周期和PCI 总线编号 52 5.6 Linux PCI初始化 53 5.6.1 Linux内核...

    LINUX编程白皮书

    5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储地址 空间的窗口 51 5.5.2 PCI-PCI桥:PCI配置周期和PCI 总线编号 52 5.6 Linux PCI初始化 53 5.6.1 Linux内核...

Global site tag (gtag.js) - Google Analytics