作業系統介面
作業系統與核心(operating system and kernel)
想像一棟繁忙的辦公大樓,裡面有上百人共用同一台印表機、同一批會議室、同一道大門。如果每個人都直接去搶硬體,那會一團亂。於是大樓僱了一位管理員,由他擁有所有共用設備、公平地分配出去,並阻止人們闖進別人的辦公室。在電腦裡,這位管理員就是作業系統,而它那個嚴格、永遠運作的核心部分,就是核心(kernel)。
更精確地說:作業系統是讓你的機器運轉的一大堆軟體——核心,再加上外圍的命令殼層、系統服務與標準工具程式。核心則是開機時被載入、一直執行到關機才停下的中央程式。它是唯一被允許直接碰觸硬體的軟體:它決定下一個在 CPU 上執行的程式是誰、分配記憶體、讀寫磁碟、在網路上搬移資料。一般程式無法自己做這些事;它們必須請核心代為執行。
為何這個區分重要:因為核心是通往硬體的守門員,程式做的每一件有趣的事——印到螢幕、開啟檔案、與網路通訊——最終都變成一個對核心的請求。理解系統程式設計,很大一部分就是理解這條界線:程式能自己做什麼,又有什麼必須去拜託核心。人們常說「作業系統(OS)」時其實是指「核心」;核心是擁有特權的中心部分,而「作業系統」則是包含那些非特權部分在內的整套東西。
當你的程式呼叫 printf("hi\n") 時,那段文字不會憑空出現在螢幕上。C 函式庫最終會透過 write() 請核心把那些位元組送到終端機的輸出。你的程式自己從不碰螢幕硬體——是核心去碰的。
程式想做的每一個硬體動作,最後都會變成對核心的一個請求。
「核心」與「作業系統」並非完全同義:核心是擁有特權的中心,作業系統則是整個套件(核心加上殼層、函式庫與服務)。說「作業系統開了這個檔」其實是指「核心代表作業系統做了這件事」。
又称
另见