考虑到自己对基础的掌握还是不够扎实,在重新回炉python之前,我计划用每天一章的速度回炉CS:APP。
----
1. 信息就是位+上下文:
所有数据在计算机中以位为最小单位存储,包括代码和程序、文件,上下文是对这些位数据的解读方式。
2. 程序被其他程序编译成不同格式、3. 了解编译系统如何工作大有益处:
GCC编译器编译的四个阶段程序为:预处理器(将源程序处理为被修改的源程序)、编译器(将修改后的源程序编译为汇编程序)、汇编器(输出汇编后的二进制程序)、链接器(链接多个二进制文件,输出可执行目标文件)
了解不同语言的编译方式,有助于我们优化程序性能、理解出现的错误、避免安全漏洞。
4. 处理器读并解释存储在存储器中的指令:
简单的说,计算机程序就是加载到存储器中,供处理器依次执行的程序。
1.5 高速缓存、1.6 形成层次结构的存储设备
由于硬盘、内存、存储器存在性能差异,通常来说,从磁盘中读数据比从主存中读数据的开销大1000万倍,而从寄存器中读数据比从主存中读数据快100倍。
因此推出了高速缓存(SRAM: L1L2…),可以做到比从主存中读数据快5-10倍速度。
1.7 操作系统管理硬件
操作系统的两个基本功能:防止硬件被失控的应用程序滥用;在控制复杂而又通常广泛不同的低级硬件设备方面,为应用程序提供简单一致的方法。//吐槽,从这点来看,安卓可以算是一个操作系统吗?
1.7.1 进程、1.7.2 线程、1.7.3 虚拟存储器、1.7.4 文件
程序在处理器运行过程中,操作系统会提供一个假象,就好像这个程序独占使用处理器、内存、IO设备,处理器看起来是连续不断的处理数据,这些现象就是通过进程的概念来实现。
实际上,处理在处理程序的过程中,会同时处理多个程序,也就是多个进程同时并发运行,换个角度说,处理器处理多个进程是交错执行的,这种机制被称为上下文切换(context switching)。
操作系统运行程序所需要的信息、状态、内存情况、执行位置等,统一称为上下文(context),任意一时刻,系统上都只有一个程序在运行,当操作系统决定转移到下一个程序执行时,就会发生上下文切换。
发生上下文切换时,处理器指令会从应用程序代码切换到操作系统代码。
通常我们认为一个进程只有单一的控制流(或者称为处理流),不过,一个进程实际上可以有多个称为线程的执行单元组成,每个线程共用进程的上下文,并共享执行代码。
虚拟存储器同样是一个抽象概念,他提供了一个假象,好像所有进程都独占的使用主存,每个进程看到的存储器资源都是一致的:
从高到低依次为:
内核虚拟存储器(用户态不可读)、用户栈、共享库的存储器映射区域、运行时堆、读/写数据、只读的代码和数据。
简单来说,虚拟存储器是操作系统控制下的精密操作,包括地址翻译、页置换等,基本思路是把虚拟存储器内存保存在磁盘上,然后用主存作为磁盘的高速缓存。
文件不过是存储的字节序列,每个I/O设备,都可以被看成是文件,所有文件的输入、输出都是用 Unix I/O的一组系统函数调用来实现。
1.8 利用计算机网络和其它系统通讯
从简单、单一角度看,网络是计算机系统中的一个I/O设备。
1.9 下一章。