- 信息就是:位数据+上下文
- 编译的过程:
- 总线:贯穿系统的一组电子管道,携带信息字节并在各个部件中传递
- IO设备:系统与外部联系的通道
- 主存:临时存储设备,用来存储程序和程序处理的数据。一般是动态随机存取存储器(DRAM)。
CPU:中央处理器单元,用来解释执行存储在主存中的程序的引擎。
其核心是大小为一个字的程序计数器(PC)。
CPU通过总线和主存以及IO设备连接。SRAM:静态随机访问存储。
较大的存储设备运行较慢,较快的设备造价较高,在寄存器中存取比在主存中存取快100倍甚至更高。这就有两个方向,加快处理器运行速度或者加快主存运行速度是两个方向,前者更容易且便宜。系统设计者 设计了高速缓存存储器(cache)来存放近期可能需要的信息。所以设计了类似如下的存储器结构,L1速度和寄存器差不多,L2速度会慢几倍。
操作系统的抽象表示:
文件是对IO设备的抽象表示,虚拟内存是对主存和IO的抽象表示,进程是对处理器、主存和IO的抽象表示。
- 虚拟内存:为每个进程提供假象,每个进程面对的地址都是固定的。
- 程序代码和数据:对所有程序(进程),代码是从同一固定位置开始的,紧接着是C全局变量对应的位置,代码和数据区是按照可执行目标文件进行初始化的。
- 堆:运行时malloc和free这样申请的空间,可以变化的空间。
- 共享库:存放C标准库或者数学库这样的共享库代码和数据区域。
- 用户栈:来实现函数的调用,和堆一样,也是可以动态变化大小的。没调用一个函数,栈就会增加,返回时,栈就会收缩。
- 内核虚拟地址:为内核保留,不允许程序读写这个区域。
- 阿姆达尔定律描述一般的性能提升。
超线程:同时多线程,允许一个CPU执行多个控制流的技术。
32位系统和64位系统的在数据类型上的差异主要是在long和指针的大小不一样.
- 小端的意思是低位存储在低地址,大端相反.
- 有符号数到无符号数的隐身转换会导致很多问题,杜绝的方法就是尽量不使用无符号数,除了C之外很少有语言支持无符号数