计算机导论学习(1)——概述
课程课件链接:15-213 Lec1:Overview
课程主题
学习系统知识。
硬件(处理器、内存,磁盘,网络设备)和软件(操作系统,编译器,库,网络协议)如何结合支持应用程序的执行
完成该课程学习后可以获得:
- 成为一个更加高效的程序开发者
- 更加高效的找到和消除bug
- 能够理解和调优程序性能
- CS后续专业课程的基础
为CS专业后续课程(像编译器,操作系统,网络,计算机架构,嵌入式系统,存储系统,计算机安全等等)的基础课程。
理解事物是如何工作的(工作机制)非常重要
在大部分CS课程中强调抽象,像:
- 抽象数据类型
- 渐近分析
- …
然而这些抽象有其局限性, 尤其存在bug的情况下,因此就需要理解底层实现的细节,因为抽象接口有时不能提供所需要的控制或性能需求。
课程学习方法
大部分的CS专业的系统课程学习方法是通过课程的学习,然后从零实现一个简化版的系统。例如:
-
计算机架构
verilog语言实现一个流水线处理器 -
操作系统
实现一个简单的可执行操作系统 -
编译器
编写一个简单语言的编译器 -
网络
实现和仿真网络协议栈
而该计算机系统导论的学习是从程序员的角度了解更多关于底层系统的知识,然后成为一个更加高效的软件开发者。
课程内容
程序和数据
主要内容
- 比特操作,算术,汇编语言程序
- C语言控制和数据结构表示
- 架构和编译器方面的内容
相关实验
- Lab0(C programming Lab): 测试C语言能力
- Lab1(datalab): 操作比特
- Lab2(bomblab): 拆除一个二进制炸弹
- Lab3(attacklab): 代码注入攻击方面的基础知识
分层存储架构
主要内容
- 内存技术,内存层次,缓存(cache),磁盘,…
- 架构和操作系统方面的内容
相关实验
- Lab4(cachelab): 构建一个cache仿真器,并对局部性进行优化
- 学习如何在开发的程序中利用局部性原理
虚拟内存
主要内容
- 虚拟存储,地址转换,动态存储分配
- 架构和操作系统方面的内容
相关实验
- Lab5(malloclab): 编写自己的malloc接口
- 体验下系统级编程
异常控制流
主要内容
- 硬件异常,进程,进程控制,Unix信号,非本地跳转
- 编译器,操作系统和架构方面的内容
相关实验
- Lab6(tshlab): 编写一个自己的Unix shell
- 首次介绍并发(concurrency)
网络和并发
主要内容
- 上层和底层I/O网络编程
- Internet服务,Web服务器
- 并发,并发服务器设计,线程
- I/O复用机制(通过select方式)
- 网络,操作系统和架构方面的内容
相关实验
- Lab7(proxylab): 编写一个自己的Web代理
- 学习网络编程以及更多的关于并发和同步的知识。
注:
每个实验都有一个明确定义的目标(解决一个难题或者赢得比赛)。
通过完成实验学习新的概念和技能
课本
- [Computer Systems: A programmer’s Perspective, Third Edition)(http://csapp.cs.cmu.edu)
- The C Programming Language, Second Edition, Prentice Hall, 1988