日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
嵌入式實(shí)時(shí)操作系統(tǒng)的RAM盤擴(kuò)展
嵌入式實(shí)時(shí)操作系統(tǒng)的RAM盤擴(kuò)展
 更新時(shí)間:2008-8-4 4:57:11  點(diǎn)擊數(shù):27
【字體: 字體顏色
load/20051203133830749.gif" width=426 align=right vspace=1 border=0>它由一個(gè)引導(dǎo)塊和重復(fù)的塊組組成,每個(gè)塊組又由超級(jí)塊、組描述符表、塊位圖、索引節(jié)點(diǎn)位圖、索引節(jié)點(diǎn)表、數(shù)據(jù)區(qū)組成。文件以樹型目錄形式組成。不同點(diǎn)在于磁盤文件系統(tǒng)的操作單元是磁盤塊,而RAM盤所操作的單元是內(nèi)存塊。在筆者為GPFC設(shè)計(jì)的RAM盤中,將內(nèi)存最高端的4MB劃分為RAM盤空間,每一個(gè)邏輯塊為512字節(jié)。限于篇幅所限,關(guān)于EXT2系統(tǒng)的細(xì)節(jié),請(qǐng)感興趣的讀者參考有關(guān)Linux文件系統(tǒng)的資源,本文主要介紹如何在RAM盤中實(shí)現(xiàn)及主要的數(shù)據(jù)結(jié)構(gòu)。

其中引導(dǎo)塊存系統(tǒng)的引導(dǎo)代碼,由于RAM盤不用來引導(dǎo)系統(tǒng),所以可不必設(shè)定引導(dǎo)塊。超級(jí)塊用來存放EXT2文件系統(tǒng)整體信息的數(shù)據(jù)結(jié)構(gòu),是EXT2的核心所在。超級(jí)塊記錄文件系統(tǒng)當(dāng)前狀態(tài),盤有多大,能存放多少文件,何處可以找找到空閑和用于文件系統(tǒng)管理的信息。用于管理磁盤的超級(jí)塊非常復(fù)雜,用于RAM盤則可對(duì)其進(jìn)行簡(jiǎn)化,簡(jiǎn)化后的 ram_super_block結(jié)構(gòu)如下:

struct ram_super_block

{

long s_inodes_count; /*文件系統(tǒng)中節(jié)點(diǎn)總線*/

long s_blocks_count; /*文件系統(tǒng)中的塊總數(shù)*/

long s_r_blocks_cout; /*為超級(jí)用戶保留的塊數(shù)*/

long s_free_blocks_count; /*文件系統(tǒng)中空閑塊總數(shù)*/

long s_free_inodes_coutnt;/*文件系統(tǒng)中空閑節(jié)點(diǎn)總數(shù)*/

long s_first_data_block; /*文件系統(tǒng)中的第一個(gè)數(shù)據(jù)塊*/

long s_log_block_size; /*系統(tǒng)邏輯塊的大小*/

short s_inode_size; /*索引節(jié)點(diǎn)結(jié)構(gòu)的大小*/

short s_state;/*文件系統(tǒng)的狀態(tài)*/

time_t s_wtime;/*超級(jí)塊最后一次修改的時(shí)間*/

}

在文件系統(tǒng)中每一個(gè)文件(包含目錄)占據(jù)一個(gè)索引節(jié)點(diǎn)表項(xiàng)。索引節(jié)點(diǎn)是一個(gè)記錄文件信息的數(shù)據(jù)結(jié)構(gòu)dinode。訪問文件,其它就是尋找文件對(duì)應(yīng)的索引節(jié)點(diǎn)。索引節(jié)點(diǎn)集中保存在索引節(jié)點(diǎn)表中,索引節(jié)點(diǎn)表的第一頂固定為根目錄對(duì)應(yīng)的索引節(jié)點(diǎn)。用于管理RAM盤文件的dinode定義如下:

struct Dinode{

short di_node; /*文件模式:是文件還是目錄,是可讀、可寫還是可執(zhí)行*/

short di_nlink; /*和文件相關(guān)的鏈接數(shù)*/

short di_uid; /*文件所有者的標(biāo)示*/

short di_gid; /*文件所有者的組標(biāo)示*/

long di_size; /*文件大小*/

char di_addr[ ]; /*文件數(shù)據(jù)所在的邏輯塊編號(hào)*/

time_t di_atime; /*文件最后一次訪問的時(shí)間*/

time_t di_mtime; /*文件最后一次修改的時(shí)間*/

time_t di_ctime; /*文件建立的時(shí)間*/

}

塊位圖、索引節(jié)點(diǎn)位圖用于查找空閑的RAM盤內(nèi)存塊和索引節(jié)點(diǎn)表現(xiàn)。

與文件訪問過程相關(guān)的一個(gè)主要函數(shù)為i_name(),其輸入?yún)?shù)為希望訪問的文件路徑名,輸出值為文件對(duì)應(yīng)的索引節(jié)點(diǎn)號(hào)。獲得了文件的索引節(jié)點(diǎn)號(hào),就可以在索引節(jié)點(diǎn)表中找到該節(jié)點(diǎn),從節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)中就可以知道文件的種類、存儲(chǔ)位置等信息,進(jìn)一步就可以讀寫操作。

RAM盤屬于Linux標(biāo)準(zhǔn)設(shè)備中的塊設(shè)備。作為標(biāo)準(zhǔn)設(shè)備,Linux提供了通用的接口函數(shù)。用戶可以直接調(diào)用標(biāo)準(zhǔn)接口函數(shù)對(duì)RAM盤進(jìn)行操作:

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<unistd.h>

int open(const char pathname,int flag); /*打開文件,返回文件描述符*/

int close(int fd); /*關(guān)閉文件*/

int read(int fd,void buf,int count); /*從文件中讀出數(shù)據(jù)到緩沖區(qū),返回讀出的字節(jié)數(shù)*/

int write(int fd,void buf,int count);/*從緩沖區(qū)寫數(shù)據(jù)到文件,返回寫入字節(jié)數(shù)*/

5 用戶Shell的擴(kuò)展與實(shí)現(xiàn)

用戶Shell是一個(gè)在μC/OS-Ⅱ下獨(dú)立運(yùn)行的任務(wù)。Shell啟動(dòng)后,完成一些必要的初始化操作,進(jìn)入掛起狀態(tài),等待用戶登錄和輸入。用戶從終端上輸入命令后將喚醒Shell,在筆者設(shè)計(jì)的Shell程序中可接受的命令包括:cd(改變RAM盤當(dāng)前目錄),pwd(顯示RAM盤當(dāng)前目錄), mkdir、rmdir(在RAM盤創(chuàng)立或刪除目錄),ps(顯示當(dāng)前系統(tǒng)中任務(wù)狀態(tài)),kill(終止一一個(gè)任務(wù)的運(yùn)行)。處理不同通訊協(xié)議的任務(wù)分別以可執(zhí)行文件形式保存在RAM盤上不同的目錄中。如果在Shell中鍵入任務(wù)的名稱,Shell會(huì)在當(dāng)前目錄下查找是否有匹配的可執(zhí)行文件。如果有,則調(diào)用μC/OS-Ⅱ中的系統(tǒng)函數(shù)OSTaskCreate創(chuàng)立一個(gè)新的任務(wù),否則返回錯(cuò)誤信息。也可以使用kill命令,調(diào)用系統(tǒng)函數(shù)OSTaskDel終止一個(gè)任務(wù)的運(yùn)行。在程序的調(diào)試期間,可以使用ps命令查看任務(wù)運(yùn)行狀態(tài)。

由于μC/OS-Ⅱ的內(nèi)存管理功能有限,OSTaskCreate函數(shù)不能動(dòng)態(tài)分配堆?臻g,OSTaskDel也不能釋放任務(wù)的堆棧空間。為此,筆者重新編寫了內(nèi)存管理模塊,采用頁方式和首次擬合算法實(shí)現(xiàn)內(nèi)存的動(dòng)態(tài)管理。每一內(nèi)存頁為2KB,系統(tǒng)的內(nèi)存資源由一個(gè)雙向鏈表進(jìn)行管理。任務(wù)函數(shù)可調(diào)用 OSMemAlloc()t OSMemFree()分配釋放自己所占的內(nèi)存空間。OSMemAlloc()在空閑內(nèi)存鏈表中查詢每一個(gè)符合要求的內(nèi)存塊,并分配給任務(wù)。而 OSMemFree()則是將釋放后的內(nèi)存塊重新添加進(jìn)空閑內(nèi)存鏈表中。

在開發(fā)過程中,筆者感覺到采用開放源代碼的實(shí)時(shí)內(nèi)核的最大優(yōu)點(diǎn)是可擴(kuò)展性和可裁剪性,可以根據(jù)需要定制出最精練的內(nèi)核結(jié)構(gòu)。μC/OS-Ⅱ的本意是為中小型嵌入式系統(tǒng)設(shè)計(jì)的,對(duì)于不需要的部分,可以刪改;當(dāng)內(nèi)核缺乏某些功能,設(shè)計(jì)得很容易自行設(shè)計(jì)和添加,從而可以應(yīng)用在更大型的系統(tǒng)上。其性能可以同昂跺的商業(yè)實(shí)時(shí)操作系統(tǒng)的相媲美,而這種改動(dòng)和擴(kuò)展并不難。這正是開放源代碼軟件的生命力所在。



  • 上一篇: 實(shí)時(shí)單片機(jī)通訊網(wǎng)絡(luò)中的內(nèi)存管理
  • 下一篇: 存儲(chǔ)器的兼容性設(shè)計(jì)
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1