深入理解计算机系统 1

哈尔滨工业大学计算机系统实验4 HIT_CSAPP LAB4 哈工大计算机系统实验4 阅读详情

第一章 计算机系统漫游

1.1 信息就是 位+上下文

hello程序的生命周期就是从一个源程序(源文件)开始的,即程序员利用编辑器创建并保存的文本文件,文件名是hello.c .源程序实际是一个由值1和0组成的位(bit)序列,八个位被组成一组,称为字节.每个字节表示程序中某个文本字符.

大部分的现代系统都是用ASCII标准来表示文本字符,这种方法实际上是用一个唯一的单字节大小的整数值来表示每个字符.

hello.c程序以字节序列的方式存储在文件中,每个字节都有一个整数值,而该整数值对应于某个字符.注意,每个文本行都是以一个不可见的换行符‘\n'来结束的.呀对应的整数值是10.这样子由ascii字符构成的文件称为文本文件,所有其他文本文件都称为二进制文件.

hello.c的表示方法说明了一个基本道理:系统中的所有的信息,包括磁盘文件,存储器中的程序,存储器存放的用户数据以及网络上面传送的数据,都是由一串位表示的.区分不同数据的唯一方法就是我们读到这些数据对象时的上下文.比如 在不同的上下文,一个同样的字节序列可能表示一个整数,浮点数,等等.

作为程序员,我们需要了解数字的机器表示方式,因为他们与实际的整数和实数是不同的,他们是对真值的无限近似值,有时候会有意想不到的行为表现.这方面基本原理在第二章详细论述.

旁注,c语言的起源

贝儿实验室研究的,有什么特点呢

与unix操作系统息息相关,

小而简单

是为实践目的设计的.

 

1.2 程序被其他程序翻译成不同的格式

hello 程序的生命周期是从一个高级c语言程序开始的.因为这种形式能够被人读懂,然而,为了在系统上运行hello.c程序,每条c语句都必须被其他程序转化成一系列的低级程序语言指令.然后这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件的形式存储起来,目标程序也可称为可执行目标文件.

在unix系统上,从源文件到目标文件的转化是由编译器驱动程序完成的:

unix>gcc-o hello hello.c

在这里 gcc编译器驱动程序读取源程序文件hello.c,并把它翻译成一个可执行目标文件hello .

这个翻译的过程可分为四个阶段完成,执行这四个阶段的程序(预处理器,编译器,汇编器,和链接 器)一起构成了编译系统.

预处理阶段  预处理器(cpp)根据以字符#开头的命令,修改原始的c程序.比如hello.c第一行的#include <stdio.h >命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中,结果就得到另外一个c程序,通常是以.i作为文件扩展名.

编译阶段,编译器(ccl )将文本文件hello.c 翻译成文本文件hello.s,它包含了一个汇编语言程序.汇编语言程序的每句语句都以一种标准的文本格式确切的描述了一条低级机器语言指令.汇编语言是非常有趣的,因为他为不同的高级语言的不同编译器提供了通用的输出语言,例如c编译器和fortran编译器产生的输出文件用的是一样的汇编语言.

汇编阶段, 接下来,汇编器(as )将hello.s翻译成机器语言指令,把这些指令打包成一种叫做 可重定位目标程序的格式,并将结果保存在目标文件hello.o中.

hello.o是一个二进制文件,它的字节编码是机器语言指令而不是字符.如果我们在文本编辑器中打开hello.o文件,看到的将是一堆乱码.

链接阶段,请注意,hello程序调用printf函数,他是每个c编译器都会提供的标准c库的一个函数.printf函数存在一个名为printf.o的单独的编译好的目标文件中,而这个文件必须以某种方式合并到我们的hello.o程序中,链接器(ld)就负责处理这种合并,结果就得到hello文件,他是一个可执行目标企鹅文件 ,(或者简称为可执行文件),可以被加载到内存中,由系统执行.

旁注 GNU项目

gcc是 gnu(gun's  not  unix )的缩写,是发起的一个免费的慈善项目(cs大法好,这种开源精神啊啊啊啊啊 ,一生推,)

1.3 了解编译器如何工作是大有益处的

对于像hello.c这样简单的程序,我们可以依靠编译系统生成正确有效的机器代码.但是 有一些主要的愿原因促使程序员必须知道编译器是如何工作的 其原因如下

优化程序性能 现代编译器都是成熟工具 通常可以生成很好的代码  作为程序员 我们无需为了写出高质量的代码而去了解编译器的内部工作  但是 为了在c 程序中做出好的编码选择 我们确实需要了解一些机器代码以及编译器将不同的c语句转化成机器代码的方式 .例如 一个switch语句是否比一系列的if then else语句高效的多

在第三章 我们将介绍两种相关的机器语言 IA32 和X86-64.会介绍编译器如何把不同的c语言结构转化成他们的机器语言的   第五章 学习如何通过简单转换c语言代码 以帮助编译器更好的完成工作  从而调整c程序的性能. 第六章  学习存储器的层次结构特性 c语言编译器将数组存放在编译器的方式 以及c程序是如何能够利用这些知识从而更高效的运行

链接时出现的错误  根据我们的经验 一些最令人困扰的程序往往都与连接器操作有关.尤其当你准备构建大型的软件系统时  .例如 连接器 报告它无法解析一个引用 这是什么意思?在第七章  会得到解答

避免安全漏洞 多年来 缓冲区溢出

是造成大多数网络和Internet服务器安全问题的主要原因.存在这些错误是因为很少有人能理解限制他们从不收信任的站点接受数据的质量和格式的重要性.学习安全编程的第一步就是理解数据和控制信息存储在程序栈上的方式引起的后果 作为学习汇编语言的一部分 将在第三章描述栈原理和缓冲区溢出错误.还将学习程序员 编译器 和操作系统可以用来降低攻击威胁的方法

1.4  处理器读并理解存储在存储器中的指令

此刻 hello.c源程序已经被编译器系统翻译成可执行文件hello  并存放在磁盘上面.

要想在unix系统运行该可执行文件  我们将它的文件名输入到称为外壳的应用程序中

Unix>./hello

hello,world

Unix>

外壳是一个命令行解释器 它输出一个提示符 等待你输出一个命令行 然后执行这个命令.

如果该命令行的第一个单词不是一个内置的外壳命令  那么外壳就会假设这是一个可执行文件的名字   它将加载并运行这个文件   所以在此列中  外壳将加载并运行 hello程序 然后等待程序终止       hello程序在屏幕上输出他的信息 然后终止    外壳随后输出一个提示符 等待下一个输入的命令行   

1.4.1  系统的硬件组成

为了理解hello程序运行时  发生了什么  我们需要理解一个典型系统的硬件组织    

总线

贯穿整个系统的是一组电子管道 称作总线  它携带信息字节并负责在各个部件间传递   通常总线被设计成传递定长的字节快 也就是字  字中的字节数(即字长)就是一个基本的系统参数 在各个系统中的情况都不尽相同    现在大多数机器字长有的是4个字节 有的是8个字节   为了讨论方便 假设字节为四个字节 并且总线每次只能传送一个字

IO设备

这是系统与外部世界的联系通道   我们的事例系统包括

哈工大计算机系统实验PPT 哈工大计算机系统实验指导PPT,原课程是卡纳基梅隆大学开设的csapp,此PPT是第四章的指导PPT 立即下载

相关推荐

哈工大计算机系统ppt

深入理解计算机系统,csapp上课课件,哈工大20考研换专业课,改计算机系统。

哈工大2023深入理解计算机系统程序人生大作业

1.1。

unbelievablefres的博客 702

深入理解计算机系统 lab

这是所有的lab,可以去看一看,应该对学习ICS很有帮助

程序性能优化--哈工大计算机系统LAB3 2023春

计算机系统--程序优化

qwer1234ww的博客 3428

深入理解计算机操作系统第三章习题答案

《深入理解计算机系统》一书有两个版本,分别由Randal E.Bryant /和David R.O’Hallaron编著。书中主要介绍了计算机系统的基本概念,包括最底层的内存中的数据表示、流水线指令的构成、虚拟存储器、编译系统、动态加载库,以及用户应用等

深入理解计算机系统 原书第2版 中文版 完整 (第1共2部分)

被誉为“价值超过等重量黄金的无价资源宝库” Amazon五星图书 最伟大的计算机科学教材之一 卡耐基梅隆大学计算机学院院长 IEEE ACM和美国工程院院士倾力奉献 超过120所美国和世界一流大学计算机专业选用本书为教材 第2版相对第1版改动在30%左右 具体改动详见前言 《深入理解计算机系统 原书第2版 》从程序员的视角详细阐述计算机系统的本质概念 并展示这些概念如何实实在在地影响应用程序的正确性 性能和实用性 《深入理解计算机系统 原书第2版 》共12章 主要内容包括信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常控制流 虚拟存储器 系统级i o 网络编程 并发编程等 书中提供子大量的例子和练习题 并给出部分答案 有助于读者加深对正文所述概念和知识的理解 [BR>《深入理解计算机系统 原书第2版 》适合作为高等院校计算机及相关专业本科牛 研究生的教材 也可供想要写出更快 更可靠程序的程序员及专业技术人员参考 ">被誉为“价值超过等重量黄金的无价资源宝库” Amazon五星图书 最伟大的计算机科学教材之一 卡耐基梅隆大学计算机学院院长 IEEE ACM和美国工程院院士倾力奉献 超过120所美国和世界一流大学计算机专业选用本书为教材 第2 [更多]

哈工大计算机系统Lab3.优化程序性能

说明 至少用一种CPU优化方法和Cache优化方法,优化图像平滑函数,对于图像的每个long型像素点dst[i][j],执行如下操作(dst为平滑后的图像): dst[i][j] = (src[i][j - 1] + src[i][j + 1] + src[i - 1][j] + src[i + 1][j]) / 4; 性能测试方法 这里利用C标准库中的clock()函数进行测算。 void testfunc(void (*flatten)()) { clock_t t1 = clock(); int

Castria的博客 4530

哈工大 CSAPP实验三优化

面向CPU 面向cache 查看性能参数进行优化

深入理解计算机系统原书第三版part1资源介绍:全面掌握计算机系统知识的不二选择

深入理解计算机系统原书第三版part1资源介绍:全面掌握计算机系统知识的不二选择 去发现同类优质开源项目:https://gitcode.com/ 在当今数字化时代,对计算机系统的深入理解显得尤为重要。《深入理解计算机系统》原书第三版part1资源,以其全面的内容和深入的解析,成为了学习计算机系统的首选资源。 项目介绍 《深入理解计算机系统》原书第三版part1资源,是一部豆瓣评分高达9.5的经典...

gitblog_06713的博客 301

ISO15118-20协议测试实战:用Efficient XML库验证26条命令编解码(附完整代码)

本文分享了ISO15118-20协议测试实战经验,重点探讨了使用Efficient XML库对26条命令进行EXI编解码验证的过程。通过搭建测试环境、编写自动化程序并与官方工具链进行交叉比对,文章深入分析了4条命令编码结果不一致的原因,并提供了完整的排查思路与C代码示例,旨在帮助开发者确保电动汽车充电通信的协议一致性。

weixin_29284657的博客 110

基于python的排课表系统,用python编写排课系统

实现一个具体的课程管理系统。(5) 学生可以查看自己选上的课的成绩,以及各个课程的得分、绩点,并给出其平均绩点,但不允许查看年级其他人的成绩。(2) 学生定制专属课表,可以查看整个学期本人的课程安排,包括课程名称、上课时间、上课地点、任课老师、学分等等。(13) 系主任可以查看整个系的全部学生以及他们的平均绩点,可以对每个班进行排名,或者也可以对整个系进行排名。(15) 系主任可以查看整个学期所开设的所有课程,包括这些课程的全部详细信息。(1) 学生基本信息的查询,学生可以对本人的系统登陆密码进行修改。

yang0728y的博客 2000

《深入理解计算机系统》原书第三版 part1 资源介绍

《深入理解计算机系统》原书第三版 part1 资源介绍 去发现同类优质开源项目:https://gitcode.com/ 《深入理解计算机系统_原书第三版3版_part1__超清晰带书签500M》是一部豆瓣评分高达9.5的经典计算机专业书籍。该书以其全面、深入的讲解,成为计算机科学领域的一部常读常新的百科全书。 本书主要介绍了计算机系统的基本概念,内容涵盖从最底层的内存中的数据表示,到流水线指令的...

gitblog_06788的博客 302

ubuntu安装XXX包时出现(= 20.0.8-0ubuntu1~18.04.1) but it is not going to be installed

安装mujoco_py时,最后一步尝试 import mujoco_py 时出现报错 esashim.c:1:10: fatal error: GL/osmesa.h: No such file or directory 1 | #include <GL/osmesa.h> | ^~~~~~~~~~~~~ compilation terminated. 在https://github.com/openai/mujoco-py#ubuntu-ins

dealexce的博客 1794

深入理解计算机系统lab1——gdb调试初步

深入理解计算机系统lab1——gdb调试初步与debug x86汇编初步 以下仅供最简单的入门和参考!!!!!!! 安装Linux环境,并进行简单程序的编译和GDB调试 一、安装linux系统与环境 第一步,在所使用的电脑平台上安装linux系统与环境; 下载VM这个虚拟机后,又下载ubantu的32位Linux操作系统,在VM成功创建了Linux环境的虚拟机。 二、在linux系统中使用gc...

forest_one的博客 1167

【OCPP】ocpp1.6J协议框架说明

本文档的目的是为读者提供创建正确的可互操作 OCPP JSON 实现 (OCPP-J) 所需的信息。我们将根据我们自己的经验,尝试解释什么是强制性的、什么是良好做法以及什么是不应该做的。毫无疑问,误解或歧义仍然存在,但我们旨在通过本文件尽可能地防止它们。IANA:互联网数字分配机构(OCPP-J:使用JSON通过WebSocket进行OCPP通信。特定的OCPP版本应使用J扩展进行指示。OCPP1.5J表示我们正在讨论1.5版本的JSON/WebSocket实现。

qq_53871375的博客 1242

[SV]SystemVerilog中,系统函数$cast()的作用是什么?

摘要:SystemVerilog中的$cast()系统函数用于安全的动态类型转换,主要在类层次结构中将父类句柄转换为子类句柄(向下转换)。它通过运行时类型检查确保转换合法性,成功时返回1并赋值句柄,失败则返回0。这种机制使得可以通过父类句柄访问子类特有成员,在多态场景(如UVM验证)中尤为重要。使用时需检查返回值处理转换失败情况。$cast()比静态转换更安全,但不能用于无关类或基本数据类型间的转换。

元直的博客 1214

《深入理解计算机系统》1-4章总结

经过1个月断断续续的学习,已学习完《深入理解计算机系统》第四章,不得不说这本书确实无愧经典之名,能带给自己更深层次对编程的理解,现总结下现阶段的学习与体会: 第一章主要为后面个章节做了铺垫,其中讲述了一个C语言程序是如何转变为机器可以理解的语言,即可执行的目标代码,其过程如下 在系统的硬件组成中,计算机通过总线传递数据,要Cpu处理在磁盘的数据必须先将数据保存到RAM中,再

steinliber的博客 5245

海外购物商城源码 带即时通讯IM源码

在海外购物商城中,即时通讯IM源码可以为用户提供更便捷、高效的沟通方式,帮助解决跨国交易中的语言和文化差异问题。总之,即时通讯IM源码在海外购物商城中扮演着重要的角色,可以为用户提供更方便、高效的沟通方式,解决跨国交易中的语言和文化差异问题。(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买)实时翻译:即时通讯IM源码提供实时翻译功能,能够快速准确地翻译不同语言之间的文字、语音、视频等信息,帮助用户克服语言障碍。

很酷的站长的博客 260

《深入理解计算机系统原书第3版 高清版 part1》下载仓库介绍

《深入理解计算机系统原书第3版 高清版 part1》下载仓库介绍 去发现同类优质开源项目:https://gitcode.com/ 欢迎来到《深入理解计算机系统原书第3版 高清版 part1》的下载仓库。本仓库提供了一部关于计算机系统知识的专业书籍的高清电子版资源,以下是该资源文件的详细信息: 资源标题 深入理解计算机系统原书第3版 高清版 part1 资源描述 本书为《深入理解计算机系统》原书第...

gitblog_06774的博客 448

零基础实战:用 Docker 和 vLLM 本地部署 bge-reranker-v2-m3 重排序模型

本文介绍了如何利用Docker容器和vLLM推理框架在本地部署BAAI开发的bge-reranker-v2-m3文本排序模型。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 5975

车载诊断架构 --- 车载ECU开发中DTC数量与芯片存储能力的关系及应对策略

本文探讨了汽车电子系统中ECU存储DTC故障码的容量问题及解决方案。作者作为汽车电子工程师,针对台架测试中遇到的DTC存储超限案例展开分析,指出随着汽车智能化发展,ECU需处理的DTC数量激增与芯片存储能力有限的矛盾。文章详细介绍了DTC的存储需求、ECU支持数量与芯片容量的关系,并提出应对策略,通过实际案例验证了方案的可行性。最后强调在ECU开发中需合理分配存储资源,确保关键故障信息不丢失。

Soly_kun的博客 89

深入理解计算机系统(1)

C语言 1.1 信息就是位+上下文 hello程序的生命周期是从一个源程序(或者说源文件)开始的,文件名是hello.c。源程序实际上就是一个由值0和1组成的位(又称为比特)序列,8个位被组织成一组,称为字节。每个字节表示程序中的某些文本字符。大部分的现代计算机系统都使用ASCI1标准来表示文本字符,这种方式实际上就是用一个唯一的单字节大小的整数值来表示每个字符。 hello.c程序的ASCII码表示 注意,每个文本行都是以一个看不见的换行符"\n’来结束的,它所对应的整数值为10,像hel1o.c这样

石灰聪的博客 1423

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

深入理解计算机系统—计算机系统漫游1.1

从今天开始,就要每天给自己加点餐了~ 从今天开始,会慢吞吞的开始啃《深入理解计算机系统》这本书了~ 从今天开始,每天的输入内容都会在C站上进行分享、输出了~ 每天的内容不多,日积月累下来,希望我的读者和我都会有一个大的突破~ 计算机系统是由硬件和系统软件组成的,硬件和软件二者相互配合、共同工作来运行应用程序。当今技术迭代非常快,计算机系统的具体实现方式也随着时间不断发生改变。但是系统内在的概念却并没有改变。所有的计算机系统都有相似的硬件和软件组件,它们执行着相似的功能。 1.1 信息就是.

kele_xin的博客 335

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深入理解计算机系统1

从 .c 到可执行文件: 文件格式:hello.c: #include <stdio.h> 操作阶段:预处理 预处理器(cpp)根据 #…(命令),修改原始程序。将 #… 命令插入程序文本中, 得到新的c下程序。(“include” 不再只是说一说,而是将include里的命令插进程序文本去了) 文件格式:hello.i 操作阶段:编译 编译器(ccl)将文本翻译成汇编语言。(这个过程就像将各国不同语言转化成是个人都能看懂的手势) 文件格式: hello.s 操作阶段:汇编 将文本翻译成机器语

apple_51572994的博客 149

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

《深入理解计算机系统》Lab1-data lab

开始用博客记录学习过程啦,如果文章有什么问题,恳请指正~本文内容是《深入理解计算机系统》——data lab的代码及其说明。

Coco416的博客 4100

《深入理解计算机系统》-第1章 计算机系统漫游

文章目录序1. 信息就是位+上下文2. 程序的不同格式3. 处理器读并解释存储在内存中的指令3.1 系统的硬件组成4. 运行hello程序4.1. 从磁盘读取hello命令4.2. 从磁盘加载可执行文件到主存4.3. 将输出字符串从存储器写到显示器 序 最近重启了写博客,都说念念不忘必有回响。自从上一遍博客,到现在已经过去了快两年的时间。在这期间一直在想着什么时候写个博客呀,什么时候再摸着键盘一点...

wwx0848的专栏 3172
上一篇: 深入理解计算机系统 2
下一篇: 修改mysql 提示符的若干细节问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值