找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 4546|回复: 20

x86汇编语言第二版第19章好像有个错误?

[复制链接]

1

主题

1

回帖

17

积分

新手上路

积分
17
发表于 2024-2-20 12:45:10 | 显示全部楼层 |阅读模式
老师好,在第19章,创建用户任务的最后一步是:将内核的页目录表复制一份作为用户任务的页目录表。

但是,我感觉后面缺少一个步骤,就是把复制后的页目录表的最后一项改为用户任务的页目录表的物理地址,这是一个错误嘛?

416

主题

315

回帖

3288

积分

管理员

积分
3288
发表于 2024-2-20 13:14:03 | 显示全部楼层
难得你如此细心,非常赞赏。
你说得对,必须把复制后的页目录表的最后一项改为用户任务的页目录表的物理地址。这个步骤是有的,是在例程create_copy_cur_pdir里完成的。
具体是在源文件c19_core.asm里的第361~362行。

1

主题

1

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2024-2-20 17:04:35 | 显示全部楼层
谢谢老师的答复。春节前看到了第18章,歇了一段时间没看,现在接着看第19章已经迷糊了,看不下去了

416

主题

315

回帖

3288

积分

管理员

积分
3288
发表于 2024-2-20 18:31:02 | 显示全部楼层
wum 发表于 2024-2-20 17:04
谢谢老师的答复。春节前看到了第18章,歇了一段时间没看,现在接着看第19章已经迷糊了,看不下去了 ...

没关系,你可以歇歇先。
x86我正在重制,精简了很多,到时候你可以入手至尊会员轻松观看。

3

主题

33

回帖

381

积分

至尊会员

积分
381

至尊会员

发表于 2024-3-12 22:59:34 | 显示全部楼层
站长 发表于 2024-2-20 13:14
难得你如此细心,非常赞赏。
你说得对,必须把复制后的页目录表的最后一项改为用户任务的页目录表的物理地 ...

第19章 第408页第四行的当前任务(内核)页目录表线性地址0xFFFFFF0,这个描述是不是笔误了?
为了把内核页目录表内容复制给用户任务页目录表(0xFFFFE000),应该用0xFFFFF000的线性地址才对吧(我看源代码366行也是这个线性地址)

另外,楼主的问题里我理解用户任务页目录表是从内核任务页目录表复制过来的,用户页目录表最后一个位移0xFFC中还是存储着物理地址20000(指向了内核页目录表),但是这个位移在用户页目录表里实际上没有用处了,我这么理解对吗?

416

主题

315

回帖

3288

积分

管理员

积分
3288
发表于 2024-3-12 23:12:41 | 显示全部楼层
cindeequan 发表于 2024-3-12 22:59
第19章 第408页第四行的当前任务(内核)页目录表线性地址0xFFFFFF0,这个描述是不是笔误了?
为了把内核 ...

那个要以源码为准。
第二个问题,,因为它指向内核的页目录,不改的话,修改当前任务页目录的话会定位到内核的页目录。

3

主题

33

回帖

381

积分

至尊会员

积分
381

至尊会员

发表于 2024-3-12 23:38:06 | 显示全部楼层
站长 发表于 2024-3-12 23:12
那个要以源码为准。
第二个问题,,因为它指向内核的页目录,不改的话,修改当前任务页目录的话会定位到 ...

按照书中的例程,用户任务页目录表分配完后没有修改过,所以FFC的偏移不改也能运行且不出问题对吧?
至于修改,我看源码里361-362里是在当前任务(内核)页目录表的FF8偏移项里登记新分配页(用户页目录表)的物理地址,后面好像也没看到有修改用户任务页目录表FFC偏移项内容的代码。。。

416

主题

315

回帖

3288

积分

管理员

积分
3288
发表于 2024-3-13 10:29:37 | 显示全部楼层
cindeequan 发表于 2024-3-12 23:38
按照书中的例程,用户任务页目录表分配完后没有修改过,所以FFC的偏移不改也能运行且不出问题对吧?
至于 ...

涉及到内存分配,是一定会修改的。因为内存分配要求修改分页系统表项,这就要用到页目录表的最后一项来定位页目录表自身。

3

主题

33

回帖

381

积分

至尊会员

积分
381

至尊会员

发表于 2024-3-13 10:32:17 | 显示全部楼层
站长 发表于 2024-3-13 10:29
涉及到内存分配,是一定会修改的。因为内存分配要求修改分页系统表项,这就要用到页目录表的最后一项来定 ...

那core19里源代码是在哪里修改了用户任务页目录表的最后一项?

416

主题

315

回帖

3288

积分

管理员

积分
3288
发表于 2024-3-13 11:14:59 | 显示全部楼层
cindeequan 发表于 2024-3-13 10:32
那core19里源代码是在哪里修改了用户任务页目录表的最后一项?

是在例程create_copy_cur_pdir里完成的。
具体是在源文件c19_core.asm里的第361~362行。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2024-12-22 09:22 , Processed in 0.239761 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表