《嵌入式操作系統(tǒng)》PPT課件.ppt_第1頁(yè)
《嵌入式操作系統(tǒng)》PPT課件.ppt_第2頁(yè)
《嵌入式操作系統(tǒng)》PPT課件.ppt_第3頁(yè)
《嵌入式操作系統(tǒng)》PPT課件.ppt_第4頁(yè)
《嵌入式操作系統(tǒng)》PPT課件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、嵌入式操作系統(tǒng),陳香蘭 助教:陳博、李春華 Spring 2009,RTEMS操作系統(tǒng)介紹,3,提綱,RTEMS概述 RTEMS4.0.0體系結(jié)構(gòu)及模塊介紹 RTEMS4.0.0的啟動(dòng) Hello任務(wù)的運(yùn)行 Printf的實(shí)現(xiàn),4,RTEMS概述,實(shí)時(shí)多處理器系統(tǒng)Real Time Executive for Multiprocessor Systems 開(kāi)源的無(wú)版稅的實(shí)時(shí)嵌入操作系統(tǒng) 最早用于美國(guó)國(guó)防系統(tǒng)first=實(shí)時(shí)導(dǎo)彈系統(tǒng)=Real Time Executive for Missile Systemsthen=實(shí)時(shí)軍用系統(tǒng)=Real Time Executive for Militar

2、y Systems, 現(xiàn)在由OAR公司負(fù)責(zé)版本的升級(jí)與維護(hù)。 在航空航天、軍工、民用等領(lǐng)域都有廣泛應(yīng)用。,5,RTEMS體系結(jié)構(gòu),版本4.0.0 APP靜態(tài)聯(lián)編,包括 應(yīng)用程序、C庫(kù)、RTEMS RTEMS相關(guān)的所有源代碼都在c目錄下,包括操作系統(tǒng)、測(cè)試包、應(yīng)用實(shí)例、BSP包、設(shè)備驅(qū)動(dòng)以及支持庫(kù)。 總體上RTEMS代碼由兩部分組成 EXEC:RTEMS操作系統(tǒng)執(zhí)行體 82, 645 行 LIB:RTEMS庫(kù),包括libc、bsp(包括驅(qū)動(dòng))以及l(fā)ibcpu 146, 262 行,EXEC,LIB,6,RTEMS的源代碼結(jié)構(gòu),閱讀各個(gè)層次目錄下的readme 觀察主要目錄及文件,7,EXEC,R

3、TEMS操作系統(tǒng)包括一個(gè)核心score 核心之上有可以支持兩種操作系統(tǒng)封裝 符合POSIX標(biāo)準(zhǔn)的 RTEMS 在最上層是SAPI EXEC代碼統(tǒng)計(jì)信息 SCORE:52166 行 RTEMS:16045 行 POSIX:11345 行 SAPI:3089 行,8,LIB,Libbsplibbsp.a Libc Libcpu Libmisc Libnetworking Start,BSP基本功能,BSP基本驅(qū)動(dòng),基本C庫(kù),CPU庫(kù),CPU相關(guān)操作,但與board無(wú)關(guān),一些工具,網(wǎng)絡(luò),啟動(dòng)支持,i386和ppc都不在這,9,SCORE中的模塊及其依賴關(guān)系,Src:15個(gè)主要的handler API

4、擴(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)的一些支持,10,API和user擴(kuò)展,不同的操作系統(tǒng)封裝具有不同的操作系統(tǒng)語(yǔ)義。有時(shí)需要在score的基礎(chǔ)上進(jìn)行擴(kuò)展。 score提供兩種擴(kuò)展: API擴(kuò)展和user擴(kuò)展。 API擴(kuò)展提供了3個(gè)可擴(kuò)展點(diǎn) Predriver:系統(tǒng)初始化時(shí),所有驅(qū)動(dòng)初始化前 Postdriver:

5、系統(tǒng)初始化時(shí),所有驅(qū)動(dòng)初始化后 Postswitch:根據(jù)需要在線程切換后,11,User擴(kuò)展提供了8個(gè)擴(kuò)展點(diǎn): Thread_create:在線程初始化后執(zhí)行 Thread_start:在線程啟動(dòng)后 Thread_restart:在線程重啟后 Thread_delete:在線程close的后面運(yùn)行 Thread_switch:上下文切換之前 Thread_begin:在線程入口程序運(yùn)行前 Thread_exitted:在線程入口程序退出后 Fatal:系統(tǒng)出錯(cuò)時(shí),12,每次擴(kuò)展都要提供API/user擴(kuò)展點(diǎn)集的擴(kuò)展例程集,組織成一個(gè)擴(kuò)展節(jié)點(diǎn) 可以進(jìn)行多次擴(kuò)展,所有擴(kuò)展節(jié)點(diǎn)使用鏈表連接在一起

6、_API_extensions_List _User_extensions_List 擴(kuò)展例程的執(zhí)行 在每個(gè)擴(kuò)展點(diǎn),遍歷API/user擴(kuò)展鏈表,對(duì)每個(gè)擴(kuò)展節(jié)點(diǎn),找到這個(gè)擴(kuò)展點(diǎn)的例程并執(zhí)行,13,Score中的chain,這是score中普遍使用的一種數(shù)據(jù)結(jié)構(gòu) 類似雙向鏈表 包括一個(gè)鏈表控制結(jié)構(gòu)和若干鏈表節(jié)點(diǎn) 使用chain鏈表的大多數(shù)數(shù)據(jù)結(jié)構(gòu)都將鏈表節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)作為第一個(gè)元素,以便于通過(guò)類型轉(zhuǎn)換方式維護(hù)鏈表,14,Score的heap,一種動(dòng)態(tài)內(nèi)存管理方法 堆=一組堆塊 所有的空閑堆塊組織成一個(gè)空閑堆塊鏈表。 分配算法:首次適應(yīng)算法 分配:分割;回收:合并 初始化給定內(nèi)存區(qū)域,劃分成兩個(gè)堆塊

7、 一個(gè)大堆塊,基本覆蓋全部?jī)?nèi)存區(qū)域 最后8個(gè)字節(jié)為第二個(gè)堆塊為整個(gè)堆的尾堆塊,永遠(yuǎn)不會(huì)分配出去,15,Score的workspace,Workspace是score的可用內(nèi)存區(qū)域。 Score的各個(gè)模塊都通過(guò)workspace的分配/回收函數(shù)使用內(nèi)存。 Workspace是score heap的一個(gè)應(yīng)用實(shí)例。 Workspace的初始化 根據(jù)rtems靜態(tài)配置信息,計(jì)算出Workspace的大小 在系統(tǒng)初始化時(shí),辟出相應(yīng)的物理內(nèi)存作為Workspace,16,Score的對(duì)象管理,17種對(duì)象類型 內(nèi)部線程、RTEMS任務(wù)、POSIX線程 其他8種RTEMS對(duì)象類型: 定時(shí)器、信號(hào)量、消息隊(duì)列、

8、分區(qū)、區(qū)域、端口、周期、擴(kuò)展 其他6種POSIX對(duì)象類型: 中斷、消息隊(duì)列、互斥量、信號(hào)量、條件變量、鍵值,17,每個(gè)對(duì)象類型有專門(mén)的對(duì)象類型信息結(jié)構(gòu)保存該類對(duì)象的基本信息,包括: 類型號(hào) 最小和最大id 最多對(duì)象個(gè)數(shù) 有效對(duì)象句柄表 對(duì)象名字字符串?dāng)?shù)組、最大對(duì)象名字長(zhǎng)度 空閑對(duì)象鏈表 等等,18,每個(gè)有效對(duì)象都有一個(gè)32位的對(duì)象id標(biāo)識(shí) 后16位:對(duì)象索引號(hào) 中間11位:對(duì)象位置信息(本地or遠(yuǎn)程) 高5位:對(duì)象類型號(hào),19,對(duì)象數(shù)據(jù)結(jié)構(gòu) 對(duì)象控制結(jié)構(gòu) 鏈表節(jié)點(diǎn):連接同一種類型的對(duì)象。,20,Score的watchdog,Watchdog實(shí)現(xiàn)定時(shí)執(zhí)行功能。 提供兩種定時(shí)單位:tick和sec

9、ond。使用兩個(gè)定時(shí)器鏈表分別維護(hù): _Watchdog_Ticks_chain _Watchdog_Seconds_chain 維護(hù):只需要考慮最前面的定時(shí)器 定時(shí)器按到期時(shí)間先后排序 后繼定時(shí)器記錄與前驅(qū)定時(shí)器之間的時(shí)間差,21,Score的線程隊(duì)列,有兩種線程隊(duì)列維護(hù)方式 基于FIFO,所有線程都在一個(gè)隊(duì)列上 基于優(yōu)先級(jí): 一共256個(gè)優(yōu)先級(jí), 為查找方便256個(gè)優(yōu)先級(jí)劃分為4組,每組一個(gè)隊(duì)列,負(fù)責(zé)64個(gè)優(yōu)先級(jí) 查找時(shí)高32個(gè)優(yōu)先級(jí)從隊(duì)列前方開(kāi)始搜索底32個(gè)優(yōu)先級(jí)從隊(duì)列后方開(kāi)始搜索,22,Score的消息隊(duì)列,兩種消息隊(duì)列: 基于FIFO的:等待消息的線程按照FIFO原則排隊(duì) 基于優(yōu)先級(jí)

10、的:等待消息的線程按照優(yōu)先級(jí)原則排隊(duì) Score允許緊急消息。 當(dāng)沒(méi)有等待線程時(shí):普通消息插入消息鏈表的末尾;緊急消息插入消息隊(duì)列的前面。,23,Score的信號(hào)量,Score的信號(hào)量也有兩種類型:(根據(jù)等待線程的排隊(duì)原則) 基于FIFO 基于優(yōu)先級(jí),24,Score的互斥鎖,Score的互斥鎖有四種 基于FIFO 基于優(yōu)先級(jí) 基于優(yōu)先級(jí)繼承 基于優(yōu)先級(jí)置頂,25,Score的interr處理,內(nèi)部出錯(cuò)處理流程: 填寫(xiě)出錯(cuò)信息 執(zhí)行user擴(kuò)展中的fatal擴(kuò)展 調(diào)用CPU相關(guān)代碼_CPU_Fatal_halt停止系統(tǒng)運(yùn)行 對(duì)于i386,首先關(guān)中斷,然后執(zhí)行hlt指令,26,RTEMS,Tas

11、k INTR Partition,Region Dpmem Clock,Timer Ratemon Signal,Event,MsgQ,Sem,27,SAPI,INIT Debug Extension Fatal Io,28,RTEMS Partition,一種靜態(tài)分區(qū)內(nèi)存管理機(jī)制。 分區(qū)中,內(nèi)存被組織成固定大小的緩沖區(qū)。 初始化時(shí),所有的內(nèi)存被劃分成一個(gè)個(gè)緩沖區(qū),并鏈接為空閑鏈表; 分配時(shí),從空閑鏈表上獲得緩沖區(qū); 釋放時(shí),將緩沖區(qū)釋放到空閑鏈表上。,29,RTEMS Region,一種動(dòng)態(tài)內(nèi)存管理方法。 區(qū)域中的內(nèi)存按照堆(score heap)的方式動(dòng)態(tài)管理 區(qū)域中的堆塊又稱為段。 分配

12、時(shí),若內(nèi)存不夠,則申請(qǐng)者可以考慮等待。 釋放時(shí),若有等待線程,則要考慮將空閑內(nèi)存分配給等待者。,30,Libcsupport & newlib,Malloc _REENT IO,31,RTEMS-4.0.0的啟動(dòng),上電? BSP:start16.s BSP:Start.s BSP:Main.c RTEMS:INIT ,32,Start.s(pc386),關(guān)中斷 裝載各個(gè)段寄存器 裝載Gdt和Idt 通過(guò)ljmp裝載全新的CS,并且清空指令cache等 裝載ss、ds、es、fs、gs 重新設(shè)置8259 建立堆棧 BSS段清0 檢查CPU信息 調(diào)用boot_card,33,Main.c:boot

13、_card,缺省初始化Cpu_table 復(fù)制配置表 調(diào)用bsp_start 調(diào)用rtems_initialize_executive_early 調(diào)用main (一旦從main退出執(zhí)行到這里,就說(shuō)明系統(tǒng)運(yùn)行結(jié)束) 調(diào)用bsp_cleanup,34,Bspstart.c:bsp_start,校正時(shí)間 為printk進(jìn)行初始化 空閑內(nèi)存起始地址初始化rtemsFreeMemStart 初始化Cpu_table 對(duì)齊空閑內(nèi)存起始地址 設(shè)置BSP_Configuration中workspace的起始地址參數(shù) 空閑內(nèi)存起始地址指向workspace之后 為console保留資源 初始化rtems的中斷

14、管理 初始化rtems的異常管理,35,RTEMS第一階段初始化,rtems_initialize_executive_early 初始化各個(gè)模塊 在合適的位置執(zhí)行各項(xiàng)擴(kuò)展 bsp的多任務(wù)啟動(dòng)前擴(kuò)展、驅(qū)動(dòng)初始化前擴(kuò)展、驅(qū)動(dòng)初始化后擴(kuò)展 API擴(kuò)展的驅(qū)動(dòng)初始化前擴(kuò)展、驅(qū)動(dòng)初始化后擴(kuò)展 初始化設(shè)備驅(qū)動(dòng) 創(chuàng)建idle線程,36,Bsp的main,調(diào)用rtems_initialize_executive_late進(jìn)行第二階段的初始化,并進(jìn)入實(shí)際運(yùn)行階段 若返回,則說(shuō)明系統(tǒng)運(yùn)行已經(jīng)結(jié)束 返回0,37,RTEMS第二階段初始化,rtems_initialize_executive_late 啟動(dòng)多任務(wù)(從

15、bsp上下文切換到線程后繼運(yùn)行) 一旦從多任務(wù)返回,則系統(tǒng)運(yùn)行結(jié)束 ,38,Hello任務(wù)的運(yùn)行,觀察hello中init.c、Makefile.in以及system.h 涉及pc386.cfg等文件;confdef.h RTEMS應(yīng)用的啟動(dòng)程序,名為init 通過(guò)配置表的方式傳遞給RTEMS的初始化管理器 rtems_initialization_tasks_table Initialization_tasks =, init, rtems_api_configuration_table Configuration_RTEMS_API = , Initialization_tasks rte

16、ms_configuration_table Configuration =,39,在初始化第一階段 調(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)用,40,在RTEMS初始化的第二階段,上下文切換到調(diào)度后繼 這個(gè)調(diào)度后繼,永遠(yuǎn)指向當(dāng)前最應(yīng)該運(yùn)行的任務(wù) 在初始化剛剛完成時(shí),通常就是init 考察rtems_task_start,_Thread_Start,_Thread_Ready,_Thread_Calculate_heir,41,Project 4,在RTEMS4.0.0中,選擇下列任一模塊加以分析: 內(nèi)存管理

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論