編寫實模式多工作業系統模型之(6)

2021-04-02 06:13:53 字數 1239 閱讀 7856

自己動手增加乙個新程序

如果使用者想自己動手增加乙個新的程序,如名為task4的程序,須在kernel.a**程式中做如下幾處修改:

1.將maxtasks的值定義為4。

2.在程式中增加乙個入口位址為task4的一段**,功能上應為一段無限迴圈的、有動態資訊輸出的程式,如乙個字元在螢幕的某行上反覆滾動顯示。程式不要用iret指令,否則會破壞排程程式為該程序在其堆疊內設定的排程資訊。

3.在task3初始化之後,呼叫taskinit過程,為增加的新程序初始化,此時應將task4的入口偏移量送入ax, 即mov ax, task4。

4.將修改後的程式編譯執行。

編譯及安裝執行

這兩個程式在linux 下採用na**進行編譯,編譯為純二進位制檔案,即記憶體映像程式,編譯方法如下:

1.編譯boot.a** 為boot.o

# na** boot.a** -o boot.o -f bin

2.編譯kernel.a** 為kernel.o

# na** kernel.a** -o kernel.o -f bin

3.將boot.o寫入軟盤引導扇區

# dd if=./boot.o of=/dev/fd0 bs=512 count=1

4.將kernel.o寫入軟盤0頭0道2扇區

# dd if=./kernel.o of=/dev/fd0 bs=512  count=2  seek=1

5.用該軟盤引導機器

螢幕上將依次顯示如下資訊:

system bootup ...

loading kernel ...

清屏後,在螢幕左側有3個動態的計數器在不斷顯示,它們分別由kernel所排程的3個程序產生。若敲擊鍵盤則螢幕上將顯示鍵盤鍵入的字元。

此程式在以intel celeron 433 為cpu的pc機除錯成功。在除錯時需要在dos環境下檢查一下機器的定時器中斷的入口位址是否為0xf000:0xfea5,若不是,則需要修改kernel.a**中的scheduler內的call 0xf000:0xfea5這條呼叫指令,使呼叫的入口位址為機器的實際定時器中斷的入口位址。

這個實驗性的作業系統模型功能較為簡單,但已經具備了作業系統程序切換的完整功能,具備了多程序並行執行的特點,感興趣的讀者可以在此基礎上進一步開發,使其功能進一步完善。

編寫實模式多工作業系統模型之(1)

作業系統是計算機軟體系統的重要組成部分,它起著管理計算機軟硬體資源 控制計算機的正常執行及為各類使用者提供使用介面等諸多功能,是其它各類應用軟體賴以存在的基礎。由於作業系統軟體多數以公司模式集體開發,並以成品軟體的形式進行發售,使得使用者只能侷限於作業系統所提供的使用介面及系統功能呼叫上,對於系統底...

多工作業系統

單使用者單任務作業系統是指一台計算機同時只能有乙個使用者在使用,該使用者一次只能提交乙個作業,乙個使用者獨自享用系統的全部硬體和軟體資源。多使用者與多工作業系統是指一台計算機可以同時有多個使用者同時使用,並且同時可以執行由多個使用者提交的多個任務。windows多工處理採用的是虛擬機器技術,為每乙個...

多工作業系統的任務切換

在學習os時,對於多工作業系統的任務切換,一直不能理解 控制權是怎麼麼回到排程程式上的?記得在描述任務切換時,一般都是這麼描述的 在每乙個時鐘滴答,都將檢查當前程序是否是乙個運 行超過100毫秒的使用者程序。如果是,則呼叫排程程式來檢視是否有另乙個使用者程序在等待cpu,我這裡舉個例子 我用 寫了乙...