操作系统 | 实验八 文件管理

这篇具有很好参考价值的文章主要介绍了操作系统 | 实验八 文件管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验目的

掌握文件的存取方法;掌握文件的逻辑结构和物理结构;掌握存储空间的分配和回收;掌握磁盘管理与调度。

二、实验内容

用程序模拟磁盘的调度过程,并计算各磁盘调度算法包括先来先服务算法、最短寻道时间优先算法、扫描算法和循环扫描算法的平均寻道长度。
本实验是模拟操作系统的磁盘寻道方式,运用磁盘访问顺序的不同来设计磁盘的调度算法。实现的磁盘调度算法有FCFS,SSTF,SCAN,CSCAN和 NStepSCAN算法。设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序列。选择磁盘调度算法,显示该算法的磁道访问顺序,计算出移动的磁道总数和平均寻道总数。按算法的寻道效率进行排序,并对各算法的性能进行分析比较。

三、数据结构

3.1 函数以及功能

函数名称 功能描述
void FCFS(int b[],int n,int init) 先来先服务算法(FCFS)
void SSTF(int b[],int n,int k) 最短寻道时间优先算法(SSTF)
void SCAN1(int b[],int n,int k) 扫描算法(SCAN)由外向里
void SCAN2(int b[],int n,int k) 扫描算法(SCAN)由里向外
void FCFS(int b[],int n,int init) 循环算法(C—SCAN)
int main() main函数

四、程序流程图

操作系统 | 实验八 文件管理

五、实验代码

#include<stdio.h>
#include<math.h>
#define SYSINFO "文件管理" // 系统信息 
#define AUTHOR "孤灯" //作者 

void FCFS(int b[],int n,int init)
{
	int i = 0;
	int s = 0;
	int sum = 0;
	int a[20];
	for(i = 0; i < n; i++)
	{
		a[i] = b[i];
	}
	s = init;
	sum = 0;
	for(i = 0; i < n; i++)
	{
		printf("第%d次访问的磁道:%d\n", i+1, a[i]);
		sum += abs(s - a[i]);
		printf("sum=%d\n", sum);
		s = a[i];
	}
	printf("平均寻道长度:%f\n", sum * 1.0 / n);
}

void SSTF(int b[],int n,int k)
{
	int i = 0;
	int j = 0;
	int s = 0;
	int sum = 0;
	int p = 0;
	int a[20];
	for(i = 0; i < n; i++)
	{
		a[i] = b[i];
	}

	for(i = n-1; i >= 0; i--)
	{
		s = a[0];
		p = 0;
		for(j = 0; j <= i; j++)
			if(abs(a[j] - k) < abs(s - k))
			{
				s = a[j];
				p = j;
			}
		a[p] = a[i];
		printf("第%d次访问的磁道:%d\n", n-i, s);
		sum += abs(s - k);
		printf("sum=%d\n", sum);
		k = s;
	}

	printf("平均寻道长度:%f\n",sum * 1.0 / n);
}

void SCAN1(int b[],int n,int k)
{
	int i = 0;
	int j = 0;
	int s = 0;
	int sum=0;
	int p = 0;
	int biaoji = 0;
	int a[20];
	for(i=0; i<n; i++)
	{
		a[i] = b[i];
	}

	for(i = n-1; i >= 0; i--)
	{
		biaoji = 0;
		for(j = 0; j <= i; j++)
		{
			if(a[j] - k <= 0)
			{
				biaoji=1;
				p=j;
				break;
			}
		}
		if(biaoji==1)
		{
			s=a[p];
			for(j=0; j<=i; j++)
				if(a[j]<k&&k-a[j]<k-s)
				{
					s=a[j];
					p=j;
				}
			a[p]=a[i];
			printf("第%d次访问的磁道:%d\n",n-i,s);
			sum+=k-s;
			printf("sum=%d\n",sum);
			k=s;
		}
		else
		{
			s=a[0];
			for(j=0; j<=i; j++)
				if(a[j]-k<=s-k)
				{
					s=a[j];
					p=j;
				}
			a[p] = a[i];
			printf("第%d次访问的磁道:%d\n",n-i,s);
			sum += abs(k-s);
			printf("sum=%d\n",sum);
			k = s;
		}
	}

	printf("平均寻道长度:%f\n",sum * 1.0 / n);
}

void SCAN2(int b[],int n,int k)
{
	int i = 0;
	int j = 0;
	int s = 0;
	int sum=0;
	int p = 0;
	int biaoji = 0;
	int a[20];
	for(i = 0; i < n; i++)
	{
		a[i] = b[i];
	}

	for(i = n - 1; i >= 0; i--)
	{
		biaoji = 0;
		for(j = 0; j <= i; j++)
		{
			if(a[j] - k >= 0)
			{
				biaoji = 1;
				p = j;
				break;
			}
		}
		if(biaoji == 1)
		{
			s = a[p];
			for(j = 0; j <= i; j++)
				if(a[j]>k&&a[j]-k<s-k)
				{
					s=a[j];
					p=j;
				}
			a[p]=a[i];
			printf("第%d次访问的磁道:%d\n",n-i,s);
			sum += s-k;
			printf("sum=%d\n", sum);
			k = s;
		}
		else
		{
			s = a[0];
			for(j = 0; j <= i; j ++)
			{
				if(k - a[j] <= k - s)
				{
					s = a[j];
					p = j;
				}
			}

			a[p] = a[i];
			printf("第%d次访问的磁道:%d\n", n - i, s);
			sum += abs(k - s);
			printf("sum=%d\n",sum);
			k = s;
		}
	}
	printf("平均寻道长度:%f\n",sum * 1.0 / n);
}

void  C_SCAN(int b[],int n,int k)
{
	int i = 0;
	int j = 0;
	int s = 0;
	int sum=0;
	int p = 0;
	int biaoji = 0;
	int a[20];
	for(i = 0; i < n; i++)
	{
		a[i] = b[i];
	}

	for(i = n-1; i >= 0; i--)
	{
		biaoji=0;
		for(j = 0; j <= i; j++)
		{
			if(a[j]-k <= 0)
			{
				biaoji=1;
				p=j;
				break;
			}
		}
		if(biaoji == 1)
		{
			s = a[p];
			for(j = 0; j <= i; j++)
			{
				if(a[j] < k && a[j] - k > s - k)
				{
					s = a[j];
					p = j;
				}
			}
			a[p] = a[i];
			printf("第%d次访问的磁道:%d\n", n-i, s);
			sum += s - k;
			printf("sum=%d\n", sum);
			k = s;
		}
		if(biaoji==0)
			break;
	}
	s = a[0];
	for(j = 0; j <= i; j++)
	{
		if(a[j] >= s)
		{
			s = a[j];
			p = j;
		}
	}

	a[p] = a[i];
	printf("第%d次访问的磁道:%d\n", n - i, s);
	sum += k - s;
	printf("sum=%d\n", sum);
	k = s;
	i --;
	for(i; i >= 0; i --)
	{
		s = a[0];
		for(j = 0; j <= i; j ++)
		{
			if(a[j] - k >= s - k)
			{
				s = a[j];
				p = j;
			}
		}
		a[p] = a[i];
		printf("第%d次访问的磁道:%d\n", n-i, s);
		sum += s - k;
		printf("sum=%d\n", sum);
		k=s;
	}

	printf("平均寻道长度:%f\n", sum * 1.0 / n);
}
int main()
{
	int a[20] = {0};
	int i = 0;
	int n = 0;
	int k = 0;
	int k1 = 0;
	int init = 0;
	printf("请输入需要访问的磁道总数:");
	scanf("%d", &n);
	printf("要输入的访问序列要有重复值和距离相等的值,例如:初始值为5,序列中必须含有5,4,6,这样的序列。\n");
	for(i = 0; i < n; i++)
	{
		printf("需要访问的磁道%d:",i+1);
		scanf("%d",&a[i]);
	}

	printf("请输入指针所在磁道:");
	scanf("%d",&init);
	k = 1;
	while(k)
	{
		printf("**********************************\n");
		printf("%s\nDesigned By:%s\n", SYSINFO, AUTHOR);
		printf("**1.先来先服务(FCFS)**\n");
		printf("**2.最短寻道时间优先(SSTF)**\n");
		printf("**3.扫描算法(SCAN)**\n");
		printf("**4.循环算法(C-SCAN)**\n");
		printf("**0.退出**\n");
		printf("**********************************\n");
		printf("请在下面输入您的选择:");
		scanf("%d", &k);
		switch(k)
		{
			case 1:
				FCFS(a, n, init);
				break;
			case 2:
				SSTF(a, n, init);
				break;
			case 3:
				k1=1;
				while(k1)
				{
					printf("**1.移动臂由里向外**\n");
					printf("**2.移动臂由外向里**\n");
					printf("**0.返回上一层**\n");
					printf("**********************************\n");
					printf("请在下面输入您的选择:");
					scanf("%d", &k1);
					switch(k1)
					{
						case 1:
							SCAN1(a, n, init);
							break;
						case 2:
							SCAN2(a, n, init);
							break;
					}
				}
			case 4:
				C_SCAN(a, n, init);
				break;
		}
	}

	return 0;
}


六、实验结果

1)输入访问的磁道数及需要访问的磁道
操作系统 | 实验八 文件管理

2)输入初始指针所在磁道位置,选择FCFS算法
操作系统 | 实验八 文件管理

3)最短寻道时间优先算法(SSTF)
操作系统 | 实验八 文件管理

4)扫描算法(SCAN)由里向外
操作系统 | 实验八 文件管理

5)扫描算法(SCAN)由外向里
操作系统 | 实验八 文件管理

6)循环算法(C—SCAN)
操作系统 | 实验八 文件管理

七、实验体会总结

体会与总结:文章来源地址https://www.toymoban.com/news/detail-464527.html

  • 此次实验思路简单,目的明确,就是集中文件管理方法的算法的代码实现,分为几种不同的算法,通过代码加以实现,从而实现文件管理。
  • 此次实验设计到四个文件管理算法,分别是先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、SCAN扫描算法、循环算法(C—SCAN)。
  • 先来先服务(FCFS):根据进程请求访问磁盘的先后次序进行调度。
  • 最短寻道时间优先(SSTF):其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但这种调度算法却不能保证平均寻道时间最短。
  • 扫描算法(SCAN):当磁头正在由里向外移动时,SCAN算法所选择的下一个访问对象应是其欲访问的磁道,既在当前磁道之外,又是距离最近的。这样由里向外地访问,直至再无更外的磁道需要访问时,才将磁臂换向,由外向里移动。也叫电梯算法。
  • 通过此次实验加深了我对这几种算法的理解,以及熟悉了算法的流程,对这几种磁盘调度算法有了更清晰的认知。
  • 此次实验已经是操作系统这门课程的最后一次实验了,这次实验算是画上一个圆满的句号,这门课的句号,但是以后的逗号,行路并不止于此,路漫漫其修远兮,吾将上下而求索。

到了这里,关于操作系统 | 实验八 文件管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux操作系统】【综合实验三 用户帐号、文件系统与系统安全管理】【未整理】

    要求掌握Linux系统用户的创建、删除与管理操作;熟悉Linux文件系统的管理模式,学会创建用户文件系统并装载和卸载文件系统;掌握超级用户的管理方式与权限,并实施对普通用户的管理;熟悉Linux系统安全机制与相关管理方法。 通过这个第三阶段实验,要求掌握以下操作与

    2024年02月06日
    浏览(43)
  • JavaWeb图书管理系统课设:全面掌握CRUD操作

    详细介绍JavaWeb图书管理系统的开发过程,包括后端Servlet服务、前端Ajax交互以及MyBatis的增删改查实现,适合初学者巩固JavaWeb知识。

    2024年02月08日
    浏览(47)
  • 操作系统实验五 存储管理

    ★观前提示 : 本篇内容为操作系统实验内容 ,代码等内容经测试没有问题,但是 可能会不符合每个人实验的要求 ,因此以下内容建议 仅做思路参考 。 一、实验目的 掌握 虚拟内存 的管理机制。 了解虚拟存储技术的 特点 。 掌握请求分页存储管理的 页面置换算法 。 二、

    2024年02月06日
    浏览(43)
  • 操作系统实验之存储管理

    一、实验目的 1、了解虚拟存储技术的特点,掌握请求页式存储管理的主要页面置换算法原理。 2、掌握请求页式存储管理中页面置换算法的模拟设计方法。 3、通过随机产生页面访问序列开展有关算法的测试及性能比较。 二、实验内容 设计一个虚拟存储区和内存工作区,并

    2024年02月08日
    浏览(44)
  • 操作系统实验——进程管理的算法实现

    笔者在大学下属的事业单位上班,最近去帮着带下操作系统的实验课,这里随手水点参考代码,欢迎各位领导老师莅临指正 编写一个简单的进程调度器 进程控制块(PCB)的定义与管理 进程调度算法的实现 进程创建、销毁和切换 给定一批进程对比3-4种调度算法的时间(自选

    2024年02月06日
    浏览(44)
  • 操作系统实验(一)——可变分区存储管理

    湖南师范大学信息科学与工程学院计算机科学与技术非师范班操作系统实验报告 一、实验目的: 加深对可变分区存储管理的理解; 提高用C语言编制大型系统程序的能力,特别是掌握C语言编程的难点:指针和指针作为函数参数; 掌握用指针实现链表和在链表上的基本操作。

    2024年02月06日
    浏览(41)
  • 操作系统期末实验:多用户二级文件系统

    期末实验不是python写的,所以很可能是当时在github上找了一个,然后改了改hhh 如果后续找到了链接就放过来 设计一个多用户的二级文件系统,能够实现简单的文件操作。具体包括如下几条命令: (1)Dir 列文件目录; (2)Create 创建文件 (3)Delete 删除文件 (4)Deldir 删除

    2024年01月18日
    浏览(40)
  • 计算机系统结构与操作系统实验三(6)-内存管理

    实现内存管理 这里修改makefile文件和run.sh文件 在《操作系统真相还原源码》的基础上稍加修改makefile 注意:这里要用 make all 命令来执行makefile文件了 本实验所有源码👉👉👉 计算机系统结构与操作系统实验三bochs源代码

    2024年02月15日
    浏览(43)
  • 【操作系统实验】Ubuntu Linux 虚拟机用户管理

    Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。 在Linux系统中,任何文件都属于某一特定用户,而任何用户都隶属于至少一个用户组。 用户名(username) :每个用户账号都

    2023年04月24日
    浏览(77)
  • Linux文件系统(操作系统的文件管理)

    参考Linux内核源码版本------ linux-2.4.3 操作系统之下,进程是计算机系统 执行计算任务的基本单位 ,进程访问文件执行数据读写之前,操作系统会从外设获取相应的文件信息,在内存中建立 struct file 结构体对象来 描述和管理文件 ,进程借助 struct file 结构体提供的文件信息执行文件

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包