Computer Organization
【introduction】
【case1】 就计算组成而言,在当下的计算机体系中通常采用的是冯诺伊曼体系的计算机——也就是标准的五大组成部分:控制器,存储器,运算器,Io(输入设备和输出设备),在当下的计算机往往都是采用的这种模式进行设计,当然还有其他的计算机体系结构,例如哈佛体系,这种体系下的计算机的指令存储器控制存储器是分开进行装置的,不像是冯诺伊曼体系中的那样,存储器是一个固定的封装好的元件,设想一下,假如你有一台采用了哈佛体系的计算机,其中的数据存储器和指令存储器是分开进行的,那么假设你要进行这样一个操作:1+1=?
1. 从输入设备键入1,这个时候计算机接收来自键盘的外部中断(保护现场,中断响应,中断服务程序,返回断点),保存当前的执行状态,然后cpu响应当前中断,读入1到存储器中类似的键入1+1。
2. 当键入“=”的时候相当对计算机下达了一条指令(有操作码),指令的组成在后面进行复习,但是指令是存储在指令存储器之中的,要对数据存储器的数据进行操作,并且返回到数据存储器的存储单元当中,要让cpu的ALU进行“+”的运算,这就需要总线将(指令)-----CPU-----(数据存储器)进行连接起来,自然而然回顾总线的概念
【DEF】总线
总线是进行计算机各功能部件之间数据传输的功能部件,(参考baidu的定义)加入把计算机整体比作是一个城市而言,那么总线就是在这个城市中的公路,而各个部件之间的数据就相当于是car.
自然采用哈佛体系之后的计算机,指令存储器和功能存储器还有cpu之间的ALU是通过总线进行连接,在这里强调一下指令的构成,指令的字长取决于指令编码的不同形式,但毫无疑问的是前面都有op(指令操作码)------局限于冯诺伊曼体系的讨论
回到上面的讨论来:
当cpu通过总线,将指令和数据都存储到cpu内部的寄存器的时候,根据OP所暗含的操作(由于不了解哈佛体系指令系统的编码,但是在指令编码的过程中一定会有类似于OP的代表作用的编码的部分,在这里假设是OP)进行运算后,然后通过总线又存储回去数据存储器中(也就是存2)
通过输出设备进行显示。
以上就讨论的计算机体系和计算组成之间的关系,二者之间微妙的设计,计算机体系决定着计算机硬件层次之间的分布情况,而计算机组成硬件之间的限制又反过来决定了你所设计上的计算机体系能否实现的现实问题。
【case2】
就当下计算机的发展而言,速度越来越加快的影响下使得摩尔定理即将失效,这个时候之后考虑量子领域的硬件进行突破,或者从数学的角度设计算法绕过硬件进行突破。(就比如说量子编码,量子bit.因为这个bit的处理关系不是线性的处理,是进行指数形式的处理,自然而然要速度快于一般的比特)
而考虑整体的计算机环境而言,主要是由两大部件——硬件和软件组成的,软件部分又可以分为网络软件和非网络软件(个人的划分和教材无关),软件(app),也叫应用程序,网络程序在因特网上进行运行,而就因特网的本质而言,因特网是用户主机和服务器之间还有各个用户之间的数据收发和共享的网络,那么围绕这个主题,网络程序就是网络进程之间的数据沟通(就最简单的socket套接字之间的沟通),打一个最简单的比方:
假如你在玩一个GAME,虚拟现实的游戏,你和全世界的用户都在一个场景,而这个场景又由服务器传输到你的设备显示在你的视野中,这个传输是持续性的(因为你可能在这个游戏中操作一些动作),那么一个好的快的传输网络就可以提供给你更好的游戏体验,比如说你的网络传输速度不好的话,那么你的视野中的人物或许会卡顿,掉帧,这就是因为数据收发没有及时性的缘故。而牵扯到了传输速度的概念,那就不仅仅是软件本身的关系,这就回到了硬件的处理上来,软件和硬件之间或许存在这样的关系:
硬件决定了软件的可运行性(计算机),而一个好的软件如果在算法层次优化的比较好,那么也会降低硬件的负担。
【case3】最后讨论一下编程语言的关系?(高级语言,汇编语言,机器语言)
先举出几个实际的例子:
1. 高级语言:c,C++,Python,java.......都是
2. 汇编语言:一群字母,类似LOAD 这样的指令,个人觉得有种玩弄逻辑的感觉
3. 机器语言:由于最早期的计算机编码的问题,人们在设计计算机的时候都是采用的0,1的数字进行编码,这样是很不好的,比如你写的代码别人就看不懂,但由于最底层的这样的设计,保证了计算机的机械化的实现出错率会降低。
发展历程来说就是:机器——汇编——高级的发展过程。\
就概论的复习大概就是这样。。。。。。。。。
上面关于哈佛体系的讨论或许有问题。感谢有大佬指出。