免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: _nosay
打印 上一主题 下一主题

[内核入门] 3-4G虚拟空间? [复制链接]

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
11 [报告]
发表于 2017-05-25 10:09 |只看该作者
这个页面是有权限保护的啊,保护模式最基本的功能了

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
12 [报告]
发表于 2017-05-25 10:56 |只看该作者
回复 11# mordorwww

那可以具体说说不?

论坛徽章:
2
综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:00
13 [报告]
发表于 2017-05-25 11:16 |只看该作者
回复 2# amarant

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
14 [报告]
发表于 2017-05-26 08:34 |只看该作者
本帖最后由 mordorwww 于 2017-05-26 08:36 编辑
_nosay 发表于 2017-05-25 10:56
回复 11# mordorwww

那可以具体说说不?

ULK3.0 上的描述是否能解你惑:

The entries of Page Directories and Page Tables have the same structure. Each entry includes the following fields:

Read/Write flag
Contains the access right (Read/Write or Read) of the page or of the Page Table (see the section  later in this chapter).

User/Supervisor flag
Contains the privilege level required to access the page or Page Table (see the later section).

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
15 [报告]
发表于 2017-05-26 08:46 |只看该作者
回复 14# mordorwww

嗯,正是User/Supervisor flag只有一位我才疑惑,CPL是2位。

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
16 [报告]
发表于 2017-05-26 09:21 |只看该作者
_nosay 发表于 2017-05-26 08:46
回复 14# mordorwww

嗯,正是User/Supervisor flag只有一位我才疑惑,CPL是2位。

能解决主楼的这个问题吧:

用户态不就可以直接用3-4G的虚拟地址?

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
17 [报告]
发表于 2017-05-26 10:53 |只看该作者
回复 8# Kernel_Lover

蟹蟹你,你说的将从内核页表复制到进程页表,我查资料了解了一下:有一部分是创建进程时就复制的,即图中PAGE_OFFSET~high_memory这部分,VAMALLOC_START~VMALLOC_END这部分,任何一个进程在内核态分配时,不可能马上更新所有其它进程的页表,只有等进程真正访问这个范围的虚拟地址时,在缺页异常处理函数中,确定这块空间已建立映射时,向进程页表复制。我疑问的是,PAGE_OFFSET~high_memory,以及VMALLOC_START~VMALLOC_END中已复制到某个进程页表的部分,如果该进程在用户态访问这些虚拟地址,由于映射关系已经有了,所以不会进入缺页异常,也就是说没有办法通过软件层的保护限制这个行为,那肯定是在硬件上被限制了,我查了一下目录项、页表项中描述页属性的部分,唯一感觉和这有关系的,只有u_s位,但只有1bit,而CPL有2位,按道理也应该像段描述符那样有个2bits的DPL才对,所以就怀疑u_s是不是这个作用。

http://blog.chinaunix.net/uid-20844267-id-5732973.html

http://blog.csdn.net/hanchaoman/article/details/6942138
http://blog.csdn.net/hanchaoman/article/details/6942140

论坛徽章:
0
18 [报告]
发表于 2017-05-26 13:21 |只看该作者
回复 17# _nosay

映射是有了,但是当进程处于用户态,cs就是指向用户态的段选择符,其中特权级为3,如果访问内核空间,会将进行特权级检查,明显内核空间的cs中的特权级为1,特权级高,就会出现访问失败(因为特权级低的不能访问特权级高的),你应该对保护模式有些不理解,可以多看看保护模式方面的内容,推荐一本书《x86汇编语言:从实模式到保护模式》

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
19 [报告]
发表于 2017-05-26 13:47 |只看该作者
回复 18# Kernel_Lover

不妨假设用户态访问3.5G这个虚拟地址值:
1. 用户态时,CPL为3,但数据段寄存器值为__USER_DS,指向的段描述符DPL也为3,所以通过段式映射是没问题的。2. __USER_DS指向的段描述符与__KERNEL_DS指向的段描述符,都描述的是0~4G段空间,所以得到3.5G线性地址也是没问题的。
3. 所以,阻碍应该是在进行页式映射,将3.5G线性地址映射为物理地址的过程中才对,不在段式映射过程中。

题外话:
我之前也想过,Linux只为为了能应付过段式映射,用1个段描述符,DPL设置为3,用户态、内核态不就都能通过权限检查了吗,为什么还要分__USER_DS和__KERNEL_DS对应的2个段描述符?后来想想,权限对比不光只用在段式映射过程中,穿过门从用户态向内核态切换的时候,目标函数在代码段中,要根据对应代码段描述符中的DPL,设置CPL。

论坛徽章:
0
20 [报告]
发表于 2017-05-26 21:12 |只看该作者
回复 19# _nosay

哦,我理解错了,应该是当页表项的USER/SUPERVVISOR标志位是0时,只有cpl为1(处于内核态),才能访问该页表项所对应的物理内存页,所以需要设置内核页表项的时候,USER/SUPERVVISOR标志位应该置为0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP