计算机组成原理



分诺依曼结构
一、计算机有五大组成部分
   运算器+控制器  (cpu)
   存储器(内存)   数据和指令就以二进制形式不加区分的放在这儿
          输入,输出设备   (键盘)

工作原理

二、内存的理解:
地址、指令和数据的关系:
都是线性结构 
数据和指令是不分的,都在一个内存当中

cpu在运行过程中,比如操作系统运行一个程序,然后将这个程序的初始地址比如main函数,编译完之后,装入到内存,形成一个进程,会有初始地址,CPU定位到这里,然后从这个地址开始,一条一条的往下执行。当然指令中一些是跳转指令,可能出现跳转。


三、指令和流水线
取指   译码  执行
好处:充分利用各部件
存在的问题:怎么确保  查资料

四、速度不匹配问题
计算机核心问题:速度不匹配问题
解决办法:
1、提升硬盘等设备的速度,和CPU匹配
2、让CPU一直工作,干活。
同步操作->异步操作
异步实例: DMA 直接内存访问
单个程序的顺序执行-> 并发(时间片的轮转)
并行可能存在的问题:对共享资源的争用,读写问题,可能 需要加锁,如果处理不好,可能出现死锁。
增加中间层 ,即缓存
两个局部性原理:
时间局部性
如果程序中某条指令一旦执行,则不久之后该条指令可能再次被执行
如果某数据被访问,则不久之后该数据可能再次被访问。
空间局部性
一旦程序访问了某个存储单元,则不久之后,其附近的存储单元也将被访问。



编程语言


静态语言和动态语言

IDEA编译器可以对静态语言做静态检查
动态语言  灵活,编译器无法检查。




语法分析,做成一棵二叉树。




代码生成:就是把一个数学运算变成了汇编语言,之后翻译成机器语言。


迭代  逐个相乘     
递归   n!=n*(n-1)!


注意:每一个函数栈帧代表了一个函数调用。函数a调用函数b,则函数a为栈帧1,函数b为栈帧2。


当n很大的时候,栈变得很长,有可能溢出。
改进的方式:尾递归。

每次发生函数调用,都有新的栈帧形成。


尾递归

注意:就是调用自身。


尾递归的优点:
1,也是需要创建栈帧,但是,可以复用同一个栈帧(原因: 只是对自身调用,并且没有其他函数运算)。上一次的计算结果作为参数,传进了当前的栈帧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值