预计阅读本页时间:-
习题
1.HAL可以跟踪从1601年开始的所有时间。举一个例子,说明这项功能的用途。
2.在11.3.2节,我们介绍了在多线程应用程序中一个线程关闭了句柄而另一个线程仍然在使用它们所造成的问题。解决此问题的一种可能性是插入序列域。请问该方法是如何起作用的?需要对系统做哪些修改?
3.Win32系统没有信号功能。如果要引入此功能,我们可以将信号设置为进程所有,线程所有,两者都有或者两者都没有。试着提出一项建议,并解释为什么。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
4.另一种使用DLL的方式是静态地将每个程序链接到它实际调用到那些库函数,既不多也不少。在客户端机器或者服务器机器上引入此方法,哪个更合理?
5.在Windows中线程拥有独立的用户态栈和内核态栈的原因是哪些?
6.TLB对性能有重大的影响。为了提高TLB的有效性,Windows使用了大小为4MB的页,这是什么?
7.在一个执行体对象上可定义的不同操作的数量有没有限制?如果有,这个限制从何而来?如果没有,请说明为什么。
8.Win32 API的调用WaitForMultipleObjects以一组同步对象的句柄为参数,使得线程被这组同步对象阻塞。一旦它们中的任何一个收到信号,调用者线程就会被释放。这组同步对象是否可以包含两个信号灯、一个互斥体和一个临界区?理由是什么?提示:这不是一个恶作剧的问题,但确实有必要认真考虑一番。
9.给出三个可能会终止线程的原因。
10.如11.4节所述,有一个特殊的句柄表用于为进程和线程分配ID。句柄表的算法通常是分配第一个可用的句柄(按照后进先出的顺序维护空闲链表)。在最新发布的Windows版本中,该算法变成了ID表总是以先进先出的顺序跟踪空闲链表。使用后进先出顺序分配进程线ID有什么潜在的问题?为什么.UX操作系统没有这个问题?
11.假设时间片配额被设置为20毫秒,当前优先级为24的线程在配额开始的时候刚开始执行。突然一个I/O操作完成了并且一个优先级为28的线程变成就绪状态。这个线程需要等待多久才可以使用CPU?
12.在Windows Vista中,当前的优先级总是大于或等于基本的优先级。是否在某些情况下当前的优先级低于基本的优先级也是有意义的?若有,请举例。否则请说明原因。
13.在Windows中很容易实现一些设施将运行在内核中的线程临时依附到其他进程的地址空间。为什么在用户态却很难实现?这样做有何目的?
14.即使有很多空闲的可用内存而且内存管理器也不需要调整工作集,分页系统仍然会经常对磁盘进行写操作。为什么?
15.为什么用来访问进程页目录和页表的物理页面的自身映射数据总是占用同一片4MB的内核虚拟地址空间(在x86上)?
16.如果保留了一段虚拟地址空间但是没有提交它,你认为系统会为其创建一个VAD吗?请证明你的答案。
17.在图11-36中,哪些转移是由策略决定的,而不是由系统事件(例如,一个进程退出并释放其页面)所强迫的转移?
18.假设一个页面被共享并且同时存在于两个工作集中。如果它从一个工作集移出,在图11-36中它将会到哪里去?当它从第二个工作集移出时会发生什么?
19.当进程取消对一个页面的映射时,干净的页会进行图11-36中的转移(5),那脏的栈页怎样处理呢?为什么脏的栈页面被取消映射时不会被转移到已修改列表中呢?
20.假设一个代表某种类型互斥锁(比如互斥对象)的分发对象被标记为使用通知事件而不是同步事件来声明锁被释放。为什么这样是不好的?你的回答在多大程度上依赖于锁被持有的时间、时间片配额的长度和系统是否为多处理器的?
21.一个文件存在如下映射。请给出MFT的行串。

22.考虑图11-43中的MFT记录。假设该文件增长了并且在文件的末尾添加了第10个块。新块的序号是66。现在MFT记录会是什么样子?
23.在图11-46b中,最先的两个行串的长度都为8个块。你觉得它们长度相等只是偶然的,还是跟压缩的工作方式有关?请解释理由。
24.假如您想创建Windows Vista的精简版。在图11-47中可以取消哪些字段而不削弱系统的安全性?
25.由许多程序(Web浏览器、Office、COM服务器)使用的一个扩展模型是对程序所包含的DLL添加钩子函数来扩展其底层功能。只要在加载DLL前仔细模拟客户的身份,该模型对基于RPC的服务来说就是合理的,是这样的吗?为什么不是?
26.在NUMA机器上,不管何时Windows内存管理器需要分配物理内存来处理页面失效,它总尝试从当前线程的理想的处理器的NUMA节点中获取。为什么?如果线程正运行在其他处理器上呢?
27.系统崩溃时,应用程序可以轻易地从基于卷的影子副本的备份中恢复,而不是从磁盘状态中恢复。请给出几个这样的例子。
28.在某些情况下为了满足安全性的要求需要为进程提供全零的页面,在11.9节中向进程的堆提供内存就是这样的一种情况。请给出一个或者多个其他需要对页面清零的虚拟内存操作。
29.在当前所有的Windows发行版本中,regedit命令可用于导出部分或全部注册表到一个文本文件。在一次工作会话中保存注册表若干次,看看有什么变化。如果您能够在Windows中安装软件或硬件,请找出安装或卸载程序或设备时注册表有何变化。
30.写一个UNIX程序,模拟用多个流来写一个NTFS文件。它应能接受一个或多个文件作为参数,并创建一个输出文件,该文件的一个流包含所有参数的属性,其他的流包含每个参数的内容。然后再写一个程序来报告这些属性和流并提取出所有的组成成分。