日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SylixOS磁盘高速传输

發(fā)布時間:2025/3/8 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SylixOS磁盘高速传输 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • SylixOS管線模型分析

    前文主要介紹了SylixOS中的塊設(shè)備CACHE管理,本章主要介紹磁盤高速傳輸。在CAHCE回寫中SyilxOS采取了兩種方式,即直接回寫和多管線并發(fā)回寫。并發(fā)寫管線通過多線程并發(fā)處理CACHE提交的寫請求,實現(xiàn)磁盤高速傳輸。

    SylixOS中通過LW_DISKCACHE_WP結(jié)構(gòu)體管理并發(fā)寫管線,該結(jié)構(gòu)體的具體內(nèi)容如程序清單 1-1所示。

    程序清單 1-1

    ?

    typedef?struct?{BOOL????????????????????DISKCWP_bExit;??????????????????????/*??是否需要退出????????????????*/BOOL????????????????????DISKCWP_bCacheCoherence;????????????/*??CACHE?一致性標(biāo)志????????????*/BOOL????????????????????DISKCWP_bParallel;??????????????????/*??并行化讀寫支持??????????????*/INT?????????????????????DISKCWP_iPipeline;??????????????????/*??寫管線線程數(shù)????????????????*/INT?????????????????????DISKCWP_iMsgCount;??????????????????/*??寫消息緩沖個數(shù)??????????????*/PVOID???????????????????DISKCWP_pvRBurstBuffer;?????????????/*??管線緩存????????????????????*/PVOID???????????????????DISKCWP_pvWBurstBuffer;?????????????/*??管線緩存????????????????????*/LW_OBJECT_HANDLE????????DISKCWP_hMsgQueue;??????????????????/*??管線刷新隊列????????????????*/LW_OBJECT_HANDLE????????DISKCWP_hCounter;???????????????????/*??計數(shù)信號量??????????????????*/LW_OBJECT_HANDLE????????DISKCWP_hPart;??????????????????????/*??管線緩存管理????????????????*/LW_OBJECT_HANDLE????????DISKCWP_hSync;??????????????????????/*??排空信號????????????????????*/LW_OBJECT_HANDLE????????DISKCWP_hDev;???????????????????????/*??非并發(fā)設(shè)備鎖????????????????*/LW_OBJECT_HANDLE????????DISKCWP_hWThread[LW_CFG_DISKCACHE_MAX_PIPELINE];/*??管線寫任務(wù)表????????????????*/ }?LW_DISKCACHE_WP; typedef?LW_DISKCACHE_WP????*PLW_DISKCACHE_WP;

    ?

    DISKCWP_bExit:為LW_TRUE時,寫管線線程將會退出;

    DISKCWP_bCacheCoherence:為LW_TRUE時,管線緩存將使用非緩沖的內(nèi)存;

    DISKCWP_bParallel:并行化讀寫支持,如果不支持則需要在操作設(shè)備前調(diào)用設(shè)備鎖,防止并發(fā)操作;

    DISKCWP_iPipeline:寫管線線程數(shù),為0時表示不是用并發(fā)寫管線;

    DISKCWP_iMsgCount:寫消息緩沖個數(shù),最小為DCATTR_iPipeline, 可以為 DCATTR_iPipeline 的2 ~ 8 倍;

    DISKCWP_hMsgQueue:管線刷新隊列,上層通過發(fā)送一個消息,發(fā)起一個寫請求;

    DISKCWP_hCounter:計數(shù)信號量,用于計數(shù)當(dāng)前緩沖塊,發(fā)起寫請求時申請,完成回寫時釋放;

    DISKCWP_hPart:通過定長內(nèi)存管理管線緩存;

    DISKCWP_hDev:非并發(fā)設(shè)備鎖;

    DISKCWP_hWThread:管線寫任務(wù)表;

    DISKCWP_hSync:排空信號,用于回寫完成后同步。

  • 寫管線創(chuàng)建

    寫管線的創(chuàng)建通過調(diào)用__diskCacheWpCreate函數(shù)來完成,其函數(shù)原型如程序清單 1-2所示。

    程序清單 1-2

    ?

    INT???__diskCacheWpCreate(PLW_DISKCACHE_CB??pdiskc,PLW_DISKCACHE_WP??pwp,?BOOL??????????????bCacheCoherence,BOOL??????????????bParallel,INT???????????????iPipeline,?INT???????????????iMsgCount,INT???????????????iMaxRBurstSector,INT???????????????iMaxWBurstSector,ULONG?????????????ulBytesPerSector);

    ?

    函數(shù)__diskCacheWpCreate原型分析:

    pdiskc:????????????????????緩沖控制塊

    pwp:????????????????????????并發(fā)寫管線控制塊

    bCacheCoherence: ????????CACHE 一致性需求

    bParallel:????????????????并發(fā)讀寫支持

    iPipeline:????????????????寫管線線程數(shù)

    iMsgCount:????????????????管線總消息個數(shù)

    iMaxRBurstSector:????????讀猝發(fā)長度

    iMaxWBurstSector:????????寫猝發(fā)長度

    ulBytesPerSector: ????????每扇區(qū)大小

    函數(shù)__diskCacheWpCreate根據(jù)入?yún)?chuàng)建對應(yīng)的寫管線,并填充相關(guān)信息到并發(fā)寫管線控制控制結(jié)構(gòu)體,其創(chuàng)建流程如下所示。

  • 創(chuàng)建管線緩存

  • 創(chuàng)建管線刷新隊列

  • 創(chuàng)建計數(shù)信號量

  • 創(chuàng)建內(nèi)存分區(qū)緩存管理

  • 創(chuàng)建排空信號

  • 創(chuàng)建非并發(fā)設(shè)備鎖

  • 創(chuàng)建寫管線線程組

  • 寫管線線程

    寫管線線程的函數(shù)原型如程序清單 1-3所示。

    程序清單 1-3

    ?

    static?PVOID??__diskCacheWpThread?(PVOID??pvArg)

    ?

    參數(shù)pvArg為PLW_DISKCACHE_CB類型的磁盤緩沖控制塊。管線線程運行后,循環(huán)等待接收管線刷新消息。其中消息類型如程序清單 1-4所示。

    程序清單 1-4

    ?

    typedef?struct?{ULONG???????????????????DISKCWPM_ulStartSector;?????????????/*??起始扇區(qū)????????????????????*/ULONG???????????????????DISKCWPM_ulNSector;?????????????????/*??扇區(qū)數(shù)量????????????????????*/PVOID???????????????????DISKCWPM_pvBuffer;??????????????????/*??扇區(qū)緩沖????????????????????*/ }?LW_DISKCACHE_WPMSG; typedef?LW_DISKCACHE_WPMSG?*PLW_DISKCACHE_WPMSG;

    ?

    當(dāng)線程接收到消息后,根據(jù)消息中的信息調(diào)用具體的硬件接口進(jìn)行寫操作。完成寫操作后,需要釋放消息中的內(nèi)存塊以及計數(shù)信號量和同步信號,接著進(jìn)入下一次循環(huán)等待接收消息。

  • SyilxOS管線使用

    當(dāng)支持并發(fā)寫管線時,可以通過調(diào)用__diskCacheWpGetBuffer函數(shù)在已初始化后的內(nèi)存分區(qū)中申請一個內(nèi)存塊,該函數(shù)的具體實現(xiàn)如程序清單 2-1所示。

    程序清單 2-1

    ?

    PVOID??__diskCacheWpGetBuffer?(PLW_DISKCACHE_WP??pwp,?BOOL?bRead) {PVOID??pvRet;if?(bRead)?{return??(pwp->DISKCWP_pvRBurstBuffer);}if?(pwp->DISKCWP_iPipeline?==?0)?{return??(pwp->DISKCWP_pvWBurstBuffer);}if?(API_SemaphoreCPend(pwp->DISKCWP_hCounter,?LW_OPTION_WAIT_INFINITE))?{_BugHandle(LW_TRUE,?LW_TRUE,?"diskcache?pipeline?error!\r\n");}pvRet?=?API_PartitionGet(pwp->DISKCWP_hPart);_BugHandle((pvRet?==?LW_NULL),?LW_TRUE,?"diskcache?pipeline?error!\r\n");return??(pvRet); }

    ?

    在申請內(nèi)存塊前,需要先請求計數(shù)信號量,計數(shù)信號量與內(nèi)存塊數(shù)量相等。當(dāng)內(nèi)存分區(qū)中已沒有剩余的內(nèi)存塊時,線程無法獲得計數(shù)信號量進(jìn)入休眠。當(dāng)管線線程完成寫操作后會釋放接收到的內(nèi)存塊,并釋放計數(shù)信號量,此時休眠線程成功申請信號量進(jìn)入就緒態(tài),并順利獲得內(nèi)存塊。

    接著需要將CACHE中的緩沖數(shù)據(jù)拷貝到內(nèi)存塊中,并提交一個寫請求。管線線程接收到消息后進(jìn)行具體的寫操作和資源釋放。寫請求函數(shù)如程序清單 2-2所示。

    程序清單 2-2

    ?

    INT??__diskCacheWpWrite?(PLW_DISKCACHE_CB??pdiskc,PLW_BLK_DEV???????pblkdDisk,PVOID?????????????pvBuffer,ULONG?????????????ulStartSector,ULONG?????????????ulNSector) {LW_DISKCACHE_WPMSG??diskcwpm;PLW_DISKCACHE_WP????pwp?=?&pdiskc->DISKC_wpWrite;if?(pwp->DISKCWP_iPipeline?==?0)?{return??(pdiskc->DISKC_pblkdDisk->BLKD_pfuncBlkWrt(pblkdDisk,?pvBuffer,ulStartSector,ulNSector));}diskcwpm.DISKCWPM_ulStartSector?=?ulStartSector;diskcwpm.DISKCWPM_ulNSector?????=?ulNSector;diskcwpm.DISKCWPM_pvBuffer??????=?pvBuffer;API_MsgQueueSend2(pwp->DISKCWP_hMsgQueue,?&diskcwpm,?sizeof(LW_DISKCACHE_WPMSG),?LW_OPTION_WAIT_INFINITE);return??(ERROR_NONE); }

    ?

    發(fā)起寫請求后可通過調(diào)用__diskCacheWpSync函數(shù)進(jìn)行寫同步,該函數(shù)通過寫管線控制塊中的DISKCWP_hSync信號量實現(xiàn)同步功能。

  • 參考資料

  • 轉(zhuǎn)載于:https://blog.51cto.com/12557713/1936781

    總結(jié)

    以上是生活随笔為你收集整理的SylixOS磁盘高速传输的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 超碰加勒比 | 丰满大肥婆肥奶大屁股 | 少妇人妻一级a毛片 | 日韩精品一区二区三区四区 | 中国新婚夫妻性猛交 | 伊人www22综合色 | 美女黄色大片 | 中文字幕欧美日韩 | 天堂在线观看中文字幕 | 久久久精品人妻一区二区三区 | 国产精品传媒麻豆hd | 特黄aaaaaaaaa毛片免 | 国产在线视频一区 | 亚洲一区av在线 | 青青操视频在线 | 国产一区二区三区四区精 | 人妻天天爽夜夜爽一区二区三区 | 色先锋影院 | 91网站在线播放 | 午夜激情在线观看 | 亚洲一区二区图片 | 成人动漫在线播放 | 丁香花高清视频完整电影 | a级淫片 | 成人性生交大片免费卡看 | 激情av| 久久精品视频日本 | 国产精品麻豆一区二区三区 | 性生生活大片又黄又 | 亚洲自拍偷拍在线 | 亚洲免费网站 | 免费在线黄色网址 | 动漫同人高h啪啪爽文 | 欧美性一级 | 麻豆福利在线观看 | 黄色片链接| 淫僧荡尼巨乳(h)小说 | 精品国产av一区二区 | av网址在线播放 | 天天爱天天做天天爽 | 久久国产美女 | 91色精品| 精品国产视频在线 | 精品国产乱码久久久久久免费 | 国产精品视频亚洲 | sm国产在线调教视频 | 午夜激情四射 | 欧美少妇bbw | 欧美精品一二三四区 | 亚洲成人资源 | 国产欧美三级 | 中文字幕 欧美 日韩 | 超碰97av在线| 精品成人av一区二区在线播放 | 自偷自拍亚洲 | 成人国产片女人爽到高潮 | 国产一区二区在线免费 | 欧美日韩亚洲国产一区 | 奇米视频在线观看 | 日韩美女视频在线观看 | 成a人片亚洲日本久久 | 一个人在线观看免费视频www | 日韩一区二区视频在线播放 | 久久免费福利视频 | 欧美h网站| 国产一区资源 | 欧美亚洲激情视频 | 欧美大色 | 喷水av| 五月天最新网址 | 麻豆视频在线观看免费 | 国产特级毛片aaaaaa | 视频在线免费 | 穿扒开跪着折磨屁股视频 | 色综合天天综合 | 一级美女大片 | 国产偷拍一区二区 | 欧美伊人久久 | 九一国产在线观看 | 国产成人三级在线观看 | 国产美女无遮挡永久免费观看 | 国产精品一卡 | 欧美精品色呦呦 | 精品免费一区二区三区 | 日本一级黄色 | 美女扒开屁股让男人桶 | 国产av电影一区二区 | 特级西西人体444www高清 | 另类小说欧美 | 欧美视频在线播放 | 一本黄色片| 免费av在线网址 | 午夜精品在线观看 | 超碰蜜臀 | 后进极品白嫩翘臀在线视频 | 国产人人插 | 老女人人体欣赏a√s | 国产第一福利 | 亚洲国产成人精品女人 |