动态分区分配方式的模拟

上传人:z****2 文档编号:150930216 上传时间:2022-09-11 格式:DOCX 页数:21 大小:34.90KB
收藏 版权申诉 举报 下载
动态分区分配方式的模拟_第1页
第1页 / 共21页
动态分区分配方式的模拟_第2页
第2页 / 共21页
动态分区分配方式的模拟_第3页
第3页 / 共21页
资源描述:

《动态分区分配方式的模拟》由会员分享,可在线阅读,更多相关《动态分区分配方式的模拟(21页珍藏版)》请在装配图网上搜索。

1、太原工业学院计算机工程系操作系统 实验报告()实 验 名 称动态分区分配方式的模拟实验日期2016/12/3成绩姓 名班级学号实 验 目 的了解动态分区分配方式中使用的数据结构和分配算法,进一步加深对动态分区存储管理方 式及其实现过程的理解实 验 环 境Eclipse , SQL Server实 验 内 容1. 在数据库中创建分区表;2. JAVA实现采用首次适应算法和最佳适应算法的动态分区分配过程和回收过程。3. 设置初始状态,每次分配和回收后显示出空闲内存分区表的情况。数据库的创建:NameTypeLengthScaleAllow MullnumbervardidrflVIAX)40Ssi

2、zeYarchar(MAX)10addressvairdiar(NAX)*10聞varchar(MAX)-10vairdurtMAX)0M实验代码:连库类:package common;importjava.sql.Connec tion;importjava.sql.DriverManager;importjava.sql.PreparedS tat eme nt;importjava.sql.Resu ltSet;public class ConnectionFactory / Create a variable for the connection string.privatestati

3、cfinalStringconnectionUrljdbc:sqlserver:/localhost:l433; +DatabaseName=czxt;/ Declare the JDBC objects. user=sa;password=wz951107 private static Connection conn = null;static try / Establish the connection.Class.forName(com.microso ft .sqlserver.jdbc.SQLServerDriver);connDriverManager.getConnection(

4、connectionUrl,sa,wz951107);/* if(conn!=null)Sys tem.o ut.prin tln(连接成功);*/ Handle any errors that may have occurred. catch (Exception e) e.printStackTrace();/关闭连接public static void close(ResultSet rs,PreparedStatement pstmt,Connection conn)throws Exception/释放资源if(rs!=null)rs.close();if(pstmt!=null)p

5、stmt .close();if(conn!=null)conn.close();/获取连接public static Connection getConnection() return conn;public static void main(String args) if(conn!=null)Sys tem.o ut .pri ntln(连接成功”);实体类:package bean;public class Zone private String number;private String size;private String address;private String statu

6、s;private String work;public String getWork() return work;public void setWork(String work) this. work = work;public Zone() super();public Zone(String number, String size, String address, String status, String work) super();this.number = number;this =;this. address = address;this status = status;this

7、. work = work;public String getNumber() return number;public void setNumber(String number) this. number = number;public String getSize() return size;public void setSize(String size) this 二 ;public String getAddress() return address;public void setAddress(String address) this.address = address;public

8、 String getStatus() return status;public void setStatus(String status) this status = status;Overridepublic String toString() return Zone number= + number + , size= + size + , address= + address + , status= + status + , work=+ work + ;Dao层类(对数据库的操作):package dao;impor t java.sql.Connec tion;import jav

9、a.sql.PreparedStatement;impor t java.sql.Resu ltSet;import java. util.ArrayList;import java. uti l.List;import bean.Zone;import common.ConnectionFactory; public class ZoneDao /插入public void save(Zone zone)try Connection conn = null;PreparedStatement pstmt = null; try /连接 conn = ConnectionFactory.get

10、Connection();/预处理sqlSt ring sql = inser t into zone values(?,?,?,?,?); pstmt = conn.prepareStatement(sql);pstmt .setString(l,zone.getNumber();pstmt .setString(2, pstmt .setString(3, pstmt .setString(4, pstmt .setString(5,zone.getSize();zone.getAddress();zone.getStatus();zone.getWork();/执行sqlint num

11、= pstmt .executeUpdate();Sys tem.ou t.prin tln(Zone 插入一条数据”); finally /*ConnectionFactory.close(null, pstmt, conn);*/ catch (Exception e) e.printStackTrace();/删除public void deleteByWork(String work)try Connection conn = null;PreparedStatement pstmt = null;try conn = ConnectionFactory.getConnection()

12、;String sql = delete from zone where work = ?;pstmt = conn.prepareStatement(sql);pstmt .setString(1, work);int num = pstmt .executeUpdate();Sys tem.ou t.prin tln(删除+n um+条数据”); finally /*ConnectionFactory.close(null, pstmt, conn);*/ catch (Exception e) e.printStackTrace();/删除public void deleteByNumb

13、er(String number)try Connection conn = null;PreparedStatement pstmt = null;try conn = ConnectionFactory.getConnection();String sql = delete from zone where number = ?; pstmt = conn.prepareStatement(sql);pstmt .setString(1, number);int num = pstmt .executeUpdate();Sys tem.ou t.prin tln(删除+n um+条数据”);

14、 finally /*ConnectionFactory.close(null, pstmt, conn);*/ catch (Exception e) e.printStackTrace();/查询public List FindAll()List list = new ArrayList();try Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try /连接conn = ConnectionFactory.getConnection();/预处理sqlString sql = selec

15、t * from zone ORDER BY number; pstmt = conn.prepareStatement(sql);/执行sqlrs = pstmt .executeQuery();while(rs.next()String number = rs.getString(number);String size = rs.getString(size);String address = rs.getString(address);String status = rs.getString(status);String work = rs.getString(work);Zone zo

16、ne = new Zone(number, size, address, status,work); list.add(zone); finally /*ConnectionFactory.close(rs, pstmt, conn);*/ catch (Exception e) e.printStackTrace();return list;/单个查询public Zone queryByNumber(String numberstring size,String address,String status,String work)Zone zone = new Zone();try Con

17、nection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try conn = ConnectionFactory.getConnection();String sql = select *from zone Wherel = 1; if(number != null)sql += and number = +number+;if(size != null)sql += and size = +size+;if(address != null)sql += and address = +address+;if(

18、status != null)sql += and status = +status+;if(work != null)sql += and work = +work+;pstmt = conn.prepareStatement(sql);rs = pstmt .executeQuery();while(rs.next()zone.setNumber(rs.getString(number);zone.setAddress(rs.getString(address);zone.se tSize(rs.ge tSt ring(size);zone.setStatus(rs.getString(s

19、tatus); zone.se tWork(rs.ge tSt ring(work); finally /*ConnectionFactory.close(rs, pstmt, conn);*/ catch (Exception e) e.printStackTrace();return zone;/修改public void update(Zone zone)try Connection conn = null;PreparedStatement pstmt = null;try conn = ConnectionFactory.getConnection();String sql = up

20、date zone set+ number = ?,size = ?,address = ?,s tatus = ?,work = ? + where number = ?;pstmt = conn.prepareStatement(sql);pstmt .setString(l,zone.getNumber();pstmt .setString(2,zone.getSize();pstmt .setString(3,zone.getAddress();pstmt .setString(4,zone.getStatus();pstmt .setString(5,zone.getWork();p

21、stmt .setString(6,zone.getNumber();int num = pstmt .executeUpdate();Sys tem.ou t.prin tln(修改了+n um+条数据”); finally /*ConnectionFactory.close(null, pstmt, conn);*/ catch (Exception e) e.printStackTrace();/排序public List asc()List list = new ArrayList();try Connection conn = null;PreparedStatement pstmt

22、 = null;ResultSet rs = null;try conn = ConnectionFactory.getConnection();String sql = select * from zone ORDER BY address ASC; pstmt = conn.prepareStatement(sql);rs = pstmt .executeQuery();while(rs.next()Stringnumber = rs.getString(number);Stringsize = rs.getString(size);Stringaddress = rs.getString

23、(address);Stringstatus = rs.getString(status);String work = rs.getString(work);Zone zone = new Zone(number, size, address, status,work); list.add(zone); finally catch (Exception e) e.printStackTrace();return list;视图层:package view;import java. uti l.List;import java. util.Scanner;import bean.Zone;imp

24、ort dao.ZoneDao;public class Zoneview public static void main(String args) System.out.println(欢迎进入动态分区:);Sys tem.ou t.prin tln(l.首次适应算法”);Sys tem.ou t.prin tln(2.最佳适应算法”);Scanner in = new Scanner(System.in);String one = in.nextLine(); if(one.equals(T)ZoneDao dao = new ZoneDao();List list = dao.FindA

25、ll();for(Zone zone : list)System.out .println(zone);System.out.println(l.分配);System.out.println(2.回收”);String two = in.nextLine();if( two.equals(l)Sys tem.ou t.prin tln(请输入作业号:);String work = in.nextLine(); boolean flag = false;for(int j = 0;jlist.size();j+)Zone fzone = list.get(j);if(fzone.getWork(

26、).equals(work)flag = true; if(flag)Sys tem.ou t.prin tln(该作业号已经存在”); elseSys tem.ou t.prin tln(请输入作业大小:);String size = in.nextLine();Stringaddress = null;Stringstatus = null;Stringnumber = work;Stringsize2 = null;/修改分配的表Zone zonel = new Zone(); boolean f = false;for(int i = 0;i=Integer.valueOf(size)

27、address = zone.getAddress();status =占用;size2=String.valueOf(Integer.valueOf(zone.getSize() .intValue()-Integer.valueOf(si ze). intValue();System.out .println(size2);zone1.setSize(String.valueOf(size2);zone1.setAddress(String.valueOf(Integer.valueOf(zone1.getAddress() .intVa lue()+Integer.valueOf(siz

28、e). intValue();Zone zone2 = new Zone(number, size, address, status,work);dao.save(zone2);dao.update(zone1);f = true;break;if(!f)Zone mzone = list.get(0);zonel = mzone;if(mzone.ge tStatu s().equals(空闲)if(Integer.valueOf(mzone.getSize()=Integer.valueOf(size)address = mzone.getAddress();status =占用;size

29、2=String.valueOf(Integer.valueOf(mzone.getSize() .intValue()-Integer.valueOf(size). intValue();System.out .println(size2);zone1.setSize(String.valueOf(size2);zone1.setAddress(String.valueOf(Integer.valueOf(zone1.getAddress() .intValue()+Integer.valueOf(size). intValue();Zone zone2 = new Zone(number,

30、 size,address, status,work);dao.save(zone2);dao.update(zone1);f = true;break;elseSys tem.ou t.prin tln(请输入回收的作业号:);String work = in.nextLine();int i = 0;for(Zone zone : list)if(zone.getWork().equals(work)zone.setStatus(空闲);zone.setWork(空间);for(;ilist.size();) if(i!=0)if(lis t.ge t(i-l).ge tStat us()

31、.equals(空闲)zone.setSize(String.valueOf(Integer.valueOf(zone.getSize()+Integer.valueOf(list.get(i-l).getSize();dao.deleteByNumber(list.get(i-l).getNumber();i=i-1;if(i+llist.size()if(lis t.ge t(i+l).ge tStat us().equals(空闲)zone.setSize(String.valueOf(Integer.valueOf(zone.getSize()+Integer.valueOf(list

32、.get(i+l).getSize();elsebreak;dao.update(zone);break;i+;elseSystem.out.println(l.分配);System.out.println(2.回收”);String two = in.nextLine();ZoneDao dao = new ZoneDao();ListZone list = dao.FindAll();if( two.equals(l)Sys tem.ou t.prin tln(请输入作业号:);String work = in.nextLine(); boolean flag = false;for(in

33、t j = 0;jlist.size();j+)Zone fzone = list.get(j);if(fzone.getWork().equals(work) flag = true;if(flag)Sys tem.ou t.prin tln(该作业号已经存在”); elseSys tem.ou t.prin tln(请输入作业大小:);String size = in.nextLine();String address = null;String status = null;String number = work;St ring size2 = null;/ 修改分配的表int temp

34、; /记录临时中间值int listsize = list.size(); / 数组大小/*for (int a = 0; a listsize - 1; a+) for (int b = a + 1; b listsize; b+) if (list.geti numbersj) / 交换两数的位置 temp = numbersi;numbersi = numbersj; numbersj = temp; */Zone zone1 = new Zone();for(int i = 0;i=Integer.valueOf(size)address = zone.getAddress();sta

35、tus =占用;size2=String.valueOf(Integer.valueOf(zone.getSize() .intValue()-Integer.valueOf(size). intValue();System.out .println(size2);zonel.setSize(String.valueOf(size2);zone1.setAddress(String.valueOf(Integer.valueOf(zone1.getAddress() .intVa lue()+Integer.valueOf(size). intValue();Zone zone2 = new

36、Zone(number, size, address,status,work);dao.save(zone2);dao.update(zone1);break;elseSys tem.ou t.prin tln(请输入回收的作业号:);String work = in.nextLine();for(Zone zone : list)if(zone.getWork().equals(work)zone.setStatus(空闲);dao.update(zone);break;初始分配:number sizeaddress statuswork100空叵分配作业1社迎辿A动态分区:1百反适应算法2 矗住适应期去Zone numbersej爲 addresssiee shtu討.卜,work=匸I1 廿配2.口 :请输扎作业号:右制上作业犬小;50616ZoneffiA-lS修改了 1条埶据运行结果:回收作业1:结果:1rrijmbersizeaddresstork1666100空闲学会了首次适应算法和最佳分配算法的动态分区方法,尤其是首次适应算法,掌握的 更加好,对于动态的分配和回收有了更好的认识,回收时相邻空间都为空闲时要合并。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!