【操作系统导论】第26章课后习题解答

前言

内容仅作记录,解答有参考别人的地方,请谨慎参考

26.1

题目描述

在这里插入图片描述

分析及解答

使用cat loop.s查看程序代码:
在这里插入图片描述

这段代码首先将寄存器%dx中的值减1,test指令表示将寄存器%dx中的值与0做与运算,jgte表示“大于等于”则跳转。这里的halt指令表示停止这个线程。
在这里插入图片描述

输入指令:./x86.py -p loop.s -t 1 -i 100 -R dx运行程序
在这里插入图片描述

该进程只有一个线程,由于未设置寄存器%dx值初始值,这里默认为0,所以dx的值最开始为0,减1之后变为-1,程序停止。

输入指令:./x86.py -p loop.s -t 1 -i 100 -R dx -c运行程序查看结果
在这里插入图片描述

可以看到寄存器%dx一开始的值为0,后来变为了-1,线程停止。

26.2

题目描述

在这里插入图片描述

分析及解答

由于这里设置操作系统每100条指令进行一次中断,程序dx初始值设置为3,将会在dx减到-1时跳出循环,这个过程将会在操作系统未中断之前完成,即两个线程之间不影响计算,不存在竞争条件,之后再执行另一个线程。
在这里插入图片描述

输入指令:./x86.py -p loop.s -t 2 -i 100 -R dx -a dx=3,dx=3 -c运行程序查看结果:
在这里插入图片描述

可以看到运行结果与分析一致。由于程序在操作系统中断之前完成,所以多个线程的存在没有影响计算,代码没有竞争条件。

26.3

题目描述

在这里插入图片描述

分析及解答

输入指令:./x86.py -p loop.s -t 2 -i 3 -R dx -a dx=3,dx=3 -r -c -s 1查看种子为1时的结果
在这里插入图片描述
输入指令:./x86.py -p loop.s -t 2 -i 3 -R dx -a dx=3,dx=3 -r -c -s 2查看种子为2时的结果
在这里插入图片描述
输入指令:./x86.py -p loop.s -t 2 -i 3 -R dx -a dx=3,dx=3 -r -c -s 3查看种子为3时的结果
在这里插入图片描述

从三个不同种子下的程序运行结果可以看出,当操作系统的中断频率变得小(这里指发生中断之前不足以使一个线程运行完)且频繁,将会改变这个程序的行为,在发生中断的时候,操作系统将会保存当前正在执行的线程A的状态,同时恢复线程B的状态转而去执行线程B,在线程B未执行完之前发生中断同理。

26.4

题目描述

在这里插入图片描述

分析及解答

输入指令:cat looping-race-nolock.s查看程序代码:
在这里插入图片描述

由代码可以知道程序的功能:
·将内存地址2000中的值赋给寄存器%ax
·将寄存器%ax中的值加1
·将寄存器%ax中的值重新写回内存地址2000中
·根据寄存%bx中的值执行以上循环(这里未设置,默认bx为0,执行一次)
由此得到程序单线程运行情况,及内存地址2000中值的变化情况:
在这里插入图片描述

输入指令:./x86.py -p looping-race-nolock.s -t 1 -M 2000 -c查看程序运行结果:
在这里插入图片描述

可以看到程序运行结果与分析一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼树C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值