csapp_lab1

 

 

 

实验报告

 

实 验(一)

 

 

题 目 计算机系统漫游

        

 

 

 

哈尔滨工业大学计算学部

 

目 录

 

1实验基本信息    - 4 -

1.1    实验目的    - 4 -

1.2 实验环境与工具    - 4 -

1.2.1 硬件环境    - 4 -

1.2.2 软件环境    - 4 -

1.2.3 开发工具    - 4 -

1.3 实验预习    - 6 -

2实验环境建立    - 7 -

2.1 Windows hello程序的编辑与运行(5分)    - 7 -

2.2 Linux hello程序的编辑与运行(5分)    - 7 -

3 Windows 软硬件系统观察分析    - 9 -

3.1 查看计算机基本信息(2分)    - 9 -

3.2 设备管理器查看(2分)    - 9 -

3.3隐藏分区与虚拟内存之分页文件查看(2分)    - 10 -

3.4 任务管理与资源监视(2分)    - 10 -

3.5 CPUZ下的计算机硬件详细信息(2分)    - 10 -

4 Linux软硬件系统观察分析    - 12 -

4.1 计算机硬件详细信息(3分)    - 12 -

4.2 任务管理与资源监视(2分)    - 13 -

4.3 磁盘任务管理与资源监视(3分)    - 13 -

4.4 Linux下网络系统信息(2分)    - 13 -

5 Linux下的showbyte程序    - 14 -

5.1 源程序提交(8分)    - 14 -

5.2 运行结果比较(2分)    - 14 -

6程序的生成 CppGccAsld    - 16 -

6.1 请提交每步生成的文件(10分)    - 16 -

7计算机数据类型的本质    - 17 -

7.1 运行sizeof.c填表(5分)    - 17 -

7.2 请提交源程序文件sizeof.c5分)    - 17 -

8程序运行分析    - 18 -

8.1 sum的分析(10分)    - 18 -

8.2 float的分析(10分)    - 18 -

8.3程序优化(20分)    - 19 -

9总结    - 21 -

9.1 请总结本次实验的收获    - 21 -

9.2 请给出对本次实验内容的建议    - 21 -

参考文献    - 22 -

 

 

 

 

第1章 实验基本信息

 

  1. 实验目的

运用现代工具进行计算机软硬件系统的观察与分析

运用现代工具进行Linux下C语言的编程调试,掌握程序的生成步骤

初步掌握计算机系统的基本知识与各种类型的数据表示

1.2 实验环境与工具

1.2.1 硬件环境

处理器    AMD Ryzen 7 5800H with Radeon Graphics 3.20 GHz

机带 Samsung RAM     16.0 GB (15.9 GB 可用)

图形处理器 NVIDIA GeForce RTX 3070 Laptop GPU 8GB

1.2.2 软件环境

版本    Windows 10 专业版

版本号    21H2

安装日期    ‎2022/‎2/‎16

操作系统内部版本    19044.1586

体验    Windows Feature Experience Pack 120.2212.4170.0

 

Ubuntu 20.04.4 LTS

GNOME版本    3.36.8

窗口系统    X11

1.2.3 开发工具

1.    Microsoft Visual Studio Community 2022

版本 17.1.2

VisualStudio.17.Release/17.1.2+32319.34

Microsoft .NET Framework

版本 4.8.04084

 

已安装的版本: Community

 

Visual C++ 2022 00482-90000-00000-AA183

Microsoft Visual C++ 2022

 

ASP.NET and Web Tools 2019 17.1.358.51495

ASP.NET and Web Tools 2019

 

Azure 应用服务工具 3.0.0 版 17.1.358.51495

Azure 应用服务工具 3.0.0 版

 

C# 工具 4.1.0-5.22165.10+e555772db77ca828b02b4bd547c318387f11d01f

IDE 中使用的 C# 组件。可能使用其他版本的编译器,具体取决于你的项目类型和设置。

 

Microsoft JVM Debugger 1.0

Provides support for connecting the Visual Studio debugger to JDWP compatible Java Virtual Machines

 

Microsoft MI-Based Debugger 1.0

Provides support for connecting Visual Studio to MI compatible debuggers

 

Microsoft Visual C++ 向导 1.0

Microsoft Visual C++ 向导

 

Microsoft Visual Studio VC 软件包 1.0

Microsoft Visual Studio VC 软件包

 

NuGet 包管理器 6.1.0

Visual Studio 中的 NuGet 包管理器。有关 NuGet 的详细信息,请访问 https://docs.nuget.org/

 

TypeScript Tools 17.0.1229.2001

TypeScript Tools for Microsoft Visual Studio

 

Visual Basic 工具 4.1.0-5.22165.10+e555772db77ca828b02b4bd547c318387f11d01f

IDE 中使用的 Visual Basic 组件。可能使用其他版本的编译器,具体取决于你的项目类型和设置。

 

Visual Studio Code 调试适配器主机包 1.0

用于在 Visual Studio 中托管 Visual Studio Code 调试适配器的互操作层

    

Visual Studio IntelliCode 2.2

Visual Studio 的 AI 协助开发。

 

Visual Studio Tools for CMake 1.0

Visual Studio Tools for CMake

 

适用于 Google Test 的测试适配器 1.0

启用带有针对 Google Test 编写的单元测试的 Visual Studio 测试工具。扩展安装目录中提供了使用条款和第三方通知。

 

用于 Boost.Test 的测试适配器 1.0

通过针对 Boost.Test 编写的单元测试启用 Visual Studio 测试工具。扩展安装目录中提供用户条款和第三方通知。

 

2.    Name : Code::Blocks

Version : 20.03-r11997

SDK Version : 2.0.0

Scintilla Version: 3.7.5

wxWidgets Library (wxGTK port)

Version 3.0.4 (Unicode: wchar_t, debug level: 1),

Runtime version of toolkit used is 3.24.

Compile-time GTK+ version is 3.24.14.

1.3 实验预习

上实验课前,必须认真预习实验指导PPT

了解实验的目的、实验环境与软硬件工具、实验操作步骤,复习与实验有关的理论知识。

初步使用计算机管理、设备管理器、磁盘管理器、任务管理器、资源监视器、性能监视器、系统信息、系统配置、组件服务查看计算机的软硬件信息。

WindowsLinux下分别编写 hello.c,显示"Hello 1200300101-学霸"(可换成学生自己信息)

试着编写 showbyte.c 显示hello.c的内容:如书P2,每行16个字符,上一行为字符,下一行为其对应的10进制形式。

试着编写sizeof.c打印输出C语言每一个数据类型(含指针)占用空间,并在WindowsLinux32/64模式分别运行,并比较运行结果。

 

 

第2章 实验环境建立

 

2.1 Windows下 hello程序的编辑与运行(5分)

 

 

2-1 Windowshello运行截图

2.2 Linux下 hello程序的编辑与运行(5分)

 

 

 

2-2 Linuxhello运行截图

 

 

第3章 Windows 软硬件系统观察分析

 

3.1 查看计算机基本信息(2分)

运行Windows管理工具中的"系统信息"程序,查看CPU、物理内存、系统目录、启动设备、页面文件等信息,并截图

 

3-1 Windows下计算机基本信息

3.2 设备管理器查看(2分)

按链接列出设备,找出所有的键盘鼠标设备。写出每一个设备的从根到叶节点的路径。

键盘:Peng-Lapà基于ACPI x64的电脑àMicrosoft ACPI-Complaint SystemàPCI Express 根复合体àPCI Express 根端口àAMD USB3.10 可拓展主机控制器àUSB 根集线器àUSB 输入设备àHID Keyboard Device

鼠标:Peng-Lapà基于ACPI x64的电脑àMicrosoft ACPI-Complaint SystemàPCI Express 根复合体àPCI Express 根端口àAMD USB3.10 可拓展主机控制器àUSB 根集线器àUSB Composite DeviceàRazer Viper Ultimate

Peng-Lapà基于ACPI x64的电脑àMicrosoft ACPI-Complaint SystemàPCI Express 根复合体àPCI Express 根端口àAMD USB3.10 可拓展主机控制器àUSB 根集线器àUSB Composite DeviceàRazer Mouse Dock

3.3隐藏分区与虚拟内存之分页文件查看(2分)

写出计算机主硬盘的各隐藏分区的大小(MB):260MB576MB,591MB,1000MB,

写出pagefile.sys的文件大小(Byte):10.67GB

C盘根目录下其他隐藏的系统文件名字为:$WINRE_BACKUP_PARTITION.MARKER, $WinREAgentProgramDataOneDriveTemp

3.4 任务管理与资源监视(2分)

写出你的计算机的PID为"-"、最小与最大的3个任务的PID、名称、描述。

PID        名称            描述

1.      -        系统中断        延迟过程调用和中断服务例程

2. 4        System            NT Kernel & System

3. 34588    chrome.exe         Google Chrome

3.5 CPUZ下的计算机硬件详细信息(2分)

     CPU个数: 1 物理核数: 8 逻辑处理器个数: 16     L3 Cache大小: 16MB

3-2 CPUZCPU的基本信息

第4章 Linux软硬件系统观察分析

(泰山服务器)

4.1 计算机硬件详细信息(3分)

     CPU个数: 96     物理核数: 48 逻辑处理器个数: 48

MEM Total192616MB Used36907MB Swap 8191MB

 

 

4-1 Linux下计算机硬件详细信息截图

 

4.2 任务管理与资源监视(2分)

写出Linux下的PID最小的两个任务的PID、名称(Command)。

1. 1, systemd

2. 2, kthreadd

4.3 磁盘任务管理与资源监视(3分)

1. /dev/sda 设备的大小_1200.2____GB,类型_ AL15SEB120N _

2. Units sectors of 1 * 512 = 512 bytes Sector Size 512 bytes / 512 bytes

4.4 Linux下网络系统信息(2分)

写出机器正联网用的网卡IPv4地址:_192.168.11.210__

mac地址:_6c:eb:b6:15:93:2b__

 

 

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

short 

2

 2

  

 2

int 

 4

 4

  

 4

long 

 4

 4

  

 8

long long 

 8

 8

  

 8

float 

 4

 4

  

 4

double 

 8

 8

  

 8

long double 

 8

 8

  

 16

指针

 4

 8

  

 8

 

 

7.2 请提交源程序文件sizeof.c(5分)

 

 

 

 

 

第8章 程序运行分析

8.1 sum的分析(10分)

1.截图说明运行结果,并原因分析。

Unsigened数据和int数据比大小时,int会转化为unsigned int,len-1会成为0xffffffff,那么i就一直小于len-1,直到超出数组a的范围引发错误。

2.论述改进方法

将len声明为int类型数据。

8.2 float的分析(10分)

1.运行结果截图,分析产生原因。

浮点数离0越近越稠密精度越高。例如10.186810在内存中为4122fd2c,10.186815在内存中为4122fd32,其间每个浮点数能被近似表示;而61.419997到61.420000在内存中为4275ae14,61.420001在内存中为4275ae15。

 

2. 论述编程中浮点数比较、汇总统计等应如何正确编程。

由于浮点数不是精确的,在进行浮点数比较时,必须在误差扰动范围之外进行比较

由于计算机用二进制小数来近似十进制的小数导致的误差在一般情况偏小,但是汇总统计时造成误差累积将十分显著,此时应采取其他算法如高精度计算来进行汇总统计。

8.3程序优化(20分)

1. 截图说明运行结果,分析问题产生原因。

    g1.c使用递归法,当计算到46时超过了long的范围

g2.c 使用循环法,同样在46时出现了超过long的范围的问题

 

2. 提交初始的long/double版本的g1.c与g2.c。

 

3. 提交最后优化后的程序 g.c

将long 数据修改为double数据结构,能够完成计算。

 

 

第9章 总结

9.1 请总结本次实验的收获

1. 了解了如何配置虚拟机。

2. 了解了如何使用服务器,以及Linux系统的服务器的基本操作,ssh和scp。

3. 熟悉了visual studio IDE的使用以及调试工具,例如内存查看工具和局部变量查看。

9.2 请给出对本次实验内容的建议

1.建议给学生介绍Linux系统的基本使用方法,这次做实验中最耗费时间时间的其实是学习怎么使用Linux和scp上传文件,但其实scp对于第一次接触的人来说略显复杂,因为不知道每个参数的含义,而且对于只需要知道怎么用scp的人而言能有现成的命令格式提供参考能节省很多时间,毕竟我做实验的目的就是使用不用再过多了解scp的具体原理和每一个参数。

注:本章为酌情加分项。

 

参考文献

1.blog.csdn.net/tgdzsjh/article/details/32702073

2.blog.csdn.net/weixin_34326558/article/details/93932581

3.runoob.com/cprogramming/c-function-fread.html

4.cnblogs.com/blairwaldorf/p/7642761.html

posted @ 2022-05-23 22:51  woshiybj  阅读(747)  评论(0)    收藏  举报