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

第20章习题

[复制链接]

620

主题

336

回帖

1057

积分

管理员

积分
1057
发表于 2026-3-17 19:17:24 | 显示全部楼层 |阅读模式
第20章习题

1,在本章的多任务系统中只用了一个TSS,任务切换时,用新任务的0特权级栈指针替换这个TSS的ESP0域,而不是使用一个固定值。请用一个具体的情景说明,如果不这样做会有什么问题。
答:如果使用一个固定值(固定的内核栈),那么,请想象一下:从任务A进入内核,在内核中操作时需要在固定的内核栈上压入了一些数据。在操作未完成且栈中数据未出栈时,发生任务切换,从内核中切换到任务B。任务B也进入内核,也因为需要,在固定的内核栈上压入一些数据。在操作未完成且栈中数据未出栈时,发生任务切换,又切换回任务A。此时,任务A对固定的内核栈的视图还是在切换到任务B之前,任务A想要从栈中弹出原先压入的数据就不可能了。

2,在本章中,任务切换是借助于iretd指令发起的。请想一想、试一试,看还有没有别的办法可以用来执行软件任务切换。
答:在例程resume_task_execute中,实际的任务切换是用iretd指令发起的,但这与中断和中断返回无关,只是因为我们在栈中构造了iretd指令需要的内容。如果在栈中构造了retf指令需要的内容,理论上也可以使用retf指令来发起任务切换。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-3-30 18:22 , Processed in 0.294850 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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