操作系统实验报告java
java实训报告(通用9篇)

java实训报告java实训报告(通用9篇)在当下社会,大家逐渐认识到报告的重要性,写报告的时候要注意内容的完整。
那么一般报告是怎么写的呢?下面是小编精心整理的java实训报告,欢迎大家借鉴与参考,希望对大家有所帮助。
java实训报告篇1一、实训目的1.熟练掌握Java面向对象程序设计的基础知识。
2.熟练掌握Java中常用的Swing组件的使用方法。
3.熟练掌握Java程序中图形用户界面设计的方法。
4.熟练掌握使用JDBC操作数据库的方法。
5.通过实训,培养学生分析和解决实际问题的能力,提高调试和分析应用程序的能力,并为后续Java高级编程等专业课程的学习奠定良好的基础。
二、课程设计报告内容2.1 实训内容本课程设计的题目是设计一个简化的仓库管理系统。
该系统从仓库管理人员的角度出发,实现对货物信息、生产商信息的浏览、添加、删除和查询,同时还可以对货物出货、入货进行操作和控制。
设计内容主要包括系统分析、数据库、数据表的创建、系统各个窗体的布局及其编码实现。
系统功能分析是在系统开发的总体任务的基础上完成的。
该管理系统需要完成的基本功能主要有:用户管理:主要包括用户的添加、修改和删除。
供应商管理:主要包括供应商的添加、删除和修改。
产品管理:主要包括产品的添加、删除和进货、出货。
产品视图管理:主要包括产品查询、数据文件的导入、查询结果集的导出。
2.2 实训设备或软、硬件硬件:PⅣ及以上性能的PC机;软件:Windows 20xx或Windows XP系统;JDK工具;JCreator4.0环境2.3 功能设计及思想本次实训设计采用选择结构化开发方法,即用系统工程的思想和工程化的方法,按照用户至上的原则,自顶向下整体分析与设计和自底向上逐步实施的系统开发过程。
是组织、管理和控制信息系统开发过程的一种基本框架。
其基本思想:在系统分析时,采用自顶向下、逐层分解,由抽象到具体的逐步认识问题的过程;在系统设计的时候,先考虑系统整体的优化,再考虑局部的优化问题;在系统实施的时候,则坚持自底向上,先局部后整体,通过标准化模块的连接形成完整的系统。
操作系统实验报告java

操作系统实验报告java操作系统实验报告实验名称:java操作系统一、实验目的本次实验的目的是通过使用Java编程语言,实现一个简单的操作系统,包括进程管理、内存管理和文件系统管理。
二、实验环境操作系统:Windows 10开发工具:Eclipse IDE编程语言:Java三、实验过程及结果1、进程管理1.1 进程的创建编写一个Process类,模拟进程的创建过程,包括进程ID、状态等属性,并实现创建进程的方法。
1.2 进程的调度设计一个Scheduler类,实现进程的调度算法,如FCFS(先来先服务)、SJF(短作业优先)、RR(时间片轮转)等。
1.3 进程间通信实现进程间的通信机制,如共享内存、管道等。
2、内存管理2.1 内存分配算法设计一个MemoryAllocator类,实现内存分配的算法,如首次适应、最佳适应、最坏适应等。
2.2 内存回收实现一个MemoryReclmer类,用于回收已经释放的内存空间,并将其标记为可再分配的状态。
3、文件系统管理3.1 文件的创建与删除设计一个类,实现文件的创建和删除功能,包括文件名、大小等属性。
3.2 文件的读取与写入实现一个类和一个类,分别用于文件的读取和写入操作。
3.3 文件权限管理设计一个AccessControl类,用于控制文件的访问权限,包括读、写和执行等操作。
四、实验结果分析根据实验过程的描述,我们成功实现了一个简单的操作系统,包括进程管理、内存管理和文件系统管理。
在进程管理方面,我们实现了进程的创建、调度和通信机制,能够有效管理多个进程的执行。
在内存管理方面,我们实现了不同的内存分配算法,能够根据实际情况分配和回收内存空间。
在文件系统管理方面,我们实现了文件的创建、删除、读取和写入操作,并能够灵活控制文件的访问权限。
五、附件无六、法律名词及注释1、版权:根据著作权法,著作权人享有其作品的署名权、发表权、修改权和保护权等权利。
2、许可证:指授权他人使用某个著作权作品的合法许可证。
Java实验一实验报告

Java实验⼀实验报告实验⼀ Java开发环境的熟悉⼀、实验内容1. 使⽤JDK编译、运⾏简单的Java程序2.使⽤Eclipse 编辑、编译、运⾏、调试Java程序⼆、实验要求1.没有Linux基础的同学建议先学习《》《》课程2.完成实验、撰写实验报告,实验报告模板见QQ群,注意实验报告重点是运⾏结果,遇到的问题(⼯具查找,安装,使⽤,程序的编辑,调试,运⾏等)、解决办法(空洞的⽅法如“查⽹络”、“问同学”、“看书”等⼀律得0分)以及分析(从中可以得到什么启⽰,有什么收获,教训等)。
3.实验报告中统计⾃⼰的时间步骤耗时百分⽐需求分析 40min20%设计 40min20%代码实现 60min30%测试 30min15%分析总结 30min 15%4. 严禁抄袭。
三、实验步骤(⼀)命令⾏下Java程序开发1.⾸先双击桌⾯上的Xface终端图标。
2.打开终端(类似Windows下的cmd),之后会⾃动运⾏shell程序。
3.输⼊cd Code命令进⼊Code(注意C要⼤写)⽬录。
4.输⼊mkdir 20135109 命令建⽴实验⽬录,注意⽬录名⼀定是⾃⼰的学号(学号要体现在实验报告截图中),可以使⽤ls命令或dir命令查看建⽴的⽬录情况。
5.输⼊cd 20135109命令进⼊实验⽬录,再输⼊类似mkdir exp1建⽴第⼀个实验⽬录,然后输⼊cd exp1进⼊实验⼀⽬录,可以输⼊pwd命令查看当前⼯作路径。
6.输⼊gedit Hello.java(注意把代码保存到exp1⽬录中)或vim Hello.java 编辑Hello.java。
7.输⼊javac -d . Hello.java命令编译代码,输⼊java ljp.Hello命令运⾏程序。
(⼆)Eclipse下Java程序开发、调试1.在命令⾏中输⼊eclipse命令并回车或单击桌⾯上的Eclipse EE图标打开Eclipse。
2.在Eclipse中单击File->New-> Java Project新建Java项⽬。
java实验实验报告

java实验实验报告Java 实验实验报告一、实验目的本次 Java 实验的主要目的是通过实际操作和编程实践,深入理解和掌握 Java 编程语言的基本概念、语法结构、面向对象编程的思想以及常用类库的使用。
同时,培养我们解决实际问题的能力和编程思维,提高代码的质量和可读性。
二、实验环境1、操作系统:Windows 102、开发工具:IntelliJ IDEA3、 JDK 版本:18三、实验内容(一)基本语法练习1、数据类型与变量在 Java 中,我们学习了不同的数据类型,如整数类型(`int`、`long`)、浮点数类型(`float`、`double`)、字符类型(`char`)和布尔类型(`boolean`)。
通过定义和使用这些变量,我们能够存储和操作各种类型的数据。
```javaint age = 25;double salary = 500050;char grade ='A';boolean isStudent = true;```2、控制结构包括条件语句(`ifelse`、`switch`)和循环语句(`for`、`while`、`dowhile`)。
这些控制结构使我们能够根据不同的条件执行不同的代码块,或者重复执行一段代码。
```javaint num = 10;if (num > 5) {Systemoutprintln("Number is greater than 5");} else {Systemoutprintln("Number is less than or equal to 5");}switch (num) {Systemoutprintln("One");break;case 10:Systemoutprintln("Ten");break;default:Systemoutprintln("Unknown");}for (int i = 0; i < 5; i++){Systemoutprintln(i);}int count = 0;while (count < 3) {Systemoutprintln("Count: "+ count);count++;}count = 0;Systemoutprintln("Count: "+ count);count++;} while (count < 3);```(二)面向对象编程1、类与对象创建了自定义的类来表示现实世界中的实体。
java实验报告

java实验报告Java 实验报告一、实验目的本次 Java 实验的主要目的是通过实际编程操作,深入理解和掌握Java 语言的基本语法、面向对象编程的概念和方法,以及常用类库的使用。
同时,培养我们的问题解决能力、逻辑思维能力和代码规范意识,为今后的软件开发工作打下坚实的基础。
二、实验环境1、操作系统:Windows 102、开发工具:Eclipse IDE for Java Developers3、 JDK 版本:JDK 18三、实验内容本次实验共包括以下三个部分:1、 Java 基本语法练习变量与数据类型运算符与表达式控制流语句(ifelse、for、while、dowhile)数组2、面向对象编程实践类与对象的定义和使用构造函数与方法重载封装、继承与多态抽象类与接口3、 Java 常用类库应用String 类与字符串操作集合框架(ArrayList、HashMap)文件输入输出(File、FileReader、FileWriter)四、实验步骤及代码实现1、 Java 基本语法练习变量与数据类型:```javapublic class VariableDataType {public static void main(String args) {int age = 20;double salary = 50005;String name ="张三";boolean isStudent = true;Systemoutprintln("年龄:"+ age);Systemoutprintln("工资:"+ salary);Systemoutprintln("姓名:"+ name);Systemoutprintln("是否是学生:"+ isStudent);}}```运算符与表达式:```javapublic class OperatorExpression {public static void main(String args) {int num1 = 10;int num2 = 5;int sum = num1 + num2;int difference = num1 num2;int product = num1 num2;int quotient = num1 / num2;int remainder = num1 % num2; Systemoutprintln("和:"+ sum);Systemoutprintln("差:"+ difference);Systemoutprintln("积:"+ product);Systemoutprintln("商:"+ quotient);Systemoutprintln("余数:"+ remainder);}}```控制流语句:```javapublic class ControlFlowStatement {public static void main(String args) {// ifelse 语句int score = 80;if (score >= 90) {Systemoutprintln("优秀");} else if (score >= 80) {Systemoutprintln("良好");} else if (score >= 70) {Systemoutprintln("中等");} else if (score >= 60) {Systemoutprintln("及格");} else {Systemoutprintln("不及格");}// for 循环for (int i = 1; i <= 5; i++){Systemoutprintln("第" + i +"次循环");}// while 循环int j = 1;while (j <= 5) {Systemoutprintln("第" + j +"次 while 循环");j++;}// dowhile 循环int k = 1;do {Systemoutprintln("第" + k +"次 dowhile 循环");k++;} while (k <= 5);}}```数组:```javapublic class ArrayExample {public static void main(String args) {//一维数组int numbers ={1, 2, 3, 4, 5};for (int num : numbers) {Systemoutprintln(num);}//二维数组int matrix ={{1, 2, 3},{4, 5, 6},{7, 8, 9}};for (int row : matrix) {for (int num : row) {Systemoutprint(num +"");}Systemoutprintln();}}}```2、面向对象编程实践类与对象的定义和使用:```javapublic class Person {private String name;private int age;public Person(String name, int age) {thisname = name;thisage = age;}public void showInfo(){Systemoutprintln("姓名:"+ name +",年龄:"+ age);}public static void main(String args) {Person person1 = new Person("张三", 20);person1showInfo();}}```构造函数与方法重载:```javapublic class ConstructorOverloading {private String name;private int age;public ConstructorOverloading(String name) {thisname = name;}public ConstructorOverloading(String name, int age) {thisname = name;thisage = age;}public void showInfo(){if (age == 0) {Systemoutprintln("姓名:"+ name);} else {Systemoutprintln("姓名:"+ name +",年龄:"+ age);}}public static void main(String args) {ConstructorOverloading person1 = new ConstructorOverloading("张三");person1showInfo();ConstructorOverloading person2 = new ConstructorOverloading("李四", 25);person2showInfo();}}```封装、继承与多态:```java//父类class Animal {private String name;public Animal(String name) {thisname = name;}public void eat(){Systemoutprintln(name +"正在吃东西");}}//子类继承父类class Dog extends Animal {public Dog(String name) {super(name);}public void bark(){Systemoutprintln(name +"在叫");}}public class InheritancePolymorphism {public static void main(String args) {Animal animal = new Dog("小黑");animaleat();//向下转型为 Dog 类型调用 bark 方法if (animal instanceof Dog) {Dog dog =(Dog) animal;dogbark();}}}```抽象类与接口:```java//抽象类abstract class Shape {abstract void draw();}//实现抽象类的子类class Circle extends Shape {@Overridevoid draw(){Systemoutprintln("画一个圆");}}//接口interface Moveable {void move();}//实现接口的类class Car implements Moveable {@Overridepublic void move(){Systemoutprintln("汽车在移动");}}public class AbstractInterfaceExample {public static void main(String args) {Shape shape = new Circle();shapedraw();Moveable car = new Car();carmove();}}```3、 Java 常用类库应用String 类与字符串操作:```javapublic class StringOperation {public static void main(String args) {String str1 ="Hello, ";String str2 ="World!";String str3 = str1 + str2;Systemoutprintln(str3);int length = str3length();Systemoutprintln("字符串长度:"+ length);char charAt = str3charAt(5);Systemoutprintln("第 5 个字符:"+ charAt);boolean contains = str3contains("World");Systemoutprintln("是否包含 World:"+ contains);}}```集合框架(ArrayList、HashMap):```javaimport javautilArrayList;import javautilHashMap;import javautilMap;public class CollectionFramework {public static void main(String args) {// ArrayListArrayList<String> names = new ArrayList<>();namesadd("张三");namesadd("李四");namesadd("王五");for (String name : names) {Systemoutprintln(name);}// HashMapHashMap<String, Integer> ages = new HashMap<>();agesput("张三", 20);agesput("李四", 25);agesput("王五", 30);for (MapEntry<String, Integer> entry : agesentrySet()){Systemoutprintln(entrygetKey()+"的年龄是" +entrygetValue());}}}```文件输入输出(File、FileReader、FileWriter):```javaimport javaioFile;import javaioFileReader;import javaioFileWriter;import javaioIOException;public class FileIOExample {public static void main(String args) {//写入文件try (FileWriter writer = new FileWriter("outputtxt")){writerwrite("这是写入文件的内容");} catch (IOException e) {eprintStackTrace();}//读取文件try (FileReader reader = new FileReader("outputtxt")){int character;while ((character = readerread())!=-1) {Systemoutprint((char) character);}} catch (IOException e) {eprintStackTrace();}}}```五、实验结果与分析1、 Java 基本语法练习变量与数据类型:能够正确定义和使用各种数据类型的变量,并进行基本的运算和输出。
java实验报告

java实验报告一、实验目的本次实验旨在通过设计和实现一个简单的Java程序,来加深对于Java编程语言的理解和应用。
二、实验过程1. 环境准备在开始实验之前,需要先准备好所需的开发环境。
我选择使用Eclipse进行Java开发,因为它是一个强大且易于使用的集成开发环境。
安装完成后,我创建了一个新的Java项目,并在项目中新建了一个Java类。
2. 设计程序结构在设计程序的过程中,我首先明确了程序的功能和要实现的效果。
然后,我根据需求定义了几个类和方法,并确定它们之间的关系和调用顺序。
这有助于提高程序的可读性和模块化。
3. 编写代码接下来,我开始编写Java代码。
我首先实现了主类,并在其中定义了程序的入口方法main。
然后,我逐步实现了其他类和方法,并进行了测试和调试。
在编写代码的过程中,我注重代码的规范和风格,尽量使用可读性高的命名和注释。
4. 运行程序当代码编写完毕后,我通过Eclipse的运行按钮来启动程序。
在程序运行过程中,我注意观察程序的输出,以确保程序能够按照预期的结果执行。
如果程序出现错误或异常,我会根据错误信息进行排查和修复。
5. 进行实验验证为了验证程序的正确性和稳定性,我设计了一系列的测试用例,并分别对程序进行了测试。
我重点测试了一些边界情况和特殊情况,以确保程序能够正确地处理各种可能的情况。
在测试过程中,我还通过打印调试信息和观察程序的运行情况来帮助分析问题。
三、实验结果与分析经过多次测试和调试,我的Java程序得到了正确的结果,并且在运行过程中没有出现明显的性能问题或错误。
程序能够按照预期的要求输出结果,处理各种边界情况时也能够正确地应对。
通过本次实验,我对于Java编程语言有了更深入的理解和掌握。
我熟悉了Java的基本语法和面向对象的特性,掌握了Java程序的设计和实现方法。
我还学会了如何利用开发工具进行程序的调试和测试,提高程序的质量和可靠性。
在实验过程中,我也遇到了一些困难和挑战。
Java实验报告一及作业总结二

Java实验报告⼀及作业总结⼆Java实验报告实验⼀ Java开发环境与简单Java程序⼀、实验⽬的(1)熟悉JDK开发环境(2)熟练掌握结构化程序设计⽅法⼆、实验内容1. 打印输出所有的“⽔仙花数”,所谓“⽔仙花数”是指⼀个3位数,其中各位数字⽴⽅和等于该数本⾝。
例如,153是⼀个“⽔仙花数”。
2. 编写Java程序,求13-23+33-43+…+973-983+993-1003的值。
3. 编程求1!+2!+3!+…+20!。
4. 编写Java程序,计算8+88+888+…前10项之和。
5. ⼀个数如果恰好等于它的因⼦之和,这个数就称为完数。
编写程序输出1000以内的所有完数。
6. 编写应⽤程序,输出满⾜1+2+3+…+n<8888的最⼤正整数。
7. 使⽤for循环打印下⾯的图形。
三、实验过程1. 打印输出所有的“⽔仙花数”,所谓“⽔仙花数”是指⼀个3位数,其中各位数字⽴⽅和等于该数本⾝。
例如,153是⼀个“⽔仙花数”。
实验源码:实验结果:1533703714072. 编写Java程序,求13-23+33-43+…+973-983+993-1003的值。
实验源码:实验结果:-5003.编程求1!+2!+3!+…+20!。
实验源码:实验结果:40379134.编写Java程序,计算8+88+888+…前10项之和。
实验源码:实验结果:12866086085. ⼀个数如果恰好等于它的因⼦之和,这个数就称为完数。
编写程序输出1000以内的所有完数。
实验源码:实验结果:6284966. 编写应⽤程序,输出满⾜1+2+3+…+n<8888的最⼤正整数。
实验源码:实验结果:1327. 使⽤for循环打印下⾯的图形。
四、实验总结:觉得还是要多练题,增加⾃⼰的逻辑,解决相关问题。
总结报告:⼀:类的定义:基本⽅式;public static 返回值类型⽅法名(参数类型参数名称,.......){⽅法体; return 返回值;}⽅法的三种调⽤⽅式;注意:void 只能⽤于单独调⽤;要有⼀个更重要的地⽅在学习类的定义的时候,定义成员⽅法的时候与基本⽅法不同,成员⽅法他不需要static关键字,这个要注意!熟悉代码 这⾥说明⼀下什么时候⽤什么时候不⽤static关键字:在定义成员⽅法时不⽤,即因为此时定义的⽅法将要由对象调⽤,⽽不像之前那样与主⽅法⼀起定义在⼀个类当中且由主⽅法直接调⽤。
java实验报告:实验六

java实验报告:实验六一、实验目的本次实验的主要目的是深入理解和掌握 Java 中的一些关键概念和技术,包括面向对象编程的特性、异常处理机制以及文件操作等。
通过实际的编程实践,提高我们运用 Java 解决实际问题的能力。
二、实验环境本次实验使用的开发工具是 IntelliJ IDEA,操作系统为 Windows 10。
三、实验内容(一)面向对象编程实践1、定义一个名为“Student”的类,包含学生的姓名、学号和成绩等属性,并实现相应的 getter 和 setter 方法。
2、在主函数中创建“Student”类的对象,并对其属性进行赋值和输出。
(二)异常处理1、编写一个方法,实现两数相除的运算。
如果除数为 0,抛出“ArithmeticException”异常。
2、在主函数中调用该方法,并使用trycatch 语句捕获并处理异常。
(三)文件操作1、创建一个文本文件,并向其中写入一些数据。
2、读取该文件中的数据,并将其输出到控制台。
四、实验步骤(一)面向对象编程实践1、首先,在 IntelliJ IDEA 中创建一个新的 Java 项目。
2、然后,创建“Student”类,代码如下:```javapublic class Student {private String name;private int studentId;private double score;public String getName(){return name;}public void setName(String name) {thisname = name;}public int getStudentId(){return studentId;}public void setStudentId(int studentId) {thisstudentId = studentId;}public double getScore(){return score;}public void setScore(double score) {thisscore = score;}}```3、在主函数中创建“Student”类的对象,并对其属性进行赋值和输出,代码如下:```javapublic class Main {public static void main(String args) {Student student = new Student();studentsetName("张三");studentsetStudentId(1001);studentsetScore(905);Systemoutprintln("学生姓名:"+ studentgetName());Systemoutprintln("学生学号:"+ studentgetStudentId());Systemoutprintln("学生成绩:"+ studentgetScore());}}```(二)异常处理1、编写一个名为“divide”的方法,实现两数相除的运算,代码如下:```javapublic class ExceptionHandling {public static double divide(double num1, double num2) {if (num2 == 0) {throw new ArithmeticException("除数不能为 0");}return num1 / num2;}public static void main(String args) {try {double result = divide(10, 0);Systemoutprintln("结果:"+ result);} catch (ArithmeticException e) {Systemoutprintln("捕获到异常:"+ egetMessage());}}}```(三)文件操作1、创建一个名为“FileOperation”的类,用于实现文件的写入和读取操作,代码如下:```javaimport javaioBufferedWriter;import javaioFileWriter;import javaioIOException;import javaioBufferedReader;import javaioFileReader;public class FileOperation {public static void writeToFile(String filePath, String content) {try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))){writerwrite(content);} catch (IOException e) {eprintStackTrace();}}public static String readFromFile(String filePath) {StringBuilder content = new StringBuilder();try (BufferedReader reader = new BufferedReader(new FileReader(filePath))){String line;while ((line = readerreadLine())!= null) {contentappend(line)append("\n");}} catch (IOException e) {eprintStackTrace();}return contenttoString();}public static void main(String args) {String filePath ="testtxt";String data ="这是写入文件的内容";writeToFile(filePath, data);String readData = readFromFile(filePath);Systemoutprintln("读取到的文件内容:\n" + readData);}}```五、实验结果(一)面向对象编程实践成功创建了“Student”类的对象,并正确地对其属性进行了赋值和输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统实验报告院系:专业:班级:学号:姓名:指导老师:进程调度的模拟与内存管理一、实验目的在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。
当就续进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。
实验模拟实现处理机调度,以加深了解处理机调度的工作,并体会优先级和时间片轮转调度算法的具体实施方法。
帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。
二、实验要求1、可随机输入若干进程,并按优先权排序;2、从就绪队首选进程运行:优先权-1/要求运行时间-1要求运行时间=0时,撤销该进程3、重新排序,进行下轮调度。
4、可随时增加进程;5、规定道数,设置后备队列和挂起状态。
若内存中进程少于规定道数,可自动从后备队列调度一作业进入。
被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂入就绪队列。
6、每次调度后,显示各进程状态。
7、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表;表目内容:起址、长度、状态(未分/空表目)8、结合以上实验,PCB增加为:{PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB指针}9、采用最先适应算法分配主存空间;10、进程完成后,回收主存,并与相邻空闲分区合并。
11、采用图形界面;三、实验内容选择一个调度算法,实现处理机调度。
1、设计一个按优先权调度算法实现处理机调度的程序;2、设计按时间片轮转实现处理机调度的程序。
3、主存储器空间的分配和回收。
在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。
四、实验原理该模拟系统采用java语言实现,要实现的功能有新建进程、进程调度、挂起进程、解挂进程、删除进程,道数和时间片大小可以由用户自己调整,有两种调度策略:按优先权调度和按时间片轮转调度。
每个进程可能有5种状态:新建(new)、就绪(ready)、运行(running)、阻塞(waiting)、挂起(suspend)。
每个状态都有一个队列用来存放处于该状态的进程,不同的调度策略采用不同的队列实现。
当创建进程时,如果内存中的进程数还没达到规定道数,则将新建进程插入就绪队列,如果内存中进程数已经达到规定道数,则插到后备队列,后备队列中的进程的状态为new。
CPU每次调度时都从就绪队列中取进程,在进程执行过程中如果下一个操作时IO操作,则将进程插入到waiting队列。
在系统运行过程中可以执行进程挂起操作,但执行的挂起操作时系统自动暂停运行,在弹出窗口选择要挂起的进程后,将选中的进程从原来的队列中删除并插入到挂起队列。
进行解挂操作时将选中的进程从挂起队列中删除并插入该进程原来所处的队列。
➢按优先级调度:当选择按优先权调度时,所有队列都采用优先队列,优先队列采用一个有序链表实现,进程的优先权值越大代表优先级越高,优先队列中的进程按优先权从大到小排列,当新进程插入时根据该进程的优先权插入到队列中的合适位置,插入后保持队列按优先权从大到小排列,如果新进程与队列中某个进程优先权值相等,则该新进程插到那个进程后面,以遵循先来先服务的规则。
当要从队列中取出进程时总是取队列中第一个进程,因为该进程的优先级最高。
➢按时间片轮转调度:当选择按时间片轮转调度时,所有队列都采用先进先出队列,先进先出队列采用一个普通单向链表实现,当新进程插入时插入到队列的末尾,当要取进程时取队首进程,这样就实现了先进先出。
➢内存管理该实验基于实验一完成,核心是内存的分配和回收,在实验一的基础上增加内存管理部分,在新建进程的时候增加一个输入内存大小的输入框,在进程进入内存时要分配内存,在进程销毁时要回收内存,如果进入内存时内存不足,则将进程插入到后备队列等待下次调度。
系统维护一个内存表,每个表项代表一个空间,每个空间保存了该空间的起始地址和空间大小以及空间使用状态。
初始时只有一个空间,当CPU启动时要分配内存,内存分配采用最先适应算法。
回收内存时如果有相邻空闲空间,则要进行空闲空间合并。
五、部分源程序public class data {private String name; //进程的名字private int time; //要求的时间总和private int priority; //进程的优先权,值越大优先级越高private String state; //进程的状态private int start;private int length; //进程所占的内存空间private int isIn; //进程所需内存大小➢进程各项变量的初始化public void setName(String name) { = name;}public void setPriority(int priority) {this.priority = priority;}public void setState(String state) {this.state = state;}public String getName() {return ();}public int getPriority() {return (this.priority);}public String getState() {return (this.state);}public void setTime(int time) {this.time = time;}public int getTime() {return (this.time);}public void setLength(int length) {this.length = length;}public int getLength() {return (this.length);}public void setStart(int start) {this.start = start;}public int getStart() {return (this.start);}public void setIsIn(int isIn) {this.isIn = isIn;}public int getIsIn() {return (this.isIn);}➢删除列表中第几个数据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));}}}➢对内存管理调度的操作private 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()+6 ; j <unAssignList.get(i).getLimit()+unAssignList.get(i).getBase()+6; 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();s List.clear();f or(int i = 0; i < readyList.size(); i++){if(readyList.get(i).getTime()>0){sList.add(readyList.get(i));}}r eadyList.clear();f or(int i =0; i < sList.size();i++){readyList.add(sList.get(i));readyList.get(i).setState("ready");}i nt j = 0;i nt m = readyList.size();f or(; 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//加入runningLIsti f(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);}}e lse{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);}}}p utInMemory();s ub1();d isplay();j tf1.grabFocus();}}六、程序运行图图1 进程界面图2 新建进程图3 进程的挂起与解挂图4. 进程的删除图5 进程运行中七、实验总结为了完成这个程序,我参考了课本,互联网以及相关资料。