嵌入式系統(tǒng)linux總結(jié)_第1頁(yè)
嵌入式系統(tǒng)linux總結(jié)_第2頁(yè)
嵌入式系統(tǒng)linux總結(jié)_第3頁(yè)
嵌入式系統(tǒng)linux總結(jié)_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、嵌入式實(shí)時(shí)操作系統(tǒng)復(fù)習(xí)提綱一、基本概念linux內(nèi)核主要是由進(jìn)程調(diào)度、內(nèi)存管理、虛擬文件系統(tǒng)、網(wǎng)絡(luò)接口和進(jìn)程間通信等組成。3linux用戶進(jìn)程: linux系統(tǒng)定義了五種狀態(tài)進(jìn)程狀態(tài)從linux的調(diào)度來(lái)看,支持非實(shí)時(shí)(普通)和實(shí)時(shí)兩種進(jìn)程。5考慮到中斷處理的效率,linux的中斷處理程序分為兩個(gè)部分:上半部(top half)和下半部(bottom half)。由外部設(shè)備引發(fā)的中斷叫外部中斷,處理器響應(yīng)中斷請(qǐng)求而執(zhí)行的程序模塊叫中斷服務(wù)例程6交換機(jī)制:將不用或暫不用的頁(yè)框中的頁(yè)移出,裝上新的頁(yè)面;linux三級(jí)分頁(yè)結(jié)構(gòu)7進(jìn)程的通信與同步機(jī)制有管道、信號(hào)、消息隊(duì)列、共享內(nèi)存和信號(hào)量集等el 中。

2、linux的管道有:匿名管道和命名管道;從信號(hào)的可靠性方面,信號(hào)可以分為:可靠信號(hào)和不可靠信號(hào)。8.linux設(shè)備驅(qū)動(dòng)注冊(cè)的基本參數(shù)有設(shè)備名稱,設(shè)備驅(qū)動(dòng)的數(shù)據(jù)結(jié)構(gòu)、設(shè)備號(hào) 和 次設(shè)備號(hào)。lsmod 把現(xiàn)在 kernel 中已經(jīng)安裝的modules 列出來(lái);insmod 把某個(gè) module 安裝到 kernel.二、基本原理和方法基于虛擬內(nèi)存技術(shù)的程序執(zhí)行兩次映射:buddy算法-伙伴算法slab分配器思想linux內(nèi)存管理的基本內(nèi)容和步驟linux 內(nèi)核的主要組成部分linux的中斷處理程序linux系統(tǒng)進(jìn)程調(diào)度的總體思想。實(shí)時(shí)進(jìn)程優(yōu)先于普通進(jìn)程,實(shí)時(shí)進(jìn)程以進(jìn)程的緊急程度為優(yōu)先順序,普通進(jìn)程

3、以進(jìn)程平等占用cpu時(shí)間為基本調(diào)度原則。linux提供了兩種實(shí)時(shí)調(diào)度策略sched_fifo和sched_rrlinux使用的進(jìn)程間通信方式:(1)管道(pipe)和有名管道(fifo)(2)信號(hào)(signal)(3)消息隊(duì)列:msgget可以創(chuàng)建一個(gè)新隊(duì)列或打開一個(gè)存在的隊(duì)列. msgctl類似于驅(qū)動(dòng)程序中的ioctl函數(shù), 可對(duì)消息隊(duì)列執(zhí)行多種操作. 調(diào)用msgsnd將數(shù)據(jù)放到消息隊(duì)列中. 調(diào)用msgrcv將從消息隊(duì)列中取消息.(4)共享內(nèi)存:linux進(jìn)程調(diào)用shmget(shared memory get,獲取共享內(nèi)存)來(lái)分配一個(gè)共享內(nèi)存塊。shmat(shared memory at

4、tach,綁定到共享內(nèi)存)。shmctl(shared memory control,控制共享內(nèi)存)函數(shù)會(huì)返回一個(gè)共享內(nèi)存塊的相關(guān)信息。同時(shí) shmctl 允許程序修改這些信息。(5)信號(hào)量(6)套接字(socket)三、linux調(diào)度程序理解1. linux使用內(nèi)核函數(shù)goodness()對(duì)進(jìn)程進(jìn)行加權(quán)處理:static inline goodness (struct task_struct * pint this_cpu, struct mm_struct *this_mm)int weight; weight=-1;if (p-policy & sched_yield)/ /*判斷如果任

5、務(wù)的調(diào)度策略被置為sched_yield的話,則置權(quán)值為1,返回。goto out;if (p-policy=sched_other) /*先對(duì)普通進(jìn)程進(jìn)行處理(由于多數(shù)是普通進(jìn)程,這樣做有利于提高系統(tǒng)效率)*/weight=p-counter; /*返回權(quán)值為進(jìn)程的counter值*/if (! weight)goto out;#ifdef config_smpif (p-processor=this_cpu)weight+=proc_change_penalty;#endifif (p-mm=this_mm|! p-mm)weight+=1; /*對(duì)進(jìn)程權(quán)值進(jìn)行微調(diào),如果進(jìn)程的內(nèi)存空間使用

6、當(dāng)前正在運(yùn)行的進(jìn)程的內(nèi)存空間,則權(quán)值額外加1*/weight+=20-p-nice; /*將權(quán)值加上20與進(jìn)程優(yōu)先級(jí)nice的差。普通進(jìn)程的權(quán)值主要由counter值和nice值組成*/goto out;weight=1000+p-rt_priority; /對(duì)實(shí)時(shí)進(jìn)程進(jìn)行處理,返回權(quán)值為rt_priority+1000,確保優(yōu)先級(jí)高于普通進(jìn)程*/out:return weight;2. linux 進(jìn)程及管道應(yīng)用實(shí)例#include#includeint main()int n,fd2; / 這里的fd是文件描述符的數(shù)組,用于創(chuàng)建管道做準(zhǔn)備的pid_t pid;char line100;if

7、(pipe(fd)0) / 創(chuàng)建管道 printf(pipe create error/n);if(pid=fork()0) /這里是父進(jìn)程,先關(guān)閉管道的讀出端,然后在管道的寫端寫入“hello world close(fd0); write(fd1,hello word/n,11);else close(fd1); /這里是子進(jìn)程,先關(guān)閉管道的寫入端,然后在管道的讀出端讀出數(shù)據(jù) n= read(fd0,line,100); write(stdout_fileno,line,n);exit(0);linux中的工作隊(duì)列工作隊(duì)列(work queue)是linux kernel中將工作推后執(zhí)行的

8、一種機(jī)制。這種機(jī)制和bh或tasklets不同之處在于工作隊(duì)列是把推后的工作交由一個(gè)內(nèi)核線程去執(zhí)行,因此工作隊(duì)列的優(yōu)勢(shì)就在于它允許重新調(diào)度甚至睡眠。工作隊(duì)列是2.6內(nèi)核開始引入的機(jī)制,在2.6.20之后,工作隊(duì)列的數(shù)據(jù)結(jié)構(gòu)發(fā)生了一些變化,數(shù)據(jù)結(jié)構(gòu): structwork_struct unsigned longpending; pending是用來(lái)記錄工作是否已經(jīng)掛在隊(duì)列上;structlist_head entry; entry是循環(huán)鏈表結(jié)構(gòu);void(*func)(void*); func作為函數(shù)指針,由用戶實(shí)現(xiàn);void*data; data用來(lái)存儲(chǔ)用戶的私人數(shù)據(jù),此數(shù)據(jù)即是func的參

9、數(shù);void*wq_data; wq_data一般用來(lái)指向工作者線程(工作者線程參考下文);structtimer_list timer; timer是推后執(zhí)行的定時(shí)器。;工作隊(duì)列(work queue)api:1、init_work(_work, _func, _data);初始化指定工作,目的是把用戶指定的函數(shù)_func及_func需要的參數(shù)_data賦給work_struct的func及data變量。2、schedule_work(structwork_struct *work)對(duì)工作進(jìn)行調(diào)度,即把給定工作的處理函數(shù)提交給缺省的工作隊(duì)列和工作者線程。工作者線程本質(zhì)上是一個(gè)普通的內(nèi)核線程,

10、在默認(rèn)情況下,每個(gè)cpu均有一個(gè)類型為“events”的工作者線程,當(dāng)調(diào)用schedule_work時(shí),這個(gè)工作者線程會(huì)被喚醒去執(zhí)行工作鏈表上的所有工作。3、schedule_delayed_work(structwork_struct *work, unsigned longdelay);延遲執(zhí)行工作,與schedule_work類似。4、flush_scheduled_work(void);刷新缺省工作隊(duì)列。此函數(shù)會(huì)一直等待,直到隊(duì)列中的所有工作都被執(zhí)行。5、cancel_delayed_work(structwork_struct *work);并不取消任何延遲執(zhí)行的工作,因此,如果要取

11、消延遲工作,應(yīng)該調(diào)用cancel_delayed_work。針對(duì)linux內(nèi)核,如下機(jī)制嚴(yán)重地影響了實(shí)時(shí)性linux實(shí)時(shí)改造后的系統(tǒng)實(shí)時(shí)性較好,典型代表有:kurt-linux,red-linux,rt-linux、rtai和xenomai等。rt-linux中的實(shí)時(shí)任務(wù)在運(yùn)行過(guò)程當(dāng)中總是處于以下三種狀態(tài)之一:安裝rt-linux的方法和步驟在基于adeos的系統(tǒng)中,存在著a、b、c、d四種類型的交互。linux內(nèi)核和xenomai分別作為adeos中的一個(gè)域存在。linux內(nèi)核負(fù)責(zé)非實(shí)時(shí)任務(wù)的調(diào)度,而xenomai采用不同于linux的精度更高的定時(shí)中斷來(lái)調(diào)度實(shí)時(shí)任務(wù),實(shí)現(xiàn)更小的調(diào)度延時(shí)。另外,xenomai域的優(yōu)先級(jí)高于linux域。xenomai除了在內(nèi)核層利用adeos實(shí)現(xiàn)了硬實(shí)時(shí)外,它在用戶空間也有很好的實(shí)時(shí)性。xenomai的補(bǔ)丁及配置移植步驟rt-linux的實(shí)時(shí)內(nèi)核的主要api1)硬中斷api2)軟中斷api3)內(nèi)核實(shí)時(shí)線程編程api,主要有以下幾個(gè)(在rtl_sched.h中聲明):4)要使用共享內(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)論