丁喬
摘 要: 為了擴大操作系統(tǒng)的功能以及學(xué)習(xí)由Linux系統(tǒng)提供的系統(tǒng)調(diào)用,可以在內(nèi)核中增加系統(tǒng)調(diào)用。運用Linux操作系統(tǒng),VMware Workstation和Ubuntu達到我們的目的。獲得Linux內(nèi)核源代碼,配置、編譯和安裝內(nèi)核二進制并且將一個新條目添加到一組可引導(dǎo)的內(nèi)核來構(gòu)建一個新的內(nèi)核。接下來的工作是擴展內(nèi)核源代碼,將系統(tǒng)調(diào)用增加到內(nèi)核中,其中一個是打印功能,另一個是函數(shù)返回系統(tǒng)數(shù)據(jù)和時間功能。最后,我們將在用戶程序中完成系統(tǒng)調(diào)用。
關(guān)鍵詞:Linux 操作系統(tǒng) 系統(tǒng)調(diào)用 內(nèi)核
中圖分類號:TP399 文獻標識碼:A 文章編號:1003-9082(2016)12-0001-02
一、Linux和系統(tǒng)調(diào)用
1. Linux介紹
Linux操作系統(tǒng)是UNIX操作系統(tǒng)的一種克隆系統(tǒng),現(xiàn)已成為世界上使用最多的UNIX類操作系統(tǒng)。Linux可免費使用和自由傳播,是一個基于POSIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。它能運行UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議,支持32位和64位硬件并且繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計思想,是一個性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。
Linux聞名于它的高效性和靈活性,Linux模塊化處理它的設(shè)計結(jié)構(gòu),使它不僅能在昂貴的工作站上運行,還能在廉價的PC機上體現(xiàn)Unix的全部特性,具有多任務(wù)、多用戶的能力。[1]
操作系統(tǒng)的功能在于管理硬件資源和為應(yīng)用程序開發(fā)人員提供良好的環(huán)境來使應(yīng)用程序具備更突出的兼容性,內(nèi)核提供一系列具備預(yù)定功能的多內(nèi)核函數(shù),通過一組系統(tǒng)調(diào)用的接口呈現(xiàn)給用戶。系統(tǒng)調(diào)用將應(yīng)用程序的需求傳送給內(nèi)核,調(diào)用相對應(yīng)的的內(nèi)核函數(shù)完成需要的處理,將結(jié)果返回給應(yīng)用程序。[2]
2.系統(tǒng)調(diào)用介紹
系統(tǒng)調(diào)用出現(xiàn)過程調(diào)用用戶程序,但導(dǎo)致執(zhí)行上下文的變化和特權(quán)。用戶模式和過程調(diào)用系統(tǒng)調(diào)用有一些差異和相似之處。
2.1用戶模式過程調(diào)用
2.1.1將參數(shù)傳遞給被調(diào)用的堆?;蚣拇嫫魃希?/p>
2.1.2保存當(dāng)前狀態(tài)和PC,并跳到被調(diào)用的過程;
2.1.3特權(quán)是相同的。
2.2系統(tǒng)調(diào)用
2.2.1系統(tǒng)調(diào)用是對用戶程序的調(diào)用,但是會導(dǎo)致執(zhí)行上下文和特權(quán)的變化。在英特爾386,系統(tǒng)調(diào)用是通過存儲系統(tǒng)調(diào)用數(shù)字到EAX寄存器來完成的,比如在其他寄存器中向系統(tǒng)調(diào)用存儲參數(shù)(如EBX,ECX,EDX,ESI),或執(zhí)行指令的陷阱。(INT 0x80指令)。
2.2.2在計算中,系統(tǒng)調(diào)用是一個計算機程序的編程方式來請求執(zhí)行在操作系統(tǒng)上的內(nèi)核。這可能包括硬件相關(guān)服務(wù),創(chuàng)建和執(zhí)行新的流程和溝通與整體內(nèi)核進程調(diào)度等服務(wù)。系統(tǒng)調(diào)用提供了一個基本流程和操作系統(tǒng)之間的接口。在大多數(shù)系統(tǒng)中,系統(tǒng)調(diào)用可能只在用戶空間進程中實現(xiàn),而在其他一些系統(tǒng)中,例如繼任者,特權(quán)系統(tǒng)代碼也可以實現(xiàn)系統(tǒng)調(diào)用。
2.3系統(tǒng)調(diào)用執(zhí)行
2.3.1在陷阱之后,系統(tǒng)調(diào)用表用于索引代碼指針來為處理器標志起始地址。
2.3.2 2system_call()函數(shù)將比較系統(tǒng)調(diào)用號和NR_syscalls之間的價值。
2.3.3如果相比下來該值更大或相等,便回到ENOSYS。如果小,執(zhí)行call* sys_call_table(% eax,4),并跳轉(zhuǎn)到處理程序;
2.3.4特權(quán)在用戶和內(nèi)核模式之間轉(zhuǎn)化,內(nèi)核代碼執(zhí)行請求的服務(wù):
I/O交互過程管理其他活動無法在用戶模式下執(zhí)行
二、在內(nèi)核中增加系統(tǒng)調(diào)用
1.打印功能
1.1查看內(nèi)核版本
Sudo是一種常用的在Linux下允許普通用戶使用超級用戶權(quán)限的工具,允許系統(tǒng)管理員讓普通用戶執(zhí)行一些或所有的根命令。這不僅可以減少根用戶登錄和管理的時間,也提高了安全性。
1.2輸入/usr/SRC查看活躍文件是否存在
1.3檢查源文件中的版本號
apt-cache是一個屬于Linux的恰當(dāng)?shù)陌芾砉ぞ撸梢圆樵兦‘?dāng)?shù)亩M制包緩存文件。Apt-cache通過不同的參數(shù)和子命令來顯示包、包的依賴關(guān)系和有關(guān)其他功能的信息。
1.4搜索版本信息,修正、同時更新版本。
1.5創(chuàng)建的文件“helloworld.c”
保存和退出
1.6創(chuàng)建“Makefile文件和進口
1.7編譯
出現(xiàn)以上信息,這表明編譯成功。
1.8 insmod模塊并檢查它
1.8.1這個系統(tǒng)調(diào)用(sys_init_module時)分配內(nèi)核內(nèi)存到相應(yīng)的模塊, 這個內(nèi)存分配操作是通過vmallo.c years來獲得
1.8.2然后將內(nèi)容復(fù)制到這個模塊的存儲空間;
1.8.3內(nèi)核申報模塊的引用
1.8.4初始化模塊調(diào)用涵數(shù)
Hello World已經(jīng)寫在“syslog”
2.函數(shù)返回系統(tǒng)時間和日期
2.1檢查當(dāng)前系統(tǒng)內(nèi)核啟動項
2.2修改文件/usr/src/linux-source-/kernel/sys.c
2.3附加/usr/src/linux-/arch/x86/include/asm/unistd_32.h:#define__NR_mycall 337
2.4編譯內(nèi)核
2.4.1讓mrproper消除不穩(wěn)定的內(nèi)核對象文件,附件,和內(nèi)核配置文件
2.4.2使清潔:清除用于生成目標文件和其他文件
2.4.3讓oldconfig使用默認內(nèi)核配置
2.4.4使bzImage:編譯內(nèi)核
2.4.5讓模塊:編譯模塊
2.4.6 modules_install安裝模塊
2.4.7開始使用最新的項目
2.4.8增加啟動菜單項, 配置啟動文件/boot/grub/grub.cfg
2.4.9測試程序
三、結(jié)論
這個實驗的內(nèi)容涉及到Linux系統(tǒng)調(diào)用。也就是說,應(yīng)用程序的操作系統(tǒng)和內(nèi)核提供了一組接口。通過此接口,應(yīng)用程序可以被轉(zhuǎn)換到內(nèi)核狀態(tài),并調(diào)用相應(yīng)的的內(nèi)核函數(shù),從而實現(xiàn)應(yīng)用程序之間的交互和系統(tǒng)內(nèi)核。
本文提出,任務(wù)指標應(yīng)該向Linux內(nèi)核中增加兩個系統(tǒng)調(diào)用。程序執(zhí)行系統(tǒng)調(diào)用可以在以下步驟中運行。程序調(diào)用libc庫包函數(shù)。然后調(diào)用軟中斷0 x80 int到內(nèi)核。內(nèi)核首先實現(xiàn)system_call函數(shù)(首先系統(tǒng)調(diào)用號(eax)和CPU寄存器可以使用和保存到對應(yīng)的堆棧(由SAVE_ALL完成)。之后,在系統(tǒng)調(diào)用表中找到對應(yīng)的系統(tǒng)調(diào)用服務(wù)例程根據(jù)系統(tǒng)調(diào)用號。
在時代下的Windows操作系統(tǒng),許多底層的東西都被掩蓋了。感謝我們的Linux讓我們更深入理解操作系統(tǒng)以及與操作系統(tǒng)相關(guān)的各個方面。同時,也是一個很好的機會讓我們學(xué)會操作系統(tǒng)的系統(tǒng)調(diào)用。
參考文獻
[1]Linux系統(tǒng),2016-11-1取自http://baike.so.com/doc/5349227-5584683.html
[2]系統(tǒng)調(diào)用,2016-10-29取自http://baike.so.com/doc/5715175-5927901.html
[3]"The Linux Foundation Releases Linux Development Report". Linux Foundation. 18 February 2015. Retrieved 20 February 2015.