国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 操作系統(tǒng) > 正文

x01.os.14: 時間都去哪兒了

2024-06-28 13:23:21
字體:
供稿:網(wǎng)友
x01.os.14: 時間都去哪兒了

時間都去哪兒了

老帕的“花兒為什么這樣紅”,三分鐘引起六次歡呼,卻敗給了張碧晨。試想一下,如果是人氣更高的陳冰,即使唱得和張碧晨一模一樣,可能仍然不敵老帕,為什么張碧晨就能取勝呢?有這么個笑話:一人彈琴無人聽,但一老婦人聽得卻潸然淚下。原來她的亡夫是彈棉花的!這雖是個笑話,卻一語道破玄機(jī)。歌聲動人,除了唱功,還有感情因素在里面。假如老帕的”花兒為什么這樣紅“是 1 分, 那么,張碧晨的父女情為 1 分, ”時間都去哪兒了“為 1 分。2 : 1, 張碧晨勝出也就理所當(dāng)然了。

shell 的實現(xiàn)

在自己的 os 中運行自己的程序 echo,實現(xiàn)起來,比想象的要簡單一些。這得益于文件系統(tǒng)的支持。準(zhǔn)備工作,參見 x01.os.7。源代碼,可到 x01.Lab.Download 中下載 x01.os.13.tar.gz。解壓后由終端進(jìn)入,make 后 bochs 可看到如下界面:

看來,echo 程序運行的還不錯。首先,來看看 echo 程序,代碼如下:

 1 #include "kstd.h" 2  3 int main(int argc, char* argv[]) { 4     int i; 5     for (i = 1; i < argc; i++) { 6         PRintf("%s%s", i == 1 ? "" : " ", argv[i]); 7     } 8     printf("/n"); 9     return 0;10 }

非常簡單,但這個 main 函數(shù)已經(jīng)不是我們平時看到的那個了。它要在我們自己的 os 中運行,還需要 start.s 的幫忙,代碼如下:

 1 extern main 2 extern exit 3  4 bits 32 5  6 [section .text] 7 global   _start 8  9 _start:10         push        eax11         push        ecx12         call            main13         push        eax14         call            exit15         hlt

這個 _start 是關(guān)鍵,與 kernnel.s 中的一致。那么,怎么在我們自己的 os 中運行呢?在 mm.c => MM_Exec() 函數(shù)中,有這么一句:

g_ProcTable[src].Regs.eip = elf_hdr->e_entry;

echo 的 entry point,正是由這句完成交接。簡單而言,就是 fork 一個 Init 的子進(jìn)程,然后在 shell 中替換為我們自己的程序如 echo。

學(xué)習(xí)操作系統(tǒng),如果腦海里有個內(nèi)存布局,將會事半功倍。為了計算 10 進(jìn)制到 16 進(jìn)制的轉(zhuǎn)換,順手寫了個 hex 程序。但要把它運行在自己的 os 中,卻又有許多工作要做,作罷。

一個完善的 os,非一人之力,非一時之功。除了大家共同努力,難道還有別的辦法嗎?


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 会东县| 平谷区| 疏勒县| 托里县| 勐海县| 深泽县| 新干县| 朝阳市| 航空| 潢川县| 龙陵县| 贺州市| 湘潭县| 莆田市| 广饶县| 沂源县| 江都市| 寻乌县| 凤凰县| 富蕴县| 双鸭山市| 广昌县| 塘沽区| 六枝特区| 兴业县| 富平县| 永宁县| 遵化市| 威海市| 云安县| 江源县| 海安县| 皋兰县| 芮城县| 恩平市| 崇阳县| 大英县| 荆门市| 赤峰市| 故城县| 丰镇市|