chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

操作系統(tǒng)之CPU與實(shí)模式(下)

jf_78858299 ? 來(lái)源:碼農(nóng)的荒島求生 ? 作者:陸小風(fēng) ? 2023-02-15 14:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

分段式內(nèi)存管理

我們知道,程序的內(nèi)存從內(nèi)容上可以分為存放機(jī)器指令的代碼區(qū)域、存放全局變量的數(shù)據(jù)區(qū)域、保存函數(shù)運(yùn)行時(shí)信息的棧區(qū)等,顯然我們可以將程序按照這種劃分進(jìn)行分段管理,段內(nèi)使用相對(duì)地址,這樣無(wú)論這些段被加載到內(nèi)存的哪個(gè)區(qū)域我們都能方便的計(jì)算出正確的物理內(nèi)存地址。

圖片

我們將各個(gè)段在內(nèi)存中的起始地址放到專用的寄存器中,X86 CPU中有這樣幾個(gè)段寄存器,CS、DS、SS以及ES,這些寄存器有什么用呢?這幾個(gè)寄存器就用來(lái)存放各個(gè)段在內(nèi)存中的起始地址(暫且這樣理解,稍后你會(huì)發(fā)現(xiàn)這些寄存器的真實(shí)用法):

  • 保存機(jī)器指令的區(qū)域,這個(gè)區(qū)域就是我們所說(shuō)的代碼段(Code Segment),因此我們可以使用一個(gè)寄存器來(lái)專門指向代碼段,這就是CS寄存器的作用,CS也是Code Segment的縮寫。
  • 同樣的道理,程序運(yùn)行起來(lái)后還有專門的區(qū)域用來(lái)保存數(shù)據(jù),因此必須要專門的寄存器指向數(shù)據(jù)段(Data Segment),這就是DS寄存器的作用,DS是Data Segment的縮寫。
  • 程序運(yùn)行起來(lái)后還有運(yùn)行時(shí)棧(Stack Segment),因此可以使用SS寄存器來(lái)指向程序員運(yùn)行時(shí)棧,SS是Stack Segment的縮寫。
  • 此外還有ES寄存器,Extra Segment,其用作臨時(shí)段寄存器。

除了內(nèi)存分段管理之外, 我們的程序可以讀寫任意內(nèi)存區(qū)域 ,有的同學(xué)可能不以為意,這又能怎樣呢?

沒(méi)有內(nèi)存保護(hù)會(huì)怎樣?

至今,在多線程編程中這個(gè)問(wèn)題依然困擾著程序員,因?yàn)橥粋€(gè)進(jìn)程中的線程共享同一個(gè)地址空間,這也就意味著你的線程可以修改地址空間中任何可寫的區(qū)域,包括棧區(qū)以及堆區(qū),當(dāng)然這也就意味著其它線程可以修改你的線程使用的數(shù)據(jù),這是多線程中一大類bug的來(lái)源,關(guān)于這一部分的內(nèi)容你可以參考《線程間到底共享了哪些進(jìn)程資源?》。

而這個(gè)問(wèn)題在內(nèi)存地址沒(méi)有任何保護(hù)情況下更加嚴(yán)重,因?yàn)檫@時(shí)不是一個(gè)進(jìn)程而是多有進(jìn)程包括操作系統(tǒng)都共享同一個(gè)物理內(nèi)存地址,任何一個(gè)進(jìn)程都可以修改內(nèi)存中任何位置,你的進(jìn)程可以破壞其他進(jìn)程使用的內(nèi)存,可以破壞操作系統(tǒng)使用的內(nèi)存,破壞其它進(jìn)程大不了重新啟動(dòng)這個(gè)進(jìn)程,但是如果破壞了操作系統(tǒng)那么沒(méi)有辦法,此時(shí)你只能重新啟動(dòng)計(jì)算機(jī),如果CPU沒(méi)有提供內(nèi)存保護(hù)機(jī)制,那么操作系統(tǒng)連自己都保護(hù)不了更何況去保護(hù)其它進(jìn)程。

沒(méi)想到吧,看似簡(jiǎn)單直接的內(nèi)存讀寫竟然會(huì)有這么多問(wèn)題。

實(shí)模式

好啦,到目前為止讓我們暫且總結(jié)一下。

  • 絕對(duì)的內(nèi)存地址不好用,這樣的地址必須將程序加載到內(nèi)存的特定位置上,為解決這個(gè)問(wèn)題使用相對(duì)地址,x86中為每個(gè)程序的區(qū)域都配備有專用的寄存器用來(lái)存放該段在內(nèi)存中的起始地址,這樣就可以根據(jù)基址加偏移計(jì)算出物理內(nèi)存地址,注意,這里計(jì)算出來(lái)的是真實(shí)的物理內(nèi)存地址。
  • 內(nèi)存讀寫沒(méi)有任何保護(hù),程序可以讀寫內(nèi)存的任何區(qū)域。

實(shí)際上這就是早前內(nèi)存管理的模式,非常直接非常原始,x86 CPU將這種原始的內(nèi)存管理方法稱之為實(shí)模式,real mode,這種模式也被稱之為 real address mode ,顧名思義,我們?cè)诔绦蛑锌吹降亩际钦鎸?shí)的物理內(nèi)存地址。

圖片

原來(lái),早期的x86 CPU能訪問(wèn)的最大內(nèi)存被限制在1MB(2^20 byte),你可能會(huì)想這可用內(nèi)存也太少了吧,對(duì)于當(dāng)今程序員或者用戶來(lái)說(shuō)1MB幾乎什么都干不了,哪怕都存不下一首歌,然而在上世紀(jì)80年代,1MB內(nèi)存是一片極為廣闊的空間,以至于比爾蓋茨在上世紀(jì)80年代說(shuō)過(guò):640k ought to be enough for anyone,對(duì)大部分人來(lái)說(shuō)640K內(nèi)存已經(jīng)足夠用了。

圖片

除此之外,更加捉襟見(jiàn)肘的是早期x86 CPU寄存器只有16位,16位寄存器是沒(méi)有辦法訪問(wèn)整個(gè)1MB內(nèi)存的,16位寄存器最多能訪問(wèn)64K大小的內(nèi)存,要想訪問(wèn)1MB內(nèi)存那么內(nèi)存地址就需要20位,而寄存器本身就16位,因此根本裝不下,怎么辦呢?

很簡(jiǎn)單,一個(gè)寄存器不夠我們就用兩個(gè),第一個(gè)寄存器被叫做selector,說(shuō)白了其實(shí)存放的是儲(chǔ)物柜區(qū)域的編號(hào),因此也叫做段寄存器, segment register,管叫做區(qū)域還是叫做段本質(zhì)上沒(méi)啥區(qū)別。

第二個(gè)寄存器被叫做offset,說(shuō)白了就是區(qū)域內(nèi)的編號(hào)或者叫做區(qū)域內(nèi)的偏移,這樣真正的內(nèi)存地址就由兩部分組成 selector:offset ,此時(shí)內(nèi)存地址的計(jì)算方式是這樣的:

16 ? selector + offset

此時(shí)給定一個(gè)段寄存器再給出一個(gè)偏移我們就能直接在內(nèi)存中找到需要的數(shù)據(jù):

圖片

因此這里計(jì)算出來(lái)的內(nèi)存地址就是物理內(nèi)存地址。

此外,在實(shí)模式下CPU不提供內(nèi)存保護(hù)機(jī)制,程序可以隨意讀寫任何內(nèi)存區(qū)域,哪怕是操作系統(tǒng)所在的區(qū)域其它程序也可以讀寫。

現(xiàn)在可以總結(jié)下早期x86處理器的特點(diǎn)了:

  • 尋址空間有限,只有1MB
  • 利用 selector:offset的方式利用兩個(gè)16位寄存器來(lái)尋址1MB內(nèi)存
  • 沒(méi)有內(nèi)存保護(hù)機(jī)制,當(dāng)然,沒(méi)有內(nèi)存保護(hù)機(jī)制的一大優(yōu)點(diǎn)就在于內(nèi)存讀寫速度要更快,原因就在于不需要經(jīng)過(guò)虛擬內(nèi)存地址到物理內(nèi)存地址的轉(zhuǎn)換,也不需要進(jìn)行任何檢查(這可能是實(shí)模式下僅有的優(yōu)點(diǎn))

在80286之前,所有x86 CPU都運(yùn)行在實(shí)模式下,而為了后向兼容,即使是現(xiàn)代x86在重置(加電時(shí))后也會(huì)首先進(jìn)入實(shí)模式,后續(xù)才會(huì)跳轉(zhuǎn)到保護(hù)模式(protected mode),關(guān)于保護(hù)模式我們?cè)诤罄m(xù)文章中講解。

實(shí)模式與操作系統(tǒng)

實(shí)模式是x86系列處理器最早期的內(nèi)存管理模式,這一時(shí)期的操作系統(tǒng)別無(wú)選擇,只能運(yùn)行在這種模式下,早期的DOS系統(tǒng)以及早期的Microsoft Windows操作系統(tǒng)就運(yùn)行在實(shí)模式下。

雖然實(shí)模式理解起來(lái)很簡(jiǎn)單,但這種模式最主要的問(wèn)題在于:

  1. 把物理內(nèi)存暴露給程序
  2. 沒(méi)有內(nèi)存保護(hù)機(jī)制

這兩者結(jié)合起來(lái)的后果就是 程序不被受限 ,程序員都知道,我們寫的代碼充滿了bug,在現(xiàn)代操作系統(tǒng)中程序很容易把自己搞掛,而在早期的操作系統(tǒng)中程序就會(huì)很容易的把整個(gè)系統(tǒng)搞掛,為解決這一問(wèn)題,x86 CPU在80286開(kāi)始引入保護(hù)模式,后續(xù)文章會(huì)有詳細(xì)講解。

盡管現(xiàn)代操作系統(tǒng)(Windows、Linux)等早已不運(yùn)行在實(shí)模式下,然而實(shí)模式卻依然保留了下來(lái),你可能會(huì)想為什么x86 CPU依然需要保留實(shí)模式呢?

我們都知道代碼有屎山一說(shuō),其實(shí)對(duì)于歷史悠久的x86來(lái)說(shuō)也有類似的問(wèn)題。

CPU這種硬件和軟件一樣也是在不斷演變進(jìn)化的,從16位實(shí)模式演進(jìn)到了32位保護(hù)模式以及現(xiàn)代的64位處理器,但早期程序員圍繞著16位實(shí)模式的x86CPU編寫了很多軟件,當(dāng)CPU發(fā)展到32位保護(hù)模式時(shí)之前的基于16位實(shí)模式編寫的軟件該怎么辦?不支持了嗎?不支持的話只有兩種可能:1) 用戶不再購(gòu)買不兼容16位軟件的CPU 2) 重寫代碼,以程序員的尿性來(lái)說(shuō)大概率不會(huì)重寫,intel也非常識(shí)時(shí)務(wù),因此在后來(lái)的32位乃至現(xiàn)代的64位處理器上依然保留了實(shí)模式,x86系列處理器在重置時(shí)會(huì)首先進(jìn)入實(shí)模式,對(duì)于不使用實(shí)模式的現(xiàn)代操作系統(tǒng)來(lái)說(shuō)簡(jiǎn)單的初始化工作后會(huì)跳轉(zhuǎn)到保護(hù)模式。

因此我們可以看到,實(shí)模式就像原始的進(jìn)化基因一樣依然存在,就像動(dòng)物胚胎有腮一樣,只不過(guò)該過(guò)程一閃而過(guò),實(shí)模式也是在計(jì)算機(jī)啟動(dòng)階段快速閃現(xiàn),這種古老的內(nèi)存管理方式依然留下了自己的烙印。

圖片

總結(jié)

實(shí)模式是一種非常古老的內(nèi)存管理方式,在這種方法下程序員直面物理內(nèi)存,且處理器沒(méi)有提供內(nèi)存讀寫機(jī)制,程序員可讀寫任何內(nèi)存區(qū)域。

實(shí)際上實(shí)模式對(duì)于現(xiàn)代操作系統(tǒng)來(lái)幾乎沒(méi)什么用處,只不過(guò)如果你針對(duì)x86 CPU編寫操作系統(tǒng)那么實(shí)模式是必須要了解的,但對(duì)于其它CPU來(lái)說(shuō)則沒(méi)有這樣的歷史包袱,因此有很多操作系統(tǒng)教材開(kāi)始基于非X86平臺(tái)來(lái)講解,這樣能更快速的講解操作系統(tǒng)而不是在一上來(lái)就在各種內(nèi)存模式中打轉(zhuǎn)。

注意,本文提到的實(shí)模式僅僅針對(duì)x86系列處理器而言,對(duì)于上層應(yīng)用的大部分程序員來(lái)說(shuō)根本就不需要關(guān)心實(shí)模式,然而技術(shù)就和生物一樣也在不斷演變進(jìn)化,了解過(guò)去才能更好的理解當(dāng)下以及未來(lái)。

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

    關(guān)注

    68

    文章

    11073

    瀏覽量

    216828
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3119

    瀏覽量

    75204
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7138

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    什么是操作系統(tǒng)

    什么是操作系統(tǒng)  操作系統(tǒng)是一個(gè)大型的軟件系統(tǒng),其功能復(fù)雜,體系龐大。從不同的角度看的結(jié)果也不同,正是“橫看成嶺側(cè)成峰”,下面我們通過(guò)最典型的兩個(gè)角度來(lái)分析一。  1.從程序員的角度
    發(fā)表于 09-13 10:10

    適合AMP同構(gòu)非對(duì)稱模式操作系統(tǒng)

    請(qǐng)問(wèn)哪位知道代碼開(kāi)源的適合AMP,非對(duì)稱模式操作系統(tǒng),只需要簡(jiǎn)單的核間任務(wù)通信和資源同步就可以。
    發(fā)表于 12-11 17:38

    【安富萊】【RTX操作系統(tǒng)教程】第21章 RTX低功耗睡眠模式

    大家講解STM32F103和STM32F407的低功耗方式睡眠模式在RTX操作系統(tǒng)上面的實(shí)現(xiàn)方法(RTX本身支持的tickless低功耗模式在第24章節(jié)講解) 本章教程配套的例子含C
    發(fā)表于 02-04 16:39

    ARM CPU操作系統(tǒng)

    嵌入式操作系統(tǒng)是 ARM CPU的軟件基礎(chǔ) 從8 位/16位單片機(jī)發(fā)展到以ARM CPU核為代表的32位嵌入式處理器,嵌入式操作系統(tǒng)將替代傳統(tǒng)的由手工編制的監(jiān)控程序或調(diào)度程序,成為重要
    發(fā)表于 07-04 07:03

    HarmonyOS鴻蒙操作系統(tǒng)什么是“基于微內(nèi)核的全場(chǎng)景分布式操作系統(tǒng)”?

    HarmonyOS鴻蒙操作系統(tǒng)什么是“基于微內(nèi)核的全場(chǎng)景分布式操作系統(tǒng)”?即使作為理工科的人咋一眼看上去似乎也不太懂這是什么,就像區(qū)塊鏈這個(gè)概念剛出來(lái)一樣,普通人都是一臉懵B(當(dāng)然現(xiàn)在我對(duì)這個(gè)也是
    發(fā)表于 09-23 17:06

    如何選擇ARM CPU操作系統(tǒng)?

    ARM CPU上廣泛采用的嵌入式操作系統(tǒng)有哪幾種?使用嵌入式Linux系統(tǒng)有哪幾種途徑?如何選擇ARM CPU操作系統(tǒng)?
    發(fā)表于 04-26 06:39

    MOS微型操作系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

    本文介紹一個(gè)基于Intel 80x86 CPU實(shí)模式的多任務(wù)微型操作系統(tǒng)MOS的設(shè)計(jì)與實(shí)現(xiàn)。 著重闡述了MOS的層次結(jié)構(gòu)、內(nèi)存布局、引導(dǎo)
    發(fā)表于 07-30 10:19 ?10次下載

    什么是VxWorks操作系統(tǒng)

    VxWorksVxWorks操作系統(tǒng)是美國(guó)WindRiver公司于1983年設(shè)計(jì)開(kāi)發(fā)的一種實(shí)時(shí)操作系統(tǒng)。VxWorks擁有良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及良好的用戶開(kāi)發(fā)環(huán)境,在實(shí)
    發(fā)表于 06-17 00:33 ?4290次閱讀

    32位cpu、程序、操作系統(tǒng)是什么意思

    32位cpu、程序、操作系統(tǒng)指的是什么 1。32位指CPU的處理能力(如ALU、寄存器的位數(shù))。     若數(shù)據(jù)總線也是32位,就是32位機(jī),若數(shù)據(jù)總線只有16位,則是準(zhǔn)32
    發(fā)表于 06-17 07:48 ?1893次閱讀

    Linux操作系統(tǒng)實(shí)訓(xùn)項(xiàng)目_虛擬機(jī)設(shè)置基礎(chǔ)_RHEL_5.0_2

    嵌入式Linux操作系統(tǒng)實(shí)訓(xùn)項(xiàng)目,虛擬機(jī)設(shè)置基礎(chǔ)RHEL_5.0
    發(fā)表于 11-04 15:17 ?0次下載

    Data_ONTAP_集群模式操作系統(tǒng)

    Data_ONTAP_集群模式操作系統(tǒng)
    發(fā)表于 12-29 12:01 ?0次下載

    windows10操作系統(tǒng)安全模式的使用技巧

    談到系統(tǒng)的安全模式大家并不陌生,在安全模式可以解決相關(guān)的電腦問(wèn)題。windows操作系統(tǒng)的安全模式
    發(fā)表于 06-12 17:25 ?1548次閱讀

    CPU的工作模式

    真實(shí)的指令,對(duì)指令的動(dòng)作不作區(qū)分,直接執(zhí)行指令的真實(shí)功能,另一方面是發(fā)往內(nèi)存的地址是真實(shí)的,對(duì)任何地址不加限制地發(fā)往內(nèi)存。1.2實(shí)模式寄存器x86 CPU實(shí)
    發(fā)表于 11-30 16:21 ?9次下載
    <b class='flag-5'>CPU</b>的工作<b class='flag-5'>模式</b>

    如何使服務(wù)器CPU在超頻模式運(yùn)行

    服務(wù)器已安裝Windows Server操作系統(tǒng),通過(guò)配置BIOS和電源選項(xiàng)可使CPU在超頻模式運(yùn)行。
    的頭像 發(fā)表于 03-27 10:52 ?3332次閱讀

    國(guó)產(chǎn)CPU操作系統(tǒng)被納入政府采購(gòu)清單:加速換國(guó)產(chǎn)OS

    國(guó)家發(fā)文要求將國(guó)產(chǎn)CPU操作系統(tǒng)納入采購(gòu)清單,涉及35個(gè)項(xiàng)目,將推動(dòng)國(guó)產(chǎn)CPU操作系統(tǒng)產(chǎn)業(yè)發(fā)展。此舉將提高我國(guó)信息系統(tǒng)安全性和可靠性,減
    的頭像 發(fā)表于 05-13 17:42 ?3377次閱讀
    國(guó)產(chǎn)<b class='flag-5'>CPU</b>和<b class='flag-5'>操作系統(tǒng)</b>被納入政府采購(gòu)清單:加速換國(guó)產(chǎn)OS