第一章
1.1 信息就是位+上下文
1、源程序实际上就是一个有0和1组成的位(又称为比特)序列,这些为被组成8个一组,称为字节。每个字节表示程序中某个文本字符。
2、系统中所有的信息---包括磁盘文件、储存器中程序、储存器中存放的用户数据以及网路上传送的数据,都是由一串比特表示的。
1.2 程序被其他程序翻译成不同的格式
1、为了在系统上运行hello.c程序,每条C语句都被其他程序转化为一系列的低级机器语言指令。然后这些指令按照一种称为可执行目标程序的格式打包好,并以二进制磁盘文件的形式存放起来。目标程序也称为可执行目标文件。
2、翻译过程分为4个阶段:预处理器根据以字符#开头的命令,修改为原始C程序,如读取系统文件中的stdio.h。编译器包含一个汇编语言程序,将标准的文本格式描述为一条低级机器语言指令,汇编器将指令打包成为一种叫做可重定位目标程序的格式。链接器负责处理并入,将可执行文件加载到储存器后,有系统执行。
1.3 了解编译系统如何工作是大有益处的
1、主要了解:优化程序性能、理解链接时出现的错误、避免安全漏洞。
1.4 处理器读并解释存储在存储器中的指令
1、shell是一种命令解释器
1.4.1 系统硬件组成
1、总线贯穿整个系统的一组电子管,称做总线,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字。
2、I/O设备是系统与外界的联系通道。每个I/O设备是通过一个控制器或适配器与I/O总线连接起来的。
3、主存是一个历史存储设备,在处理器质性时,它被用来存放程序和程序处理的数据。
4、处理器是解释存储在主存中指令的引擎。
1.4.2 执行hello程序
1.5 高速缓存
1、高速缓存存储器被用来作为暂时的集结区域,存放在不久的将来可能需要的信息。
1.6 形成层次结构的存储设备
1.7 操作系统管理硬件
1.7.1 进程
1、进程是操作系统对运行程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程都好像独自占地使用硬件,我们称之为并发运行。
2、在任何一个时刻,系统上都只有一个进程正在运行。当操作系统决定从当前进程转移控制权到某个新进程时,它就会进行上下文切换,即保存当前进程的上下文、恢复新进程的上下文,然后将控制权转移给新进程。
1.7.2 线程
1、一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。
1.7.3 虚拟存储器
1、虚拟存储器为每个进程提供了一个假象,好像每个进程都独占地使用主存。
2、每个进程看到的存储器都是一致的,称之为虚拟地址空间。
3、每个进程看到的虚拟地址空间由大量准确定义的区构成,每个区都有专门的功能:(1)程序代码和数据,代码和数据区是由可执行目标文件直接初始化的(2)堆,堆可以随时动态的扩展和收缩(3)共享库,存放像C标准库和数学库这样的共享库的代码和数据区域(4)栈。位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数调用。用户栈再程序执行期间可以动态扩展和收缩。(5)内核虚拟存储器
4、基本思想是把一个进程虚拟存储器的内容存储再在磁盘上,然后用主存作为磁盘的高速缓存。
1.7.4 文件
1、文件只不过就是一个字节序列。每个I/O设备,包括磁盘、键盘、显示器。甚至于网络,都可以被看成是文件。
1.8 利用网路系统和其他系统通信
1、现代系统经常是通过网络和其他系统联系到一起的。
1.9 下一步
1、系统不仅仅只是硬件。系统是互相交织的硬件和系统软件的集合体。
1.10 小结
1、计算机系统是由硬件和系统软件组成的,他们共同写作以运行应用程序。
2、操作系统内核是应用程序和硬件之间的媒介。它提供三个基本的抽象概念:文件是对I/O设备的抽象概念;虚拟存储器是对主存和磁盘的抽象概念;进程是处理器、主存和I/O设备的抽象概念
第二章 信息的表示和处理
1、二值信号能够很容易的表示、存储和传输。
2、三种最重要的数字编码:无符号编码是基于传统的二进制表示法;二进制补码编码是表示有符号整数的最常见的方式,有符号整数就是为正或者为负的数字。浮点数编码表示实数的科学计数法的以二为基数的版本。
2.1 信息存储
1、大多数计算机使用8位的块,或叫做字节,来作为最小的可寻址的存储器单位,而不是访问存储中单独的位。
2、机器程序将存储器视为一个非常大的字节数组,称为虚拟存储器。存储器的每个字节都由一个惟一的数字标识,称为它的地址,所有可能地址的集合称为虚拟地址空间。
3、编译器和运行时的系统的一个任务就是将这个存储空间划分为更可管理的单元,来存放不同程序对象,也就是,程序数据、指令和控制信息。
2.1.1 十六进制表示法
1、一个字节包括8位。在进制表示法中,他的值域00000000~11111111。十六进制书写一个字节的取值范围为00~FF。
2、讲述二、八、十六进制之间的转换
2.1.2 字
1、每台计算机都有一个子长,指明整数和指针数据的标称大小。因为虚拟地址就是以这样的字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大小。
2.1.3 数据大小
1、分配字节书随着机器和编译器的不同而不同
2、可移植性的一个方面就是使程序对不同数据类型的确切大小不敏感。
2.1.4 寻址和字节序
1、从最低有效字节到最高有效字节的顺序存储对象,叫小端法,从最高有效字节到最低有效字节的顺序存储,叫做大端法。
2、字节顺序字啊不同类型的机器之间通过网络传送二进制数据时,可能会出现问题。为了避免这类问题,网络应用程序的代码编写必须遵守已建立的关于字节顺序的规则,以确保发送方机器将它内部的表示转换成网络标准。
#include <stdio.h> typedef unsigned char *byte_pointer; void show_bytes(byte_pointer start, int len) {
int i; for(i=0;i<len;i++) printf(" %.2x", start[i])' printf("\n"); } void show_int(int x) { show_bytes((byte_pointer) &x,sizeof(int)); } void show_float(float x) { show_bytes((byte_pointer)&x,sizeof(float)); } void show_pointer(void *x) { show_bytes((byte_pointer)&x,sizeof(void *)); } void test_show_bytes(int val) { int ival=val; float fval=(float)ival; int *pval=&ival; show_int(ival); show_float(fval); show_pointer(pval); }
2.1.5 表示字串
1、在使用ASCII码作为字符码的任何系统上都将得到相同的结果,与字节顺序和字大小规则无关。
2.1.6 表示代码
1、二进制代码很少能在不同机器和操作系统组合之间移植
2.1.7 布尔代数和环
2.1.8 C中的位级运算
1、通过异或可以对俩个变量进行交换
2.1.9 C中的逻辑运算
1、如果第一个参数值就能确定表达式的结果,那么逻辑运算符就不会对第二个参数求值。
2.1.10 C中的位移运行
1、简括指向的方向的方向表示位移方向,左移(<<)的位数表示乘以2的次方数,右移(>>)
2.2 整数表示
1、将描述用位来编码整数的俩种不同方式:一种只能表示负数,而另一种能够表述负数、零和正数。
2.2.1 整数数据类型
1、C支持多种整型数据类型--表示有限范围的整数。
疑问
1、2.10、2.11、2.12习题的填写
标签:计算机系统,字节,系统,程序,虚拟地址,理解,深入,进程,2.1 From: https://www.cnblogs.com/w-x-me/p/16858661.html