免费注册 查看新帖 |

Chinaunix

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

linux 0.11缺页中断有BUG么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-22 09:42 |只看该作者 |倒序浏览
本人在看linux 0.11 内核代码mm/page.s的时候,发现iret 执行后返回的就是中断下一条指令,而不是重新执行,就比如
(假设 只有16M内存,那么往64M写一个字节的时候,是这样 *(u8*)(0x4000000) = 0xFF,但是将0x4000000内存单元读出来却不是0xff,需要执行 *(u8*)(0x4000000) = 0xFF两次,这是个早期的BUG么?还是我思考不对?

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
2 [报告]
发表于 2012-04-23 13:27 |只看该作者
页错误是fault,不是trap,lz说的这种情况大概不会发生吧。

论坛徽章:
0
3 [报告]
发表于 2012-04-24 13:24 |只看该作者
但是我做实验确实是这样的!读出来不是0xFF

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
4 [报告]
发表于 2012-04-24 15:21 |只看该作者
0.11中进程最大可用虚拟内存为64M,往0x4000000上写不会发生保护错误吗?试试其他地址。我在Bochs上试了试0x3000000(>16M),可以读出0xff.

论坛徽章:
0
5 [报告]
发表于 2012-04-24 18:40 |只看该作者
linux 0.11的page_fault 是trap_gate。我在内核往64M写内存单元,要写两次才能读出是0XFF

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
6 [报告]
发表于 2012-04-24 19:28 |只看该作者
trap_gate和trap不是一回事。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
7 [报告]
发表于 2012-04-24 20:54 |只看该作者
推什么IP进栈是硬件控制的呀。

论坛徽章:
0
8 [报告]
发表于 2012-04-25 12:33 |只看该作者
明白了,不管什么gate 全部是按照eip 来的,我知道根本所在了,我打印栈的内容确实是 赋值之前的,但是还是没有重新执行,我得找找错误,谢谢各位了!

论坛徽章:
0
9 [报告]
发表于 2012-04-25 15:04 |只看该作者
真的郁闷了,在GDB调试下,竟然出现这个结果 iret 之前的eip 是正确的(确实是指向赋值之前,也就是说正常返回的话,那么赋值肯定会重新执行以便,那么读出来肯定是0XFF),但是iret 之后却是下一条指令(赋值的下一条语句),真的是无语了,看贴图  IRET 之前的 ,IRET之后的

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
10 [报告]
发表于 2012-04-25 16:54 |只看该作者
0.11内核代码段、内核数据段都是16M大小,你是怎么往64M上写的,改了源代码了吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP