HDU作業系統課程設計實驗一

2021-10-18 04:18:07 字數 2670 閱讀 4213

四、實驗核心**

這是乙個很簡單、基礎的實驗,只需要看懂原始碼,然後在原始碼中稍作修改就行。注意:編譯核心花費時間比較長,長則一天,短則2-3小時,如果用虛擬機器記得多開機器核心數目(機器核心數目越多越快,但不要超過物理機的核心數目)和記憶體(記憶體不足會導致中途編譯失敗),最好一次成功。

linux是開源作業系統,使用者可以根據自身系統需要裁剪、修改核心,定製出功能更加合適、執行效率更高的系統,因此,編譯linux核心是進行核心開發的必要基本功。

在系統中根據需要新增新的系統呼叫是修改核心的一種常用手段,通過本次實驗,讀者應理解linux系統處理系統呼叫的流程以及增加系統呼叫的方法。

1、核心修改時有自己標籤,用 dmesg驗證

2、linux核心標籤(系統啟動顯示一次)

3、顯示當前系統名稱和版本的系統呼叫

4、修改nice和prio值的系統呼叫功能

5、改變主機名稱為自定義字串的系統呼叫

找到init/main.c中的start_kernel函式,加入一句pr_notice(「學號 姓名」);//pr_notice()用來列印核心日誌,可以用dmesg命令檢視**。

1.分配系統呼叫號,修改系統呼叫表

檢視系統呼叫表(arch/x86/entry/syscalls/syscall_64.tbl),每個系統呼叫在表中佔乙個表項,其格式為《系統呼叫號》《系統呼叫名》《服務例程入口位址》,在表中為系統呼叫新增乙個系統呼叫號。

2.申明系統呼叫服務例程原型

linux系統呼叫服務例程的原型宣告在檔案linux-4.12/include/linux/syscalls.h中,可在檔案末尾新增類似asmlinkage long sys_zwhsyscall(void);的系統呼叫**。

3.實現系統呼叫服務例程

下面為新呼叫編寫服務例程,通常新增在sys.c檔案中,其完整路徑為linux-5.9.1/kernel/sys.c。具體程式設計思路可以看下面。

4.重新編譯核心

5.編寫使用者態程式測試系統呼叫

在開始完全重新編譯之前,需要用makemrproper命令清除殘留的.config和.o檔案。

執行make menuconfig命令配置核心。

核心配置完成後,執行make命令,開始編譯核心。

執行make modules命令,開始編譯模組。

執行make modules_install命令,開始安裝模組。執行make install命令,開始安裝核心。

執行update-grub2命令,自動修改grub引導程式。

執行reboot命令,重啟系統。

顯示當前系統名稱和版本的系統呼叫函式可以參考linux-5.9.1/kernel/sys.c中的newuname函式。

linux-5.9.1的newuname函式(不一定適用於其他版本)

syscall_definex型別函式的格式:syscall_definex(函式名,引數變數型別1,引數變數名1,…,…引數變數型別x,引數變數名x),系統呼叫函式的定義格式。

syscall_define1

(newuname,

struct new_utsname __user *

, name)

修改nice和prio值的系統呼叫可以通過set_user_nice()函式改變程序的nice值,從而改變prio值,實現系統呼叫的功能。

syscall_define5

(mysetnice,pid_t,pid,

int,flag,

int,nicevalue,

void __user*

,prio,

void __user*

,nice)

else

if(flag ==0)

return efault;

}

改變主機名稱為自定義字串的系統呼叫函式可以參考linux-5.9.1/kernel/sys.c中的sethostname函式。

可以用uname -n命令來檢視,修改hostname但不修改hostname的對映可能會導致shell命令使用警告(不影響使用),重啟(hostname會改為預設值)或新增對映,即可解決。

linux-5.9.1的sethostname函式(不一定適用於其他版本)

syscall_define2

(sethostname,

char __user *

, name,

int, len)

return errno;

}

sys.c:系統呼叫函式**。

mychangename.c:測試mychangename的系統呼叫,功能是改變主機名稱為自定義字串的系統呼叫。

mysetnice.c:測試mysetnice系統呼叫的程式,功能是修改nice和prio值的系統呼叫功能。

myshowname.c:測試myshowname系統呼叫的程式,功能是顯示當前系統名稱和版本的系統呼叫。

完整**詳見:hdu-operation-system-course-design-code/實驗一/

作業系統課程設計

實驗 一 程序管理與程序同步 實驗目的 了解程序管理的實現方法,理解和掌握處理程序同步問題的方法並完成程式設計。實驗內容 實現銀行家演算法 程序排程的過程模擬。實驗步驟 理解銀行家演算法的核心機制 設計相應資料結構 程式設計實現 測試。理解程序的三狀態排程過程 設計排程演算法 程式設計實現 測試。實...

作業系統課程設計

1 實驗內容 學習程序管理的設計與實現,學習和運用作業系統原理,設計乙個作業系統子系統的模擬系統。通過該系統的設計除錯可增加對作業系統實現的感知性。設計乙個允許n個程序併發執行的程序管理的模擬系統。該系統包括簡單的程序控制 同步及通訊機構,其程序排程演算法可任意選擇。分析系統所需的資料結構 演算法的...

作業系統課程設計 模擬作業系統

程序管理主要包括程序排程,程序的建立和撤銷 程序的阻塞和喚醒,中斷作用的實現。用全域性變數模擬重要暫存器,如cpu重要暫存器,程式狀態暫存器psw 指令暫存器ir,程式計數器pc,資料緩衝暫存器dr等。中斷的發現應該是硬體的工作,這裡在函式cpu中加檢測psw的方式來模擬。在cpu 函式中,每執行一...