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

下載本文檔

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

文檔簡介

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

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

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

4、擴展、user擴展、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擴展,不同的操作系統(tǒng)封裝具有不同的操作系統(tǒng)語義。有時需要在score的基礎(chǔ)上進行擴展。 score提供兩種擴展: API擴展和user擴展。 API擴展提供了3個可擴展點 Predriver:系統(tǒng)初始化時,所有驅(qū)動初始化前 Postdriver:

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

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

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

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

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

10、的:等待消息的線程按照優(yōu)先級原則排隊 Score允許緊急消息。 當(dāng)沒有等待線程時:普通消息插入消息鏈表的末尾;緊急消息插入消息隊列的前面。,23,Score的信號量,Score的信號量也有兩種類型:(根據(jù)等待線程的排隊原則) 基于FIFO 基于優(yōu)先級,24,Score的互斥鎖,Score的互斥鎖有四種 基于FIFO 基于優(yōu)先級 基于優(yōu)先級繼承 基于優(yōu)先級置頂,25,Score的interr處理,內(nèi)部出錯處理流程: 填寫出錯信息 執(zhí)行user擴展中的fatal擴展 調(diào)用CPU相關(guān)代碼_CPU_Fatal_halt停止系統(tǒng)運行 對于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)存管理機制。 分區(qū)中,內(nèi)存被組織成固定大小的緩沖區(qū)。 初始化時,所有的內(nèi)存被劃分成一個個緩沖區(qū),并鏈接為空閑鏈表; 分配時,從空閑鏈表上獲得緩沖區(qū); 釋放時,將緩沖區(qū)釋放到空閑鏈表上。,29,RTEMS Region,一種動態(tài)內(nèi)存管理方法。 區(qū)域中的內(nèi)存按照堆(score heap)的方式動態(tài)管理 區(qū)域中的堆塊又稱為段。 分配

12、時,若內(nèi)存不夠,則申請者可以考慮等待。 釋放時,若有等待線程,則要考慮將空閑內(nèi)存分配給等待者。,30,Libcsupport & newlib,Malloc _REENT IO,31,RTEMS-4.0.0的啟動,上電? BSP:start16.s BSP:Start.s BSP:Main.c RTEMS:INIT ,32,Start.s(pc386),關(guān)中斷 裝載各個段寄存器 裝載Gdt和Idt 通過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í)行到這里,就說明系統(tǒng)運行結(jié)束) 調(diào)用bsp_cleanup,34,Bspstart.c:bsp_start,校正時間 為printk進行初始化 空閑內(nèi)存起始地址初始化rtemsFreeMemStart 初始化Cpu_table 對齊空閑內(nèi)存起始地址 設(shè)置BSP_Configuration中workspace的起始地址參數(shù) 空閑內(nèi)存起始地址指向workspace之后 為console保留資源 初始化rtems的中斷

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

15、bsp上下文切換到線程后繼運行) 一旦從多任務(wù)返回,則系統(tǒng)運行結(jié)束 ,38,Hello任務(wù)的運行,觀察hello中init.c、Makefile.in以及system.h 涉及pc386.cfg等文件;confdef.h RTEMS應(yīng)用的啟動程序,名為init 通過配置表的方式傳遞給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擴展_RTEMS_tasks_API_extensions包含_RTEMS_tasks_Initialize_user_tasks作為postdriver _API_extensions_Run_postdriver中被調(diào)用,40,在RTEMS初始化的第二階段,上下文切換到調(diào)度后繼 這個調(diào)度后繼,永遠指向當(dāng)前最應(yīng)該運行的任務(wù) 在初始化剛剛完成時,通常就是init 考察rtems_task_start,_Thread_Start,_Thread_Ready,_Thread_Calculate_heir,41,Project 4,在RTEMS4.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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論