예제 #1
0
        private IntPtr AllocateBlock(out ushort blockId)
        {
            blockId = _header->NextFreeBlock++;
            _section.Extend(_header->NextFreeBlock * _blockSize);

            SectionView     view   = _section.MapView(blockId * _blockSize, _blockSize, _protection);
            MfsBlockHeader *header = (MfsBlockHeader *)view.Memory;

            header->Hash         = 0;
            header->NextFreeCell = 1;

            ViewDescriptor vd = _vdFreeList.Allocate();

            vd.RefCount = 1;
            vd.BlockId  = blockId;
            vd.View     = view;

            _views.Add(blockId, vd);
            _views2.Add(view.Memory, vd);

            return(view);
        }