深入理解计算机系统-第一章

第一章主要是对计算机系统的一个概述,以及计算机系统与IO设备等如何交互,计算机硬件的抽象等。

1.1 信息 = 位 + 上下文

计算机使用二进制的原因:电子电路采用的基本元件只有通和断两种状态,一切运算在计算机硬件内部都会转换为元件的通和断的状态,使用二进制作为电子计算机的运算语言比较容易实现。

位 bit 表示信息的最小单位只能是0或1
字节 byte 等于8个bit 是计算机数据处理的基本单位

系统中所有的信息:磁盘、程序、用户数据等都是一串bit表示的,在不同的上下文下,同一串bit序列表示的意义可能不同 所以 信息 = 位 + 上下文


1.2 程序的在系统中的编译过程

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


预处理器:读取stdio.h内容 插入程序文本生成 hello.i
编译器:生成汇编程序 hello.s
汇编器:编译成机器语言指令 生成可重定位目标程序 hello.o
链接器:合并调用的函数 例如printf函数已经提前生成了printf.o,得到可执行目标文件hello,可以加载到内存有系统执行

汇编语言:使得不同的高级语言经过编译之后都能得到相同语法、格式的输出语句。


1.3 处理器解读指令集

运行编译后的可执行目标文件 hello

./hello

在shell中输入上述指令,如果指令不是内置的shell命令,就会认为是一个可执行文件 ,加载到内存并运行。

1.3.1系统硬件组成


1. 总线
贯穿整个系统的一组电子管道,称作总线,携带信息字节并在各个部件之间传输

2. I/O设备
I/O设备(输入/输出设备)是系统与外部世界的联系通道,I/O设备通过控制器或适配器与I/O总线相连,在通过I/O桥与系统总线或内存总线相通

3. 主存
是一个临时存储设备,是由一组 DRAM(动态随机存储器)芯片组成,
用来在处理器处理程序时,存储程序和程序处理的数据,逻辑上是一个线性的字节数组。

4. 处理器
即CPU,是解释、执行存储在主存之中的程序的引擎
内部包括寄存器文件,由多个寄存器组成,存储数据;
程序计数器(PC)大小一个字 对应内存中的一个地址,指向主存中某条机器指令的地址
ALU 逻辑运算单元
处理器从通电开始就在不停的执行程序计数器指向的指令,执行完毕PC指向下一条指令
- 加载:从主存中读取数据到寄存器
- 存储:从寄存器读取值覆盖内存中的值
- 操作:复制两个寄存器的内容到ALU进行逻辑运算,结果存储到一个寄存器中
- 跳转:从指令本身中抽取一个字,并将字复制到程序计数器中,覆盖原有值

ps: 一个字是多大 第二章中会介绍
每台计算机都有一个字长,指明指针数据的标称大小
字长为n位 ,一个字的大小就是2^n,可表示的范围即虚拟地址范围 0-2n-1,程序最多访问2n字节。(字节是最小寻址单位 所以是范围*字节)
32位字长机器 2^32 4GB
64位字长机器 2^64 虚拟地址空间 16EB
大多数64位机器可以兼容32机器编译的程序 称为 向后兼容

1.3.2 hello程序运行过程

1.从shell中输入 ./hello,将字符读入寄存器,存储到主存中
2.输入回车 shell程序认为输入结束,shell开始执行一系列命令来加载可执行的hello文件
3.将编译后的hello文件的代码、数据从磁盘复制到主存 (利用了直接存储器存取 DMA 数据不经过CPU 直接从磁盘到内存)
4.CPU开始执行hello文件对应的机器指令,将hello world字符从寄存器复制到显示器输出


1.4 高速缓存 通过特殊总线直接连接处理器 SRAM

程序执行过程中很大一部分时间都是花费在数据的复制上,
磁盘——>内存
主存——>寄存器
寄存器——>I/O设备
存储设备容量越大,存储设备运行越慢。所以磁盘与主存之间、处理器与主存之间读取速度的差距非常大
针对处理器与主存之间的差异,系统设计者采用了更小更快的存储设备,称为高速缓存存储器,作为暂时存储区域,存储处理器近期可能需要的信息

现代处理器中的缓存 L1、L2、L3

1.5 存储设备层次结构

存储器分类:

  • 静态随机存取存储器(SRAM)是随机存取存储器的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持,例如CPU高速缓存

  • 动态随机存取存储器(DRAM)里面所储存的数据就需要周期性地更新,例如主存

  • 只读存储器(ROM)以非破坏性读出方式工作,只能读出无法写入信息。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器 例如电脑磁盘

1.6 操作系统对硬件的管理

操作体统是 应用程序、软件和硬件之间的中间层

向应用程序提供了简单、一致的机制来操控复杂的硬件

操作系统对系统硬件进行了抽象

  • 进程
    进程是操作系统对正在运行的程序的一种抽象,感觉同时可以运行多个进程,而每个程序都好像在独占的使用处理器。
    单核CPU 同一个时刻只能运行一个进程,同时运行多个是通过进程切换来交错运行来实行(上下文切换),因为CPU计算速度远超与文件读取、网络传输等任务。
    多核CPU 则在同一时刻可以运行多个进程
    上下文包含许多信息,包括PC、寄存器文件和主存中的内容,上下文切换就要报错当前进程的状态,加载新进程的上下文,由操作系统内核(kernel)进行,内核不是一个独立的进程,是系统全部进程所用代码和数据结构的集合

  • 线程
    线程是操作系统可识别的最小执行单元
    现代操作系统中一个进程分为多个线程,这些线程共享该进程的上下文——>引发线程安全问题
    多处理器时,多进程可以使得程序运行的更快

  • 虚拟内存
    虚拟内存是主存的抽象概念,让每个进程都有一种独占主存的错觉,每个进程看到的主存是一致的 称为虚拟地址空间

  • 文件
    文件就是字节序列,每个I/O设备磁盘、键盘、显示器设置网络都可以视为文件,系统中的输入输出都通过调用系统函数来读写文件来进行。

1.7 网络通信

随着Internet的出现现代操作系统经常通过网络个其他系统连接到一起。网络可以视为I/O设备。

系统可以从主存复制一段信息到网络视频日期发送到另一台机器
也可以从网络适配器读取其他机器发来的数据

原文地址:https://www.cnblogs.com/shinyrou/p/13141197.html