這是2011/01時高等作業系統所做的期末專案:Linux多視窗系統。
現行的作業系統皆用GUI來呈現畫面,更有作業系統有多個視窗可作切換,在此利用Linux平台來簡易模擬多視窗系統的環境。
實做環境:系上主機Linux作業系統,C語言加上ncurse函式庫。

上圖為視窗安排方式,Win0到Win3為子視窗,主要視窗為Win4,主要來偵測鍵盤訊號以及子視窗的顯示。此外,我再創立四個視窗,專門來為Win0到Win3畫邊框的視窗,使得邊框獨立,不會因為子視窗更新內容而破壞邊框。
字元讀取與顯示:
敲打鍵盤後,由Win[4]接收訊號,因為關閉立即顯示模式,所以一讀到訊號後,馬上輸出到螢幕。
指令執行:
利用陣列儲存各字元,接著write()寫入管線,由另一程序read()讀取各字元,放入陣列後,執行system(),來達到目的。寫入可一次寫一整行,而讀取一次只讀一個字元,此時使用spinlock來判斷是否有字元可以讀取。
資料結構:
WINDOW *Win[5], *WinB[5], *Curwin;
//5個主視窗、5個邊框窗、目前視窗
int PidA, PidB, PidC, PidD, Pipe[8][2];
//4個子程序ID、8個管線
char Command[LINESIZE];
//命令列
演算法:
void Initial(void);//初始化環境
void CreateWindow();//創造視窗
void CreatePipe();//創造管線
void CreateProcess();//創造程序
void ManageProcess(WINDOW *Win[], int Pipe[][2]);//管理子程序
void ReadCommand(int fd, char Command[]);//讀取指令
由於時間的關係,我來不及實作subwindow,想要在按下h鍵,就能立即顯示輔助視窗,裡頭寫如何使用本系統的指令表。還有游標控制IO等,但多做了:
- 特殊架構(非老師建議之架構)
- 彩色介面
- TAB切換視窗
在實做fork()的時候,若沒有在結束前把子程序殺掉就結束掉自己程序,會因為執行exit()而把子程序交還給系統,它們就變成佔系統資源的障礙物。題外話,若特別使用此方法來產生無限多個「流浪的程序」,將使得系統負擔沉重,可謂我已經製造了「病毒」!若要殺掉流浪程序,只要打指令kill -9 -1,便會殺掉包括目前程序的所有你帳號所產生的程序,所以一按enter鍵,馬上會有訊息跳出說「Server unexpectedly closed network connection」,不知道指令怎麼用,就打「man kill」,會印出有關kill指令的用法。




隨意留個言吧:)~