Overview
Great Reality
知识概览:
- Ints are not Integers, Float are not Reals
数据的表示与存储
- You've Got to Know Assembly
汇编
- Memory Matters
内存
- There’s more to performance than asymptotic complexity
渐进复杂度分析
- Computers do more than execute programs
输入输出、网络
课程内容概要
三个主题
表示(Representation)
-
不同数据类型(带符号整数、无符号整数、浮点数、数组、结构等)在寄存器或存储器中如何表示和存储?
-
指令如何表示和编码(译码)?
-
存储地址(指针)如何表示以及如何生成复杂数据结构中数据元素的地址?
转换(Translation)
-
高级语言程序对应的机器级代码是怎样的?
-
执行控制流(Control flow)
-
计算机能理解的“程序”是如何组织和控制的?
-
如何在计算机中组织多个程序的并发执行?
-
逻辑控制流中的异常事件及其处理
-
I/O操作的执行控制流(用户态→内核态)
内容组织
两大部分:
第一部分 系统概述和可执行文件的生成(表示和转换)
-
计算机系统概述
-
数据的机器级表示与处理
-
程序的转换及机器级表示
-
程序的链接
第二部分 可执行文件的运行(执行控制流)
-
程序的执行
-
异常控制流
-
I/O操作的实现
计算机系统层次
Hardware/Software Interface 软硬件接口:
ISA(Instruction Set Architecture)指令集体系结构
冯诺依曼结构:
存储程序的核心思想
8086 CPU
IP 存放下一步要执行的指令
关于 8086 CPU 的详细内容还可以看这些文章:
CPU的历史疑惑 - 当初8086cpu为什么不直接设计成32根地址总线呢,弄成20根,用段+偏移的寻址方式不觉得尴尬吗? - 知乎
典型的系统硬件构成
Hello程序被启动后,计算机的动作过程如下:
Shell程序读取字符串“./hello”中各字符到寄存器,然后存放到主存;
“Enter”键输入后,操作系统内核(载入程序)根据主存中的字符串“hello”到磁盘上找到特定的hello目标文件,将其包含的指令代码和数据(“hello, world\n”)从磁盘读到主存,并将控制权转交给hello程序,即将hello程序的第一条指令的地址送到PC中;处理器从hello主程序的指令代码开始执行;Hello程序将“hello, world\n”串中的字节从主存读到寄存器,再从寄存器输出到显示器上。