在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

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

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

對于人類來說,我們不喜歡拐彎抹角,喜歡更直接的東西,“有話直說”、“沒有中間商賺差價”、“簡潔的設計”等等,然而對于計算機,尤其是對內存管理來說則恰恰相反, 在這里"簡潔"的設計往往不是好的設計 ,這到底是什么意思呢?

我們在很早的文章中就提到過,內存從本質上將非常簡單,你可以將其想像成一個個的小盒子組成,每個小盒子要么能存儲1要么存儲0,每8個小盒子組成一個字節(8比特),每個字節都有一個唯一的地址,通過這個地址我們就能從相應的一組小盒子取出這個比特。

其它沒了。

看到了吧,內存本身其實是非常簡單的,然而程序員以及程序使用內存的方式又讓這個問題變得復雜起來,分析任何復雜問題都要抓住重點、抓住核心問題,那么這里的重點以及核心是什么呢?

不賣關子,這里的核心在于兩個字: 尋址Addressing。

一切都是圍繞尋址展開的。

尋址,最重要的就是尋址

什么是尋址 Addressing?所謂尋址就是找到內存中某個我們需要的數據的方式。

哪怕以我們平時去儲物柜取東西都有很多“尋址”方式:

  • 直接告訴我們一個編號,我們拿到這個編號后按個去找,就像下面這張圖,我們需要找到東西在第15號儲物柜中,那么我們根據15這個地址就能找到第15號儲物柜。
    圖片

  • 當然我們也可以將儲物柜劃分區域,還是以剛才的儲物柜為例我們可以劃分為3個區域,當我們需要找東西時告訴我們其在儲物柜的哪個區域,以及在該區域中的"偏移"是多少。

    以下圖為例我們需要的東西在第二個區域,區域內的偏移為6(該區域中的第6個儲物柜)。

    圖片

實際上,第一種更像是“絕對尋址”,什么意思呢?就是找到某個具體的儲物柜是根據一個“寫死的地址”(hardcode),很死板,第二種更像是相對尋址,稍顯靈活一些。

怎么樣,你是不是感覺這兩種其實也沒什么區別嘛,的確,對于找儲物柜這個例子來說這兩種方式的確沒什么區別,但對于內存來說就不太一樣了。

死板 vs 靈活

我們知道程序以及程序使用的數據編譯好后存放在磁盤上,運行時要加載到內存中,因此這里同樣存在尋址問題:我們需要根據內存地址找到機器指令以及數據,接下來假設有一個只有8字節大小的內存和一個只有2字節機器指令的程序(無需關心實際意義):

圖片

這段2字節的代碼非常簡單,其實就是一個無意義的while循環,注意看這里的jmp這條指令,我們直接跳轉到內存地址2,這就是一個寫死(hard code)的內存地址,這就意味著我們必須把該程序加載到內存地址為2的位置上:

圖片

否則這段指令根本沒有辦法運行,比如我們把這段代碼加載到內存地址6上去:

圖片

那么在執行jmp 2時我們根本沒有辦法跳轉到add這行指令,有的同學可能覺得無所謂,不就是內存地址寫死了嘛,好像也沒什么大不了的吧。

如果一次只能運行一個程序的確也沒什么大不了的,但對于操作系統最核心的功能之一:多任務,也就是一次可以運行多個程序來說這個方案簡直行不通。

在這種方案下你幾乎沒有辦法一次運行多個程序,除非在運行之前你給要運行的這幾個程序劃定好區域,比如要運行兩個程序A和B,A占用03這個區域的內存;B占用46這個區域的內存, 對于現代程序員來說你能想象在程序運行之前就需要給它劃定好區域嗎? 顯然,這非常繁瑣,也容易出錯。

如果你在上世紀六七十年代寫代碼,面臨的大概就是這樣一種狀況。

實際上這個問題的核心就在于 重定位程序使用的地址不能綁定在一個內存區域上,需要足夠靈活,我們需要在不修改代碼的情況下把程序加載到任意內存區域上運行! 想一想該怎么解決這個問題。

作為程序員肯定和文件路徑打過交道,如果你能明白絕對路徑與相對路徑就能解決重定位問題。

絕對路徑與相對路徑

想一想絕對地址有什么問題?這個問題就好比你在程序中讀取一個絕對地址時:

/user/xiaofeng/doc/a.c

如果是你自己的計算機那么沒有問題, 但如果這個程序在其它人的計算機上運行就不一定了,因為其它人的計算機中不一定有這個路徑 ,這時該怎么辦呢?聰明的你一定知道,那就不要使用絕對路徑,而是使用相對路徑就可了:

./a.c

其中./表示程序運行時所在的路徑,這時不管這個程序在哪個路徑下運行都能找到a.c這個文件,這時所在的目錄就成為了 基準

解決重定位這個問題也是同樣的道理,編程生成可執行程序時不再使用 絕對內存地址 ,而是使用相對地址,怎么使用相對地址呢?相對于誰呢?很簡單, 相對于該程序被加載到的內存起始地址

此時我們的jmp命令后面不再是一個絕對的內存地址,而是一個相對地址:0,但畢竟向內存發出讀寫指令時必須使用一個內存地址,那么CPU執行jmp 0時該怎樣將其轉為一個內存地址呢?

圖片

很簡單,因為這一段程序被加載到了內存起始地址2,因此只需要用相對地址加上起始地址得到的就是真實的物理內存地址:

物理地址 = 起始地址 + 相對地址

很簡單吧, 這樣不管這段程序被加載到了哪個內存區域,只要我們知道起始地址那么總能計算出真實的物理內存地址 ,重定位問題就可以這樣解決。

實際上你會發現, 這個儲物柜的第二種尋址方式也沒有什么區別

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

    關注

    68

    文章

    10921

    瀏覽量

    213251
  • 內存
    +關注

    關注

    8

    文章

    3071

    瀏覽量

    74410
  • 操作系統
    +關注

    關注

    37

    文章

    6905

    瀏覽量

    123855
收藏 人收藏

    評論

    相關推薦

    什么是操作系統

    前面所說的,如果沒有操作系統,程序員在開發軟件的時候就必須陷入復雜的硬件實現細節。程序員并不想涉足這個可怕的領域,而且大量的精力花費在這個重復的、沒有創造性的工作也使得程序員無法集中精力放在更具有創造性
    發表于 09-13 10:10

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

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

    ARM CPU操作系統

    或Eclipe開發環境,市場上還有專用的開發工具,如Tornado、mC/View、mC/KA、CODE/Lab、Metroworks等。 本文就目前國內在ARM CPU廣泛采用的三種嵌入式操作系統(mC/OS-II、mCLi
    發表于 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 ?4128次閱讀

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

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

    ARM CPU操作系統選擇要點

    本文就目前國內在ARM CPU廣泛采用的三種嵌入式操作系統(mC/OS-II、mCLinux和嵌入式Linux)作分析
    發表于 05-23 10:21 ?743次閱讀

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

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

    Data_ONTAP_集群模式操作系統

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

    EMWIN實驗STemWin無操作系統移植-T

    電子發燒友網站提供《EMWIN實驗STemWin無操作系統移植-T.rar》資料免費下載
    發表于 09-15 16:16 ?0次下載
    EMWIN實驗<b class='flag-5'>之</b>STemWin無<b class='flag-5'>操作系統</b>移植-T

    Linux操作系統的射頻測試模式應用指南

    電子發燒友網站提供《Linux操作系統的射頻測試模式應用指南.pdf》資料免費下載
    發表于 02-19 09:39 ?0次下載
    Linux<b class='flag-5'>操作系統</b><b class='flag-5'>上</b>的射頻測試<b class='flag-5'>模式</b>應用指南

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

    國家發文要求將國產CPU操作系統納入采購清單,涉及35個項目,將推動國產CPU操作系統產業發展。此舉將提高我國信息系統安全性和可靠性,減
    的頭像 發表于 05-13 17:42 ?2458次閱讀
    國產<b class='flag-5'>CPU</b>和<b class='flag-5'>操作系統</b>被納入政府采購清單:加速換國產OS

    如何在windowsemulate不同操作系統

    一、虛擬化技術概述 虛擬化技術允許在單個物理機器創建多個虛擬機,每個虛擬機都可以運行不同的操作系統。這使得我們可以在Windows系統模擬其他
    的頭像 發表于 12-05 15:50 ?353次閱讀
    主站蜘蛛池模板: 涩涩97在线观看视频 | 国产精品网址你懂的 | 男女一级特黄a大片 | 成人区精品一区二区毛片不卡 | 成年视频xxxxx免费播放软件 | 天天尻| 91大神在线免费观看 | 中国xxxxx高清免费看视频 | 国内视频一区二区三区 | 正在播放一区二区 | 永久免费观看黄网站 | 免费边摸边吃奶边叫床视频gif | 精品一区二区三区三区 | 天堂资源最新版在线www | 成人精品一区二区三区电影 | 婷婷草 | 精品无码三级在线观看视频 | 国产三级在线免费 | 十三以下岁女子毛片免费播放 | 亚洲一区不卡视频 | 性久久久久久久 | 亚洲综合五月天 | 李老汉的性生生活2 | 亚洲一区二区三区四 | 欧美日韩性大片 | 欧美性极品xxxxx | 看日本黄大片在线观看 | 中文字幕第15页 | 成人黄色网址 | 午夜爱爱毛片xxxx视频免费看 | 人人看人人做人人爱精品 | 免费观看成年欧美1314www色 | 国产午夜毛片一区二区三区 | 免费观看成人毛片 | 思思久99久女女精品 | 欧美三级黄视频 | aaaaaaaaa在线观看 | 高h道具触手play肉男男 | 久久久久久毛片免费播放 | 欧美日韩性高爱潮视频 | 亚洲成色在线综合网站 |