2 labs1993 labs1993 于 2016.05.04 11:26 提问

关于linux0.11当中设置页表映射的问题

最近在学习linux0.11,在设置页表映射出了问题。
linux0.11中用来 .org 0x1000;.org 0x2000;.org 0x3000;.org 0x4000这个几个来做表格映射。
但是我在实验当中发现一旦使用了 上面的几个 这个命令之后,就会运行不起来。
因此我就把这个命令注释,手动来直接对内存地址0x1000,0x2000等这几个地址进行操作。
但是接下来发现在对内存地址0x0~0x5000清零时,也会运行不起来。然后实验发现只有对地址0x0~0x1000清零,才能运行,但是这样也达不到页表映射的效果。

我的head内核是加载到了地址0x0的,我也想过可能是这个原因,但是如果加载到比如0x10000这样的地址,在head内核中加载GDT表时就会出现问题,进行了很多尝试还是不成功,最后又加载到了0x0。而且linux0.11的内核也是加载到地址0x0,而且对0x0~0x5000这之间的内存也清零成功了。

求大神解惑!

1个回答

CSDNXIAON
CSDNXIAON   2016.05.04 11:32

linux页表问题
Linux-0.11内核编译问题
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Linux 0.11进程共享同一个页目录表
打断一下各位,前面关于我提问的 linux0.11中所有进程共享一个页目录表,而所有进程平分4G空间,每个64MB,每个应用程序编译时入口地址相同,而载入运行时,由于所有进程的产生的虚拟地址都一样,一张页目录表无法将相同的虚拟地址映射到不同的物理地址。即无法将进程空间分配到每个64M地址中。 为了解决这个问题,可以有两种方法:(1)就是每个应用程序在编译链接时,分别预先指定入口地址为1x64m ,
分页基本原理(linux0.11)
我们都知道CPU寻址过程是:逻辑地址-(分段)->线性地址-(分页)->物理地址。   逻辑地址由段选择符和段偏移地址两部分组成;可以通过段选择符在段描述符表中找到段基地址,段基地址+段偏移地址=线性地址。   在32位CPU架构中,MMU使用的是平坦内存模型,即所有的段基地址都是0,所以逻辑地址可以很容易在分段过程中过渡到线性地址。       分页的主要作用就是将线性地址转化为物理
Linux kernel 分析之二十:内存管理-内核中的页表映射总结
从线性地址到物理地址的转换,实际上是一种映射。所有进程的3~4G的线性地址实际上是映射到相同的物理地址的。这一点不多说了。为了方便起见,3~4G的线性地址与对应的物理地址基本上是呈线性关系的。即线性地址=物理地址+3G。但是如果把这1G的线性地址都简单地处理为对应物理地址+3G,就会有新的问题产生。例如,如果物理地址大于4G,那么内核就没法访问这些地址了。所以,内核必须要从这1G的线 性空间中预
Linux 内存管理浅析 - 页面映射管理之页表管理
(4)页表建立
linux0.11中head.s分析
/* *注意!32位启动代码是从绝对地址0x0000 0000开始的,这里同样也是页目录 *将要存在的地方,因此启动代码会被页目录覆盖掉 */ .text .globl _idt,_gdt,_pg_dir,_tmp_floppy_area _pg_dir: !页目录将会放在这里 startup_32: /* *注意!!!这里已处于3位运行模式,因此这里的0x10并不是把地址0x10放入到
页表及内存映射
用户空间: 0x00000000~0xbfffffff 内核空间: 0xc0000000~0xffffffff 内核前896M线性空间: 0xc0000000~0xc0037fff   从多少M计算出其对应的地址: 3M = 3*1024 = 3072K 3072 / 4 = 768 即3M占用768个页框 768D = 300H
Arm-Linux二级页表的问题
以前,在一些文档和代码中看到过说arm-linux的二级页表分为linux版本和硬件版本。一直觉得概念比较混乱,没有仔细研究,今天终于遇到了这个问题,不得不学习一下了。 在do_page_fault()过程中,有下面函数会被调到: [c]static inline void __pmd_populate(pmd_t *pmdp, unsigned long pmdval){pmdp[0]
Windows中页表寻址之奥妙
本文解释了Windows的页目录自映射方案。
页表映射
内核启动时进行内存映射, map_mem()->create_mapping()内核支持4级映射(PGD->PUD->PMD->PTE) ,支持的level由宏CONFIG_PGTABLE_LEVELS定义,目前为3级映射,也即PGD->PMD->PTE从下图可以知道,每级页表分别使用虚拟地址的9位作为索引,也即每级页表大小为512.  虚拟地址最后12bit作...
页表自映射
页表自映射 注:本文仅针对32位、两级页表的系统。如X86 采用页表自映射方案的最终目的是,节省4KB的空间(对于32位,两级页表的系统来说)。 具体来说,如果不采用页表自映射方案,那么映射整个4GB的虚拟空间共需要 页目录的4KB+1024个页表∗每个页表占4KB=4KB+4KB∗1024=4MB+4KB页目录的4KB+1024个页表∗每个页表占4KB=4KB+4KB∗1024=4MB...