计算机底层原理杂谈(白话文)

  简单说一下写这篇文章的缘由。首先这个不是教学类型的,是我Java实在学不下去了,因为好多计算机底层原理都不是很清楚,每次学新东西都由于想不明白底层原理困惑,所以下决心停止学习Java的新东西,开始搞明白底层。一开始搞的所谓的底层是“Java虚拟机”,然后又C语言汇编语言什么的,其实是想图快,尽快接近现在做的事情。后来发现不行,这事快不了,所以干脆就从物理层面用导线灯泡集成芯片开始动手做一个cpu开始吧。其实也没多久,大概三个多月吧,从我之前写的【从零开始自制cpu】系列的学习文章也可以看到开始时间。cpu做好之后(其实后来由于老是烧坏各种电路没做完),开始看操作系统,现在刚开始看一点。总结起来就是我认为的学习路线应该是:

  自制个cpu--微机原理--简单数据结构与算法--计算机组成原理--汇编语言--操作系统--C语言--编译原理--复杂数据结构与算法--计算机网络--Java--Java虚拟机--源码研究--多线程linux高并发Spring负载均衡各种以这些评判一个人Java水平的东东...

  我认为Java应该在那样一个遥远的地方,好多人却以它为起点了。我现在粗略地看到操作系统,当然不断地在补前面的知识。这篇文章想借此机会跟大家说说计算机底层的理解,学的知识很碎,大家顺便帮我挑挑错误,如果对你有帮助那就更好了。我用大白话说,想到哪说到哪,这样更容易展现出漏洞和错误,希望大家在评论区里积极吐槽~

 

----------------------------------------华丽的正文分割线------------------------------------------

  CPU就是由一堆导线将一堆部件连接在一块的东西,每个部件里面又是由一堆导线和一堆更小的部件连接在一块。把整个cpu看成一个部件,那它和RAM,磁盘等外设又是用一堆导线连接在一块,我感觉就像套娃似的。然后每个部件从外部看就是暴露了一堆针脚,可以用导线连上,给他们传递要么高电平要么低电平的电流,你比如说下面这款74LS173(3态输出端的4位D型寄存器,简单说就是一个能存4位数据的东西,可以用来做寄存器。

  

计算机底层原理杂谈(白话文)

  看这么多阵脚,我感觉分三类理解就行了,别管他们是数据输入、数据输出、信号控制啥的,他们都是一类,反正要给他们要么高要么低的电信号。还有一类就是接+接-的vcc和gnd,目的是让这个部件有“电”。还有一个是时钟clock,这你给他一个一会高一会低来回变的电信号就行了,目的一般是让它电平上升沿的时候这个部件“触发”一个什么效果,对这个寄存器来说,就是存了个数据或者读出了数据,当然有的部件不需要时钟信号。

  CPU以及它关联的其他设备,全都是一个个这样的“部件”,这些部件别管它多复杂,最终暴露出来的都是一个时钟、一个接正接负、一堆其他的乱七八糟的针脚。有的部件用来存东西,有的用来做运算比如加法器,有的用来计数比如程序计数器,有的部件用来做各种翻译呀转换呀什么的,比如地址译码什么的。最终它们都连接在一个大boss上那就是时钟信号发生装置,反正它的作用就是特别快速地输出一个高低高低高低电平来回转换的电信号。所以现在我总结出cpu就是一个boss时钟信号,一堆小弟部件,一堆导线把部件有规律地连在一块,最终都连在大boss上。

  那这样一堆部件是怎么运行的呢?首先第一个部件是程序计数器pc,它就是靠时钟信号不断累加,输出的针脚从0000,0001,0002一直往上加。当然你可以一个时钟周期(就是高低电平来一下)就+1,但这样除非你其他部件一个时钟周期内就能把一条指令执行完,一般不行,那怎么办呢,就再弄一个计数器,比如只能从0加到5。这个计数器每次都从0开始,然后没到5之前都把程序计数器的一个状态针脚变成“不触发加”的状态,这样程序计数器就不变了。然后各个部件在5个时钟周期内把指令执行完,然后程序计数器再加1。这就是单指令周期,每个指令都用5个时钟周期执行完。当然这不好,你可变化呀,让这个计数器从0加到一个动态的值,这个值根据指令类型改变,这就多指令周期了。然后程序计数器一直往上加也不好,给他弄几个针脚,再弄一个状态,可以直接设置一个新值,这就实现程序跳转了。一个指令周期可以动态改变,还可以强行设置程序计数器的值,这差不多就够了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxfsw.html