版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
嵌入式操作系統(tǒng)陳香蘭xlanchen@助教:陳博、李春華Spring2009RTEMS操作系統(tǒng)介紹提綱RTEMS概述RTEMS4.0.0體系結(jié)構(gòu)及模塊介紹RTEMS4.0.0的啟動Hello任務(wù)的運(yùn)行Printf的實(shí)現(xiàn)3RTEMS概述實(shí)時多處理器系統(tǒng)
RealTimeExecutiveforMultiprocessorSystems開源的無版稅的實(shí)時嵌入操作系統(tǒng)最早用于美國國防系統(tǒng)
first=實(shí)時導(dǎo)彈系統(tǒng)
=RealTimeExecutiveforMissileSystems
then=實(shí)時軍用系統(tǒng)
=RealTimeExecutiveforMilitarySystems,現(xiàn)在由OAR公司負(fù)責(zé)版本的升級與維護(hù)。在航空航天、軍工、民用等領(lǐng)域都有廣泛應(yīng)用。4RTEMS體系結(jié)構(gòu)版本4.0.0APP靜態(tài)聯(lián)編,包括應(yīng)用程序、C庫、RTEMSRTEMS相關(guān)的所有源代碼都在c目錄下,包括操作系統(tǒng)、測試包、應(yīng)用實(shí)例、BSP包、設(shè)備驅(qū)動以及支持庫。總體上RTEMS代碼由兩部分組成EXEC:RTEMS操作系統(tǒng)執(zhí)行體82,645行LIB:RTEMS庫,包括libc、bsp(包括驅(qū)動)以及l(fā)ibcpu146,262行EXECLIB5RTEMS的源代碼結(jié)構(gòu)閱讀各個層次目錄下的readme觀察主要目錄及文件6EXECRTEMS操作系統(tǒng)包括一個核心score核心之上有可以支持兩種操作系統(tǒng)封裝符合POSIX標(biāo)準(zhǔn)的RTEMS在最上層是SAPIEXEC代碼統(tǒng)計信息SCORE:52166行RTEMS:16045行POSIX:11345行SAPI:3089行7LIBLibbsplibbsp.aLibcLibcpuLibmiscLibnetworkingStartBSP基本功能BSP基本驅(qū)動基本C庫CPU庫,CPU相關(guān)操作,但與board無關(guān)一些工具網(wǎng)絡(luò)啟動支持,i386和ppc都不在這8SCORE中的模塊及其依賴關(guān)系Src:15個主要的handlerAPI擴(kuò)展、user擴(kuò)展、Workspace、heap、Object、Thread、threadq、Watchdog、tod、Msg、sem、mutex、Isr、interr、chain一些輔助handler:
address、sysstate、state、context、priority等Mp相關(guān)Cpu:提供CPU相關(guān)的一些支持9API和user擴(kuò)展不同的操作系統(tǒng)封裝具有不同的操作系統(tǒng)語義。有時需要在score的基礎(chǔ)上進(jìn)行擴(kuò)展。score提供兩種擴(kuò)展:API擴(kuò)展和user擴(kuò)展。API擴(kuò)展提供了3個可擴(kuò)展點(diǎn)Predriver:系統(tǒng)初始化時,所有驅(qū)動初始化前Postdriver:系統(tǒng)初始化時,所有驅(qū)動初始化后Postswitch:根據(jù)需要在線程切換后10User擴(kuò)展提供了8個擴(kuò)展點(diǎn):Thread_create:在線程初始化后執(zhí)行Thread_start:在線程啟動后Thread_restart:在線程重啟后Thread_delete:在線程close的后面運(yùn)行Thread_switch:上下文切換之前Thread_begin:在線程入口程序運(yùn)行前Thread_exitted:在線程入口程序退出后Fatal:系統(tǒng)出錯時11每次擴(kuò)展都要提供API/user擴(kuò)展點(diǎn)集的擴(kuò)展例程集,組織成一個擴(kuò)展節(jié)點(diǎn)可以進(jìn)行多次擴(kuò)展,所有擴(kuò)展節(jié)點(diǎn)使用鏈表連接在一起_API_extensions_List
_User_extensions_List
擴(kuò)展例程的執(zhí)行在每個擴(kuò)展點(diǎn),遍歷API/user擴(kuò)展鏈表,對每個擴(kuò)展節(jié)點(diǎn),找到這個擴(kuò)展點(diǎn)的例程并執(zhí)行12Score中的chain這是score中普遍使用的一種數(shù)據(jù)結(jié)構(gòu)類似雙向鏈表包括一個鏈表控制結(jié)構(gòu)和若干鏈表節(jié)點(diǎn)使用chain鏈表的大多數(shù)數(shù)據(jù)結(jié)構(gòu)都將鏈表節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)作為第一個元素,以便于通過類型轉(zhuǎn)換方式維護(hù)鏈表13Score的heap一種動態(tài)內(nèi)存管理方法堆=一組堆塊所有的空閑堆塊組織成一個空閑堆塊鏈表。分配算法:首次適應(yīng)算法分配:分割;回收:合并初始化
給定內(nèi)存區(qū)域,劃分成兩個堆塊一個大堆塊,基本覆蓋全部內(nèi)存區(qū)域最后8個字節(jié)為第二個堆塊
為整個堆的尾堆塊,永遠(yuǎn)不會分配出去14Score的workspaceWorkspace是score的可用內(nèi)存區(qū)域。Score的各個模塊都通過workspace的分配/回收函數(shù)使用內(nèi)存。Workspace是scoreheap的一個應(yīng)用實(shí)例。Workspace的初始化根據(jù)rtems靜態(tài)配置信息,計算出Workspace的大小在系統(tǒng)初始化時,辟出相應(yīng)的物理內(nèi)存作為Workspace15Score的對象管理17種對象類型內(nèi)部線程、RTEMS任務(wù)、POSIX線程其他8種RTEMS對象類型:定時器、信號量、消息隊(duì)列、分區(qū)、區(qū)域、端口、周期、擴(kuò)展其他6種POSIX對象類型:中斷、消息隊(duì)列、互斥量、信號量、條件變量、鍵值16每個對象類型有專門的對象類型信息結(jié)構(gòu)保存該類對象的基本信息,包括:類型號最小和最大id最多對象個數(shù)有效對象句柄表對象名字字符串?dāng)?shù)組、最大對象名字長度空閑對象鏈表等等17每個有效對象都有一個32位的對象id標(biāo)識后16位:對象索引號中間11位:對象位置信息(本地or遠(yuǎn)程)高5位:對象類型號18對象數(shù)據(jù)結(jié)構(gòu)對象控制結(jié)構(gòu)鏈表節(jié)點(diǎn):連接同一種類型的對象。19Score的watchdogWatchdog實(shí)現(xiàn)定時執(zhí)行功能。提供兩種定時單位:tick和second。使用兩個定時器鏈表分別維護(hù):_Watchdog_Ticks_chain_Watchdog_Seconds_chain維護(hù):
只需要考慮最前面的定時器定時器按到期時間先后排序后繼定時器記錄與前驅(qū)定時器之間的時間差20Score的線程隊(duì)列有兩種線程隊(duì)列維護(hù)方式基于FIFO,所有線程都在一個隊(duì)列上基于優(yōu)先級:一共256個優(yōu)先級,為查找方便
256個優(yōu)先級劃分為4組,每組一個隊(duì)列,負(fù)責(zé)64個優(yōu)先級查找時
高32個優(yōu)先級從隊(duì)列前方開始搜索
底32個優(yōu)先級從隊(duì)列后方開始搜索21Score的消息隊(duì)列兩種消息隊(duì)列:基于FIFO的:
等待消息的線程按照FIFO原則排隊(duì)基于優(yōu)先級的:
等待消息的線程按照優(yōu)先級原則排隊(duì)Score允許緊急消息。當(dāng)沒有等待線程時:
普通消息插入消息鏈表的末尾;
緊急消息插入消息隊(duì)列的前面。22Score的信號量Score的信號量也有兩種類型:
(根據(jù)等待線程的排隊(duì)原則)基于FIFO基于優(yōu)先級23Score的互斥鎖Score的互斥鎖有四種基于FIFO基于優(yōu)先級基于優(yōu)先級繼承基于優(yōu)先級置頂24Score的interr處理內(nèi)部出錯處理流程:填寫出錯信息執(zhí)行user擴(kuò)展中的fatal擴(kuò)展調(diào)用CPU相關(guān)代碼_CPU_Fatal_halt停止系統(tǒng)運(yùn)行對于i386,首先關(guān)中斷,然后執(zhí)行hlt指令25RTEMSTaskINTRPartition,RegionDpmemClock,TimerRatemonSignal,Event,MsgQ,Sem26SAPIINITDebugExtensionFatalIo27RTEMSPartition一種靜態(tài)分區(qū)內(nèi)存管理機(jī)制。分區(qū)中,內(nèi)存被組織成固定大小的緩沖區(qū)。初始化時,所有的內(nèi)存被劃分成一個個緩沖區(qū),并鏈接為空閑鏈表;分配時,從空閑鏈表上獲得緩沖區(qū);釋放時,將緩沖區(qū)釋放到空閑鏈表上。28RTEMSRegion一種動態(tài)內(nèi)存管理方法。區(qū)域中的內(nèi)存按照堆(scoreheap)的方式動態(tài)管理區(qū)域中的堆塊又稱為段。分配時,若內(nèi)存不夠,則申請者可以考慮等待。釋放時,若有等待線程,則要考慮將空閑內(nèi)存分配給等待者。29Libcsupport&newlibMalloc_REENTIO30RTEMS-4.0.0的啟動上電??BSP:start16.sBSP:Start.sBSP:Main.cRTEMS:INIT……31Start.s(pc386)關(guān)中斷裝載各個段寄存器裝載Gdt和Idt通過ljmp裝載全新的CS,并且清空指令cache等裝載ss、ds、es、fs、gs重新設(shè)置8259建立堆棧BSS段清0檢查CPU信息調(diào)用boot_card32Main.c:boot_card缺省初始化Cpu_table
復(fù)制配置表調(diào)用bsp_start調(diào)用rtems_initialize_executive_early調(diào)用main(一旦從main退出執(zhí)行到這里,就說明系統(tǒng)運(yùn)行結(jié)束)
調(diào)用bsp_cleanup33Bspstart.c:bsp_start校正時間為printk進(jìn)行初始化空閑內(nèi)存起始地址初始化rtemsFreeMemStart初始化Cpu_table對齊空閑內(nèi)存起始地址設(shè)置BSP_Configuration中workspace的起始地址參數(shù)空閑內(nèi)存起始地址指向workspace之后為console保留資源初始化rtems的中斷管理初始化rtems的異常管理34RTEMS第一階段初始化rtems_initialize_executive_early初始化各個模塊在合適的位置執(zhí)行各項(xiàng)擴(kuò)展bsp的多任務(wù)啟動前擴(kuò)展、驅(qū)動初始化前擴(kuò)展、驅(qū)動初始化后擴(kuò)展API擴(kuò)展的驅(qū)動初始化前擴(kuò)展、驅(qū)動初始化后擴(kuò)展初始化設(shè)備驅(qū)動創(chuàng)建idle線程35Bsp的main調(diào)用rtems_initialize_executive_late進(jìn)行第二階段的初始化,并進(jìn)入實(shí)際運(yùn)行階段若返回,則說明系統(tǒng)運(yùn)行已經(jīng)結(jié)束返回036RTEMS第二階段初始化rtems_initialize_executive_late啟動多任務(wù)(從bsp上下文切換到線程后繼運(yùn)行)一旦從多任務(wù)返回,則系統(tǒng)運(yùn)行結(jié)束……37Hello任務(wù)的運(yùn)行觀察hello中init.c、Makefile.in以及system.h涉及pc386.cfg等文件;confdef.hRTEMS應(yīng)用的啟動程序,名為init通過配置表的方式傳遞給RTEMS的初始化管理器rtems_initialization_tasks_table
Initialization_tasks[]={{…,init,…}}rtems_api_configuration_table
Configuration_RTEMS_API={…,Initialization_tasks}rtems_configuration_tableConfiguration={…}38在初始化第一階段調(diào)用_RTEMS_API_Initialize初始化API相關(guān)內(nèi)容調(diào)用_RTEMS_tasks_Manager_initialization初始化任務(wù)管理器添加API擴(kuò)展_RTEMS_tasks_API_extensions
包含_RTEMS_tasks_Initialize_user_tasks
作為postdriver_API_extensions_Run_postdriver中被調(diào)用39在RTEMS初始化的第二階段,上下文切換到調(diào)度后繼這個調(diào)度后繼,永遠(yuǎn)指向當(dāng)前最應(yīng)該運(yùn)行的任務(wù)在初始化剛剛完成時,通常就是init考察rtems_task_start_Thread_Start_Thread_Ready_Thread_Calculate_heir40Project4在RTEMS-4.0.0中,選擇下列任一模塊加以分析:內(nèi)存管理模塊,包
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能車庫門系統(tǒng)智能化改造合同4篇
- 花崗巖擋車石施工方案
- 2025年度個人房產(chǎn)抵押權(quán)質(zhì)權(quán)合同示范2篇
- 2025年度智能門窗系統(tǒng)安裝與智能家居集成合同4篇
- 2025年度職業(yè)技能培訓(xùn)學(xué)校招生代理合作協(xié)議3篇
- 2025年玻璃制品展示設(shè)計與制作合同3篇
- 2025年度倉儲物流信息化系統(tǒng)租賃服務(wù)合同2篇
- 基于2025年度標(biāo)準(zhǔn)的知識產(chǎn)權(quán)許可使用合同3篇
- 2025年能源行業(yè)學(xué)徒培養(yǎng)與勞動合同3篇
- 民用住宅消防安全管理
- 2025年安徽馬鞍山市兩山綠色生態(tài)環(huán)境建設(shè)有限公司招聘筆試參考題庫附帶答案詳解
- 貨運(yùn)企業(yè)2025年度安全檢查計劃
- 以發(fā)展為導(dǎo)向共創(chuàng)教育新篇章-2024年期末校長總結(jié)講話稿
- 2025年焊工安全生產(chǎn)操作規(guī)程(2篇)
- 《事故快速處理協(xié)議書》電子版
- 廣東省廣州越秀區(qū)2023-2024學(xué)年八年級上學(xué)期期末數(shù)學(xué)試卷(含答案)
- 臨床經(jīng)鼻高流量濕化氧療患者護(hù)理查房
- 2024年貴州省中考數(shù)學(xué)真題含解析
- 8小時等效A聲級計算工具
- 人教版七年級下冊數(shù)學(xué)計算題300道
- 社會實(shí)踐登記表
評論
0/150
提交評論