一、
實驗目的
學習linux核心的系統呼叫,理解、掌握linux系統呼叫的實現框架、使用者介面、引數傳遞、進入/返回過程。閱讀linux核心源**,通過新增乙個簡單的系統呼叫實驗,進一步理解linux作業系統處理系統呼叫的統一流程。
二、
實驗內容1.
2.系統呼叫的功能是將自己的名字和學號在終端或核心日誌裡顯示出來(printk)
3.重新編譯核心 4.
編寫使用者態程式,呼叫前面自己所加入的系統呼叫,執行輸出,輸出結果
三、
實驗儀器裝置
linux
環境:centos_6.5,核心3.16.3
待編譯的核心:linux3.16.3
四、
實驗步驟1.
此步已經在實驗一中完成。 2.
修改核心的系統呼叫庫函式
a.centos6.5(
可不用修改)
在/usr/include/asm-generic/unist.h檔案中修改
b.核心3.16.3(要修改)
# cd /usr/src/kernels/linux-3.16.3/
進入已經解壓的目錄,之後終端介面一直停留在這個目錄。
#vimusr/include/asm/unistd_64.h由於是64位的作業系統,故選擇進入unistd_64.h進行編輯。如果是32位的作業系統,就選擇對unistd_32.h進行編輯。新增系統呼叫號#define __nr_name ×××,其中,name為你要新增的名稱,×××為系統呼叫號,此時要注意不同版本的核心版本呼叫號不一樣,可以根據核心版本不同對系統呼叫號進行修改,系統呼叫號應該是沒有用過的,如下圖所示:
3.在系統呼叫表中新增或修改相應表項
系統呼叫處理程式(system_call)會根據eax中的索引到系統呼叫表(sys_call_table)中尋找相應的表項。所以,我們必須在那裡新增我們自己的乙個值。在3.16.3的核心中,只需要修改arch/x86/syscalls/syscall_64.tbl。注意,32位機選擇syscall_32.tbl檔案。#vimarch/x86/syscalls/syscall_64.tbl進入檔案:
注意,為選擇的系統呼叫號,為要進入的系統呼叫函式。修改如下:
到現在為止,系統已經能夠正確地找到並且呼叫sys_rksyscall。剩下的就只有一件事情,那就是sys_rksyscal的實現。
4.sys_rksyscal
的實現
我們把一小段程式新增在kernel/sys.c裡面。在這裡,我們並沒有在kernel目錄下另外新增自己的乙個檔案,這樣做的目的是為了簡單,而且不用修改makefile,省去不必要的麻煩。
#vimkernel/sys.c進入sys.c檔案進行修改,修改如下:
5.重新編譯核心
一定要重新編譯核心。核心編譯完成後,重新啟動編譯後的新核心。 6.
編寫使用者態程式
要測試新新增的系統呼叫,需要編寫乙個使用者態測試程式(test.c)呼叫mysyscall系統呼叫。mysyscall系統呼叫中printk函式輸出的資訊在/var/log/message檔案中。也可以在shell下用dmesg命令檢視。使用者態測試程式實現如下:
編譯程式
#./test執行程式
#dmesg檢視日誌,截圖如下:
一、
實驗問題
1) 詳細描述完成整個任務遇到的問題和解決問題的方法;
重點解決上述要注意的問題。
2) 回答問題:「什麼是作業系統的系統呼叫(system call)?系統呼叫過多會引起程序的效能開銷麼?為什麼?」
linux
核心中設定了一組用於實現各種系統功能的子程式,稱為系統呼叫。使用者可以通過系統呼叫命令在自己的應用程式中呼叫它們。從某種角度來看,系統呼叫和普通的函式呼叫非常相似。區別僅僅在於,系統呼叫由作業系統核心提供,執行於核心態;而普通的函式呼叫由函式庫或使用者自己提供,執行於使用者態。
系統呼叫過多會引起程序的效能開銷,因為
系統呼叫需要從使用者空間陷入核心空間,處理完後,又需要返回使用者空間。其中除了系統呼叫服務例程的實際耗時外,陷入/返回過程和系統呼叫處理程式(查系統呼叫表、儲存\恢復使用者現場)也需要花銷一些時間,這些時間加起來就是乙個系統呼叫的響應速度。系統呼叫不比別的使用者程式,它對效能要求很苛刻,因為它需要陷入核心執行,所以和其他核心程式一樣要求**簡潔、執行迅速。
作業系統 系統呼叫
由作業系統提供的功能,通常應用程式本身是無法實現的。例如對檔案進行操作,應用程式必需通過系統呼叫才能做到,因為只有作業系統才具有直接管理外圍裝置的許可權。又如程序或執行緒間的同步互斥操作,也必需經由作業系統對核心變數進行維護才能完成。從下到上看乙個完整的計算機系統 物理硬體 os核心 os服務 應用...
作業系統課程設計 模擬作業系統
程序管理主要包括程序排程,程序的建立和撤銷 程序的阻塞和喚醒,中斷作用的實現。用全域性變數模擬重要暫存器,如cpu重要暫存器,程式狀態暫存器psw 指令暫存器ir,程式計數器pc,資料緩衝暫存器dr等。中斷的發現應該是硬體的工作,這裡在函式cpu中加檢測psw的方式來模擬。在cpu 函式中,每執行一...
作業系統(六)系統呼叫
在前幾篇文章中曾經提到過系統呼叫程式介面,並提到系統呼叫使應用程式請求作業系統服務的唯一方式。下面再來更進一步地學習一下。目錄 1.6 系統呼叫 1.6.1 系統呼叫 1.6.2 系統呼叫的具體使用場景 1.6.3 系統呼叫的過程 系統呼叫 是作業系統提供給應用程式 程式設計師 程式設計人員 使用的...