1. 以4G大小的物理内存为例,其可以存储4G(4,294,967,296)个字节(每个字节8bit(位)),每个字节在内存中可以看做是按照数组样式向下排列,因此要想对所有字节进行寻址,那么就需要对每个字节进行编址,类似于数组的下标,通过下标来对内存的每个字节进行访问,这就是寻址。
  2. 由于2^32=4,294,967,296,所以想要寻址4G的内存,就需要一个32位的二进制数来对内存就行寻址,通常用16进制数来表示地址,1位十六进制数需要4位二进制数表示,因此32位的二进制数就可以转化为8位的十六进制来表示,也即下图的0x00000000、0x00000001。
  3. 再来看4k对齐,内存进行分页机制时,会找到每一个4k地址的边界处,进行分页操作,一页的大小是4k,页表中的页表项存储的是每一页物理内存的起始地址,占4个字节,共32位,如下图所示。

    但是实际使用中32位的物理页基址的低12位全为0,所以会将其挪作他用,作为地址使用时再与上0xfffff000即可。那为什么物理页基址的低12位会为0呢?我们再来看下图。

    看明白了吗,如果我们继续往下对内存进行编址,在第4096个字节处,正好是4k的页面大小,其对应的地址是0x00000FFF,在此处进行4k分页,第4097个字节作为下一个4k页的起始处,其地址恰为0x00001000,低12位正好为0,是不是很奇妙,这样再往下分4k的页面到第8192个字节,其地址是0x00001FFF,第8193个字节对应的地址正好是0x00002000。这样只要是4k页面的分界处,其32位地址的低12总是0,以此类推下去。因此在进行内存分页时,系统会自动检测4k页面的边界处,进行分页,实现边界对齐。

linux0.12内核---关于内存寻址与4k边界对齐相关推荐

  1. Linux 0.12内核的内存管理基础

    在Linux 0.12内核中,为了有效地使用机器中的物理内存,在系统初始化阶段内存被划分成几个功能区域. Linux内核程序占据在物理内存的开始部分,接下来是供硬盘或软盘等块设备使用的高速缓冲区部分, ...

  2. 深入理解Linux内核之内存寻址

    说明: 本文基于第三版<深入理解 Linux 内核>,该部分以 80x86 处理器为基准进行介绍,并且略过了原文中详细介绍32位扩展分页部分. https://xcraft.tech/20 ...

  3. 深入理解Linux内核-内存寻址

    1.逻辑地址怎么转换为线性地址的: 逻辑地址 = 段选择符(16bit)+偏移量(32bit) 段选择符又三部分组成:index(索引序号).T1(表指示器).RPL(request privileg ...

  4. Linux 0.12内核与现代内核在内存管理上的区别

    0.12内核的内存管理比较简单粗暴,内核只用了一个页目录,只能映射4G的线性空间,所以每个进程的虚拟空间(逻辑空间)只能给到64M,最多64个进程:每个进程都有对应的任务号nr,当一个进程需要分配进程 ...

  5. 操作系统学习:系统调用与Linux0.12初始化详细流程

    本文参考书籍 1.操作系统真相还原 2.Linux内核完全剖析:基于0.12内核 3.x86汇编语言 从实模式到保护模式 4.Linux内核设计的艺术 ps:基于x86硬件的pc系统 系统调用 系统调 ...

  6. x64 结构体系下的内存寻址

    转载请注明出处:http://www.cnblogs.com/lanrenxinxin/p/4735027.html 在阅读NewBluePill源码的时候,看内存的那一块简直头疼,全是x64下的寻址 ...

  7. Linux 内存管理篇(1)内存寻址

    内存地址: 现代操作系统为了实现程序的运行时动态链接, 动态运行时的装入方式, 保护模式 和 虚拟内存 等技术, 在程序的内存寻址方面采用逻辑地址替代物理地址. 运行时动态链接 : 是指将程序运行时所 ...

  8. 操作系统学习:Linux0.12文件异步IO

    本文参考书籍 1.操作系统真相还原 2.Linux内核完全剖析:基于0.12内核 3.x86汇编语言 从实模式到保护模式 4.Linux内核设计的艺术 ps:基于x86硬件的pc系统 Linux0.1 ...

  9. 《linux内核完全剖析:基于0.12内核》读书笔记一

    1. 下载linux0.12内核源代码 http://www.oldlinux.org/Linux.old/kernel/0.1x/ 下载任意一个都行. http://www.oldlinux.org ...

最新文章

  1. pyhton 读取目录下所有文件夹下的文件(指定文件)
  2. c语言5个学生3门成绩写入文件,(5) 输入N个学生的姓名和3门课的成绩,统计每个学生的平均成绩后,将结果输出到文件studen...
  3. mySql 修改字段自增
  4. 测试的重要性:蚊子让快递柜的触摸失灵
  5. java 常用汉字_中国常用汉字有多少
  6. UTF-8转码GBK
  7. 交换机和集线器的区别是什么?
  8. 机器学习考试 ppt
  9. html页面加文字水印
  10. 安装redhat系统步骤图解_用u盘安装redhat图文教程
  11. 信用飞疑似信息泄露致用户被骗近4万元,平台借款利率高达75%
  12. 按键精灵手机版 代码收藏
  13. 【计算机毕业设计】437物流管理系统设计与实现
  14. 如何用SQL做留存率分析
  15. 执法部门的“新助手” 扫二维码进群反映问题
  16. python结束线程_python终止线程
  17. 为何贩卖焦虑的文章如此受欢迎???
  18. 揭秘换肤技术:实现系统滚动条换肤功能
  19. 【虚幻引擎UE】UE5 AR初体验之静态动态模型加载
  20. Lucene.Net3.0.3+盘古分词器学习使用

热门文章

  1. 小米快传html,手机中的小米快传怎么用?小米快传的详细使用教程
  2. 第四章、贷款和贴现业务的核算
  3. 复审在美国的章程德佑介绍
  4. 台式计算机如何增加蓝牙,台式电脑怎么连蓝牙耳机(教你简单的连接技巧)
  5. [附源码]JSP+ssm计算机毕业设计分时租赁共享汽车系统dm1jn【源码、数据库、LW、部署】
  6. Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建六(Kylin篇)
  7. 树莓派 四步法 烧ubuntu mate系统
  8. balabalabala
  9. Delphi Web前端开发教程(4):基于TMS WEB Core框架
  10. (C语言实现)班级成绩管理系统源代码