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


    
    实验报告

    实验名称 首次适应算法循环首次适应算法
    实验目
    理解连续分区动态存储理方式实现存空间分配回收
    实验原理
    首次适应(first fitFF)算法
    FF算法求空闲分区链址递增次序链接分配存时链首开始序查找直找满足求空闲分区然作业该分区中划出块存空间分配请求者余空闲分区留空闲链中链首直链尾找满足求分区表明系统中已没足够存分配该进程存分配失败返回
    循环首次适应(next fitNF)算法
    避免低址部分留许空闲分区减少查找空闲分区开销循环首次适应算法进程分配存空间时次链首开始查找次找空闲分区空闲分区开始查找直找满足求空闲分区中划出块玉请求相等存空间分配作业

    实验容
    实现存空间分配回收:
    1 采变式分区理首次适应算法实现存空间分配回收
    2 采变式分区理循环首次适应算法实现存空间分配回收
    数结构符号说明:
    typedef struct PCB进程控制块
    {
    char ProgressName[10] 进程名称
    int Startaddress 进程开始址
    int ProgressSize 进程
    int ProgressState 0 进程状态
    }
    typedef struct FREE 空闲区结构体
    {
    int Free_num 空闲区名称
    int Startaddress 空闲区开始址
    int Endaddress 空闲区结束址
    int Free_Space 空闲区
    }

    算法流程图:
    首次适应算法


    循环首次适应算法

    程序代码截图:
    #include
    #include
    #include
    #include
    #define N 1024
    typedef struct PCB进程控制块
    {
    char ProgressName[10] 进程名称
    int Startaddress 进程开始址
    int ProgressSize 进程
    int ProgressState 0 进程状态
    }
    typedef struct FREE 空闲区结构体
    {
    int Free_num 空闲区名称
    int Startaddress 空闲区开始址
    int Endaddress 空闲区结束址
    int Free_Space 空闲区
    }

    int count 0 前存中进程数
    bool ROM[N]设置存块
    int p 0循环首次需标记前空闲区块
    FREE FREE[100]设置空闲区数组100
    int FREE_counter 0空闲区数
    PCB num[20] 作业队列

    void init()初始化操作
    {
    for(int i0 i ROM[i] 0
    }

    void showProgress(PCB &a)
    {
    printf(\n)
    printf(进程名\t\t开始址\t\t\t\t结束址\n)输出存信息
    printf(\n)
    for(int i0 i for(int ji j if(num[j]Startaddress>num[j+1]Startaddress)
    {
    a num[j]
    num[j] num[j+1]
    num[j+1] a
    }
    for(int i0 i if(num[i]ProgressState0)
    printf(s\t\td\t\t\td\t\td\t\t\nnum[i]ProgressNamenum[i]Startaddressnum[i]ProgressSizenum[i]ProgressSize+num[i]Startaddress1)
    printf(\n)
    }

    void showFree()印空闲区情况
    {
    printf(\n)
    printf( 空闲区名\t| 开始址\t| \t| 结束址\n)
    printf(\n)
    for (int i1 i< FREE_counter i++)
    {
    printf(\t1d\t8d\t11d\t d\nFREE[i]Free_numFREE[i]Startaddress FREE[i]Free_SpaceFREE[i]Endaddress)
    printf(\n)
    }
    }

    void find_FREE() 寻找空闲区
    {
    int ijp 计数值
    FREE_counter 0预设空闲区数0
    for(i 0 i < N i++)
    if(ROM[i] 0)
    {
    p i
    for(j i j < N j++)
    {

    if(ROM[j]0)未找空闲区j赋值i继续循环
    {
    i j
    continue
    }
    if(ROM[j]1)找空闲区
    {
    FREE_counter++空闲区数+1
    FREE[FREE_counter]Free_num FREE_counter设置空闲区编号
    FREE[FREE_counter]Startaddress p
    FREE[FREE_counter]Endaddress j1
    FREE[FREE_counter]Free_Space jp
    ij+1
    break
    }
    }
    if(j N && ROM[j1] 0)存进行特殊操作
    {
    FREE_counter++
    FREE[ FREE_counter]Free_num FREE_counter空闲区进行处理
    FREE[ FREE_counter]Startaddress p
    FREE[ FREE_counter]Endaddress j1
    FREE[ FREE_counter]Free_Space jp
    }
    }
    }


    void First_Fit(PCB &a)首次适应算法
    {
    int ijk
    for(i0 i if(ROM[i]0)
    {
    for(ji j<(i+aProgressSize)&&j if(ROM[j]1)
    {
    i j + 1
    break
    }
    if(ji+aProgressSize+1)
    {
    aStartaddress i设置作业开始址
    aProgressState 1标记作业存中
    for(ki k ROM[k]1
    printf(进程s插入成功进程s初始址d结束址d\naProgressNameaProgressNameaStartaddressaStartaddress+aProgressSize1)
    return
    }
    }
    if(iN)未查询合适区域
    printf(插入失败空间\n)
    }

    void Next_Fit(PCB &a)循环首次适应算法实现作业调度

    {
    int ijk
    for(ip i {
    if(ROM[i]0)
    {
    for(ji j<(i+aProgressSize)&&j if(ROM[j]1)
    {
    i j+1
    break
    }
    if(ji+aProgressSize+1)找合适空闲区
    {
    aStartaddressi
    aProgressState1
    for(ki k ROM[k]1
    printf(插入成功进程s 初始址d结束址d\naProgressNameaStartaddressaStartaddress+aProgressSize1)
    pi+aProgressSize
    return
    }
    }
    }
    for(i0 i

    if(ROM[i]0)
    {

    for(ji j<(i+aProgressSize)&&j

    if(ROM[j]1)
    {
    ij+1
    break
    }
    if(ji+aProgressSize+1)成功找结束标记前P现作业尾部
    {
    aStartaddressi
    aProgressState1
    for(ki k ROM[k]1
    printf(插入成功进程s 初始址d\naProgressNameaStartaddress)
    pi+aProgressSize
    break
    }
    }

    if(ip)查询两部分未找合适区域输出插入失败语句
    printf(插入失败空间\n)
    }

    void Delete(PCB &a)删作业修改存信息初始化该作业信息
    {
    int i
    for(iaStartaddress i ROM[i]0
    aProgressState0状态标记未
    printf(进程s删成功\naProgressName)
    }

    int main()
    {
    int choose1choose
    char ProgressName[10]
    PCB a
    init()
    printf(\t存空间分配回收\n)
    printf(\n)
    printf(\t1首次适应算法\n)
    printf(\t2循环首次适应算法\n)
    printf(\n)
    printf(请选择分配算法:)
    scanf(d&choose1)
    system(cls)
    while(1)
    {
    wsystem(cls)
    printf(前分配算法:)
    if(choose1 1)
    printf(首次适应算法\n)
    else
    printf(循环首次适应算法\n)
    printf(\n)
    printf(\t1插入进程\n)
    printf(\t2删进程\n)
    printf(\t3显示进程信息\n)
    printf(\t4显示空闲区\n)
    printf(\n)
    printf(请输入:)
    scanf(d&choose)
    system(cls)
    switch(choose)
    {
    case 1
    printf(请输入进程名)
    scanf(s&aProgressName)
    printf(请输入进程:)
    scanf(d&aProgressSize)
    for(int i 0 i < count i++)
    if(strcmp(num[i]ProgressNameaProgressName)0)
    {
    printf(已存名进程法插入\n)
    system(pause)
    goto w
    }
    if(choose11)首次适应算法
    First_Fit(a)
    else
    Next_Fit(a)循环首次适应算法
    num[count++]a
    break
    case 2
    if(count 0)
    {
    printf(前没进程存中法删\n)
    system(pause)
    goto w
    }
    printf(输入删进程名字:)
    scanf(s&ProgressName)
    for(int i0 i if(strcmp(num[i]ProgressNameProgressName))
    Delete(num[i])
    else
    printf(没找应进程请重新输入\n)
    break
    case 3
    showProgress(a)
    break
    case 4
    find_FREE()
    showFree()
    break
    default
    printf(\n效输入\n)
    }
    system(pause)
    }
    return 0
    }



    界面:

    首次适应算法初始空闲区:

    插入进程:

    插入3进程:


    空闲区信息:
    删进程2:

    删空闲区状况:

    插入进程初始址100:

    循环首次适应算法插入3进程


    删进程2:

    插入进程A发现次找空闲分区空闲分区开始查找初始址750200:

    文档香网(httpswwwxiangdangnet)户传

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

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

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

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

    下载文档

    相关文档

    首次适应算法最佳适应算法

    姓名:学号:实验名称:进程调度模拟实验 实验目的:了解动态分区存储管理方式中的数据结构和分配算法,加深对动态分区存储管理方式及其实现技术的理解。实验内容:#include<iostream.h...

    3年前   
    1635    0

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

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

    3年前   
    475    0

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

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

    3年前   
    486    0

    实验6FFT算法的应用

    实验6 FFT算法的应用实验目的:加深对离散信号的DFT的理解及其FFT算法的运用。实验原理:N点序列的DFT和IDFT变换定义式如下: , 利用旋转因子具有周期性,可以得到快速算法(FF...

    1年前   
    393    0

    实验室资质认定首次评审整改报告

              实验室资质认定首次评审整改报告                          编写人:     审核人:     签发人:   ...

    10年前   
    9784    0

    入党时间和党龄算法

    入党时间和党龄算法  党龄是指成为正式党员的年数。对党员而言,党龄记录着自己的政治生命,不仅表示自己在党内生活和工作的实际经历,更蕴含着使命与担当。牢记党龄是一名党员的本分。如何计算党龄?来...

    2年前   
    1321    0

    图象处理算法实验指导书

     图象处理算法实验指导书 实验一 静态图像采集 一、 实验目的 1. 了解DSK的工作原理。 2...

    5年前   
    853    0

    粒子群算法(优化算法)毕业设计论文

     毕 业 论 文 题 目 粒子群算法及其参数设置 专 业 信息与计算科学 班 级 ...

    5年前   
    1476    0

    自适应滤波实验报告

    自适应滤波实验报告   要求: 1,用LMS、RLS这两种算法求最佳滤波器系数。 (1)LMS算法,画出一次实验的误差平方收敛曲线,训练长度500,给出滤波器系数,进行20次的独立实 ...

    14年前   
    16743    0

    LMS自适应滤波实验报告

    LMS自适应滤波实验报告姓名: 学号: 日期:2015实验内容:利用自适应滤波法研究从宽带信号中提取单频信号的方法。设,是宽带信号,,,,,任选(1) 要求提取两个单频信号;(2)...

    2年前   
    780    0

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

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

    3年前   
    590    0

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

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

    3年前   
    627    0

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

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

    3年前   
    695    0

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

    操作系统课程设计磁盘调度算法目 录1 课程设计目的及要求……………………………………………………12 相关知识…………………………………………………………………13 ...

    3年前   
    552    0

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

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

    3年前   
    469    0

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

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

    3年前   
    821    0

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

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

    3年前   
    571    0

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

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

    3年前   
    716    0

    实验二-独占设备分配与回收

    实验二 独占设备分配与回收一、 实验目的:l 加深对设备管理的理解。l 深入了解如何分配和回收独占设备。二、 实验预备知识:ü 设备独立性。ü 独占设备的特性。ü 系统设备表和物理设备表。三...

    3年前   
    607    0

    首次股东决定

    首次股东决定 公司首次股东决定以下事项:1、通过了公司章程。 2、决定由 担任公司法定代表人。3...

    2年前   
    560    0

    文档贡献者

    文***品

    贡献于2020-12-03

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

    该用户的其他文档