色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

操作系統之CPU與實模式(下)

jf_78858299 ? 來源:碼農的荒島求生 ? 作者:陸小風 ? 2023-02-15 14:55 ? 次閱讀

分段式內存管理

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

圖片

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

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

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

沒有內存保護會怎樣?

至今,在多線程編程中這個問題依然困擾著程序員,因為同一個進程中的線程共享同一個地址空間,這也就意味著你的線程可以修改地址空間中任何可寫的區域,包括棧區以及堆區,當然這也就意味著其它線程可以修改你的線程使用的數據,這是多線程中一大類bug的來源,關于這一部分的內容你可以參考《線程間到底共享了哪些進程資源?》。

而這個問題在內存地址沒有任何保護情況下更加嚴重,因為這時不是一個進程而是多有進程包括操作系統都共享同一個物理內存地址,任何一個進程都可以修改內存中任何位置,你的進程可以破壞其他進程使用的內存,可以破壞操作系統使用的內存,破壞其它進程大不了重新啟動這個進程,但是如果破壞了操作系統那么沒有辦法,此時你只能重新啟動計算機,如果CPU沒有提供內存保護機制,那么操作系統連自己都保護不了更何況去保護其它進程。

沒想到吧,看似簡單直接的內存讀寫竟然會有這么多問題。

實模式

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

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

實際上這就是早前內存管理的模式,非常直接非常原始,x86 CPU將這種原始的內存管理方法稱之為實模式,real mode,這種模式也被稱之為 real address mode ,顧名思義,我們在程序中看到的都是真實的物理內存地址。

圖片

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

圖片

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

很簡單,一個寄存器不夠我們就用兩個,第一個寄存器被叫做selector,說白了其實存放的是儲物柜區域的編號,因此也叫做段寄存器, segment register,管叫做區域還是叫做段本質上沒啥區別。

第二個寄存器被叫做offset,說白了就是區域內的編號或者叫做區域內的偏移,這樣真正的內存地址就由兩部分組成 selector:offset ,此時內存地址的計算方式是這樣的:

16 ? selector + offset

此時給定一個段寄存器再給出一個偏移我們就能直接在內存中找到需要的數據:

圖片

因此這里計算出來的內存地址就是物理內存地址。

此外,在實模式下CPU不提供內存保護機制,程序可以隨意讀寫任何內存區域,哪怕是操作系統所在的區域其它程序也可以讀寫。

現在可以總結下早期x86處理器的特點了:

  • 尋址空間有限,只有1MB
  • 利用 selector:offset的方式利用兩個16位寄存器來尋址1MB內存
  • 沒有內存保護機制,當然,沒有內存保護機制的一大優點就在于內存讀寫速度要更快,原因就在于不需要經過虛擬內存地址到物理內存地址的轉換,也不需要進行任何檢查(這可能是實模式下僅有的優點)

在80286之前,所有x86 CPU都運行在實模式下,而為了后向兼容,即使是現代x86在重置(加電時)后也會首先進入實模式,后續才會跳轉到保護模式(protected mode),關于保護模式我們在后續文章中講解。

實模式與操作系統

實模式是x86系列處理器最早期的內存管理模式,這一時期的操作系統別無選擇,只能運行在這種模式下,早期的DOS系統以及早期的Microsoft Windows操作系統就運行在實模式下。

雖然實模式理解起來很簡單,但這種模式最主要的問題在于:

  1. 把物理內存暴露給程序
  2. 沒有內存保護機制

這兩者結合起來的后果就是 程序不被受限 ,程序員都知道,我們寫的代碼充滿了bug,在現代操作系統中程序很容易把自己搞掛,而在早期的操作系統中程序就會很容易的把整個系統搞掛,為解決這一問題,x86 CPU在80286開始引入保護模式,后續文章會有詳細講解。

盡管現代操作系統(Windows、Linux)等早已不運行在實模式下,然而實模式卻依然保留了下來,你可能會想為什么x86 CPU依然需要保留實模式呢?

我們都知道代碼有屎山一說,其實對于歷史悠久的x86來說也有類似的問題。

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

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

圖片

總結

實模式是一種非常古老的內存管理方式,在這種方法下程序員直面物理內存,且處理器沒有提供內存讀寫機制,程序員可讀寫任何內存區域。

實際上實模式對于現代操作系統來幾乎沒什么用處,只不過如果你針對x86 CPU編寫操作系統那么實模式是必須要了解的,但對于其它CPU來說則沒有這樣的歷史包袱,因此有很多操作系統教材開始基于非X86平臺來講解,這樣能更快速的講解操作系統而不是在一上來就在各種內存模式中打轉。

注意,本文提到的實模式僅僅針對x86系列處理器而言,對于上層應用的大部分程序員來說根本就不需要關心實模式,然而技術就和生物一樣也在不斷演變進化,了解過去才能更好的理解當下以及未來。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10879

    瀏覽量

    212195
  • 內存
    +關注

    關注

    8

    文章

    3037

    瀏覽量

    74144
  • 操作系統
    +關注

    關注

    37

    文章

    6850

    瀏覽量

    123432
收藏 人收藏

    評論

    相關推薦

    什么是操作系統

    什么是操作系統  操作系統是一個大型的軟件系統,其功能復雜,體系龐大。從不同的角度看的結果也不同,正是“橫看成嶺側成峰”,下面我們通過最典型的兩個角度來分析一。  1.從程序員的角度
    發表于 09-13 10:10

    適合AMP同構非對稱模式操作系統

    請問哪位知道代碼開源的適合AMP,非對稱模式操作系統,只需要簡單的核間任務通信和資源同步就可以。
    發表于 12-11 17:38

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

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

    ARM CPU操作系統

    嵌入式操作系統是 ARM CPU的軟件基礎 從8 位/16位單片機發展到以ARM CPU核為代表的32位嵌入式處理器,嵌入式操作系統將替代傳統的由手工編制的監控程序或調度程序,成為重要
    發表于 07-04 07:03

    HarmonyOS鴻蒙操作系統什么是“基于微內核的全場景分布式操作系統”?

    HarmonyOS鴻蒙操作系統什么是“基于微內核的全場景分布式操作系統”?即使作為理工科的人咋一眼看上去似乎也不太懂這是什么,就像區塊鏈這個概念剛出來一樣,普通人都是一臉懵B(當然現在我對這個也是
    發表于 09-23 17:06

    如何選擇ARM CPU操作系統

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

    MOS微型操作系統的設計與實現

    本文介紹一個基于Intel 80x86 CPU模式的多任務微型操作系統MOS的設計與實現。 著重闡述了MOS的層次結構、內存布局、引導
    發表于 07-30 10:19 ?10次下載

    什么是VxWorks操作系統

    VxWorksVxWorks操作系統是美國WindRiver公司于1983年設計開發的一種實時操作系統。VxWorks擁有良好的持續發展能力、高性能的內核以及良好的用戶開發環境,在
    發表于 06-17 00:33 ?4108次閱讀

    32位cpu、程序、操作系統是什么意思

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

    Linux操作系統訓項目_虛擬機設置基礎_RHEL_5.0_2

    嵌入式Linux操作系統訓項目,虛擬機設置基礎RHEL_5.0
    發表于 11-04 15:17 ?0次下載

    Data_ONTAP_集群模式操作系統

    Data_ONTAP_集群模式操作系統
    發表于 12-29 12:01 ?0次下載

    windows10操作系統安全模式的使用技巧

    談到系統的安全模式大家并不陌生,在安全模式可以解決相關的電腦問題。windows操作系統的安全模式
    發表于 06-12 17:25 ?1256次閱讀

    CPU的工作模式

    真實的指令,對指令的動作不作區分,直接執行指令的真實功能,另一方面是發往內存的地址是真實的,對任何地址不加限制地發往內存。1.2模式寄存器x86 CPU
    發表于 11-30 16:21 ?9次下載
    <b class='flag-5'>CPU</b>的工作<b class='flag-5'>模式</b>

    如何使服務器CPU在超頻模式運行

    服務器已安裝Windows Server操作系統,通過配置BIOS和電源選項可使CPU在超頻模式運行。
    的頭像 發表于 03-27 10:52 ?2723次閱讀

    國產CPU操作系統被納入政府采購清單:加速換國產OS

    國家發文要求將國產CPU操作系統納入采購清單,涉及35個項目,將推動國產CPU操作系統產業發展。此舉將提高我國信息系統安全性和可靠性,減
    的頭像 發表于 05-13 17:42 ?2178次閱讀
    國產<b class='flag-5'>CPU</b>和<b class='flag-5'>操作系統</b>被納入政府采購清單:加速換國產OS
    主站蜘蛛池模板: 成 人 动漫3d 在线看| RUNAWAY韩国动漫免费官网版| 4388成人| 精品国产乱码久久久久久下载 | 在线看片亚洲| 黑人巨茎大战白人女40CMO| 哇嘎在线精品视频在线观看| 菠萝菠萝蜜免费播放高清| 欧美成人猛片aaaaaaa| 99久久精品国产高清一区二区| 麻豆官网入口| 2021乱码精品公司| 蜜桃传媒在线观看入口| 91久久夜色精品| 免费人妻无码AV不卡在线| 4455永久在线毛片观看| 妈妈的朋友6未删减版完整在线| 91popny蜜桃臀| 年轻的的小婊孑2中文字幕| 99热久久视频只有精品6国产| 欧美另类老少配hd| 成人高清护士在线播放| 视频一区国产在线二区| 国产系列在线亚洲视频| 夜夜骑夜夜欢| 哪灬你的鸣巴好大| 拔萝卜电视剧高清免费| 爽死你个放荡粗暴小淫货漫画| 国产精品久久久久久精品...| 亚洲 综合 欧美在线 热| 精品视频中文字幕| 97精品国产亚洲AV高清| 日韩一卡二卡三卡四卡免费观在线| 国产成人免费高清激情视频| 亚洲精品一二三区-久久| 老师你狠狂| 福利社的阿姨| 一本大道香蕉中文在线视频观看 | 娇喘嗯嗯 轻点啊视频福利| 最近中文字幕完整版免费高清| 暖暖 免费 高清 日本视频大全|