⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ram.cs

📁 os 课程设计不含文档 123456789
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace os
{
    public class ram
    {
        public enum tstate { free, used };//内存块的状态
        private static int pagesize;//页大小
        private static int pagecount;//页数目
        private int ramsize;//总内存大小
        public tstate[] state;//状态数组
        public char[] ram_;//内存数组
        public int crun;

        public ram()//初始化函数
        {
            ramsize = 512;//内存大小512
            pagesize = 16;//页大小16
            pagecount = ramsize / pagesize;//页数为32
            ram_ = new char[ramsize];//内存数组
            state = new tstate[pagecount];//
            for (int i = 0; i < pagecount; i++)
            {
                state[i] = tstate.free;//初始化状态为空闲
            }
        }
        public int[] assignram(int size, out int usepagecount)//分配内存函数:size为进程需要内存大小;usepagecount是需要的内存块数
        {
            usepagecount = (size + pagesize - 1) / pagesize;
            int[] pagetable = new int[pagecount];//初始化页表
            int freecount = 0;
            for (int i = 0; i < pagecount; i++)                    //寻找空闲内存块
            {
                if (state[i] == tstate.free)
                {
                    pagetable[freecount] = i;
                    freecount++;
                }
            }

            if (freecount >= usepagecount)
            {
                for (int j = 0; j < usepagecount; j++)
                    use(pagetable[j]);
                return pagetable;
            }
            pagetable = null;
            usepagecount = 0;
            return null;
        }
        public int useramnum()
        {
            int num = 0;
            for (int i = 0; i < 32; i++)
            {
                if (state[i] == tstate.used)
                    num++;
            }
            return num * 16;
        }
        public string ramshow()
        {
            string show = "";
            for (int i = 0; i < 32; i++)
            {
                if (state[i] == tstate.free && i != crun)
                    show += "□";
                if (state[i] == tstate.used && i != crun)
                    show += "■";
                if (i == crun )
                {
                    if (state[i] == tstate.used)
                    show += "★";
                    if(state[i] == tstate.free)
                        show += "□";

                }
            }
            return show;
        }
        public bool use(int page)//标记当前的已经被使用了
        {
            if (page > pagecount)
                return false;
            if (state[page] == tstate.used)
                return false;
            state[page] = tstate.used;
            return true;
        }
        public void releaseram(int[] pagetable, int usepagecount)//释放内存函数:
        {
            for (int i = 0; i < usepagecount; i++)
                free(pagetable[i]);
            pagetable = null;
        }
        public bool free(int page)// 标记当前的内存是空闲的
        {
            if (page > pagecount)
                return false;
            state[page] = tstate.free;
            return true;
        }
        public bool readdata(int[] pagetable, int offset, ref char data)//从内存读指令pagetable是页表首地址offset是指针偏移亮data是内存数据
        {
            int page = offset / pagesize;
            int off = offset % pagesize;
            if (page > pagecount)
                return false;
            data = ram_[pagetable[page] * pagesize + off];

            crun = pagetable[page];
            return true;
        }
        public bool loaddata(int[] pagetable, int usepagecount, string data, int datasize)
        {//指令调入内存函数:pagetable页表首地址,usepagecount进程需要的内存块数,data指令,datasize进程的大小
            if (usepagecount != (datasize + pagesize - 1) / pagesize)
                return false;
            int wcnt = 0;
            for (int i = 0; i < usepagecount; i++)
                for (int j = 0; j < pagesize; j++)
                {
                    ram_[pagetable[i] * pagesize + j] = data[wcnt++];
                    if (wcnt >= datasize)
                        return true;
                }
            return false;
        }
    
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -