A. linux内核中虚拟内存是怎样映射到物理内存的
当程序在运行的时候,会检测到数据在虚拟内存中,并没在物理内存中,这时候会产生一个缺页中断, 有缺页中断来映射。
B. 页表的物理地址怎么确定
逻辑地址:CPU所生成的地址。CPU产生的逻辑地址被分为 :p (页号) 它包含每个页在物理内存中的基址,用来作为页表的索引;d (页偏移),同基址相结合,用来确定送入内存设备的物理内存地址。
物理地址:内存单元所看到的地址。逻辑地址空间为2^m,且页大小为2^n,那么逻辑地址的高m-n位表示页号,低n位表示页偏移。
逻辑地址空间:由程序所生成的所有逻辑地址的集合。
C. 关于linux的问题
特点:开源 自由 稳定 安全 方便编程 网络功能强大
学起来 不算容易 关键是能不能适应它
如果你要从事 服务器方面的工作 那肯定有用 和网络有关的工作 最好还是会Linux
关于发展 这个不好说 趋势肯定是以发展为主 市场占有率 也会增大
目前 中国的计算机行业在很多地方 都处于微软的垄断下
这是个很大的问题 不过有许多人已经意识到了
D. 请问个页目录与页表的物理地址问题
内核自己一套页目录和页表====================是整个内核只有一套页目录和页表还是每个模块都有呢?另外:内核中的模块是不是相对于进程呢
E. 要想访问物理地址0x326028,需要使用哪个虚拟地址
逻辑址(Logical Address) 指由程式产段相关偏移址部例进行C语言指针编程能读取指针变量本身值(&操作)实际值逻辑址相于前进程数据段址绝物理址相干Intel实模式逻辑址才物理址相等(实模式没段或页机制,Cpu进行自址转换);逻辑Intel保护模式程式执行代码段限内偏移址(假定代码段、数据段完全相同)应用程式员仅需逻辑址打交道段页机制说完全透明仅由系统编程员涉及应用程式员虽自能直接操作内存能操作系统给配内存段操作
线性址(Linear Address) 逻辑址物理址变换间间层程式代码产逻辑址或说段偏移址加相应段基址线性址启用页机制线性址能再经变换产物理址若没启用页机制线性址直接物理址Intel 80386线性址空间容量4G(232即32根址总线寻址)
物理址(Physical Address) 指目前CPU外部址总线寻址物理内存址信号址变换终结址启用页机制线性址使用页目录页表项变换物理址没启用页机制线性址直接物理址
虚拟内存(Virtual Memory)指计算机呈现要比实际拥内存内存量允许程式员编制并运行比实际系统拥内存程式使许型项目能够具限内存资源系统实现非恰比喻:必非轨道能让列火车海北京需要足够铁轨(比说3公)能完任务采取面铁轨即铺火车前面要操作足够快并能满足需求列车能象条完整轨道运行虚拟内存管理需要完任务Linux0.11内核给每程式(进程)都划总容量64MB虚拟内存空间程式逻辑址范围0x00000000x4000000我逻辑址称 虚拟址虚拟内存空间概念类似逻辑址实际物理内存容量关逻辑址物理址差距0xC0000000由于虚拟址->线性址->物理址映射差值值由操作系统指定机理 逻辑址(或称虚拟址)线性址由CPU段机制自转换没启页管理则线性址物理址启页管理系统程式需要参线性址物理址转换程具体通设置页目录表页表项进行
建议查下资料.感觉这样的提问没有意义
F. arm中,建立页表,通过虚拟地址访问物理地址跟直接访问物理地址有什么区别有什么好处麻烦大神讲详
没法详细,去看看计算机组成原理吧。最基础的,如果直接访问物理地址,那可寻址范围就太少了。比如,2^32才4G.
G. 内核不能直接访问896MB以上的物理地址.怎么回事
896MB以上的物理内存不能被内核直接访问,是因为0~896MB的物理内存是与内核的3G~3G+896MB顺序映射的,而内核剩下的虚拟地址空间还要为比如vmalloc区预留,所以不能再直接映射了,因此不能直接访问。而大于896MB的物理内存若需访问必须动态映射到内核空间里高端内存区。
H. 在分页系统中页面大小由谁决定页表的作用是什么如何将逻辑地址转换成物理地址
答:
在分页系统中页面大小由硬件决定。页表的作用是实现从页号到物理块号的地址映射。逻辑地址转换成物理地址的过程是:用页号p去检索页表,从页表中得到该页的物理块号,把它装人物理地址寄存器中。同时,将页内地址d直接送人物理地址寄存器的块内地址字段中。这样,物理地址寄存器中的内容就是由二者拼接成的实际访问内存的地址,从而完成了从逻辑地址到物理地址的转换。
I. 内核空间怎么访问物理地址
初中物理只介绍一些较为简单的知识,高中物理则注重更深层次的研究。如物体的运动,初中只介绍到速度及平均速度的概念,高中对速度概念的描述更深,速度是矢量,速度的改变必然有加速度,而加速度又有加速和减速之分。又如摩擦力,高中仅其方向的判定就是一个难点,“摩擦力总是阻碍物体的相对运动或相对运动趋势 ”。首先要分清是相对哪个面,其次要用运动学的知识来判断相对运动?或相对运动趋势的方向,然后才能找出力的方向,有一些问题中还要用物体平衡的知识能才得出结论。例如:在水平面上有一物体B,其上有一物体A,今用一水平力F拉B物体,它们刚好在水平面上做匀速直线运动,求A和B之间的摩擦力。分析:A物体作匀速直线运动?受力平衡),在水平方向不受力的作用,故A和B之间的摩擦力为零。
J. 关于虚拟内存中页目录与页表在物理内存中加载的问题
我对Linux操作系统的具体情况不是很熟,回答仅供参考。
首先,物理内存无所谓内核区用户区,所有地址都一样。虚拟的地址空间才分内核区用户区。
处理器通过查看页目录和页表,把虚拟地址换算成物理地址。用户区与内核区的两个不同的虚拟地址对应同一个物理地址也不要紧。
内核区与用户区的真正区别在于普通进程能不能访问该区域中的地址。
在正常情况下,操作系统肯定会把页目录和页表保护起来,可以把它们看作存放在内核区的东西。
编写操作系统时,页目录确实可以放在物理内存中的任何地方(当然偏移必须是1000h的倍数),只要把偏移量填进CR3的高20位就可以了。
Linux内核的页目录放在物理地址0h处,页表紧随其后。0.11版Linux中,所有用户进程和内核用的都是这张页目录。切换进程时,改改页目录项就行了。新版的Linux内核我不太了解,抱歉……
每个页目录项有4字节,高20位储存页表的物理地址,低12位储存页表的属性。
一张页表4KB,这4KB必须是连续的。但是各张页表之间不必连续。Linux创建新进程时,仅仅调用了get_free_page找到一页空内存,把进程页表塞进去而已。
页表不能被普通进程直接访问。访问用户区虚拟地址是看不到进程页表的。
内核的页表前面提到过。它就在内核页目录的后面,物理地址为1000h,虚拟地址为C0001000h。访问用户区的虚拟地址不会看到它。
个人不大擅长表述,恐怕解释得不是很清楚。欢迎追问。