在已有的Linux操作系統中,安裝另一個開源操作系統,我們一般是先構建新操作系統的chroot基礎環境,然後chroot進入新構建的操作系統環境來安裝和配置。這種構建和安裝操作系統的方法,對於我們學習和研究操作系統結構和原理應該說比較重要。本文舉了簡單的例子,以Fedora Core 5.0 為基礎,通過chroot來構建Slackware 10.2;
1、chroot方式安裝操作系統的目的和用途
chroot 工具是Linux操作系統都具備的工具,從表面的意思看,chroot 是從一個/根到另一個/根。在一個Linux操作系統中安裝另一個操作系統,就是利用chroot的這個特點。首先創建chroot運行的基礎環境,然後通過chroot到新的/根,然後再用相應的軟體包管理工具把新的操作系統其它軟體包安裝上;
幾乎所有的開源操作系統都可以用chroot的方法來安裝,比如Gentoo 、LFS及CRUX比較常用chroot;通過chroot安裝操作系統,好象堆積木一樣,一塊一塊的把操作系統安裝起來,所以Gentoo和LFS的Fans特別有成就感。呵,也說是操作系統全手工打造,成就感自然不言而喻了;
天極軟體專題專區精選
Windows Vista專區 POPO專區 QQ專區QQ掛機 注冊表專區 Windows優化
Flash MX 視頻教程 Photoshop視頻教程 網頁設計視頻教程 照片處理數字暗房
PPT動畫演示教程 Excel動畫教程集 Word動畫演示教程 Google專區
特洛伊木馬專區 黑客知識教程專區 防火牆應用專區 了解Web2.0
Windows API開發專區 網路編程專區 VB資料庫編程專區 圖像處理與多媒體編程
通過chroot安裝操作系統,我們能學到什麼呢?主要是能知道一個操作系統最少需要多少部件可以「動」起來,以及了解一個操作系統需要哪些基礎的必備的「部件」,這對開發自己的基於Linux操作系統以及了解操作系統的構成及原理是比較重要的;
2、通過chroot 方式安裝操作系統所需要的系統環境
最根本的環境是是在您的機器有得有一個能運行的Linux操作系統或一個LiveCD;
3、通過chroot 安裝操作系統的流程
要下面幾個流程:
一、規劃硬碟分區或創建映像文件;請參考:
二、創建文件系統;
三、掛載文件系統;
四、安裝基礎系統;主要通過解壓軟體包來實現;
五、修改新系統的配置文件,比如 位於新系統中的/etc/fstab
六、解決依賴關系,安裝軟體包管理工具;
七、通過chroot進入新系統;
八、通過新系統的軟體包我管理工具來安裝其它軟體包;
九、處理引導問題,比如GRUB引導之類的
4、操作系統安裝安裝目的地的介質說明;
一個操作系統可以安裝在物理硬碟中,也可以安裝在一個映像文件中;安裝在物理硬碟中大家都能理解。安裝在一個映像文件中怎麼理解呢?比如通過VMWARE來虛擬安裝操作系統是不是安裝在一個文件中呢?是的,和這個意思差不多; 再說一點,交換分區swap 也可以是文件;再比如Xen虛擬操作系統就可以安裝在文件映像中;
安裝在映像文件中的操作系統,可以用來學習,通過chroot訪問,也可以通過xen來虛擬等 ... ... 還可以做成類似file.iso的形式來存儲文件等;
5、實說簡說在Fedora 中安裝Slackware 10.2;
本例是在Fedora Core 5.0 中通過chroot 安裝Slackware 10.2,安裝目的地的介質分為兩種,一種是物理硬碟;一種是映像文件。安裝在物理硬碟的可以通過GRUB或LILO等引導管理器來獨立真實運行,安裝在映像文件中的能通過chroot訪問或Xen虛擬運行;
5.1 通過chroot 安裝Slackware 10.2 到一個硬碟物理分區中;
這個過程好象是有點多餘,但寫一寫也好,這是大多開源操作系統的安裝都通用的,也是最原始、最有效的方法,也就是說在一個已有的操作系統環境中安裝另一個操作系統;
掛載文件系統就是通過mount 來掛載;
舉例:
比如我的硬碟/dev/hda5是空白分區,並且我想創建/dev/hda5為ext3文件系統,並且把它掛載到 /mnt/slack目錄中,然後通過chroot來安裝Slackware 10.2;
第一步:您要通過分區工具fdisk 或parted來規劃您的分區
第二步:創建文件系統;
[root@localhost
~]#mkdir /mnt/slack
[root@localhost ~]# mkfs.ext3 /dev/hda5 註:格式化/dev/hda5為ext3文件系統;
第三步:掛載文件系統;
[root@localhost ~]# mount /dev/hda5 /mnt/slack 註:掛載/dev/hda5到 /mnt/slack目錄;
第四步:掛載slackware 10.2 光碟的第一張,安裝基礎系統;
[root@localhost
~]# mount -o loop slackware-10.2-install-d1.iso /mnt/cdrom/
我們可以先在/mnt/slack目錄中創建一個軟體包存放目錄,用於存放slackware-10.2-install-d1.iso中的所有內容;
[root@localhost
~]#mkdir /mnt/slack/pack
[root@localhost ~]# cp -rp /mnt/cdrom/* /mnt/slack/pack
然後把slackware 第一張盤中的slackware目錄中的a目錄中的所有包都進行解壓縮,以及d目錄中glibc開頭的包,d目錄中的zlib以及zsh 並且把解出來目錄,比如 /usr、etc、lib等所有目錄都復制到 /mnt/slack中;
第五步:解決依賴關系;
如果我們運行下面的命令提示沒有/bin/bash這個文件時,我們要解決依賴關系;通過解決依賴關系,也會發現運行chroot所需要的必備的基礎軟體包;
[root@localhost
~]# chroot /mnt/slack
如果提示缺少一些文件,我們可以自行判斷缺少哪些包;當我們進入/mnt/slack/bin目錄發現,的確沒有bash這個文件,所以我們要復制一個bash過去;
[root@localhost
~]# cd /mnt/slack/bin
[root@localhost bin]# cp bash2.new bash
這時我們還要判斷 bash 所依賴的庫文件;
[root@localhost
bin]# ldd bash
出來的依賴關系,大多是glibc的,glibc被安裝在了/mnt/slack/lib/tls目錄中,我們可以根據提示一個一個的做鏈接。少什麼東西就做什麼的鏈接;要看/mnt/slack/lib中是否有glibc的文件,然後做鏈接。如果是存放在tls目錄中的,也要鏈到/mnt/slack/lib中。鏈接時要用相對路徑,不能用絕對路徑;
創建鏈接文件和在Windows創建快捷方式比較相似,用ln 命令;
#ln -s 原文件名 新文件名
什麼才算解決了 bash的依賴關系了呢?直到能chroot /mmt/slack才算成功;
第六步: chroot成功,進入Slackware系統;
chroot 成功後,我們就能進入Slackware系統,然後通過pkgtool 或installpkg 工具來安裝其它的軟體包,比如 內核什麼的;
[root@localhost
~]# chroot /mnt/slack
第七步;更改/etc/fstab文件;
如果要讓一個操作系統獨立運行,非得寫一寫/etc/fstab文件,對於這個您可以參考,比如 下面的這個例子,您改一改就可以用了;
/dev/hda7
swap swap defaults 0 0
/dev/hda6 / reiserfs defaults 1 1
/dev/hda1 /mnt/winc
ntfs ro 1 0
/dev/hda3 /mnt/wind vfat defaults 1 0
/dev/cdrom /mnt/cdrom
auto noauto,owner,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner 0 0
devpts
/dev/pts devpts gid=5,mode=620 0 0
proc /proc proc defaults 0 0
none /sys
sysfs defaults 0 0
第八步:引導系統;
要通過GRUB或LILO引導管理器實現對Slackware的引導;
5.2 通過chroot把Slackware 10.2安裝在一個映像文件中;
第一步:創建映像文件;
比如 我們創建一個名為slack.img的映像文件,體積為2G的,就可以用下面的命令;bs是每個塊的大小為1M,共創建2000塊;
[root@localhost
~]# dd if=/dev/zero of=slack.img bs=1M count=2000 seek=1024
第二步:創建文件系統;
我們可以創建為ext3、fat32或reiserfs等文件系統,創建文件系統,
[root@localhost
~]# /sbin/mkfs.ext3 slack.img
mke2fs 1.38 (30-Jun-2005)
slack.img is not
a block special device.
Proceed anyway? (y,n) y
第三步:掛載已被格式化映像文件;
[root@localhost
~]# mkdir /mnt/slack
[root@localhost ~]# mount -o loop slack.img /mnt/slack/
第四步以後和物理硬碟操作基本相同,省略過去;
6、有關軟體包rpm、tgz、deb等軟體包提取;
發行版都有一定的軟體包格式,比如 file.rpm 、file.deb或file.tgz或file.tar.gz等;rpm格式的軟體包,一般基於Redhat或Fedora為基礎開發的都採用RPM格式。因為chroot安裝操作系統,首要的是從一個軟體包中提取文件,然後復制到文件系統中,所以提取文件工具也得做一點解說;
6.1 從rpm軟體包抽取文件;
操作的前提是得有rpm的管理工具,也就是說得有rpm等相關命令;
命令格式: rpm2cpio file.rpm |cpio -div
舉例:
[root@localhost
RPMS]# rpm2cpio gaim-1.3.0-1.fc4.i386.rpm |cpio -div
抽取出來的文件就在當用操作目錄中的 usr 和etc中;
其實這樣抽到文件不如指定安裝目錄來安裝軟體來的方便;也一樣可以抽出文件;
為軟體包指定安裝目錄:要加 -relocate 參數;下面的舉例是把gaim-1.3.0-1.fc4.i386.rpm指定安裝在 /opt/gaim 目錄中;
[root@localhost
RPMS]# rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm
Preparing...
########################################### [100%]
1:gaim ###########################################
[100%]
[root@localhost RPMS]# ls /opt/
gaim
這樣也能一目瞭然;gaim的所有文件都是安裝在 /opt/gaim 中,我們只是把gaim 目錄備份一下,這樣其實也算提取文件的一點用法;
6.2 file.tgz、file.tar.gz和file.tar.bz2的提取;
[root@localhost
~]# tar zxvf file.tgz
[root@localhost ~]# tar zxvf file.tar.gz
[root@localhost
~]# tar zxvf file.tar.bz2
6.3 file.deb的提取;
[root@localhost
~]# ar x file.deb
[root@localhost ~]# tar zxvf data.tar.gz
file.deb通過ar x 來解包,然後再把data.tar.gz解開就看到相關的目錄和文件了;
6.4 file.iso文件的提取;
這樣的文件在Linux主要通過mount -o loop file.iso 掛載地址;比如 ;
[root@localhost
~]# mount -o loop slackware-10.2-install-d1.iso /mnt/cdrom/
7、chroot 成功切入新的操作系統後的軟體安裝問題補充;
如果通過chroot能進入新安裝的操作系統,我們就可以新操作系統的軟體包管理工具來安裝其它軟體包了,比如 Slackware 用的是pkgtool 或installpkg工具;Fedora 用的是 rpm 等工具;大多發行版所用的工具不盡相同,以發行版為准 ;
8、關於本文;
在去年的時候就想寫此文,隨著時間的推移,今天想起來的事情可能明天就忘的差不多了,所以用到chroot的時候就想寫,用不到的時候就把寫文檔的事扔到一邊。今天正好寫關於Xen的文檔,也恰恰用到chroot方式安裝新的操作系統,所以「被迫」中寫了一篇。雖然涉及chroot的功用少了點,但大體上還是把chroot說了差不多了;可能本文的名字有點不符合,我也不知道用什麼命名標題不好。
B. 如何從零開始寫一個簡單的操作系統
如何從零開始寫一個簡單的操作系統?
看了這個:從零開始寫一個簡單的操作系統 求指教。
知乎用戶 學生生涯只剩半年。
548 人贊同
終於可以來回答這道題了……
一年多前,也就是大一下學期末的時候,我看到這個問題下 @fleuria 叔的答案,然後看了 F 叔給的這個鏈接 基於 Bochs 的操作系統內核實現 ,當然是什麼都看不懂,除了驚詫之外也了解了一件事情:一個人寫一個簡單的操作系統內核是一件非常帥氣並且可行的事情。
於是我開始寫了,那時候我的水平大概是:只會做 C 語言的習題,編譯的話只知道按 F9,匯編知道常見的指令,另外會一點點的 Win 32 編程,能流暢使用 Windows。
一開始我找了《30 天自製操作系統》來看,每天看書,然後把從書里把代碼打出來,一次一次地編譯運行。因為要同時寫匯編和 C,所以從那時候起就開始用 vim。
在啃完了差不多半本書後,開始覺得沒意思了……因為覺得作者為了讓內容更簡單而省略了太多細節。也看了於淵的《Orange『s 一個操作系統的誕生》,依然沒看下去:匯編用得太多了。期間也曾斗膽發郵件給 F叔,然後他推薦了 Bran's Kernel Development Tutorial 這個教程,於是我就從這教程重新開始了: 「30天自製操作系統」 Stop & 「OS67 」 Start
那時候大概是大二上學期,於是在 github 上又開了一個 repo,一開始在 Windows 下開發,後來又切換到了 Linux 下,因為 Bran's 用的 bootloader 是 Grub,不符合我的初衷,所以就自己寫了一個,之後便跟一路教程寫,跨過了保護模式這道坎,完成了基本的設備驅動。
在完成 Bran's 後,我又部分參考了 寫一個操作系統內核有多難?大概的內容、步驟是什麼? - To淺墨的回答 中推薦的:hurley25/hurlex-doc · GitHub 文檔,完成了一些簡單的調試函數和庫函數,printk 和內存分配。
事實證明,盡早寫好調試函數諸如 panic, assert 和 printk 是非常重要的。 大量地使用有助於你盡快地發現 bug (當然前提是這些函數本身不能有 bug)。
看完了 hurlex-doc 該看的部分後,很長一段時間了都不知道該幹嘛好,模仿 hurlex-doc 里的內核線程切換也一直出錯。這一情況一直持續到我開始讀 Xv6, a simple Unix-like teaching operating system 。
如果你去看知乎關於「自製內核」的問題,你會發現 xv6 被反復地提及並推薦,事實上它非常值得被推薦:這是我讀完大部分代碼之後真切體會到的。
之前的 Bran『s 和 hurlex-doc 的篇幅都比較小,我是在電腦和 kindle 上看完的,xv6 相對來說代碼量比較大,有 9000+ 行和一份文檔,之後我又找到了這個:ranxian/xv6-chinese · GitHub xv6 文檔的中文譯版,所以我就去花了十二塊錢學校列印店列印了一份中文文檔和一份代碼。這又是一個正確的決定,讓我不必對著電腦就能看代碼。
在之後的時間里,我先讀了 xv6 中文件系統相關的部分,然後改寫它的代碼為我的內核添加了一個 類似 Minix 的文件系統。 然後幾乎又照抄了其中了進程調度的部分(做了部分簡化),又在原來的代碼基礎上為添加操作系統的介面,接著寫用戶程序,過程幾乎是「一路順風」。看 xv6 的那段時間也經常是處於醍醐灌頂的狀態。
最後我終於在差不多一個月前完成了這個簡陋的操作系統內核:
LastAvenger/OS67 · GitHub (沒錯其實我是來騙 star 的)
歷時一年,一路點亮了不少技能樹(雖然都點得不好),這樣算是「從零開始寫一個簡單的操作系統」么? 跟進一步說,有誰不是從零開始的呢?所以想做的話,現在就開始做好了。
這是被「翻爛」了的 xv6 源代碼和中文文檔(其實是放書包里被磨爛了)
「故事」講完了,接下來說一點經驗之談吧……
* 知乎上總是有人在討論「做一個玩具編譯器和做一個玩具內核何者更有趣」之類的問題,然後總有各種大V 跳出來說內核有多 dirty 而編譯器多 clean,事實上除了 CPU 上的幾個表因為歷史原因長得惡心一點,內核並沒有什麼特別 dirty 的地方,另外,想做點什麼打發時間,不過是兩個代碼量稍多的入門項目,有什麼好糾結的?
* 寫內核的過程中,你會接觸到一些這輩子大概只會用到一次的知識,A20 線已經成為歷史,日常的編程裡面也不需要你懂得 GDT IDT 的結構。但是單憑內核主要部分部分(文件系統,進程,內存)給你帶來的知識而言,這點冗餘是值得的。
* 盡早實現調試函數並大量使用,善於利用 bochs 的內置調試器,能省下你不少時間。
* 有時候覺得書里的做法非常奇怪,你覺得你有更好的做法,一般是你想錯了。(當然只是一般)
* 上面說看 xv6 一路順風是假的,20% 時間在抄代碼,80% 的時間用來調試。
* 對我這種能力一般的人來說,「寫內核」只是好聽的說法,正確的說法是「抄內核」。當然,就算是抄一個,也算是受益匪淺了。
* 抄 xv6 的好處在於,即使你的代碼出錯了,你可以堅信,正確的答案肯定在 xv6 的代碼里,或許只是你還沒理解透而已,只要不斷地看和理解,你就離正確的道路越來越近。
最後,感謝 @fleuria 在微博和郵件里的多次幫助, @To淺墨 的 hurlex-doc 文檔,鮮染同學翻譯的 xv6 中文文檔, @郭家華 完美地解答了我一開始的疑問,讓我在內核中得以使用 C 語言。
在 #archlinuxcn 頻道里也得到了很多人的幫助。
發布於 2015-11-09
邱永臣 喜劇演員,兼開發工程師
890 人贊同
大二的時候,老師(中山大學萬海)對我們說:「如果有誰能自己寫一個內核出來,那麼,他平時可以不來聽課,也不用做平時作業,做出來還能加分,怎麼樣,有沒有人有興趣?」
和老師一番討價還價之後,我成為全年級幾百號人里唯一一個自己寫內核/整個學期都不去教室聽課/任何作業都不做的那個人(代表著我的身邊將沒有可以提供參考的人,任何資料都只能自己找)。
一開始買了《30天自製操作系統》,上面寫著需要軟盤還有其它的模擬器,我的初衷是寫一個可以燒在真機上一按開機鍵就能跑起來的那種,所以看了幾頁後就丟開了。後來又找了國人寫的一本,也不是特別符合,也丟開了。
這時我看到了那本教材(俗稱綠寶書),約莫800頁。之後的兩個星期里,我每天泡圖書館,以每小時10頁的速度讀完了它,在上面亂塗亂畫了許多標記。800頁的英文書,我從中學到了大量的基本概念(線程進程,內存演算法,定址方式等等)。
接著我尋思直接從網路上而不是從書上尋找資料,TA師兄給我提供了一個OS Development,我照著上邊的例子,寫了數以千記的匯編代碼,習得了匯編技能。
此時,我具備基本的概念知識,對程序的語言也已經理解,知道了虛擬機的調試方法,差的,就只有對內核整體是如何協作不太明白。於是我去找來老師用於教學的PintOS,找來MIT那個項目的代碼,還有國內一個高校自製的OS(是幾個研究生一起寫的),仔細研究了一遍,最後開始寫代碼。
在那個學期里,我放棄了LOL,一心看代碼,寫內核,寫各種模塊,將過程記錄在博客上,花了三個月的時間,最終寫出一個具備terminal的內核(文件系統沒寫好,時間不夠),可以跑命令,運行函數,管理內存和進程,處理中斷。
--------------------------
這個Tittle非常好,衷心希望不要因為莫須有的理由封殺。
C. 我們中國有自己電腦操作系統么使用效果如何
1、中國第抄1款操作系統 opendesktop 1.0 rc版
也是國產的第襲一個桌面操作系統,有點longhorn又有點linux風味.
(longhorn我裝過,硬體配置要求比較高,一般機器裝不來)
2、中國的第2款操作系統:銀河麒麟
我找了N久的東西,終於給我找到了,有興趣的朋友也請一並安裝測試吧~~
銀河麒麟操作系統由863軟體重大專項資助,簡稱KYLIN操作系統。KYLIN操作系統是參照UNIX操作系統國際主流標准,針對伺服器需求,設計並開發的具有自主版權的中文伺服器操作系統。它支持多種微處理器和多種計算機體系結構的,具有高性能、高可用性與高安全性,並與Linux應用二進制兼容。
2、中國的第3款操作系統:紅旗Linux
4、中國的第4款操作系統:中軟Linux。
5、中國的第5款操作系統:XteamLinux就是沖浪 。
6、第6款操作系統:Linux2005。
D. 如何編寫Linux操作系統的設備驅動程序
Linux是Unix操作系統的一種變種,在Linux下編寫驅動程序的原理和
思想完全類似於其他的Unix系統,但它dos或window環境下的驅動程序有很大的
區別.在Linux環境下設計驅動程序,思想簡潔,操作方便,功能也很強大,但是
支持函數少,只能依賴kernel中的函數,有些常用的操作要自己來編寫,而且調
試也不方便.本人這幾周來為實驗室自行研製的一塊多媒體卡編制了驅動程序,
獲得了一些經驗,願與Linux fans共享,有不當之處,請予指正.
以下的一些文字主要來源於khg,johnsonm的Write linux device driver,
Brennan's Guide to Inline Assembly,The Linux A-Z,還有清華BBS上的有關
device driver的一些資料. 這些資料有的已經過時,有的還有一些錯誤,我依
據自己的試驗結果進行了修正.
一. Linux device driver 的概念
系統調用是操作系統內核和應用程序之間的介面,設備驅動程序是操作系統
內核和機器硬體之間的介面.設備驅動程序為應用程序屏蔽了硬體的細節,這樣
在應用程序看來,硬體設備只是一個設備文件, 應用程序可以象操作普通文件
一樣對硬體設備進行操作.設備驅動程序是內核的一部分,它完成以下的功能:
1.對設備初始化和釋放.
2.把數據從內核傳送到硬體和從硬體讀取數據.
3.讀取應用程序傳送給設備文件的數據和回送應用程序請求的數據.
4.檢測和處理設備出現的錯誤.
在Linux操作系統下有兩類主要的設備文件類型,一種是字元設備,另一種是
塊設備.字元設備和塊設備的主要區別是:在對字元設備發出讀/寫請求時,實際
的硬體I/O一般就緊接著發生了,塊設備則不然,它利用一塊系統內存作緩沖區,
當用戶進程對設備請求讀/寫時,它首先察看緩沖區的內容,如果緩沖區的數據
能滿足用戶的要求,就返回請求的數據,如果不能,就調用請求函數來進行實際
的I/O操作.塊設備是主要針對磁碟等慢速設備設計的,以免耗費過多的CPU時間
來等待.
已經提到,用戶進程是通過設備文件來與實際的硬體打交道.每個設備文件都
都有其文件屬性(c/b),表示是字元設備還蔤強檣璞?另外每個文件都有兩個設
備號,第一個是主設備號,標識驅動程序,第二個是從設備號,標識使用同一個
設備驅動程序的不同的硬體設備,比如有兩個軟盤,就可以用從設備號來區分
他們.設備文件的的主設備號必須與設備驅動程序在登記時申請的主設備號
一致,否則用戶進程將無法訪問到驅動程序.
最後必須提到的是,在用戶進程調用驅動程序時,系統進入核心態,這時不再是
搶先式調度.也就是說,系統必須在你的驅動程序的子函數返回後才能進行其他
的工作.如果你的驅動程序陷入死循環,不幸的是你只有重新啟動機器了,然後就
E. 如何才能自己寫一個簡單的linux操作系統
只要你學過匯編和C,只滿足於寫個「簡單的操作系統",一兩天就能搞定。
隨便把你寫過的小程序,用直接寫硬碟軟體(或者自己編一個,調用winapi的WriteFile函數就可以),寫進硬碟/U盤引導區。記住,起始地址是7c00。
這就好了。注意,引導區只有440個位元組給你用,程序不能太大,所以這部分基本要用匯編寫。440位元組後面是硬碟/U盤分區信息,不可以亂動。亂動以後bios可能沒法識別硬碟/U盤。
引導區最後兩個位元組必須是55AA,不過一般你不用管,硬碟/U盤格式化的時候都已經給你寫好了。
這樣你的程序就在開機的時候直接運行了。
想調用大程序也沒問題,你需要寫個不超過440位元組的程序,負責把第二個扇區的內容載入內存並執行,由第二個扇區的代碼負責把所有代碼載入內存。後面的部分用C寫或者別的高級語言寫都沒什麼問題了。
至於你想要具體作什麼,就寫什麼,屏幕上畫個畫,管管硬碟上的文件,和用戶互動一下,你隨意。和你平常寫程序沒啥兩樣。總之一個能完成任務的簡單操作系統就完事了。
最多幾天時間你就能搞定。這差不多能搞個接近dos1.0的「簡單操作系統」。
不過接下來才是你真正要學的。例如文件管理,內存管理,保護模式,進程管理啥的。麻煩歸麻煩,但解放了自由了,終於可以編寫內核態才准用的代碼了,做的事情全部都是用戶態下面不讓做的事情。操作系統的學習,從這里才算真正開始。
F. 如何從零開始寫一個簡單的操作系統
題主你好,如何寫一個簡單的操作系統,不是三言兩語能夠講清楚的,也不是一兩行代碼就可完成的。
要完成一個簡單的操作系統,而不是一個裸機下列印一下hello world的引導扇區。這需要有足夠的計算機系統的知識。包括但不僅限於匯編,C和操作系統原理。
在自己寫操作系統這一領域,也有不少大作。我之前也曾拜讀過一部分,曾奉為圭臬,跟隨作者的腳步慢慢前進,但是沒多久,就做不先去了。。。
當知識經過一段時間的沉澱,在回首,曾經的大作看起來亦有不妥之處。
操作系統系統是一個復雜的技術話題,如何實現一個簡單的操作系統,樓上已有回答,題主也可讀一些大作來參考實現。
最近我發現一個不錯的公眾號,就是做自己操作系統這方面的,公眾號里的文章,試圖通過簡單的話語來闡述,那些晦澀的計算機概念。 此公眾號的作者也曾寫過一個小的內核,可以引導到shell執行。
我正在關注這個公眾號,如果題主對這個主題十分感興趣的畫,也可以關注下,我們共同進步。
公眾號:操作系統探究