虚拟式存储管理
GDOU-B-11-112GDOU-B-11-112 广广 东东 海海 洋洋 大大 学学 学学 生生 实实 验验 报报 告告 书书 (( 学学 生生 用用 表表 )) 实验名称 学院(系) 学生姓名 虚拟页式存储管理 网络系 李振良 专业 课程名称计算机操作系统课程号 S1620034 信息管理与信息系统班级信管 1081 班 学号 200811622115 实验地点 科技楼 423实验日期 2010-11-15 一、一、实验目的实验目的 1) 掌握虚拟存储管理的原理。 2) 掌握几种常用页面置换算法。 二、二、实验原理实验原理 1.实现过程: 3)内存分配:给进程分配一定的物理块数。 4)将要页面依次调入内存,分配到物理块中。 5)若物理块已满,采用算法置换出某个页面,将下一个页面调入物理块中。 2.算法: 1)先进先出算法(FIFO) 当发生页面置换时,总是选择当前系统中最早进入内存的那一页置换。 2)最近最少使用算法(LRU ) 当发生页面置换时,选择当前内存页面中没有被使用时间最久的那一页置换出去。 三、三、LRULRU算法流程图算法流程图 第- 1 -页共 5 页 四、四、实验内容实验内容 packagepackage edward.armers.gdou; importimport java.awt.*; importimport java.awt.event.*; importimport javax.swing.*; publicpublicclassclass myReplacementextendsextends JFrameimplementsimplements ActionListener { publicpublicstaticstaticvoidvoid main(String[] args) { } JTextFieldjtf1 =nullnull ; JLabeljlb1 =nullnull ; JLabeljlb2 =nullnull ; JLabeljlb3 =nullnull ; JPaneljp1 =nullnull ; JPaneljp2 =nullnull ; JButtonjb1 =nullnull ; JButtonjb2 =nullnull ; JComboBoxjcb1 =nullnull ; staticstaticintintcount =0; // 下标计数 staticstaticintintorder =1; // 先进先出页框 标志 intintuse1 =0; // 使用时间 intintuse2 =0; intintuse3 =0; intintsrc =0; // 判断是否首次使用 publicpublic myReplacement(){ intint width = Toolkit.getDefaultToolkit().getScreenSize().width ; intint height = Toolkit.getDefaultToolkit().getScreenSize().height ; thisthis .setLocation(width/2-200, height/2-300); thisthis .setSize(300, 250); thisthis .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 响应关闭 myReplacement re =newnew myReplacement(); thisthis .setTitle(“页面置换算法 -- Designed by Edward“); thisthis .setLayout(newnew BorderLayout());// 边界布局 jtf1 =newnew JTextField();// 文本输入框 jtf1 .setText(“70120304230321201701“); // 初始化 thisthis .add( jtf1 ,“North“ ); thisthis .add( newnew JPanel(),“West“ ); jlb1 =newnew JLabel(“-“ ); jlb2 =newnew JLabel(“-“ ); jlb3 =newnew JLabel(“-“ ); 第- 2 -页共 5 页 jp1 =newnew JPanel(); jp1 .setLayout(newnew GridLayout(6,1));// 网格布局 jp1 .add( jlb1 ); jp1 .add( jlb2 ); jp1 .add( jlb3 ); thisthis .add( jp1 ,“Center“); jp2 =newnew JPanel(); jb1 =newnew JButton(“置换“); jb2 =newnew JButton(“清零“); String s[]= {“FIFO“ ,“LRU“ }; // 先进先出/最近最久未使用 jcb1 =newnew JComboBox(s);// 组合框 jb1 .addActionListener(thisthis ); // 注册监听 jb2 .addActionListener(thisthis ); jp2 .add( jcb1 ); jp2 .add( jb1 ); jp2 .add( jb2 ); thisthis .add( jp2 ,“South“ ); thisthis .setVisible(truetrue ); // 可视 } @Override// 重写响应方法 publicpublicvoidvoid actionPered(ActionEvent e) { ifif (e.getSource()==jb1 ){// 按下按置换 ifif (jcb1 .getSelectedItem()==“FIFO“ ){ // 先进先出 String str =jtf1 .getText();// 获取页面号 intint len = str.length(); ifif (len!=0){// 不为空时 charchar []temp =newnewcharchar [len]; forfor (intint i=0;i2 src ++; jlb2 .setText(String.valueOf (temp[ count ++])); }elseelse { src ++; use3 =0; jlb3 .setText(String.valueOf (temp[ count ++])); } } } use1 ++; use2 ++; use3 ++; // 每置换一次时间都加1 } 第- 4 -页共 5 页 } }elseelseifif (e.getSource()==jb2 ){ // 清零 jtf1 .setText(“70120304230321201701“); } jlb1 .setText(“-“ ); jlb2 .setText(“-“ ); jlb3 .set