计算机基础补完计划 - 自学计算机科学相关课程。此部分为深入理解计算机系统及相关视频课程的学习笔记。
课程目标:了解软硬件及其关系、了解并掌握如何编写高性能的代码。
参考视频:The Hardware/Software Interface Class by Luis Ceze and Gaetano Borriello
1. The big picture
hardware: physical part of computing device
software: thing made of bits, running on top of hardware.
There are many layers of abstractions between the hardware and the software.
老生常谈的C->Assembly code ->Machine Code
变迁,实质上是多层抽象。
计算机的设计就是通过多层抽象,封装实现细节,简化设计和思考的难度,同时了解抽象的过程也有利于编写高效的代码。
2. Roadmap
后续内容主要包括:
- 数据如何在内存中组织
- 如何表示数字,数字如何编码
- 机器码的定义(Instruction, 指令)
- x86汇编代码
- 追踪程序如何运行&栈结构
- Array & Structs
- 内存和缓存(Memory & caches)
- 进程(Process)
- 虚拟内存
- 内存分配(memory allocation)
- Java & C comparison
Little Theme 1. Representation
所有的数字系统都是用0-1序列表示的,与电子器件中的高低电平对应。
数字系统中的Everything指的是数字、字符、指令、指针(基本可以囊括并组成计算机系统中的软件部分)。
上述内容的编码需要存储在计算机系统中,存储介质包括寄存器、缓存、内存、硬盘(外存)等,并且这些内容均是可寻址(Addressable)的,可寻址意味着能够通过地址找到、可以找到新的空间存储、数据不再使用时可以回收。
Little Theme 2. Translation
我们认知程序、数据、计算机中的0-1序列是三个不同层次的内容,其中相隔甚远,因此需要编程语言(Languages)来描述我们真正想要的。
这种从语言到机器码的翻译有三个方面:逐字翻译、短语结构、语法分析。
Little Theme 3. Control Flow
- 计算机如何组织运行?(使其表现为并行工作)
- 跟踪(Keep track of)调用函数(call a method)的过程
- 返回(Return)的实质;
- 如何同时运行多个用户程序,使其共享相同的计算机和内存