漫游计算机系统(笔记)

以简单的c语言,hello world为例:

#include <stdio.h>
int main()
{
	printf("hello world");
	return 0;
}

1. 信息的存储和表示

计算机只存储两种文件:

  1. 文本文件(如hello程序的源码)
  2. 二进制文件(如hello程序的可执行文件)

信息表示单位:

  1. 一个0或者1,就是一个 位(比特)
  2. 8个比特就是一个 字节
  3. 不同的操作系统:32位操作系统,3个字节是一个 ;64位操作系统,8个字节是一个

注意:
计算机的信息是由一系列的字节序列构成,但是不同的上下文中,即使相同的字节序列可能会有不同的含义。

2. 程序是如何被编译的

漫游计算机系统(笔记) 源码的编译经历了四个阶段:

  1. 预处理阶段: 处理头文件
  2. 编译阶段: 翻译成汇编语言
  3. 汇编阶段: 将汇编语言编译成二进制文件
  4. 链接阶段: 将使用的库函数链接合并到程序中

3. 程序是如何被执行的

3.1 计算机的基本构成

1. 总线:
一组贯穿整个系统的电子通道,携带字节信息并负责在各个部件之间传递
2. io:
每个io设备通过控制器或适配器与io总线相连
3. 主存:
一个临时存储器,物理上由一组动态随机存取器芯片组成,逻辑上是一个线性字节数组
4. cpu:

1. 程序计数器(PC)
2. 寄存器文件(由多个寄存器组成)
3. 运算单元(ALU)

3.2 程序的执行

  1. 输入 ./hello 的过程

     整个输入过程中,输入内容经显示器,相关io设备, io总线,cpu的寄存器, 再过io总线,最后将命令存入到主存中。
    
  2. 输入完毕回车后

     系统将hello程序通过相关io设备读入主存中,加载完毕后执行程序指令,最后再由 主存, 相关io设备, io总线, cpu寄存器, 等io操作将“hello world”传递到显示器。
    

总结:
可以看出一个简单的程序,计算机将大量的处理都花在了io的操作上。所以提高io性能是提高计算机效率的一个重要方法。可以通过缓存来提高io性能。

4. 计算机的存储

计算机的存储是有一定层次的,呈金字塔式分布。

针对cpu和主存之间的io差异,设计了高速缓存器 L1, L2, L3,它们依次速度越来越慢,容量越来越大。

5.操作系统的基本功能

5.1 两个基本功能

  1. 防止硬件被失控的程序滥用
  2. 为应用级软件提供操作硬件的一致接口

5.2 如何实现这两个功能

抽象
文件 是io设备的抽象
虚拟内存 是主存和磁盘io设备的抽象
进程 是cpu,主存 和 io设备的抽象

虚拟内存 提供了: 每个进程都独占主存 的假象。每个进程看到的内存都是一样的。
漫游计算机系统(笔记)
内核虚拟内存对程序是不可见的,程序不能读写这里的数据。

6. 并行与并发

  1. 高级别的, 线程级并发
  2. 中间级别的, 指令级并发:同一时刻,可以处理多个指令
  3. 最低级别的, 单指令多数据并行:一个指令同时处理多个 数据对 的运算