随笔分类 -  深入理解计算机系统

主要分享学习CSAPP过程中的笔记和实验等相关内容
摘要:链接( Clinking)是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行。链接可以执行于编译时( compile time),也就是在源代码被翻译成机器代码时;也可以执行于加载时( load time),也就是在程序被加载器(lad er)加载到内存并执 阅读全文
posted @ 2021-01-29 17:02 学习,积累,成长 阅读(477) 评论(0) 推荐(0) 编辑
摘要:我们写程序的目的就是使它在任何情况下都可以稳定工作。一个运行的很快但是结果错误的程序并没有任何用处。在程序开发和优化的过程中,我们必须考虑代码使用的方式,以及影响它的关键因素。通常,我们必须在程序的简洁性与它的运行速度之间做出权衡。今天我们就来聊一聊如何优化程序的性能。 @ 1. 减小程序计算量 1 阅读全文
posted @ 2021-01-14 11:25 学习,积累,成长 阅读(406) 评论(0) 推荐(0) 编辑
摘要:在计算机系统模型中,CPU执行指令,而存储器系统为CPU存放指令和数据。实际上,存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。 如果你的程序需要的数据是存储在CPU寄存器中,那么在指令的执行期间,在0个周期内就能访问到它们。如果存储在高速缓存中,需要4~75个周期。如果存储在主存 阅读全文
posted @ 2021-01-01 16:21 学习,积累,成长 阅读(462) 评论(0) 推荐(0) 编辑
摘要:1. 什么是缓存 缓存又叫高速缓存,是计算机存储器中的一种,本质上和硬盘是一样的,都是用来存储数据和指令的 。它们最大的区别在于读取速度的不同。程序一般是放在内存中的,当CPU执行程序的时候,执行完一条指令需要从内存中读取下一条指令,读取内存中的指令要花费100000个时钟周期(缓存读取速度为200 阅读全文
posted @ 2021-01-01 16:21 学习,积累,成长 阅读(579) 评论(0) 推荐(1) 编辑
摘要:这是CSAPP的第四个实验,这个实验比较有意思,也比较难。通过这个实验我们可以更加熟悉GDB的使用和机器代码的栈和参数传递机制。 @ 实验目的 本实验要求在两个有着不同安全漏洞的程序上实现五种攻击。通过完成本实验达到: 深入理解当程序没有对缓冲区溢出做足够防范时,攻击者可能会如何利用这些安全漏洞。 阅读全文
posted @ 2020-12-31 09:35 学习,积累,成长 阅读(990) 评论(0) 推荐(0) 编辑
摘要:写程序最主要的目标就是使它在所有可能的情况下都正确工作。一个运行得很快但是给出错误结果的程序没有任何用处。程序员必须写出清晰简洁的代码,这样做不仅是为了自己能够看懂代码,也是为了在检査代码和今后需要修改代码时,其他人能够读懂和理解代码。另一方面,在很多情况下,让程序运行得快也是一个重要的考虑因素。本 阅读全文
posted @ 2020-12-31 09:33 学习,积累,成长 阅读(493) 评论(0) 推荐(0) 编辑
摘要:本次实验是CSAPP的第5个实验,这次实验主要是让我们熟悉如何优化程序,如何写出更具有效率的代码。通过这次实验,我们可以更好的理解计算机的工作原理,在以后编写代码时,具有能结合软硬件思考的能力。 @ 实验简介 本次实验主要处理优化内存密集型代码。图像处理提供了许多可以从优化中受益的功能示例。在本实验 阅读全文
posted @ 2020-12-31 09:33 学习,积累,成长 阅读(423) 评论(0) 推荐(0) 编辑
摘要:这是CSAPP的第三个实验,主要让我们熟悉GDB的使用,理解程序栈帧的结构和缓冲区溢出的原理。 实验目的 本实验的目的在于加深对IA-32函数调用规则和栈结构的具体理解。实验的主要内容是对一个可执行程序“bufbomb”实施一系列缓冲区溢出攻击(buffer overflow attacks),也就 阅读全文
posted @ 2020-12-12 15:13 学习,积累,成长 阅读(1171) 评论(0) 推荐(0) 编辑
摘要:这是CSAPP的第二个实验,主要让我们理解代码的机器级表示,最重要的是理解每个寄存器的作用以及如何使用这些寄存器。本次的实验内容有点晦涩难懂,对于这些内容多看下习惯就好了。 本次实验中的bomb文件中共有7个炸弹问题(6个显式的和1个隐藏的),每条问题只有输入正确的答案才能进入下一题,否则则会触发爆 阅读全文
posted @ 2020-12-10 17:12 学习,积累,成长 阅读(1466) 评论(0) 推荐(1) 编辑
摘要:本章主要介绍了计算机中的机器代码——汇编语言。当我们使用高级语言(C、Java等)编程时,代码会屏蔽机器级的细节,我们无法了解到机器级的代码实现。既然有了高级语言,我们为什么还需要学习汇编语言呢?学习程序的机器级实现,可以帮助我们理解编译器的优化能力,可以让我们了解程序是如何运行的,哪些部分是可以优 阅读全文
posted @ 2020-12-09 08:58 学习,积累,成长 阅读(890) 评论(0) 推荐(0) 编辑
摘要:本章主要研究了计算机中无符号数,补码,浮点数的编码方式,通过研究数字的实际编码方式,我们能够了解计算机中不同类型的数据可表示的值的范围,不同算术运算的属性,可以知道计算机是如何处理数据溢出的。了解计算机的编码方式,对于我们写出可以跨越不同机器,不同操作系统和编译器组合的代码具有重要的帮助。 @ 信息 阅读全文
posted @ 2020-12-08 10:41 学习,积累,成长 阅读(1063) 评论(0) 推荐(0) 编辑
摘要:本文是CSAPP第二章的配套实验,通过使用有限的运算符来实现正数,负数,浮点数的位级表示。通过完成这13个函数,可以使我们更好的理解计算机中数据的编码方式。 准备工作 首先去官网Lab Assignments获得实验相关的文件(也可以加我QQ获取教学视频、PPT等内容)在每个实验文件的README中 阅读全文
posted @ 2020-12-06 21:45 学习,积累,成长 阅读(541) 评论(0) 推荐(0) 编辑
摘要:本章通过跟踪hello程序的生命周期来开始对计算机系统进行学习。一个源程序从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止。我们将沿着这个程序的生命周期,简要地介绍一些逐步出现的关键概念、专业术语和组成部分。 @ 好久没有更新博客了,从国庆节到现在一直在整理秋招的一些资料,简历模版,嵌 阅读全文
posted @ 2020-12-04 14:55 学习,积累,成长 阅读(493) 评论(0) 推荐(2) 编辑