2024Spring> HNU-计算机系统-实验2-datalab-导引+验收

前言

datalab考验对于位运算以及浮点数存储的理解,如果真的肯花时间去搞懂,对计算机系统存储的理解真的能上一个台阶。与课程考试关联性上来说不是很大,但对于IEEE的浮点数表示一定要熟练掌握。

导引

①实验工具包

要完成的是bits.c中的15个函数。

打开README可以查看实验提供的工具包中各部分是干什么作用的,摘录如下。

  • bits.c- ★完成这个文件中的15个函数
  • bits.h- 头文件
  • btest.c- 主btest程序(用于测试结果)
  • btest.h,decl.c,tests.c,tests-header.c- 用于生成btest
  • fshow.c-用于检查浮点表示的实用工具
  • ishow.c-用于检查整数表示的实用工具
  • dlc -编译器

②实验完成流程

重复以下三个步骤直至完成15个函数并且结果都正确,实验结束。

  • 补全bits.c中的某一个函数
  • 【编译检验】使用./dlc bits.c 测试是否通过编译(即是否合法),若没有问题则没有返回
  • 【结果检验】使用make clean && make btest && ./btest 测试结果是否正确,会输出错误信息和正确信息

注:每次改动bits.c后均需重新make clean && make btest,这里的&& 可以直接敲上去,命令行会默认逐个执行&&连接的语句,或者自行拆分逐个敲语句也可以。

【可选】使用./dlc -e bits.c打印每个函数使用的运算符数,操作数也需要满足限制。

【可选】小工具ishow和fshow,可以用来看一个数在int类型和float类型下有无符号形式的值。

    unix> ./ishow 0x27
    Hex = 0x00000027,	Signed = 39,	Unsigned = 39

    unix> ./ishow 27
    Hex = 0x0000001b,	Signed = 27,	Unsigned = 27

    unix> ./fshow 0x15213243
    Floating point value 3.255334057e-26
    Bit Representation 0x15213243, sign = 0, exponent = 0x2a, fraction = 0x213243
    Normalized.  +1.2593463659 X 2^(-85)

    linux> ./fshow 15213243
    Floating point value 2.131829405e-38
    Bit Representation 0x00e822bb, sign = 0, exponent = 0x01, fraction = 0x6822bb
    Normalized.  +1.8135598898 X 2^(-126)

最终可用./driver.pl来进行总体验证,得出最终分数。

③举例

1 bitAnd

/*
 * bitAnd - x&y using only ~ and |
 *   Example: bitAnd(6, 5) = 4
 *   Legal ops: ~ |
 *   Max ops: 8
 *   Rating: 1
 */

bits.c函数上方的注释中标注了完成该函数的要求以及函数功能描述。

这个函数要求使用按位或按位取反实现按位与,最多使用的符号数目是2个。

思路:使用德摩根定律将“按位与”操作转换为“按位取反”和“按位或”操作。

因此我们可以这样完成这个函数。

int bitAnd(int x, int y)
{
  return ~(~x | ~y);
}

注意:1-12依据各函数要求;13,14,15允许使用if,while等语句进行编写。

④期望

希望你能:

  • 独立完成实验,思路清晰
  • 进行经验总结,探究感悟
  • 熟练掌握IEEE浮点数表示
  • 真的从实验中收获知识与快乐

不要过于纠结于验收形式(验收分数差异真的不大)

⑤ 运行时BUG解决1-/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory

有同学在使用make btest时遇到问题如下

该问题产生的原因及解决方法如下:

即可正常运行。

⑥运行时BUG解决2-fitsBits一个测试过不了

顺便解决遇到这个问题

解决方法:

【注】若两个问题同时遇到,该行的-O和-m32都要关掉

该问题解决

【注】以上两个bug同时常出现于:环境发生迁移时,如虚拟机环境/docker环境/WSL子系统环境等。所以部分同学可能未遇到,部分同学遇到,这取决于你的环境。具体原因应该是架构上的问题,不去深究。

验收

总体思路:

说是实验验收,实际上主要确保同学能掌握两个点,一个是位运算,第二个是IEEE浮点数的表示。后者是主要的任务,必须确保每个同学掌握了,因为期末考试第一题往往就是这个知识点。

我的验收流程:

  • 从1-13的题目中挑选1-3个印象深刻的,讲讲是怎么做的。
  • 从14-15的题目中挑选1个,主要涉及到浮点数。必须确保掌握IEEE的基本知识。

【主要根据讲解思路,判断是否是自己完成的,比较热门的题目有isLessorEqual,bitcount,ilog2】

部分题目的主要问题:

isLessorEqual:

  • 为什么要先比较是否同号再进行相减?【防止数据过大导致溢出】

bitcount:

  • 简述思想
  • 给你一组数据,对这个数据按照你的算法进行实操。
  • 如果是用掩码的方法,这一步的掩码是什么。
  • 这是一种什么思想?分治/二分

ilog2:

  • 简述思想
  • 给你一组数据,对这个数据按照你的算法进行实操。
  • 这是一种什么思想?分治/二分

i2f:

  • IEEE的浮点数的符号位,阶码,尾数,是怎么来的
  • 向偶舍入是怎么处理的

float*2

  • 浮点数的类型都有哪几类:规格化数,非规格化数,无穷,NAN
  • 对于规格化数怎么处理,对于非规格化数怎么处理

验收总结

主要还是确保同学们都会相关知识点了,所以就没有深入问。基本能确保同学是自己做的,然后对我关注的知识点都了解了,我就停止继续问了。同学的表现都还是比较好的。

参考:

HNU-计算机系统-实验2-DataLab_hnu计算机系统-CSDN博客

  • 21
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值