現代電腦理論模型,工作原理,以及硬體是如何實現併發安全

来源:https://www.cnblogs.com/jishuzhaiachong/archive/2019/07/24/bingfabianchengzhiyingjianjichu.html
-Advertisement-
Play Games

1.馮·諾依曼體系 現代電腦的模型都是基於馮·諾依曼體系的,馮·諾依曼體系的基本組成有存儲器,計數器,控制器,輸入和輸出設備,總共有這五大本分組成。下圖是我基於這五大組成部分畫了一個組成圖來表示他們之間的關係,如圖1-1。 圖1-1 基於馮·諾依曼體系,首先控制器從記憶體中取出指令,有控制器來執行, ...


 1.馮·諾依曼體系

  現代電腦的模型都是基於馮·諾依曼體系的,馮·諾依曼體系的基本組成有存儲器,計數器,控制器,輸入和輸出設備,總共有這五大本分組成。下圖是我基於這五大組成部分畫了一個組成圖來表示他們之間的關係,如圖1-1。

                            

                                                                               圖1-1

 

  基於馮·諾依曼體系,首先控制器從記憶體中取出指令,有控制器來執行,控制器通過計數器來完成各種邏輯運算,算術運算等,然後將數據寫會記憶體,輸入設備輸出設備更是常見,在這裡就不一一贅述,重點是下麵的內容。

2.電腦的硬體結構

  電腦的硬體結構更是基於馮·諾依曼體系的,主板上主要由cpu,記憶體,匯流排等重要部件組成,其大致的示意圖如下圖2-1所示:

                                                           

                                                                                                      圖2-1

  cpu是主板上的核心部件,主要負責指令的執行,記憶體通過記憶體匯流排和I/O橋相連,在這裡I/O橋可最大程度的解決cpu與記憶體速度不匹配的問題,一般cpu的速度是gHZ為單位的,而記憶體條則是幾百兆HZ為單位,兩者存在速度不匹配的問題,在這裡I/O橋可以緩解兩者速度不匹配,還有一個也能緩解cpu與記憶體的速度不匹配的問題,那就是cpu緩存,她的速度很快,但是成本相對較高,不適合記憶體條大量使用,因此apu緩存很小,但它可有效的緩解此問題。

  匯流排是cpu與其他部件交互的通道,可通過USB控制器鏈接滑鼠,鍵盤等,圖形適配器可鏈接顯示器等。

3.多cpu緩存架構

  多cpu在與記憶體交互的時候,是存在併發安全的問題的,當一個主板上有多個cpu時,和cpu多核又是不一樣的,在這裡就來講講多cpu時,cpu是怎麼從記憶體讀取數據,並保證他們的併發安全,這裡完全是從硬體層次來講,這對後面去學習併發,線程和JMM,以及JVM有很大的幫助,有些軟體層次的技術實現,完全是基於現有的硬體基礎。

  多cpu的情況下,當其中一個cpu從記憶體讀取數據,放入cpu緩存,如果該cpu對這個數據要進行修改,這個時候,另一個cpu剛好也從記憶體讀取了該數據,也要對他進行修改,那麼當兩個cpu同事從該記憶體中讀取該數據,並對他進行邏輯,算術等運算是,這個時候記憶體中在接受cpu返回的該數據是不准確的,就存在了併發的安全問題(技術在不斷發展,cpu從以前的單核,一些cpu廠家有段時間一致於追求提高cpu的運算頻率,到後來發現cpu的頻率提高達到了瓶頸,要想在提高cpu的運算速度,光靠提高頻率是遠遠不夠的,這個時候,一些技術大牛們就想到了單個cpu多核,這樣就立竿見影的提高了cpu的速度)。這個時候就有了匯流排鎖和後來的緩存一致性協議來實現併發安全。下圖是我多cpu與記憶體交互的一個簡圖,見下圖3-1。

                      

                                  圖3-1

  先講講匯流排鎖,匯流排鎖很簡單,早期奔騰cpu只能依靠匯流排鎖來解決併發的問題,當一個cpu讀取了記憶體中的某個數據的時候,該cpu對匯流排加了把鎖:lock。當其他cpu通過匯流排去訪問記憶體的該數據時是訪問不了的,這就是匯流排鎖。匯流排所有很多缺點,比如cpu的利用率低,當多個cpu同時對一個數據訪問時,只能有一個cpu能拿到這把匯流排鎖,其他cpu只能處於低效率狀態。匯流排鎖在早期的奔騰系列的cpu用的很多,到了後來的酷睿以及新的一些cpu絕大部分使用緩存一致性協議,下麵我就來詳細說明一下MESI緩存一致性協議,當cpu從主存中讀取了該數據進入cpu的緩存行(catch line)中的時候,並且其他cpu沒有讀取該數據,該緩存行的狀態為E狀態(Exclusive),也就是獨享狀態,這個時候如果該對該緩存行進行了修改,那麼該緩存行的狀態就會變成M狀態(Modified),也就是修改狀態,表示該緩存行的數據修改了,與記憶體中的數據不一致,當該cpu監聽到其他cpu也要讀取該數據的時候,那麼,該緩存行的狀態會變成S狀態(Shared),也就是共用狀態,cpu會在一個特定的時間節點將數據協會記憶體(下篇博文中講到兩個線程讀取記憶體一個變數的時候,會用到這個知識點),保證緩存行的數據與記憶體一致,從而其他cpu也可以讀取該數據。其中該緩存行在S狀態的時候,也會去監聽其他緩存行的消息,當其他緩存行變成M狀態的時候,此時該緩存行就會變成I狀態(Invalid),也就是無效狀態,當有條件觸發需要該數據的時候,會重新從記憶體中讀取該數據。MESI緩存一致性協議依賴於匯流排的嗅探機制,該機制時刻監聽cpu中緩存行的狀態,並通過匯流排發消息來將緩存航狀態發送給其他緩存行。

  在這裡需要註意的是,現代的酷睿系列處理器雖然用的很多MESI緩存一致性協議,保證了cpu的利用率,但是他也有使用的限制,也就是緩存行,當該數據的長度超過了該緩存航的最大容量,那麼他只能使用匯流排鎖來保證併發的安全。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. window.top 用來判斷當前部分是否在頁面的最頂層,比如:判斷是否在iframe中,等等; 2.css3中width的屬性值增加了。width:fit-content; 隨內容的增加而撐開,不會因為單詞的分隔自動wrap,還有一些屬性值max-content,mini-content,f ...
  • 寫代碼的時候就經常把這兩個屬性弄混淆,到底是href還是src,href表示超文本引用,用在link和a等元素上,href是引用和頁面關聯,是在當前元素和引用資源之間建立聯繫,src表示引用資源,表示替換當前元素,用在img,script,iframe上,src是頁面內容不可缺少的一部分。 src是 ...
  • 最近在做項目的時候發現的一個問題,通過ajax動態載入出來的一個button值綁定不了點擊事件。我使用的是datatables這款表單插件,表單內容是通過ajax動態渲染出來的。 解決方案: 通過Google,我發現在jquery1.7版本之前通常使用 .live() 這個事件,但是這個方法在1.9 ...
  • 首先我們還是先看一下WEB前端目前的工資情況吧,我在IT招聘網站拉勾網來進行搜索1-3年WEB前端工作經驗大專學歷的條件來看。 深圳: 可以看出目前深圳的平均的工資都在10K以上,因為大城市給的機會多,好公司也多,福利也好,所以在一線城市做WEB前端開發的,是非常稀缺的。 如果我們把標準降低在二線城 ...
  • vue更新換代很快,馬上vue都要出3.0了,這是一個巨大的變革,不過今天講的是vuecli3.0,裡面使用的vue仍然是2的,所有可以放心大膽使用。 Vue CLI 是一個基於 Vue.js 進行快速開發的完整系統,裡面所有具體介紹都可以去官網查看到 "vuecli官網移步" 這裡主要是講一些我實 ...
  • 譯者按: 使用 來捕獲所有的異常 原文: "Async Await Error Handling in JavaScript" 譯者: "Fundebug" 本文采用意譯,版權歸原作者所有 async/await 中的異常處理很讓人混亂。儘管有很多種方式來應對 "async 函數的異常" ,但是連經 ...
  • web前端全套視頻教程,html5,css3,javascript,.AngularJS. 下載地址 ...
  • 1.更換窗體圖標 方法:單擊窗體,更改icon屬性。 2.調整窗體打開時預設位置 方法:單擊窗體,更改StartPotion屬性。 3.修改窗體大小 方法:單擊窗體,更改Size屬性。 4.設置窗體的背景圖片 方法:單擊窗體,更改BackgroundImage屬性。 5.打開新窗體 首先新建一個窗體 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...