导图社区 深入理解计算机系统-第一章-计算机系统漫游
深入理解计算机系统-第一章-计算机系统漫游吐血整理,图文详尽。
汤子瀛 - 计算机操作系统(第四版)第一章 操作系统引论思维导图。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
深入理解计算机系统
计算机系统漫游
计算机系统是由硬件+系统软件组成
信息就是位(bit) + 上下文(context)
bit
为0或1
context
个人理解: 程序在运行时依赖的,且需要在程序之外定义的变量,的一个合集。
8bit=1byte(字节)
大部分现代系统都使用ASCII标准来表示文本字符,是用唯一的单字节大小的整数值来表示每一个字符
只由ASCII字符组成的文件成为文本文件,所有其他的文件都称为二进制文件
系统中的所有信息——包括磁盘文件,存储器中的程序,存储器中存放的用户数据以及网络上传送的数据,都是由一串位表示的。区分不同数据对象的唯一方法,是我们读到这些数据对象时的上下文
程序被其他程序翻译成不同的格式
比如用C语言写了个Hello World,文件名为Hello.c,为了在系统上运行,每条C语句都必须被其他程序转化为一系列的低级机器语言指令,然后这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件的形式存放起来,目标程序也成为可执行目标文件。
如unix中,执行gcc -o hello hello.c
由GCC编译器驱动程序读取源文件hello.c并翻译成一个可执行目标文件hello
hello.c -> 预处理器(cpp) -> hello.i(被修改的源程序(文本)) -> 编译器(ccl) -> hello.s(汇编程序(文本)) -> 汇编器(as) -> hello.o(可重定位目标程序(二进制)) -> 链接器(ld) -> hello(可执行目标程序(二进制))
编译系统的四个阶段
预处理阶段
修改原始的C程序文本,以便进一步处理,比如#include <stdio.h>告诉预处理器读取系统头文件stdio.h的内容,并把它插到程序文本中,结果就得到了另一个处理过的C程序,通常是.i作为扩展名
编译阶段
翻译为汇编语言,汇编语言每条语句都以一种标准的文本格式确切的描述了一条低级机器语言指令
汇编阶段
汇编器(as)将上一步处理过的汇编版本程序翻译为机器语言指令,把这些指令打包成可重定位目标程序(relocatable object program), 处理过后,该文件是二进制文件,不是文本文件
链接阶段
链接器(ld)会把上一步处理完的程序中的那些需要从其他库里调用函数合并到一起,最后就得到可执行目标文件(即可执行文件)。
了解编译系统如何工作是大有益处的
好处有
优化程序性能
理解链接时出现的错误
避免安全漏洞
处理器读并解释存储在存储器中的指令
一个编译好的可执行文件,通常存放在磁盘上,要想在unix系统运行,可以将它的文件名输入到称为外壳(shell)的应用程序中,比如在shell中输入"./hello"
外壳(shell)
是一个命令行解释器,它输出一个提示符,等待你输入一个命令行,然后执行这个命令
系统的硬件组成
Intel Pentium为例
PC
程序计数器
ALU
算术/逻辑单元
CPU
中央处理单元
USB
通用串行总线
总线(bus)
携带信息字节,并负责在各个部件间传递,通常,总线被设计成传送定长的字节块,也就是字(word), 字中的字节数(即字长),是一个基本的系统参数,在各个系统中情况不尽相同。现在的大多数机器的字长,有的是4个字节(32位(4 * 8bit=32bit)),有的是8个字节(64位)
I/O设备
输入/输出(I/O)设备是系统与外部世界联系的通道。每个I/O设备都通过一个控制器,或者适配器与I/O总线相连,控制器指在主板上原有的芯片组,适配器指插在主板插槽上的卡,功能都是在I/O总线和I/O设备之间传递信息
主存(main memory)
是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据
由一组动态随机存取存储器(DRAM)芯片组成
处理器(CPU)
CPU- Center Processing Unit中央处理单元
是解释(或执行)存储在主存中指令的引擎
处理器的核心是一个字长的存储设备(或寄存器),称为程序计数器(PC),在任何时刻,PC都指向主存中的某条机器语言指令
从系统通电一直到断电,处理器一直在不断执行(从PC指向的存储器处读取指令,然后解释指令中的位,执行该指令指示的简单操作)程序计数器指向的指令,再更新程序计数器,使其指向下一条指令
CPU执行的操作围绕着主存,寄存器文件(register file)和算术/逻辑单元(ALU)进行
执行的操作包括
加载
把一个字节或者字,从主存复制到寄存器,并覆盖寄存器原来的内容
存储
把一个字节或者字从寄存器复制到主存的某个位置,并覆盖这个位置上的内容
操作
把两个寄存器的内容复制到ALU,ALU对这两个字做算术操作,并将结果存放到一个寄存器中,覆盖该寄存器中原来的内容
跳转
从指令中,抽取一个字,并将这个字复制到程序计数器中,并覆盖原PC中的值
高速缓存至关重要
寄存器速度> 内存 >> 硬盘
由于CPU和主存之间的速度差距太大,所以在CPU中存在高速缓存,分为L1, L2,L1一般为数万字节,访问速度几乎与寄存器一样快,L2一般为数十万到百万字节,比L1慢5倍左右,但是仍然比直接访问主存快5-10倍,高速缓存通过一条特殊的总线连接到CPU,L1,L2高速缓存使用一种叫静态随机访问存储器(SRAM)的硬件技术实现的
比较新的,处理能力更强大的系统甚至有L3高速缓存
存储设备形成层次结构
每个计算机系统中的存储设备都被组织成一个存储器层次结构
操作系统管理硬件
操作系统基本功能
防止硬件被失控的应用程序滥用
向应用程序提供简单一致的机制来控制复杂而又五花八门的低级硬件设备
所有应用程序对硬件的操作都需要经过操作系统
操作系统为了实现基本功能,对处理器,主存,I/O设备做出了抽象概念,分别是:进程,虚拟内存,和文件
进程
是操作系统对一个正在运行的程序的一种抽象,一个系统上可以同时运行多个进程
在大多数系统中,需要运行的进程数是多于可以运行它们的CPU个数的
并发运行,是说一个进程的指令和另一个进程的指令是交错执行的,这种机制称为上下文切换
操作系统上下文
包括程序计数器和寄存器文件的当前值,以及主存的内容。
上下文切换
保存当前进程的上下文,并恢复新进程的上下文,然后将控制权传递到新进程
线程
一个进程可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据
虚拟存储器
为每个进程分配的主存空间,称为虚拟地址空间
每个进程看到的虚拟地址空间由大量准确定义的区构成,每个区都有专门的功能
从底往上看,分为
程序代码和数据
从同一固定地址开始,在进程一开始运行时,就被规定了大小
堆
堆与代码数据区不同,可以动态扩展和收缩
共享库
存放像C标准库和数学库这样的代码和数据区
栈
子主题