笔记:深入理解计算机系统(一)

ShadowC

| 本文阅读量: -

计算机基础补完计划 - 自学计算机科学相关课程。此部分为深入理解计算机系统及相关视频课程的学习笔记。

课程目标:了解软硬件及其关系、了解并掌握如何编写高性能的代码。

参考视频: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

  1. 计算机如何组织运行?(使其表现为并行工作)
  2. 跟踪(Keep track of)调用函数(call a method)的过程
  3. 返回(Return)的实质;
  4. 如何同时运行多个用户程序,使其共享相同的计算机和内存