<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                本文由[CPU阿甘](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513017&idx=1&sn=5550ee714abd36d0b580713f673e670b&scene=21#wechat_redirect)改編而得,主要講的是系統啟動和程序執行時CPU做的工作。 # CPU的構成 中央處理器(CPU,Central Processing Unit)由運算器、控制器、Cache等。 - 控制器:主要是對指令進行譯碼。 - 運算器:主要是執行定點或者浮點運算等。 - 寄存器:主要功能是保存計算的中間結果 可以看出CPU的主要功能是接收指令,執行指令。不過CPU不能保存指令。 最大的優點在于**速度快**,以ns為單位,內存比它慢了100倍,硬盤比它慢了1000多萬倍。 ![image.png](http://upload-images.jianshu.io/upload_images/1323506-d14693dc90f53efa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 下面我們主要介紹一下計算機從加電到加載操作系統中,CPU主要做了什么事情。 ![image.png](http://upload-images.jianshu.io/upload_images/1323506-1d62af8f10be35d6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 啟動 當計算機上電了以后,CPU就先會執行**內存最頂端的指令**,現是一條**跳轉指令**,所以會去執行BIOS里面的代碼。 我們知道BIOS的主要功能是**系統自檢**,看看內存、硬盤、顯卡等是否有問題。自檢完成以后,會產生**中斷**,BIOS會告訴CPU是多少號中斷。 中斷了以后,CPU怎么知道去哪里執行響應中斷的指令呢?我們可以用一張表來保存中斷指令的響應代碼,但是為了讓這張表不那么臃腫,可以讓這張表只保存響應代碼的**入口地址**。 比如 | 中斷類型號 | 響應指令的地址 | |-|-| | 0x01 | 地址A | | 0x02 | 地址B | | …… | …… | 這張表就稱為**中斷向量表**,保存的是響應中斷的指令的**入口地址**,類似于響應代碼的房間號。 CPU可以通過**中斷向量表**查找到對應的指令,這條指令的目的是把**磁盤的第一扇區(磁盤的BIOS)運到內存中**。 到目前為止,硬件的初始化就完成了,下面應該加載**操作系統** ![image.png](http://upload-images.jianshu.io/upload_images/1323506-038a75f52b71b210.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 運行程序 操作系統加載入內存中以后,會接管整個系統的管理工作。 下面我們來談一下如何運行程序。 首先操作系統會為CPU分配進程,不過對CPU而言,它只關心自己的**寄存器**和**程序計數器** - 寄存器:工作現場,包括一些計算的中間結果 - 程序計數器:要執行的下一條指令的地址。 要運行程序,首先需要從硬盤上加載程序。但是從硬盤上讀程序實在太慢,CPU沒有必要一直等著它,完全可以異步處理。 硬盤把返回的數據通過**直接內存訪問(DMA)**把數據裝載到內存中。這樣CPU就解放出來,切換到另一個進程里面,當然相關的運行環境(寄存器、程序計數器)發生了改變。 但是上一個進程不可能放棄不執行了吧,所以等到當上一個進程的數據已經裝載到了內存以后,CPU會收到一個中斷,這樣就可以切換回去了。 總結一下CPU的主要工作是,從內存中取出指令,進行譯碼,分解成為一系列的**微操作**,然后發出各種控制命令。 對CPU而言,主要關心的是它的寄存器和程序計數器,其中寄存器保存了計算的中間結果,而程序計數器可以用告訴CPU下一條指令去那里執行。 ![image.png](http://upload-images.jianshu.io/upload_images/1323506-10221d16ac2b1cb1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 性能參數 CPU的主要性能參數有: - 主頻:表示CPU內數字脈沖信號震蕩的速度,與實際的運算速度沒有直接的聯系,比如1GHz的Itanium芯片與2.66GHz的至強芯片一樣快,因為CPU的運算速度除了有主頻的因素,還有CPU的流水線、總線等各方面的影響。 - 外頻:CPU的基準頻率,MHz,可以決定**主板**的運行速度,如果把CPU超頻了,可以CPU與主板會異步運行,所以整個系統有可能不穩定,一般來說服務器CPU不允許超頻。 - 總線頻率:指的是前端總線的頻率,而前端總線指的是CPU與北橋之間的總線。 那么總線頻率其實直接影響**CPU與內存的之間的交互速率**,即每秒CPU能接收的數據傳輸量。這點與外頻不一樣,外頻是整塊主板的運行速度。 - Cache:因為CPU與內存之間存在速度差,同時我們發現程序的加載有**局部性**的特點,也就是說一個內存位置被訪問了,附近的位置很快也會訪問到。那么我們完全可以把內存中的部分代碼提前加載到Cache里面。 既然Cache的主要作用是CPU與內存的緩沖層,那么Cache的速度應該接近于CPU,基本上是與CPU同頻運作。 緩存都集成在CPU芯片上,而CPU單位面積的價格很昂貴,Cache一般都很小。 ![image.png](http://upload-images.jianshu.io/upload_images/1323506-d77c55bf5e50eaae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 指令集 我們知道CPU的主要功能是解析指令,執行指令,也就是說CPU是靠一條一條的指令來計算和控制整個系統的。 也就是說不管是什么CPU,都有與之相匹配的指令系統。常用的指令集有兩種 - 復雜指令集:一般來說程序的指令是按照順序串行執行的,而指令中的各個操作也是串行執行的。這樣控制簡單,但是利用率不高。 x86架構的CPU主要使用的就是復雜指令集,AMD屬于后起之秀,所以一定會兼容x86架構,它也是復雜指令架構的。 - 精簡指令集: 復雜指令集最大的缺點在于微處理器太過復雜,所以研發成本高。而精簡指令集,顧名思義,其指令系統得到大量的精簡,而且指令格式統一,所以可以使用流水線結構,處理速度就上去了。 服務器中采用RSIC指令的CPU主要有:PowerPC、MIPS處理器。 ![image.png](http://upload-images.jianshu.io/upload_images/1323506-a2a448c9fb9ad992.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 處理技術 本章主要介紹一下CPU體系架構里面常用的技術 ## 流水線 每條指令都會經過取指(Fetch),譯碼(D1, main decode),轉址(D2, translate),執行(EX, execute),寫回(WB)結果等步驟。 那么當CPU預取完畢,進行譯碼的時候,預取部分的電路單元其實是空閑的。那么能不能讓下一條指令進來執行預取的過程呢?答案是完全可以。 如下圖所示,我們可以每過一個周期放入一條指令,這樣在第5個時刻,最開始放入的指令其實已經執行到了最后一步WB了,第2條進入執行的指令比它晚一拍,執行到了EX上,其他的一次類推。 這樣不斷的有新的指令進入,同一時刻5條指令都在執行,只是說他們執行的階段不一樣。這樣就實現了并行處理。 ![image.png](http://upload-images.jianshu.io/upload_images/1323506-0c4063a11b5031f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看