深入理解計算機系統 視頻教程,深入理解計算機系統1

第一章 計算機系統漫游

代碼段的生命周期

hello.c

#include

int main()

{

printf("hello world!\n");

return 0;

}

1.1 前序

源程序(源文件)實際上就是一個由0和1組成的位(又成比特bit)序列,8個位被組組成一組,稱為字節。每個字節表示程序中的某些文本字符(大部分的現代計算機系統都使用ASCII標準來表示文本字符)

1.2 編譯過程

hello.c -> 預處理器(cpp) -> hello.i(修改了源程序文本-將#include、宏 進行相應的替換) -> 編譯器(ccl) -> hello.s(翻譯成匯編程序文本) -> 匯編器(as) -> hello.o(翻譯成機器語言指令) -> 鏈接器(ld) -> hello(可執行文件)

1.3 系統硬件的執行流程

系統硬件的組成

1.總線

貫穿剩個系統的是一組電子管道,稱為總線,它攜帶信息字節并負責在各個部件間傳遞。通常總線被設計成傳遞定長的字節塊,也就是子(word).字重的字節數(即字長)是一個基本的系統參數,各個系統中都不盡相同.現在的大多數機器字節長要么是4個字節(32位),要么是8個字節(64位)

2.I/O設備

I/O(輸入/輸出)設備是系統與外部世界的聯系通道

3.主存

主存是一個臨時存儲設備,在處理器執行程序時,用來存放程序和程序處理的數據.從物理上來說,主存是由一組動態隨機存存取存儲器(DRAM)芯片組成的.從邏輯上來說,存儲器是一個線性的字節數組,每個字節都有其唯一的地址(數組索引),這些地址是從零開始的.一般來說,組成程序的每條機器指令都由不同數量的字節構成

4.處理器

中央單元處理器(CPU),簡稱處理器,是解釋(或執行)存儲在主存中指令的引擎.處理器的核心是一個為一個字的存儲設備(或寄存器),稱為程序計數器(PC).在任何時刻,PC都指向主存中的某條機器語言指令(即含有該條指令的地址)

從系統痛點開始,直到系統斷電,處理器一直在不斷地執行程序計算器指向的指令,在更新程序計數器,使其指向下一條指令.處理器看上去是按照一個非常簡單的執行模型來操作的,這個模型是由指令集架構決定的.這個模型中,指令按照嚴格的順序執行,而執行一條指令包含執行一系列步驟.處理器從程序計數器指向的內存處讀取指令,解釋執行中的位,執行指令指示的簡單操作,然后更新PC,使其指向下一條指令,而這條指令并不一定和內存中剛跟執行的指令相鄰.

這樣的簡單操作并不多,它們圍繞著主存、寄存器文件(register file)和算數/邏輯單元(ALU)進行.寄存器文件是一個小的存儲設備,由一些單個字長的寄存器組成,每個寄存器都有唯一的名字.ALU計算新的數據和地址值.下面是一些簡單的操作的例子,CPU在指令的要求下可能會執行這些操作

- 加載:從主存復制一個字節或者一個字到寄存器,以覆蓋寄存器原來的內容

- 存儲:從寄存器復制一個字節或者一個字到主存的某個位置,已覆蓋這個位置上原來的內容

- 操作:把兩個寄存器的內容復制到ALU,ALU對著兩個字做算術運算,并將結果存放到一個寄存器中,已覆蓋寄存器中原來的內容

- 跳轉:從指令本身抽取一個字,并將這個字復制到程序計數器(PC)中,以覆蓋PC中原來的值

1.4 存儲設備形成層次結構

在處理器和一個較大較慢的設備(例如主存)之間插入一個更小更快的存儲設備(例如告訴緩存)的想法已經成為一個普遍的觀念.實際上,每個計算機系統中的存儲設備都被組織成了一個存儲器層次結構,在這個層次結構中,從上至下,設備的訪問速度越來越慢,容量越來越大,并且每個字節的造價也越來越便宜.寄存器文件在層次結構中位于頂層,也就是第0級或記為L0.

1.5 操作系統硬件管理

操作系統有兩個基本的功能:

- 防止硬件被失控的應用程序濫用

- 向應用程序提供簡單一直的機制來控制復雜而又通常大不相同的低級硬件設備

操作系統通過幾個基本的抽象概念(進程、虛擬內存和文件)來實現這兩個功能

![](https://img2020.cnblogs.com/blog/1585694/202010/1585694-20201028114153849-2030273858.png)

如上圖所示:文件是對I/O設備的抽象表示,虛擬內存是對主存和磁盤I/O設備的抽象表示,進程則是對處理器、主存和I/O設備的抽象表示

進程

```進程```是操作系統對一個正在運行的程序的一種抽象.在一個系統上可以同時運行多個進行,而每個進程都好像在獨占地使用硬件.而```并發運行```,則是說一個進程的指令和另一個進程的指令是交錯執行的.在大多數系統中,需要運行的進程數是多于可以運行他們的CPU個數的.傳統系統在一個時刻只能執行一個程序,而先進的多核處理器同時能夠執行多個程序,這是通過處理器在進程間切換來實現的.操作系統是新建這種交錯的機制稱為```上下文切換```

操作系統保持跟蹤進程運行所需的所有狀態信息.這種狀態,也就是上下文,包括許多信息,入PC和寄存器we年的當前值.當操作系統決定要把控制權從當前進程轉移到某個新進程時,就會進行上下文切換,即保存了當前進程的上下文、恢復新進程的上下文,然后將控制權傳遞到新進程.新進程就會從它上次停止的地方開始

線程

盡管通常我們認為一個進程只有單一的控制流,但是在現代系統中,一個進程實際上可以由多個稱為```線程```的執行單元組成,每個線程都運行在進行的上下文中,并共享同樣的代碼和全局數據.由于網絡服務器中對并行處理的需求,現場稱為越來越重要的編程模型,因為多線程之間比多進程之間更容易數據共享,也因為線程一般來說都比進程更高效.當有多處理器可用的時候,多線程也是一種使得程序可以運行的更快的方法

虛擬內存

虛擬內存是一個抽象的概念,它為每個進程提供了一個假象,即每個進程都在獨占地使用主存.每個進程看到的內存都是一致的,稱為```虛擬地址空間```.

在Linux中,地址空間最上面的區域是保留給操作系統中的代碼和數據的,這對所有進程來說都是一樣的.地址空間的底部區域存放用戶進行定義的代碼和數據(下圖中地址是從下往上增大的)

每個進程看到的虛擬地址空間由大量準確定義的區域構成,每個區都有專門的功能

- 程序代碼和數據:對所有的進程來說,代碼時從同一固定地址開始,緊接著是和C全局變量相對應的數據位置.代碼的數據區是直接按照可執行目標we年的內容初始化,在示例中就是可執行文件 hello.

- 堆:代碼和數據區后緊隨著的是運行時```堆```.代碼和數據區在進程一開始運行時就被制定了大小,與此不同,當調用了malloc和free這樣的C標準庫函數時,堆可以在運行時動態地擴展和收縮

- 共享庫:大約在地址空間的中間部分是一塊用來存放像C標準庫和數學庫的共享庫的代碼和數據的區域.共享庫的概念非常強大,也相當難懂

- 棧:位于用戶虛擬地址空間頂部的是```用戶棧```,編譯器用它來實現函數調用.和堆一樣,用戶棧在程序執行期間可以動態的擴展和收縮.特別的,每次我們調用一個函數時,棧會增長;從一個函數返回時,棧胡收縮

- 內核虛擬內存:地址空間頂部的區域是為了內核保留的.不允許應用程序讀寫這個區域的內容或者直接調用內核代碼定義的函數.相反,它們必須調用內核來執行這些操作

文件

文件就是字節序列,僅此而已.每個I/O設備,包括磁盤、鍵盤、顯示器、甚至網絡,都可以看成是文件.系統中的所有輸入輸出都是通過使用一小組稱為 Unix I/O的系統函數調用來讀寫文件實現的

文件這個簡單而精致的概念是非常強大的,因為它向應用程序提供了一個統一的視圖.

1.6 系統之間利用網絡通訊

現代系統經常通過網絡和其他系統連接到一起.從一個單獨的系統來看,網絡可以視為一個I/O設備.當系統從主存復制一串字節到網絡適配器時,數據流經過網絡到達另一臺機器,而不是比如說到達本地磁盤驅動器.相似地,系統可以讀取從其他機器發來的數據,并把數據復制到自己的主存.

隨著Internet這樣的全球網絡出現,從一臺主機復制信息到另外一臺主機已經成為計算機系統最重要的用途之一.例如:電子郵件、即時通訊、萬維網、FTP、和Telnet這樣的應用都是基于網絡復制信息的功能

1.9 Amdahl定律

![](https://img2020.cnblogs.com/blog/1585694/202010/1585694-20201028142434217-424989952.png)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371931.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371931.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371931.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java與iOS對話:Java對象與Apple plist序列化

我很高興地宣布我的第一個開源項目java-plist-serializer可以幫助您將Java(尤其是基于Spring的應用程序)與iOS應用程序集成。 背景 我正在將Java Webapp作為后端并且客戶端是iOS設備的項目。 最近,我收到了創建Web服務的任務,該服…

web.cofing(新手必看)

花了點時間整理了一下ASP.NET Web.config配置文件的基本使用方法。很適合新手參看&#xff0c;由于Web.config在使用很靈活&#xff0c;可以自定義一些節點。所以這里只介紹一些比較常用的節點。 <?xml version"1.0"?> <!--注意: 除了手動編輯此文件以外&…

MIPS下CPU和RAM的數據流動情況詳解

這是計算機硬件間的數據路徑&#xff08;即數據流動的路徑&#xff09;&#xff0c;下面將較詳細分析此圖&#xff1a; PC&#xff08;program counter&#xff0c; 程序計數器&#xff09;是一個用于記錄當前計算機正在執行的指令的地址的寄存器&#xff08;register&#xff…

計算機亂程序怎么辦,我的電腦程序亂了怎么辦

我的電腦程序亂了&#xff0c;想用光盤恢復一下系統的修復安裝方法第一種方法&#xff1a;1、點擊“開始”菜單&#xff0c;點擊“運行”2、輸入CMD回車3、輸入命令SFC/SCANNOW4、插入系統光盤系統會自動將硬盤中的系統文件于系統盤中的文件比較并進行修復如果不行&#xff0c;…

【計算機網絡】網絡層——IP協議

目錄 一. 基本概念 二. 協議報文格式 三. 網段劃分 1. 第一次劃分 2. CIDR方案 3. 特殊的IP地址 四. IP地址不足 1. 私有IP和公網IP 2. DHCP協議 3. 路由器 4. NAT技術 內網穿透(NAT穿透) 五. 路由轉發 路由表生成算法 結束語 一. 基本概念 IP指網絡互連協議…

完整的Web應用程序Tomcat JSF Primefaces JPA Hibernate –第2部分

托管豆 這篇文章是本教程第1部分的繼續。 在“ com.mb”包中&#xff0c;您將需要創建以下類&#xff1a; package com.mb;import org.primefaces.context.RequestContext;import com.util.JSFMessageUtil;public class AbstractMB {private static final String KEEP_DIALOG…

P1014 Cantor表

洛谷 p1014 題目描述 現代數學的著名證明之一是Georg Cantor證明了有理數是可枚舉的。他是用下面這一張表來證明這一命題的&#xff1a; 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我們以Z字形給上表的每一項編號。第一項是1/1&#xff…

dvd管理系統

>>>>>>>>>>>>>>>>>>>> 語言&#xff1a;java 工具&#xff1a;eclipse 時間&#xff1a;2016.12.1 >>>>>>>>>>>>>>>>>>>> 一代代碼&#xff1a; 1 …

佳能2900打印機與win10不兼容_佳能RF 1.4、RF 2增倍鏡與RF 100500mm L IS USM并不完全兼容...

據佳能官方透露&#xff0c;佳能RF 1.4、RF 2增倍鏡與RF 100-500mm F4.5-7.1 L IS USM鏡頭并不完全兼容。在安裝使用兩款增倍鏡時&#xff0c;用戶需將RF 100-500mm鏡頭變焦環的變焦位置移動到超過300mm的遠攝區域。而在搭配增倍鏡后&#xff0c;鏡頭變焦范圍將限定在300-500mm…

縣級的圖書館計算機管理員,圖書館管理員的崗位職責

圖書館管理員的崗位職責導語&#xff1a;在領導的命令下&#xff0c;緊緊圍繞學校總體工作要求&#xff0c;牢固樹立全心全意為教學及教科研第一線服務的思想&#xff0c;工作主動熱情&#xff0c;努力做好管理育人的工作。圖書館管理員崗位職責&#xff1a;1、每學期認真制訂切…

使用Java快速入門的Apache Thrift

Apache Thrift是由facebook創建的RPC框架&#xff0c;現在它是一個Apache項目。 Thrift可讓您在不依賴語言的定義文件中定義數據類型和服務接口。 該定義文件用作編譯器的輸入&#xff0c;以生成用于構建通過不同編程語言進行通信的RPC客戶端和服務器的代碼。 您也可以參考Thri…

Windows/Linux安裝python2.7,pycharm和pandas——《利用Python進行數據分析》

一、Windows下&#xff08;兩種方法&#xff09; 1. 安裝Python EDP_free并安裝pandas ① 如果你沒有安裝python2.7&#xff0c;可以直接選擇安裝Python EDP_free&#xff0c;然后再安裝pandas等包就行 &#xff1a; Python EDP_free 網址&#xff1a; http://epdfree-7-3-2.…

Python基礎類型

1. 列表、元組操作 列表是我們最以后最常用的數據類型之一&#xff0c;通過列表可以對數據實現最方便的存儲、修改等操作 定義列表 names [Alex,"Tenglan",Eric] 通過下標訪問列表中的元素&#xff0c;下標從0開始計數 >>> names[0] Alex >>> nam…

angular點擊按鈕彈出頁面_Win10提示“由于啟動計算機時出現了頁面文件配置問題”解決方法...

我們在使用Windows10系統的過程中&#xff0c;經常會遇到一些問題。近期有一個網友咨詢裝機之家小編&#xff0c;稱自己Windows10系統開機之后&#xff0c;彈出系統屬性對話框&#xff0c;提示“由于啟動計算機時出現了頁面文件配置問題”的問題&#xff0c;我們要如何解決呢&a…

計算機程序編程就業,計算機編程就業

為畢業生寫計算機編程就業提供計算機編程就業范文參考,涵蓋碩士、大學本科畢業論文范文和職稱論文范文&#xff0c;包括論文選題、開題報告、文獻綜述、任務書、參考文獻等&#xff0c;是優秀免費計算機編程就業網站。基于編程語言類課程教學方法的探討位把考查學生的編程能力也…

Spring集成–第1節– Hello World

Spring Integration的“ Hello World ” –考慮一個簡單的程序&#xff0c;以使用Spring Integration將“ Hello World”打印到控制臺&#xff0c;并在此過程中訪問一些企業集成模式概念 在進入程序本身之前&#xff0c;快速回顧一下消息傳遞概念將很有用–消息傳遞是一種集成樣…

正則表達式貪婪模式與懶惰模式

正則表達式貪婪匹配模式&#xff0c;對于初學者&#xff0c;往往也很容易出錯。有時候需要匹配一個段代碼內容&#xff0c;發現匹配與想要不一致。發現原來&#xff0c;跟貪婪模式有關系。如下&#xff0c;我們看下例子&#xff1a; 什么是貪婪模式 字符串有: “<h3>abd&…

stm32 薄膜鍵盤原理_市面上的筆記本鍵盤優缺點解析,看完秒懂

大家在選購電腦時&#xff0c;很多人的關注重點都是筆記本的配置好不好、外觀設計酷不酷和電池續航能力強不強&#xff0c;對電腦鍵盤往往不會太在意&#xff0c;其實一個好的電腦鍵盤也可以幫助你提高工作效率&#xff0c;特別對于小編這樣的文字工作者&#xff0c;如果鍵盤手…

計算機等級考試心得體會,計算機等級考試心得體會(2)

估計以后的考試也可能略有變化&#xff0c;即逐漸增加使用命令的條數。由于該內容變化小&#xff0c;考生應當練習到純熟的境地&#xff0c;在考試時用盡可能少的時間來做這部分內容&#xff0c;以使其他內容有更多的時間。六題能做出五題即可&#xff0c;有一題一時想不起&…

Web開發框架–第1部分:選項和標準

在我的公司&#xff0c;我們正在評估未來幾年將使用哪種Web開發框架。 自上次評估以來&#xff0c;我們一直在使用由Struts 2驅動的Java應用服務器作為MVC&#xff0c;將Tiles作為模板引擎&#xff0c;將jQuery用于Javascript awesomennes&#xff0c;將DWR用于AJAX調用&#x…