中南大学操作系统实验报告.docx

上传人:啊飒飒 文档编号:13190295 上传时间:2021-12-18 格式:DOCX 页数:65 大小:26.94KB
返回 下载 相关 举报
中南大学操作系统实验报告.docx_第1页
第1页 / 共65页
中南大学操作系统实验报告.docx_第2页
第2页 / 共65页
中南大学操作系统实验报告.docx_第3页
第3页 / 共65页
中南大学操作系统实验报告.docx_第4页
第4页 / 共65页
亲,该文档总共65页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《中南大学操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《中南大学操作系统实验报告.docx(65页珍藏版)》请在三一文库上搜索。

1、中南大学操作系统实验报告 操作系统实验报告 学生姓名 王朝晖 学 号 0906160216 专业班级 信息安全 1602 指导教师 宋虹 学 院 信息科学与工程学院 完成时间 2021 年 5 月 27 日 目录(格式二) 目录 一 操作系统模拟实验概述 . 1 (一)实验目的 . 1 (二)实验内容及要求 . 1 1.实验要求 . 1 (三)实验过程及分析 . 2 初步设计 . 2 详细设计 . 2 结束语 . 6 (附件)程序代码 . 7 Windows 安全实验 . 41 使用 Microsoft 基准安全分析器 MBSA 2.3 对系统进行安全评估 . 41 设置 Windows 的安

2、全模式,配置本地安全策略,包括以下内容 . 41 Linux 安全实验 . 48 扩展安全实验 . 66 1. 修改 ssh 默认连接 22 端口 和 添加防火墙 firewalld 通过端口 . 66 2. 禁止 root 帐号直接登录 . 67 3. 安装 DenyHosts 【拦截获取攻击的 IP ,生成黑.,防止再次攻击】 . 70 第 1 页 共 40 页 一 一 操作系统模拟 实验概述 (一)实验目的 本项目完成一个小型的操作系统进程调度、内存动态分配的仿真程序。 一,多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,以加深

3、了解处理机调度的工作; 二,帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收; (二)实验内容及要求 1. 实验要求 一,(a),PCB 内容: 进程名/PID; 要求运行时间(单位时间); 优先权; 状态; PCB 指针; 1,可随机输入若干进程,并按优先权排序; 2,从就绪队列首选进程运行:优先权-1/ 要求运行时间-1;要求运行时间=0时,撤销该进程; 3,重新排序,进行下一轮调度; (b),最好采用图形界面; (c),可随时增加进程; (d),规定道数,设置后备队列和挂起状态。若内存中进程数少于规定道数,可自动从后备队列调度一作业进入。被挂起进程如=入挂起队列,设置解挂功

4、能用于将指定挂起进程解挂入就绪队列; (e),每次调度后,显示各进程状态; 二,(a),自行假设主存空间大小,预设操作系统所占大小并构造未分分区表; 表目内容:起址、长度、状态(未分/空表目) (b),结合实验一,PCB 增加为:PID,要求运行时间,优先权,状态,所需内存大小,主存起始位置,PCB 指针; (C)采用最先适应算法分配主存空间; (D),进程完成后,回收主存,并与相邻空闲分区合并; 第 2 页 共 40 页 (三)实验过程及分析 初步设计 详细 设计 (a), 操作系统知识回顾: (1)作业进入内存中,由 CPU 分配产生 PCB 属性,并通过 PCB 记录进程状态,实验即以

5、PCB 代表进程模拟调度过程; (2)在多道系统中,多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机,本实验采用优先级; (3),进程调度时,规定若就绪队列进程数少于 6 个,则自动从后备队列调入一个作业; (4),系统会将占有较多资源、预期结果不符合要求的进程自动挂起,并回收所占资源,而本实验设置为手动挂起; (5),在适宜条件下,系统会将挂起的进程自动解挂,而且只解挂到就绪队列;本实验为简化操作,设置为手动解挂,若解挂条件合适(即 CPU 各种资源可用),则解挂到就绪队列,并分配内存;若解挂条件不适宜,则解挂至后备队列,但不分配内存; (b),实验程序设计:

6、 第 3 页 共 40 页 (1),本实验采用 java 语言编程,并实现 GUI 界面显示; (2),为体现 java 语言面对对象程序设计的特点,实验设计为 ProcessPCB、MemoryItem 类封装 PCB 和所分配的内存各自的属性与方法;用 ProcessRecords、MemoryRecords 类封装数组方法;用 SingleCPUScheduling 实现 GUI 界面显示; (3),ProcessPCB 类中,定义 PCB 的进程名、要求运行时间、优先级、状态、主存起始位置、所需内存大小这6个属性,并定义各属性的get和set方法,定义equals方法用于对比类的属性,

7、定义 toString 方法得到类属性的字符串,定义 run 方法封装优先权-1/ 要求运行时间-1 的过程;MemoryItem 类中,定义可分分区表每一可分记录的主存起始位置、内存大小及其 get 和 set 方法,定义 toString 方法得到可在界面显示的字符串; (4),ProcessRecords 封装 PCB 数组的添加元素 addItem 和删除元素 removeItem方法,并构造函数 getItem 通过参数 ProcessPCB 和 String 查找数组元素,定义getNumberOfItems取数组大小,定义getItemsPriorities方法取所有数组元素的t

8、oString方法用于界面显示,定义 iterator 方法取得数组的迭代器; (5),MemoryRecords 用同样的设计思想封装以 MemoryItem 为数组元素的各属性和方法; (6)SingleCPUScheduling 类继承 JFrame 类,实现界面化显示;与上面相对应,实例化 ProcessRecords(3 次)和 MemoryRecords(1 次)作为私有变量,分别作为后备队列、就绪队列、挂起队列和内存可分分区表;在界面设计中,设计后备队列、挂起队列(附带解挂 umount 按钮)、就绪队列(附带挂起 suspend 按钮)可分分区表列表显示框,设置 PCB 添加框

9、,附带添加至后备队列(addToBackup)、添加至就绪队列(addToReady)按钮,以及 CPU 当前执行状态显示框、系统日志显示框,和开始调度(systemStart)按钮,优先级和时间片单选按钮,以及时间片显示标签和文本编辑框; (7)界面设计详解;后备队列显示框用于显示已添加至后备队列的ProcessRecords 属性信息,其中主存起始位置默认为-1,表示未分配;挂起队列显示框用于显示从就绪队列挂起的 PCB,其中属性"主存起始位置'(MemoryBase)将由非负数变为-1,表示挂起后收回内存;就绪队列显示框中显示就绪队列属性,其中"主存起始位置&

10、#39;均为非负,表示一分配内存;PCB 信息添加框分列 PCB6 个属性显示标签和可编辑文本框,和添加按钮,用于添加 PCB;系统日志显示框附属时间片显示标签和可编辑文本编辑框,可由用户决定时间片大小; 第 4 页 共 40 页 对于实验一,页面逻辑如下 开始添加进程到后备运行内存满足调入就绪进程指向下一个后备进程否在就绪队列中找出优先级最高的调入运行队列运行时间为0 否插入就绪队列插入完成队列是选中进程调入挂起队列运行时间减一优先级减一所有进程都运行结束结束是回收内存内存满足选中准备调入就绪队列的进程 图 2-2 整体工作流程图 第 5 页 共 40 页 图 3 工作界面 第 6 页 共

11、40 页 结束语 1,程序完成了实验所有的基本要求; 2, 本程序还存在一些技术上的问题,使得程序不能尽善尽美;如,PCB 信息添加框没有"随机置入就绪队列'功能,添加 PCB 信息仍显得繁琐;就绪队列的挂起功能在程序自动运行时,存在反应异常(反应延迟或直接无反映);可分分区表只显示了当前可分的内存,没有显示已分的 PCB 及其对应内存使用情况,且没有利用图形和丰富的颜色来更好的展示;时间片设计还需要改进,使用效率不高;系统重置功能存在响应延迟的问题;另外,界面不够美观;还需要不断改进; 实验感想 通过这次实验,我对操作系统的进程调度和内存分配管理有了更加深入的了解,对操作系

12、统内部的工作原理有了进一步的认识; 通过编程,也巩固了我的程序设计和代码编写的能力,实验过程中遇到的各种问题以及解决问题的过程与方法,都是我获益匪浅; 同时,程序的不完善,也将促使我在课程之后,继续学习、理解课程内容,并尽一切努力不断完善程序,做到尽善尽美; 第 7 页 共 40 页 (附件) 程序代码 MemoryItem.java 1. public class MemoryItem 2. private int memoryBase=0; 3. private int memoryLimit=0; 4. private int availableStatus=0; 5. 6. publi

13、c MemoryItem(int initMemoryBase, int initMemoryLimit) 7. this.memoryBase = initMemoryBase; 8. this.memoryLimit = initMemoryLimit; 9. 10. 11. public int getMemoryBase() 12. return this.memoryBase; 13. 14. 15. public int getMemoryLimit() 16. return this.memoryLimit; 17. 18. 19. public int getStatus()

14、20. return this.availableStatus; 21. 22. 23. public String toString() 24. return this.getMemoryBase() + quot;_quot; + this.getMemoryLimit() + quot;nquot; 25. 26. 27. ProcessPCB.java 1. public class ProcessPCB 2. / backupBAK 后备 ready 就绪 suspend 挂起 memory 内存 3. private String PID; 4. private int Requi

15、redTime; 5. private int Priority; 6. private String Status; 7. private int MwmoryBase = 0000; 8. private int MemoryLimit; 9. / private String PCBPointer; 10. 第 8 页 共 40 页 11. public ProcessPCB(String initpID, int initRTime, int initpriority, 12. String status, int initBase, int initLimit) 13. 14. th

16、is.PID = initpID; 15. this.RequiredTime = initRTime; 16. this.Priority = initpriority; 17. this.Status = status; 18. this.MwmoryBase = initBase; 19. this.MemoryLimit = initLimit; 20. 21. 22. public String getPID() 23. if(this.PID = null) 24. return quot; quot; 25. else 26. return this.PID; 27. 28. 2

17、9. public int getRequiredTime() 30. return this.RequiredTime; 31. 32. 33. public int getPriority() 34. return this.Priority; 35. 36. 37. public String getStatus() 38. if(this.Status = null) 39. return quot; quot; 40. else 41. return this.Status; 42. 43. 44. public int getMemoryBase() 45. return this

18、.MwmoryBase; 46. 47. 48. public int getMemoryLimit() 49. return this.MemoryLimit; 50. 51. 52. public boolean equals(ProcessPCB pcb) 53. 54. if(pcb.getPID() = this.getPID() 第 9 页 共 40 页 55. return true; 56. 57. else return false; 58. 59. 60. public String toString() 61. return this.getPID() + quot;_q

19、uot; + this.getRequiredTime() + quot;_quot; + this.getPriority() + quot;_quot; 62. + this.getStatus() + quot;_quot; + this.getMemoryBase() + quot;_quot; + this.getMemoryLimit() + quot;nquot; 63. 64. 65. public void run() 66. this.RequiredTime = this.RequiredTime-1; 67. this.Priority = this.Priority-

20、1; 68. 69. 70. PCBRecords.java 1. import java.util.ArrayList; 2. import java.util.Iterator; 3. 4. public class PCBRecords implements Iterablelt;ProcessPCBgt; 5. 6. private ArrayListlt;ProcessPCBgt; PCBItems; 7. 8. public ArrayListlt;ProcessPCBgt; getPCBItems() 9. return this.PCBItems; 10. 11. 12. pu

21、blic PCBRecords() 13. this.PCBItems = new ArrayListlt;ProcessPCBgt;(); 14. 15. 16. public void addItem(ProcessPCB PcbItem) 17. this.PCBItems.add(PcbItem); 18. 19. 20. public void removeItem(ProcessPCB PCbItem) 21. this.PCBItems.remove(PCbItem); 22. 23. 24. public ProcessPCB getItem(ProcessPCB proces

22、sPCB) 第 10 页 共 40 页 25. for (ProcessPCB pCbItem : this.PCBItems) 26. if (pCbItem.equals(processPCB) 27. return pCbItem; 28. 29. 30. return null; 31. 32. 33. public ProcessPCB getItem(String pid) 34. for (ProcessPCB pcBItem : this.PCBItems) 35. if (pcBItem.getPID().equals(pid) 36. return pcBItem; 37.

23、 38. 39. return null; 40. 41. 42. public int getNumberOfItems() 43. return this.PCBItems.size(); 44. 45. 46. public String getItemsProperties() 47. String itemsProperties = new StringgetNumberOfItems(); 48. 49. int i = 0; 50. for(Iterator iterator1 = PCBItems.iterator(); iterator1.hasNext();) 51. 52

24、. ProcessPCB stu_Item = (ProcessPCB)iterator1.next(); 53. itemsPropertiesi+ = stu_Item.toString(); 54. 55. return itemsProperties; 56. 57. 58. public Iteratorlt;ProcessPCBgt; iterator() 59. return this.PCBItems.iterator(); 60. 61. 62. 63. MemoryRecords.java 64. package src; 65. 66. import java.util.

25、ArrayList; 67. import java.util.Iterator; 68. 第 11 页 共 40 页 69. public class MemoryRecords implements Iterablelt;MemoryItemgt; 70. private ArrayListlt;MemoryItemgt; memoryItems; 71. 72. public Iteratorlt;MemoryItemgt; iterator() 73. / TODO Auto-generated method stub 74. return this.memoryItems.itera

26、tor(); 75. 76. 77. public ArrayListlt;MemoryItemgt; getMemoryItems() 78. 79. return this.memoryItems; 80. 81. 82. public MemoryRecords() 83. this.memoryItems = new ArrayListlt;MemoryItemgt;(); 84. 85. 86. public void addItem(MemoryItem newMemoryItem) 87. this.memoryItems.add(newMemoryItem); 88. 89.

27、public void removeItem(MemoryItem momoryItem) 90. this.memoryItems.remove(momoryItem); 91. 92. 93. public MemoryItem getMomoryItem(MemoryItem item) 94. for(MemoryItem mItem : this.memoryItems) 95. if(mItem.equals(item) 96. return mItem; 97. 98. 99. return null; 100. 101. public MemoryItem getMemoryI

28、tem(int base) 102. for(MemoryItem mItem : this.memoryItems) 103. if(mItem.getMemoryBase() = base) 104. return mItem; 105. 106. 107. return null; 108. 109. 110. public int getNumberOfItems() 111. return this.memoryItems.size(); 112. 第 12 页 共 40 页 113. 114. public String getItemsProperties() 115. Stri

29、ng itemsProperties = new StringgetNumberOfItems(); 116. int i=0; 117. for(Iterator iterator1 = this.memoryItems.iterator(); iterator1.hasNext(); ) 118. MemoryItem mmItem = (MemoryItem) iterator1.next(); 119. itemsPropertiesi+ = mmItem.toString(); 120. 121. if(itemsProperties = null) 122. itemsProper

30、ties0 = quot; quot; 123. 124. return itemsProperties; 125. 126. SingleCPUSchedulingGUI03.java 1. import java.util.*; 2. import java.awt.*; 3. import java.awt.event.*; 4. 5. import javax.swing.*; 6. import javax.swing.event.*; 7. 8. 9. import java.io.*; 10. import java.text.*; 11. 12. public class Si

31、ngleCPUSchedulingGUI03 extends JFrame 13. /* Standar error stream */ 14. static private PrintWriter stdErr = new PrintWriter(System.err, true); 15. 16. static private int WIDTH = 800, HEIGHT = 750; / the size of the Frame 主面板 17. /* 各列表对应的面板规格*/ 18. /* 对应各名词释义 backupBAK 后备 ready 就绪 suspend 挂起 memory

32、 内存 */ 19. static private int BackupBAK_CELL_SIZE = 250, BackupBAK_LIST_ROWS = 10; / 后备队列 20. static private int Suspend_CELL_SIZE = 250, Suspend_LIST_ROWS = 10; / 挂起队列 21. static private int Ready_CELL_SIZE = 200, Ready_LIST_ROWS = 6; / 就绪队列 22. static private int Memory_CELL_SIZE = 200, Memory_LIS

33、T_ROWS = 10; / 内存队列 第 13 页 共 40 页 23. static private int CPU_ROWS = 12, CPU_COLS = 22; /CPU 面 面板 24. static private int STATUS_ROWS = 8, STATUS_COLS = 30; / 系统状态面板 25. private int timeslice = 1; / 设置时间片大小 26. private int systemStatus=0; / 设置系统状态 0 系统预备状态,等待开始,1 系统运行状态,2 系统暂停状态 27. static private int TOTAL_TEXTFIELD_SIZE = 10; / Size total text field 记 记录各队列元素个数 28. 29. private JList backupList, suspendList, readyList, memoryList; / 各队列相对应

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1