【实验目的】
掌握文件的存取方法;掌握文件的逻辑结构和物理结构;掌握存储空间的分配和回收;掌握磁盘管理与调度。
【实验内容】
用程序模拟磁盘的调度过程,并计算各磁盘调度算法包括先来先服务算法、最短寻道时间优先算法、扫描算法和循环扫描算法的平均寻道长度。
本实验是模拟操作系统的磁盘寻道方式,运用磁盘访问顺序的不同来设计磁盘的调度算法。实现的磁盘调度算法有FCFS,SSTF,SCAN,CSCAN和 NStepSCAN算法。设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序列。选择磁盘调度算法,显示该算法的磁道访问顺序,计算出移动的磁道总数和平均寻道总数。按算法的寻道效率进行排序,并对各算法的性能进行分析比较。
【实验步骤】
数据结构

void FCFS(int b[],int n,int init)//先来先服务
void SSTF(int b[],int n,int k)//最短寻道时间优先
void SCAN1(int b[],int n,int k)//扫描算法(SCAN),移动臂由里向外
void SCAN2(int b[],int n,int k)//扫描算法(SCAN),移动臂由外向里
void C_SCAN(int b[],int n,int k)//循环扫描算法(C-SCAN)

实验代码

#include <stdio.h>
#include<math.h>
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]);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);k=s;}printf("平均寻道长度:%f\n",sum * 1.0 / n);
}void SCAN1(int b[],int n,int k)
{int i,j,s,sum = 0,p,biaoji;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;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);k = s;}}printf("平均寻道长度:%f\n",sum * 1.0 / n);
}void SCAN2(int b[],int n,int k)
{int i,j,s,sum = 0,p,biaoji;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;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);printf("\n"); sum += abs(k - s);k = s;}}printf("平均寻道长度:%f\n",sum * 1.0 / n);
}void C_SCAN(int b[],int n,int k)
{int i,j,s,sum = 0,p,biaoji;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;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;k = s;i--;for(; 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;k = s;}printf("平均寻道长度:%f\n",sum * 1.0 / n);
}int main()
{int a[20];int i,n,k,k1,init;printf("请输入需要访问的磁道总数:");scanf("%d",&n);for(i = 0; i < n; i++){printf("需要访问的磁道编号%d:",i + 1);scanf("%d",&a[i]);}printf("请输入指针所在磁道编号:");scanf("%d",&init);k = 1;while(k){printf("**    1.先来先服务(FCFS)        **\n");printf("**    2.最短寻道时间优先(SSTF)  **\n");printf("**    3.扫描算法(SCAN)          **\n");printf("**    4.循环扫描算法(C-SCAN)    **\n");printf("**    0.退出                    **\n");printf("***************宋潘婷*******************\n\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("************20201219 *************\n");printf("**    1.移动臂由里向外          **\n");printf("**    2.移动臂由外向里          **\n");printf("**    0.返回上一层              **\n");printf("**********************************\n\n");printf("请在下面输入您的选择:");scanf("%d",&k1);switch(k1){case 1:SCAN1(a,n,init);break;case 2:SCAN2(a,n,init);break;}}break;case 4:C_SCAN(a,n,init);break;}}
}

操作系统实验(八):文件管理相关推荐

  1. 操作系统实验八-文件结构

    操作系统第八次实验 个人博客地址 文件结构 一.实验内容 把文件的逻辑结构转换成存储结构 设计便于顺序存取和直接存取的文件存储结构. 二.实验目的 研究用户概念中的信息组织方式 理解文件的逻辑结构.存 ...

  2. 操作系统实验八:页面置换模拟程序设计

    一.实验目的 1.通过软件模拟页面置换过程,加深对请求页式存储管理实现原理的理解 2.理解和掌握OPT.FIFO和LRU三种页面置换算法,深入分析三者之间的优缺点. 二.实验环境 硬件环境:计算机一台 ...

  3. 操作系统实验:文件管理 C语言

    设计实现一个模拟文件系统.包括文件目录管理.存储空间管理.文件创建.删除.读.写等基本操作功能.测试环境 DEVc++ #include<stdio.h> #include<stdl ...

  4. 操作系统实验五:文件管理

    实验五 文件管理 一.实验要求 (1)了解文件权限及作用: (2)掌握文件权限的设置: (3)掌握文件权限的管理与应用: (4)掌握文件基本操作: (5)理解文件系统管理文件的实现机制. 二.实验内容 ...

  5. 软件工程专业大二操作系统实验报告

    目录 实验一 Linux 安装 一.实验目的 二.预习报告 1. Linux背景 1.1 Red Hat 1.2 Fedora Linux 1.3 Ubuntu 2. Linux安装 2.1 安装步骤 ...

  6. 计算机操作系统32,计算机操作系统实验指导书32138

    计算机操作系统实验指导书32138 (22页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 <计算机操作系统>实验指导书程科白素 ...

  7. 操作系统实验报告9:进程间通信—管道和 socket 通信

    操作系统实验报告9 实验内容 实验内容:进程间通信-管道和 socket 通信. 编译运行课件 Lecture11 例程代码: alg.11-3-socket-input-2.c alg.11-4-s ...

  8. 操作系统实验一到实验九合集(哈工大李治军)

    操作系统实验 作者寄语 操作系统实验的学习是一个循序渐进的过程,初次看linux-0.11中的代码,看着满屏的汇编语言,确实头疼.但通过学习赵炯博士的Linux内核0.11完全注释,结合着王爽老师的汇 ...

  9. 操作系统学习之文件管理:

    操作系统学习之文件管理: 一.文件的逻辑结构: 1.无结构文件:文件的内部的数据就是一系列的二进制流或字符流组成,又称为流式文件(Windows操作系统中的.txt文件). 2.有结构文件:由一组相似 ...

  10. 操作系统实验五:用户进程管理(详细分析)

    操作系统实验五:用户进程管理 一. 实验目的 二. 实验任务 三. 实验准备 1.alloc_proc() 函数 2.do_fork() 函数 3.idt_init() 函数 4.trap_dispa ...

最新文章

  1. python快捷键设置_UltraEdit搭建Python IDE环境+设置快捷键
  2. 每日两道前端面试题20190221
  3. windows tomcat 升级openssl_Linunx开发环境配置——Tomcat
  4. Mac使用Homebrew安装Kafka
  5. Java Selenium - 处理页面弹出窗
  6. Linux单用户模式(修改密码、运行级别)方法详解
  7. pycharm: connot find declaration to go to
  8. minecraftjava版光追_我的世界:网易版终于更新狐狸生物?Java版光追技术已开始测试?...
  9. android 多媒体相册,朵朵多媒体相册免费版
  10. 微信小程序之登录界面示例
  11. win10 OCX控件的注册
  12. 天池竞赛赛题-特征工程-天猫用户重复购买预测解析
  13. 产品经理的分类和职责
  14. 大学计算机数学基础2,计算机数学基础-中国大学mooc-题库零氪
  15. Row size too large (> 8126). Changing some columns to TEXT or BLOB… | Mysql / MariaDB
  16. 简单有效的多标准中文分词详解
  17. 计算钱币(编写程序,读取用户输入的代表总金额的double值,打印表示该金额所需的最少纸币张数和硬币个数,打印从最大金额开始。纸币的种类有十元、五元、一元,硬币的种类有五角、一角、贰分、壹分。)
  18. Windows Server 2008 安装SVN
  19. 维修手记——燃气热水器低水压点火困…
  20. linux 客户端ftp 登陆成功之后ls 卡死

热门文章

  1. 通过ASP.NET Ajax技术模拟实现NBA比赛文字直播功能
  2. uniapp 获取页面高度及元素高度
  3. 高斯径向基函数的理解
  4. Flink:四大基石[Time,Window,Checkpoint,State]
  5. iloc和loc区别和应用总结
  6. java参考中文站 http://www.javaref.cn
  7. 基于MATLAB对系统的串联滞后校正
  8. 三毛的诗 I 如果有来生
  9. mysql 海明距离_mysql根据经纬度求两地距离(示例代码)
  10. rpm包管理器常见用法