磁盘非跨盘访问算法实现

news2024/10/6 8:39:37

1. 背景说明

本算法基于已将磁盘分布合并并排序为升序线性表。实现示例为:磁盘扇区大小:32(可自定义),待拆分磁盘内存: [0 - 50],[60 - 100](可增加)。示意图如下:

2. 示例代码

allocateAddr.c

/* 地址分配算法 */

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 10
#define SEC_SIZE 32

typedef struct {
	int startAddr;
	int endAddr;
} IoAddr;

int GetUpBound(const IoAddr *addr)
{
	int i;
	for (i = 1; i <= SEC_SIZE; ++i) {
		if ((addr->startAddr + i) % SEC_SIZE == 0) {
			return i - 1;
		}
	}

	return 0;
}

int GetMin(int a, int b)
{
	return (a <= b) ? a : b;
}

IoAddr *Process(int addrSize, int *detaSize, IoAddr *addr)
{
	IoAddr *detatch = (IoAddr *)malloc(sizeof(IoAddr) * MAX_SIZE);
	int secLength;
	int upBound;
	*detaSize = 0;
	int min;
	for (int i = 0; i < addrSize; ++i) {
		secLength = (addr + i)->endAddr - (addr + i)->startAddr + 1;
		while (secLength) {
			upBound = GetUpBound(addr + i);
			min = GetMin(upBound, secLength - 1);
			detatch[*detaSize].startAddr = (addr + i)->startAddr;
			detatch[*detaSize].endAddr = (addr + i)->startAddr + min;
			++(*detaSize);
			(addr + i)->startAddr += (min + 1);
			if ((addr + i)->startAddr > (addr + i)->endAddr) {
				break;
			}

			secLength = (addr + i)->endAddr - (addr + i)->startAddr + 1;
		}
	}

	return detatch;
}

int main(void)
{
	IoAddr *memory = (IoAddr *)malloc(sizeof(IoAddr) * 2);
	memory[0].startAddr = 0;
	memory[0].endAddr = 50;
	memory[1].startAddr = 60;
	memory[1].endAddr = 100;
	int detaSize;
	IoAddr *detatch = Process(2, &detaSize, memory);
	printf("The allocation is as follows:\n\n");
	for (int i = 0; i < detaSize; ++i) {
		printf("[%-3d %-3d]\n", detatch[i].startAddr, detatch[i].endAddr);
	}

	free(memory);
	free(detatch);

	return 0;
}

3. 运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1091191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【电机控制】FOC电机控制

FOC&#xff08;Field-Oriented Control&#xff0c;磁场定向控制&#xff09;是一种电机控制策略&#xff0c;又称矢量控制&#xff0c;是通过控制变频器输出电压的幅值和频率控制三相直流无刷电机的一种变频驱动控制方法。 FOC 的实质是运用坐标变换将三相静止坐标系下的电机…

什么是 CSRF 、原理及其解决方式

什么是 CSRF &#xff1f; 跨站请求伪造&#xff08;CSRF&#xff0c;Cross-site request forgery&#xff09;&#xff0c;也称为 XSRF&#xff0c;Sea Surf 或Session Riding&#xff0c;是一个攻击向量&#xff0c;它欺骗 Web 浏览器在登录用户的应用程序中执行不需要的动作…

如何处理前端国际化和本地化?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

“比特币市场风起云涌:第三季度报告揭示表现和未来趋势“

要点&#xff1a; 比特币的季度价格表现较差&#xff0c;为 -11.5%&#xff0c;但今年迄今为止的表现仍优于大多数资产类别&#xff1b; 截至撰写本文时&#xff0c;上半年推动比特币上涨的美国购买力已完全减弱&#xff1b; 交易量、流动性、波动性和搜索趋势均继续…

idea安装汉化插件

settings plugins 插件搜索chinese 重启 成功

第五十五章 学习常用技能 - 删除存储的数据

文章目录 第五十五章 学习常用技能 - 删除存储的数据删除存储的数据重置存储Storage浏览表格 第五十五章 学习常用技能 - 删除存储的数据 删除存储的数据 在开发过程中&#xff0c;可能需要删除某个类的所有现有测试数据&#xff0c;然后重新生成它&#xff08;例如&#xff…

基于SSM的校园音乐平台系统

基于SSM的校园音乐平台系统~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 登录界面 管理员界面 歌手管理 歌曲管理 摘要 校园音乐平台系统&#xff08;Campus Mu…

三、RocketMQ的JAVAAPI的基础概念

消息(Message) 生产者和消费者数据流转的基础数据模型&#xff0c;主要属性有 字段名默认值必要性说明Topicnull必填消息所属topic的名称Bodynull必填消息体Tagsnull选填消息标签&#xff0c;方便服务器过滤使用。目前只支持每个消息设置一个Keysnull选填代表这条消息的业务关…

飞花令游戏(Python)

飞花令是古时候人们经常玩一种“行酒令”的游戏&#xff0c;是中国古代酒令之一&#xff0c;属雅令。“飞花”一词则出自唐代诗人韩翃《寒食》中 春城无处不飞花 一句。行飞花令时选用诗和词&#xff0c;也可用曲&#xff0c;但选择的句子一般不超过7个字。 在《中国诗词大会》…

四、RocketMQ发送普通消息、批量消息和延迟消息

Producer发送普通消息的方式 1.同步发送消息 同步消息代表发送端发送消息到broker之后&#xff0c;等待消息发送结果后&#xff0c;再次发送消息 实现步骤 创建生产端&#xff0c;声明在哪个生产组注册NameServer地址构建Message实体&#xff0c;指定topic、tag、body启动…

论文阅读之《Learn to see in the dark》

Learning to See in the Dark-CVPR2018 Chen ChenUIUC&#xff08;伊利诺伊大学厄巴纳-香槟分校&#xff09; Qifeng Chen, Jia Xu, Vladlen Koltun Intel Labs(英特尔研究院) 文章链接&#xff1a;https://arxiv.org/pdf/1805.01934.pdfhttps://arxiv.org/pdf/1805.01934.p…

使用hugging face开源库accelerate进行多GPU训练(单机多卡)时,在保存模型结构的时候出现的问题

目录 问题描述问题分析问题解决 问题描述 我在保存模型结构的时候&#xff0c;先获取模型参数&#xff0c;然后再保存&#xff0c;代码如下&#xff1a; 图示代码是在训练主循环中的&#xff1a; 这种情况下会出现报错&#xff1a; nboundLocalError: UnboundLocalErrorloc…

计算机毕业设计选什么题目好?springboot 医院门诊在线预约挂号系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

《C++ Primer》练习9.52:使用栈实现四则运算

栈可以用来使用四则运算&#xff0c;是一个稍微有点复杂的题目&#xff0c;去学习了一下用栈实现四则运算的原理&#xff0c;用C实现了一下。首先要把常见的中缀表达式改成后缀表达式&#xff0c;然后通过后缀表达式计算&#xff0c;具体的原理可以参考这位博主的文章&#xff…

本、硕、博区别真的辣么大吗?

61&#xff1a; 发际线已经说明了一切…… Super Mario&#xff1a; 小学&#xff0c;老师告诉学生&#xff1a;“森林里有只老虎&#xff0c;已经被我关在笼子里&#xff0c;我会带你去那个地方&#xff0c;然后给你一把猎枪&#xff0c;告诉你猎枪怎么用&#xff0c;并开枪…

RFID拓展的相关问答

基于&#xff1a; Research Reading: Smart Parking Applications Using RFID Technology-CSDN博客这篇文章总结了无线射频识别&#xff08;RFID&#xff09;技术在自动化中的应用及其在停车场管理系统中的解决方案。文章提到&#xff0c;RFID技术在自动化中可以降低交易成本&…

4. redis排名系统之C++实战操作对比MySQL

一、MySQL实现方法 假设我们要设计一款排名系统&#xff0c;那必然要涉及到两大类数据&#xff1a;武器数据和非武器的通用数据&#xff0c;它他通常有一个共用的属性&#xff1a;那就是主键唯一的&#xff0c;例如玩家的数字编号&#xff0c;通常在MySQL中是自增的无符号整数…

【牛客面试必刷TOP101】Day9.BM37 二叉搜索树的最近公共祖先和BM42 用两个栈实现队列

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;牛客面试必刷TOP101 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&…

pycharm安装汉化包失败解决方法

在pycharm -setting-plugins-搜索“Chinese”进入此界面&#xff1a; 点击install&#xff0c;在安装时出现&#xff1a;Plugin "Chinese (Simplified) Language Pack / 中文语言包" was not installed: Invalid filename returned by a server 解决方法&#xff1a…