计算系统基础-第一章-计算机系统概述-总结

                                                               1.1为什么要学习计算机基础

(1)

– 计算机好像不可靠

– 程序执行结果不仅依赖于高级语言语法和语义,还与其他好多方面有关

– 本来以为学学编程和计算机基本原理就能当程序员,没想到还挺复杂的,计算机专业不好学

– 感觉要把很多概念和知识联系起来才能理解程序的执行结果

一点不错!理解程序的执行结果要从系统层面考虑!从机器角度来说,它永远是对的!

学完“计算机系统基础”就会对计算机系统有清晰的认识,以后再学其他相关课程就容易多了。

你说对了!把许多概念和知识联系起来就是李国杰院士所提出的“系统思维”。 即:站在“计算机系统”的角度考虑问题!

 

(2)系统能力基于“系统思维”

系统思维

– 从计算机系统角度出发分析问题和解决问题

– 首先取决于对计算机系统有多了解,“知其然并知其所以然”

• 高级语言语句都要转换为机器指令才能在计算机上执行

• 机器指令是一串0/1序列,能被机器直接理解并执行

• 计算机系统是模运算系统,字长有限,高位被丢弃

• 运算器不知道参加运算的是带符号数还是无符号数

• 在计算机世界,x*x可能小于0,(x+y)+z不一定等于x+(y+z)

• 访问内存需几十到几百个时钟,而访问磁盘要几百万个时钟

• 进程具有独立的逻辑控制流和独立的地址空间

• 过程调用使用栈存放参数和局部变量等,递归过程有大量额外指令,增加时间开销,并可能发生栈溢出

•只有先理解系统,才能改革系统,并应用好系统!

 

(3)“计算机系统基础”内容提要

课程目标:使学生清楚理解计算机是如何生成和运行可执行文件的!

重点在高级语言以下各抽象层

– C语言程序设计层

• 数据的机器级表示、运算

• 语句和过程调用的机器级表示

– 操作系统、编译和链接的部分内容

– 指令集体系结构(ISA)和汇编层

• 指令系统、机器代码、汇编语言

– 微体系结构及硬件层

• CPU的通用结构

• 层次结构存储系统

 

 

(4)为什么要学习这门课程-收获?

– 为了编程序时少出错

– 为了在程序出错时很快找到出错的地方

– 为了明白程序是怎样在计算机上执行的

– 为了强化“系统思维”

– 为了更好地理解计算机系统,从而编写出更好的程序

– 为后续课程的学习打下良好基础

– 为了编写出更快的程序

– 为了更好地认识计算机系统

 

                                                             1.2计算机系统基本组成与基本功能

(1)现代计算机的原型

– 在那个报告中提出的计算机结构被称为冯·诺依曼结构。

– 冯·诺依曼结构最重要的思想是“存储程序(Stored-program)”

工作方式:

任何要计算机完成的工作都要先被编写成程序,然后将程序和原始数据送入主存并启动执行。一旦程序被启动,计算机应能在不需操

作人员干预下,自动完成逐条取出指令和执行指令的任务。

– 冯·诺依曼结构计算机也称为冯·诺依曼机器(Von NeumannMachine)。

– 几乎现代所有的通用计算机大都采用冯·诺依曼结构,因此,IAS计算机是现代计算机的原型机。

 

(2)冯·诺依曼结构的主要思想

1. 计算机应由运算器、控制器、存储器、输入设备和输出设备五个基本部件组成。

2. 各基本部件的功能是:

• 存储器不仅能存放数据,而且也能存放指令,形式上两者没有区别,但计算机应能区分数据还是指令;

• 控制器应能自动取出指令来执行;

• 运算器应能进行加/减/乘/除四种基本算术运算,并且也能进行一些逻辑运算和附加运算;

• 操作人员可以通过输入设备、输出设备和主机进行通信。

3. 内部以二进制表示指令和数据。每条指令由操作码和地址码两部分组成。操作码指出操作类型,地址码指出操作数的地址。由一串指令组成程序。

4. 采用“存储程序”工作方式。

 

(3)现代计算机结构模型

 

(4)计算机是如何工作的?

程序由指令组成(菜单由菜谱组成)

程序在执行前

数据和指令事先存放在存储器中,每条指令和每个数据都有地址,指令按序存放,指令由OP、ADDR字段组成,程序起始地址置PC

(原材料和菜谱都放在厨房外的架子上, 每个架子有编号。妈妈从第5个架上指定菜谱开始做)

开始执行程序

第一步:根据PC取指令(从5号架上取菜谱)

第二步:指令译码(看菜谱)

第三步:取操作数(从架上或盘中取原材料)

第四步:指令执行(洗、切、炒等具体操作)

第五步:回写结果(装盘或直接送桌)

第六步:修改PC的值(算出下一菜谱所在架子号6=5+1)

继续执行下一条指令(继续做下一道菜)

 

(5)指令和数据

• 程序启动前,指令和数据都存放在存储器中,形式上没有差别,都是0/1序列

• 采用”存储程序“工作方式:

– 程序由指令组成,程序被启动后,计算机能自动取出一条一条指令执行,在执行过程中无需人的干预。

• 指令执行过程中,指令和数据被从存储器取到CPU,存放在CPU内的寄存器中,指令在IR中,数据在GPR中。

指令中需给出的信息:

操作性质(操作码)

源操作数1 或/和 源操作数2 (立即数、寄存器编号、存储地址)

目的操作数地址 (寄存器编号、存储地址)

存储地址的描述与操作数的数据结构有关!

 

(6)什么是计算机?

–计算机是一种能对数字化信息进行自动、高速算术和逻辑运算的处理装置。

• 计算机的基本部件及功能:

–运算器(数据运算):ALU、GPRs、标志寄存器等

–存储器(数据存储):存储阵列、地址译码器、读写控制电路

–总线(数据传送):数据(MDR)、地址(MAR)和控制线

–控制器(控制):对指令译码生成控制信号

• 计算机实现的所有任务都是通过执行一条一条指令完成的

 

                                                                           1.3程序开发和执行过程

(1)最早的程序开发过程

用机器语言编写程序,并记录在纸带或卡片上,0/1序列编写程序

 

(2)用汇编语言开发程序

汇编语言出现

– 用助记符表示操作码

– 用标号表示位置

– 用助记符表示寄存器

你认为用汇编语言编写的优点是:

不会因为增减指令而需要修改其他指令

不需记忆指令编码,编写方便

可读性比机器语言强

需将汇编语言转换为机器语言!--->用汇编程序转换

 

(3)进一步认识机器级语言

汇编语言(源)程序由汇编指令构成

• 你能用一句话描述什么是汇编指令吗?

– 用助记符和标号来表示的指令(与机器指令一一对应)

• 指令又是什么呢?

– 包含操作码和操作数或其地址码(机器指令用二进制表示,汇编指令用符号表示)

– 只能描述:取(或存一个数)

两个数加(或减、乘、除、与、或等)

根据运算结果判断是否转移执行

• 想象用汇编语言编写复杂程序是怎样的情形?

(例如,用汇编语言实现排序(sort)、矩阵相乘)

– 需要描述的细节太多了!程序会很长很长!而且在不同结构的机器上就不能运行!

 

机器语言和汇编语言都是面向机器结构的语言,故它们统称为机器级语言

结论:用汇编语言比机器语言好,但是,还是很麻烦!

 

指令所能描述的功能:load/store/add等对数据的操作

Ld M#,R# (将存储单元内容装入寄存器)

St R#,M# (将寄存器内容装入存储单元)

Add R#,M# (类似的还有Sub,Mul等;操作数还可“R#,R#”等)

Jxx M# (若满足条件,则转移到另一处执行)

……

 

(4)用高级语言开发程序

随着技术的发展,出现了许多高级编程语言

– 它们与具体机器结构无关

– 面向算法描述,比机器级语言描述能力强得多

– 高级语言中一条语句对应几条、几十条甚至几百条指令

– 有“面向过程”和“面向对象”的语言之分

– 处理逻辑分为三种结构

• 顺序结构、选择结构、循环结构

– 有两种转换方式:“编译”和“解释”

• 编译程序(Complier):将高级语言源程序转换为机器级目标程序,执行时只要启动目标程序即可

• 解释程序(Interpreter ):将高级语言语句逐条翻译成机器指令并立即执行,不生成目标文件。

 

(5)一个典型程序的转换处理过程

预处理后的源程序(预处理cpp):hello.i

gcc -E hello.c -o hello.i

 

汇编语言程序(编译cc1):hello.s

gcc -S hello.i -o hello.s

gcc -S hello.c

 

可重定位目标程序(汇编as):hello.o (二进制)

gcc -c hello.c

 

可执行目标程序(链接ld):hello(二进制)

gcc hello.c -o hello

 

(6)Hello程序的数据流动过程

 

(7)不同层次语言之间的等价转换

 

(8)开发和运行程序需什么支撑?

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux技术芯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值