资源简介
计算机操作系统的实验课:磁盘调度算法的c++模拟实现。包含可直接执行的工程压缩包,有详尽的注释。
代码片段和文件信息
/*
磁盘调度程序
输入:当前磁头位置,磁头移动方向,磁道访问请求序列
输出:磁头依次访问的磁道号顺序,磁头移动的总磁道数
算法:先来先服务(FCFS),最短寻道时间优先(SSTF),扫描算法(SCAN)
*/
#include
#include
#include
#define DISK_SUM 200
#define REQUEST__COUNT 8
using namespace std;
void FCFS(int currentNum int sequence[REQUEST__COUNT])
{
cout << “磁头依次访问的磁道号顺序:“;
cout << currentNum << ‘ ‘;
for (int i=0; i < REQUEST__COUNT; i++)
{
cout << sequence[i] << ‘ ‘;
}
cout << endl;
int count = abs(sequence[0]-currentNum);
for (int i = 1; i < REQUEST__COUNT; i++)
{
count += abs(sequence[i] - sequence[i - 1]);
}
cout << “磁头移动的总磁道数:“ << count << endl;
double average = (double)count / (double)REQUEST__COUNT;
cout << “平均寻道长度:“ < }
void SSTF(int currentNum int sequence[REQUEST__COUNT])
{
int temp;
int a[REQUEST__COUNT + 1];
//把初始位置和序列合并至一个数组
a[0] = currentNum;
for (int i = 1; i < REQUEST__COUNT+1; i++)
{
a[i] = sequence[i-1];
}
//按照最短寻道时间排序
for (int j = 0; j < REQUEST__COUNT-1; j++)
{
for (int i = REQUEST__COUNT; i > j+1; i--)
{
if (abs(a[i] - a[j]) < abs(a[i - 1] - a[j]))
{//若后一个的距离较短则交换
temp = a[i];
a[i] = a[i - 1];
a[i - 1] = temp;
}
}
}
cout << “磁头依次访问的磁道号顺序:“;
for (int i = 0; i < REQUEST__COUNT+1; i++)
{
cout << a[i] << ‘ ‘;
}
cout << endl;
int count = 0;
for (int i = 1; i < REQUEST__COUNT+1; i++)
{
count += abs(a[i] - a[i - 1]);
}
cout << “磁头移动的总磁道数:“ << count << endl;
double average = (double)count / (double)REQUEST__COUNT;
cout << “平均寻道长度:“ << average << endl;
}
void SCAN(int currentNum int sequence[REQUEST__COUNT] int direction)
{
int left[REQUEST__COUNT] right[REQUEST__COUNT];
int result[REQUEST__COUNT];
int p = 0q = 0;//数组下标
//将序列分成小于当前位置的和大于当前位置的
for (int i = 0; i < REQUEST__COUNT; i++)
{
if (sequence[i] < currentNum)
{
left[p++] = sequence[i];
}
else
{
right[q++] = sequence[i];
}
}
//对left按从大到小排序,right按从小到大排序
int temp;
for (int i = 0; i < p - 1; i++)
{
for (int j = 0; j < p - 1; j++)
{
if (left[j] < left[j + 1])
{
temp = left[j];
left[j] = left[j+1];
left[j+1] = temp;
}
}
}
for (int i = 0; i < q - 1; i++)
{
for (int j = 0; j < q - 1; j++)
{
if (right[j] > right[j + 1])
{
temp = right[j];
right[j] = right[j + 1];
right[j + 1] = temp;
}
}
}
if (direction == 0)
{//先向左扫描
for (int i = 0; i < p; i++)
{
result[i] = left[i];
}
for (int i = p; i < REQUEST__COUNT; i++)
{
result[i] = right[i - p];
}
}
else
{//向右扫描
for (int i = 0; i < q; i++)
{
result[i] = right[i];
}
for (int i = q; i < REQUEST__COUNT; i++)
{
result[i] = left[i - q];
}
}
cout << “磁头依次访问的磁道号顺序:“;
cout << currentNum << ‘ ‘;
for (int i = 0; i < REQUEST__COUNT; i++)
{
cout << result[i] << ‘ ‘;
}
cout << endl;
int count = abs(result[0] - curre
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 29184 2017-11-27 17:00 diskDispatch\.vs\diskDispatch\v15\.suo
文件 4861952 2017-11-27 17:00 diskDispatch\.vs\diskDispatch\v15\Browse.VC.db
文件 25690112 2017-11-27 16:41 diskDispatch\.vs\diskDispatch\v15\ipch\AutoPCH\d43cc503e999643a\MAIN.ipch
文件 112640 2017-11-27 16:48 diskDispatch\Debug\diskDispatch.exe
文件 1954024 2017-11-27 16:48 diskDispatch\Debug\diskDispatch.ilk
文件 2641920 2017-11-27 16:48 diskDispatch\Debug\diskDispatch.pdb
文件 33 2017-11-24 18:26 diskDispatch\diskDispatch\data.txt
文件 207 2017-11-27 16:48 diskDispatch\diskDispatch\Debug\diskDispatch.log
文件 638 2017-11-27 16:48 diskDispatch\diskDispatch\Debug\diskDispatch.tlog\CL.command.1.tlog
文件 19210 2017-11-27 16:48 diskDispatch\diskDispatch\Debug\diskDispatch.tlog\CL.read.1.tlog
文件 540 2017-11-27 16:48 diskDispatch\diskDispatch\Debug\diskDispatch.tlog\CL.write.1.tlog
文件 214 2017-11-27 16:48 diskDispatch\diskDispatch\Debug\diskDispatch.tlog\diskDispatch.lastbuildstate
文件 1190 2017-11-27 16:48 diskDispatch\diskDispatch\Debug\diskDispatch.tlog\li
文件 3314 2017-11-27 16:48 diskDispatch\diskDispatch\Debug\diskDispatch.tlog\li
文件 518 2017-11-27 16:48 diskDispatch\diskDispatch\Debug\diskDispatch.tlog\li
文件 276223 2017-11-27 16:48 diskDispatch\diskDispatch\Debug\main.obj
文件 338944 2017-11-27 16:48 diskDispatch\diskDispatch\Debug\vc141.idb
文件 438272 2017-11-27 16:48 diskDispatch\diskDispatch\Debug\vc141.pdb
文件 5826 2017-11-23 19:41 diskDispatch\diskDispatch\diskDispatch.vcxproj
文件 1057 2017-11-23 19:41 diskDispatch\diskDispatch\diskDispatch.vcxproj.filters
文件 4861 2017-11-27 16:11 diskDispatch\diskDispatch\main.cpp
文件 1448 2017-11-23 18:26 diskDispatch\diskDispatch.sln
目录 0 2017-11-23 18:32 diskDispatch\.vs\diskDispatch\v15\ipch\AutoPCH\d43cc503e999643a
目录 0 2017-11-23 18:29 diskDispatch\.vs\diskDispatch\v15\ipch\AutoPCH
目录 0 2017-11-23 18:29 diskDispatch\.vs\diskDispatch\v15\ipch
目录 0 2017-11-27 17:00 diskDispatch\.vs\diskDispatch\v15
目录 0 2017-11-27 16:48 diskDispatch\diskDispatch\Debug\diskDispatch.tlog
目录 0 2017-11-23 18:26 diskDispatch\.vs\diskDispatch
目录 0 2017-11-27 16:48 diskDispatch\diskDispatch\Debug
...D.H. 0 2017-11-23 18:26 diskDispatch\.vs
............此处省略6个文件信息
相关资源
- 操作系统课设源代码 模拟进程的并
- 64位操作系统下win10、win7,VC6的所有问
- 操作系统课程设计之死锁检测
- 操作系统课程设计 哲学家进餐问题完
- 2010-2011华南理工大学操作系统课程设
- 操作系统进程间通信,用mfc实现
- 2013-2014华南理工大学操作系统课程设
- 操作系统实验 请求分页存储管理(包
- 进程/作业调度:时间片轮转调度算法
- 嵌入式实时操作系统μC/OS-III(英文
- 操作系统课程设计:进程/作业调度
- 操作系统 进程调度 多级队列反馈
- 自己动手写操作系统 于渊 高清带书签
- 操作系统读者写者写优先
- 消费者与生产者
- 操作系统八大调度算法c/c++实现
- 模拟操作系统的实现 C语言
- 操作系统实验可视化界面
- 操作系统概念:进程调度算法FCFS、
- STemWin无操作系统移植-(STM32)
- 《从0到1教你写uCOS-III》pdf 图文教程(
- 计算机操作系统(修订版)ppt课件[汤
- 操作系统概论(2018版)
- 操作系统进程调度先来先服务、短进
- 操作系统实验多线程同步含C++源代码
- 华中科技大学操作系统实验报告.doc
- 操作系统实现作业调度实验MFC源程序
- 自己动手写操作系统PDF上 于渊 70M 超
- 《Linux操作系统》实验报告
- ARM Cortex-M0 全可编程SoC原理及实现 面
评论
共有 条评论