云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 操作系统实验第六次磁盘调度

操作系统实验第六次磁盘调度

  • 62 次阅读
  • 3 次下载
  • 2025/6/5 12:21:29

if (0 == Offset) { // // 如果线程要访问的磁道与当前磁头所在磁道相同,可立即返回。 // pNextRequest = pRequest; goto RETURN; } else if ( Offset > 0 && Offset < InsideShortestDistance ) { // // 记录向内移动距离最短的线程 // InsideShortestDistance = Offset; INpNextRequest = pRequest; } else if ( Offset < 0 && -Offset < OutsideShortestDistance ) { // // 记录向外移动距离最短的线程 // OutsideShortestDistance = -Offset; OUTpNextRequest = pRequest; } }

//判断磁头移动方向,若向内移动 if( ScanInside) {

//判断是否有向内移动的线程 if(INpNextRequest) { //有则选择该线程 return INpNextRequest; } else { //没有则修改磁头方向,选择向外移动距离最短的线程 ScanInside = !ScanInside; return OUTpNextRequest;

12

} } //如果向外移动 else { //判断是否有向外移动的线程 if(OUTpNextRequest) { //有则选择该线程 return OUTpNextRequest; } else { //没有则修改词头方向,选择向内移动距离最短的线程 ScanInside = !ScanInside; return INpNextRequest; } }

RETURN: return pNextRequest; }

(2)编写循环扫描(CSCAN)磁盘调度算法

PREQUEST

IopDiskSchedule( VOID ) { PLIST_ENTRY pListEntry; PREQUEST pRequest; PREQUEST INpNextRequest = NULL; PREQUEST OUTpNextRequest = NULL; LONG Offset; ULONG InsideShortestDistance = 0xFFFFFFFF; ULONG OutsideShortestDistance = 0x00000000; PREQUEST pNextRequest = NULL;

13

// // 需要遍历请求队列一次或两次 // for (pListEntry = RequestListHead.Next; // 请求队列中的第一个请求是链表头指向的下一个请求。 pListEntry != &RequestListHead; // 遍历到请求队列头时结束循环。 pListEntry = pListEntry->Next) { // // 根据链表项获得请求的指针 // pRequest = CONTAINING_RECORD(pListEntry, REQUEST, ListEntry); // // 计算请求对应的线程所访问的磁道与当前磁头所在磁道的偏移(方向由正负表示) // Offset = pRequest->Cylinder - CurrentCylinder; if (0 == Offset) { // // 如果线程要访问的磁道与当前磁头所在磁道相同,可立即返回。 // pNextRequest = pRequest; goto RETURN; } else if ( Offset > 0 && Offset < InsideShortestDistance ) { // // 记录向内移动距离最短的线程 // InsideShortestDistance = Offset; INpNextRequest = pRequest; } else if ( Offset < 0 && -Offset > OutsideShortestDistance ) { // // 记录向外移动距离最长的线程 //

14

OutsideShortestDistance = -Offset; OUTpNextRequest = pRequest; } } //需要向内移动的线程是否存在 if( INpNextRequest ) { //存在则返回向内移动的请求 return INpNextRequest; } else { //否则返回向外移动的请求 return OUTpNextRequest; } RETURN: return pNextRequest;

}

(3)编写N-Step-SCAN磁盘调度算法

//

// N-Step-SCAN 磁盘调度算法使用的子队列长度N //

#define SUB_QUEUE_LENGTH 6 //

// 记录N-Step-SCAN 磁盘调度算法第一个子队列剩余的长度。

// 子队列初始长度为N,每执行一次磁盘调度算法会从子队列中移除一个请求,子队列 // 长度就要减少1,待长度变为0 时,再将长度重新变为N,开始处理下一个子队列。 //

ULONG SubQueueRemainLength = SUB_QUEUE_LENGTH; //

// 扫描算法中磁头移动的方向。操作系统启动时初始化为磁头向内移动。 // TRUE,磁头向内移动,磁道号增加。 // FALSE,磁头向外移动,磁道号减少。

15

搜索更多关于: 操作系统实验第六次磁盘调度 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

if (0 == Offset) { // // 如果线程要访问的磁道与当前磁头所在磁道相同,可立即返回。 // pNextRequest = pRequest; goto RETURN; } else if ( Offset > 0 && Offset < InsideShortestDistance ) { // // 记录向内移动距离最短的线程 // InsideShortestDistance = Offset; INpNextRequest = pRequest; } else if ( Offset < 0 && -O

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com