/*
给出一个磁盘块序列:1、2、3、……、500,初始状态所有块为空的,每块的大小为2k。
选择使用位表、链式空闲区、索引和空闲块列表四种算法之一来管理空闲块。
对于基于块的索引分配执行以下步骤:
随机生成2k-10k的文件50个,文件名为1.txt、2.txt、……、50.txt,按照上述算法存储到模拟磁盘中。
删除奇数.txt(1.txt、3.txt、……、49.txt)文件
新创建5个文件(A.txt、B.txt、C.txt、D.txt、E.txt),大小为:7k、5k、2k、9k、3.5k,按照基于块索引分配的算法存储到模拟磁盘中。
给出文件A.txt、B.txt、C.txt、D.txt、E.txt的文件分配表和空闲区块的状态。
*/
#include<iostream>
#include<string>
#include<cstdlib>
#include <cctype>
#include<time.h>
using namespace std;
#define MEMORYSIZE 500
//文件分配表节点
struct FATableNode
{
string name;
unsigned int indexBlockLoction;
FATableNode *next;
};
//作为索引的块的结构体
struct indexedBlockNode
{
int *location;//动态数组
int size;
};
class Solution
{
public:
Solution();
~Solution();
void run();
private:
bool bitTable[MEMORYSIZE];//位表,判断这一块是否已经被占用,false表示未被占用
FATableNode *headFATable;
FATableNode *tailFATable;
indexedBlockNode *indexedBlockNodeTable;
int getRandLocation( int size);
int getRandSize();
void setFirstFiftyBlock();
void setFATableNode( int location , string name);
void setBlockNodeTable(int location , double size);
void deleteOddFATableNode();
void setFiveAddedFile();
void findLastFiveFile();
bool isLastFiveFile( string name);
void putOutFileInformation( FATableNode *node);
string getName(int i);
bool ifFileNameIsOdd(string name);
void Solution::deleteIndexNode(FATableNode *deleteNode);
void Solution::testOut();
};
Solution::Solution()
{
headFATable = NULL;
tailFATable = NULL;
indexedBlockNodeTable = new indexedBlockNode[MEMORYSIZE];
if(indexedBlockNodeTable == NULL)
return ;
for (int i = 0; i < MEMORYSIZE; i++){
bitTable[i]=false;
indexedBlockNodeTable[i].location &
操作系统——文件管理,基于块的索引分配和位表
最新推荐文章于 2021-04-18 11:38:08 发布
本文档提供了一个模拟操作系统文件管理的程序,使用位表、链式空闲区、索引和空闲块列表算法之一,具体操作包括随机生成文件、删除奇数文件、新增文件并展示文件分配表和空闲区块状态。
摘要由CSDN通过智能技术生成