第1章 实验基本信息
1.1 实验目的
1.运用现代工具进行计算机软硬件系统的观察与分析
2.运用现代工具进行Linux下C语言的编程调试,掌握程序的生成步骤
3.初步掌握计算机系统的基本知识与各种类型的数据表示
1.2 实验环境与工具
1.2.1 硬件环境
X64 CPU;2GHz;内存2G RAM;硬盘256GHD Disk 以上
1.2.2 软件环境
Windows7 64位以上;VirtualBox/Vmware 11以上;Ubuntu 16.04 LTS 64位/优麒麟 64位 以上
1.2.3 开发工具
Visual Studio 2010 64位以上;CodeBlocks 64位;vi/vim/gedit+gcc
1.3 实验预习
了解实验的目的、实验环境与软硬件工具、实验操作步骤,复习与实验有关的理论知识。
初步使用计算机管理、设备管理器、磁盘管理器、任务管理器、资源监视器、性能监视器、系统信息、系统配置、组件服务查看计算机的软硬件信息。
在Windows、Linux下分别编写 hello.c,显示“Hello 1200300101-学霸”(可换成学生自己信息)
试着编写 showbyte.c 显示hello.c的内容:如书P2页,每行16个字符,上一行为字符,下一行为其对应的16进制形式。
试着编写sizeof.c打印输出C语言每一个数据类型(含指针)占用空间,并在Windows、Linux的32/64模式分别运行,并比较运行结果。
第2章 实验环境建立
2.1 Windows下 hello程序的编辑与运行(5分)
截图:要求有Windows状态行,Visual Studio界面,源程序界面,运行结果界面。

图2-1 Windows下hello运行截图
2.2 Linux下 hello程序的编辑与运行(5分)
截图:要求有Ubuntu的OS窗口,Codeblocks界面,源程序界面,运行结果界面。

图2-2 Linux下hello运行截图
第3章 Windows 软硬件系统观察分析
3.1 查看计算机基本信息(2分)
运行Windows管理工具中的“系统信息”程序,查看CPU、物理内存、系统目录、启动设备、页面文件等信息,并截

图3-1 Windows下计算机基本信息
3.2 设备管理器查看(2分)
按链接列出设备,找出所有的键盘鼠标设备。写出每一个设备的从根到叶节点的路径。
键盘:LAPTOP-3SOJH635/基于 ACPI x64 的电脑/Microsoft ACPI-Compliant System/PCI Express 根复合体/Intel(R) LPC Controller/eSPI Controller - 7A0C/PC/AT 增强型 PS/2 键盘(101/102 键)
鼠标:LAPTOP-3SOJH635/基于 ACPI x64 的电脑/Microsoft ACPI-Compliant System/Intel(R) USB 3.20 可扩展主机控制器 - 1.20 (Microsoft)/USB 根集线器(USB 3.0)/G102 LIGHTSYNC/USB 输入设备/HID-compliant mouse
3 隐藏分区与虚拟内存之分页文件查看(2分)
写出计算机主硬盘的各隐藏分区的大小(MB):EFI 系统分区260 MB,恢复分区260MB,恢复分区1.17GB
写出pagefile.sys的文件大小(Byte):16,779,845,632 字节
C盘根目录下其他隐藏的系统文件名字为:hiberfil.sys, swapfile.sys,
3.4 任务管理与资源监视(2分)
写出你的计算机的PID为“-”、最小与最大的3个任务的PID、名称、描述。
1.- 系统中断
2.4 System NT Kernel & System
3. 29656 backgroundTaskHost Background Task Host
3.5 CPUZ下的计算机硬件详细信息(2分)
CPU个数:1 物理核数:24 逻辑处理器个数:32 L3 Cache大小: 36MB

图3-2 CPUZ下CPU的基本信息
第4章 Linux软硬件系统观察分析
(泰山服务器—个人电脑)
4.1 计算机硬件详细信息(3分)
CPU个数: 2 物理核数: 96 逻辑处理器个数: 96
MEM Total: 188G Used: 3.1G Swap: 8.0G
![]() |
![]() |
图4-1 Linux下计算机硬件详细信息截图
4.2 任务管理与资源监视(2分)
写出Linux下的PID最小的两个任务的PID、名称(Command)。
1.PID1 Command systemd
2.PID2 Command kthreadd
4.3 磁盘任务管理与资源监视(3分)
1. /dev/sda 设备的大小(1.9TiB)1945.6 GB,类型AL15SEB120N (SAS硬盘)
2. Units sectors of 1 * 512 = 512 bytes
Sector Size逻辑扇区 512 bytes,物理扇区 512 bytes
4.4 Linux下网络系统信息(2分)
写出机器正联网用的网卡IPv4地址:__192.168.1.227___
mac地址:__6c:eb:b6:15:93:2c___

图4-2 Linux下网络系统信息
第5章 Linux下的showbyte程序
(10分)
5.1 源程序提交(8分)
showbyte.c与实验报告放在一个压缩包里
5.2 运行结果比较(2分)
运行od -Ax -tcx1 hello.c 以及showbyte.c,结果截图。
![]() |
图5-1 OD的输出结果
![]() |
图5-2 showbyte的输出结果
第6章 程序的生成 Cpp、Gcc、As、ld
6.1 请提交每步生成的文件(10分)
hello.i hello.s hello.o hello.out (附上hello.c)
第7章 计算机数据类型的本质
7.1 运行sizeof.c填表(5分)
|
Win/VS/x86 |
Win/VS/x64 |
Linux/M32 |
Linux/M64 | |
|
char |
1 |
1 |
1 |
1 |
|
short |
2 |
2 |
2 |
2 |
|
int |
4 |
4 |
4 |
4 |
|
long |
4 |
4 |
4 |
8 |
|
long long |
8 |
8 |
8 |
8 |
|
float |
4 |
4 |
4 |
4 |
|
double |
8 |
8 |
8 |
8 |
|
long double |
8 |
8 |
12 |
16 |
|
指针 |
4 |
8 |
4 |
8 |
7.2 请提交源程序文件sizeof.c(5分)
第8章 程序运行分析
8.1 sum的分析(10分)
1.截图说明运行结果,并原因分析。
运行结果:访问冲突:程序尝试读取非法内存地址 0x00000070FD000000,也即数组访问越界,访问了未分配的内存区域,导致段错误
原因:当 len = 0时len - 1的结果是 0 - 1 = -1但由于 len是 unsigned类型,-1发生隐式类型转换被解释为最大无符号数,因此循环条件 i <= len - 1变成了i <=UMax - 1,这会导致循环执行数十亿次,远远超出数组 a[]的实际范围。

2.论述改进方法
为了防范无符号类型在边界条件下的危险性,改进可以从两方面入手:首先将参数类型改为有符号int并在入口处添加"if(len<=0) return 0"的边界检查;其次将循环条件优化为"i<len"以消除减法运算
8.2 float的分析(10分)
1.运行结果截图,分析产生原因。
第一张图显示的问题是浮点数精度损失,输入和输出不一致是因为单精度浮点数在IEEE规定下的表示造成的,单精度浮点数(float)只有约6-7位有效数字精度,十进制小数61.419999在二进制中可能是无限循环小数,尾数后面的数都会被截断而且会向偶数进行舍入,因此有的数据进行舍入时会改变运行结果,再以十进制输出结果,连续的浮点数运算会导致误差累积。第二张图中的数值恰好能够被二进制精确表示,没有舍入误差。
![]() | ![]() |
2. 论述编程中浮点数比较、汇总统计等应如何正确编程。
loat单精度浮点数在计算机存储大多是近似值,无法精确表示准确数值。因此最好不要对float单精度浮点数进行比较的运算。如果想要更高精度的数据表示可以选择使用double双精度浮点数的类型或者用数组按位表示并应采用相对误差比较法(如fabs(a-b) < epsilon),其中epsilon根据精度要求,实际场景设定合理阈值。在进行汇总统计时,更不应使用简单的累加循环,而需特定求和算法等精度补偿技术来减少累积误差,对于金融等精度敏感场景则应直接使用整数运算或专门的高精度数学库。从根本上说,程序员必须建立"浮点数计算具有固有误差"的意识,在比较、累加、判断相等时都要考虑精度容差,这是编写健壮数值程序的关键所在。
8.3程序优化(20分)
1. 截图说明运行结果,分析问题产生原因。
递归方法虽然代码逻辑简单正确,但从右侧输出窗口可以看到,程序只计算到第47项(a47=7778742049)之后每算一项非常缓慢,远远没有达到预期的第100项,程序效率过于低下,实际上,程序可能因为运行超时,栈溢出或被强制终止而未能完成全部计算。
循环方法虽然效率更高,但运行结果却出现了严重错误,显示g=2.87709798,而理论上黄金分割比例应该是约0.618。这个错误的原因是整数溢出问题。long long类型的最大取值范围约为9.2×10¹⁸,而真实的第100项斐波那契数约为3.5×10²⁰,已经远远超出long long的表示范围。当数值超出范围时发生截断,计算出的斐波那契数变成错误的值,导致最终的比值也
![]() |
![]() |
2. 提交初始的long/double版本的g1.c与g2.c。
3. 提交最后优化后的程序 g.c
第9章 总结
9.1 请总结本次实验的收获
掌握了Windows和Linux双环境下的系统信息查看方法,能够通过系统工具(如系统信息、设备管理器、任务管理器)全面分析计算机软硬件配置。学会了使用专业工具(如CPU-Z)深入查看CPU架构、缓存体系等硬件细节,理解了图3-2中展示的处理器核心信息与实际性能的关系
熟悉了C程序在Windows和Linux环境下的完整开发流程,从源代码编辑到编译运行的各个环节,通过showbyte程序实现了文件内容的十六进制显示,加深了对字符编码和数据存储的理解。
通过sizeof程序验证了不同数据类型在内存中的占用情况,体会了32/64位系统的差异,分析sum程序的边界条件问题,认识到无符号整数溢出的危险性,通过float实验理解了浮点数精度问题的本质,掌握了正确的数值比较方法。
在程序优化环节,通过对比递归与循环算法的性能差异,理解了算法选择对程序效率的重要影响,学会了使用gcc编译工具的各个阶段(预处理、编译、汇编、链接),建立了完整的程序构建概念。
9.2 请给出对本次实验内容的建议
建议在实验预习部分增加更详细的环境配置说明,特别是VirtualBox/Vmware与Ubuntu的版本兼容性问题,在环境配置过程中遇到些许棘手的问题。
对Linux下的操作命令提供更基础的解释,照顾到不同基础水平的学生。
参考文献
为完成本次实验你翻阅的书籍与网站等
[1] 林来兴. 空间控制技术[M]. 北京:中国宇航出版社,1992:25-42.
[2] 辛希孟. 信息技术与信息服务国际研讨会论文集:A集[C]. 北京:中国科学出版社,1999.
[3] 赵耀东. 新时代的工业工程师[M/OL]. 台北:天下文化出版社,1998 [1998-09-26]. http://www.ie.nthu.edu.tw/info/ie.newie.htm(Big5).
[4] 谌颖. 空间交会控制理论与方法研究[D]. 哈尔滨:哈尔滨工业大学,1992:8-13.
[5] KANAMORI H. Shaking Without Quaking[J]. Science,1998,279(5359):2063-2064.
[6] CHRISTINE M. Plant Physiology: Plant Biology in the Genome Era[J/OL]. Science,1998,281:331-332[1998-09-23]. http://www.sciencemag.org/cgi/ collection/anatmorp.








1372

被折叠的 条评论
为什么被折叠?



