操作系统——文件管理,基于块的索引分配和位表

/*
  给出一个磁盘块序列: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 &
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值