中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Yaffs_guts垃圾回收怎么實現

發布時間:2021-12-30 15:48:58 來源:億速云 閱讀:208 作者:iii 欄目:互聯網科技

本篇內容主要講解“Yaffs_guts垃圾回收怎么實現”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Yaffs_guts垃圾回收怎么實現”吧!

1.垃圾回收

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

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

奧,為了防止頁數小于8的情況,照樣分配一個Stride

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

個人感覺:這里應該就是犧牲塊選擇算法需要做的東西

if(bi->blockState == YAFFS_BLOCK_STATE_FULL &&

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

//pages_in_use:該擦除塊中被使用的chunk數目,包括已經被soft delete的chunk

{

dirtiest = b;

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

}

如果找不到就返回-1

3.static void yaffs_BlockBecameDirty(yaffs_Device *dev,int blockNo)//將某一塊變為臟塊

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

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

useReserve表示是否使用保留空間。yaffs2文件系統并不會將所有的存儲空間全部用于存儲文件系統數據,而要空出部分block用于垃圾收集時使用。一般情況下這個參數都是0,只有在垃圾收集時需要分配存儲空間的情況下將該參數置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++ )//檢測待擦除塊,直到將所有頁遍歷完有效頁

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

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

{刪除數據,并且刪除對應的Object}

v 刪除Object

        if(tags.chunkId == 0)

{

//它是一個 header

object->chunkId = newChunk;

object->serial = tags.serialNumber;

}

else

{

// 它是一個 數據chunk

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

}

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

serialNumber:用以辨別哪個Chunk 為最新的Chunk。當更新此Chunk 時,serialNumber 會加1并寫入至其他Block 的Chunk 中,并將原Chunk 的設為Invalid(表此Data Chunk 已無效),但若在將該Chunk 設為Invalid 之前則發生了斷電(Power Lost)的突發事件,當電源回復并再重新掃描Flash Memory 時,會檢查某一yaffs_Object 到有兩個一樣的Chunk(其ChunkID 相同),但其serialNumber 不同,則會比較此二Chunk的serialNumber,以辨別出哪個Chunk 為較新的Data,并將較舊Data 的Chunk 設為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去區

2.yaffs_CheckECCOnTags(tagsPtr);//返回可以恢復的錯誤為1,不可以回復的錯誤為-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)//進行與object進行匹配,若正確返回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)//在文件中刪除該頁,如果找到返回theChunk,找不到則返回-1

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

10.static int yaffs_PutChunkIntoFile(yaffs_Object *in,int chunkInInode, int chunkInNAND, int inScan)//為了防止掉電時候出現重復頁,所以設置inScan標志進行判斷

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

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

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)//只檢查前兩頁

到此,相信大家對“Yaffs_guts垃圾回收怎么實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

类乌齐县| 河西区| 灵璧县| 龙口市| 尼木县| 清水县| 仙居县| 双流县| 九江县| 巴中市| 镇原县| 大英县| 汽车| 寿光市| 观塘区| 常山县| 和田市| 泽普县| 榆林市| 馆陶县| 泊头市| 静宁县| 德保县| 独山县| 卢氏县| 淮南市| 大港区| 牡丹江市| 塔河县| 噶尔县| 漾濞| 涪陵区| 南安市| 江孜县| 时尚| 定边县| 新沂市| 琼中| 如皋市| 安龙县| 桓仁|