源程序实际上就是一组由0和1(又称比特)组成的一个位序列,8个位组成一个字节,每个字节表示源程序中的某些文本字符。
文本文件只由ASCII字符构成的文本;所有其他的文件称为二进制文件。
在Unix系统上,源文件到目标文件的转化由编译器经过四个阶段完成:
预处理阶段:预处理器(CPP)加载一些头文件到原始的C程序中,组成的新C程序以“.i”为扩展名;
编译阶段:将程序从 "xxx.i" 翻译到 "xxx.s";
汇编阶段:将 "xxx.s" 翻译成机器语言指令并打包成可重定位目标程序,并保存到 "xxx.o" 文件中,这是一个二进制文件;
连接阶段:将程序中调用的一些库函数与"xxx.o"程序进行合并,最终生成可执行目标文件"xxx",可被加载到内存由系统执行。
要想在Unix系统中运行该可执行文件,可以将其文件名输入到shell的程序中。
总线:贯穿整个系统的一组电子管道。它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字。字中的字节数(即字长)是一个基本的系统参数,各个系统中都不尽相同。现在大多数机器字长是4字节(32位)或8字节。
I/O设备:是系统与外界联系的通道;通常系统包括四个I/O设备:作为用户输入的键盘、鼠标,作为用户输出的显示器,以及用于长期存储数据和程序的磁盘驱动器(磁盘)。每个I/O设备通过一个控制器或适配器与I/O总线相连。
主存:临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。
中央处理单元: 简称处理器,是解释存储在主存中的指令的引擎。
高速缓存存储器(cache,memory)的出现是为了调节处理器与主存之间的传输差异。
寄存器——>高速缓存——>主存——>本地二级存储——>远程二级存储
操作系统(OS):可以认为是插入在应用程序和硬件之间的一层软件,所有的应用程序对硬件的操作都必须通过OS。
基本功能有两个:1.防止硬件被失控的程序滥用;2.向应用程序提供简单一直的机制来控制复杂而又通常不相同的低级硬件设备。OS通过(进程、虚拟内存和文件)几个基本的抽象概念来实现这两个功能。
进程是OS对一个正在运行的程序的一种抽象。
并发运行:是一个进程的指令和另一个进程的指令是交错进行的。
一个CPU看上去都像是在并发地执行多个进程,主要是通过处理器在进程间切换来实现的。OS实现这种交错执行的机制称为上下文切换。当OS决定把控制权从当前进程转移到某个新进程时,就会进行上下文切换。
内核:不是一个独立的进程,而是系统管理全部进程所用代码和数据结构的集合。
一个进程实际上由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中。
是一个抽象的概念,它为每个进程提供一个假象,即每个进程都在独占地使用主存。每个进程看到的内存都是一致的,称为虚拟地址空间。
每个进程看到的虚拟地址空间由大量准备定义的区构成: 程序代码和数据、堆、共享库、栈、内核虚拟内存。
文件就是字节序列。每个I/O设备,包括磁盘、键盘、显示器,甚至网路都可以看成文件。
现代系统经常通过网络和其他系统连接到一起。从一个单独的系统来看,网络可视为一个I/O设备。
并发:指一个同时有多个活动的系统;
并行:指用并发来使一个系统运行的更快。