国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于真實硬件的操作系統(tǒng)安全實驗設(shè)計

2024-06-03 11:35:25陳波何玲娜韓姍姍
中國信息技術(shù)教育 2024年10期
關(guān)鍵詞:實驗教學(xué)

陳波 何玲娜 韓姍姍

摘要:本文探索了基于開源硬件,教授低級安全概念的相關(guān)方法,包括與構(gòu)建實踐學(xué)習(xí)環(huán)境相關(guān)的嘗試,并對嵌入式內(nèi)核進行擴充,引導(dǎo)學(xué)生深入了解支持樹莓派3B+上的系統(tǒng)調(diào)用和內(nèi)存保護,且設(shè)計的作業(yè)旨在幫助學(xué)生深入了解復(fù)雜的硬件細節(jié)。最終教學(xué)結(jié)果表明,基于真實硬件設(shè)計操作系統(tǒng)安全實驗,提供了一種培養(yǎng)學(xué)生分析和解決較復(fù)雜問題的有效方法。

關(guān)鍵詞:操作系統(tǒng)安全;開源硬件;實驗教學(xué)

中圖分類號:G434? 文獻標識碼:A? 論文編號:1674-2117(2024)10-0090-05

引言

在硬件課程的教學(xué)中,真實硬件上的操作能夠激發(fā)學(xué)生的好奇心,增強學(xué)生的成就感和參與度。然而,硬件課程對教室、教師、物料有著較高的要求,如在教授操作系統(tǒng)和計算機安全等課程時,由于商用操作系統(tǒng)的龐大,學(xué)生的學(xué)習(xí)范圍被限制為單個組件或子組件,無法合理地呈現(xiàn)基于硬件的設(shè)計決策,而使用教學(xué)操作系統(tǒng)——用于觀察和開發(fā)操作系統(tǒng)的組件則可以有效解決這一問題。因此,筆者嘗試在操作系統(tǒng)安全課中引入嵌入式Xinu操作系統(tǒng),并設(shè)計了系統(tǒng)服務(wù)及內(nèi)存保護相關(guān)作業(yè)。

背景

嵌入式Xinu操作系統(tǒng)源自Xinu,其中心目標之一是讓學(xué)生接觸真實的硬件?,F(xiàn)有嵌入式Xinu移植已用于嵌入式系統(tǒng)課程的教學(xué),如移植到樹莓派3B+上,允許硬件系統(tǒng)和操作系統(tǒng)課程提供多核執(zhí)行的實踐實驗,但對操作系統(tǒng)安全方面的關(guān)注較少,沒有實施明確的安全設(shè)施。

那么,如何設(shè)計一個操作系統(tǒng),讓它既能監(jiān)督特權(quán)執(zhí)行又能安全地操作用戶線程?系統(tǒng)服務(wù)調(diào)用(Supervisor call,SVC)提供了此功能。SVC調(diào)用是非特權(quán)線程臨時訪問特權(quán)操作系統(tǒng)資源的接口。在arm架構(gòu)上,系統(tǒng)模式功能強大,而用戶模式受到限制,SVC在稱為Supervisor模式的特權(quán)環(huán)境中執(zhí)行。一般情況下,該模式具有與系統(tǒng)相同的高權(quán)限模式,而如修改CPU寄存器的指令,只能從特權(quán)模式訪問。一個簡單的操作系統(tǒng)(如教育操作系統(tǒng))可能只包含幾個SVC應(yīng)用程序,生產(chǎn)操作系統(tǒng)則提供更多保護,但復(fù)雜度高。

嵌入式Xinu操作系統(tǒng)依賴GNU交叉編譯器(GCC)來轉(zhuǎn)換主要用C語言編寫的內(nèi)核源代碼到一系列目標文件。這些目標文件鏈接在一起以創(chuàng)建可傳輸?shù)淖罱K可執(zhí)行操作系統(tǒng)映像到受支持的機器上并運行。GCC等編譯器有一組可用的優(yōu)化選項,常見的優(yōu)化程序的好處包括:更小的代碼大小、更快的程序執(zhí)行,且采用更少的分支(執(zhí)行指令重新排序,在當前位置繼續(xù)執(zhí)行,而不是跳轉(zhuǎn)到內(nèi)存中較遠的空間)。

系統(tǒng)服務(wù)調(diào)用SVC

筆者認為,學(xué)生應(yīng)嘗試硬件提供的保護設(shè)施,如基于模式的保護。一個處理器的執(zhí)行模式定義了其當前狀態(tài),即它將用于執(zhí)行svc等指令的方法。樹莓派3B+的CPU有七種執(zhí)行模式:系統(tǒng)模式、用戶模式、管理員模式、中止模式、快速中斷請求(FIQ)模式、中斷請求(IRQ)模式、未定義模式。

在嵌入式系統(tǒng)課程中教授Embedded Xinu時,系統(tǒng)僅在System模式、IRQ模式或FIQ模式下執(zhí)行。系統(tǒng)模式是特權(quán)模式,所有指令在此模式下均有效。對所有基本執(zhí)行使用系統(tǒng)模式提供了優(yōu)雅的設(shè)計,但是內(nèi)置硬件安全設(shè)施未使用。當處理器在User模式下執(zhí)行時,特權(quán)指令變得未定義。因為Pi 3B+的SoC沒有公開可用的文檔,很難準確確定哪些指令被認為是特權(quán)的,以及哪些在用戶模式下可用。

Supervisor模式與系統(tǒng)模式一樣,是一種特權(quán)模式,但它是一種異常模式,而系統(tǒng)模式不是。因此,要進入超級用戶模式(或任何異常模式),處理器生成一個異常,該異常被Xinu的異常處理程序捕獲。

管理員模式有自己的存儲堆棧指針(一個跟蹤運行時堆棧的寄存器)和鏈接寄存器(一個保存當前執(zhí)行的函數(shù)完成時返回的指令地址的寄存器)。根據(jù)ARM調(diào)用約定,寄存器r0-r3在函數(shù)調(diào)用時被壓入堆棧。當處理Supervisor模式異常時,使用其各自的堆棧來保存這些參數(shù)是有益的。因此,它的堆棧是在引導(dǎo)加載程序中初始化的。

當樹莓派上電后,內(nèi)核的bootloader會執(zhí)行初始化步驟,如為每種潛在的執(zhí)行模式準備堆棧內(nèi)存。當處理Supervisor等異常時,平臺要求相應(yīng)的堆棧根據(jù)ARM過程調(diào)用標準進行8字節(jié)對齊。在開始執(zhí)行由異常處理程序分支到的函數(shù)(如處理程序例程)之后,模式切換意味著堆棧指針已更新。

雖然樹莓派3B+配備了四核處理器,但本課程使另外三個核心處于禁用狀態(tài)。當不存在多核并發(fā)問題時,擴展內(nèi)核變得更加簡單。這對開發(fā)者有利,因為消除了對有關(guān)跨內(nèi)核的系統(tǒng)調(diào)用的探索。這一決定也符合Xinu作為教學(xué)工具的用途。學(xué)生不必因與新硬件細節(jié)一起引入的多核系統(tǒng)而不知所措。

在嵌入式Xinu加載Null線程后,處理器仍處于系統(tǒng)模式(如圖1)。 接下來是一些關(guān)鍵的初始化步驟。為了在網(wǎng)絡(luò)傳輸后執(zhí)行內(nèi)核,必須首先初始化以太網(wǎng)設(shè)備,而樹莓派平臺的一個特點是網(wǎng)絡(luò)通信通過USB設(shè)備進行,所以,首先要啟用USB子系統(tǒng)。USB傳輸需要啟用中斷,因此整個過程在系統(tǒng)模式下進行。為了保持簡單性,在主線程開始執(zhí)行之前盡可能晚地進入用戶模式。

SVC接口或系統(tǒng)調(diào)用接口是一種抽象,允許在非特權(quán)模式下運行的處理器安全地執(zhí)行特權(quán)指令并返回到正常執(zhí)行。圖2顯示了getcpuid()的系統(tǒng)調(diào)用序列,該函數(shù)返回當前處理器核心的數(shù)字標識。

svc指令是32位arm狀態(tài)指令集和16位thumb指令集的一部分。為了區(qū)分所提供的內(nèi)核服務(wù),每個svc編號在頭文件include/svc.h中唯一定義。

在使用USB(通用串行總線)設(shè)備等板載設(shè)備的嵌入式操作系統(tǒng)上,必須采用一種機制來促進操作系統(tǒng)和設(shè)備之間的通信。對于許多設(shè)備來說,中斷請求線是必要的通信媒介。在初始化后,操作系統(tǒng)將對與其連接的每個設(shè)備啟用請求線。在此工作之前,Xinu內(nèi)核為許多設(shè)備啟用了中斷。最值得注意的是UART(通用異步接收器-發(fā)送器)和USB。UART中斷允許接收器傳輸數(shù)據(jù),這對于獲取輸入的系統(tǒng)函數(shù)非常有用,如getc()。但是,如果沒有啟用中斷,用戶模式函數(shù)將無法獲取輸入。

如圖1所示,關(guān)鍵初始化序列可能發(fā)生在System模式。但是,當?shù)谝淮螐挠脩裟J竭M行上下文切換時,更新CPSR中斷位的msr(從寄存器傳送到狀態(tài))指令未定義,這是因為如果不訪問該指令,就無法在啟用中斷的情況下啟動新線程。筆者試圖通過從上下文切換例程發(fā)出svc指令來回避這個問題,隨后,在更改SVC處理程序中的SPSR后,啟用中斷。然而,從svc返回后,系統(tǒng)定時器立即中斷了上下文切換代碼。在當前狀態(tài)下,時鐘處理程序(在系統(tǒng)定時器中斷后調(diào)用)無法在用戶模式下執(zhí)行。最后,為了節(jié)省時間和簡單便捷,不需要啟動中斷來實現(xiàn)預(yù)期目標。

本節(jié)中設(shè)置的作業(yè)涉及ARM編程和更高級的C編程,允許更多的編程自由。這樣就為學(xué)生提供了一個啟動到用戶模式的內(nèi)核,但尚未在引導(dǎo)加載程序中初始化Supervisor模式堆棧。他們的任務(wù)是:①建立Supervisor模式堆棧;

②實現(xiàn)create()的系統(tǒng)調(diào)用。這個功能接受可變數(shù)量的參數(shù),使其API和調(diào)度案例寫起來更有挑戰(zhàn)性。

在學(xué)生不知道將要測試的參數(shù)數(shù)量的情況下,教師可以要求他們編寫一個優(yōu)雅的C實現(xiàn)才能獲得滿分。此作業(yè)的書面測試用例可能包括準備創(chuàng)建執(zhí)行參數(shù)檢查的線程。

內(nèi)存保護

內(nèi)存管理單元(MMU)是一個功能單元,負責(zé)監(jiān)督處理器對可用物理內(nèi)存的使用。因此,可以配置內(nèi)存管理單元來實現(xiàn)內(nèi)存保護,緩存是處理器之間的中介和物理內(nèi)存。對于支持緩存的單元,標記為可緩存的區(qū)域相應(yīng)地保存在翻譯后備緩沖區(qū)(TLB)中。

處理器請求的內(nèi)存地址首先由MMU檢查以確保其有效。為了實現(xiàn)這一點,MMU檢查存儲在硬件寄存器中的信息,其中包含給定區(qū)域的讀寫權(quán)限。在確定地址可訪問后,進行地址轉(zhuǎn)換。這些翻譯存儲在TLB中,因此MMU只需引用此翻譯并抓取相應(yīng)的物理內(nèi)存地址。對于store操作,內(nèi)存系統(tǒng)不需要返回值。如果執(zhí)行l(wèi)oad,請求將被更新以包含位于物理地址的值,并將其發(fā)送回請求者。

樹莓派3B+支持兩種虛擬內(nèi)存系統(tǒng)選項——MMU和內(nèi)存保護單元(MPU)。MPU對編程區(qū)域提供更簡單的接口,但由于嵌入式Xinu已經(jīng)啟用了MMU,因此選用MMU。這個決定更符合硬件系統(tǒng)教學(xué),因為MMU是學(xué)生熟悉的必要計算機組件。

樹莓派3B+定義了兩級緩存——L1和L2。在默認情況下,樹莓派3B+上禁用二級緩存。嵌入式Xinu最新移植初始化了MMU,但僅使用已啟用的L2系統(tǒng)進行原子操作,從而在內(nèi)核之間強制執(zhí)行互斥。在此工作之前,啟用的MMU并未利用其內(nèi)存保護功能。

圖3顯示了該器件實現(xiàn)的存儲系統(tǒng)。當MMU初始化時,L2緩存已啟用,并且可以開始轉(zhuǎn)換。如上所述,需要一個硬件寄存器來確定訪問控制。在這個平臺上,協(xié)處理器寄存器15(CP15)保存有關(guān)正在訪問的內(nèi)存區(qū)域的信息,如是否可緩存,或者是否允許當前執(zhí)行模式訪問它。在地址轉(zhuǎn)換之后,物理地址可能駐留在兩個緩存層次結(jié)構(gòu)中的任何一個中,或者駐留在RAM中。該內(nèi)核以虛擬和物理轉(zhuǎn)換1∶1的方式配置MMU,這使得設(shè)計更加簡單,其中翻譯后的內(nèi)存地址對請求者是可見的。該平臺的內(nèi)存架構(gòu)允許將內(nèi)存區(qū)域編程為多種固定大小之一:4KB頁、64KB頁、1MB節(jié)或16MB超節(jié)。最新的內(nèi)核移植使用1MB部分,無子頁面,以簡化設(shè)計。為使代碼更便于學(xué)生理解,此實現(xiàn)保留1MB部分。

MMU區(qū)域由轉(zhuǎn)換表描述符定義,所選的1MB節(jié)大小使用第一級描述符格式。當C位設(shè)置后,1MB區(qū)域是可緩存的。當考慮外設(shè)地址空間時,該區(qū)域的C位必須禁用,否則即使有基本輸出也可能會產(chǎn)生嚴重影響。描述符的12位保留用于該節(jié)的基址部分,AP位允許擴展正常訪問權(quán)限(AP)位。當設(shè)置APX時,將提供兩種額外的特權(quán)狀態(tài),如特權(quán)只讀,而不是特權(quán)和用戶訪問控制權(quán)限的四種狀態(tài)。本實驗不設(shè)置APX位,而是使用完全訪問模式或使用AP位的用戶寫禁用模式。域格式定義了內(nèi)存區(qū)域集合的訪問類型,從而使高級內(nèi)核具有更大的靈活性。為簡單起見,在此實現(xiàn)中,為整個1MB部分定義了一個域。之前的嵌入式Xinu移植將域位設(shè)置為Manager訪問類型,這阻止了根據(jù)訪問描述符中的權(quán)限位對訪問進行檢查,因此永遠不會生成權(quán)限錯誤。因此,要實施一定程度的內(nèi)存保護,不僅需要更改AP位,還要更改域位。將這些位更改為客戶端模式,根據(jù)條目中的AP位檢查訪問。嵌入式Xinu的MMU初始化代碼是用C和ARM匯編編寫的。mmu_init() C函數(shù)使用輔助函數(shù)mmu_section()來監(jiān)督區(qū)域的一般初始化,以設(shè)置適當?shù)拿枋龇袷轿?。一個for循環(huán)循環(huán)訪問內(nèi)存地址,調(diào)用helper,而一旦所有段基地址都被映射并且外設(shè)被標記為不可緩存,MMU就可以啟動。ARM例程啟動mmu()通過CP15執(zhí)行必要的操作。首先,所有指令和數(shù)據(jù)高速緩存行都無效。在設(shè)置域和TLB基址之前,TLB會失效,以防止硬件留下無效引用重置。

在對某個區(qū)域應(yīng)用受限訪問權(quán)限(即用戶模式只讀)并且啟用MMU后,中止模式成為可能的執(zhí)行模式。Abort模式是內(nèi)存中止時使用的異常模式。內(nèi)存中止是由無效的數(shù)據(jù)內(nèi)存訪問引起的,如變量存在于內(nèi)存地址0x00300處,并且該區(qū)域由第一級描述符定義為用戶模式只讀,則嘗試從用戶更改該處的值的行為將導(dǎo)致數(shù)據(jù)存儲器中止。中止處理程序可以編程為以某種方式處理此類故障,具體方式取決于處理者的設(shè)計,它可能會在執(zhí)行動態(tài)配置指令后再次嘗試錯誤指令。否則,簡單的中止處理程序?qū)⑻^錯誤指令。

在本節(jié)設(shè)計的作業(yè)中,學(xué)生將看到一個按順序創(chuàng)建并運行兩個線程的主程序。運行的第一個線程模擬普通線程,它進行一些系統(tǒng)調(diào)用,如gettid()、getcpuid(),并打印每個結(jié)果。第二個線程模擬全局變量的惡意賦值,將導(dǎo)致內(nèi)核出現(xiàn)不可恢復(fù)的故障。學(xué)生的任務(wù)是防止故障發(fā)生,而無需刪除或更改惡意線程的指令。

該作業(yè)包含三個主要部分:

①將insert()函數(shù)設(shè)為系統(tǒng)調(diào)用;

②在mmu_init()例程期間修改訪問權(quán)限位;

③編寫一個簡單的中止模式處理程序來跳過無效指令。

全局線程就緒列表通過insert()修改,它將已就緒線程ID放入就緒列表中。將列表索引賦值為-1將導(dǎo)致調(diào)度程序發(fā)生故障,并打印內(nèi)核錯誤消息,打印錯誤消息后不會繼續(xù)執(zhí)行,所以學(xué)生可以先考慮執(zhí)行模式提供的保護。如果在Supervisor模式下執(zhí)行insert(),那么就緒列表將只能從特權(quán)模式寫入。因此,如果就緒列表的地址已知,則MMU可以配置為只允許從特權(quán)模式對該地址進行寫訪問。

該實現(xiàn)使用一種方案來挑選出就緒列表,將其放入遠離內(nèi)核內(nèi)存的已知位置。首先,為了使就緒列表地址已知,需要進行修改。在initialize.c中,聲明了就緒列表隊列,可以使用編譯器指令,與加載器腳本一起,將就緒列表復(fù)制到已知位置(如圖4)。因為MMU使用1MB的部分進行1:1轉(zhuǎn)換,就緒列表可以定義在較高的物理部分,如0x00800000。

通過可見的已知位置的就緒列表,學(xué)生可以開始修改mmu_init()以使用USER READONLY訪問權(quán)限位。最初,兩個AP位均被設(shè)置,允許對特權(quán)和非特權(quán)模式進行完全讀寫訪問。修改僅需要設(shè)置第二個AP位,從而授予用戶對保存就緒列表的區(qū)域進行只讀訪問。一旦完成,學(xué)生將注意到內(nèi)核在嘗試進行現(xiàn)在無效的分配后掛起,這不是期望的行為,描述要求跳過無效指令,因此下一部分需要一些ARM匯編。內(nèi)核掛起是因為它嘗試內(nèi)存寫入時出現(xiàn)錯誤,導(dǎo)致內(nèi)核陷入了中止模式。學(xué)生必須修改中止處理程序以跳過出錯的指令。當處理器進入中止模式時,鏈接寄存器被設(shè)置為中止指令的地址+8。因此,要返回到無效賦值之后的指令,中止處理程序必須從鏈接寄存器中減去4并跳轉(zhuǎn)到該地址。

結(jié)果與展望

本文引入了系統(tǒng)調(diào)用,這是嵌入式操作系統(tǒng)的一個重大結(jié)構(gòu)變化。此外,還提供了基于模式的內(nèi)存保護實現(xiàn),所設(shè)計的作業(yè)提出了相關(guān)理論在實踐中的應(yīng)用方式。通過教學(xué)實踐,取得了較好的效果。

未來工作的許多方向都涉及更高層次的擴展,如可以研究嵌套SVC調(diào)用。嵌套SVC指令的能力將簡化Xinu內(nèi)核,特別是如果需要單獨的用戶和內(nèi)核空間。另外,據(jù)學(xué)生反饋,他們對現(xiàn)代CPU的多核技術(shù)較感興趣,因此,筆者目前正在設(shè)計啟用樹莓派上其他三個核心的實驗材料。

參考文獻:

[1]劉威,常瑞,謝耀濱.面向系統(tǒng)能力培養(yǎng)的嵌入式系統(tǒng)課程教學(xué)模式改革與實踐[J].計算機教育,2019(01):39-43.

[2]ARM Ltd.ARM Architecture Reference Manual Armv8,for Armv8-A architecture profile[EB/OL].https://static.docs.arm.com/ddi0487/ea/DDI0487E.

[3]ARM Ltd. SVC Handlers.[EB.OL].https://infocenter.arm.com/help/index.js?topic=/com.arm.doc.dui0203j/Cacdfeci.html.

[4]Dennis Brylow. An experimental laboratory environment for teaching embedded operating systems[C].Proceedings of the 39th SIGCSE technical symposium on computer science education:192-196.

[5]Douglas Comer.Operating System Design:The Xinu Approach[M].鄒恒明,周亮,曹浩,等,譯.北京:機械工業(yè)出版社,2013.

[6]陳剛,關(guān)楠,呂鳴松,等.實時多核嵌入式系統(tǒng)研究綜述[J].軟件學(xué)報,2018,29(07):2152-2176.

猜你喜歡
實驗教學(xué)
問題引導(dǎo)在初中化學(xué)實驗教學(xué)中實踐探索
家長(2023年2期)2023-03-14 06:55:16
關(guān)于基礎(chǔ)教育階段實驗教學(xué)的幾點看法
光反應(yīng)與有機化學(xué)實驗教學(xué)結(jié)合的研究
云南化工(2021年8期)2021-12-21 06:38:04
小議初中化學(xué)演示實驗教學(xué)
甘肅教育(2020年4期)2020-09-11 07:42:36
電容器的實驗教學(xué)
物理之友(2020年12期)2020-07-16 05:39:20
對初中化學(xué)實驗教學(xué)的認識和體會
甘肅教育(2020年8期)2020-06-11 06:10:04
幾何體在高中數(shù)學(xué)實驗教學(xué)中的應(yīng)用
基于云計算的計算機實驗教學(xué)探討
高中生物實驗教學(xué)中形成性評價的實施——以“觀察根尖分生區(qū)組織細胞的有絲分裂”實驗教學(xué)為例
高中自然地理課堂實驗教學(xué)的探討
鞍山市| 宿州市| 光山县| 阳朔县| 鄄城县| 鄂托克前旗| 徐州市| 乌恰县| 东阳市| 封开县| 屏边| 石楼县| 乳山市| 隆德县| 正镶白旗| 宿迁市| 睢宁县| 象山县| 保德县| 阿克陶县| 巴里| 濉溪县| 石嘴山市| 克拉玛依市| 万荣县| 彰化市| 屯昌县| 宁津县| 斗六市| 永丰县| 裕民县| 七台河市| 耒阳市| 霍城县| 芜湖市| 高安市| 蒲城县| 台湾省| 博客| 张掖市| 山东|