久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

Yaffs_guts垃圾回收怎么實(shí)現(xiàn)

本篇內(nèi)容主要講解“Yaffs_guts垃圾回收怎么實(shí)現(xiàn)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Yaffs_guts垃圾回收怎么實(shí)現(xiàn)”吧!

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的靈山網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

1.垃圾回收

1.static int yaffs_InitialiseBlocks(yaffs_Device *dev,int nBlocks)//塊初始化

dev->chunkBitmapStride = (dev->nChunksPerBlock+7)/8;//???為什么要+7

奧,為了防止頁(yè)數(shù)小于8的情況,照樣分配一個(gè)Stride

2.static int yaffs_FindDirtiestBlock(yaffs_Device *dev,int aggressive)//查找最臟快,為了GC

個(gè)人感覺(jué):這里應(yīng)該就是犧牲塊選擇算法需要做的東西

if(bi->blockState == YAFFS_BLOCK_STATE_FULL &&

   (bi->pagesInUse - bi->softDeletions )< pagesInUse)

//pages_in_use:該擦除塊中被使用的chunk數(shù)目,包括已經(jīng)被soft delete的chunk

{

dirtiest = b;

pagesInUse = (bi->pagesInUse - bi->softDeletions);

}

如果找不到就返回-1

3.static void yaffs_BlockBecameDirty(yaffs_Device *dev,int blockNo)//將某一塊變?yōu)榕K塊

4.static int yaffs_FindBlockForAllocation(yaffs_Device *dev)//尋找可分配塊

5.static int yaffs_AllocateChunk(yaffs_Device *dev,int useReserve)

useReserve表示是否使用保留空間。yaffs2文件系統(tǒng)并不會(huì)將所有的存儲(chǔ)空間全部用于存儲(chǔ)文件系統(tǒng)數(shù)據(jù),而要空出部分block用于垃圾收集時(shí)使用。一般情況下這個(gè)參數(shù)都是0,只有在垃圾收集時(shí)需要分配存儲(chǔ)空間的情況下將該參數(shù)置1。

6.static int  yaffs_GarbageCollectBlock(yaffs_Device *dev,int block)

for(chunkInBlock = 0,oldChunk = block * dev->nChunksPerBlock;

    chunkInBlock < dev->nChunksPerBlock && yaffs_StillSomeChunkBits(dev,block);

    chunkInBlock++, oldChunk++ )//檢測(cè)待擦除塊,直到將所有頁(yè)遍歷完有效頁(yè)

? if(yaffs_CheckChunkBit(dev,block,chunkInBlock))//如果帶掃描頁(yè)中存在內(nèi)容

v if(object && object->deleted && tags.chunkId != 0)//如果該頁(yè)中是數(shù)據(jù)

{刪除數(shù)據(jù),并且刪除對(duì)應(yīng)的Object}

v 刪除Object

        if(tags.chunkId == 0)

{

//它是一個(gè) header

object->chunkId = newChunk;

object->serial = tags.serialNumber;

}

else

{

// 它是一個(gè) 數(shù)據(jù)chunk

yaffs_PutChunkIntoFile(object, tags.chunkId, newChunk,0);

}

最后就是刪除頁(yè)yaffs_DeleteChunk(dev,oldChunk,markNAND);

serialNumber:用以辨別哪個(gè)Chunk 為最新的Chunk。當(dāng)更新此Chunk 時(shí),serialNumber 會(huì)加1并寫入至其他Block 的Chunk 中,并將原Chunk 的設(shè)為Invalid(表此Data Chunk 已無(wú)效),但若在將該Chunk 設(shè)為Invalid 之前則發(fā)生了斷電(Power Lost)的突發(fā)事件,當(dāng)電源回復(fù)并再重新掃描Flash Memory 時(shí),會(huì)檢查某一yaffs_Object 到有兩個(gè)一樣的Chunk(其ChunkID 相同),但其serialNumber 不同,則會(huì)比較此二Chunk的serialNumber,以辨別出哪個(gè)Chunk 為較新的Data,并將較舊Data 的Chunk 設(shè)為Invalid。

7.static int yaffs_CheckGarbageCollection(yaffs_Device *dev)

//yaffs檢查垃圾回收是否成功

2.TAGS

1.static void yaffs_LoadTagsIntoSpare(yaffs_Spare *sparePtr, yaffs_Tags *tagsPtr)//將tags填充到spare去區(qū)

2.yaffs_CheckECCOnTags(tagsPtr);//返回可以恢復(fù)的錯(cuò)誤為1,不可以回復(fù)的錯(cuò)誤為-1

3.static void yaffs_GetTagsFromSpare(yaffs_Device *dev, yaffs_Spare *sparePtr,yaffs_Tags *tagsPtr)

//if(result> 0)dev->tagsEccFixed++;

//if(result <0)dev->tagsEccUnfixed++;

4.static int yaffs_ReadChunkTagsFromNAND(yaffs_Device *dev,int chunkInNAND, yaffs_Tags *tags, int *chunkDeleted)

5.static int yaffs_WriteNewChunkWithTagsToNAND(yaffs_Device *dev, const __u8 *buffer, yaffs_Tags *tags, int useReserve)

6.static int yaffs_TagsMatch(const yaffs_Tags *tags, int objectId, int chunkInObject, int chunkDeleted)//進(jìn)行與object進(jìn)行匹配,若正確返回1,否則返回0

7.int yaffs_FindChunkInFile(yaffs_Object *in,int chunkInInode,yaffs_Tags *tags)//在文件中查找chunk,如果找到返回theChunk,找不到則返回-1

8.int yaffs_FindAndDeleteChunkInFile(yaffs_Object *in,int chunkInInode,yaffs_Tags *tags)//在文件中刪除該頁(yè),如果找到返回theChunk,找不到則返回-1

9.static int yaffs_CheckFileSanity(yaffs_Object *in)//檢測(cè)文件是否正常,如果正常返回1,否則返回0

10.static int yaffs_PutChunkIntoFile(yaffs_Object *in,int chunkInInode, int chunkInNAND, int inScan)//為了防止掉電時(shí)候出現(xiàn)重復(fù)頁(yè),所以設(shè)置inScan標(biāo)志進(jìn)行判斷

11.int yaffs_ReadChunkDataFromObject(yaffs_Object *in,int chunkInInode, __u8 *buffer)

12.static void yaffs_DeleteChunk(yaffs_Device *dev,int chunkId,int markNAND)//將頁(yè)從文件上刪除,然后判斷是不是該塊上所有的頁(yè)無(wú)效,則將該塊標(biāo)記為臟塊,可以進(jìn)行擦除

13.int yaffs_WriteChunkDataToObject(yaffs_Object *in,int chunkInInode, const __u8 *buffer,int nBytes,int useReserve)

14.int yaffs_UpdateObjectHeader(yaffs_Object *in,const char *name, int force)

3.讀寫文件

1.int yaffs_ResizeFile(yaffs_Object *in, int newSize)//修改文件大小,如果newSize小于oldSize,則返回newSize,如果oldSize大于newSize,則返回oldSize

2.int yaffs_GetFileSize(yaffs_Object *obj)//給出object,得到文件大小

4.Scanning

1.static int yaffs_IsBlockBad(yaffs_Device *dev, int blk)//只檢查前兩頁(yè)

到此,相信大家對(duì)“Yaffs_guts垃圾回收怎么實(shí)現(xiàn)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站欄目:Yaffs_guts垃圾回收怎么實(shí)現(xiàn)
文章鏈接:http://sd-ha.com/article6/geeiog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、App設(shè)計(jì)品牌網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作域名注冊(cè)、小程序開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化