获得windows操作系统下分区的block size


本文参考自:HOW TO DETERMINE OPERATING SYSTEM BLOCK SIZE ON WINDOWS (文档 ID 1570340.1)
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。


C:\Users\Administrator>fsutil fsinfo ntfsinfo H:---->H分区
NTFS 卷序列号 :                   0xa68c69f38c69bf05
版本 :                            3.1
扇区数量 :                        0x0000000031ffffff
簇总数 :                          0x00000000063fffff
可用簇 :                          0x0000000000c64078
保留总数 :                        0x0000000000000680
每个扇区字节数 :                  512
每个簇字节数 :                    4096 --------->>>>>>>>这个就是block size
每个 FileRecord 段的字节数 :      1024
每个 FileRecord 段的簇数 :        0
Mft 有效数据长度 :                0x00000000085c0000
Mft 起始 Lcn :                    0x00000000000c0000
Mft2 起始 Lcn :                   0x0000000000000002
Mft 区域起始 :                    0x00000000043e58e0
Mft 区域结尾 :                    0x00000000043ea9e0
RM 标识符:        6D6AE1AA-D707-11E2-980D-98A2A07FF0E4


C:\Users\Administrator>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
动态分区算法是指在内存中分配内存块时,将内存划分为多个大小不同的分区,每个分区可以分配给一个进程使用。当一个进程请求内存时,系统会在分区中选择一个大小合适的分区分配给该进程使用。常见的动态分区算法有以下几种: 1. 首次适应算法(First Fit):从内存的起始位置开始搜索,选取第一个满足条件的分区进行分配。 2. 最佳适应算法(Best Fit):从所有空闲分区中选取最小的满足要求的分区进行分配。 3. 最坏适应算法(Worst Fit):从所有空闲分区中选取最大的满足要求的分区进行分配。 4. 循环首次适应算法(Next Fit):从上次分配结束的位置开始搜索,选取第一个满足条件的分区进行分配。 下面是一个简单的操作系统动态分区算法实验,以首次适应算法为例: 1. 定义一个内存块结构体,包含起始地址、大小和状态等属性。 ``` struct MemoryBlock { int startAddress; int size; bool free; }; ``` 2. 定义一个内存分配表,用于存储内存块信息。 ``` vector<MemoryBlock> memoryTable; ``` 3. 实现内存分配函数,根据首次适应算法从内存分配表中选择一个空闲的分区进行分配。 ``` int allocateMemory(int size) { // 从内存分配表中查找满足条件的空闲分区 for (int i = 0; i < memoryTable.size(); i++) { if (memoryTable[i].free && memoryTable[i].size >= size) { // 找到了合适的分区,进行分配 int startAddress = memoryTable[i].startAddress; memoryTable[i].startAddress += size; memoryTable[i].size -= size; if (memoryTable[i].size == 0) { // 如果分配后分区大小为0,将该分区从内存分配表中删除 memoryTable.erase(memoryTable.begin() + i); } // 返回分配的起始地址 return startAddress; } } // 没有找到合适的分区,返回-1表示分配失败 return -1; } ``` 4. 实现内存释放函数,根据释放的内存块的起始地址和大小,在内存分配表中找到对应的空闲分区并进行合并。 ``` void freeMemory(int startAddress, int size) { // 在内存分配表中查找释放的内存块应该插入的位置 int index = 0; while (index < memoryTable.size() && memoryTable[index].startAddress < startAddress) { index++; } // 将释放的内存块插入到对应的位置 memoryTable.insert(memoryTable.begin() + index, { startAddress, size, true }); // 合并相邻的空闲分区 for (int i = 0; i < memoryTable.size() - 1; i++) { if (memoryTable[i].free && memoryTable[i + 1].free) { memoryTable[i].size += memoryTable[i + 1].size; memoryTable.erase(memoryTable.begin() + i + 1); i--; } } } ``` 5. 测试内存分配和释放函数。 ``` // 初始化内存分配表 memoryTable.push_back({ 0, 100, true }); memoryTable.push_back({ 200, 50, true }); memoryTable.push_back({ 300, 80, true }); // 分配一段大小为30的内存块 int startAddress = allocateMemory(30); if (startAddress == -1) { cout << "内存分配失败!" << endl; } else { cout << "分配了大小为30的内存块,起始地址为:" << startAddress << endl; } // 释放刚刚分配的内存块 freeMemory(startAddress, 30); // 分配一段大小为60的内存块 startAddress = allocateMemory(60); if (startAddress == -1) { cout << "内存分配失败!" << endl; } else { cout << "分配了大小为60的内存块,起始地址为:" << startAddress << endl; } ``` 参考资料: 1. 《操作系统概念》 2. 《计算机操作系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值