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

合集下载

操作系统实验报告

操作系统实验报告

实验名称:操作系统进程管理实验实验目的:1. 理解操作系统进程管理的概念和原理。

2. 掌握进程的创建、调度、同步和通信机制。

3. 通过实验加深对进程管理算法的理解和应用。

实验环境:1. 操作系统:Windows 102. 编程语言:C/C++3. 开发环境:Visual Studio实验内容:一、实验一:进程的创建与终止1. 实验目的了解进程的创建和终止机制,掌握进程控制块(PCB)的结构和功能。

2. 实验步骤(1)创建一个进程,使用系统调用创建子进程;(2)设置子进程的属性,如优先级、名字等;(3)终止子进程,释放资源;(4)查看进程信息,确认进程创建和终止过程。

3. 实验代码```c#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main() {pid_t pid;printf("Parent process: %d\n", getpid());pid = fork(); // 创建子进程if (pid == 0) {printf("Child process: %d\n", getpid());printf("Child process is running...\n");sleep(5); // 子进程延时5秒exit(0);} else {printf("Child process created: %d\n", pid);wait(NULL); // 等待子进程结束printf("Child process terminated.\n");}return 0;}```4. 实验结果在运行实验代码后,首先输出父进程的进程号,然后输出子进程的进程号,子进程运行5秒后结束,父进程输出子进程终止信息。

操作系统实验实验报告

操作系统实验实验报告

操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。

本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。

二、实验环境本次实验使用的操作系统为 Windows 10 专业版,开发工具为Visual Studio 2019,编程语言为 C 和 C++。

实验硬件环境为一台配备Intel Core i7 处理器、16GB 内存、512GB SSD 硬盘的个人计算机。

三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新的进程,并在完成任务后终止进程。

在实验中,我们使用了 Windows API 函数 CreateProcess 和 TerminateProcess 来完成进程的创建和终止操作。

通过观察进程的创建和终止过程,深入理解了进程的生命周期和状态转换。

2、进程同步与互斥为了实现进程之间的同步与互斥,我们使用了信号量、互斥量等同步对象。

通过编写多线程程序,模拟了多个进程对共享资源的访问,实现了对共享资源的互斥访问和同步操作。

在实验中,我们深刻体会到了进程同步与互斥的重要性,以及不正确的同步操作可能导致的死锁等问题。

(二)内存管理实验1、内存分配与释放使用 Windows API 函数 VirtualAlloc 和 VirtualFree 进行内存的分配和释放操作。

通过实验,了解了内存分配的不同方式(如堆分配、栈分配等)以及内存释放的时机和方法,掌握了内存管理的基本原理和操作技巧。

2、内存分页与分段通过编程模拟内存的分页和分段管理机制,了解了内存分页和分段的基本原理和实现方法。

在实验中,我们实现了简单的内存分页和分段算法,对内存的地址转换和页面置换等过程有了更深入的理解。

(三)文件系统实验1、文件操作使用 Windows API 函数 CreateFile、ReadFile、WriteFile 等进行文件的创建、读取和写入操作。

操作系统实验二实验报告

操作系统实验二实验报告

操作系统实验二实验报告一、实验目的本次操作系统实验二的主要目的是深入理解和掌握进程管理的相关概念和技术,包括进程的创建、执行、同步和通信。

通过实际编程和实验操作,提高对操作系统原理的认识,培养解决实际问题的能力。

二、实验环境本次实验使用的操作系统为 Windows 10,编程环境为 Visual Studio 2019。

三、实验内容及步骤(一)进程创建实验1、首先,创建一个新的 C++项目。

2、在项目中,使用 Windows API 函数`CreateProcess`来创建一个新的进程。

3、为新进程指定可执行文件的路径、命令行参数、进程属性等。

4、编写代码来等待新进程的结束,并获取其退出代码。

(二)进程同步实验1、设计一个生产者消费者问题的模型。

2、使用信号量来实现生产者和消费者进程之间的同步。

3、生产者进程不断生成数据并放入共享缓冲区,当缓冲区已满时等待。

4、消费者进程从共享缓冲区中取出数据进行处理,当缓冲区为空时等待。

(三)进程通信实验1、选择使用管道来实现进程之间的通信。

2、创建一个匿名管道,父进程和子进程分别读写管道的两端。

3、父进程向管道写入数据,子进程从管道读取数据并进行处理。

四、实验结果及分析(一)进程创建实验结果成功创建了新的进程,并能够获取到其退出代码。

通过观察进程的创建和执行过程,加深了对进程概念的理解。

(二)进程同步实验结果通过使用信号量,生产者和消费者进程能够正确地进行同步,避免了缓冲区的溢出和数据的丢失。

分析结果表明,信号量机制有效地解决了进程之间的资源竞争和协调问题。

(三)进程通信实验结果通过管道实现了父进程和子进程之间的数据通信。

数据能够准确地在进程之间传递,验证了管道通信的有效性。

五、遇到的问题及解决方法(一)在进程创建实验中,遇到了参数设置不正确导致进程创建失败的问题。

通过仔细查阅文档和调试,最终正确设置了参数,成功创建了进程。

(二)在进程同步实验中,出现了信号量使用不当导致死锁的情况。

操作系统实验报告6

操作系统实验报告6

操作系统实验报告6一、实验目的本次操作系统实验的主要目的是深入了解和掌握操作系统中进程管理、内存管理、文件系统等核心概念和相关技术,通过实际操作和观察,增强对操作系统工作原理的理解,并提高解决实际问题的能力。

二、实验环境本次实验使用的操作系统为 Windows 10,实验工具包括 Visual Studio 2019 等。

三、实验内容(一)进程管理实验1、创建多个进程,并观察它们的运行状态和资源占用情况。

通过编写简单的C++程序,使用Windows API 函数创建多个进程。

在程序中,设置不同的进程优先级和执行时间,观察操作系统如何调度这些进程,以及它们对 CPU 使用率和内存的影响。

2、进程间通信实现了进程间的管道通信和消息传递。

通过创建管道,让两个进程能够相互交换数据。

同时,还使用了 Windows 的消息机制,使进程之间能够发送和接收特定的消息。

(二)内存管理实验1、内存分配与释放使用 C++的动态内存分配函数(如`malloc` 和`free`),在程序运行时动态申请和释放内存。

观察内存使用情况,了解内存碎片的产生和处理。

2、虚拟内存管理研究了 Windows 操作系统的虚拟内存机制,通过查看系统的性能监视器,观察虚拟内存的使用情况,包括页面文件的大小和读写次数。

(三)文件系统实验1、文件操作进行了文件的创建、读取、写入、删除等基本操作。

通过编写程序,对不同类型的文件(如文本文件、二进制文件)进行处理,了解文件系统的工作原理。

2、目录操作实现了目录的创建、删除、遍历等功能。

了解了目录结构在文件系统中的组织方式和管理方法。

四、实验步骤(一)进程管理实验步骤1、打开 Visual Studio 2019,创建一个新的 C++控制台项目。

2、在项目中编写代码,使用`CreateProcess` 函数创建多个进程,并设置它们的优先级和执行时间。

3、编译并运行程序,通过任务管理器观察进程的运行状态和资源占用情况。

《操作系统》实验报告

《操作系统》实验报告

《操作系统》实验报告一、实验目的操作系统是计算机系统中最为关键的组成部分之一,本次实验的主要目的是深入理解操作系统的基本原理和功能,通过实际操作和观察,熟悉操作系统的核心概念,包括进程管理、内存管理、文件系统和设备管理等,提高对操作系统的实际应用能力和问题解决能力。

二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、进程管理实验进程是操作系统中最基本的执行单元。

在这个实验中,我们使用C++编写程序来创建和管理进程。

通过观察进程的创建、执行和结束过程,理解进程的状态转换和资源分配。

首先,我们编写了一个简单的程序,创建了多个子进程,并通过进程标识符(PID)来跟踪它们的运行状态。

然后,使用等待函数来等待子进程的结束,并获取其返回值。

在实验过程中,我们发现进程的创建和销毁需要消耗一定的系统资源,而且进程之间的同步和通信需要谨慎处理,以避免出现死锁和竞争条件等问题。

2、内存管理实验内存管理是操作系统的核心功能之一,它直接影响系统的性能和稳定性。

在这个实验中,我们研究了动态内存分配和释放的机制。

使用 C++中的 new 和 delete 操作符来分配和释放内存。

通过观察内存使用情况和内存泄漏检测工具,了解了内存分配的效率和可能出现的内存泄漏问题。

同时,我们还探讨了内存分页和分段的概念,以及虚拟内存的工作原理。

通过模拟内存访问过程,理解了页表的作用和地址转换的过程。

3、文件系统实验文件系统是操作系统用于管理文件和目录的机制。

在这个实验中,我们对文件的创建、读写和删除进行了操作。

使用 C++的文件流操作来实现对文件的读写。

通过创建不同类型的文件(文本文件和二进制文件),并对其进行读写操作,熟悉了文件的打开模式和读写方式。

此外,还研究了文件的权限设置和目录的管理,了解了如何保护文件的安全性和组织文件的结构。

4、设备管理实验设备管理是操作系统与外部设备进行交互的桥梁。

操作系统课程实验报告

操作系统课程实验报告

操作系统课程实验报告一、实验目的操作系统是计算机系统中最核心的软件之一,它负责管理计算机的硬件资源和软件资源,为用户提供一个方便、高效、安全的工作环境。

本实验的目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握操作系统的常用命令和操作方法,提高解决实际问题的能力。

二、实验环境操作系统:Windows 10开发工具:Visual Studio Code三、实验内容1、进程管理观察进程的创建、终止和状态转换。

使用任务管理器查看系统中的进程信息,包括进程 ID、CPU 使用率、内存占用等。

通过编程实现创建和终止进程的功能。

2、内存管理了解内存的分配和回收机制。

使用 Windows 系统提供的性能监视器查看内存的使用情况。

编程实现简单的内存分配和释放算法。

3、文件系统管理熟悉文件和目录的操作,如创建、删除、复制、移动等。

研究文件的属性,如文件名、文件大小、创建时间等。

通过编程实现文件的读写操作。

4、设备管理认识设备的驱动程序和设备管理策略。

查看系统中的设备信息,如磁盘驱动器、打印机等。

模拟设备的中断处理过程。

四、实验步骤1、进程管理实验打开任务管理器,观察当前系统中正在运行的进程。

可以看到进程的名称、进程 ID、CPU 使用率、内存占用等信息。

使用 C++语言编写一个简单的程序,创建一个新的进程。

在程序中,使用`CreateProcess`函数来创建新进程,并设置进程的属性和参数。

编写另一个程序,用于终止指定的进程。

通过获取进程 ID,然后使用`TerminateProcess`函数来终止进程。

2、内存管理实验打开 Windows 性能监视器,选择“内存”选项卡,可以查看内存的使用情况,包括物理内存、虚拟内存、页面文件等的使用量和使用率。

编写一个 C 程序,使用动态内存分配函数(如`malloc`和`free`)来分配和释放内存。

在程序中,不断分配和释放一定大小的内存块,观察内存的使用情况和性能变化。

中南大学操作系统实验

中南大学操作系统实验

《计算机操作系统》实验设计设计目的1、增强学生对计算机操作系统基本原理、基本理论、基本算法的理解2、提高和培养学生的动手能力设计要求1、每人至少选作1题,多做不限。

2、每人单独完成,可以讨论,但每人的设计内容不得完全相同,抄袭或有2人/多人设计完全一样者,不能通过。

3、设计完成后,应上交课程设计文档,文档格式应是学校课程设计的标准格式,所有学生的封面大小、格式也必须一样4、同时上交设计的软盘(或以班刻录光盘)设计题目设计类✧在i386下写一个程序,从实地址模式进入保护虚地址模式,进而启动分页机制平台:语言:汇编、C✧DOS下中断程序设计设计热键、中断接管程序等平台:DOS语言:ASM、Turbo C、Pascal等✧DOS下的菜单、图形界面程序设计同1✧DOS、下的I/O设备处理程序,如打印机驱动程序、字符设备、块设备、网络设备、USB设备驱动程序平台:DOS语言:ASM TC✧多进程处理程序,进程创建、通信(管道、信号量、共享内存、消息队列等、mmap)、互斥平台:Windows、Linux语言:同上✧多线程程序线程创建、同步、互斥平台:Windows、Linux语言:VC LINUX-GCC JA V A✧Windows下设备驱动程序设计(块设备、字符设备、网络设备、USB设备)✧Linux下设备驱动程序设计(块设备、字符设备、网络设备、USB设备)✧Linux调度实验与参数调整如改变时间片、优先级等✧Linux操作系统内存管理机制实验✧Linux文件管理实验,并增加一个系统调用✧Linux系统调用过程实验,并增加一个系统调用如跟综一个系统调用算法模拟类✧调度算法的模拟模拟各种调度算法,并进行调度性能分析✧银行家算法模拟✧内存管理算法模拟✧页面置换算法模拟✧模拟分段、分页情况下的地址变换逻辑地址-线性地址-物理地址实验一、进程调度试验[目的要求]用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.[准备知识]一、基本概念1、进程的概念;2、进程的状态和进程控制块;3、进程调度算法;二、进程调度1、进程的状态2、进程的结构——PCB进程都是由一系列操作(动作)所组成,通过这些操作来完成其任务。

中南大学 操作系统安全实验报告

中南大学 操作系统安全实验报告

CENTRAL SOUTH UNIVERSITY操作系统安全实验报告学生姓名专业班级学号学院信息科学与工程学院指导教师宋虹实验时间 2014年12月《操作系统安全》实验一……Windows系统安全设置实验一、实验目的1、了解Windows操作系统的安全性2、熟悉Windows操作系统的安全设置3、熟悉MBSA的使用二、实验要求1、根据实验中的安全设置要求,详细观察并记录设置前后系统的变化,给出分析报告。

2、采用MBSA测试系统的安全性,并分析原因。

3、比较Windows系统的安全设置和Linux系统安全设置的异同。

三、实验内容1、配置本地安全设置,完成以下内容:(1)账户策略:包括密码策略(最小密码长度、密码最长存留期、密码最短存留期、强制密码历史等)和账户锁定策略(锁定阈值、锁定时间、锁定计数等)(2)账户和口令的安全设置:检查和删除不必要的账户(User用户、Duplicate User用户、测试用户、共享用户等)、禁用guest账户、禁止枚举帐号、创建两个管理员帐号、创建陷阱用户(用户名为Administrator、权限设置为最低)、不让系统显示上次登录的用户名。

审核登录事件、审核特权使用等(4)设置IP 安全策略(5)其他设置:公钥策略、软件限制策略等2、Windows系统注册表的配置(1)找到用户安全设置的键值、SAM设置的键值(2)修改注册表:禁止建立空连接、禁止管理共享、关闭139端口、防范SYN攻击、减少syn-ack包的响应时间、预防DoS攻击、防止ICMP重定向报文攻击、不支持IGMP协议、禁止死网关监控技术、修改MAC地址等操作。

禁止建立空连接:“Local_Machine\System\CurrentControlSet\Control\LSA-RestrictAnonymous”的值改成“1”即可。

禁止管理共享:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters项对于服务器,添加键值“AutoShareServer”,类型为“REG_DWORD”,值为“0”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统原理试验报告班级:学号:姓名:实验一:CPU调度一、实验内容选择一个调度算法,实现处理机调度。

二、实验目的多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。

本实验模拟实现处理机调度,以加深了解处理机调度的工作。

三、实验题目1、设计一个按优先权调度算法实现处理机调度的程序;2、设计按时间片轮转实现处理机调度的程序。

四、实验要求PCB内容:进程名/PID;要求运行时间(单位时间);优先权;状态:PCB指针;1、可随机输入若干进程,并按优先权排序;2、从就绪队首选进程运行:优先权-1/要求运行时间-1要求运行时间=0时,撤销该进程3、重新排序,进行下轮调度4、最好采用图形界面;5、可随时增加进程;6、规定道数,设置后备队列和挂起状态。

若内存中进程少于规定道数,可自动从后备队列调度一作业进入。

被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂入就绪队列。

7、每次调度后,显示各进程状态。

实验二:内存管理一、实验内容主存储器空间的分配和回收二、实验目的帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。

三、实验题目在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。

四、实验要求1、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表;表目内容:起址、长度、状态(未分/空表目)2、结合实验一,PCB增加为:{PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB指针}3、采用最先适应算法分配主存空间;4、进程完成后,回收主存,并与相邻空闲分区合并.1、Vo类说明(数据存储结构)进程控制块PCB的结构:Public class PCB{ //进程控制块PCB,代表一个进程//进程名,作为进程的标识;private String name;//要求运行时间,假设进程运行的单位时间数;private int time;//赋予进程的优先权,调度时总是选取优先数小的进程先执行;private int priority;//状态,假设有“就绪”状态(ready)、“运行”状态(running)、//“后备”状态(waiting)、“挂起”状态(handup)private String state;//进程存放在table中的位置private int start;//进程的大小private int length;//进程是否进入内存,1为进入,0为未进入private int isIn;//进程在内存中的起始位置private int base;//进程的大小private int limit;//一些get和set方法以及构造器省略…};2流程图3.源程序核心代码public void display(){if(runningList.size()>0){jt1.setValueAt(runningList.get(0).getName().trim(),0,0);jt1.setValueAt(runningList.get(0).getIsIn(),0,1);jt1.setValueAt(runningList.get(0).getTime(),0,2);jt1.setValueAt(runningList.get(0).getPriority(),0,3);jt1.setValueAt(runningList.get(0).getStart(),0,4);jt1.setValueAt(runningList.get(0).getLength(),0,5);}else{jt1.setValueAt("无进程",0,0);jt1.setValueAt("进行",0,1);jt1.setValueAt(null,0,2);jt1.setValueAt(null,0,3);jt1.setValueAt(null,0,4);jt1.setValueAt(null,0,5);}///////////////////////////////////////////////////for(int i =0; i < readyList.size(); i++){jt2.setValueAt(readyList.get(i).getName().trim(),i,0);jt2.setValueAt(readyList.get(i).getIsIn(),i,1);jt2.setValueAt(readyList.get(i).getTime(),i,2);jt2.setValueAt(readyList.get(i).getPriority(),i,3);jt2.setValueAt(readyList.get(i).getStart(),i,4);jt2.setValueAt(readyList.get(i).getLength(),i,5);}for(int j = readyList.size(); j < 6; j++){jt2.setValueAt(null,j,0);jt2.setValueAt(null,j,1);jt2.setValueAt(null,j,2);jt2.setValueAt(null,j,3);jt2.setValueAt(null,j,4);jt2.setValueAt(null,j,5);}//////////////////////////////////////////////for(int i =0; i < waitingList.size(); i++){jt3.setValueAt(waitingList.get(i).getName().trim(),i,0);jt3.setValueAt(waitingList.get(i).getIsIn(),i,1);jt3.setValueAt(waitingList.get(i).getTime(),i,2);jt3.setValueAt(waitingList.get(i).getPriority(),i,3);jt3.setValueAt(waitingList.get(i).getStart(),i,4);jt3.setValueAt(waitingList.get(i).getLength(),i,5);}for(int j = waitingList.size(); j < 15; j++){jt3.setValueAt(null,j,0);jt3.setValueAt(null,j,1);jt3.setValueAt(null,j,2);jt3.setValueAt(null,j,3);jt3.setValueAt(null,j,4);jt3.setValueAt(null,j,5);}//////////////////////////////////////////////////////////////for(int i =0; i < handupList.size(); i++){jt4.setValueAt(handupList.get(i).getName().trim(),i,0);jt4.setValueAt(handupList.get(i).getIsIn(),i,1);jt4.setValueAt(handupList.get(i).getTime(),i,2);jt4.setValueAt(handupList.get(i).getPriority(),i,3);jt4.setValueAt(handupList.get(i).getStart(),i,4);jt4.setValueAt(handupList.get(i).getLength(),i,5);}for(int j = handupList.size(); j < 15; j++){jt4.setValueAt(null,j,0);jt4.setValueAt(null,j,1);jt4.setValueAt(null,j,2);jt4.setValueAt(null,j,3);jt4.setValueAt(null,j,4);jt4.setValueAt(null,j,5);}jl1.setCellRenderer(new MyRenderer());for(int i = 0; i < unAssignList.size(); i++){System.out.print(unAssignList.get(i).getBase()+" ");System.out.println(unAssignList.get(i).getLimit());}System.out.println("one");System.out.println();}////////////////////////////////////////////////////////时间和优先级减一public void sub(){if(runningList.size()>0&&runningList.get(0).getIsIn()==1){runningList.get(0).setTime(runningList.get(0).getTime()-1);if(runningList.get(0).getPriority()>=1)runningList.get(0).setPriority(runningList.get(0).getPriority()-1);if(runningList.get(0).getTime()<0){runningList.get(0).setTime(0);}if(runningList.get(0).getTime()==0){putOutMemory(runningList,0);}}}public void sub1(){if(runningList.size()>0&&runningList.get(0).getIsIn()==1){runningList.get(0).setTime(runningList.get(0).getTime()-1);if(runningList.get(0).getTime()==0){putOutMemory(runningList,0);}if(runningList.get(0).getPriority()<15)if(runningList.get(0).getPriority()>=1)runningList.get(0).setPriority(runningList.get(0).getPriority()-1);}}////////////////////////////////////////////////////////////////////public class MyRunnable implements Runnable{public void run(){while(true)timeManager();try{Thread.sleep(1000);}catch(InterruptedException ex){}}}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////自动调度////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public class MyRunnable1 implements Runnable{public void run(){while(true){PManager();try{Thread.sleep(1000);}catch(InterruptedException ex){}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////得到list中优先权最高的//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////}}public int getFirstW(ArrayList<Data> list){if(list.size()>0){int min = 0;for(int i = 1;i<list.size();i++ ){if(list.get(min).getPriority() > list.get(i).getPriority()){min = i;}}min++;return min;}else{return 0;}}////////////////////////////////////////////////////////////////////////////////////////////////////删除列表中第几个数据/////////////////////////////////////////////////// ///////////////////////////////////////////////////////////public void update(ArrayList<Data> list, int num){sList.clear();for(int i = 0; i < list.size(); i++){if(i != num){sList.add(list.get(i));}}list.clear();for(int i = 0; i < sList.size();i++){list.add(sList.get(i));}}public void update1(ArrayList<Data_Memory> list, int num){sList1.clear();for(int i = 0; i < list.size(); i++){if(i != num){sList1.add(list.get(i));}}list.clear();for(int i = 0; i < sList1.size();i++){list.add(sList1.get(i));}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////放入内存//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////public void putInMemory(){if(runningList.size()>0){if(runningList.get(0).getIsIn()==0){for(int i = 0; i < unAssignList.size(); i++){if(unAssignList.get(i).getLimit() >= runningList.get(0).getLength()){runningList.get(0).setStart(unAssignList.get(i).getBase());runningList.get(0).setIsIn(1);if(unAssignList.get(i).getLimit() == runningList.get(0).getLength()){update1(unAssignList,i);}else{unAssignList.get(i).setBase(unAssignList.get(i).getBase()+runningList.get(0).getLength());unAssignList.get(i).setLimit(unAssignList.get(i).getLimit()-runningList.get(0).getLength());}break;}}}}if(readyList.size()>0){for(int j = 0; j < readyList.size(); j++){if(readyList.get(j).getIsIn()==0){for(int i = 0; i < unAssignList.size(); i++){if(unAssignList.get(i).getLimit() >= readyList.get(j).getLength()){readyList.get(j).setStart(unAssignList.get(i).getBase());readyList.get(j).setIsIn(1);if(unAssignList.get(i).getLimit() == readyList.get(j).getLength()){update1(unAssignList,i);}else{unAssignList.get(i).setBase(unAssignList.get(i).getBase()+readyList.get(j).getLength());unAssignList.get(i).setLimit(unAssignList.get(i).getLimit()-readyList.get(j).getLength());}break;}}}}}}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////移除内存/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////public void putOutMemory(ArrayList<Data> list, int num){list.get(num).setIsIn(0);boolean flag1 = false;boolean flag2 = false;for(int i = 0; i < unAssignList.size(); i++){if(unAssignList.get(i).getBase() == (list.get(num).getLength()+list.get(num).getStart())){unAssignList.get(i).setBase(list.get(num).getStart());unAssignList.get(i).setLimit(list.get(num).getLength()+unAssignList.get(i).getLimit());flag1 = true;break;}}for(int i = 0; i < unAssignList.size(); i++){if((unAssignList.get(i).getBase()+unAssignList.get(i).getLimit()) == list.get(num).getStart())if(!flag1){unAssignList.get(i).setLimit(list.get(num).getLength()+unAssignList.get(i).getLimit());flag2 = true;break;}else{unAssignList.get(i).setLimit(unAssignList.get(i).getLimit()+unAssignList.get(i+1).getLimit() );update1(unAssignList,i+1);}}}if(flag1 || flag2){}else{int i = 0;while(unAssignList.get(i).getBase()<list.get(num).getStart()){i++;}Data_Memory data = new Data_Memory();data.setBase(list.get(num).getStart());data.setLimit(list.get(num).getLength());sList1.clear();for(int j = 0; j < i; j++){sList1.add(unAssignList.get(j));}sList1.add(data);for(int j = i; j < unAssignList.size(); j++){sList1.add(unAssignList.get(j));}unAssignList.clear();for(int j = 0; j < sList1.size(); j++){unAssignList.add(sList1.get(j));}}}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////JLISTprivate class MyRenderer extends DefaultListCellRenderer{public Component getListCellRendererComponent(JList list, Object value,int index, boolean isSelected, boolean cellHasFocus){super.getListCellRendererComponent(list, value, index, isSelected,cellHasFocus);setBackground(Color.gray);for(int i = 0; i < unAssignList.size(); i++){for(int j = unAssignList.get(i).getBase() ; j < unAssignList.get(i).getLimit()+unAssignList.get(i).getBase(); j++){if(index == j){setBackground(Color.white);//当没有内容变为白色}}}return this;}}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////public void timeManager(){////////////去掉time==0的,从waiting队列加入新的进程,排序,调整waitingList加入runningLIst/////////////去掉time==0的if(runningList.size()>0)if(runningList.get(0).getTime()==0)runningList.clear();sList.clear();for(int i = 0; i < readyList.size(); i++){if(readyList.get(i).getTime()>0){sList.add(readyList.get(i));}}readyList.clear();for(int i =0; i < sList.size();i++){readyList.add(sList.get(i));readyList.get(i).setState("ready");}/////////////////从waiting队列加入新的进程int j = 0;int m = readyList.size();for(; m < 6 && j < waitingList.size(); m++,j++) {readyList.add(waitingList.get(j));readyList.get(m).setState("ready");}// sort(readyList);/////////////////////////调整waitingListsList.clear();for(int i = j; i < waitingList.size(); i++){sList.add(waitingList.get(i));}waitingList.clear();for(int i =0; i < sList.size();i++){waitingList.add(sList.get(i));}////////////////////////////////////加入runningLIstif(runningList.size()==0){if(readyList.size()>0){runningList.add(readyList.get(0));runningList.get(0).setState("running");update(readyList,0);if(waitingList.size()>0){readyList.add(waitingList.get(0));readyList.get(5).setState("ready");}update(waitingList,0);}}else /////////////////if(runningList.size()>0){if(readyList.size()>0){readyList.add(runningList.get(0));runningList.clear();readyList.get(0).setState("running");readyList.get(readyList.size()-1).setState("ready");runningList.add(readyList.get(0));update(readyList,0);}}putInMemory();sub();display();jtf1.grabFocus();}public void PManager(){if(runningList.size()>0)if(runningList.get(0).getTime()==0)runningList.clear();sList.clear();for(int i = 0; i < readyList.size(); i++){if(readyList.get(i).getTime()>0){sList.add(readyList.get(i));}}readyList.clear();for(int i =0; i < sList.size();i++){readyList.add(sList.get(i));readyList.get(i).setState("ready");}/////////////////从waiting队列加入新的进程int j = 0;int m = readyList.size();for(; m < 6 && j < waitingList.size(); m++,j++){readyList.add(waitingList.get(getFirstW(waitingList)-1));readyList.get(m).setState("ready");update(waitingList,getFirstW(waitingList)-1);}/////////////////////////调整waitingList////////////////////////////////////加入runningLIstif(runningList.size()==0){if(readyList.size()>0){runningList.add(readyList.get(getFirstW(readyList)-1));runningList.get(0).setState("running");update(readyList,getFirstW(readyList)-1);if(waitingList.size()>0){readyList.add(waitingList.get(getFirstW(waitingList)-1));readyList.get(readyList.size()-1).setState("ready");}update(waitingList,getFirstW(waitingList)-1);}}else{if(readyList.size()>0){boolean flag = false;int a = runningList.get(0).getPriority();int b = readyList.get(getFirstW(readyList)-1).getPriority();if(a > b){sList.clear();sList.add(readyList.get(getFirstW(readyList)-1));flag = true;}if(flag){runningList.get(0).setState("ready");readyList.add(runningList.get(0));runningList.clear();runningList.add(sList.get(0));runningList.get(0).setState("running");update(readyList,getFirstW(readyList)-1);}}}putInMemory();sub1();display();jtf1.grabFocus();}}。

相关文档
最新文档