溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

自主操作系統(tǒng)LMOS-00.04發(fā)布啦

發(fā)布時(shí)間:2020-06-29 20:15:35 來(lái)源:網(wǎng)絡(luò) 閱讀:549 作者:pdlenovo 欄目:系統(tǒng)運(yùn)維

更多的信息請(qǐng)?jiān)L問(wèn)我的CU博客

        恍恍然三個(gè)月過(guò)去了,也三個(gè)月沒(méi)寫點(diǎn)什么了,這三個(gè)月我倒是寫了不少代碼,是時(shí)侯把lmos拿出來(lái)說(shuō)說(shuō)了,這將是lmos的第四個(gè)開(kāi)發(fā)版。今年的三個(gè)月已經(jīng)完了,又只有9個(gè)月了,時(shí)間緊迫的孩紙們要抓緊啦,其實(shí)開(kāi)發(fā)操作系統(tǒng)內(nèi)核就是要足夠的時(shí)間,時(shí)間越多越好,可往往不如我愿,時(shí)間總是不夠用。
      先來(lái)說(shuō)說(shuō)lmos第四個(gè)開(kāi)發(fā)版有什么新的特性吧。
      1、從這個(gè)版本開(kāi)始,lmos不在支持32位x86體系結(jié)構(gòu)了,而是支持更先進(jìn)那么一點(diǎn)點(diǎn)的64位x86體系結(jié)構(gòu)了,它的名字叫AMD64。
      2、lmos這個(gè)版本開(kāi)始擁有虛擬內(nèi)存了。這個(gè)說(shuō)起來(lái)很復(fù)雜,那就等會(huì)兒在說(shuō)。
      3、lmos從這個(gè)版本開(kāi)始,支持從U盤啟動(dòng)了,當(dāng)然有個(gè)前提,那就是你的計(jì)算機(jī)主板必須支持從U
盤這類USB介質(zhì)引導(dǎo)你的計(jì)算機(jī),這點(diǎn)給想要在物理機(jī)上驗(yàn)證和搗鼓lmos的朋友提供了方便。
      為什么lmos從32位突然之間就變成全64位的了,是因?yàn)槲议_(kāi)發(fā)虛擬內(nèi)存管理器在32位下受到了嚴(yán)重的局限性。后來(lái)一想以后反正要支持64位的,不如趁早,以免日后麻煩。其實(shí)現(xiàn)在物理機(jī)的內(nèi)存容量已經(jīng)超過(guò)4GB了。x86——64體系結(jié)構(gòu)是AMD公司最先定義出來(lái)的,這就是為什么叫AMD64的原因。實(shí)現(xiàn)AMD64體系結(jié)構(gòu)的時(shí)候,他們的工程師被要求這樣,要保證原有32位的os和app,能夠不經(jīng)過(guò)任何修改就能運(yùn)行在AMD64體系結(jié)構(gòu)上。64位的OS能夠執(zhí)行未經(jīng)修改的32位app。在這些保證下還要盡量改進(jìn)x86.你不得不驚嘆搞x86的工程師們有多偉大、有多痛苦,呵呵。其實(shí)AMD64體系結(jié)構(gòu)改得還是不錯(cuò)的。段 幾乎不起作用了,TSS的作用也改變了,中斷的棧也更加規(guī)范了,寄存器全64位了而且寄存器還多了不少,看來(lái)他們也知道x86的寄存器太少了,頁(yè)表也是4層了,支持4KB,2MB,1GB這幾種大小的頁(yè)面。LMOS是全64位的內(nèi)核,同時(shí)也要求應(yīng)用程序和驅(qū)動(dòng)也是64位的,LMOS不會(huì)兼容32位的程序。AMD64的寄存器雖然是64位的,但并不代表它可以訪問(wèn)0~0xffffffffffffffff之間所有的物理地址,事實(shí)上在當(dāng)前的AMD64體系結(jié)構(gòu)的CPU上只有48根地址線,甚至更少。那么它是怎么做的呢,它要求64位寄存器從48位開(kāi)始用符號(hào)位擴(kuò)展,也就是說(shuō)CPU只能訪問(wèn)這兩個(gè)區(qū)間的地址:0~0x00007fffffffffff和
0xffff800000000000~0xffffffffffffffff,如果你訪問(wèn)
0x800000000000~0xffff800000000000之間的地址CPU會(huì)產(chǎn)生異常。但這一實(shí)現(xiàn)非常有利于日后的擴(kuò)展,我這有幅圖大家可以看看:
    自主操作系統(tǒng)LMOS-00.04發(fā)布啦

      這一改變佐證了LMOS的可移植性,因?yàn)長(zhǎng)MOS內(nèi)核有硬件抽象層的概念,我只花了幾個(gè)周的時(shí)間寫了個(gè)64位的硬件抽象層,然后把這個(gè)層和上層硬件無(wú)關(guān)的層鏈接起來(lái)就完事兒了。也就是說(shuō)我要把LMOS移植到ARM體系結(jié)構(gòu)上,只要寫個(gè)ARM的硬件抽象層外加少許改動(dòng)就行了,這種設(shè)計(jì)使lmos成為通用操作系統(tǒng)變成可能。
      在來(lái)看看這一版本中l(wèi)mos的虛擬內(nèi)存管理器。虛擬內(nèi)存在操作系統(tǒng)理論書籍中只花很少篇幅介紹了那么一點(diǎn)點(diǎn),實(shí)際中虛擬內(nèi)存可謂重中之重,可謂是操作系統(tǒng)內(nèi)核的內(nèi)核。先看看LMOS這一版本中虛擬內(nèi)存管理器的總框架圖,我畫的很簡(jiǎn)陋,大家看看吧:
     自主操作系統(tǒng)LMOS-00.04發(fā)布啦

      為什么虛擬內(nèi)存管理是內(nèi)核的內(nèi)核,我舉個(gè)例子吧。比如操作系統(tǒng)要描述一個(gè)線程,那么就必須要定義一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)表示一個(gè)線程,(說(shuō)句題外話,我現(xiàn)在才真正明白,C語(yǔ)言書前面那句話:“程序=數(shù)據(jù)結(jié)構(gòu)+算法”)好了回來(lái),這個(gè)表示線程的數(shù)據(jù)結(jié)構(gòu)只有在內(nèi)存中有了真正的實(shí)例,程序(內(nèi)核)才能工作。內(nèi)核為支持多線程那么這種數(shù)據(jù)結(jié)構(gòu)的實(shí)例就需要很多,比如可能有2000個(gè)線程你總不能靜態(tài)的定義2000個(gè)這種數(shù)據(jù)結(jié)構(gòu)的數(shù)組,這樣確實(shí)能夠工作,但是這樣使用內(nèi)存太低效了,太不智能了,因?yàn)橛锌赡苡袝r(shí)系統(tǒng)中只有兩三個(gè)線程,這時(shí)就浪費(fèi)了內(nèi)存,如果有時(shí)系統(tǒng)中超過(guò)2000個(gè)線程時(shí),這時(shí)你沒(méi)辦法了。類似這種數(shù)據(jù)結(jié)構(gòu)系統(tǒng)中是非常多的,通常只有幾10字節(jié)、幾100字節(jié)到1KB之間。既然靜態(tài)的不行,就只有用動(dòng)態(tài)的方法,那就是:要用的時(shí)侯就分配并初始化一個(gè)數(shù)據(jù)結(jié)構(gòu)實(shí)例,不要時(shí)就釋放這個(gè)實(shí)例所占用的內(nèi)存空間。LMOS這個(gè)版本重新實(shí)現(xiàn)了一個(gè)更為先進(jìn)的內(nèi)存池,來(lái)處理這種問(wèn)題,先說(shuō)了這種數(shù)據(jù)結(jié)構(gòu)只有10字節(jié)、幾100字節(jié)到1KB之間。你總不能一次就分配一個(gè)頁(yè)面,這叫浪費(fèi)。內(nèi)存池就是為解決這個(gè)問(wèn)題的。
      現(xiàn)代意義的操作系統(tǒng),好像都有保護(hù)、安全這種類概念,這些概念是怎么實(shí)現(xiàn)的呢,CPU提供了一些機(jī)制。把一部分關(guān)鍵指令規(guī)定為特權(quán)指令,把程序里出現(xiàn)的訪存地址規(guī)定為虛擬地址,要通過(guò)地址映射部件映射之后,才能訪問(wèn)真正的物理內(nèi)存。這兩套機(jī)制形成了編寫現(xiàn)代操作系統(tǒng)的基石。這使得每個(gè)進(jìn)程都有一個(gè)獨(dú)立的地址空間,而這個(gè)空間由于權(quán)力不同,可以被分為,用戶空間和內(nèi)核空間。這樣就形成了一個(gè)“保護(hù)”的概念。這些概念在lmos中是如何利用的呢,這有個(gè)圖:
     自主操作系統(tǒng)LMOS-00.04發(fā)布啦

      由上可知,x86——64下 只能訪問(wèn)兩個(gè)區(qū)間的地址,既然硬件都是這么實(shí)現(xiàn)的,而且這種實(shí)現(xiàn)有利于擴(kuò)展,那么我也沒(méi)什么好改的了,0~0x00007fffffffffff的虛擬地址區(qū)間為進(jìn)程的用戶空間,這個(gè)空間是每個(gè)進(jìn)程私有的,其它別的進(jìn)程不能訪問(wèn),而且這個(gè)區(qū)間有虛擬內(nèi)存管理器分配和映射物理內(nèi)存。0xffff800000000000~0xffffffffffffffff的虛擬地址區(qū)間為L(zhǎng)MOS內(nèi)核空間,這個(gè)空間是所有進(jìn)程共享的,在x86上好像只能這樣了沒(méi)有別的選擇,我試過(guò)很多種別的空間分配法都沒(méi)法成立。只能是上圖那樣的。
      LMOS這個(gè)版本支持U盤啟動(dòng)了,為了讓更多的人,能夠在物理機(jī)上搗鼓和驗(yàn)證LMOS內(nèi)核,我這次重寫了lmos內(nèi)核的引導(dǎo)程序,以便能從U盤啟動(dòng)lmos,大家也更能相信LMOS是個(gè)真正的玩意兒。U盤也不用很大,32MB就行啦,但是使用前請(qǐng)備份好你U盤中的數(shù)據(jù)。LMOS會(huì)刪除U盤上所有的數(shù)據(jù)。如果你想搗鼓一下的話,請(qǐng)?jiān)趌inux下插入U(xiǎn)盤,然后到/dev目錄下查看你U盤的設(shè)備文件名,一般可能是sd(x)這樣的名字,括號(hào)中的X是變化的,如果你有兩塊硬盤的話,你就會(huì)在/dev目錄下看到:sda、sdb、這樣的設(shè)備文件名,當(dāng)你在插入U(xiǎn)盤時(shí),就會(huì)看到sdc,找到且確認(rèn)是U盤的設(shè)備文件名后,在終端下切換到放lmos內(nèi)核文件的目錄下,執(zhí)行sudo make U_DSK=/dev/sdb,(我的linux下,我的U盤設(shè)備文件名是 sdb 所以才能這樣,如果你的不是或者不能確定是不是,千萬(wàn)別執(zhí)行上面那條命令),否則造成的數(shù)據(jù)丟失,本人一概不負(fù)責(zé)。
      虛擬機(jī)中安裝,我推薦大家使用這種方式,這樣既不需要另的一塊空U盤,也不需要大家的宿主操作系統(tǒng)是LINUX。大家首先確保你的宿主操作系統(tǒng)中安裝有Oracle VM VirtualBox 虛擬機(jī)軟件。如果沒(méi)有請(qǐng)大家自行下載相關(guān)操作系統(tǒng)版本的Oracle VM VirtualBox并安好。安裝好后,先新建個(gè)虛擬機(jī),然后下載(點(diǎn)此下載)本人提供的虛擬機(jī)硬盤鏡像。并掛載在虛擬機(jī)上,啟動(dòng)虛擬機(jī)即可運(yùn)行LMOS。這次我還提供了VMDK格式的硬盤鏡像。方便使用VM虛擬機(jī)的朋友。
      最后說(shuō)說(shuō)這次的shell,我提供了幾條極為簡(jiǎn)單的命令:
      r 重啟計(jì)算機(jī) 如下圖
     自主操作系統(tǒng)LMOS-00.04發(fā)布啦

      t 查看lmos內(nèi)部的進(jìn)程、線程數(shù) 如下圖
     自主操作系統(tǒng)LMOS-00.04發(fā)布啦

      m 查看計(jì)算機(jī)物理內(nèi)存的使用情況 如下圖
     自主操作系統(tǒng)LMOS-00.04發(fā)布啦

      p 查看計(jì)算機(jī)內(nèi)部的pci總線和設(shè)備 如下圖
     自主操作系統(tǒng)LMOS-00.04發(fā)布啦
     LMOS內(nèi)核鏡像包下載

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI