« Home | Linux如何mount USB 及 CDROM » | Linux如何mount USB Flash/HDD/CDROM » | PXE + WINPE環境設定 » | OpenOffice.org note » | knoppix 3.6 安裝到HD » | Bandwidthd » 

2005/04/08 

Linux 古董?!

Linux 古董?!
完成於2005/4/8

有次看到網友下的標題,覺得很特別,就記了下來,雖然不過是十幾年前,但對Linux而言,它真的是當之無愧了。
這個古董年代並不久,只有短短的10多年(1991年9月),但在莫耳定律下算起,它已經算是非常古老了,現在拜科技之助,我們幾乎可以免費而且容易取得:linux-0.0.1.tar.gz
如果有興趣,我們可以從它的 init/main.c 之下的main()這個第一個c function讀起
為了區別,中文註解是我寫的,英文是原始檔案的一部份
void main(void) /* This really IS void, no error here. */ // LINUX 開機後的第一個C 語言程式 (不含Boot Loader) 新版kernel 改為 start_kernel()
{ /* The startup routine assumes (well, ...) this */
/*
* Interrupts are still disabled. Do necessary setups, then
* enable them
*/ // 一推kernel初始化 建議你看看各個int function的註解
time_init(); // 偷偷告訴你,只是讀CMOS時間
tty_init(); //console init
trap_init(); //系統中斷向量 init
sched_init(); // 排程
buffer_init(); // 在fs/目錄下,buffer chche處理
hd_init(); // 處理HD的中斷
sti(); //開中斷,代表進入main() 之前就已經被cli了
move_to_user_mode();
if (!fork()) { /* we count on this going ok */ // fork()如果成功,則本程式分身 去執行 init() ,本尊往下走執行 for()
init(); // 所有執行緒的爸爸 因為所有的init script , service ,shell,當然包含我們寫的hello world都至少要叫它爸或爺爺.... :p
}
/*
* NOTE!! For any other task 'pause()' would mean we have to get a
* signal to awaken, but task0 is the sole exception (see 'schedule()')
* as task 0 gets activated at every idle moment (when no other tasks
* can run). For task0 'pause()' just means we go check if some other
* task can run, and if not we return here.
*/
for(;;) pause();
}

About me

  • I'm Martin's blog 馬汀的部落格
  • From 中壢市, 桃園縣, Taiwan
  • -----BEGIN GEEK CODE BLOCK----- Version: 3.1 Comment: For info see http://www.geekcode.com GC/CS/CC/E/IT/TW d- s a C++++ L++++ P+ L++++ E--- W+++ N++ o+ K- w+++ O- M- V- PS+ PE++ Y+ PGP+ t 5- X++ R- tv- b+++ DI+ D-- G e+++ h+ r+ y+ z? ------END GEEK CODE BLOCK------ /**************************** 旅行是我生命的動力 它的樂趣從計劃旅行開始 我樂於分享旅行及Linux Kernel上的每一件事. ****************************/
My profile