20135327郭皓 20135329李海空家庭作业汇总

第二章:

两分题:

20135327 郭皓 :3

20135329 李海空:1

2.67 给你一个任务,编写一个过程int_size_is_32(),当在一个int是32位的机器上运行时,该程序产生1,而其他情况则产生0.不允许使用sizeof运算符。下面是开始时的尝试:

/*The following code does not run properly on some machies*/
int bad_int_size_is_32(){  int set_msb = 1<<31;  int beyond_msb = 1<<32;  return set_msb &&! beyond_msb;}

当在SUN SPARC这样的32位机器上编译并运行时,这个过程返回的却是0.下main的编译器信息给了我们一个问题的指示。warning:left shift count >= width of type

A:左移位数大于等于int长度,32位机器中最多左移31位,16位机器中最多左移15位。

B:用两次左移来实现<<32:

int set_msb=1<<31;

int beyond_msb=set_msb<<1;

C:用三次左移来实现<<31与<<32:

int temp=1<<15;

temp<<=15;

int set_msb=temp<<1;

int beyond_msb=temp<<2;

三分题:

20135327 郭皓 :4

20135329 李海空:2

2.69 写出具有如下原型的函数的代码

/*

*Do rotating right shitf.  Assume 0 <= n < w

*Examples when x = 0x12345678 and w = 32:

*   n = 4 -> 0x81234567 ,n = 20 -> 0x45678123

*/

unsigned rotate_right(unsigned x, int n);

答:本题主要是编写一个循环右移的函数,具体代码如下所示:

#include <stdio.h>
unsigned rotate_right(unsigned x, int n)
{
unsigned a;
a = x<<(32-n);
printf("%x\n",x>>n|a);
}

int main()
{
unsigned x;
int n;
printf("请输入32位十六进制数");
scanf("%x",&x);
printf("请输入右移位数(小于32大于等于0)");
scanf("%d",&n);
if(n>32||n<=0)
{
printf("右移位数小于32大于等于0!!!");
return 0;
}
rotate_right(x,n);

return 0;
}

这里我默认w=32 因为要是32位以内的十六进制数必须更改w的取值否则系统默认为32位十六进制,如需修改只需将32改为w即可。

下图为测试结果:

试试其他数:

第六章:

6.30

两分题:

20135327 郭皓 :2.5

20135329 李海空:1.5

A:

由题意知 b=2 s=2 故 两个低位是块偏移,然后是两位的组索引,剩下的位做标记:

B:

1.对于地址0x409,块偏移(CO):0x1  组引索(CI):0x2 高速缓存标记(CT):0x40 可见该标记的有效位为0,故不命中。
2.对于地址0x40A,块偏移(CO):0x2  组引索(CI):0x2 高速缓存标记(CT):0x40  可见该标记的有效位为0,故不命中。
3.对于地址0x833,块偏移(CO):0x3  组引索(CI):0x0 高速缓存标记(CT):0x83 可见该标记的有效位为1,高速缓存的标记位与地址中的标记位匹配,故命中 读出的值为0xD0。

6.37

两分题:

20135327 郭皓 :2.5

20135329 李海空:1.5

A

不命中率是100%,直接映射是每组只有一个高速缓存行,块大小为32字节,表示可以存储8个int数值。 数组是按照行优先存储的,计算数组一行的大小为256*4=1024,所以高速缓存只够存数组的一行。 所以x[0]和x[1]的每一个元素对应的高速缓存是同一个块。 因此,每次请求都在加载,驱逐,替换。不命中率为100%。

B

不命中率是1/8 ,只有加载新行时发生不命中,缓存足够大,可以存储整个数组 因此只有冷不命中,而块大小为32字节,表示可以存储8个int数值 所以每次都会加载x[0][i]~x[0][i+7]共8个数值到缓存组中,这里就只有x[0][i]是不命中的 所以不命中率为1/8。

C

不命中率为1/8 ,高速缓存只有1024字节,不够存储数组,数组的第一行和第二行分别加载到缓存同一组的不同行,不会冲突,所以最后还是相当于只有冷不命中,相当于每8个数据中只有一个是不命中的 所以不命中率为1/8 。

D

不能了,块大小不变,因为冷不命中的概率不可能被减小。

E

能,因为块的大小增加,冷不命中的频率就降低。

时间: 2024-12-24 22:25:35

20135327郭皓 20135329李海空家庭作业汇总的相关文章

信息安全系统设计基础 实验三 实时系统的移植 20135327郭皓 20135329 李海空

北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全设计基础                         班级:1353 姓名:郭皓 李海空 学号:20135327  20135329 成绩:             指导教师:娄嘉鹏        实验日期:2015.11.24 实验密级:         预习程度:         实验时间:15:30~18:00 仪器组次:          必修/选修:            实验序号:3 实验名称: 

信息安全系统设计基础 实验一、实验二 20135327郭皓 20135329 李海空

北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全设计基础                         班级:1353 姓名:郭皓 李海空 学号:20135327  20135329 成绩:             指导教师:娄嘉鹏        实验日期:2015.11.10 实验密级:         预习程度:         实验时间:15:30~18:00 仪器组次:          必修/选修:            实验序号:1 实验名称: 

信息安全系统设计基础 实验二固体设计 20135327郭皓 20135329 李海空

北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全设计基础                         班级:1353 姓名:郭皓 李海空 学号:20135327  20135329 成绩:             指导教师:娄嘉鹏        实验日期:2015.11.10 实验密级:         预习程度:         实验时间:15:30~18:00 仪器组次:          必修/选修:            实验序号:1 实验名称: 

信息安全系统设计基础 实验五:通讯协议设计 20135327郭皓 20135329 李海空

北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全设计基础                         班级:1353 姓名:郭皓 李海空 学号:20135327  20135329 成绩:             指导教师:娄嘉鹏        实验日期:2015.11.24 实验密级:         预习程度:         实验时间:15:30~18:00 仪器组次:          必修/选修:            实验序号:5 实验名称: 

20135329李海空 家庭作业

第二章: 两分题: 20135327 郭皓 :3 20135329 李海空:1 2.67 给你一个任务,编写一个过程int_size_is_32(),当在一个int是32位的机器上运行时,该程序产生1,而其他情况则产生0.不允许使用sizeof运算符.下面是开始时的尝试: /*The following code does not run properly on some machies*/ int bad_int_size_is_32(){ int set_msb = 1<<31; int

20135327郭皓--Linux内核分析第七周 可执行程序的装载

第七周 可执行程序的装载 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一.预处理,编译,链接和目标文件格式 1.可执行程序是怎么得来的 c代码->预处理->汇编代码->汇编器->目标代码->链接成可执行文件->加载到内核执行 2.目标文件的格式ELF 符号修饰标准.变量内层布局.函数调用方式等这些跟可执行代码二进制兼容性相关的内容称为ABI

20135327郭皓--Linux内核分析第四周 扒开系统调用的三层皮(上)

Linux内核分析第四周 扒开系统调用的三层皮(上) 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核态和中断 用户态:当进程在执行用户自己的代码时,则称其处于用户态,即此时处理器在特权级最低的(3级)用户代码中运行. 内核态:当一个进程执行系统调用而陷入内核代码中执行时,我们就称进程处于内核态,此时处理器处于特权级最高的(0级)内核代码中执行. PS:CPU指令

20135327郭皓--Linux内核分析第三周 构造一个简单的Linux系统MenuOS

Linux内核分析第三周  构造一个简单的Linux系统MenuOS 前提回顾 1.计算机是如何工作的三个法宝 1.存储程序计算机 2.函数调用堆栈 3.中断 2.操作系统的两把宝剑 中断上下文的切换 进程上下文的切换 第一讲  Linux内核源代码介绍 arch目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录.PC机一般都基于此目录. init目录包含核心的初始化代码(不是系统的引导代

20135327郭皓——Linux内核分析第二周 操作系统是如何工作的

操作系统是如何工作的 上章重点回顾: 计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能: enter pushl %ebp movl %esp,%ebp leave movl %ebp,%esp popl %ebp 函数参数传递机制和局部变量存储 中断,多道程序操作系统的基点,没有中断机制程序只能