java实现页式存储管理

123.png

基本框架

屏幕快照 2017-11-24 12.41.42.png

page.java

//page类
package pagedStorageManagement;

public class page {
   
    private int pageNumber;//页号
    private int physicsNumber;//物理页号
    private boolean state;//状态位
    private int visitCount;//访问字段
    private boolean change;//修改位
    private int CRTAddress;//外存地址

    public page()
    {
        this.pageNumber = -1;
        this.physicsNumber = -1;
        this.state = false;
        this.visitCount = 0;
        this.change = false;
        this.CRTAddress = -1;
    }
    public page( int pageNumber, int physicsNumber, boolean state, int visitCount, boolean change, int CRTAddress)
    {
        this.pageNumber = pageNumber;
        this.physicsNumber = physicsNumber;
        this.state = state;
        this.visitCount = visitCount;
        this.change = change;
        this.CRTAddress = CRTAddress;
    }
    public void setPageNumber( int pageNumber )
    {
        this.pageNumber = pageNumber;
    }
    public void setPhysicsNumber( int physicsNumber )
    {
        this.physicsNumber = physicsNumber;
    }
    public void setState (boolean state )
    {
        this.state=state;
    }
    public void setVisitCount( int visitCount )
    {
        this.visitCount = visitCount;
    }
    public void setChange( boolean change )
    {
        this.change = change;
    }
    public void setCRTAddress( int CRTAddress )
    {
        this.CRTAddress = CRTAddress;
    }
    public int getPageNumber( )
    {
        return this.pageNumber;
    }
    public int getPhysicsNumber()
    {
        return this.physicsNumber;
    }
    public boolean getState()
    {
        return this.state;
    } 
    public int getVisitCount()
    {
        return this.visitCount;
    }
    public boolean getChange()
    {
        return this.change;
    }
    public int getCRTAddress()
    {
        return this.CRTAddress;
    }

}

shell.java

//shell类
package pagedStorageManagement;
import java.util.Scanner;

public class shell {
   
    page shell[];
    private int current;
    private int length;
    public shell(){};
    public shell( int length )
    {
        this.length = length;
        this.current = 0;
        shell = new page[length];
        for( int i = 0; i < length ; i++ )
        {
            this.shell[i] = new page();
        }
    }
    public void setCurrent( int current )
    {
        this.current = current;
    }
    public int getCurrent()
    {
   
  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我来回答你的问题。 Java 代码实现存储管理过程,需要使用到以下几个类: 1. PageTableEntry:表项类,用于记录每个面的状态(是否在内存中、面编号、访问次数等)。 2. PageTable:表类,用于管理所有面的状态,包括面的映射关系、面的状态等。 3. Memory:内存类,用于模拟实际的内存空间,管理内存中的面状态。 4. Disk:磁盘类,用于模拟实际的磁盘空间,存储所有的面数据。 下面是一个简单的示例代码,用于展示如何使用这些类来实现存储管理过程: ``` public class PageTableEntry { private boolean present; // 是否在内存中 private int pageNumber; // 面编号 private int accessCount; // 访问次数 public PageTableEntry(int page) { present = false; pageNumber = page; accessCount = 0; } public boolean isPresent() { return present; } public void setPresent(boolean present) { this.present = present; } public int getPageNumber() { return pageNumber; } public int getAccessCount() { return accessCount; } public void increaseAccessCount() { accessCount++; } } public class PageTable { private PageTableEntry[] entries; public PageTable(int pageCount) { entries = new PageTableEntry[pageCount]; for (int i = 0; i < pageCount; i++) { entries[i] = new PageTableEntry(i); } } public PageTableEntry getPageTableEntry(int pageNumber) { return entries[pageNumber]; } } public class Memory { private PageTableEntry[] entries; private int size; private int currentSize; public Memory(int size) { entries = new PageTableEntry[size]; for (int i = 0; i < size; i++) { entries[i] = new PageTableEntry(-1); } this.size = size; currentSize = 0; } public boolean isFull() { return currentSize == size; } public boolean contains(int pageNumber) { for (int i = 0; i < currentSize; i++) { if (entries[i].getPageNumber() == pageNumber) { return true; } } return false; } public void addPage(int pageNumber) { if (isFull()) { throw new RuntimeException("Memory is full."); } entries[currentSize].setPresent(true); entries[currentSize].increaseAccessCount(); entries[currentSize].setPageNumber(pageNumber); currentSize++; } public void removePage(int index) { entries[index].setPresent(false); for (int i = index; i < currentSize - 1; i++) { entries[i] = entries[i + 1]; } entries[currentSize - 1] = new PageTableEntry(-1); currentSize--; } } public class Disk { private Map<Integer, String> pages; public Disk() { pages = new HashMap<>(); } public void addPage(int pageNumber, String data) { pages.put(pageNumber, data); } public String getPage(int pageNumber) { return pages.get(pageNumber); } } public class PageReplacementAlgorithm { private PageTable pageTable; private Memory memory; private Disk disk; public PageReplacementAlgorithm(int pageCount, int memorySize) { pageTable = new PageTable(pageCount); memory = new Memory(memorySize); disk = new Disk(); } public void accessPage(int pageNumber) { PageTableEntry pageTableEntry = pageTable.getPageTableEntry(pageNumber); if (pageTableEntry.isPresent()) { memory.addPage(pageNumber); } else { if (memory.isFull()) { int victimPageIndex = getVictimPageIndex(); PageTableEntry victimPageTableEntry = memory.getPageTableEntry(victimPageIndex); disk.addPage(victimPageTableEntry.getPageNumber(), getPageData(victimPageTableEntry.getPageNumber())); victimPageTableEntry.setPresent(false); memory.removePage(victimPageIndex); } memory.addPage(pageNumber); pageTableEntry.setPresent(true); } pageTableEntry.increaseAccessCount(); } private int getVictimPageIndex() { int victimPageIndex = 0; int minAccessCount = Integer.MAX_VALUE; for (int i = 0; i < memory.getCurrentSize(); i++) { PageTableEntry pageTableEntry = memory.getPageTableEntry(i); if (pageTableEntry.getAccessCount() < minAccessCount) { victimPageIndex = i; minAccessCount = pageTableEntry.getAccessCount(); } } return victimPageIndex; } private String getPageData(int pageNumber) { return disk.getPage(pageNumber); } } ``` 以上代码实现了一个简单的存储管理过程,其中包括了表项、表、内存、磁盘等模拟实体,以及一个面置换算法的实现。具体过程如下: 1. 当用户访问某个面时,先在表中查找该面的状态; 2. 如果面已经在内存中,则直接添加到内存中,并更新面状态; 3. 如果面不在内存中,则需要进行面置换操作; 4. 如果内存未满,则直接将面添加到内存中,并更新表状态; 5. 如果内存已满,则执行面置换算法,选择合适的面进行置换,并将置换出的面存储到磁盘中。 希望这个简单的示例代码能够给你带来一些帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值