操作系统原理与实验——实验七固定分区的分配与回收

实验指南

运行环境:

Dev c++

算法思想:

本实验是模拟存储管理方式中的固定分区分配与回收算法,系统在作业装入前预分将整个用户区划分为若干个大小确定的分区,然后根据待装入作业的名称和大小到分区列表中查找满足要求的空闲分区,再将该分区状态标志修改为作业名; 当作业运行结束时,根据该作业名查找分区列表找到与作业名相同的分区,再将其状态标志修改为空。

关键数据结构定义:

int n, m;//分区数量, 作业个数

int v[1000000];//存储作业大小

struct Y{

       int id;//分区号

       int sz;//分区大小

       int address;//分区始址

       string station;//状态

}a[110];

程序框架:

//函数名:input    函数参数:无

Y input() {

//函数功能:输入一个分区信息包括分区号,分区大小和分区始址

}

//函数名:print    函数参数:无

void print() {

    //函数功能:输出所有分区信息(包括此时的状态,未被占用输出0,被占  用输出占用该分区的作业名)

}

int main() {

    printf("请输入系统的分区块数:");scanf("%d", &n);

    printf("请依次输入:\n分区号 大小 起始\n");

    for (int i = 1; i <= n; i++) a[i] = input(); print();

    printf("请输入作业的个数:"); scanf("%d", &m);

    printf("请输入这%d个作业的信息:\n", m);

    for(int i = 1; i <= m; i++) {

        printf("请输入作业%d的大小:",i);

        scanf("%d", &v[i]);

    }

    printf("打印各作业的信息:\n");

    printf("作业名 作业大小\n");

    for(int i = 1; i <= m; i++) { printf("JOB%d %dKB\n", i, v[i]);

        for(int j = 1; j <= n; j++) {

            if(a[j].sz >= v[i] && a[j].station == "") {//找到可以容纳得下该作业且未被占用的分区

                a[j].station = "JOB";

                a[j].station += '0'+i;

                break;

            }

        }

    }

    print();

    while(true) {

        char op[2];

        printf("是否需要回收(y/n)?");

        scanf("%s", op);

        if(op[0] == 'n') break; print();

        string str;printf("请输入回收的作业名:");cin >> str;

        puts("回收成功");

        for(int i = 1; i <= n; i++) if(a[i].station == str) a[i].station.clear();//标记回未占用状态

        print();

    }

    return 0;

}

测试用例:

5

1 12 20

2 32 32

3 64 64

4 128 128

5 100 256

3

30

60

90

y

2

y

3

y

1

n

关键代码

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int n, m;//分区数量, 作业个数 
int v[1000000];//存储作业大小 
struct Y{
	int id;//分区号
	int sz;//分区大小
	int address;//分区始址
	string station;//状态 
}a[110];
//函数名:input    函数参数:无
Y input() {
	//函数功能:输入一个分区信息包括分区号,分区大小和分区始址
	struct Y X;
	scanf("%d %d %d",&X.id,&X.sz,&X.address);
	return X;
}

//函数名:print    函数参数:无
void print() {
    //函数功能:输出所有分区信息(包括此时的状态,未被占用输出0,被占	用输出占用该分区的作业名)
    printf("**********打印分区信息**********\n");
    printf("分区号 大小(KB) 起始(KB) 状态\n");
    for(int i=1;i<=n;i++)
    {
    	printf("%d\t%d\t   %d\t\t",a[i].id,a[i].sz,a[i].address);
    	if(a[i].station=="")
    	printf("0");
    	else
    	cout <<a[i].station;
    	printf("\n");
	}
}

int main() {
	printf("请输入系统的分区块数:");scanf("%d", &n);
	printf("请依次输入:\n分区号 大小 起始\n");
	for (int i = 1; i <= n; i++) a[i] = input(); print();
	printf("请输入作业的个数:"); scanf("%d", &m);
	printf("请输入这%d个作业的信息:\n", m);
	for(int i = 1; i <= m; i++) {
		printf("请输入作业%d的大小:",i);
		scanf("%d", &v[i]);
	}
	printf("打印各作业的信息:\n");
	printf("作业名 作业大小\n");
	for(int i = 1; i <= m; i++) { printf("JOB%d %dKB\n", i, v[i]);
		for(int j = 1; j <= n; j++) {
			if(a[j].sz >= v[i] && a[j].station == "") {//找到可以容纳得下该作业且未被占用的分区
				a[j].station = "JOB";
				a[j].station += i+'0';                   //i+'0',c++定义了优先级  int转string!!!!!!!!!!!!!!!!!!! 
				//a[j].station +=std:: 
				break;
			}
		}
	}
	print();
	while(true) {
		char op[2];
		printf("是否需要回收(y/n)?");
		scanf("%c", op);                                           //%c和%s!!!!!!!!!!!!!!!!!!!!!! 
		if(op[0] == 'n') break; print();
		string str;printf("请输入回收的作业名:");cin >> str;
		puts("回收成功");
		for(int i = 1; i <= n; i++) if(a[i].station == str) a[i].station.clear();//标记回未占用状态
		print();
	}
	return 0;
}

运行结果

实验总结

①注意函数的调用

②该程序存在不足,如果输入的作业名错误,该程序还是会返回“回收成功”的信息,没有交互性

③对C语言的字符串输出还得进一步学习,不能一个程序既有C语言又有C++语言

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙Next-TextInput制作简易登录页面

Entry Component struct EventCase {State username: string State password: string build() {Row() {Column({ space: 30 }) {TextInput({ placeholder: 请输入用户名, text: $$this.username }).height(40)TextInput({ placeholder: 请输入密码, text: $$this.password })…

【网络原理】TCP协议详细解析

文章目录 &#x1f332;TCP协议的概念&#x1f338;TCP协议段格式&#x1f338;TCP的特性 &#x1f333;TCP原理详解&#x1f338;确认应答机制&#xff08;安全机制&#xff09;&#x1f338;超时重传机制&#xff08;安全机制&#xff09;&#x1f338;连接管理&#xff08;安…

电脑缺少dll文件一键修复的方法,如何快速修复dll文件

如果你遇到了电脑缺少dll文件&#xff0c;那么也不要慌&#xff0c;要解决也是比较简单的&#xff0c;下面我们一起来了解一下电脑缺少dll文件一键修复的方法&#xff0c;教教大家快速修复。 一.什么是dll文件 DLL 文件全称为“Dynamic Link Library”文件&#xff0c;翻译为中…

美国科技行业今年裁员超 5 万人;宁德时代一年净赚超 440 亿丨 RTE 开发者日报 Vol.167

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

Docker部署Django项目——基础

1.服务器配置 1.1centos7 系统的安装 centos-7-isos-x86_64安装包下载) VMware安装自定义配置 选择对应的系统镜像 一般选择内核4核、内存8g、硬盘80g 相关配置 1.2.网络配置 1.2.1查看win电脑虚拟机VMnet8的ip 使用ipconfig查看虚拟机的ip 1.2.2配置虚拟机VMnet8的ip…

膨胀 卷积

1.作用 Dilated convolution、Atrous convolution 增大感受野保持原输入大小 2.膨胀因子 描述的是相邻元素之间的距离 r 2 3.gridding effect 不合理的多个膨胀卷积之前&#xff0c;设计的膨胀因子不合理导致&#xff0c;在增大感受野的同时丢失了细节信息。 丢失&…

计算机组成原理-1-计算系统概论

1. 计算系统概论 文章目录 1. 计算系统概论1.0 课程概貌1.1 计算机系统简介1.2 计算机的硬件框图1.3 计算机的工作步骤1.4 计算机硬件的主要技术指标 本笔记参考哈工大刘宏伟老师的MOOC《计算机组成原理&#xff08;上&#xff09;_哈尔滨工业大学》、《计算机组成原理&#xf…

简历信息泄露?如何用图数据库技术解决简历泄露事件的反欺诈挑战

“金三银四”&#xff0c;又到了春招黄金期&#xff0c;但个人简历泄露的数据安全问题诸见报端&#xff0c;甚至在此前的3.15晚会报道中就揭露过招聘平台上的简历信息被泄露&#xff0c;不法分子通过各种渠道获取到简历&#xff0c;并用于欺诈活动&#xff0c;形成了一套庞大的…

2023年度VSCode主题推荐(个人常用主题存档)

前言 早在2018年的时候发了一篇关于VSCode主题风格推荐——VS Code 主题风格设置&#xff0c;时过境迁&#xff0c;如今常用的主题皮肤早已更替。 今天下午在整理VSCode插件的时候&#xff0c;不小心把常用的那款&#xff08;亮色&#xff09;主题插件给删除了&#xff0c;无…

18 优先级队列

priority_queue介绍 1.优先级队列是一种容器适配器&#xff0c;根据弱排序标准&#xff0c;它的第一个元素总是最大的 2.此上下文类似于堆&#xff0c;堆中可以随时插入元素&#xff0c;检索最大堆元素 3.优先队列实现为容器适配器&#xff0c;容器适配器即将特定容器类封装作…

科普文之五分钟轻松入门Generative AI

1. 引言 最近&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;在行业内带来了巨大的变动。还记得 2022 年 11 月推出的 ChatGPT 吗&#xff1f;在短时间内&#xff0c;它就成为了有史以来用户数量最快突破 1 亿的产品。 人工智能已经存在了很长一段时间&…

二叉树算法

递归序 每个节点都能回到3次! 相当于2执行完然后返回了代码会往下走,来到3节点 小总结: 也就是4节点先来到自己一次,不会执行if,先调用自己左边的那个函数,但是是null,直接返回。 这个函数执行完了,就会回到自己,调用自己右边的那个函数,结果又是空,又返回,回到…

Hive SQL必刷练习题:连续问题 间断连续(*****)

问题描述&#xff1a; 1&#xff09; 连续问题&#xff1a;找出连续三天&#xff08;或者连续几天的啥啥啥&#xff09;。 2&#xff09; 间断连续&#xff1a;统计各用户连续登录最长天数&#xff0c;间断一天也算连续&#xff0c;比如1、3、4、6也算登陆了6天 问题分析&am…

Kotlin进阶之协程从上车到起飞

公众号「稀有猿诉」 原文链接 Kotlin进阶之协程从上车到起飞 通过前面的一篇文章我们理解了协程的基本概念&#xff0c;学会协程的基本使用方法&#xff0c;算是正式入门了&#xff0c;接下来就是要深入的学习技术细节和高级使用方法&#xff0c;以期完全掌握Kotlin协程…

等保测评的知识

结合自己所学的知识和网络上的一些知识做个小总结。 目录 一、概念&#xff1a; 二、等级划分&#xff1a; 三、技术要求&#xff1a; 四、管理要求&#xff1a; 五、等保测评实施过程&#xff1a; 六、典型的网络架构&#xff1a; 一、概念&#xff1a; 全称为信息安全等级保…

HarmonyOS NEXT应用开发之Web获取相机拍照图片案例

介绍 本示例介绍如何在HTML页面中拉起原生相机进行拍照&#xff0c;并获取返回的图片。 效果预览图 使用说明 点击HTML页面中的选择文件按钮&#xff0c;拉起原生相机进行拍照。完成拍照后&#xff0c;将图片在HTML的img标签中显示。 实现思路 添加Web组件&#xff0c;设置…

mysql索引(聚簇索引,非聚簇索引:回表)( innodb 引擎库表设计注意事项)

索引文件存放位置 MyISAM 引擎每个表 都会有3个文件&#xff1a;表结构 &#xff08;.frm&#xff09; 表数据 &#xff08; .MYD&#xff09; 索引 &#xff08;.MYI&#xff09; InnoDB 引擎每个表 都会有2个文件&#xff1a;表结构 &#xff08;.frm&#xff09;表数据索引…

flex 布局实现局部 区域滚动

需求描述&#xff1a; 头部固定不动&#xff0c;内容部分区域滚动 一、实现代码 1、实现逻辑 1. 最外层父元素&#xff0c;必须要flex布局&#xff0c;并且宽度、高度撑满可视化区域 >代码为 width: 100vw;height: 100vh; 2. 只给滚动区域设置 flex:1; overflow: scroll…

定义一个符号常量,并计算

这段代码的输出结果是什么 #include <stdio.h> #define PI 32 int main() { int iPI*2; printf("i%d\n",i);} 是7。 我问了一下AI&#xff0c;AI也回答错了&#xff0c;这是个值得注意的地方。

Error response from daemon Get server gave HTTP response to HTTPS client

使用docker compose拉起docker镜像时&#xff0c;若出现如下报错 Error response from daemon: Get "https://devops.test.cn:5000/v2/": http: server gave HTTP response to HTTPS client表示Docker守护进程无法从指定url获取响应&#xff0c; 可能原因有以下&…