美文网首页
内核地址空间及高端内存映射的总结

内核地址空间及高端内存映射的总结

作者: fertilizer | 来源:发表于2017-07-27 11:49 被阅读0次

内核地址空间

逻辑地址->线性地址->物理地址

8086

物理地址 = 段地址左移4位 + 段内偏移量
这种方式的寻址最大地址为0xFFFF; 0xFFFF = 0x10FFEF, 这段内存大于1M空间,该如何寻址,8086的做法就是自动从物理内存0地址寻址,按0xFFFF取模寻址。

80386:

80386cpu当需要访问内存时,首先给出的逻辑地址,然后通过MMU内存单元分段机制,转换为线性地址, 然后再通过MMU管理单元分页机制转换为物理地址。

当处理器需要访问内存时,给出的逻辑地址是:选择符+偏移量,然后通过MMU的分段机制,即可获取这个段的描述符,然后存入描述符寄存器,取出段基地址 + 偏移量,即可获得这个逻辑地址对应的线性地址。
线性地址 = 目录项(dir)+ 页表项(page)+ 页面偏移(offset)

一个线性地址由10位目录表+10位页表+12位偏移量组成,当给定一个线性地址时,

  • 首先从控制寄存器CR3获取页目录基地址,然后加上线性地址的前10位页目录偏移量即可得到页表的基地址;
  • 接着页表基地址+线性地址第二个10位的页表偏移,即可得到内存页的首地址;
  • 最后内存页的首地址+线性地址的最后12位偏移量,即可得到最后的物理地址;

以32位的操作系统为例,内核地址空间占1G, 用户地址空间占3G。内核代码访问或线程访问内存时,访问的都是逻辑地址。从逻辑地址映射到物理地址,则是页表负责的事。内核逻辑地址空间访问为0xc0000000-0xffffffff,这一限制导致只能访问前1g的物理内存。

简单的映射是行不通的。

段选择符->全局段描述符->段基址-》线性地址-》多级页表-》物理地址

参考文献:

http://luodw.cc/2016/02/17/address/

相关文章

  • 内核地址空间及高端内存映射的总结

    内核地址空间 逻辑地址->线性地址->物理地址 8086 物理地址 = 段地址左移4位 + 段内偏移量这种方式的寻...

  • mmap原理

    即memory map(内存映射)。内存映射减少了文件从内核空间copy到用户空间,但是增加了文件映射到用户空间的...

  • Linux kernel之二内存管理之进程虚拟地址空间

    1.背景 虚拟内存的一大优势就是每个进程有自己的虚拟地址空间,OS 负责将其虚拟地址空间映射到物理内存中。内核处理...

  • linux 内存看一篇就够了(多图)

    ​ 正文 0 内存模块 1 linux内存总体布局:内存分成用户态和内核态 4G进程地址空间解析 内核地址空间 进...

  • 进程内存布局

    ARM64内核的内存布局 进程有用户态和内核态,同样进程的地址空间包括用户地址空间和内核地址空间,用户态访问用户地...

  • 25用户态内存映射

    mmap 将虚拟地址空间映射到物理内存 匿名映射,即虚拟内存和物理内存直接映射文件映射,将文件映射到虚拟内存ima...

  • 第15章 进程地址空间

    内核除了管理本身的内存外,还必须管理用户空间中进程的内存,也就是进程地址空间。 一、地址空间 进程地址空间由进程可...

  • linux内核编程-进程创建与进程管理

    pcb进程控制块 pcb本身是一个结构体(sched.h): 内存映射 用户空间映射:会映射到不同区域内核空间映射...

  • XSI IPC之共享内存 (2)

    映射地址空间,只能用与有亲缘关系 函数声明 参数含义 第一参数为映射空间地址,如果是NULL,则内核自动分配到进程...

  • 8.进程地址空间

    进程地址空间 内核除了管理自身的内存外,还必须管理用户空间中进程的内存,称该内存为进程地址空间,也就是系统中每个用...

网友评论

      本文标题:内核地址空间及高端内存映射的总结

      本文链接:https://www.haomeiwen.com/subject/mjkakxtx.html