信息就是位+上下文
由ASCII字符构成的文件称文本文件,其他文件叫二进制文件
从源文件到目标文件的过程:
1.预处理阶段:将 include <stdio.h> 代表引用的标准输入输出系统头文件的代码内容直接插入程序文本中,得到hello.i文件
2.编译阶段:将预处理后的hello.i翻译成汇编的文本文件hello.s
3.汇编阶段:将汇编文件hello.s翻译成机器语言指令hello.o
4.链接阶段:hello.o还不能正常工作,因为其引用了printf ,其存在于预先编译好的printf.o文件中,我们要将其使用连接器合并到我们的hello.o文件中,最终得到了hello可执行程序文件
hello.c——>hello.i——> hello.s——>hello.o——>hello.exe
每个I/O设备都通过一个控制器或适配器与I/O总线相连
控制器:I/O设备本身或者系统的主印刷电路板上的芯片组
适配器:一块插入主板插槽的卡
主存:临时存储设备,用来存放程序和程序处理的数据,由一组动态随机存取存储器芯片组成
处理器:中央处理单元(CPU),是解释存储在主存中的搜索引擎。核心是一个大小为一个字的存储设备(或寄存器),称为程序计时器(PC)。
处理器的指令集架构和处理器的微体系结构:指令集架构描述的是每条机器代码指令的效果,而微体系结构描述得是处理器实际上如何实现
存储器层次结构的主要思想是上一层的存储器作为低一层存储器的高速缓存。所以存储设备划分层次结构为:CPU寄存器位于顶部,紧接着多层的硬件高速缓存存储器,DRAM主存和磁盘存储器
操作系统是应用程序和硬件之间插入的一层软件,功能是:
1.防止硬件被失控的应用程序滥用
2.向应用程序提供简单一致的机制来控制复杂而又通常大小不同的低级硬件设备。操作系统通过抽象实现这一过程
三个抽象是:
1.文件对I/O设备的抽象
2.虚拟内存是对主存和磁盘的抽象
3.进程是对处理器,主存和I/O设备的抽象
进程:
进程是操作系统对一个正在运行程序的抽象,系统可同时运行多个进程
并发运行:一个进程的指令和另一个进程的指令是交错执行的
多核处理器同时能执行多个程序
处理器在进程间切换称上下文切换
shell通过调用一个专门的函数,即系统调用,来执行我们的请求,系统调用会将控制权给传递给操作系统。操作系统保存shell进程的上下文,创建一个新的进程及其上下文,将控制权交给新进程。新进程终止后,操作系统恢复shell进程的上下文,将控制权传回给它,shell进程等待下一命令输入
从一个进程到另一个进程的转换是由操作系统内核管理的
实现进程这个抽象概念需要低级硬件和操作系统之间的密切合作
线程:
一个进程实际可由多个线程组成,每个线程都运行在进程的上下文
Amdahl定律:
若系统执行某应用程序需要的时间为T0,系统某部分执行时间为比例为a,该部分性能提升比为K,现在需要时间为T1 = [(1-a)+a/k]*T0
加速比为s = 1/[(1-a)+a/k]
并发与并行:
并发指同时具有多个活动的系统;并行指用并发来使一个系统运行的更快
线程级并发:
线程是一个进程可以执行多个控制流
多核处理器是将多个CPU集成在一个集成电路芯片
超线程允许一个CPU执行多个控制流技术,超线程可以在单个周期基础上决定要执行哪个线程,减少了执行多任务时模拟并发的需求
指令集并行:
现代处理器可以同时执行多条指令的属性称指令集并行。
处理器达到比一个周期执行一条指令更快的执行效率称为超标量
单指令,多数据并行:
允许一个指令产生多个可以并行执行的操作,称单指令,多数据,即SIMD