CMU 15-213 Intro to Computer Systems Lecture 1
课程主页:http://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/schedule.html
课程资料:https://github.com/EugeneLiu/translationCSAPP
课程视频:https://www.bilibili.com/video/av31289365/
这一讲主要介绍了课程概述。
课程主旨
课程的主旨是:抽象是好的,但不要忘记现实。
- 大多数CS和CE课程都强调抽象
- 抽象数据类型
- 渐近分析
- 这些抽象有局限性
- 特别是在修改bug的时候需要了解底层实现的详细信息
- 学习了该课程的有如下效果
- 成为更有效率的程序员
- 能够有效地发现和消除错误
- 能够理解和调优程序性能
- 为CS&ECE的“系统”课程做准备
- 成为更有效率的程序员
老师还提到计算机中5个重要的事实。
五个重要的事实
1.整型数不是整数,浮点数不是实数
例1:$x^2\ge 0$不一定成立
对浮点数上述事实成立
对整型上述事实不一定成立
例2:$(x+y)+z=x+(y+z) ?$
无符号整型和整型上述等式成立
浮点数上述事实不成立
2.需要了解汇编语言
- 很有可能永远不会用汇编语言写程序
- 因为编译器比人更耐心
- 但是,了解汇编语言是了解机器级执行模型的关键
- 存在错误的程序行为
- 高级语言模型崩溃
- 调整程序性能
- 了解编译器已完成/未完成的优化
- 理解程序效率低下的原因
- 了解编译器已完成/未完成的优化
- 实施系统软件
- 编译器将机器语言作为目标
- 操作系统必须管理流程状态
- 编译器将机器语言作为目标
- 创建/打击恶意软件
- x86汇编语言是首选!
3.内存很重要,随机存取存储器是非物理的抽象
- 内存不是无限的
- 必须分配和管理
- 许多应用程序以内存为主
- 引用错误的内存特别有害
- 在时间和空间上影响都是长远的
- 内存性能不统一
- 缓存和虚拟内存的影响会大大影响程序性能
- 使程序适应存储系统的特性可以大大提高速度
来看一个具体例子:
typedef struct {
int a[2];
double d;
} struct_t;
double fun(int i) {
volatile struct_t s;
s.d = 3.14;
s.a[i] = 1073741824; /* Possibly out of bounds */
return s.d;
}
解释如下:
4.性能不只是渐近复杂性
- 常数项也很重要!
- 甚至精确的操作数量也无法预测性能
- 代码的不同编写方式也会产生$10:1$的效果
- 必须在多个级别进行优化:算法,数据表示,过程和循环
- 必须了解系统才能优化性能
- 程序如何编译和执行
- 如何衡量程序性能并确定瓶颈
- 如何在不破坏代码模块化和通用性的情况下提高性能
一个具体例子如下:
产生上述现象的原因是和计算机存储数据的方式有关:
5.计算机不仅执行程序
- 计算机处理数据输入输出
- I/O系统对于编程的可靠性和性能至关重要
- 他们通过网络相互通信
- 存在网络时会出现许多系统级问题
- 通过自主流程进行并行操作
- 处理不可靠的媒体
- 跨平台兼容性
- 复杂的性能问题
课程观点
- 大多数系统课程都是以建造者为中心的
- 计算机架构
- 在Verilog中设计处理器流水线
- 操作系统
- 实现操作系统的部分功能
- 编译器
- 为简单语言编写编译器
- 网络
- 实现和模拟网络协议
- 计算机架构
- 这门课主要是从程序员的角度介绍上述内容,核心内容为7个项目,后续完成的时候也会更新相应的笔记。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Doraemonzzz!
评论
ValineLivere