这一章没有解决的问题 python
目录与重点内容:shell
编译系统数组
高速缓存器网络
操做系统数据结构
计算机系统的抽象多线程
Amdahl加速比定律公式架构
并发与并行并发
位,字节,字符,文本,ASCII, 文本文件,二级制文件,机器指令,可执行目标程序,编译器GCC(缺省),编译系统,预处理器,编译器,汇编器,连接,总线,I/O,主板,适配器,控制器,主存,DRAM,逻辑,处理器,程序计数器,寄存器,ALU,加载,存储,操做,跳转,指令集,高速缓存,操做系统,抽象,进程,多核,并发,上下文切换,内核,系统调用,控制权,线程,虚拟内存,虚拟地址空间,堆(缺省),共享库(缺省),用户栈(缺省),内核虚拟内存(缺省),加速比,Amdahl定律,并行,并发,线程级并发,多核,超线程,指令集并发,SIMD并行,虚拟机函数
#include <stdio.h> int main(){ printf("hello, world\n"); return 0; }
编译hello程序的过程
(1) 预处理阶段:插入头文件(2) 编译阶段:编译器翻译,包含main函数定义的汇编语言程序
main: subq $8, %rsp #一条低级机器语言指令 movl $.LCO, %edi call puts movl $0, %eax addq $8, %rsp ret
(3) 汇编阶段:汇编器翻译成机器语言指令,打包成可重定位目标程序(relocatable object program), 保存为二进制文件 (4) 连接阶段:连接器合并调用的printf函数,获得可执行目标文件
shell: 命令行解释器;运行hello程序,\(> ./hello\)
系统硬件组成
总线:总线传送定长的字节块(字,word),字长是基本的系统参数:32位系统是4个字节,64位系统是8个字节
I/O设备:每一个I/O设备都经过一个控制器(设备/系统主板上的芯片组)/适配器(插在设备/系统主板插槽上的卡)与I/0总线相连
主存:由一组动态随机存取存储器(DRAM)芯片组成。逻辑上,是一个线性字节数组。
处理器 (CPU):
模型 - 指令集架构。
下一条指令不必定和内存中刚执行的指令相邻。
4.1 核心 - 大小为一个字的寄存器,成为程序计数器(PC),PC指向主存中某条机器语言指令(的地址)。
4.2 寄存器文件(register file): 一个小的存储设备,每一个寄存器单个字长
4.3 算数/逻辑单元 (ALU): 计算新的数据和地址值
4.4 CPU在PC中指令要求下执行的操做:
加载 - 主存 -> 寄存器;
存储 - 寄存器到主存;
操做 - 两个寄存器 -> ALU运算 -> 一个寄存器;
跳转 - 指令复制到PC
加快从主存中复制到寄存器的速度。
多级高速缓存:L1, L2, (L3), ...
能够利用高速缓存将程序的性能提升一个数量级
操做系统两个基本功能:
(1)防止硬件被失控的应用程序滥用
(2)向应用程序提供简单一致的机制来控制复杂的低级硬件设备
所以,操做系统有如下抽象:
线程
一个进程由多个线程执行单元组成。线程运行在进程的上下文中(?),共享代码和全局数据。
虚拟内存
一个抽象概念。进程的虚拟地址空间以下(每一个进程看到的内存都是一致的):
地址由下往上增大。
简而言之,网络能够视为一个I/O设备。
实际加速比的计算:\(S = T_{old} / T_{new}, T_{new} = (1-\alpha)T_{old} + \alphaT_{old}/k\)
并发:通用概念,指同时具备多个活动的系统
并行:用并发使一个系统运行得更快
系统层次结构中由高到低的三个并行层次:
线程级(进程级?):多核处理器, 超线程/同时多线程
指令集并行:处理器同时执行多条指令 - 超标量(super-scalar)处理器
单指令、多数据(SIMD并行):可能是为了提升处理影像、声音和视频数据应用的执行速度。;编译器支持用特殊的向量数据类型来写程序。
如,为一组函数规定一个简单的应用程序接口(API)
计算机系统提供的一些抽象(在上述介绍的基础上增长"虚拟机"抽象):
8个位(比特) -> 1个字节 -> 程序中某个字符
ASCII标准:用惟一的单字节大小的整数值来表示每一个字符
文本文件:只由ASCII字符构成的文件。
二进制文件:不是文本文件的全部其余文件
(略)