- 信息就是位+上下文
- 概念
- 1.计算机系统是由硬件和系统软件组成的。
- 2. hello程序的生命周期:创建—编译—运行—退出。
- 3. Hello程序的生命周期是从一个源程序(源文件)开始的。
- 源程序(源文件):程序员通过编辑器创建并保存的文本文件,文件名是hello.c。
- 4.源程序实际上是一个由值0和1组成的位(又称比特)序列,8个位被组织成一组,称为字节。
- 5.每个字节表示程序中的某些文本字符。
- 6.现代计算机系统都使用ASCII标准来表示文本字符,实际上是用一个唯一的单字节大小的整数值来表示每个字符。
- 7. hello.c程序是以字节序列的方式储存在文件中。每个字节都有一个整数值,对应于某些字符。
- ★每个文本行都是以一个看不见的换行符“\n”来结束,它所对应的整数值为10。
- 8.文本文件:像hello.c这样只由ASCII字符构成的文件称为文本文件,所有其他文件都称为二进制文件。
- 9.系统中所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示。
- 💕区分不同数据对象唯一方法:读这些数据对象时的上下文。(在不同的上下文中,一个同样的字节序列,可能表示一个整数、浮点数、字符串或机器指令)
- 概念
- 程序被其他程序翻译成不同的格式
- 概念
- 1.为了在系统上运行hello.c程序,每条C语句都必须为其他程序转化为一系列的低级机器语言指令。这些指令按照一种称为可执行目标程序的格式打好包,以二进制磁盘文件的形式存放起来。
- 2.目标程序也称为可执行目标文件。
- 3.在Unix系统上,从源文件到目标文件的转化是由编辑器驱动程序完成的:
linux> gcc -o hello hello.c
GCC编译器驱动程序读取原程序文件hello.c,并把它翻译成一个可执行目标文件hello。
- 翻译过程分4个阶段:
执行这4个阶段的程序(预处理器cpp、编译器ccl、汇编器as和链接器ld)一起构成编译系统( compilaton system)。- 预处理阶段:预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。
比如hello.c中第1行的# include<stdio.h>命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中。结果得到另一个C程序,通常以.i作为文件扩展名。 - 编译阶段:编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。该程序包含函数main的定义,如下所示:
汇编语言非常有用,因为它为不同高级语言的不同编译器提供了通用的输出语言。 - 汇编阶段:汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序(relocate ball object program)的格式,并将结果保存在目标文件hello.o中。
hello.o文件是一个二进制文件,它包含的17个字节是函数main的指令编码。如果在文本编辑器中打开hello.o文件,将会看到一堆乱码。 - 链接阶段:hello程序调用了printf函数,它是每个C编译器都提供的标准C库中的一个函数。printf函数存在于一个名为printf.o的单独的预编译好了的目标文件中,这个文件必须以某种方式合并到hello.o程序中。链接器(ld)负责处理这种合并。结果得到hello文件,它是一个可执行目标文件(可执行文件) ,可以被加载到内存中,由系统执行。
- 预处理阶段:预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。
- 概念
- 了解编译系统如何工作是大有益处的
- 知道编译系统如何工作的好处
- 优化程序性能。
为了在C程序中做出好的编码选择,需要了解一些机器代码以及编译器将不同的C语句转化为机器代码的方式。 - 理解链接时出现的错误。
一些最令人困扰的程序错误往往与链接器操作有关。 - 避免安全漏洞。
缓冲区溢出错误是造成大多数网络和internet服务器上安全漏洞的主要原因。
学习安全编程的第1步就是:理解数据和控制信息存储在程序栈上的方式会引起的后果。
- 优化程序性能。
- 知道编译系统如何工作的好处
- 处理器读并解释存储在内存中的指令
- 当hello.c源程序已经被编译系统编译成可执行文件hello,并存放在磁盘上。要想在Unix系统上运行该可执行文件,要将它的文件名输入到称为shell的应用程序中:
linux> ./hello
hello, world
linux> - shell是一个命令行解释器,他输出一个提示符,等待输入下一个命令行,然后执行这个命令。
如果该命令行的第1个单词不是一个内置的shell命令,那么shell就会假设这是一个可执行文件的名字,它将加载并运行这个文件。
在这个例子中,shell将加载并运行hello程序,然后等待程序终止。hello程序在屏幕上输出他的消息,然后终止。shell随后输出一个提示符,等待下一个输入的命令行。 - 系统的硬件组成
- 1.总线
- 贯穿整个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。
通常总线被设计成传送定常的字节块,也就是字(word)。
字中的字节数(字长)是一个基本的系统参数,各个系统中都不完全相同。
现在大多数机器字长要么是4个字节(32位),要么是8个字节(64位)。
- 贯穿整个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。
- 2.I/
- 1.总线
- 当hello.c源程序已经被编译系统编译成可执行文件hello,并存放在磁盘上。要想在Unix系统上运行该可执行文件,要将它的文件名输入到称为shell的应用程序中:
CSAPP深入理解计算机系统笔记 第1章 计算机系统漫游 知识点总结,详细
最新推荐文章于 2024-07-12 16:06:58 发布