久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

嵌入式操作系統程課程設計報告

時間:2019-05-11 23:26:37下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《嵌入式操作系統程課程設計報告》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《嵌入式操作系統程課程設計報告》。

第一篇:嵌入式操作系統程課程設計報告

目錄

一、實習任務和目的????????????1

二、實習基本要求?????????????1

三、實習題目???????????????1

四、實習地點???????????????1

五、實習內容???????????????3

六、實習總結、心得體會??????????8

七、參考資料???????????????9

0

一、實習的任務和目的:

本次實習的目的是在學生已掌握了嵌入式操作系統的知識、對當前嵌入式操作系統的主要種類和應用領域有較清晰的概念的基礎上,以嵌入式LINUX操作系統教學內容為指導,以S3C2410經典實驗箱為平臺,使學生掌握配置、裁剪、移植和維護嵌入式LINUX操作系統的技能和相關理論知識,具備一個初級嵌入式LINUX系統程序員的綜合技能。

本次實習的任務是通過教師對嵌入式LINUX的配置、裁剪、移植以及文件系統的移植等內容的講解,讓學生掌握如何搭建嵌入式開發環境、嵌入式LINUX系統移植、文件系統移植以及簡單的驅動程序的開發。

二、實習基本要求:

1、了解嵌入式操作系統技術前沿、應用領域、發展趨勢及相關領域研究成果;

2、熟悉嵌入式操作系統的特點、分類、基本概念;

3、熟悉主流實時操作系統。深入了解嵌入式LINUX,包括系統配置、裁剪、移植;

4、熟悉并掌握嵌入式文件系統的建立、移植;

5、以嵌入式處理器器S3C2410為例,掌握嵌入式LINUX驅動程序開發的一般方法。

三、實習題目:

1、復習LINUX系統基本操作,常用命令;

2、嵌入式LINU開發基礎知識;

3、嵌入式LINUX開發環境的建立;

4、Bootloader移植;

5、LINUX內核的配置、裁剪;

6、LINUX內核移植與編譯;

7、建立根文件系統;

8、模塊方式驅動程序設計;

9、中斷、LED驅動程序設計。

四、實習地點:

應用技術學院五樓四機房。

五、實習內容:

第一部分 嵌入式LINU開發基礎知識: 1.1 嵌入式LINUX簡介

嵌入式系統的定義為以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適用于應用系統,對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統,它的主要特點是潛入、專用。本次實訓的平臺是在LINUX下的ubuntu系統上進行的。

1.2 嵌入式LINUX開發平臺簡介

本次實訓的需要一臺主機及一塊開發板,它們需要滿足一定的硬件要求,主機的硬件要求是:有一個25針的并口接口,它用來連接JTAG連線,有一個9針的串口接口,支持網絡,至少20GB的硬盤,用到的開發板是s3c2410,它有如下的部件:64MB SDRAM,1MB NOR Flash,64MB NAND Flash,兩個網卡,5個串口(內置3個,外擴2個),音頻輸入輸出。2.5寸IDE接口,標準SD/MMC卡座,GPIO按鍵,外接I2C接口的實時時鐘(RTC)芯片。1.3 嵌入式LINUX開發流程

(1)在主機上編譯Bootloader,然后通過JTAG燒入單板,(2)在主機上編譯嵌入式LINUX內核,通過Bootloader燒入單板或直接啟動,(3)在主機上編譯各類應用程序,單板啟動內核后通過NFS運行他們,經過驗證后再燒入單板。1.4 嵌入式LINUX開發環境的建立

開發環境的搭建:硬件開發環境的搭建很簡單,將主機與目標板通過JTAG、串口線(接單板上的串口0)、網線(接單板上的網卡0)連接起來,將各類設備連接到目標板上即可,軟件的搭建環境相對要復雜的多,時間也要得多,首先第一步需要移植U—boot,然后再來燒寫LINUX內核,再創建根文件系統,最后才可以來寫相應的驅動程序來進行開發的!第二部分 嵌入式LINUX系統構建:

2.1 Bootloader移植

u-boot是德國DENX小組的開發用于多種嵌入式CPU的bootloader程序, u-boot不僅僅支持嵌入式LINUX系統的引導,當前,它還支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系統。u-boot除了支持PowerPC系列的處理器外,還能支持MIPS、x86、ARM、NIOS、XScale等諸多常用系列的處理器。移植過程:

在主機上創建一個文件夾,把以下四個已下載的文件復制到里面,這四個文件分別為:

u-boot.bin,----LINUX操作系統啟動的bootloader;uImage,---LINUX操作系統內核;

root.cramfs,----根文件系統;yaffs.tar.bz2,----應用程序壓縮包。運行sjf2410-s命令如下:sjf2410-s /f:u-boot.bin。然后按回車,等待燒寫完成后,設置開發板的地址與服務器的地址,命令如下:設置本機服務器IP地址:(根據具體主機環境更改IP)setenv serverip 192.168.1.113,設置ARM設備IP地址:(隨意設置成與上面主機同一網段IP即可),setenv ipaddr 192.168.1.199,保存變量設置:saveenv。

2.2 內核裁剪與移植

LINUX本次實驗目錄下存放著已經修改好的博創經典2410平臺的內核源碼包,將該源碼包拷貝到宿主機LINUX系統中,解壓至本次實驗目錄,配置編譯生成內核uImage文件燒寫到ARM設備中。在內核根目錄下,用命令make menuconfig進入配置界面,對系統進行裁剪,如下:

選擇硬件系統

配置LCD驅動

網卡驅動

配置NANF Flash驅動

配置文件系統

然后運行 bootm 啟動內核即可。2.3 創建根文件系統

解壓busybox源碼后,進入busybox源代碼目錄,打開Makefile,修改兩個地方,分別是在Makefile文件中的CROSS_COMPILE=后面添加上arm-LINUX-這一行以及ARCH ?=后面改成arm.然后在busybox根目錄下使用命令make menuconfig進入配置界面進行配置,如圖:

Busybox截圖

退出后,使用命令make,make install。用shell腳本創建根文件系統的目錄結構,并在想要運行根文件系統的地方運行腳本,需要創建一個文件夾rootfs,里面包括了一些LINUX下的基本的文件。還需要把busybox源碼目錄下的/etc 的內容拷貝到此處創建的文件夾的etc下,修改拷貝過來的profile文件,修改初始化文件inittab和fstab,修改初始化的腳本文件,init.d/rcS,創建一個空的mdev.conf文件,在掛載根文件系統時用到,再把本機上的passwd,shadow,group文件拷貝過來,把busybox默認安裝目中的文件全部復制到這里的rootfs中,會發現多了LINUXrc->bin/busybox,這是掛載文件系統需要執行的,這時,在rootfs目錄下,使用命令cp-rvf /rootfs/busybox-1.12.2/_install/*./,,到此,就用busybox創建了一個基本的文件系統。

第三部分 設備驅動程序設計:

3.1 模塊方式驅動實驗

在這里,需要有兩個程序,一個驅動程序,一個用戶程序,驅動程序通過用戶程序來調用,完成基本的讀寫以及注冊設備號等,在本程序中,用戶程序非常簡單,驅動程序的核心部分是如下代碼所示:

static struct file_operations demo_fops = { owner: THIS_MODULE, write:demo_write, read: demo_read, ioctl: demo_ioctl, open: demo_open, release: };demo_release, 其他的所有程序都是在這個基礎上延伸出來的。還有一個注冊設備號的函數如示:

register_chrdev(0, DEVICE_NAME, &pxa270_fops);假設本驅動程序的源代碼名字是s3c2410_led.c編譯驅動程序模塊的方法是把驅動程序復制到內核目錄下的drivers/char子目錄下,在drivers/char/Makefile中增加一行:obl-m +=s3c2410_led.o,然后在內核根目錄下執行make modules.就生成drivers/char/s3c2410_led.ko,再把它復制到開發板上,就可以使用insmod s3c2410_led.ko,rmmod s3c2410_led.ko了,此時,就可以執行本用戶程序了,結果如下:

3.2 LED驅動實驗

本實驗的主要目的是寫一個驅動程序來點亮開發板上的一顆LED燈。主要的程序核心還是集中在怎么給led燈引腳一個電平以及用戶程序中ioctl程序的使用。程序的核心代碼如下:

static struct file_operations s3c24xx_leds_fops = {.owner =

THIS_MODULE,.open

=

s3c24xx_leds_open,.ioctl =

s3c24xx_leds_ioctl, };static int s3c24xx_leds_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg){

if(arg > 4){

return-EINVAL;

}

switch(cmd){

case IOCTL_LED_ON:

s3c2410_gpio_setpin(led_table[arg], 0);

return 0;

case IOCTL_LED_OFF:

s3c2410_gpio_setpin(led_table[arg], 1);

return 0;

default:

return-EINVAL;

} } 編譯好模塊后,復制到開發板目錄下即可在開發板下執行,點亮led燈。

命令led_test 1 off/on,如此,就可以關閉或點亮一個led燈了!3.3 中斷按鍵控制LED實驗 核心代碼如下:

注冊中斷:request_irq(button_irqs[i].irq, buttons_interrupt, button_irqs[i].flags,button_irqs[i].name,(void *)&press_cnt[i]);注冊備:register_chrdev(BUTTON_MAJOR, DEVICE_NAME, &s3c24xx_buttons_fops);中斷函數:

static irqreturn_t buttons_interrupt(int irq, void *dev_id){

volatile int *press_cnt =(volatile int *)dev_id;

*press_cnt = *press_cnt + 1;/*

ev_press = 1;

wake_up_interruptible(&button_waitq);

return IRQ_RETVAL(IRQ_HANDLED);} 同理,把它的目標文件放到內核根目錄下的drivers/char編譯后,把生成的模塊文件復制開發板下,即可完成相應的任務,通過按鍵可以來控制led燈了,同時,可以通過命令cat /proc/devices, cat /proc/interrupt來查看設備及中斷的注冊情況!

六、實習總結、心得體會:

通過為期將近幾周的嵌入式操作系統實習,我收獲頗深。這次實習雖然短,可是收獲很大,感覺平時上課學到的東西都沒有這幾天學到的多。正所謂:“實踐是檢驗真理的唯一標準”。這次實習可以形象的概括為:“山重水復疑無路,柳暗花明又一村”。只有自己經歷過才會真正的懂,書本知識還遠遠不夠!

此次嵌入式操作系統實習給我最深的體會就是:理論+細心+實踐才能在實際 生產中體現所學知識的價值。

在嵌入式行業發展如此快速完善的今天,理論與細心與實際的完美結合才能讓自己在專業領域占有一席之地。在實習中,我初步了解了嵌入式處理器S3C2410的工作原理、也加深了對嵌入式處理器S3C2410的認識;也見識了關于嵌入式處理器的一些工作方式等。

幾周的嵌入式操作系統實習結束了,做了好幾個小實驗,有成功也有失敗,然而終究還是學會了很多東西。在整個實習期間,我體會到了自己的進步,并且從中也體會到了它的快樂。實習也讓我明白了:第一,通過實踐真正覺得自己可以做些什么了有點存在的小成就感;第二,通過嵌入式操作系統實習,加強了我們的動手實踐能力和設計創新精神。作為信息時代的大學生基本的動手能力是一切工作和創造的基礎和必要條件。第三,在嵌入式操作系統實習的這些日子里,大家的團隊精神得到了很大的加強,閉門就會造車那是不可能的事情。

在為期兩周的實習當中感觸最深的便是實踐聯系理論的重要性,當遇到實際問題時,只要認真思考,運用所學的知識,一步一步的去探索,是完全可以解決遇到的一般問題的。本次實習的目的主要是:使我們嵌入式操作系統及LINUX相關操作有一定的感性和理性認識,培養和鍛煉我們的實際動手能力。使我們的理論知識與實踐充分地結合,作到不僅具有專業知識,而且還具有較強的實踐動手能力,能分析問題和解決問題的應用型技術人才,為以后的順利就業作好準備。此次實習學到了很多課內學不到的東西,比如獨立思考解決問題,出現差錯的隨機應變,和與人合作共同提高,都受益非淺,今后的制作應該更輕松,自己也都能扛的起并高質量的完成項目。在此,感謝老師及其他老師的細心指導,也同樣謝謝其他各組同學的無私幫助!

七、參考資料:

1、雅默著.構建嵌入式LINUX系統[M].北京:中國電力出版社.2004年

2、孫瓊著.嵌入式LINUX應用程序開發詳解[M].北京:人民郵電出版.2003年 3、2410經典實驗指導書3.2 北京博創興業科技有限公司2410經典實驗箱配套教材

4、韋東山著.嵌入式LINUX應用開發完全手冊

北京:人民郵電出版

第二篇:操作系統課程設計報告

課程設計報告

題 目: 模擬請求頁式管理

課程名稱: 計算機操作系統 學 院: 信息工程學院

專 業: 計算機科學與技術

班 級: 14計本(1)學生姓名: * * * 學 號: 201403031** 指導教師: * * 成 績:

開課時間: 2016-2017 學年 一 學期

模擬請求頁式管理

第1章 需求分析

1.1設計要求

請求頁式管理是一種常用的虛擬存儲管理技術。本設計通過請求頁式存儲管理中頁面置換算法模擬設計,了解虛擬存儲技術的特點,掌握請求頁式管理的頁面置換算法。本實驗要求用Vc++或其他高級語言編寫和調試。

編寫程序實現:

(1)先進先出頁面置換算法(FIFO)(2)最近最久未使用頁面置換算法(LRU)最佳置換頁面置換算法(OPT)設計一個虛擬存儲區和內存工作區,編程序演示以上三種算法的具體實現過程,并計算訪問命中率。

1.2解決方案

首先確定實現語言使用c#實現圖形化界面,后確定要實現哪些功能,比如算法選擇,頁面添加,模擬控制。然后確定輸出結構以便于程序的測試和驗證。將基本框架建立后再進行編程。編程前進行算法結構分析最后編程實現。

1.3算法實現原理

1、先進先出置換算法(FIFO):

發生缺頁中斷時按照頁面進入內存順序總是淘汰最先進入內存的頁面。

2、最近最久未使用置換算法(LRU):

發生缺頁中斷時總是淘汰存在內存中最長時間未被使用的頁面。

3、最佳置換算法(OPT):

發生缺頁中斷時若一個或幾個頁面將來將不會被調用則按先進先出原則淘汰頁面,若將來都有調用則比較調用時刻選擇最遠時刻頁面淘汰。

4、缺頁率:缺頁次數占頁面調用次數的百分比。

第2章 概要設計

2.1數據設計

常變量:調用頁面最大數量(MaxN),內存最大頁面數(MaxM)待調用頁面數組:page_dd[MaxN]存放等待調用的頁面號

頁面數組專用指針 page_p,用于指向page_dd數組中正需調入內存的頁號 內存塊數組:Memery[MaxM],存放內存當前存放的頁號 缺頁計數器:count,記錄缺頁次數

內存塊狀態數組:M1[MaxN],M2[MaxN],M3[MaxN],記錄每次頁面調用結束后內存各塊的狀態

缺頁記錄數組s[MaxN],用于記錄頁面調用時是否產生缺頁中斷,初始化為是

2.2函數設計

1、頁面添加函數:void btnAdd_Click(object sender, EventArgs e)用于實現通過點擊按鈕實現數據輸入。

2、內存初始化函數:init(int[] a, int[] b,int []m1,int[]m2,int[]m3)參數有頁面數組、內存數組、狀態數組,采用先進先出算法對內存先進行裝滿 服務于先進先出頁面置換函數和最佳置換函數。

3、輸出函數:void display(int[]a,int[]m1,int[]m2,int[]m3,char[]c)用于輸出模擬結果,參數有頁面數組,內存數組,狀態數組,缺頁記錄數組。再模擬之后調用。

4、模擬控制函數:void btnmo_Click(object sender, EventArgs e)用于實現通過單擊模擬按鈕,根據用戶所選算法進行模擬并顯示結果。

5、先進先出算法模擬函數:

void FIFO(int[] a, int[] b,int[]m1,int[]m2,int[]m3,char[] s)用于實現先進先出算法模擬,參數有頁面數組,內存數組、內存狀態記錄數組,缺頁記錄數組。在模擬函數中調用。

6、最近最久未使用算法模擬函數:

void LRU(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s)用于 3 實現最近最久未使用算法模擬,參數有頁面數組,內存數組,內存狀態記錄數組,缺頁記錄數組。在模擬函數中被調用。

7、最近最久未使用函數輔助函數:void LUR_I(int[] a,int e)用于對最近最久未使用算法中所用輔助數組(記錄頁面存在時長)進行調整,參數有輔助數組及需調整的數據下標。在最近最久未使用函數中調用。

8、最佳置換算法模擬函數:

void OPT(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s)用于模擬最佳置換算法。參數有頁面數組,內存數組,內存狀態記錄數組,缺頁記錄數組。在模擬函數中被調用。

9、最佳置換算法輔助函數:void OPT_F(int[] a, int e)用于對最佳置換算法中的輔助數組進行調整。參數有輔助數組,需調整數據下標。在最佳置換算法中被調用。

10、重置函數:void btncz_Click(object sender, EventArgs e)用于重新選擇算法進行新的模擬。

2.3主要算法設計

1、初始化函數算法:

第一步:將第一個頁面調入內存,調整最佳置換算法輔助數組,缺頁計數器加一,保存內存數組狀態。

第二步:調用下一個頁面并判斷內存中是否有本頁面有轉第三步,無轉第四步。第三步:更改缺頁數組對應下標值,記錄當前內存狀態,調整最佳置換算法輔助數組,頁面指針指向下一頁。

第四步:將頁面調入內存,調整最佳置換算法輔助函數,缺頁計數器加一,保存內存數組狀態。若內存尚不滿轉第一步。具體見圖1初始化算法流程圖。

開始頁面調入內存缺頁計數器加一記錄內存狀態調用下一頁否否內存是否有該頁面是記錄內存狀態修改缺頁數組內存已滿是結束

圖1 初始化算法流程圖

2、先進先出頁面置換算法:

第一步:檢查內存中是否已有需調用頁面,有則轉第二步,無則轉第三步。第二步:記錄當前內存狀態,修改缺頁數組對應下標值。

第三步:內存中無需要調用的頁面,進行出隊操作,然后進行入隊操作,記錄內存塊狀態,缺頁計數器加一。

第四步:若頁面數組未被調用結束轉第一步。具體見圖2先進先出算法流程圖。

開始頁面調入內存該頁在內存中是否已存在是否否先出隊操作后入隊操作記錄內存狀態修改缺頁數組值記錄內存狀態缺頁計數器加一頁面調用結束是結束

圖2 先進先出算法流程圖

3、最近最久未使用置換算法:

第一步:將頁面調入內存,記錄內存狀態,缺頁計數器加一,調整輔助數組,頁面指針加一。

第二步:檢查內存中是否已有所需頁面,有轉第三步,無轉第一步。

第三步:修改缺頁數組對應下標記錄,記錄內存狀態,調整輔助數組,頁面指針加一。第四步:內存是否已滿,無則轉第一步,是則轉第五步。

第五步:檢查內存中是否有所需頁面,有則記錄當前內存狀態,修改缺頁數組對應下標值。無則轉第六步。

第六步:檢查輔助數組找出最大值并記錄其下標,置換內存中對應下標的數據,調整輔助數組,缺頁計數器加一。

第七步:頁面是否調用結束未結束則轉第五步。具體見圖3最近最久未使用算法流程圖。

開始調入頁面至內存記錄內存狀態計數器加一否調整輔助數組調用下一頁內存中是否已有該頁否內存已滿是通過輔助數組確定淘汰頁面是修改缺頁數組記錄內存狀態調整輔助數組否頁面置換記錄內存狀態計數器加一調用結束是結束

圖3 最近最久未使用算法

4、最佳置換算法:

第一步:檢查內存中是否已有所需頁面,有則記錄內存狀態,修改缺頁數組對應下標數值。無則轉第二步。

第二步:判斷內存中各頁面的未來調用情況,記錄是否還有調用,若有則記錄調用時刻。

第三步:分析調用情況,內存中頁面都在將來不會被調用轉第四步,有一個被調用轉第五步,有兩個被調用轉第六步,全被調用轉第七步。

第四步:查找輔助數組找到內存中存在時間最長的頁面進行置換,修改內存狀態,缺頁計數器加一,修改輔助數組。

第五步:查找到不會被調用的頁面,并根據輔助數組選擇最早進入內存的頁面將其置換。修改內存狀態,缺頁計數器加一,修改輔助數組。

第六步:查找輔助數組找到將來不需要在調用的頁面將其置換,修改輔助數組,記錄內存狀態,缺頁計數器加一。

第七步:查找輔助數組,找尋最晚被調用的頁面,將其置換。記錄內存狀態,修改輔助數組,缺頁計數器加一。

第八步:頁面是否調用完成,否則轉第一步。具體見圖4最佳置換算法流程圖

開始調入頁面記錄內存狀態計數器加一更新輔助函數是頁面已存在否向后檢查內存當前頁面調用情況所有頁面都不會再度調用否是一個頁面會調用否否是兩個頁面會調用是否查找輔助數組得到最先進入頁面通過輔助數組得到不會再調用的頁面通過輔助數組獲取最晚調用的頁面通過輔助數組得到另外兩個頁面中最先進入的頁面置換頁面記錄內存狀態計數器加一更新輔助函數頁面調用結束是結束

圖4 最佳置換算法流程圖 2.4界面設計

采用c# 設計windows窗體應用程序,使用下拉列表框選擇算法,通過按鈕添加待調用的頁面。通過文本控件顯示模擬結果。顯示樣式:第一行:算法名稱;

第二行:調用頁面順序;

第三行至第五行顯示內存在每調用一次頁面后的狀態;

第六行:是否缺頁;

最后一行顯示缺頁率;

第3章 詳細設計與實現

3.1函數設計

1、添加按鈕功能實現代碼

主要功能:實現單擊一次添加一個調用頁面,并給出相應的提示,如正在輸入的是第幾次調度頁面,在輸入為空時能夠彈出對話框提示用戶,在輸入完成時為避免數組越界應在輸入完成時隱藏;輸入過程中始終保證時輸入焦點。private void btnAdd_Click(object sender, EventArgs e){ if(txtAdd.Text!= “")//輸入不為空才能繼續輸入 { page_dd[i_add] = Convert.ToInt32(txtAdd.Text);/*將輸入值賦值給頁面數組*/ txtShow.Text += txtAdd.Text + ” “;/*顯示供用戶查閱*/ i_add++;txtAdd.Clear();/*清空*/ if(i_add == MaxN)//輸入結束時 { txtAdd.ReadOnly = true;//不允許繼續輸入 btnAdd.Hide();//按鈕隱藏 return;} txtAdd.Focus();//設置為輸入焦點

label2.Text = ”第“ +(i_add + 1)+ ”次調度頁面:“;/*提示用戶正在輸入的是第幾次調度頁面*/ } /*輸入為空則彈出對話框提示用戶輸入為空*/ else { MessageBox.Show(”請輸入調用頁面!“, ”輸入為空“, MessageBoxButtons.OK, MessageBoxIcon.Warning);txtAdd.Focus();} }

2、初始化函數

主要功能:將內存一先進先出方式填滿,并記錄每個頁面進入時間,服務于先進先出頁面置換算法和最佳置換算法。

void init(int[] a, int[] b,int []m1,int[]m2,int[]m3){ /*內存未滿時循環*/ for(int i = 0;i < MaxM&&page_p

//調整輔助數組將剛進入內存的頁面的對應時間 OPT_F(O_Q ,i); count++;//缺頁計數器加一 m1[page_p] = b[0];//保存內存狀態 m2[page_p] = b[1];m3[page_p] = b[2];page_p++;//調用下一頁面

//檢查內存中是否原先就有需要的頁面; for(int j = 0;j <= i&&page_p

s[page_p] = 'F';//缺頁數組對應數據更改 m1[page_p] = b[0];//記錄內存狀態 m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q,-1);//調整最佳置換算法輔助函數 page_p++;//調用下一頁 j =-1;//重新開始尋找 } } } }

3、先進先出頁面置換函數

主要功能:根據先進先出算法要求在產生缺頁中斷時采用先進先出方式確定淘汰頁面,并在每次頁面調用時記錄下內存狀態,缺頁次數;采用循環隊列使得每次出隊的一定是最先進入內存的。

private void FIFO(int[] a, int[] b,int[]m1,int[]m2,int[]m3,char[] s){ int Fpage_p = page_p;int front, rear;//定義隊列對手和對尾指針并初始化 front = 0;rear = MaxM1;int sa;for(;Fpage_p < MaxN;Fpage_p++){ sa = 0;for(int i = 0;i < MaxM;i++)//檢查內存中是否已有要調用的頁面。

{ if(b[i] == a[Fpage_p]){ m1[Fpage_p] = b[0];m2[Fpage_p] = b[1];m3[Fpage_p] = b[2];s[Fpage_p] = 'F';sa = 1;break;} } if(sa == 0){ front =(front + 1)% MaxM;

rear =(rear + 1)% MaxM;b[rear] = a[Fpage_p];m1[Fpage_p] = b[0];m2[Fpage_p] = b[1];m3[Fpage_p] = b[2];count++;} else continue;} } /*最近最久未使用算法輔助數組調整函數*/ private void LUR_I(int[] a,int e){ int temp;temp = a[e];a[e] = 1;for(int i = 0;i < MaxM;i++){ if(a[i] < temp && i!=e)a[i]++;} } /*最佳置換算法輔助數組調整函數*/ private void OPT_F(int[] a, int e){ if(e!=-1){ a[e] = 0;for(int i = 0;i < MaxM;i++){ if(i!= e)a[i]++;} } else for(int i = 0;i < MaxM;i++){ a[i]++;} } /*最近最久未使用算法*/ private void LRU(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s){

int[] L_Q = new int[MaxM]{3,3,3};int sa;for(int i = 0;i < MaxM && page_p < MaxN;i++){ b[i] = a[page_p];//調入內存 count++;m1[page_p] = b[0];//保存內存狀態 m2[page_p] = b[1];m3[page_p] = b[2];LUR_I(L_Q, i);page_p++;for(int j = 0;j <= i && page_p < MaxN;j++){ if(b[j] == a[page_p]){ s[page_p] = 'F';m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];LUR_I(L_Q, j);page_p++;j =-1;} } } for(;page_p < MaxN;page_p++){ sa = 0;for(int i = 0;i < MaxM;i++)//用的頁面。{ if(b[i] == a[page_p]){ m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];s[page_p] = 'F';LUR_I(L_Q, i);sa = 1;break;} } if(sa == 0){

檢查內存中是否已有要調40 for(int i = 0;i < MaxM;i++){ if(L_Q[i] == 3){ b[i] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];LUR_I(L_Q, i);break;} } count++;} else continue;} } /*最佳置換算法*/ private void OPT(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s){ int sa;int O_p;int Ocount;int[] OPT_I=new int [MaxM ]{-1 ,-1 ,-1 };int[] OPT_J=new int [MaxM]{MaxN ,MaxN ,MaxN };for(;page_p < MaxN;page_p++){ for(int i = 0;i < MaxM;i++){ OPT_I[i] =-1;//刷新狀態數組 OPT_J[i] = MaxN;} sa = 0;for(int i = 0;i < MaxM;i++)//檢查內存中是否已有要調用的頁面。

{

if(b[i] == a[page_p]){ m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q,-1);

s[page_p] = 'F';sa = 1;break;} } if(sa == 0)//缺頁 { Ocount = 0;for(int i = 0;i < MaxM;i++){ O_p = page_p + 1;for(;O_p < MaxN;O_p++){ if(b[i] == a[O_p]){ Ocount++;OPT_I[i] = 1;OPT_J[i] = O_p;break;} } } switch(Ocount){ case 0://全部頁面以后都不會再度調用 int temp = 0;for(int i = 0;i < MaxM;i++){ if(O_Q[i] > O_Q[temp])temp = i;} b[temp] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q ,temp);count++;break;case 1://有一個頁面將在以后調用 temp = 0;for(int i = 0;i < MaxM;i++){ if(OPT_I[i]!= 1 && O_Q[i] > O_Q[temp])temp = i;

} b[temp] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q ,temp);count++;break;case 2: for(int i = 0;i < MaxM;i++){ if(OPT_I[i] ==-1){ b[i] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q, i);count++;} } break;case 3: int p = 0;for(int i = 0;i < MaxM;i++){ if(OPT_J[i] >OPT_J[p])p = i;} b[p] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q, p);count++;break;} } } } /*重置函數*/ private void btncz_Click(object sender, EventArgs e){ comboBox1.SelectedIndex = 0;

txtAdd.Text = ”“;page_p = 0;i_add = 0;count = 0;//txtShow.Text = ”";for(int i = 0;i < MaxM;i++)Memery[i] =-1;for(int i = 0;i < MaxN;i++)s[i] = 'T';} } }

第三篇:操作系統課程設計報告

操 作 系 統

學院:計算機科學與技術學院

班級:計112

學號:1113022032

姓名:

一、實驗名稱:

用C++實現驅動調度算法、頁面替換算法、銀行家算法、處理器調度算法

二、實驗要求:

書寫實驗報告,包括的內容有:

(1)實驗題目

(2)程序中使用的數據結構及主要文字說明

(3)帶有注釋的源程序

(4)執行程序說明,表明各進程控制快的初始狀態,以及各算法的運行狀態

(5)通過實驗后的收獲與體會及對實驗的改進意見和見解

二、實驗目的:

通過自己編程來實現各類操作系統算法,進一步理解操作系統的概念及含義,提高對操作系統的認識,同時提高自己的動手實踐能力。加強我們對各類算法的理解。

三、實驗內容:

1、實現頁面替換算法

(1)FIFO 先進先出頁面替換算法

(2)LRU最近最少使用頁面替換算法

(3)LFU最少使用頻率頁面替換算法

2、銀行家算法

3、實現驅動調度算法

(1)先來先服務算法

(2)電梯算法

(3)掃描算法

4、實現處理器調度

(1)先進先出處理器調度

(2)時間片輪轉法

(3)優先級調度

四、實驗原理:

1、頁面替換算法

先進先出頁面置換算法:該算法總是淘汰最先進入內存的頁面,即選擇在內存中駐留時間最久的頁面加以淘汰。將已調入內存的頁面按先后次序鏈接成一個隊列,將最先調入的頁面與新頁面進行置換

最近最久未使用置換算法:該算法是利用“最近的過去”作為“最近的將來”,將最近最久未使用的頁面加以淘汰。將已調入內存的頁面按先后順序鏈接成一個隊列,為每一個頁面增加一個訪問字段,用來記錄一個頁面自上次被訪問以來所經歷的是時間t,當需淘汰一個頁面時,選擇現有頁面中其t值最大,即最近最久未使用的頁面加以淘汰

2、銀行家算法

先對用戶提出的請求進行合法性檢查,即檢查請求的是不大于需要的,是否不大于可利用的。若請求合法,則進行試分配。最后對試分配后的狀態調用安全性檢查算法進行安全性檢查。若安全,則分配,否則,不分配,恢復原來狀態,拒絕申請。

3、驅動調度算法

先進先出算法(FIFO):總是嚴格按時間順序對磁盤請求予以處理。算法實現簡單、易于理解并且相對公平,不會發生進程餓死現象。但該算法可能會移動的柱面數較多并且會

經常更換移動方向,效率有待提高

電梯調度算法:總是將一個方向上的請求全部處理完后,才改變方向繼續處理其他請求。

掃描算法(scan algorithm):總是從最外向最內(或最內向最外)進行掃描,然后在從最內向最外(或最外向最內)掃描。該算法與電梯調度算法的區別是電梯調度在沒有最外或最內的請求時不會移動到最外或最內柱面。

4、處理器調度算法

先進先出處理器調度:按照作業進入系統后備工作隊列的先后次序來挑選作業,先進入系統的作業將優先被挑選進入主存,創建用戶進程,分配所需資源,然后移入就緒隊列。

時間片輪轉法調度算法:調度次序每次把CPU分配給就緒隊列進程/線程使用規

定的時間間隔,就緒隊列中每個進程/線程輪流的運行一個時間片,當時間片耗盡時,就強迫當前運行進程/線程讓出處理器,轉而排列到就緒隊列尾部,等候下一輪調度。

優先級調度:根據確定的優先級來選取進程/線程,總是選擇就緒隊列中的優先

級最高者投入運行,即優先級越高,先被調用。

五、數據結構設計

對操作系統的各類算法設計數據結構如下:

頁面替換算法:void FIFO();void LRU();void LFU();

銀行家算法:void Init()初始化算法

void Bank()銀行家算法

bool Safe()安全性算法

驅動調度算法:

struct MagneticHead//磁頭構成{

int site;

int count;

bool direct;

};

struct Range//磁盤磁道范圍

{

int mStart;

int mEnd;

};

struct RequestList//請求序列

{

int site;

bool state;

};

struct Data//基本數據集合{

MagneticHead magneticHead;

RequestList *requestList;

int *executeList;

Range range;

int length;

};

處理器調度:

typedef struct pcb//時間片輪轉法

{

char pname[N];

int runtime;

int arrivetime;

char state;

struct pcb*next;

}PCB;

typedef struct PCB1//先進先出服務

{

char ID[3];//進程號

char name[10];//進程名

char state;//運行狀態

floatarrivetime;//到達時間

floatstarttime;//進程開始時間

floatfinishtime;//進程結束時間

floatservicetime;//服務時間

float turnaroundtime;//周轉時間

float weightedturnaroundtime;//帶權周轉時間

struct PCB1 *next;//指向下個進程

}pcb1;

struct pcb2 {優先級調度

char name[10];

char state;

int super;

int ntime;

int rtime;

struct pcb2* link;

}*ready=NULL,*d;

typedef struct pcb2 PCB2;

六、課程設計總結

在本次課程設計中,就是講平時所做的實驗結合起來,實現操作系統的各類算法,了解操作系統的運行原理以及其基本概念,更好的將操作系統的原理很好的展現出來。同時,在本次實驗中遇到了很多問題,需要我們仔細的檢查和修改。其次,實驗中為了能更好的體現各類算法的運行情況,需要做一個清晰的界面,以能清楚地看出運行結果。

第四篇:操作系統課程設計報告

操作系統課程設計報告

專 業:計算機科學與技術 學 號: 姓 名: 提交日期:

操作系統課程設計報告

【設計目的】

(1)本實驗的目的是通過一個簡單多用戶文件系統的設計,加深理解文件系統的內部功能和內部實現。

(2)結合數據結構、程序設計、計算機原理等課程的知識,設計一個二級文件系統,進一步理解操作系統。

(3)通過分對實際問題的分析、設計、編程實現,提高學生實際應用、編程的能力 【設計內容】

為Linux系統設計一個簡單的二級文件系統。要求做到以下幾點: 1.可以實現下列幾條命令:

login 用戶登錄

dir 列目錄

create 創建文件

delete 刪除文件

open 打開文件

close 關閉文件

read 讀文件

write 寫文件

cd 進出目錄

2.列目錄時要列出文件名,物理地址,保護碼和文件長度 3.源文件可以進行讀寫保護 【實驗環境】 Windows xp/7 C++/VC++

【相關知識綜述】

1、文件系統

文件系統是操作系統用于明確存儲設備(常見的是磁盤,也有基于NAND Flash的固態硬盤)或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件機構稱為文件管理系統,簡稱文件系統。文件系統由三部分組成:文件系統的接口,對對象操縱和管理的軟件集合,對象及屬性。從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲并對存入的文件進行保護和檢索的系統。具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,當用戶不再使用時撤銷文件等。

2、位示圖

位示圖是利用二進制的一位來表示磁盤中的一個盤塊的使用情況。當其值為“0”時,表示對應的盤塊空閑;為“1”時,表示已經分配。有的系統把“0”作為盤塊已分配的標記,把“1”作為空閑標志。(它們的本質上是相同的,都是用一位的兩種狀態標志空閑和已分配兩種情況。)磁盤上的所有盤塊都有一個二進制位與之對應,這樣,由所有盤塊所對應的位構成一個集合,稱為位示圖。

操作系統課程設計報告

【設計思路】

本文件系統采用兩級目錄,其中第一級對應于用戶賬號,第二級對應于用戶帳號下的文件。另外,為了簡便文件系統未考慮文件共享,文件系統安全以及管道文件與設備文件等特殊內容。

首先應確定文件系統的數據結構:主目錄、子目錄及活動文件等。主目錄和子目錄都以文件的形式存放于磁盤,這樣便于查找和修改。

用戶創建的文件,可以編號存儲于磁盤上。如:file0,file1,file2?并以編號作為物理地址,在目錄中進行登記。

【程序主要流程圖】

驗證是否成

功?

目錄

右鍵進行選擇 操作

新建目錄新建文件打開文件

結束

開始登錄刪除屬性 2

操作系統課程設計報告

【源程序清單】

typedef struct

//文件結構體 /*the structure of OSFILE*/ { int fpaddr;

/*file physical address*/

int flength;

/*file length*/

int fmode;

/*file mode:0-Read Only;1-Write Only;2-Read and Write;3-Protect;*/

char fname[MAXNAME];

/*file name*/ } OSFILE;

typedef struct

//用戶文件目錄結構體 user file directory /*the structure of OSUFD*/ { char ufdname[MAXNAME];

/*ufd name*/ OSFILE ufdfile[MAXCHILD];

/*ufd own file*/ }OSUFD;

typedef struct

//登陸

/*the structure of OSUFD'LOGIN*/ { char ufdname[MAXNAME];

/*ufd name*/

char ufdpword[8];

/*ufd password*/ } OSUFD_LOGIN;

typedef struct

//文件打開模式 /*file open mode*/ { int ifopen;

/*ifopen:0-close,1-open*/

int openmode;

/*0-read only,1-write only,2-read and write,3-initial*/ }OSUFD_OPENMODE;

void DeleteF()/*Delete File*/ { int i,j,k=0;char str[255],str1[255];char fname[MAXNAME];k=ExistD(dirname);//獲取用戶的序號

printf(“Please input filename:”);gets(fname);//獲得需要打開的文件名fname

for(i=0;i

if(strcmp(strupr(ufd[k]->ufdfile[i].fname),strupr(fname))==0)

{

操作系統課程設計報告

}

}

void OpenF()/*Open File*/ { int i,k=0;char fname[MAXNAME];//printf(“nnC:%s>”,strupr(dirname));k=ExistD(dirname);printf(“Please input filename:”);gets(fname);//獲得需要打開的文件名fname

for(i=0;i

if(strcmp(strupr(ufd[k]->ufdfile[i].fname),strupr(fname))==0)

{

ifopen[k][i].ifopen=1;//打開文件

ifopen[k][i].openmode=ufd[k]->ufdfile[i].fmode;//將讀寫屬性賦值

//test// printf(“i=%d,k=%dn”,i,k);

///test// printf(“openmode=%dn”,ifopen[k][i].openmode);

printf(“Open file successfully!n”);

break;//打開文件則跳出循環 itoa(ufd[k]->ufdfile[i].fpaddr,str,10);//itoa函數,把數字轉換成字符串

strcpy(str1,“file”);strcat(str1,str);strcpy(str,“c:osfilefile”);strcat(str,str1);strcat(str,“.txt”);//str為文件的物理路徑

if(remove(str)==0)

//調用remove函數刪除 第k個用戶的第i個文件ufd[k]->ufdfile[i]

{

fpaddrno[ufd[k]->ufdfile[i].fpaddr] = 0;//位示圖置為0,表示沒被占用

for(j = i;j<=fcount[k]-1;j++)//文件順序往前移一位

ufd[k]->ufdfile[j] = ufd[k]->ufdfile[j+1];

fcount[k] = fcount[k]-1;//文件數-1

printf(“Delete file successfully!n”);

//除了刪除原文件,還要 刪除dir中的東西

} else

printf(“Delete file fail!n”);break;}

操作系統課程設計報告

}

} }

void CloseF()/*Close File*/ {

int i,k=0;char fname[MAXNAME];

k=ExistD(dirname);printf(“Please input filename:”);gets(fname);//獲得需要關閉的文件名fname

for(i=0;i

if(strcmp(strupr(ufd[k]->ufdfile[i].fname),strupr(fname))==0)

{

ifopen[k][i].ifopen=0;//關閉文件

ifopen[k][i].openmode=4;//fmode改為初始值4

printf(“Close file successfully!n”);

break;

}

} }

void WriteF()/*Write File*/ { int i,k,n=0;char fname[MAXNAME];char str[255],str1[255];int flag=1;

if(strcmp(strupr(ltrim(rtrim(dirname))),“")==0)

{

printf(”nError.Please convert to ufd dir before read.n“);

wgetchar=1;

return;} printf(”nCaution:Open file firstn“);printf(”Opened File(s)List:n“);k=ExistD(dirname);

操作系統課程設計報告

for(i=0;i

//文件屬性為只寫或者是讀寫才能write

{

printf(”%15s“,ufd[k]->ufdfile[i].fname);

n++;} if((n%4==0)&&(n!=0))printf(”n“);

} printf(”n%d files openned.n“,n);

if(n==0)wgetchar=1;if(n!=0){ printf(”nPlease input FileName:“);gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){

if(ifopen[k][i].ifopen==1)

{

if((ifopen[k][i].openmode==1)||(ifopen[k][i].openmode==2))

{

itoa(ufd[k]->ufdfile[i].fpaddr,str,10);

strcpy(str1,”file“);

strcat(str1,str);

strcpy(str,”c:osfilefile“);

strcat(str,str1);

strcat(str,”.txt“);//物理路徑

int length=0;

char c;

printf(”Please input text('#' stands for end):n“);

fp_file=fopen(str,”ab+“);//在文件末尾加 add bit

while((c=getchar())!='#')//以#為結尾

{

fputc(c,fp_file);

if(c!='n')length++;

}

//fprintf(fp_file,”n“);

操作系統課程設計報告

fclose(fp_file);

ufd[k]->ufdfile[fcount[i]-1].flength += length;//原長度加輸入長度

printf(”n'%s' has been written successfully!n“,fname);

}

else

{

printf(”nError.'%s' has been opened with WRITE ONLY mode.It isn't read.n“,fname);

wgetchar=1;

}

}

else

{

printf(”nError.'%s' is in closing status.Please open it before readn“,fname);

wgetchar=1;

}

}

else

{

printf(”nError.'%s' does not exist.n",fname);

wgetchar=1;

} } }

操作系統課程設計報告

【測試結果】

1、創建用戶

2、創建文件,并且打開讀取文件

操作系統課程設計報告

3、寫文件

4、刪除文件

操作系統課程設計報告

【設計總結】

這兩周的課程設計時間非常短,從中學到了很多知識,也為我們的學習提供了良好的實踐平臺。首先,通過老師的細心指導和同學們的相互幫助,讓我對題目【二級文件系統】有了進一步了解。接下來,主要是研究老師所給的大部分代碼,參考他的基本思路,并且思考每一個結構體在代碼中的具體作用。這期間和一些同學交流了各自的思路,在交流中,大家漸漸的明確了這個程序的思路、框架結構等。我們所做的主要是補充了刪除文件,打開文件,關閉文件,寫文件這幾個部分。

代碼編寫完了之后,實現了題目所要求的基本功能,但是在測試的過程中,還發現了這個程序存在各種各樣的bug。不斷的測試修改后,得到完善。

這次課設最大的收獲在于:學會交流以及相互幫助。在大家的交流溝通之中,我們解決了一個又一個難題。

在這次課設中,我還意識到,要把這門課真真正正地學好,不單單只是為了能夠應付考試,平時還要多加學習,多加努力才對。

【參考文獻】

【1】C語言程序設計(第三版)譚浩強

【2】計算機操作系統教程(第三版).張堯學 史美林 張高

【3】計算機操作系統,西安電子科技大學出版社,方敏主編,2004.8

第五篇:嵌入式操作系統課程報告

華北水利水電大學

North China University of Water Resources and Electric Power

嵌入式操作系統課程報告

題目 嵌入式系統課程綜和論述

學 院 物理與電子學院

專 業 電子信息工程

姓 名 李天澤

學 號 201816516

組 員

完成時間 2020.12.22

目 錄

一、嵌入式系統的介紹

(1)、嵌入式系統的概念……………………………………3

(2)、嵌入式系統的特點……………………………………4

二、嵌入式系統的發展和應用……………………………5

三、總結和心得……………………………………………7

參考文獻……………………………………………7

附錄…………………………………………………8

摘要:

如今,嵌入式系統經過半個多實際的發展和革新,在各個產業都可以看見它的身影。在電子消費領域,它已經廣泛應用于手機、VCD、數字電視和路由器等常見家用電器和電子產品,或許在你的家里有著幾十甚至幾百個微型嵌入式計算機無時無刻地不在為你服務。

在工業控制方面,一輛豪華轎車的控制系統就包含著至少50個嵌入式微處理器,它們分布于火花塞、傳動軸和安全氣囊等等。而一架先進的飛機,一臺人造衛星就可能包含著幾十套嵌入式系統和上百臺微型嵌入式計算機,沒有這些裝載,飛機和衛星的控制系統就不能有效地工作,它們的導航系統就不能滿足嚴格的要求。

在通信領域也有著數不勝數的嵌入式系統的應用,由于帶寬網絡的發展,交換機、路由器和各種傳輸設備等都逐漸需要更多的嵌入式系統來滿足它們互聯的需求,而這些基于32位的嵌入式系統品種多樣,絕大多數都價格低廉,能夠為企業和家庭的網絡選擇提供更加廉價而多樣的方案。

一、嵌入式系統的介紹

1、嵌入式系統的概念:

上世紀的40年代人類社會誕生了當時最偉大的發明之一——計算機。1946年賓夕法尼亞大學研制出了世界上第一臺計算機“ENIAC”,吹響了人類向信息時代進發的號角。如今半個多世紀過去了,總體來看,計算機已經經歷了兩個大的發展階段:大型計算機階段和個人中小型計算機階段。而今后,計算機技術將邁入下一個充滿機遇和挑戰的新階段—— “無處不在的計算機”階段,即“后PC發展階段”。“無處不在的計算機”是指在數以千計乃至萬計的計算機之間彼此相互關聯,其與使用者的比例高達100%,這些計算機中包括有傳統的通用式計算機和嵌入式計算機,而后者占絕大多數,可以達到95%的比例。

施樂公司研究中心的主任Mark Weiser 認為:“以長遠的發展來看,PC和計算機工作站將逐漸衰落,因為計算機將會變得無處不在,它們會在墻上,在手腕上,在口袋里等等,計算機將會像手寫紙一樣,隨用隨取,伸手可得。”

目前全世界范圍的計算機研究者都在逐步形成一種共識,那就是在計算機將來的發展中,它必然不會成為像科幻電影中的那種會背叛人類,傷害人類的機械怪物,恰恰相反它們將變得小巧玲瓏而且無處不在。它們會出現在任何你能看的見、聽得到、摸得著的地方,功能強大而且隨處可用,這就是“無處不在的計算機”。

嵌入式計算機系統就是所謂的“看不見的計算機”,一般情況下它只是運行平臺,并不能作為獨立的開發平臺來使用。而且它不能夠被用戶編程,對用戶的I/O接口是專用的。所以不嚴謹地說:任意包含可編程計算機的設備而且這種設備不是作為通用計算機而設計的都可以稱作嵌入式系統。

時至今日嵌入式系統已經逐漸滲透到人們的日常生活中,但因為其不同的應用形式和相異的名稱,目前對嵌入式系統還沒有一個統一的定義。但一般認為,它有以下概念:

(1)嵌入式系統的中心是應用功能,基礎是計算機技術,其軟件和硬件可以裁剪,對應用系統的功能、可靠性、成本、體積大小和功率損耗都有十分嚴格的要求和指標。

(2)國際電氣和電子工程師協會認為嵌入式系統的定義是“Device used to control, monitor, or assist the operation of equipment , machinery or plants.”

(3)嵌入式系統是計算機技術、半導體技術、電子技術等與各個行業的具體應用相結合后的產物,是一個技術集中、資源集中、應用高度分散、技術不斷革新的集成系統。

2、嵌入式系統的特點:

1)嵌入式系統通常都是多樣的有特定應用功能的軟硬件綜合體,用于特定的任務,其硬件和軟件設計都是高效而簡潔的。其中嵌入式軟件的應用程序和操作程序是一體化的,不同于傳統的通用計算機操作系統和應用程序有著分明的界限。

2)嵌入式系統能夠受到多個處理器和體系結構的支持,不同于通用的計算機只能夠使用少數的處理器類型和體系結構。目前已經生產有上千種嵌人式微處理器和幾十種微處理器的體系結構,其中比較主流常見的有ARM,MIPS, PowerPC,X86和SuperH等。

4)嵌入式系統有實時性和可靠性的特點,其主要表現在:目前絕大多數實時操作系統都是嵌人式系統;嵌人式系統都有實時性的要求,其軟件通常都是固化或直接加載到內存中運行的,啟動十分快速

另外,嵌人式系統通常都有處錯能力和自動復位的功能,目前在絕大多數嵌式系統中都包含著用于保證系統運行可靠性的軟硬件處理機制,比如看門狗定時器和內存保護重啟機制等。

5)嵌入式系統通常都使用可以適應多種類型處理器、可裁剪量輕、實時性和可靠性高以及可以固化的。同嵌入式微處理器,嵌入式的操作系統也是多種多樣的,不僅可以支持多種處理器,還可以進行裁剪量輕來匹配應用的功能,而且規模較小,能夠節省資源等等。

二、嵌入式系統的發展和應用

第一代電子計算機體積大,耗電快,而且可靠性和實時性都無法滿足嵌入式計算的要求。到了20世紀60年代,由晶體管、磁芯存儲制造的第二代計算機開始用于航海航空等領域,它的CPU能夠處理從電子系統傳來的信號,具有了數據總線的一些基本特性。而與此同時,嵌人式計算機也逐步應用于工業和制造等方面。

至60年代末,采用集成電路的第三代計算機問世,1965年發射Gemini3號是人們第一次使用機載數字計算機。而后的阿波羅探測飛船則使用了嵌人式計算機系統來提供和保障人機的交互功能來用于引導飛行。1963年DEC公司推廣了第一臺商用小型機,它具有嵌入式系統的結構,具備單總線結構、高速寄存器和實時性、可靠性強的中斷系統以及交叉存取功能,標志著嵌入式系統的興起。

1971 年,英特爾公司成功推出了世界上第一片微處理器Intel 4004。它的體積小、質量輕、價格實惠、使用方便,在當時銷量很好,Intel公司將它進一步改進后推出了4位的微處理器4040和8位的8008。

1973-1977 年短短四年之間全球許多廠家推出了各種各樣的8位微處理器,其中比較流行的有英特爾公司的8080/ 8085系列,摩托羅拉公司的6800/6802系列,齊洛格公司的Z80和羅克韋爾公司的6502等。這些微處理器的廣泛應用為嵌入式系統開辟了廣闊的市場,促成了嵌入式系統的快速發展。計算機廠商開始以插件的形式為用戶提供所需的OEM產品,并構成符合用戶要求的微型控制計算機,嵌入到系統設備中。

嵌入式系統的大發展還要歸功于20世紀80年代軟件技術的進步。最初的嵌入式計算機的軟件都是十分專用的,其程序也只能用匯編語言來編寫,因此嵌入式系統的開發周期過長,效率太低,不利于廣泛地推廣和應用。得益于微電子技術的進步,嵌入式計算機的軟件開發不再局限于匯編語言,可以使用C或PL等高級語言,是編程更加多樣和簡潔化,加快了嵌入式系統的開發效率。時間步入20世紀90年代,當時對分布控制、柔性制造和數字通信電等技術有著巨大需求,而這種需求也刺激著嵌人式系統的軟硬技術的革新和發展,促進了嵌入式系統的應用擴大化。

如今,嵌入式系統經過半個多實際的發展和革新,在各個產業都可以看見它的身影。在電子消費領域,它已經廣泛應用于手機、VCD、數字電視和路由器等常見家用電器和電子產品,或許在你的家里有著幾十甚至幾百個微型嵌入式計算機無時無刻地不在為你服務。

在工業控制方面,一輛豪華轎車的控制系統就包含著至少50個嵌入式微處理器,它們分布于火花塞、傳動軸和安全氣囊等等。而一架先進的飛機,一臺人造衛星就可能包含著幾十套嵌入式系統和上百臺微型嵌入式計算機,沒有這些裝載,飛機和衛星的控制系統就不能有效地工作,它們的導航系統就不能滿足嚴格的要求。

在通信領域也有著數不勝數的嵌入式系統的應用,由于帶寬網絡的發展,交換機、路由器和各種傳輸設備等都逐漸需要更多的嵌入式系統來滿足它們互聯的需求,而這些基于32位的嵌入式系統品種多樣,絕大多數都價格低廉,能夠為企業和家庭的網絡選擇提供更加廉價而多樣的方案。

時至今日,嵌入式系統的應用已經從微至著,廣泛分布。但它還在不斷地更新發展,其構成的計算機也會變得更小巧,更靈敏,更高效,更智能,相信在未來的某一天,會如Mark Weiser所說的那樣:“它們會在墻上,在手腕上,在口袋里,就像手寫紙一樣,隨用隨取,伸手可得。”

三、總結和心得

嵌入式系統作為一門計算機開發的學科,有著不同于傳統通用計算機系統的特點和概念,具有獨特長處。同時它的應用遍布于電子消費、通信工程、工業控制和軍事國防等多種領域,其發展前景是非常廣闊的,是一門十分值得深入學習和研究的學科。

通過一個學期的學習,我了解了許多嵌入式實時操作系統的應用知識,比如“任務的管理和調度”、“同步、互斥與通信”以及“中斷和時間管理”等全新的理論知識,同時也通過多次的實驗操作理解了對嵌入式系統軟硬件工作方式和應用。所謂溫故而知新,通過撰寫課程報告,我對嵌入式系統的各個方面有了新的了解,大大提高了對這門學科的興趣,在今后的學習中,我也會更加深入地去學習這門課程的相關內容,豐富自己的知識領域,開闊眼界,掌握更多的技能,為自己將來的發展做好鋪墊。

參考文獻:

甄鵬------《嵌入式實時Linux的移植及應用技術的研究》2008,(02)

郭軍------《基于Petri網的嵌入式系統高層級設計方法與技術研究》2007,(04)

吳敏------《基于嵌入式的家庭網關控制平臺的研究與設計》2007,(05)

劉青云;焦鉻-------《嵌入式Web Service模型實現及應用》2019,(01)

田婧---------《嵌入式μCOSⅡ在DSP中的移植與應用研究》2007,(04)

附錄

附查重報告:

“"

下載嵌入式操作系統程課程設計報告word格式文檔
下載嵌入式操作系統程課程設計報告.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    嵌入式課程設計報告

    福建工程學院 《嵌入式系統》課程設計 報告書 題目:基于S3C2440設備驅動及其界面設計班級:姓名:學號:指導老師:陳靖,張平均,李光煬目錄 一、設計課題 ..................................

    嵌入式操作系統實驗報告

    實驗一 嵌入式開發環境的建立 一、實驗目的 通過此實驗系統,讀者可以了解嵌入式實時操作系統 uC/OS-II 的內核機制和運行原理。本實驗系統展示了 uC/OS-II 各方面的管理功能,......

    操作系統課程設計

    操作系統課程設計 注意事項: 0. 請每位同學必須按時提交課程設計報告(包括電子版和紙質版),算入期末成績 1. 在三個題目中選擇一個 2. 如果選擇題目(一)進程調度算法,要求實現其中2......

    操作系統課程設計

    湖北民族學院信息工程學院11級計算機專業操作系統課程設計 (操作系統課程設計)連續動態分區內存 管理模擬實現 學生姓名: 韓 慧 學生學號: 031140312 班 級: 031140--3 0311401、......

    操作系統課程設計

    長春理工大學 軟件學院 0813111班 27號 姓名:丁為勝 一. 概述 1、課程設計目的及任務課程設計地點及要求 每個學生一臺微機,需要安裝windows98或windows2000操作系統,配備VC、VB......

    操作系統課程設計

    1 引言 操作系統是計算機科學與技術專業的主要專業基礎課和主干課。操作系統對計算機系統資源實施管理,是所有其他軟件與計算機硬件的唯一接口,所有用戶在使用計算機時都要得......

    計算機操作系統 課程設計報告(推薦)

    操作系統課程設計報告 時間:2010-12-20~2010-12-31 地點:信息技術實驗中心 計算機科學與技術專業 2008級2班15號 楊 燁2010-12-31 信息工程學院計算機科學與技術082班 目錄 一......

    重郵操作系統課程設計報告

    操作系統課程設計 班級: 姓名:學號: 時間: 年 月 日 指導教師: 實驗題目: 操作系統課程設計 實驗目的: 1、 掌握Linux操作系統安裝的一般方法 2、 掌握Linux 內核升級一般方法 3......

主站蜘蛛池模板: 女人高潮被爽到呻吟在线观看| 久久影院午夜伦手机不四虎卡| 欧洲精品无码一区二区三区在线播放| 日本人成网站18禁止久久影院| aaaaaa级特色特黄的毛片| 亚洲精品在看在线观看| 亚洲精品nv久久久久久久久久| 国产亚洲人成网站观看| 日本午夜免费福利视频| 精品国产这么小也不放过| 人妻少妇乱子伦精品| 欧美成人精品高清在线播放| 中文字幕日韩一区二区三区不卡| 欧美日韩中文国产一区发布| 亚洲欧美日本久久综合网站| 激情综合婷婷色五月蜜桃| 婷婷久久香蕉五月综合加勒比| 久久久国产不卡一区二区| 欧美成人怡红院一区二区| 国产明星xxxx色视频| 日本一二三区视频在线| 含紧一点h边做边走动免费视频| 久在线精品视频线观看| 欧美激情一区二区三区高清视频| 亚洲中字慕日产2020| 中文一国产一无码一日韩| wwww亚洲熟妇久久久久| 亚洲乳大丰满中文字幕| 国产精品久久久久久久9999| 波多野结衣不打码视频| 久久夜色精品国产噜噜麻豆| 国产在线精品一区二区夜色| 久久欧美国产伦子伦精品| 激情欧美成人小说在线视频| 久久无人区卡三卡4卡| 日韩在线视频一区二区三| 国产线观看免费观看| 狠狠色婷婷久久综合频道毛片| 内射国产内射夫妻免费频道| 天堂а√中文在线官网| 无套内射在线观看theporn|