实验五:存储管理实验

#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 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("%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("%d",&xuanze);
        if(xuanze==1)
        {
            for( i=0;i<10;i++)
            {
                if(page_table[i].pname==‘0‘)
                {
                    getchar();
                    printf("输入进程名称:");
                    scanf("%c",&page_table[i].pname);
                    getchar();
                    printf("输入进程大小:");
                    scanf("%d",&page_table[i].psize);
                    break;
                }
            }
            wulisize=allocate(wulisize,i,pagesize);
        }else
        {
            printf("输入进程名称:");
            getchar();
            scanf("%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-11-02 23:02:18

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

实验五存储管理实验

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

实验五 存储管理实验

#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)主存储器空间的分配和回收实验:本实验的目的是理解在不同的存储管理方式下应怎样实现主存空间