一般概念:
该博客的汇编语言全是基于x86处理器
微计算机的基本设计:中央处理器(CPU)作为算数和逻辑操作的部件,包含了有限数量的存储位置-寄存器(register),高频时钟,控制单元CU和算术逻辑ALU单元。
部件解释:
时钟CLOCK | 对CPU内部操作与系统其它组件进行同步时间 |
控制单元CU(control unit) | 协调参加机器指令执行的步骤序列 |
算术逻辑单元ALU(arithmetic logic unit) | 执行算术运算,和逻辑运算 |
设计理念:
CPU通过主板上CPU插座的引脚与计算机其它部分相连。大部分引脚连接的是数据总线、控制总线和地址总线。
内存存储单元(memory storage unit)用于在程序运行时保存指令和数据。接收CPU的数据请求,将数据从随机存储器(RAM)传输到CPU,并从CPU传输到内存。所有数据处理都在CPU内进行,因此保存在内存找那个的程序在执行前需要复制到CPU。
总线(bus) 是一组并行线,把数据从一个部分传送到另一个部分,通常包含四类总线:数据类、I/O类、控制类和地质类。
数据总线(data bus) | 在CPU和内存之间传输指令和数据 |
I/O总线 | 在CPU和系统I/O设备之间传输数据 |
控制总线(control bus) | 用二进制信号来同步连接在系统总线上的设备 |
地址总线(address bus) | 用来保持指令和数据的地址 |
时钟: CPU和系统总线的每一个操作都是由一个恒定速率的内部时钟脉冲来同步。执行一条机器指令至少需要一个时间周期,有几个需要的时钟则超过了50个。
CPU在执行一条机器指令的时候需要经过一系列预定义的步骤,这些步骤被称为指令执行周期(instruction execution cycle)。
假设指令指针寄存器已经有了想要执行指令的地址,以下步骤就为指令执行周期:
1 CPU从指令队列(instruction queue)的内存区域获得指令,然后立即增加指令指针的值。
2 CPU对指令的二进制位模式进行姨译码,这种操作可能会表示该指令有操作数。
3 如果有操作数,CPU就从寄存器和内存中取得这个数
4 使用步骤3得到的操作数,CPU执行该指令。同时更新部分状态标志位。
5 如果输出操作数也是指令的一部分,CPU还需要存放其执行结果
1.3 读取内存
从寄存器读取信息比从内存中读取数据要快得多,是因为读取内存的步骤比寄存器复杂麻烦。
步骤:
1.将需要的数据的地址放到地址总线上
2.设置处理器RD(读取)引脚(改变RD的值)#也就是读取处理器
3.等待一个时钟周期给存储器芯片响应
4.将数据从数据总线复制到目标操作数。
以上每一个步骤都需要一个时钟周期,而从寄存器读取只需要一个时钟周期,所以相对而言从内存读取比寄存器慢。
但是引入了快存的概念大大加速了从内存获取数据的速度,所谓快存就是把常用的指令和数据存放在高速存储器cache中,这些指令和数据可以很快速的被访问到。
1.4 加载并执行程序
执行程序(program)之前,需要用一种工具将程序加载在内存中,这种工具被称为程序加载器(program loader)。加载进内存后,CPU需要指向程序的入口地址开始运行。
步骤分解:
1.寻找文件:OS在当前磁盘下面查找文件名,如果没找到就报错
2.确定程序信息:OS获取程序的信息,包括文件大小和在磁盘上的位置
3.在内存中分配空间:OS确定内存中可以使用的下一个位置,将程序加载到内存中,为程序分配内存,并加载程序大小和位置在表中。
4.执行程序形成进程:OS执行程序的第一条指令,程序开始运行后,给程序分配一个进程和进程号来运行程序。
5.OS追踪进程:OS对进程进行追踪,进行响应系统资源的请求。获取进程在运行时的情况和信息。