99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

程序在計(jì)算機(jī)中究竟是如何運(yùn)行起來(lái)的?

Linux愛好者 ? 來(lái)源:飛天小牛肉 ? 作者:飛天小牛肉 ? 2021-05-03 14:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文并不會(huì)深入底層寄存器指令與硬件等內(nèi)容,只是借此主題為后續(xù)內(nèi)存管理章節(jié)作掃盲,并幫助各位對(duì)分層存儲(chǔ)體系有一個(gè)整體的把握,以及一個(gè)程序在這樣的存儲(chǔ)體系上,究竟是如何運(yùn)行起來(lái)的,這些存儲(chǔ)器在這個(gè)過程又分別扮演了什么角色。

為什么設(shè)計(jì)了分層存儲(chǔ)體系其實(shí)早在操作系統(tǒng)系列開篇的那篇文章中,我就簡(jiǎn)單介紹過分層存儲(chǔ)體系(Memory Hierarchy),先來(lái)回顧下(這里我參考的是《現(xiàn)代操作系統(tǒng) — 第三版》這本書,其他有些資料可能會(huì)劃分的更為細(xì)致,不過在理解本文的目的上,以下劃分已經(jīng)足夠清晰了):

213db7aa-a534-11eb-aece-12bb97331649.png

各位不妨想一想,為什么需要設(shè)計(jì)出這樣一個(gè)分層的存儲(chǔ)體系來(lái)供計(jì)算機(jī)使用呢?

首先,有一個(gè)觀點(diǎn)不用多說,每個(gè)人都希望自己的計(jì)算機(jī)擁有這樣一個(gè)存儲(chǔ)器:它容量無(wú)限大,CPU 訪問它的速度無(wú)限快,并且能夠永久性的存儲(chǔ)數(shù)據(jù)(斷電不會(huì)丟失數(shù)據(jù)),而且價(jià)格不能太高昂。

But,遺憾的是,現(xiàn)階段的技術(shù)仍然滿足不了我們的幻想。

為此,經(jīng)過多年的探索,人們提出了分層存儲(chǔ)體系的概念,把我們的幻想一個(gè)一個(gè)拆開對(duì)應(yīng)到不同的存儲(chǔ)器上。

在這個(gè)體系中,計(jì)算機(jī)擁有若干 KB 超級(jí)快速、超級(jí)昂貴且易失性的寄存器;若干 MB 快速、昂貴且易失性的高速緩存(cache);若干 GB 的速度與價(jià)格都適中、且同樣易失性的內(nèi)存;以及若干 TB 低速、廉價(jià)、非易失性的磁盤存儲(chǔ);另外還有諸如磁帶等可移動(dòng)的存儲(chǔ)裝置。

至于為什么這些存儲(chǔ)器的造價(jià)不同,那就和它們的成本、材料、制作工藝等息息相關(guān)了。寄存器超級(jí)快速且超級(jí)昂貴的原因就是它和 CPU 的制作材料是相同的,所以 CPU 訪問起來(lái)幾乎是沒有時(shí)延的。

另外,這里多提一嘴內(nèi)存,關(guān)于內(nèi)存的分類眾說紛紜,我覺得各位對(duì)內(nèi)存的概念有大體的把握就行,不必過度死扣細(xì)節(jié)。

內(nèi)存也經(jīng)常被人們稱為主存和隨機(jī)訪問存儲(chǔ)器(Random Access Memory,RAM),還有我們上文說到內(nèi)存是易失性的,其實(shí)這都不是絕對(duì)正確的,只不過是通俗的說法并且被大眾所認(rèn)可。

現(xiàn)在許多計(jì)算機(jī)都已經(jīng)在使用少量的非易失性隨機(jī)訪問存儲(chǔ)器,也就是只讀存儲(chǔ)器(Read Only Memory,ROM),它在工廠中就被編程完畢,然后再也不能被修改。ROM 速度快并且造價(jià)低廉,很多開發(fā)商都會(huì)把用于啟動(dòng)計(jì)算機(jī)的引導(dǎo)加載模塊存放在 ROM 中。

裝入內(nèi)存,讓程序跑起來(lái)這里我先開門見山的總結(jié)一下內(nèi)存和磁盤的區(qū)別,也方便大家更好的理解下面的例子。通俗來(lái)說,內(nèi)存決定了你的計(jì)算機(jī)能夠同時(shí)流暢運(yùn)行多少個(gè)應(yīng)用程序,而磁盤決定了你的計(jì)算機(jī)能夠下載安裝多少個(gè)應(yīng)用程序。

舉個(gè)例子,這里面涉及到一個(gè)很重要的概念,各位認(rèn)真看哈:

比方說你的計(jì)算機(jī)上安裝了 WeChat,你雙擊了 WeChat 快捷方式,操作系統(tǒng)就會(huì)打開 WeChat 軟件。

那么,各位有沒有想過,在分層的存儲(chǔ)體系上,WeChat 或者各種應(yīng)用程序在你的計(jì)算機(jī)上究竟是怎么跑起來(lái)的呢?這些存儲(chǔ)器在這個(gè)過程又分別扮演了什么角色呢?

首先,有一點(diǎn)你要明確,你安裝的 WeChat 軟件是保存在磁盤中的。軟件安裝的本質(zhì)是什么?各位應(yīng)該也都明白,就是將很多數(shù)據(jù)的集合存儲(chǔ)到磁盤上。

雙擊 WeChat 快捷方式,操作系統(tǒng)就會(huì)知道你要運(yùn)行這個(gè)軟件,它會(huì)在磁盤中找到你安裝的 WeChat 軟件,將運(yùn)行所需要的數(shù)據(jù)從磁盤中復(fù)制到內(nèi)存里。注意這里!WeChat 不是直接磁盤中運(yùn)行的,而是在內(nèi)存中運(yùn)行的。

至于原因,那當(dāng)然是內(nèi)存的讀寫速度比磁盤快得多。

所以,為了緩和磁盤之間的速度不匹配問題,程序執(zhí)行前必須將硬盤上的數(shù)據(jù)復(fù)制到內(nèi)存,CPU 才能夠著手處理,這個(gè)過程就叫作載入內(nèi)存(Load into Memory),完成這個(gè)過程需要一個(gè)不可或缺的程序:載入器或者說加載器(Loader)。

CPU 直接與內(nèi)存進(jìn)行交互,它會(huì)讀取內(nèi)存中的數(shù)據(jù)進(jìn)行處理,并將結(jié)果返回并保存到內(nèi)存。當(dāng)然,如果你還需要將數(shù)據(jù)保存到磁盤,復(fù)制操作也會(huì)在內(nèi)存和磁盤直接發(fā)生一次。

比如說,我們打開了某個(gè) Word 文檔,并輸入了一些文字,雖然我們直觀看到的已經(jīng)發(fā)生變化了,但是磁盤中存儲(chǔ)的文檔仍然沒有改變,它仍然是之前的數(shù)據(jù),新增的文字只是暫時(shí)保存到了內(nèi)存,只有我們手動(dòng)保存了這篇文檔比如 Ctrl + s 才會(huì)將修改保存到磁盤中。

而由于內(nèi)存是易失性的,也就是說斷電后數(shù)據(jù)就丟失了,所以如果你編輯完 Word 文檔忘記保存或者斷電導(dǎo)致關(guān)機(jī)了,那么你將永遠(yuǎn)無(wú)法找回這些內(nèi)容(悲劇 )。

寄存器與高速緩存去哪里了讀到這里,各位肯定會(huì)有所困惑,上面不是說了還有高速緩存嗎?還有寄存器嗎?它們不是也用來(lái)存儲(chǔ)的嗎,在這個(gè)過程中它們?nèi)ツ睦锪耍?/p>

OK,從 CPU 的角度來(lái)說,內(nèi)存是什么?就是一個(gè)笨逼,它僅僅是一個(gè)存放指令和數(shù)據(jù)的地方,計(jì)算機(jī)并不能在內(nèi)存中完成計(jì)算功能。

若把 CPU 比作人類的靈魂,內(nèi)存和磁盤就是人類的軀體。沒有了 CPU,內(nèi)存和磁盤就淪為一具行尸走肉。當(dāng)然,沒有了內(nèi)存和磁盤也不行,畢竟 CPU 的存儲(chǔ)能力非??蓱z。

比如說我們要計(jì)算 a = b + c,必須將變量 a、b、c 從內(nèi)存中讀取到 CPU 內(nèi)部才能進(jìn)行加法運(yùn)算,而在 CPU 中執(zhí)行運(yùn)算工作的部件,就是運(yùn)算單元,可以說運(yùn)算單元就是 CPU 的大腦。

我們不妨來(lái)看一下 CPU 的結(jié)構(gòu):

21644eb0-a534-11eb-aece-12bb97331649.png

可以看出,寄存器(Register)和高速緩存都直接內(nèi)嵌在 CPU 中。

先說寄存器,其造價(jià)高昂且容量有限,功能涵括數(shù)學(xué)運(yùn)算、控制程序的執(zhí)行流程、標(biāo)記 CPU 運(yùn)行狀態(tài)等。

有些同學(xué)可能認(rèn)為寄存器就是一個(gè)部件,其實(shí)不然,現(xiàn)代的 CPU 基本都內(nèi)置了幾十個(gè)甚至上百個(gè)寄存器,根據(jù)功能的不同,這些寄存器也擁有不同的名字。

例如,EAX 寄存器通常被用在加法運(yùn)算中,用來(lái)保存某個(gè)加數(shù)或運(yùn)算結(jié)果;EIP 寄存器中存儲(chǔ)的值是下一條指令的地址,CPU 執(zhí)行完當(dāng)前指令后,就會(huì)根據(jù) EIP 的值去尋找下一條指令,也就是說如果我們改變 EIP 寄存器的值,也就會(huì)相應(yīng)的改變程序的執(zhí)行流程。

另外,寄存器存放的是二進(jìn)制數(shù)據(jù),我們常常說 32 位或者 64 位的 CPU,其實(shí)指的就是寄存器的位數(shù)。

再來(lái)看緩存,為啥 CPU 里面還要弄個(gè)緩存呢?那當(dāng)然還是離不開讀寫速度的問題,雖然 CPU 訪問內(nèi)存的速度相比于磁盤來(lái)說已經(jīng)足夠快了,But,真要和高速緩存做個(gè)對(duì)比,那根本就不是一個(gè)數(shù)量級(jí)的,蚍蜉撼樹罷了。

如果 CPU 每次都從內(nèi)存中讀取數(shù)據(jù),會(huì)嚴(yán)重拖慢其運(yùn)行速度,CPU 不得不浪費(fèi)大量的時(shí)間來(lái)等待內(nèi)存中數(shù)據(jù)操作的結(jié)束。為此,我們?cè)?CPU 內(nèi)部設(shè)置一個(gè)緩存,將使用頻繁的數(shù)據(jù)暫時(shí)從內(nèi)存中讀取到緩存里來(lái),這樣,如果緩存命中,就直接從緩存中讀取即可,不必訪問內(nèi)存了。

所以很顯然,緩存容量越大的 CPU 其性能就越好。當(dāng)然,畢竟造價(jià)高昂,搞不起超大容量的緩存,大小有限,所以對(duì)于緩存中數(shù)據(jù)取舍的種種算法又是一門值得深究的話題。

另外,緩存的概念其實(shí)并不僅僅局限于此。只要存在大量的資源可以劃分成小的部分,那么,這些資源中的某些部分就會(huì)比其他部分更頻繁的得到使用,使用緩存就可以帶來(lái)性能上的改善。在操作系統(tǒng)中,除了 CPU 中的緩存,內(nèi)存和硬盤之間其實(shí)也有緩存的概念,也就是下面我們將要討論的虛擬內(nèi)存。

虛擬內(nèi)存和局部性原理虛擬內(nèi)存(Virtual Memory)、虛擬存儲(chǔ)器,這倆其實(shí)是一個(gè)東西,只不過網(wǎng)絡(luò)上各種博客說法不一樣,沒有統(tǒng)一起來(lái),容易讓萌新摸不著頭腦。

上文說的種種只是在運(yùn)行一個(gè) WeChat 程序的情況下,各位不妨想一下,如果你的電腦內(nèi)存只有 4G,你同時(shí)運(yùn)行了 WeChat、QQ、網(wǎng)易云音樂、Chrome 等等很多應(yīng)用程序,假設(shè)它們加起來(lái)一共需要 5G 的內(nèi)存空間,也就意味著需要從磁盤復(fù)制 5G 的數(shù)據(jù)到只有 4G 存儲(chǔ)空間的內(nèi)存,顯然,這是不可能的。

217e4e8c-a534-11eb-aece-12bb97331649.png

為此,操作系統(tǒng)中引入了虛擬內(nèi)存的概念。當(dāng)程序運(yùn)行需要的存儲(chǔ)空間大于內(nèi)存的容量時(shí),會(huì)將內(nèi)存中暫時(shí)不用的數(shù)據(jù)寫回磁盤,當(dāng)需要這些數(shù)據(jù)時(shí)再?gòu)拇疟P中重新讀取,而內(nèi)存中存放的數(shù)據(jù)也就是所謂的熱點(diǎn)數(shù)據(jù)。這樣,磁盤中就會(huì)有一部分空間用來(lái)存放內(nèi)存中暫時(shí)不用的數(shù)據(jù),這一部分空間就叫做虛擬內(nèi)存。我們上面所說的情況就需要在磁盤上分配(5 - 4 = 1G)的虛擬內(nèi)存。

219a7d32-a534-11eb-aece-12bb97331649.png

這樣,虛擬內(nèi)存中 “虛擬” 二字的含義也就不言而喻了。只有 4G 內(nèi)存,但是可以正常運(yùn)行占用內(nèi)存超過 4G 的應(yīng)用程序,在用戶看來(lái)他似乎擁有了一個(gè)比實(shí)際內(nèi)存大得多的內(nèi)存。當(dāng)然,實(shí)際的物理內(nèi)存大小并沒有發(fā)生改變,只是在邏輯上進(jìn)行了擴(kuò)充。

可以這么理解,引入虛擬內(nèi)存的概念后,在內(nèi)存和磁盤之間,內(nèi)存就充當(dāng)了緩存的作用。CPU 優(yōu)先從內(nèi)存中獲取數(shù)據(jù),如果命中,就不需要去訪問磁盤。這里和我們上文所說的 CPU 中的緩存和內(nèi)存之間的關(guān)系是不是一模一樣?

當(dāng)然,我們?yōu)槭裁纯梢赃@樣做?這些數(shù)據(jù)為啥就能被調(diào)入緩存/內(nèi)存呢?虛擬內(nèi)存存在的理論支撐是什么?這就是著名的局部性原理。局部性原理包含兩種,時(shí)間局部性和空間局部性:

1)時(shí)間局部性原理:如果 CPU 執(zhí)行了程序中的某條指令,那么不久后這條指令很有可能再次執(zhí)行;如果某個(gè)數(shù)據(jù)被訪問過,不久之后該數(shù)據(jù)很可能再次被訪問;

2)空間局部性原理:一旦程序訪問了某個(gè)存儲(chǔ)單元,在不久之后,其附近的存儲(chǔ)單元也很有可能被訪問,因?yàn)楹芏鄶?shù)據(jù)在內(nèi)存中都是連續(xù)存放的,并且程序的指令也是順序地在內(nèi)存中存放的。

原文標(biāo)題:五分鐘掃盲:程序在計(jì)算機(jī)中是如何運(yùn)行起來(lái)的

文章出處:【微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11077

    瀏覽量

    217034
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7662

    瀏覽量

    90769
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3826

    瀏覽量

    82968

原文標(biāo)題:五分鐘掃盲:程序在計(jì)算機(jī)中是如何運(yùn)行起來(lái)的

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Quantinuum“Reimei”量子計(jì)算機(jī)RIKEN正式運(yùn)行

    )成功安裝并全面投入運(yùn)行。 此次合作,RIKEN為“Reimei”量子計(jì)算機(jī)提供了世界級(jí)的基礎(chǔ)設(shè)施,包括為其量身定制的設(shè)計(jì)、準(zhǔn)備及交付工作。這一里程碑式的成就不僅標(biāo)志著Quantinuum
    的頭像 發(fā)表于 02-17 10:21 ?463次閱讀

    室內(nèi)導(dǎo)航究竟是如何實(shí)現(xiàn)的

    作為物聯(lián)網(wǎng)智能硬件的引領(lǐng)者,云里物里當(dāng)然不是來(lái)聊電影的,而是想借此機(jī)會(huì),和大家探討一下:室內(nèi)導(dǎo)航究竟是如何實(shí)現(xiàn)的?它背后的技術(shù)原理是什么?接下來(lái),讓我們一起揭開室內(nèi)導(dǎo)航的神秘面紗。
    的頭像 發(fā)表于 02-12 13:50 ?516次閱讀

    ADS1298R PACE_OUT1和PACE_OUT2這兩條引腿究竟是輸入還是輸出?有什么用?怎樣使用?

    PACE_OUT1和PACE_OUT2這兩條引腿究竟是輸入還是輸出?有什么用?怎樣使用?
    發(fā)表于 02-12 07:56

    嵌入式和人工智能究竟是什么關(guān)系?

    嵌入式和人工智能究竟是什么關(guān)系? 嵌入式系統(tǒng)是一種特殊的系統(tǒng),它通常被嵌入到其他設(shè)備或機(jī)器,以實(shí)現(xiàn)特定功能。嵌入式系統(tǒng)具有非常強(qiáng)的適應(yīng)性和靈活性,能夠根據(jù)用戶需求進(jìn)行定制化設(shè)計(jì)。它廣泛應(yīng)用于各種
    發(fā)表于 11-14 16:39

    PCM1861 INT腳究竟是輸出還是輸入?

    這個(gè)芯片activce或是idle. 是否有人解釋下,INT腳究竟是輸出還是輸入。我希望是輸出,我需要讀取到是否有analog audio輸入的信息。 或者,輸入輸出與否還要靠其他什么地方設(shè)置? 盼望有人回復(fù)解答,不勝感激!
    發(fā)表于 10-29 07:29

    揭秘貼片功率電感發(fā)燙究竟是不是燒壞了

    電子發(fā)燒友網(wǎng)站提供《揭秘貼片功率電感發(fā)燙究竟是不是燒壞了.docx》資料免費(fèi)下載
    發(fā)表于 09-30 14:44 ?1次下載

    信號(hào)繼電器計(jì)算機(jī)系統(tǒng)的應(yīng)用

    信號(hào)繼電器計(jì)算機(jī)系統(tǒng)的應(yīng)用是一個(gè)重要且復(fù)雜的領(lǐng)域,它作為電氣控制的關(guān)鍵元件,計(jì)算機(jī)系統(tǒng)中發(fā)揮著信號(hào)轉(zhuǎn)換、隔離、放大以及控制等多種作用。
    的頭像 發(fā)表于 09-27 16:29 ?936次閱讀

    計(jì)算機(jī)存儲(chǔ)系統(tǒng)的構(gòu)成

    計(jì)算機(jī)存儲(chǔ)系統(tǒng)是計(jì)算機(jī)中用于存放程序和數(shù)據(jù)的設(shè)備或部件的集合,它構(gòu)成了計(jì)算機(jī)信息處理的基礎(chǔ)。一個(gè)完整的計(jì)算機(jī)存儲(chǔ)系統(tǒng)通常包括多個(gè)層次的存儲(chǔ)器
    的頭像 發(fā)表于 09-26 15:25 ?2528次閱讀

    電感器線徑究竟是粗好還是細(xì)好

    電子發(fā)燒友網(wǎng)站提供《電感器線徑究竟是粗好還是細(xì)好.docx》資料免費(fèi)下載
    發(fā)表于 09-20 11:25 ?0次下載

    計(jì)算機(jī)進(jìn)行程序控制工作的基本原理是怎樣的

    計(jì)算機(jī)程序控制是計(jì)算機(jī)科學(xué)的一個(gè)核心概念,它涉及到計(jì)算機(jī)如何根據(jù)預(yù)設(shè)的指令序列執(zhí)行任務(wù)。 1. 計(jì)算機(jī)
    的頭像 發(fā)表于 09-04 16:57 ?1532次閱讀

    計(jì)算機(jī)中總線的作用是什么

    計(jì)算機(jī)中,總線(Bus)扮演著極其重要的角色,它是計(jì)算機(jī)內(nèi)部各功能部件之間傳送信息的公共通信干線??偩€不僅連接了計(jì)算機(jī)的各個(gè)核心組件,還確保了數(shù)據(jù)、指令和控制信號(hào)的高效、準(zhǔn)確傳輸。
    的頭像 發(fā)表于 08-26 15:57 ?3657次閱讀

    tas5756m使用GPIO口加內(nèi)部PLL產(chǎn)生MCLK的方法究竟是怎么樣的?

    tas5756m使用GPIO口加內(nèi)部PLL產(chǎn)生MCLK的方法究竟是怎么樣的?
    發(fā)表于 08-19 06:06

    邊沿觸發(fā)器計(jì)算機(jī)中的應(yīng)用

    邊沿觸發(fā)器計(jì)算機(jī)中的應(yīng)用極為廣泛,它們作為數(shù)字電路的基本單元,對(duì)于實(shí)現(xiàn)計(jì)算機(jī)內(nèi)部的時(shí)序控制、數(shù)據(jù)存儲(chǔ)與傳輸、以及復(fù)雜邏輯功能等方面起著至關(guān)重要的作用。以下將從邊沿觸發(fā)器的定義、特點(diǎn)
    的頭像 發(fā)表于 08-12 14:20 ?1288次閱讀

    三態(tài)緩沖器計(jì)算機(jī)中的應(yīng)用

    電路不影響其他電路和總線的前提下,能夠靈活地控制其輸出狀態(tài)。以下將詳細(xì)探討三態(tài)緩沖器計(jì)算機(jī)中的具體應(yīng)用,內(nèi)容將涵蓋其定義、優(yōu)勢(shì)以及不同計(jì)算機(jī)
    的頭像 發(fā)表于 08-02 17:48 ?1865次閱讀

    DRAM計(jì)算機(jī)中的應(yīng)用

    DRAM(Dynamic Random Access Memory,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器)計(jì)算機(jī)系統(tǒng)扮演著至關(guān)重要的角色。它是一種半導(dǎo)體存儲(chǔ)器,用于存儲(chǔ)和快速訪問數(shù)據(jù),是計(jì)算機(jī)主內(nèi)存
    的頭像 發(fā)表于 07-24 17:04 ?2994次閱讀