免费注册 查看新帖 |

Chinaunix

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

[内存管理] 关于内存分页越学越不懂了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-03 15:09 |只看该作者 |倒序浏览
        大家好,现在在学习内存管理这块,感觉刚开始有点明白,后来越学越糊涂了,主要就是感觉学的东西挺多,挺杂,但是串联不起来。 我知道应该是,逻辑地址---线性地址----物理地址,这样的顺序,现在有几个问题请教一下:

1.   平时区分的用户态和内核态的地址指的是在上边哪个地址空间?
2.   当某个程序开始执行时,操作系统如何知道该把他放到内存里的哪个位置?与这个目标程序中的.text等有什么关系,我知道好像目标文件中有一个标明地址的段,好像用readelf或objdump可以查看,我当时查看到了,现在有点忘了。。。。
3.   段描述表、页目录、页表都是在物理内存中对吗?
4.   书上说,内存中的各进程的代码段和数据段都是放在一起的,那每个进程的数据都是分散在物理内存中的,可以这样理解吗?
5.   书上说,CPU将进程的逻辑地址经过分段后形成了线性地址,32位是4G空间,可以认为每个进程都相当于独占这个4G空间,这句话怎么理解比较好?


以上的问题可能问的有点不太明白,但是关于内存这块,我看了三遍,还是不太懂,请大家帮我解答一下呗,谢谢了。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
2 [报告]
发表于 2014-07-03 16:30 |只看该作者
1.   平时区分的用户态和内核态的地址指的是在上边哪个地址空间?
--- 线性地址空间
2.   当某个程序开始执行时,操作系统如何知道该把他放到内存里的哪个位置?与这个目标程序中的.text等有什么关系,我知道好像目标文件中有一个标明地址的段,好像用readelf或objdump可以查看,我当时查看到了,现在有点忘了。。。。
--- 物理内存是随机分配的,虚拟(线性)地址空间的分布跟ELF文件格式有关,线性地址跟物理地址间通过页表映射。
3.   段描述表、页目录、页表都是在物理内存中对吗?
---对的
4.   书上说,内存中的各进程的代码段和数据段都是放在一起的,那每个进程的数据都是分散在物理内存中的,可以这样理解吗?
---没大看明白~~
5.   书上说,CPU将进程的逻辑地址经过分段后形成了线性地址,32位是4G空间,可以认为每个进程都相当于独占这个4G空间,这句话怎么理解比较好?
---线性地址32位,2的32次方,最大寻址空间就是4G,每个进程的线性地址空间都是独立的。不知哪里不能理解?呵呵

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
3 [报告]
发表于 2014-07-03 19:01 |只看该作者
1 2 3 同二楼
4.   书上说,内存中的各进程的代码段和数据段都是放在一起的,那每个进程的数据都是分散在物理内存中的,可以这样理解吗?
      每个进程的数据指的是什么
5.   书上说,CPU将进程的逻辑地址经过分段后形成了线性地址,32位是4G空间,可以认为每个进程都相当于独占这个4G空间,这句话怎么理解比较好?
这句话意思是逻辑地址经过段映射之后形成列线性地址,在4G空间中,前3G是进程独占的,3G-4G是所有进程共享的
回复 1# mousexqshe


   

论坛徽章:
0
4 [报告]
发表于 2014-07-03 19:42 |只看该作者
回复 2# humjb_1983

那就是说进程只能访问自己的0---3G的线性地址空间,这个地址是用户态地址,而3G------4G的地址空间是内核态地址,并且每个进程共享这个地址空间对吗?
就是说不同的进程间的线性地址和逻辑地址可以是相同的,因为他们在不同的段中,我们程序中用到的*p是逻辑地址,其实是在该段的偏移量,可以这样理解吗?
谢谢

   

论坛徽章:
0
5 [报告]
发表于 2014-07-03 19:42 |只看该作者
回复 3# super皮波

那就是说进程只能访问自己的0---3G的线性地址空间,这个地址是用户态地址,而3G------4G的地址空间是内核态地址,并且每个进程共享这个地址空间对吗?
就是说不同的进程间的线性地址和逻辑地址可以是相同的,因为他们在不同的段中,我们程序中用到的*p是逻辑地址,其实是在该段的偏移量,可以这样理解吗?
谢谢


   

论坛徽章:
3
双鱼座
日期:2013-09-04 19:47:39天蝎座
日期:2013-12-11 20:30:532015年亚洲杯之澳大利亚
日期:2015-04-20 00:28:02
6 [报告]
发表于 2014-07-03 22:18 |只看该作者
回复 5# mousexqshe


    参考Intel Architecture Software Developer's Manual Volume 3A 关于段地址和虚拟地址的转换,虚拟地址和物理地址的转换

论坛徽章:
0
7 [报告]
发表于 2014-07-03 23:09 |只看该作者
回复 4# mousexqshe


    不同的进程的线性地址和逻辑地址可以完全相同,当然段也相同了!进程间是相互隔离的,x86上是通过分页部件实现的,受kernel管理。

    LZ还是个学生吧?没有其他意思,纯问问。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
8 [报告]
发表于 2014-07-04 08:57 |只看该作者
mousexqshe 发表于 2014-07-03 19:42
回复 2# humjb_1983

那就是说进程只能访问自己的0---3G的线性地址空间,这个地址是用户态地址,而3G--- ...

1、这样理解更好:每个进程都有属于自己的独立的线性地址空间:0-4G,其中0-3G是用户态,3G-4G是内核态,不能说3G-4G进程就不能访问了,因为内核态其实也是在进程上下文中(中断除外)。内核态地址空间3G-4G是所有进程共享的。
2、Linux中并没有实际使用分段,每个段基址都是一样的0,所以可以理解为:线性地址=逻辑地址中的偏移量,但线性地址和逻辑地址概念还是不同的。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP