当前位置: 首页 > news >正文

【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 深入理解计算机系统 课程视频

相关文章:

  • 【微积分的本质|笔记】指数函数求导
  • 【MIT算法导论】算法分析与基础知识
  • 【微积分的本质|笔记】隐函数求导的意义与理解
  • 【微积分的本质|笔记】极限
  • 【微积分的本质|笔记】泰勒级数
  • 【微积分的本质|笔记】面积和斜率的联系
  • 【台大李宏毅|ML】课程介绍
  • 【MIT算法导论】渐进符号、递归与解法
  • 【CMU|深入理解计算机系统】Bits,Bytes and Integers
  • 【矩阵论】线性空间与线性变换(1)
  • 【台大李宏毅|ML】Regression
  • 【矩阵论】线性空间与线性变换(2)
  • 归并排序算法的实现与分析
  • 【MIT算法导论】分治法
  • 【矩阵论】线性空间与线性变换(3)(4)
  • ES6指北【2】—— 箭头函数
  • 2017届校招提前批面试回顾
  • echarts的各种常用效果展示
  • Java 多线程编程之:notify 和 wait 用法
  • java8-模拟hadoop
  • Mysql5.6主从复制
  • MySQL几个简单SQL的优化
  • Python十分钟制作属于你自己的个性logo
  • Python语法速览与机器学习开发环境搭建
  • sessionStorage和localStorage
  • Vue.js-Day01
  • Vue2.0 实现互斥
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 阿里研究院入选中国企业智库系统影响力榜
  • 阿里云购买磁盘后挂载
  • 如何设计一个微型分布式架构?
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • AI算硅基生命吗,为什么?
  • ​flutter 代码混淆
  • ​secrets --- 生成管理密码的安全随机数​
  • ###C语言程序设计-----C语言学习(3)#
  • ###C语言程序设计-----C语言学习(6)#
  • #数学建模# 线性规划问题的Matlab求解
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (十五)使用Nexus创建Maven私服
  • (十一)图像的罗伯特梯度锐化
  • (四)Controller接口控制器详解(三)
  • *1 计算机基础和操作系统基础及几大协议
  • .jks文件(JAVA KeyStore)
  • .NET Core 和 .NET Framework 中的 MEF2
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET框架
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • [Bada开发]初步入口函数介绍
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [C#]获取指定文件夹下的所有文件名(递归)