1 段页式内存管理机制 在x86 CPU中,采用了段页式内存管理机制,分段和分页模型。
READ MORE »Posts in category 内存管理
x86/x86_64 CPU中逻辑地址、线性地址与物理地址
在学习Linux内存管理过程中,会遇到逻辑地址、线性地址和物理地址三个概念。 下面的示例代码分别是在i686和x86_64系统上运行的。那么打印出的变量tmp地址和指针p指向的内存块地址分别是什么地址?物理地址?线性地址?逻辑地址? 逻辑地址(Logical address) 在机器语言指令中,来说明操作数或指令的地址。在x86架构中,每个逻辑地址包括两部分:段(Segment)和偏移量(Offset)。 线性地址(Linear address) 也称为虚拟地址。在32位CPU中,它是32位的无符号整型,最大可以达到4G。在x86_64 CPU中目前最大可使用40位地址线,即最大可寻址1TB。 物理地址(Physical address) 物理内存的实际地址,由BIOS统一编址。 这三种地址关系为,逻辑地址经过段式映射(Segmentation Translation)到线性地址。线性地址经过页面映射(Page Translation)后,得到物理地址。 x86 CPU中段机制(Segmentation)可以将程序的代码(Code)、数据(Data)、栈(Stack)分开,这样多个程序(或进程)就可以在同一个CPU上运行,而相互不会干扰。 页机制(Paging)用来实现传统的以页面为需求的虚拟内存系统,只有程序需要时,才真正给进程分配物理内存。页机制也可以用来隔离多个任务。
READ MORE »Linux内核地址空间划分
x86内核地址空间划分 在x86(32位CPU)系统中,Linux内核地址空间可以划分为1G内核空间,3G用户空间。 在x86中,Linux内核地址空间也可以划分为4G/4G。 x86_64内核地址空间划分 根据内核版本不同,可支持512G/512G、1T/1T、2T/2T的划分。 per process virtual address space limit of 512 Gigabytes top of userspace stack located at address 0x0000007fffffffff PAGE_OFFSET = 0xffff800000000000 start of the kernel = 0xffffffff800000000 global RAM per system 2^64-PAGE_OFFSET-sizeof(kernel) = 128 Terabytes – 2 Gigabytes no need of any […]
READ MORE »