【CMU|深入理解计算机系统】Course Review

Lecture 1:Course Overview


#1 Ints are not Integers,Floats are not Reals

  1. Example one:

数理观点:对于一个实数,其平方运算得到的结果必然是一个非负数。

计算机视角:
在这里插入图片描述
因为运算之后很可能会发生溢出,得到一个负数结果。

  1. Example two:

数理观点:加法是满足交换律和结合律的

计算机视角:
在这里插入图片描述
因为浮点数的表示通常是有精度的,对于-1e20这样的数,3.14显得微不足道,索引上图最后一个式子的运算结果是0

  • Conclusion:

上面这种规则的错乱都归结为一个事实:在计算机中用有限的位组合形式表示在数域中无限扩张的数,因此在如何实现功能上会有一些妥协。

以上就是接下来的课程中的第一大模块——数的表示和运算


#2 You’ve got to konw Assembly

有关于如何获取编译器编译得到的C指令,并着重于分析Intel 指令


#3 Memory Matters

  1. 基本任务——了解有关于内存系统方面的一些知识

现代计算机往往采用分层存储的系统,试图同时给使用者高性能的表现和较大的储存容量

在这里插入图片描述
2. 分析一个有意思的weak program
在这里插入图片描述

我将上段程序在本机上的GCC上进行运行,得到的结果与Slide中显示的结果相差无几
在这里插入图片描述

分析原因
①数据如何在内存中布局
在这里插入图片描述
上图是结构体定义之后,各数据元素在内存中的布局,每一个单元在内存中对应4个字节。

②与内存的访问方式有关
gcc编译器在访存的时候默认不会进行边界检查

③程序结果分析

  • 如果只是引用a[0]和a[1],会按照程序既定的逻辑进行访问,但是如果访问a[2]和a[3],那么实际上是对d的值进行了改变。
  • 如果再继续往上进行访问,在slide和自己的例子中都是在调用fun(6)的时候,程序会崩溃。
    因为此时可能修改了这个程序的某些状态,这些状态被用于维持程序运行,最有可能的就是用于记录已经分配的内存,这就导致了程序崩溃。

#4 There’s more to performance than asymptotic complexity

  1. 主要任务

从程序的角度增加性能

“我们所学习的很多课程,更多地强调在正确的数据结构中获得正确的算法”
“但是一些程序往往需要一些低级别的优化,这就要求我们了解系统的运行规律”

  1. 从一个经典案例理解程序结构和系统优化对于性能的影响
    在这里插入图片描述

如上图所示的两段程序,其逻辑功能都是为了实现将一个2048x2048的原数组移动到目标数组中。
但是左边的程序实现的为行优先,右边的程序实现的为列优先,在某一特定机器上,效率有十分大的差异。

而这个差异与内存层次结构中的缓存有关。


#5 Computers do more than execute programs

基本目标

建立一个意识,计算机除了孤立地执行一段程序,而且能够通过网络获取彼此交谈,实现像web服务器这样的服务。

一台计算机不仅仅是孤立的机器,而且是通过网络彼此互联的计算机,也是与物理世界交互的嵌入式控制器。


后记

本文为B站《CMU|CSAPP》课程的随课笔记,欢迎一起探讨和交流~

【精校中英字幕】2015 CMU 15-213 CSAPP 深入理解计算机系统 课程视频

猜你喜欢

转载自blog.csdn.net/kodoshinichi/article/details/108429281
今日推荐