计算机系统基础笔记(第一章)

Posted by SGQ on March 21, 2020

前言

今天开始关于计算机系统的学习,准备花十天左右将《计算机系统基础》、《深入理解计算机系统》这两本书吃透,先从《计算机系统基础》这本书开始,刚好mooc平台袁春风老师也正在开课,准备两手开始,把基础打牢,之后再好好研读《深入理解计算机系统》这本书。读书笔记,只记录自己还未太了解的,以及很重要的理论知识。以备后用!

知识点

1.源程序文件到可执行目标文件的转化过程

1

  • 预处理阶段:预处理程序(cpp) 对源程序中以字符#开头的命令进行处理。
    例如,将#include命令后面的.h文件内容嵌人到源程序文件中。
    预处理程序的输出结果还是一个源程序文件,以.i为扩展名。

  • 编译阶段:编译程序(ccl) 对预处理后的源程序进行编译,生成一个汇编语言源程序文件,以.s为扩展名。
    例如,hello.s 是一个汇编语言程序文件。因为汇编语言与具体的机器结构有关,所以,对同一台机器来说,不管什么高级语言,编译转换后的输出结果使用的都是同一种汇编语言。

  • 汇编阶段:汇编程序(as) 对汇编语言源程序进行汇编,生成一个可重定位目标文件,以.o为扩展名。
    例如,hello.o 是一一个可重定位目标文件。它是一种二进制文件,因为其中的代码已经是机器指令,数据以及其他信息也都是用二进制表示的,所以它是不可读的,也即打开显示出来的是乱码。

  • 链接阶段:链接程序将多个可重定位目标文件和标准库函数合并成为一个可执行目标文件,可执行目标文件可简称为可执行文件。
    本例中,链接程序将hello.o和标准库函数printf所在的可重定位目标模块printf.o进行合并,生成可执行文件hello。

2.启动和执行hello程序的过程

  • 线①:shell 程序会将用户从键盘输入的每个字符逐一读入CPU寄存器中。
  • 线②:将读入寄存器的字符再保存到主存储器中,在主存的缓冲区形成字符串” ./hello” 。
  • 线③: 等到接收到[Enter]按键时,shell将调出操作系统内核中相应的服务例程,由内核来加载磁盘上的可执行文件hello到存储器。
  • 线④:内核加载完可执行文件中的代码及其所要处理的数据(这里是字符串” hello, world\n”) 后,将hello 第一条指令的地址送到程序计数器( 简称PC)中,CPU永远都是将PC的内容作为将要执行的指令的地址,因此,处理器随后开始执行hello程序,它将加载到主存的字符串”hello, world \n”中的每一个字符从主存取到CPU的寄存器中。
  • 线⑤:然后将CPU寄存器中的字符送到显示器上显示出来。

3.计算机系统的层次化结构

  • 系统程序员所看到的机器的属性是属于ISA层面的内容,所看到的机器是配置了指令系统的机器,称为机器语言机器,工作在该层次的程序员称为机器语言程序员。
  • 系统管理员工作在操作系统层,所看到的是配置了操作系统的虚拟机器,称为操作系统虚拟机。
  • 汇编语言程序员工作在提供汇编程序的虚拟机器级,所看到的机器称为汇编语言虚拟机。
  • 应用程序员大多工作在提供编译器或解释器等翻译程序的语言处理系统层,因此,应用程序员大多用高级语言编写程序,因而也称为高级语言程序员,所看到虚拟机器称为高级语言虚拟机。
  • 最终用户则工作在最上面的应用程序层。

名词解释

  • PC ( 程序计数器)

    一个中央处理器中的寄存器,用于指示计算机在其程序序列中的位置。

  • MAR (存储器地址寄存器)

    用来接收指令地址、操作数地址或结果数据地址。

  • MDR(存储器数据寄存器)

    向主存写入数据或从主存读出指令或数据的缓冲部件。

  • ALU(算数逻辑部件)

    是中央处理器的执行单元,是所有中央处理器的核心组成部分,由与门 (AND gate) 和或门 (OR gate) 构成的算数逻辑单元,主要功能是进行二进制的算术运算,如加减乘(不包括整数除法)。

  • IR(指令寄存器)

    存放指令的寄存器

  • GPRs(通用寄存器组)

    r若干通用寄存器构成。