プログラマーとして、知識でこれらのハードコアCPUは、あなたがする必要があること!

各プログラマのためのCPU、両方の使い慣れたなじみのないものでしょうか?

あなたが唯一の中央プロセッサCPUを知っている場合、それはあなたが、その後、プログラマーとして、我々はそれがこの男は、特にレジスタがあるの内側にそれを知るために、CPUを実行する方法であるということである知って取得する必要はありませんしているものかもしれませんそれがどのように、それはあなたがプログラムを実行しているの根底にあるメカニズムを理解することができますので。

私と一緒に、どの商品もCPUの下に知るために

ばらばらにし、CPUを見て

CPUに関しては、我々は最初にすべてのそれがどのように、あること、その内部構造は、当然のことながら、その後、牛の事のCPUは、それは非常に複雑な構造である必要があります理解したい、すべての後に、ああそう、超ハイテクのものです、今日、私たちは、組成物は、オハイオ州の論争を控えるために、その部分を理解するために、主要なと私たちのプログラマのための便利な必要性を参照してください何を言います

ルまず、私はあなたがこれらの言葉を覚えておきたいです。

CPUは、最終的に機械語コンテンツに変換解釈し実行するための責任があります

また、ああ、CPUの話を、いくつかのメモリは、私たちはこれらのプログラマーを理解するために、後者は、すべての後、非常に重要な次のメモリ上の別のいずれかになりますので、単純に、メモリについてお話します、今日のプレゼンテーションでは、分離することはできませんCPUとメモリは関係であることが多いので、彼らは実際には、一般的に集積回路の意味であるIC、それらを呼び出す、トランジスタの多くを持っています。

私はここで注意する前に次の我々はCPUの構成を見てみましょう、組成物は、一般的に、すべてのCPUの複雑な構造をした後、主要部分を指していると述べました。

私たちは、CPUの構造を知っておく必要があります

注意レジスタを集中する必要があります

オペレータ

文字通り動作に関連して理解し、それは単に、登録すると見なすことができ、メモリからデータを読み出すための操作を担当するデータ処理工場、それの基本的な動作含まれ、演算データが登録実行する算術論理演算を

その後オペレータのために、私たちは、その後、私は一つ一つを紹介しますいくつかの重要な役割のかを理解したいです。

算術論理ユニット(ALU)

これは、重要な作業であることがデータに算術論理演算を実現することであるデータの処理のために責任があります

積分レジスタ(AC)

多くの場合、これはそれを暗く、汎用レジスタがあり、積算計と呼ばれますか?上記の場合、算術または論理演算ALU、ALUは、1の結果を処理し、結果をACに格納される前記しました

データバッファレジスタ(DR)

DRはまた、一時的にメモリとCPU通過点間の等価のデータ転送を行うためにここにDRに格納される、データを記憶にわたってメインメモリから読み出され、データを格納する、なぜ、これを持っています我々は、DRの中間導入、CPUとメモリの速度は非常に異なっているある程度の速度でバッファの役割を果たし、速度差があまりにも激しいではありません

ステータス・コンディション・レジスタ(PSW)

少し、理解しにくい第一レジスタまたはデータを保存するので、当然、様々な条件コードを格納するデータの特定のタイプ、保存PSWは、主演算命令または試験確立の結果の内容によって実行される、一般的なように、このルックスステータスフラグと制御フラグに分け、あなたがライン上で知っています

なぜこれを言う、ALUはの意味で、このような論理演算ユニットとして、略語を持っている私たちは、コア事業者は上記のこれらのコンポーネントを、理解する必要があり、もう一方は、実際にそれらのそれぞれについての特別講演を必要としていますル、我々は一般的に交流ではなく、論理演算装置ALUは、それゆえ、彼らの略語を覚えておくことも非常に重要ああしているとき言うように、すべての後、英語の略語で、簡単で、グリッドを余儀なくされたからです。

そうでなければ、他の人までと通信し、その後、誰かがALUは、DRが良くなっコンセントがあり、それはリズムああを維持するのは簡単です。

後でCPUの演算子の基本的な理解を持って、私たちは別の重要なコンポーネントを見てみましょうコントローラ

コントローラ

演算機能上述した制御の役割のみを果たしたが、コントローラより牛を再生する制御は、それは一般的に、プログラムの適切な実行を確実にするため、コントローラの全体CPUの作業を制御することです異常なイベントを処理すると能力

同様に、コントローラのために、我々は次のいくつかに焦点を当てる必要があります:

命令レジスタ(IR)

レジスタは、物事を保つため、命令レジスタは、CPUが1つの命令を実行することを、自然な命令の保全です、そして、最初の命令の必要性がメモリから読み出され、その後、我々はDRから再びバッファレジスタへのデータの上に述べた、とIRに、コマンドデコーダと呼ばれるものは、IRの操作内容に応じてマイクロ命令の多くは、対応する機能が完了すると、それによって他の構成要素を制御するために、そこに発生する、ル続き

プログラムカウンタ(PC)

これは、命令が実行された場合は、プログラムの開始アドレスは、PCに保存されます、プログラムを実行するときと言うことです次に実行すべき命令を保持しているJavaのメモリ構造を、理解するために検討すべきその後、CPUが自動的に実行される次の命令はPCに保存されるように変更されますが、心配しないでください

アドレス・レジスタ(AR)

CPUがメモリを読み書きするまで、そのメモリアドレスがアクセスされて保存するので、これは、あなたがCPUとメモリの速度差が比較的大きいとしてこれを保存したいなぜ、アクセス・メモリにCPUのメモリアドレスを保持するメモリであります操作が完了し、そうでない場合、あなたはああですメモリユニットにアクセスする前に見つけることができませんでした

命令デコーダ(ID

シンプルなポイントは、このディレクティブを行うにしたいかどうかを確認するために分析を行うための命令であり、

我々は多数のレジスタは、レジスタの重要性を示しており、上記の持っているとき、私はあなたが見つけ、いずれかのオペレータまたはコントローラを再導入していないかわからない、事実で言っていたレジスタの集合であるCPUが、言ってレジスタに最初のメモリで簡単に見てみることを前に、我々はまだ必要。

シンプルメモリ(後に別途言う)と

CPUとメモリは、記憶装置は、天然成分が、それはシェーン保存され、CPU、メモリの理解を促進するために、ここではメモリへの簡単な紹介を座っ常に不可分ですか?一般的には、それは、データと命令であり、我々は多くの場合、メモリはコンピュータのメモリを参照していることを言う店プログラムああ、ああデータ、命令ああ、これらのものに使用されています。

実際に、小さなグリッドのメモリとして見ることができる、画像点は、各グリッドはデータを格納するのに使用されるだけでなく、数字のメモリアドレスである各グリッドは、それが対応するメモリに格納されたデータに基づいて取得することができますまた、電気が消えた場合、メモリ内のデータが消去されますされて知っている必要があります。

CPUレジスタのほとんどは、

これは、CPUが実際に、実際には、二つの主要なオペレータとコントローラのオペレータまたはコントローラの両方で構成されていると言い、レジスタから切り離せない、それは言うことができる、世界のCPUレジスタで、そのため、CPUのために、あなたはレジスタを習得しなければなりません、いくつかの計算を行うためにCPUが実際にレジスタを介して達成され、あなたがこの記事を見てみることができます:コンピュータプログラムを実行する方法ですか?

最初の文を覚えておいてください:

私たちは、Javaを使用して、パイソンこれらは、高レベル言語プログラミングされているが、最終的に機械語に変わります、その後、内部CPUレジスタで適切な治療を行うために、本質的には、CPU動作に入ります

登録

これは、私たちはマスターに必要なものこの事のレジスタで、異なるCPUのレジスタ数と種類が含まれている異なりますが、一般的には、いくつかのレジスタがある、ファンクションポイントに応じて

另外其实就可以把CPU理解为是寄存器的集合体,然后你需要知道程序计数器,累加寄存器,标志寄存器,指令寄存器和栈寄存器只有一个,其他的寄存器一般会有多个。

说说这个程序计数器

为啥要说这个,因为这玩意决定着程序的执行流程,我们进一步来看看

比如看这个,这个表示的是两个数相加的操作,关于这个操作涉及到的数据和指令都保存在了内存中,而且每个数据和指令所在的内存单元都是有编号的,也就是内存地址,就是图中0100,0101那些,自上而下就是该操作的执行顺序。

上面也提到过,程序计数器是保存程序执行的指令的,准确说保存的是程序执行指令的地址值,怎么理解呢?也就是说程序的每一步操作,底层来说都是有一系列指令对应着的,这些指令就是表明这一步该怎么操作,比如a+b这个操作,加载进内存后就是对应着一系列的指令。

首先就是一个指令,表明要把a这个数值做相加操作,需要先把a保存到累加寄存器,而这个指令被保存在内存中的一个内存单元中,这个内存地址比如说就是0100,而此时程序计数器就是保存的这个0100内存地址,要执行程序的时候,CPU去看看程序计数器保存的第一个地址,发现是0100,然后去内存这个0100的位置,看看保存的是啥,一看是一个指令,分析指令,原来是要把0105地址中的值保存到累加寄存器中,然后就开始干活……

所以说啊,程序计数器其实我是决定管理程序的执行流程的

CPU是如何做比较的

这个也需要了解一下,CPU的比较其实就是再内部做减法运算,什么意思呢?比如要比较a和b,就是再内部做一个a-b的操作,然后依据得到的结果来对a和b做比较,这里面肯定是要借助寄存器来完成,比如得到的结果就会放到标志寄存器中。

CPU做的事其实很简单

我们在之前的文章说过,CPU其实主要就是干如下的四件事情

  1. 从内存中读取数据,然后放到寄存器中
  2. 把寄存器中的数据写入到内存
  3. 进行数学运算和逻辑运算(加减乘除,AND,OR)
  4. 依据相应的条件进行跳转,执行其他指令(一条指令跳转到另外一条指令)

我们知道,CPU是依据指令做事情的,为什么CPU只做上面的四件事情,主要就是看CPU 能执行的机器语言指令有哪些,主要就是如下这些

这么一看,CPU能干的事也没有那么复杂啊。

CPU指令执行过程

经过上面的讲解,我们应该知道CPU就是看指令做事情的,那么关于指令,CPU又是怎么操作的呢? 我们要知道的是几乎所有的冯·诺伊曼型计算机的CPU,其工作都可以分为5个步骤:取指令、指令译码、执行指令、访问取数、结果写回。

可能你不懂了,没啥,其实不就是这五个步骤嘛,搞清楚他们不就ok,接下来咱们来看看:

第一:取指令

字面意思很好理解啊,不就是拿到需要的指令嘛,那么指令在哪嘞,必须是在内存啊,也就是需要从内存中取出我们需要的指令,然后干嘛,不就是把指令放到CPU中的寄存器嘛,这个取指令就是这么一个过程。

第二:指令译码

这个是不是很快想到我们上面说的指令译码器,这个不就是对上一步拿到的指令做分析嘛,干嘛要分析,我得看看你这个指令到底要干啥啊,不然CPU怎么干活嘞

第三:执行指令

这个不就更好理解了,就是开始干活啦,实现相应的功能了

第四:访问取数

直观上好像没有那么好理解,其实啊,说的就是,我们根据上面的操作,有可能需要从内存中去拿数据,啥意思嘞,要知道,内存存放的是数据和指令,比如执行a+b的操作,我们得到相加的指令,对于a和b都是操作数,它们也是存放在内存中的,是不是也需要去内存中去拿到它们

看上面那个图,0100对应的指令是不是要去0105对应的地址中去拿数据123,这不就是访问取数嘛。

第五:结果写回

这又是啥,经过上面那么些个步骤,做的运算肯定得有结果啊,这结果咋弄,你不得保存在哪啊,通常是保存在CPU内部的寄存器中,一般是标志寄存器,这不是就是结果写回嘛

好啦,到这里,关于CPU的知识咱们就介绍的差不多了,当然,CPU的知识远远不止如此,但是作为程序员的你,最起码也得知道这些啊。

感谢阅读

大家好,我是ithuangqing,一路走来积累了不少的学习经验和方法,而且收集了大量的精品学习资源,现在维护了一个公众号【编码之外】,寓意就是在编码之外也要不停的学习,主要分享java技术相关的原创文章,现在主要在写数据结构与算法,计算机基础,线程和并发以及虚拟机这块的原创,另外针对小白还在连载一套《小白的java自学课》,力求通俗易懂,由浅入深。同时我也是个工具控,经常分享一些高效率的黑科技工具及网站

对了,公众号还分享了很多我的学习心得,可以一起探讨探讨!

关注公众号,后台回复“庆哥”,2020最新java自学资源立马送上!更多原创精彩尽在【编码之外】

在这里插入图片描述

发布了146 篇原创文章 · 获赞 2565 · 访问量 30万+

おすすめ

転載: blog.csdn.net/sinat_33921105/article/details/104066631