没有合适的资源?快使用搜索试试~ 我知道了~
首页操作系统入门:第1章练习与解答
在《操作系统精髓与设计原理·第五版》一书中,第一章计算机系统概述包含了对计算机基本概念和工作原理的介绍。本节提供了两个练习题,涉及指令执行流程和内存管理。 第一个问题是关于一个理想机器的I/O操作,其中定义了两条特殊的I/O指令。程序要求从设备5加载AC,然后将AC的内容与存储器单元940相加,最后将结果保存到设备6。给出的答案详细列出了每个步骤的操作过程,包括如何将设备地址、存储器地址以及数据值传输到不同的寄存器,如指令寄存器(IR)和地址寄存器(MAR)。通过这些步骤,展示了处理器如何与外部设备交互以及执行指令的过程。 第二个练习题是关于程序执行过程的更深入描述,要求使用MAR和MBR(内存缓冲寄存器)来扩展6步骤的描述。这部分内容涉及了指令周期的不同阶段,如指令的读取、解码、数据的获取和处理,以及程序计数器(PC)的更新,强调了内存管理在执行过程中的关键作用。 第三个问题探讨了微处理器地址空间的问题。当微处理器有16位地址和数据总线时,它可以直接访问的存储器大小取决于连接的存储器宽度。如果是16位存储器,最大可访问的地址空间为2^16个字节。而如果是8位存储器,由于数据总线限制,处理器只能访问单个8位存储单元,无法直接访问整个8位存储器。 这些练习题旨在帮助读者理解操作系统底层的工作原理,特别是内存管理、指令执行和I/O操作,这些都是操作系统设计和实现的基础。通过解答这些问题,学习者可以加深对计算机硬件和操作系统交互的理解,有助于提升对操作系统设计的理解和实践能力。
资源详情
资源推荐
{ int count;
for(count =1;count <=n;count ++)
{tally++;
}
}
void main()
{
tally =0;
parbegin(total(),total();
write(tally);
}
答:a.随意一看,tally 值的范围好像是落在[50,100]这个区间里,因为当没有互斥时可以从 0 直接增加到 50.
这一基本论点是当并发的运行这两进程时,我们不可能得到一个比连续执行单一某进程所得 tally 值还低的
一个最终 tally 值.但是考虑下面由这两进程按交替顺序执行载入,增加,存储的情况,同时变更这个共享变量
的取值:
1.进程 A 载入 tally 值,tally 值加到 1,在此时失去处理器(它已经增加寄存器的值到 1,但是还没有存储这
个值).
2.进程 B 载入 tally 值(仍然是 0),然后运行完成 49 次增加操作,在它已经将 49 这个值存储给共享变量
tally 后,失去处理器控制权.
3.进程 A 重新获得处理器控制权去完成它的第一次存储操作(用 1 去代替先前的 49 这个 tally 值),此时
被迫立即放弃处理器.
4.进程 B 重新开始,将 1(当前的 tally 值)载入到它自己的寄存器中,但此时被迫放弃处理器(注意这是 B
的最后一次载入).
5.进程 A 被重新安排开始,但这次没有被中断,直到运行完成它剩余的 49 次载入,增加和存储操作,结果
是此时 tally 值已经是 50.
6.进程 B 在它终止前完成仅有的最后一次增加和存储操作.它的寄存器值增至 2,同时存储这个值做为这
个共享变量的最终结果.
一些认为会出现低于 2 这个值的结果,这种情况不会出现.这样 tally 值的正确范围是[2,100].
b.对一般有 N 个进程的情况下,tally 值的最终范围是[2,N*50],因为对其他所有进程来说,从最初开始运行
到在第五步完成.但最后都被进程 B 破坏掉它们的最终结果.
5.4.忙等待是否总是比阻塞等待效率低(根据处理器的使用时间)?请解释。
答:就一般情况来说是对的,因为忙等待消耗无用的指令周期.然而,有一种特殊情况,当进程执行到程序的
某一点处,在此处要等待直到条件满足,而正好条件已满足,此时忙等待会立即有结果,然而阻塞等待会消耗
操作系统资源在换出与换入进程上.
5.5 考虑下面的程序
boolean blocked[2];
int rurn;
void P(int id)
{
While (true)
{
While(turn!=id);
{
While(blocked[1-!id]
/*do nothing*/;
Turn =id;
10
}
}
Void main ()
{
Blocked[0]=false;
Blocked[1]=false;
Turn=0;
Parbegin(P(0),P(1));
}
这是【HYMA66】中提出的解决互斥问题的一种方法。请举出证明该方法不正确的一个反例。
答:考虑这种情况:此时 turn=0,进程 P(1)使布尔变量 blocked[1]的值为 true,在这时发现布尔变量 blocked[0]
的值为 false,然后 P(0)会将 true 值赋予 blocked[0]
,此时 turn=0,P(0)进入临界区,P(1)在将 1 赋值给 turn 后,也进入了临界区.
5.6 解决互斥的另一种软件方法是 lamport 的面包店(bakery)算法,之所以起这个名字,是因为它的思想
来自于面包店或其他商店中,每个顾客在到达时都得到一个有编号的票,并按票号依次得到服务,算法
如下:
Boolean choosing[n];
Int number[n];
While (true)
{
Choosing[i]=true;
Number[i]=1+getmax(number[],n);
Choosing[i]=false;
For(int j=0;j<n;j++)
{
While (choosing[j])
{}
While ((number[j]!=0)&&(number[j],j)<(number[i],i)
{}
}
/*critical section*/
Number[i]=0;
/*remainder*/;
}
数组 choosing 和 number 分别被初始化成 false 和 0,每个数组的第 i 个元素可以由进程 i 读或写,但其他进
程只能读。符号(a,b)<(c,d)被定义成
(a,c)或(a=c 且 b<d)
A. 用文字描述这个算法。
B. 说明这个算法避免了死锁。
C. 说明它实施了互斥。
答:a.当一个进程希望进入临界区时,它被分配一个票号.分配的票号是通过在目前那些等待进入临界区的
进程所持票号和已经在临界区的进程所持票号比较,所得最大票号再加 1 得到的.有最小票号的进程有最高
的优先级进入临界区.当有多个进程拥有同样的票号时,拥有最小数字号进入临界区.当一个进程退出临界区
时,重新设置它的票号为 0.
b.如果每个进程被分配唯一的一个进程号,那么总会有一个唯一的,严格的进程顺序.因此,死锁可以避免.
c.为了说明互斥,我们首先需要证明下面的定理:如果 Pi 在它的临界区,Pk 已经计算出来它的 number[k],
11
剩余54页未读,继续阅读
caihui1002
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AirKiss技术详解:无线传递信息与智能家居连接
- Hibernate主键生成策略详解
- 操作系统实验:位示图法管理磁盘空闲空间
- JSON详解:数据交换的主流格式
- Win7安装Ubuntu双系统详细指南
- FPGA内部结构与工作原理探索
- 信用评分模型解析:WOE、IV与ROC
- 使用LVS+Keepalived构建高可用负载均衡集群
- 微信小程序驱动餐饮与服装业创新转型:便捷管理与低成本优势
- 机器学习入门指南:从基础到进阶
- 解决Win7 IIS配置错误500.22与0x80070032
- SQL-DFS:优化HDFS小文件存储的解决方案
- Hadoop、Hbase、Spark环境部署与主机配置详解
- Kisso:加密会话Cookie实现的单点登录SSO
- OpenCV读取与拼接多幅图像教程
- QT实战:轻松生成与解析JSON数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功