操作系统课程设计磁盘调度算法


    操作系统课程设计磁盘调度算法
    目 录
    1 课程设计目求……………………………………………………1
    2 相关知识…………………………………………………………………1
    3 题目分析…………………………………………………………………2
    4 概设计…………………………………………………………………2
    41 先先服务(FCFS)设计思想………………………………2
    42 短寻道时间优先调度(SSTF)设计思想…………………2
    43 扫描算法(SCAN)设计思想…………………………………2
    44 循环扫描(CSCAN)设计思想………………………………2
    5 代码流程………………………………………………………………3
    51 流程图……………………………………………………………3
    52 源代码……………………………………………………………8
    6 运行结果…………………………………………………………………16
    7 设计心…………………………………………………………………19
    参考文献…………………………………………………………………………19

    1 课程设计目求
    设计目:加深操作系统原理进步认识加强实践动手力程序开发力培养提高分析问题解决问题力培养合作精神巩固加深磁盘调度概念操作系统门工程性强课程仅求学生掌握操作系统工作原理理知识求学生实际动手力加深学容理解学生熟练掌握计算机操作方法种软件工具加强课程容理解次课程设计通模拟磁臂调度加深操作系统中磁臂调度概念理解学生熟悉磁盘理系统设计方法加深学种磁盘调度算法解算法特点
    设计求:编程序实现述磁盘调度算法求出种算法均寻道长度求设计界面灵活选择某算法算法实现
    1先先服务算法(FCFS)
    2短寻道时间优先算法(SSTF)
    3扫描算法(SCAN)
    4循环扫描算法(CSCAN)
    2 相关知识
    数结构:数组
    now前磁道号
    array[]放置磁道号数组
    void FCFS(int array[]int m )先先服务算法(FCFS)
    void SSTF(int array[]int m)短寻道时间优先算法(SSTF)
    void SCAN(int array[]int m) 扫描算法(SCAN)
    void CSCAN(int array[]int m)循环扫描算法(CSCAN)
    磁盘调度:进程请求访问磁盘时采种适驱动调度算法进程磁盘均访问(寻道)时间目前常磁盘调度算法:1)闲先服务2)短寻道时间优先3)扫描算法4)循环扫描算法等
    3 题目分析
    选择熟悉计算机系统程序设计语言模拟操作系统基功设计方法实现程
    完成分项功算法实现程中求决定变量应动态变时模块应该合理输出结果具体参实验程序模拟 功程序求行编写程序实现调现操作系统提供模块功函数磁盘调度程序模拟先先服务调度算法 短寻道时间优先调度循环(SCAN)调度算法程序设计语言选终软件(含源代码执行程序)设计报告形式提交课程设计结果磁盘调度限资源发挥更作道程序设计计算机系统中进程会断提出磁盘进行读写操作请求时候进程发送请求速度磁盘响应快必磁盘设备建立等队列
    4 概设计
    1先先服务(FCFS)设计思想
    先请求先响应FCFS策略起似相公请求频率高时候FCFS策略响应时间会延长FCFS策略建立起机访问机制模型假策略反复响应里外请求会消耗量时间量降低寻道时间需等着请求进行适排序简单FCFS策略程做磁盘调度理时候fcfs作简单磁盘调度算法
    2短寻道时间优先调度(SSTF)设计思想
    短时间优先算法选择样进程求访问磁道前磁头磁道距离次寻道时间短

    3扫描算法(SCAN)设计思想
    扫描(SCAN)调度算法该算法仅考虑欲访问 磁道前磁道间距离更优先考虑磁头前移动方例磁头正里外移动时SCAN算法考虑访问象应欲访问磁道前磁道外距离样里外访问直更外磁道需访问时磁道换外里移动时样次选择样进程调度访问前位置距离者样磁头逐步外里移动直更里面磁道访问避免出现饥饿现

    4循环扫描(CSACN)设计思想
    循环扫描(CSCAN)算法:磁头刚里外移动越某磁道时恰进程请求访问磁道时该里程必须等减少种延迟CSCAN算法规定磁头单移动实验程中设计磁头里外移动外里移动时须改方已实验未实现实验已完全演示循环扫描全程
    5 代码流程
    1先先服务(FCFS)

    图 1—1 FCFS流程图



    2短寻道时间优先调度(SSTF)

    图1—2 SSTF流程图

    3扫描算法(SCAN)

    图1—3 SCAN流程图
    4循环扫描(CSCAN)

    图1—4 CSCAN流程图


    图1—5 函数流程图
    源代码:
    #includestdioh
    #includestdlibh
    #includeiostreamh
    #define maxsize 100 定义数组域

    先先服务调度算法
    void FCFS(int array[]int m)
    {
    int sum0ji
    int avg
    printf(\n FCFS调度结果 )
    for(i0i{
    printf(d array[i])
    }
    for(i0j1j{
    sum+abs(array[j]array[i])累计总移动距离

    }
    avgsum(m1)计算均寻道长度
    printf(\n 移动总道数: d \nsum)
    printf( 均寻道长度: d \navg)

    }


    短寻道时间优先调度算法
    void SSTF(int array[]int m)
    {
    int temp
    int k1
    int nowlr
    int ijsum0
    int avg
    for(i0i{
    for(ji+1j{
    if(array[i]>array[j])两磁道号间较
    {
    temparray[i]
    array[i]array[j]
    array[j]temp
    }
    }
    }
    for( i0i{
    printf(d array[i])
    }
    printf(\n 请输入前磁道号:)
    scanf(d&now)
    printf(\n SSTF调度结果 )
    if(array[m1]{
    for(im1i>0i)数组磁道号输出
    printf(d array[i])
    sumnowarray[0]计算移动距离
    }
    else if(array[0]>now)判断整数组里数否前磁道号
    {
    for(i0iprintf(d array[i])
    sumarray[m1]now计算移动距离
    }
    else
    {
    while(array[k]{
    k++
    }
    lk1
    rk
    确定前磁道已排序列中位置
    while((l>0)&&(r{
    if((nowarray[l])<(array[r]now))判断短距离
    {
    printf(d array[l])
    sum+nowarray[l]计算移动距离
    nowarray[l]
    ll1
    }
    else
    {
    printf(d array[r])
    sum+array[r]now计算移动距离
    nowarray[r]
    rr+1
    }
    }
    if(l1)
    {
    for(jrj{
    printf(d array[j])
    }
    sum+array[m1]array[0]计算移动距离
    }
    else
    {
    for(jlj>0j)
    {
    printf(d array[j])
    }
    sum+array[m1]array[0]计算移动距离
    }
    }
    avgsumm
    printf(\n 移动总道数: d \nsum)
    printf( 均寻道长度: d \navg)

    }
    扫描算法

    void SCAN(int array[]int m)先出前磁道号移动臂移动方
    {
    int temp
    int k1
    int nowlrd
    int ijsum0
    int avg
    for(i0i{
    for(ji+1j{
    if(array[i]>array[j])磁道号进行排列
    {
    temparray[i]
    array[i]array[j]
    array[j]temp
    }
    }
    }
    for( i0i{
    printf(d array[i])输出排序磁道号数组
    }
    printf(\n 请输入前磁道号:)
    scanf(d&now)
    if(array[m1]{
    printf(\n SCAN调度结果 )
    for(im1i>0i)
    {
    printf(d array[i])数组磁道号输出
    }
    sumnowarray[0]计算移动距离
    }
    else if(array[0]>now)判断整数组里数否前磁道号
    {
    printf(\n SCAN调度结果 )
    for(i0i{
    printf(d array[i])磁道号输出
    }
    sumarray[m1]now计算移动距离
    }
    else
    {
    while(array[k]{
    k++
    }
    lk1
    rk
    printf(\n 请输入前移动臂移动方 (1 磁道号增加方0磁道号减方) )
    scanf(d&d)
    printf(\n SCAN调度结果 )
    if(d0)
    {
    for(jlj>0j)
    {
    printf(d array[j])
    }
    for(jrj{
    printf(d array[j])
    }
    sumnow2*array[0]+array[m1]计算移动距离
    }磁道号减方
    else
    {
    for(jrj{
    printf(d array[j])
    }
    for(jlj>0j)
    {
    printf(d array[j])
    }
    sumnowarray[0]+2*array[m1]计算移动距离
    }磁道号增加方
    }
    avgsumm
    printf(\n 移动总道数: d \nsum)
    printf( 均寻道长度: d \navg)

    }

    循环扫描算法
    void CSCAN(int array[]int m)
    {
    int temp
    int k1
    int nowlrd
    int ijsum0
    int avg
    for(i0i{
    for(ji+1j{
    if(array[i]>array[j])磁道号进行排列
    {
    temparray[i]
    array[i]array[j]
    array[j]temp
    }
    }
    }
    for( i0i{
    printf(d array[i])输出排序磁道号数组
    }
    printf(\n 请输入前磁道号:)
    scanf(d&now)
    if(array[m1]{
    printf(\n CSCAN调度结果 )
    for(i0i{
    printf(d array[i])磁道号输出
    }
    sumnowarray[0]+array[m1]计算移动距离
    }
    else if(array[0]>now)判断整数组里数否前磁道号
    {
    printf(\n CSCAN调度结果 )
    for(i0i{
    printf(d array[i])磁道号输出
    }
    sumarray[m1]now计算移动距离
    }
    else
    {
    while(array[k]{
    k++
    }
    lk1
    rk
    printf(\n 请输入前移动臂移动方 (1 磁道号增加方0磁道号减方) )
    scanf(d&d)
    printf(\n CSCAN调度结果 )
    if(d0)
    {
    for(jlj>0j)
    {
    printf(d array[j])
    }
    for(jm1j>rj)
    {
    printf(d array[j])
    }
    sum2*(array[m1]array[0])array[r]+now计算移动距离
    }磁道号减方
    else
    {
    for(jrj{
    printf(d array[j])
    }
    for(j0j{
    printf(d array[j])
    }
    sum2*(array[m1]array[0])+array[r1]now计算移动距离
    }
    }磁道号增加方
    avgsumm
    printf(\n 移动总道数: d \nsum)
    printf( 均寻道长度: d \navg)
    }

    操作界面
    int main()
    {
    int c
    FILE *fp定义指针文件
    int cidao[maxsize]定义磁道号数组
    int i0count
    fpfopen(cidaotxtr+)读取cidaotxt文件
    if(fpNULL)判断文件否存
    {
    printf(\n 请 先 设 置 磁 道 \n)
    exit(0)
    }
    while(feof(fp))果磁道文件存
    {
    fscanf(fpd&cidao[i])调入磁道号
    i++
    }
    counti1
    printf(\n \n)
    printf( 1011年度OS课程设计磁盘调度算法系统\n)
    printf( 计算机科学技术二班\n)
    printf( 姓名:宋思扬\n)
    printf( 学号:0803050203\n)
    printf( 电话:************\n)
    printf( 2010年12月29日\n)
    printf(\n \n)
    printf(\n 磁道读取结果:\n)
    for(i0i{
    printf(5dcidao[i])输出读取磁道磁道号
    }
    printf(\n )
    while(1)
    {
    printf(\n 算法选择:\n)
    printf( 1先先服务算法(FCFS)\n)
    printf( 2短寻道时间优先算法(SSTF)\n)
    printf( 3扫描算法(SCAN)\n)
    printf( 4循环扫描算法(CSCAN)\n)
    printf( 5 退出\n)
    printf(\n)
    printf(请选择:)
    scanf(d&c)
    if(c>5)
    break
    switch(c)算法选择
    {
    case 1
    FCFS(cidaocount)先先服务算法
    printf(\n)
    break
    case 2
    SSTF(cidaocount)短寻道时间优先算法
    printf(\n)
    break
    case 3
    SCAN(cidaocount)扫描算法
    printf(\n)
    break
    case 4
    CSCAN(cidaocount)循环扫描算法
    printf(\n)
    break
    case 5
    exit(0)
    }
    }
    return 0
    }
    6 运行结果


    图2—1 运行界面

    图2—2 运行FCFS界面

    图2—3 运行SSTF界面

    图2—4 运行SCAN界面



    图2—5 运行SCAN界面

    图2—6 运行CSCAN界面

    图2—7 运行CSCAN界面
    运行结果: 四种磁盘调度运行结果正确预期相符
    7 设计心
    次操作系统课程设计理实践两星期日子里说苦甜学东西时仅巩固前学知识学书没学知识通次课程设计懂理实际相结合重理知识远远够学理知识实践相结合起理中出结真正社会服务提高实际动手力独立思考力
    次实验首先解磁盘调度工作原理四种调度方法工作原理课程设计前准备工作时先部分工作做完设计总程序框架时候注意功模块位置量做简洁序功模块程序正确衔接
    设计程中遇许问题设计四种调度算法中两种例:初程序设计时两种构思:1)选数结构链表2)选数组初尝试链表觉方便易懂循环扫描处出现问题转变设计思路选数组直接进行排序然联系功模块
    时设计程中发现足处前学知识理解够深刻掌握够牢固身知识漏洞实践验较缺乏理联系实际力急需提高说编语言掌握应程序编写太会……通次课程设计定前学知识重新温感谢课程设计程中帮解惑老师学







    8 参考文献
    [1] 操作系统 民邮电出版社 宗华 宗涛 陈吉 编著
    [2] C语言程序设计 清华学出版社 马秀丽 刘志妩 李筠 编著
    [3] 操作系统实验指导书 沈阳理工学 唐巍 菀勋 编著

    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 2 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    操作系统课程设计磁盘调度算法

    《计算操作系统》课程设计报告 姓名: ...

    3年前   
    457    0

    操作系统实验三磁盘调度算法的实现

    XX大学计算机与通信工程学院实验报告2013 至 2014 学年 第 一 学期课程名称操作系统学号 学生姓名 年级 专业 教学班号 实验地点 实验时间 2013年 月 日 ...

    3年前   
    478    0

    进程调度算法的实现计算机操作系统课程设计

    题目2 进程调度算法的实现2.1 题目的主要研究内容及预期达到的目标(1)设计进程控制块; (2)设计多个进程队列; (3)设计多个进程(≥20); (4)动态生成时间片、执行时间和优先级,...

    3年前   
    579    0

    操作系统实验(进程调度+存储管理+磁盘调度++银行家算法+文件系统设计)

    操作系统实验(进程调度+存储管理+磁盘调度++银行家算法+文件系统设计)实验三 进程调度一、 实验目的多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处...

    3年前   
    641    0

    操作系统课程设计银行家算法报告

    《操作系统--银行家算法》课程设计报告姓 名: 学 号: 班 级:计科班 ...

    3年前   
    614    0

    操作系统课程设计银行家算法的模拟实现

    操作系统课程设计报告专业计算机科学与技术学生姓名班级学号指导教师完成日期信息工程学院题目: 银行家算法的模拟实现 一、设计目的本课程设计是学习完“操作系统原理”课程后进...

    3年前   
    675    0

    《操作系统 银行家算法》课程设计报告

    《操作系统--银行家算法》课程设计报告姓 名: 学 号: 班 级: 计科班 ...

    3年前   
    806    0

    合工大页面置换算法操作系统课程设计报告

    计算机与信息学院《操作系统综合设计》报告设计题目:页面置换算法学生姓名:学 号:专业班级:计算机科学与技术班2015 年 X月一、设计题目 3二、开发环境与工具 3三、设计原理 31....

    3年前   
    554    0

    银行家算法《操作系统》课程设计报告

    《操作系统》课程设计报告课题: 银行家算法 专业计算机科学与技术学生姓名班级计算机学号指导教师信息工程...

    3年前   
    691    0

    操作系统课程设计编程序模拟银行家算法

    课程设计报告书 课程名称: 操作系统原理 题 目: 编程序模拟银行家算法 系 名: 信息工程系 专业班级: ...

    3年前   
    722    0

    实训7 操作系统安装和磁盘管理实训报告

    实训7 操作系统安装和磁盘管理实训报告实训内容安装操作系统,利用操作系统自带工具进行磁盘分区、格式化。实训要求1. 熟悉操作系统安装方法2. 熟练利用操作系统自带工具进行磁盘分区和格式化3.了...

    4年前   
    1078    0

    操作系统实验四主存空间的分配与回收首次适应算法和循环首次适应算法

    实验报告【实验名称】 首次适应算法和循环首次适应算法 【实验目的】理解在连续分区动态的存储管理方式下,如何实现主存空间的分配与回收。【实验原理】首次适应(first fit,FF...

    3年前   
    1041    0

    数据结构和算法课程设计题目

    XX大学课程设计课程名称: 数 据 结 构 与 算 法院(部)名 称: 信息与计算科学学院组长姓名学号 同组人员姓名指导教师姓名: 设 计 时 间: 2010.6.7-...

    11个月前   
    375    0

    操作系统实验报告C语言实现银行家算法

    实 验 报 告题 目名 称C语言实现银行家算法院 系信息科学与工程学院班 级完成时间指导老师本次实验成绩组长联系电话邮件地址组员(姓名,学号)主要任务程序算法的编写、实现、运行调...

    3年前   
    464    0

    驱动程序实验报告操作系统课程设计报告

    操作系统课程设计报告班级: 计科 姓名: 学号: 老师: 时间:2012年X月X日一、设计目的操作...

    1年前   
    292    0

    操作系统课程设计动态分区分配存储管理

    操作系统课程设计设计题目 动态分区分配存储管理学生姓名号学 号指导教师专业班级计算机班 第一章 课程设计概述1.1 设计任务:动态分区分配存储管理1.2 设计要求建立描述内存...

    2年前   
    417    0

    哲学家进餐问题操作系统课程设计报告

    XX学院 《操作系统》课程设计报告题 目: 哲学家进餐问题 班 级: 学 号: ...

    2年前   
    743    0

    操作系统课程设计报告树型目录文件系统

    操作系统课程设计报告题目:树型目录文件系统 学 院 计算机学院 专 业 网络工程 年级班别 班 学 ...

    3年前   
    536    0

    数据结构课程设计报告最小生成树Kruskal算法

    计算机科学与技术系课程设计报告 2014-2015学年第二学期课程数据结构课程设计名称Kruskal算法求最小生成树学生姓名 学号 专业班级 软件工程指导教师 2014年X月题目:设计...

    1年前   
    200    0

    生产者与消费者算法模拟课程设计

    课程设计说明书题目: 生产者与消费者算法模拟 院 系: 计算机科学与工程 专业班级: 信息安全(xxxx)班 学 号: 学生...

    3年前   
    633    0

    文档贡献者

    文***享

    贡献于2021-01-16

    下载需要 2 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档