实验五存储管理实验

实验五存储管理实验

一、        实验目的

连续内存分配方式会形成许多“碎片”,虽然可以通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无需再进行“紧凑”。基于这一思想而产生了离散分配方式。

如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式。

在分页存储管理方式中,如果不具备页面兑换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具备支持虚拟存储器的功能,它要求把每个作业全部装入内存后方能运行。

本实验通过程序模拟操作系统的基本分页存储管理方式,进一步理解这一内存分配方式的原理和特点,加深对理论知识的掌握。

二、        实验内容和要求

实验要求:

1、用C语言或Java语言编写程序模拟操作系统对内存的基本分页存储管理方式

2、程序要能正确对“内存”进行“分配”和“回收”,能接受用户的输入,显示内存的分配情况,并有一定的容错能力。

3、每个人独立按时完成实验内容。

实验内容:本实验假定内存空间已经按块划分,目标程序无需关心内存块大小等底层细节,只需按算法对内存块进行分配即可。程序应该实现以下功能:

1、内存初始化。假定内存块共有N个,初始化后的内存空间应该有一部分已经被使用,这可以用随机数或程序内部的其他算法完成。

2、程序应该能接受用户输入的进程信息,并为之分配内存,返回分配结果(成功或失败),注意,此处应该考虑到不合法的输入并进行相应处理。

3、程序能回收用户指定的进程所占用的内存空间,因此,程序可能需要为每个进程分配一个唯一的进程号并给出详细的提示信息。

4、能直观合理地显示内存分配情况。

5、程序界面友好,便于操作和查看运行结果。

三、        实验方法、步骤及结果测试

#include "stdafx.h"
#include"stdlib.h"
#include"time.h"
struct wuli{
    int wuli_number;
    char pname;
};
struct wuli wuli_table[20] = { 0 };
struct page{

    char pname;    int psize;
    int pagetable[10]
};
struct page page_table[10] = { 0 };

int allocate(int wulisize, int i, int pagesize);
 int reclaim(int wulisize, char pname); 

void output();
int main()
{
    int pagesize;
    int wulisize = 80;
    char pname;
    int xuanze;
    int i;

    printf("输入页面大小:\n");
    scanf_s("%d", &pagesize);
    for (i = 0; i<20; i++)
    {
        wuli_table[i].wuli_number = i;
        wuli_table[i].pname = ‘0‘;
    }
    for (i = 0; i<10; i++)
    {
        page_table[i].pname = ‘0‘;

    }
    srand((unsigned)time(NULL));
    for (i = 0; i<7; i++)
    {

        int number = rand() % 19 + 1;
        wuli_table[number].pname = ‘a‘;
        wulisize--;
    }
    output();
    while (wulisize != 0)
    {
        printf("选择操作\n1.分配  2.回收\n");
        scanf_s("%d", &xuanze);
        if (xuanze == 1)
        {
            for (i = 0; i<10; i++)
            {
                if (page_table[i].pname == ‘0‘)
                {
                    getchar();
                    printf("输入进程名称:");
                    scanf_s("%c", &page_table[i].pname);
                    getchar();
                    printf("输入进程大小:");
                    scanf_s("%d", &page_table[i].psize);
                    break;
                }
            }
            wulisize = allocate(wulisize, i, pagesize);
        }
        else
        {
            printf("输入进程名称:");
            getchar();
            scanf_s("%c", &pname);
            wulisize = reclaim(wulisize, pname);
        }

        output();
    }
    return 0;
}
int  allocate(int wulisize, int i, int pagesize)
{
    int k;
    int j;
    for (k = 0; k<(page_table[i].psize / pagesize); k++)
    {
        for (j = 0; j<20; j++)
        {
            if (wuli_table[j].pname == ‘0‘)
            {
                wuli_table[j].pname = page_table[i].pname;
                page_table[i].pagetable[k] = j;
                wulisize--;
                break;

            }
        }

    }
    return wulisize;
}

int reclaim(int wulisize, char pname)
{
    int j;
    int k;
    for (j = 0; j<20; j++)
    {
        if (wuli_table[j].pname == pname)
        {
            wuli_table[j].pname = ‘0‘;
            wulisize++;
        }
    }
    for (j = 0; j<10; j++)
    {
        if (page_table[j].pname == pname)
        {
            page_table[j].pname = ‘0‘;
            page_table[j].psize = 0;
            for (k = 0; k<10; k++)
            {
                page_table[j].pagetable[k] = 0;
            }
            break;
        }
    }
    return wulisize;
}
void output(){
    int i;
    printf("————————内存分配情况——————————\n");
    printf("物理块号   进程名\n");
    for (i = 0; i<20; i++)
    {
        printf("%d         %c\n", wuli_table[i].wuli_number, wuli_table[i].pname);
    }
}

实验内容相对之前的进程调度稍微简洁些,但是基本实现的数据结构的链表算法是一样的. 对算法与与程序之间的思维不清晰,导致在写程序中出现较多问题,然后通过查找课本,上网搜寻资料,询问同学进行帮助解答,最后得到基本

时间: 2024-10-11 18:07:30

实验五存储管理实验的相关文章

实验五 存储管理实验

#include"stdio.h" #include"stdlib.h" #include"time.h" struct wuli{ int wuli_number; char pname; /*已分配区表登记栏标志,用"0"表示空栏目*/ }; /*内存表*/ struct wuli wuli_table[20]={0}; struct page{ char pname;//进程名称 int psize;//进程大小 int

Linux基础入门(新版)(实验五至实验八)

实验五 环境变量与文件查找 (环境变量的作用与用法,及几种搜索文件的方法) 一.环境变量 1.变量 (1)常变量与值是一对一的关系 (2)变量的作用域即变量的有效范围(比如一个函数中.一个源文件中或者全局范围),在该范围内只能有一个同名变量.一旦离开则该变量无效,如同不存在这个变量一般. 这里是一个例子: declare命令创建一个变量名为 tmp 的变量: $ declare tmp 使用=号赋值运算符为变量 tmp 赋值为 shiyanlou:$ tmp=shiyanlou 读取变量的值,使

实验五:实验结论和实验总结

原文地址:https://www.cnblogs.com/Hy4934-d/p/12021676.html

20145301&amp;20145321&amp;20145335实验五

20145301&20145321&20145335实验五 这次实验我的组员为:20145301赵嘉鑫.20145321曾子誉.20145335郝昊 实验内容详见:实验五

20144303 20145239 《信息安全系统设计基础》实验五 网络通信

20144303 20145239 <信息安全系统设计基础>实验五 网络通信 实验内容与步骤 1.环境配置 参考实验一. 2.共享代码文件 将\experiment\exp5\exp5\ws目录下的07_httpd文件夹拷贝到共享文件夹bc中 3.编译应用程序 进入07_httpd文件夹,运行 make 产生可执行文件httpd,然后分别输入 armv4l-unknown-linux-gcc -o ../bin/httpd httpd.o copy.o -lpthread armv4l-unk

20165305 实验五 网络编程与安全

实验五-1 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java 上传测试代码运行结果截图和码云链接 实验五-2 结对编程:1人负责客户端,一人负责服务器 注意责任归宿,要会通过测试证明自己没有问题 基于Java Socket实现客户端/服务器功能,传输方式用TCP 客户端让用户输入

# 学号 2017-2018-20172309 《程序设计与数据结构》实验五报告

2017-2018-20172309 <程序设计与数据结构>实验五报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 王志伟 学号:20172309 实验教师:王志强老师 实验日期:2018年6月13日 必修/选修: 必修 1.实验内容 预备实验: 实验要求: 1.伙伴1编写服务器端程序,接收客户端发送的数据(形式如下:12 15 8 100 25 34 19),将其排序后,发回给客户端. 2.伙伴2编写客户端程序,将一串字符串(形式如下:12 15 8 100 25 3

实验五 操作系统之存储管理

一.实验目的 连续内存分配方式会形成许多“碎片”,虽然可以通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销.如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无需再进行“紧凑”.基于这一思想而产生了离散分配方式. 如果离散分配的基本单位是页,则称为分页存储管理方式:如果离散分配的基本单位是段,则称为分段存储管理方式. 在分页存储管理方式中,如果不具备页面兑换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具备支持虚拟存储器的功能,它要求把每个作业全部

操作系统存储管理实验课程设计报告

操作系统报告 存储管理 姓名: 郑兆涵                                     专业: 计算机科学与技术(嵌入式方向) 一.设计目的.意义 本次实验针对:(1)存储管理实验,(2)主存储器空间的分配和回收实验,两个实验进行学习. (1)存储管理实验:本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的技术特点,掌握请求页式存储管理的页面置换算法. (2)主存储器空间的分配和回收实验:本实验的目的是理解在不同的存储管理方式下应怎样实现主存空间