深入理解计算机 – 第一章为什么系列与要点

Spread the love

计算机 是怎样运行的
计算机的组成由 总线,IO设备,主存,处理器组成
其中CPU 通过对【寄存器】和【算数逻辑单元ALU】对数据和地址进行 加载,存储,操作,跳转对寄存器覆盖,存储,计算结果,调到某个寄存器进行数据处理

为什么计算机需要使用二进制
电子原件 高电压,低电压,更稳定的获取,高位1,低为0,这个时候需要通过一套二进制编码进行各种的16进制,10进制转化

为什么高速缓存至关重要
因为 磁盘 < 主存 < 高速缓存器 < 寄存器 依次递减且越接近CPU速度越快费用越高(精密制作) 这里音声了高速缓存的局部性原理,即常访问的数据和代码
为什么需要操作系统 更好管理 硬件资源,从而是进程更好使用硬件资源,抽象出一个标准出来,并且防止硬件被应用程序滥用

为什么需要进程
程序是一段字符,通过一定的语法形式,程序逻辑,通过编译器,编译对应平台的软件,软件在操作系统上运行称为程序
这个程序运行就是按照功能逻辑进行数据、显示、存储等操作的一个进程

进程是怎样运行
应用程序产生的进程,通过操作系统开放的系统调用,进行用户与内核态的切换,读取数据到CPU进行运算
为什么需要虚拟内存
给每个进程,独占主存的假象,因为内存是有限的,甚至无法把整个程序或数据都加载到内存里面,这个时候每个进程就会形成一个虚拟地址空间,这里由 程序代码和数据 堆,用户在运行时动态分配内存 共享库,与多个动态库,共享代码与数据的 栈,用于调用函数
为什么需要网络通信
能够超越地域空间进行数据交换
Amdahl 定理,标识对提升性能所带来的效果

Told 当前速度,k 为 部分性能提升的比咧,aTold 初始化所需时间,现在所需的时间 (aTold)/k Tnew = (1-a)Told + (aTold)/k = Told[(1-a)+ak
计算加速比 S =Told / Tnew =  1/(1-a) + a/k
意思说 想要加速整个系统,必须提升全系统中相当大的部分速度,当k无限大的时候 S = 1/(1-a) 标识

并发与并行
并发:同一时刻只运行一个任务,有多个可能在等待执行
并行:同时运行多个任务,同时执行
线程级并发,一个进程执行多个控制流
指令级并行,流水线执行,也就是同一个CPU运行时钟中,不同阶段的硬件加载不同任务的数据
单指令、多数据并行,处理器特殊硬件,运行一条指令产生多个并行执行操作

参考资料
https://www.cs.cmu.edu/~213/
在线课程 代码,ptf http://www.cs.cmu.edu/afs/cs/academic/class/15213-m20/www/schedule.html
学习资料 http://csapp.cs.cmu.edu/3e/students.html
练习题 http://csapp.cs.cmu.edu/3e/labs.html
深入理解计算机图 http://csapp.cs.cmu.edu/3e/figures.html
unix学习 http://heather.cs.ucdavis.edu/~matloff/unix.html
代码 http://csapp.cs.cmu.edu/3e/code.html
Linux/UNIX系统编程手册 pdf https://github.com/flycrane/kevin/blob/master/The%20Linux%20Programming%20Interface/Linux%E7%BC%96%E7%A8%8B%E6%8E%A5%E5%8F%A3%20-%20Linux%E5%92%8CUNIX%E7%B3%BB%E7%BB%9F%E7%BC%96%E7%A8%8B%E6%89%8B%E5%86%8C.pdf
Guide to GDB http://beej.us/guide/bggdb/