CSAPP第一章·重要概念

CSAPP第一章

第一章属于导论部分,重点解释一些概念


硬件组成

总线

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

I/O设备

每一个IO设备通过一个控制器或适配器与I/O总线相连接

主存

1 主存(在一般计算机下主存就是内存,有些服务器上会有区别)
2 是由一组动态随机存取存储器芯片(DRAM)组成,
3 在处理器执行程序时用来存放程序和程序处理的数据

内存VS外存

    1 存储器分为内存和外存
    2 与CPU经过总线连接的是内存
      程序被执行时,其指令代码和运行数据主要存放在内存中
    3 除了内存和CPU缓存外的存储器称为外存,例如磁盘硬盘等

处理器CPU

1 处理器,CPU,包含寄存器、算术逻辑单元ALU、程序计数器PC
2 在任何时候,PC都指向主存中的某条指令地址
3 PC是CPU的核心,大小为一个字节

一个CPU可以被称为一个核,

单核CPU、多核CPU、多个CPU

1 单核CPU:一个CPU集成在一块芯片中,并发执行进程(并发概念见下)
2 多核CPU:多个CPU集成在一个芯片中
          每个CPU分配独立的核执行自己的操作系统
          每个核有自己的寄存器、ALU
          每个CPU都并发执行进程
          这些CPU之间通过总线交互并共享缓存(共享哪一级缓存还没有深究)
          CPU之间并行
3 多个CPU:多个单核CPU
          每一个CPU都需要有较为独立的电路支持
          CPU之间通过总线通信
          每个CPU有自己独立的Cache,如果要共享数据需要在好几个Cache里同时存在

高速缓存

机器指令执行流程

1 机器指令最先存放在外存磁盘上
2 程序加载时,被复制到主存中
3 处理器开始运行程序时,指令从主存复制到处理器中

这样的复制就被称为开销,尤其对于处理器与主存之间读写速度的差异(处理器读写文件优于主存超过100倍),设计更小更快的存储设备作为暂时区域,用来存放处理器近期可能需要的信息,即高速缓存处理器(cache)

高速缓存层次结构

高速缓存是在处理器和主存之间插入一个更小更快的存储设备。
存储器层次结构
存储器层次结构的主要思想是上一层的存储器作为下一层的高速缓存
例如L1是L2的高速缓存,在这里重申什么是高速缓存,L2是L3的高速缓存意味着L2将读取L3的一些数据提前缓存下来,为L1读取做准备
高速缓存是插入到两个存储器之间的,三层结构


操作系统

操作系统是应用程序和硬件之间的一软件
所有应用程序对硬件的操作都要通过软件
涉及主要概念 进程 虚拟内存 文件 虚拟机

其中进程 虚拟内存 文件都是对操作系统的抽象
虚拟机包括操作系统,和其他组件处理器等

虚拟机

虚拟机不多说了,它是对整个计算机的抽象,包括操作系统、处理器程序

文件

文件是对I/O设备的抽象表示,就是字节序列

进程

进程是操作系统对一个正在运行的程序的抽象表示

一个系统上可以同时运行多个进程(一个进程是一个程序的执行过程),一个进程中有多个线程的执行单元

并发 并行

1 并发:

A 并发运行,一个进程的指令和另外一个进程的指令是交替运行的;
B 无论是单核CPU还是多核CPU,一个CPU都是通过处理器在进程之间切换实现并发执行多个进程的
C 操作系统把这种交错执行的机制称为上下文切换,从一个进程到另外一个进程有操作系统内核管理,内核是系统管理全部进程所用代码和数据结构的集合,是操作系统代码常驻主存的部分。

线程级并发 进程级并发

进程级并发:同时有多个程序执行的系统

线程级并发:一个进程中执行多个控制流(Ex:允许多个用户同时与系统交互),每个线程运行在同一个进程中,共享同样的代码和全局数据
同样多线程下有线程安全问题:

线程安全:
线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。

  • 单核CPU下:处理器在多个任务之间切换
  • 多核CPU 下:引出超线程的概念

超线程(同时多线程)
允许一个CPU控制多个控制流的技术
常规处理:在一定时钟周期做一次线程切换
超线程:在单个周期的基础上,比较哪个执行哪个线程可以更好的处理资源,就去执行哪一个线程(不一定要切换,如果执行当前线程比较好就继续执行)

2 并发VS并行

并发是有处理多个任务的能力,不一定要同时。
并行是同时处理多个任务的能力。
最关键的点就是是否同时

3多线程VS高并发

高并发:短时间内接收到大量请求的情况
多线程:是一种技术方法,为了应对高并发情况的一种技术手段

虚拟内存

虚拟内存是一种将硬盘的一部分当做内存使用的技术,在逻辑上扩充物理内存

虚拟地址空间

虚拟地址空间:为每一个进程分配的虚拟内存空间,每一个进程分配的都是一致的
虚拟地址空间
虚拟地址空间主要分为两部分,地址由底到顶增大
- 用户空间:由底到上分别是:程序代码和数据、堆(虚拟内存直接相关)、共享库(基本库数学库等)、栈(编译栈实现函数调用)
- 内核空间:在地址空间的顶部,不允许程序读写这个区域

虚拟寻址过程:

基础:

1 bit(比特)是计算机的最小单位,一个比特就是0/1
2 byte(字节) 一个字节是8个比特,他是I/O操作的最小单位,在内存中会将8个bit作为一组形成一个byte,进行读写操作时直接读取整个byte,不会单独读取byte中的某一个bit(单个的bit也没有意义,只有8位组合一起形成字节才有表示的意义啊啊啊啊)
3 在程序中,程序是以字节序列存储在文件中的,每个字节都有一个整数值为之对应
4 GB MB KB这些的B都是Byte
5 xx位总线下的一位是由一个二进制数字表示,每个地址对应的是内存中的一个Byte

寻址过程:

CPU通过虚拟地址寻址,虚拟地址的长度由地址总线位数决定。
Ex:32位地址总线,即对应 1024*1024*1024*4 = 4GB的虚拟内存
其中2G用户空间,2G内核空间

猜你喜欢

转载自blog.csdn.net/qq_25729137/article/details/81747814