1.只由ASCII字符构成的文件成为文本文件,其他都称为二进制文件。因此,信息就是bit加上下文。
2.GCC将hello.c翻译成hello分为四个阶段完成,分别是预处理器+编译器+汇编器+链接器。它们构成了编译系统。预处理阶段读取头文件的内容并将它直接插入到程序文本中,编译阶段将文本文件翻译成汇编语言程序,汇编阶段汇编器将汇编程序转换成目标程序,链接阶段链接不同的目标文件.o从而得到可执行程序。它可以被加载到内存中,供系统执行。
3.系统的硬件组成:
总线:贯穿整个系统,携带信息在各个部件间传递,它通常被设计成传送定长的字节块,也就是字。(4个字节或者8个字节,对应32位、64位系统)。
IO设备:通过一个控制器或者适配器与I/O总线相连,控制器是IO设备本身或者主板上的芯片组,而配适器是一块插在主板插槽上的卡。
主存:是一组由动态随机存取存储器DRAM芯片组成。
处理器:其核心是一个大小为一个字的寄存器,成为程序计数器,它含有主存中某条指令的地址。处理器从程序计数器中读取指向内存地址处的指令 ,解释这个指令中的位,执行这个指令指示的简单操作。然后更新程序计数器,从而指向下一条指令。
4.为了弥补处理区和主存之间的差异,cache应运而生。L1和L2和L3的cache使用静态随机访问存储器SRAM的硬件技术实现。
5.操作系统管理着硬件,两个基本功能:防止硬件被失控的程序滥用+向程序提供简单一致的机制来控制不同的低级硬件设备。操作系统是通过几个基本的抽象概念:进程、虚拟内存、文件来实现这两个功能的。
6.进程是操作系统对一个正在运行的程序的一种抽象。操作系统中实现进程间的切换是通过一种“上下文切换”的机制实现的。操作系统保持跟踪进程运行所需的所有状态信息,这种状态就是上下文,包括许多信息,比如程序计数器和寄存器文件的当前值,以及主存的内容。而上下文切换会保存当前进程的上下文、恢复新进程的上下文,然后将控制权传递到新进程。
7.一个进程可以由多个线程的执行单元组成,每个线程都运行在进程的上下文中,并享有同样的代码和全局数据。
8.虚拟内存为每个进程提供了一个假象,即每个进程都独占地使用主存,每个进程看到的内存都是一致的,成为虚拟地址空间。进程的虚拟地址空间都大量准确定义的区构成,每个区都有专门的功能,从地地址到高地址逐步往上,分别是
a.程序代码和数据:对所有进程而言,代码都从同一固定地址开始,紧接着是全局变量的位置,代码和数据区是直接按照可执行文件的内容初始化的。
b.紧接着是堆,与上述一开始运行就被指定了大小不同,对可以在运行时动态地扩展和收缩。
c.紧接着是共享库,存放共享的代码和数据,比如标准库等。
d.栈位于虚拟地址空间顶部;e.内核虚拟内存,专门为内核保留,不允许读写或调用内核定义的函数。
9.文件就是字节序列,每个IO设备都可以看成文件。文件的概念是非常强大的,因为它向程序提供了一个统一的视图。
10.并发是一个通用的概念,指一个同时具有多个活动的系统,而并行指的是使用并发来使系统运行得更快。并行可以应用在系统的三个层次:线程级并发、单指令+多数据并行、指令级并行。