Linux2.6内存布局

内存布局 2.6.11 Linux 32bit

  1. 假设有4个节点。
  2. 假设有大于896MB的内存。
  3. 除node0外,其他的每个node所占的空间为:
    size = (node_end_pfn[nid] - node_start_pfn[nid] + 1) * sizeof(struct page) + sizeof(pg_data_t)
  4. node0所占的空间为它所管理的页描述符的空间
    (node_end_pfn[0] - node_start_pfn[0] + 1) * sizeof(struct page) 由bootmem系统动态分配。

+----   0xffffffff   ---+-----------+-----------------------------------------------+--------------+
|                       |           | unused hole                                   |++++++++++++++|
|       0xfffff000   ---|-----------+------------| FIXADDR_TOP |--------------------|++++++++++++++|
|                       |           | vsyscalls                                     |++++++++++++++|
|       0xffffe000   ---+-----------+------------| VSYSCALL_ADDR |------------------|++++++++++++++|
|                       |           |                                               |++++++++++++++|
|       0xfffdc000   ---+-----------+------------| KMAP_BEGIN    |------------------|++++++++++++++|
|                       |           | kmap_atomic()/kunmap_atomic()                 |++++++++++++++|
|       0xfff75000   ---+-----------+------------| KMAP_END      |------------------|++++++++++++++|
|                       |           |                                               |++++++++++++++|
|       0xfff6e000   ---+-----------+------------| FIXADDR_START |------------------|++++++++++++++|
128MB                   |           |                                               |++++++++++++++|
|       0xfff5d000   ---+-----------+------------| FIXADDR_BOOT_START |-------------|++++++++++++++|
|                       |           |   kmap_high()/kunmap_high()                   |++++++++++++++|
|       0xff800000 +----+-----------+------------| PKMAP_BASE |---------------------|++++++++++++++|
|                  |    |    8KB    | hole                                          | kernel space |
|                  |    +-----------+------------| VMALLOC_END   |------------------|++++++++++++++|
|                  |    |           | vmalloc/ioremap space                         |++++++++++++++|
|                  |    +-----------+-----------------------------------------------|++++++++++++++|
|               120MB   |    4KB    | 4kb hole on interval of per vmalloc()         |++++++++++++++|
|                  |    +-----------+-----------------------------------------------|++++++++++++++|
|                  |    |           | vmalloc/ioremap space                         |++++++++++++++|
|                  |    +-----------+------------| VMALLOC_START |------------------|++++++++++++++|
|                  |    |    8MB    | hole                                          |++++++++++++++|
+----   0xf8000000 +----+-----------+-----------------------------------------------|++++++++++++++|
|                       |   NODE1   | (node_pages) * sizeof(struct page)            |++++++++++++++|
|                       +-----------+   + sizeof(pg_data_t)                         |++++++++++++++|
|                       |   NODE2   |                                               |++++++++++++++|
|                       +-----------+  var:vmalloc_earlyreserve (pages)             |++++++++++++++|
|                       |   NODE3   |                                               |++++++++++++++|
|   var:max_low_pfn  ---+-----------+------------|highstart_pfn|--------------------|++++++++++++++|
|                       |           |                                               |++++++++++++++|
896MB                   |           |                                               |++++++++++++++|
|                       |           | direct mapping of all phys. memory            |++++++++++++++|
|                       |           |                                               |++++++++++++++|
|                       |           |                                               |++++++++++++++|
|   var:mix_low_pfn  ---+-----------+-----------------------------------------------|++++++++++++++|
|                       |   NODE0   |     sizeof(pg_data_t)                         |++++++++++++++|
|init_pg_tables_end  ---+-----------+-----------------------------------------------|++++++++++++++|
|                       |           |     kernel text mapping, from phys 0          |++++++++++++++|
+----   0xC0000000   ---+-----------+--------------| __PAGE_OFFSET | ---------------+--------------+
|                       |           |                                               |xxxxxxxxxxxxxx|
|                       |           |                                               |xxxxxxxxxxxxxx|
|                       |           |                                               |xxxxxxxxxxxxxx|
|                       +-----------+-----------------------------------------------|xxxxxxxxxxxxxx|
|                       |           |                                               |xxxxxxxxxxxxxx|
|                       |           |                                               |xxxxxxxxxxxxxx|
|                       |           |                                               |xxxxxxxxxxxxxx|
|                       +-----------+-----------------------------------------------|xxxxxxxxxxxxxx|
|                       |           |                                               |xxxxxxxxxxxxxx|
3GB                     +-----------+-----------------------------------------------|  user space  |
|                       |           |                                               |xxxxxxxxxxxxxx|
|                       |           |                                               |xxxxxxxxxxxxxx|
|                       |           |                                               |xxxxxxxxxxxxxx|
|                       |           |                                               |xxxxxxxxxxxxxx|
|                       |           | different per mm                              |xxxxxxxxxxxxxx|
|                       |           |                                               |xxxxxxxxxxxxxx|
|                       |           |                                               |xxxxxxxxxxxxxx|
|                       |           |                                               |xxxxxxxxxxxxxx|
+-----  0x00000000  ----+-----------+-----------------------------------------------+--------------+

VirtualBox是一款开源的虚拟化软件,可以在计算机上创建和运行多个虚拟操作系统。要安装Linux 2.6版本,可以按照以下步骤进行操作: 1. 首先,下载并安装VirtualBox软件。你可以在VirtualBox官方网站上找到适合你操作系统的安装包,并按照提示进行安装。 2. 下载Linux 2.6的ISO镜像文件。你可以在Linux官方网站或其他可信的镜像站点上找到适合你需求的Linux 2.6版本的ISO镜像文件。 3. 打开VirtualBox软件,点击"新建"按钮创建一个新的虚拟机。 . 在创建虚拟机的向导中,输入虚拟机的名称,并选择Linux作为操作系统类型,选择Linux 2.6的版本。 5. 根据你的需求,为虚拟机分配内存大小和硬盘空间。建议根据你的计算机配置来合理分配资源。 6. 创建虚拟硬盘并设置其大小。你可以选择动态分配或固定大小的虚拟硬盘。 7. 完成虚拟机的创建后,在VirtualBox主界面中选择刚刚创建的虚拟机,并点击"设置"按钮。 8. 在设置界面中,选择"存储"选项卡,点击"控制器:IDE"下的"空"按钮,然后选择"虚拟光驱文件"。 9. 在弹出的对话框中,选择之前下载的Linux 2.6的ISO镜像文件。 10. 点击"确定"保存设置,并启动虚拟机。 11. 虚拟机启动后,按照Linux 2.6的安装向导进行操作。根据提示选择安装语言、键盘布局等选项,并设置用户名和密码等信息。 12. 完成安装后,重新启动虚拟机,你就可以开始使用安装好的Linux 2.6系统了。 希望以上步骤对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值