系统软件利用硬件提供的接口,实现本身的功能。程序员
应用软件利用系统软件提供的接口,调用系统软件功能,实现本身的功能。编程
对于一个系统,能够从不一样的角度来抽象:物理构成和程序员的角度并发
这门课主要研究的是逻辑层和微体系结构层,学习计算机中主要部件的逻辑实现,和主要部件间的链接性能
最先出现的是机器语言,利用机器提供的指令集,使用0101直接对硬件进行编程学习
为了简化程序的编写,将机器语言符号化,产生了汇编语言。操作系统
然而,实际的机器不能识别汇编语言写的程序,必须为这台机器提供汇编程序,把汇编语言编写的程序转化为机器语言编写的程序。至关于,在硬件机器的外层罩了一层软件,这层软件完成了对汇编语言->机器语言的翻译。线程
把罩有汇编程序的机器,抽象成一个新的机器M2,对于高级语言来说,M2不能识别高级语言,因此在M2的外层罩了一层软件,这层软件完成对高级语言->汇编语言的翻译。这样,对于高级语言程序员来说,就抽象成了一个新的机器M3,M3能够直接识别高级语言。翻译
一条机器语言的指令,执行也是很复杂的,好比,要把一条机器语言的指令从存储器中取出来,要先把这条指令的地址传送给存储器,要告诉存储器进行读,以后。。。这些操做有前后关系,有些能够同时、有些不能够,把这些操做指令句句细化,把他们放到微指令中。3d
//汇编语言摆脱不了实际机器的指令系统,不一样机器都有与其对应的汇编语言 //这要求程序员要掌握不一样机器的指令系统。
//翻译程序有两种,编译程序和解释程序 //编译是一次性所有翻译成机器语言,之后永远不用再翻译了 //解释是一条一条的翻译成机器语言,下次执行还翻译
在机器语言和汇编语言间,还留有一个部分。汇编语言程序员能够利用操做系统的功能进行编程,操做系统能够管理软硬件的资源。操做系统提供了在汇编语言和高级语言的使用和实现过程当中所需的某些基本操做,还起到了控制并管理计算机所有硬件和软件资源的做用。code
MOV AH, 4H INT 21H //上面两条指令完成了汇编语言应用程序的退出,返回了dos系统 //这是汇编语言调用了dos系统提供的中断功能,实现了程序的退出
//M1也叫传统机器(机器语言机器) //M0叫微程序机器(微指令系统)
软、硬件分界线不是一成不变的,一部分软件功能由硬件实现,例如,目前操做系统已经实现了部分固化(把软件永远存放在只读存储器中),称为固件。
本课程主要研究M0和M1
计算机体系结构,定义了计算机系统的软硬件的交界面,定义了哪些功能由软件,哪些由硬件实现。提供了上层软件和硬件的接口;
机器语言程序员见到的计算机系统的属性(指令集、寄存器文件组织、内存编址单位)
概念性的结构与功能特性
计算机组成:实现计算机体系结构所体现的属性;例如:具体指令的实现,在计算机体系结构中,有乘法指令的规定,那么在计算机组成中要利用上面的规定,想办法实现乘法指令,这个实现是指逻辑实现。
两种机器,是否具备乘法指令,这是结构问题。
实现乘法指令采用什么方式,这是组成问题。实现乘法指令能够采用一个专门的乘法电路,也能够用连续相加的加法电路实现。这两种区别就是计算机组成的区别。
本课程主要研究计算机组成
sinX
相关的方程组,使用泰勒公式,对于开方,使用迭代公式把上述运算步骤写成某计算机一 一对应的机器指令,就完成了运算程序的编写。
设某机器的指令字长为16位,其中操做码占6位,地址码10位。
操做码:表示机器所执行的各类操做,如取数,存数,加减乘除,停机,打印等。
地址码:参加运算的数在存储器内的位置。
机器指令的操做码和地址码都用0、1
代码组合来表示。
上图,取数a,默认把数取出放入到ACC当中。000001
表示取操做,0000001000
表示数a的地址。
运算器
运算器最少包括3个寄存器(现代计算机内部每每有通用寄存器组),还有一个算数逻辑单元(ALU)。
核心是ALU,ALU一般是一个组合电路,他的特色是若是输入撤销,那么输出结果也会撤销。为了完成功能,能对结果进行保存,必须在ALU输入端加入寄存器,寄存器保存参与计算的数据,就须要两个寄存器做为输入数据的保存设备。一个是ACC,还有一个是X;觉得乘法会让数据的长度翻倍,因此要额外添加一个寄存器MQ;
ACC(Accumulate)为累加器,MQ为乘商寄存器,X为操做数寄存器。
ACC和X做为运算的输入,ACC也用于保存运算结果。对于乘法,因为结果长度要增长一倍,那么把多出来的部分放在MQ;
不一样的机器的运算结构是不一样的,图1.11,也就是上图中的运算器,能够把运算结果从ACC送至存储器中的MDR,而存储器的操做数也能够从MDR送至运算器中的ACC、MQ或X。有的机器用MDR取代X寄存器。对于不一样的机器,会有不一样数量的寄存器,实际的状况也会不一样。
下面简要分析一下上图这种机器的运算器四则运算的操做过程。
M表明存储器的任一地址号,[M]表明对应M地址号单元中的内容;X表示X寄存器,[X]表示寄存器中的内容;
假设ACC中已经有前一时刻的运算结果,而且做为下述运算中的一个操做数,则
[M] -> X [ACC] + [X] -> ACC //即把[ACC]看作被加数,先从主存中取[M],送到X中 //而后把被加数[ACC]和加数[X]相加,结果(和)保留在ACC中
[M] -> X [ACC] - [X] -> ACC //把[ACC]看作被减数,把[M]放入X //把结果(差)保留在ACC中
//乘法在计算机中能够用加法和移位的方式来进行计算 //咱们在纸上计算乘法,是几行数字错位相加,在计算机中相似 //进行相加的时候,须要一个累加器,不能像纸上那样一次性全加在一块儿 //累加器选择ACC,被乘数在X,乘数在MQ [M] -> MQ [ACC] -> X 0 -> ACC //ACC清0 [X] * [MQ] -> ACC | MQ //高位放在ACC,低位放在MQ //把[ACC]看作被乘数
[M] -> X [ACC] ÷ [X] -> MQ //商暂留在MQ 余数R在ACC中 //[ACC]看作被除数 //若要把商保存在ACC中,只要[MQ] -> [ACC]
控制器
控制器是计算机的神经中枢,他指挥各部件自动、协调工做。具体而言,他首先命令存储器读出一条指令,称为取指过程(取指阶段);接着,对此指令分析,指出该指令要完成什么操做,并按寻址特征指明操做数的地址,称为分析过程(分析阶段);最后根据操做数所在地址和指令的操做码完成某种操做,称为执行过程(执行阶段);这就是完成一条指令的三个阶段。
控制器由程序计数器(program counter,PC)、指令寄存器(Instruction register,IR)、控制单元(CU)组成。
PC存放当前欲执行指令的地址,它与主存的MAR间有一条直接通路,且有自动加1的功能,便可以自动造成下一条指令的地址。IR用来存放当前指令,IR的内容来自主存MDR。IR中的操做码(OP(IR))送到CU,记作OP(IR) -> CU
,用来分析指令;其地址码(AD(IR))做为操做数的地址送至存储器的MAR,记作AD(IR) -> MAR
。CU用来分析当前指令所需完成的操做,并发出各类微操做命令序列,用以控制全部被控制对象。
控制器的功能:解释指令(执行指令是运算器) + 保证指令的按序执行
接下来分析:
完成一条指令有3个阶段:
要完成取数指令 取指令(要知道指令的地址在哪) 欲执行指令地址保存在PC中 指令保存在存储体中 1. PC把指令地址送给MAR 2. MAR送给存储体 3. 在控制器(CU)的控制下,存储体把指定存储单元中保存的那条<取数指令>取出送入MDR 4. MDR把保存的指令送入IR //------完成取指工做,下一步,分析指令-------- 5. IR中保存的操做码部分送入CU //<取数指令>是把[M] -> ACC,为了完成这个操做,在控制器的控制下 //把指令中的地址部分送给存储器,以便把数据从存储体中取出 //IR保存了当前的指令,还有当前指令操做数的地址 6. 从IR的地址码部分取出地址,送入MAR 7. MAR把地址送给存储体 8. 在控制器的控制下,从存储体中把取数指令要取的数取出,存入MDR 9. 把MDR中的数送入ACC //完成取数操做
//对于存数指令,第一步仍是取指令 1. PC把指令地址送给MAR 2. MAR送给存储体 3. 在控制器(CU)的控制下,存储体把指定存储单元中保存的那条<取数指令>取出送入MDR 4. MDR把保存的指令送入IR //------完成取指工做,下一步,分析指令-------- 5. IR中保存的操做码部分送入CU,由CU对指令进行分析,分析这条指令要作什么操做 6. 从IR的地址码部分取出地址,送入MAR 7. MAR把地址送给存储体,告诉存储体有数据要存进来,地址是多少 8. 在控制器的控制下,把ACC中的数据存入MDR 9. 在控制器的控制下,把MDR中的数据保存在存储体中
程序由一条条指令构成,执行程序就是执行一条条指令
/**个人CPU能够对两个8位二进制数作加法,结果仍是一个8位的二进制数。那么在 这种状况下,CPU一次能处理的数据位数是8位,不是24位。咱们上面讨论的机器 字长,和ACC、X、MQ的字长相同。为了简化问题,咱们存储单元的长度,也就是存储 字长,和寄存器的长度也都是相同的。这只是模型机里的假设,并非全部计算机 都这样。 机器字长越长,机器性能越好。例如咱们把两个64位的数相加,把他们的和保存在 64位寄存器中。若是机器字长是8位,寄存器也是8位,那么要完成这64位的加法, 咱们就要作8次加法运算(相对应的8位进行相加)。若是机器字长就是64,寄存器 也是64,那么就是一次计算。 */
/** 主频:频率越高,速度越快 核数:每一个核支持的线程数 主存:主存速度快,取指、取数速度快 吉普森法:曾经用过 现代指标:单位时间内执行指令的平均条数来衡量,用MIPS(百万条指令每秒)作 计量单位。例如,某机每秒执行200万条指令,记作2MIPS。 也能够用CPI,也就是执行一条指令所需的时钟周期(机器主屏的倒数)数,CPI越小越好 或者用FLOPS(浮点运算次数每秒)来衡量计算速度 */