linux memory addressing

Memory address:

logical address

segment + offset

linear address

physical address

linux memory addressing is to get physical address from linear address from logical address.

a picture from <Understanding the Linux Kernel>:

To understand logical/linear/physical address:

逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及。应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作。

线性地址(Linear Address) 是逻辑地址到物理地址变换之间的中间层。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。

物理地址(Physical Address) 是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。

虚拟内存(Virtual Memory) 是指计算机呈现出要比实际拥有的内存大得多的内存量。因此它允许程序员编制并运行比实际系统拥有的内存大得多的程序。这使得许多大型项目也能够在具有有限内存资源的系统上实现。一个很恰当的比喻是:你不需要很长的轨道就可以让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就可以完成这个任务。采取的方法是把后面的铁轨立刻铺到火车的前面,只要你的操作足够快并能满足要求,列车就能象在一条完整的轨道上运行。这也就是虚拟内存管理需要完成的任务。在Linux 0.11内核中,给每个程序(进程)都划分了总容量为64MB的虚拟内存空间。因此程序的逻辑地址范围是0x0000000到0x4000000。

from page http://zhidao.baidu.com/link?url=hjYKY12YZPaMYNR-PQ_aDHNt_efpWCXqcJYjjK-p-WtzM4lngOFHfIIUpXPB2G42HBqJCMfio3nhXuZZuwspHK

时间: 2024-10-28 14:42:07

linux memory addressing的相关文章

《深入理解Linux内核》阅读笔记 --- Chapter 2 Memory Addressing

1.logical address = segment identifier (16bits) + offset (32bits) segment selector其实就是GDT或者LDT的索引,其中的TI字段用来确定是选择GDT还是IDT 2.segment identifier is called segment selector, and in order to retrieve it quickly,  the process provides segmentation register

linux memory release commands内存清理/释放命令

linux 内存清理/释放命令 You could find reference from here: http://jingyan.baidu.com/article/597a06436a687f312b5243f3.html Basically it looks like this: ---------------------------------- 清理前内存使用情况 free –m 或者 free 清理内存 echo 1 > /proc/sys/vm/drop_caches 清理后内存

linux memory dump

Linux provides two virtual devices for this purpose, '/dev/mem' and '/dev/kmem', though many distributions disable them by default for security reasons. '/dev/mem' is linked to the physical system memory, whereas '/dev/kmem' maps to the entire virtua

如何展开Linux Memory Management学习?

Linux的进程和内存是两座大山,没有翻过这两座大山对于内核的理解始终是不完整的. 关于Linux内存管理,在开始之前做些准备工作. 首先bing到了Quora的<How can one really learn Linux Kernel Memory Management?>,这也是大部分初学者,或者说大部分Linux内核开发人员的疑问? 正如Vaishali Thakkar所说,最好的方法是读代码,但是面对这么庞杂的代码,往往是无从下手.Vaishali Thakkar推荐从LSF/MM论

[Linux Memory] 用/proc/stat计算cpu的占用率

转载自:http://blog.csdn.net/pppjob/article/details/4060336 在Linux下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间,三者之和就是CPU的总时间,当没有用户进程.系统进程等需要执行的时候,CPU就执行系统缺省的空闲进程.从平常的思维方式理解的话,CPU的利用率就是非空闲进程占用时间的比例,即CPU执行非空闲进程的时间 / CPU总的执行时间. 在Linux系统中,C

Linux高端内存

Linux高端内存是针对物理内存来说的,虚拟内存没有高端这个概念.Linux系统将虚拟内存分为两个部分,即用户地 址空间和内核地址空间,对于32位系统来说,虚拟地址空间为4GB,其中用户空间范围为0-3GB,内核空间范围为 3-4GB.Linux将3GB开始的内核虚拟地址空间的896M地址直接映射到物理地址空间的0-896M,这部分是永久性映 射,剩下的128M则可根据需要进行动态映射,也称临时性映射.如果没有动态映射,那么1GB的内核虚拟地址空间最 多只能访问1GB的物理内存,那么如果物理内存

【Linux】APUE or ULK

APUE: Advance Programming in the Unix Enviroment ULK  : Undertanding the Linux Kernel 一直想读这两本书,希望对Linux有更多的了解,尤其是memory management & multi-process/thread.据说,APUE是讲如何在Linux上编程,ULK是讲kernel内部如何设计实现的.这个周末把两本书的Preface和Chapter 1都看了一遍,确实如此. Conclusion: 直接看英

《CS:APP》 chapter 9 Vitrual Memory 笔记

Vitrual Memory In order to manage memory more efficiently and with fewer errors, modern systems provide an abstraction of main memory known as virtual memory (VM). Virtual memory is an elegant interaction of hardware exceptions, hardware ad-dress tra

PatentTips - Method to manage memory in a platform with virtual machines

BACKGROUND INFORMATION Various mechanisms exist for managing memory in a virtual machine environment. A virtual machine platform typically executes an underlying layer of software called a virtual machine monitor (VMM) which hosts one to many operati