免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2260 | 回复: 6
打印 上一主题 下一主题

[内存管理] 对多任务切换涉及到的内存部分的困惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-13 12:32 |只看该作者 |倒序浏览
windows系统中内核部分占据了高2GB的地址空间,在进程切换的时候是不是只切换低2GB地址空间(3GB模式先忽略)。所有每个进程都感觉独占4GB确切

的说应该是独占2GB。这个高2GB地址空间是供内核使用的,那就是说内核使用的也是虚拟地址?那内核是不是也有页表呢?进程切换的时候是内核负

责切换CR3导致切换到相应的页表,那内核如果有页表是谁负责切换CR3呢?windows中所有进程的页表是常驻物理内存中还是在2GB内核空间中然后需

要的时候换页到物理内存?

windows操作系统中运行程序是不是就把程序映射到4GB中的低2GB然后修改eip寄存器跳转到程序映射到地址处开始执行的?

本人对汇编层面的程序执行比较了解,然后在往上面一层操作系统中多任务切换涉及的技术不明白,还请高人解答下或者推荐一些能解答疑惑的书籍。

论坛徽章:
0
2 [报告]
发表于 2013-03-13 13:32 |只看该作者
LZ为什么一直说Windows?
不考虑操作系统,32位CPU在运行的时候都是又4GB的线性地址空间。操作系统只不过是将其分割了而已。运行的时候进程有3GB的用户空间,内核占据4GB上的1GB。
所有进程运行时3-4GB的内核空间映射都是一样的,所以页表应该也是共享的。
程序经过编译连接,所有的地址都在3GB之下。
新手的一点看法。

论坛徽章:
0
3 [报告]
发表于 2013-03-13 13:48 |只看该作者
pangxiezhou 发表于 2013-03-13 13:32
LZ为什么一直说Windows?
不考虑操作系统,32位CPU在运行的时候都是又4GB的线性地址空间。操作系统只不过是 ...



我说的也是4GB地址空间中的操作系统的1GB或者是2GB不变只切换剩下的,只是这个页表的问题

论坛徽章:
0
4 [报告]
发表于 2013-03-14 17:51 |只看该作者
回复 3# cnppk


    每个进程只有一张页目录表,不过3G开始的部分的映射是相同的

论坛徽章:
0
5 [报告]
发表于 2013-03-15 08:51 |只看该作者
aweii 发表于 2013-03-14 17:51
回复 3# cnppk




没有页表?

论坛徽章:
0
6 [报告]
发表于 2013-03-15 09:27 |只看该作者
回复 5# cnppk


    应该是4MB的页吧

论坛徽章:
0
7 [报告]
发表于 2013-03-16 11:37 |只看该作者
本帖最后由 garyv 于 2013-03-16 11:38 编辑

二级页表映射机制

第一级页表(即页目录表)占用的4KB通常不会变化 ==> 页目录表的physical page number也就不会变 ==> 写入CR3的内容也就不会变化(ring0 ring3公用)

楼主有空自己写个映射表玩玩就知道了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP