广工操作系统实验报告
- 格式:docx
- 大小:278.73 KB
- 文档页数:10
操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。
本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 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进程初识1、实验目的(1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。
(2)掌握WINDOWS API的使用方法。
(3)编写测试程序,理解用户态运行和核心态运行。
2、实验内容和步骤(1)编写基本的Win32 Consol Application步骤1:登录进入Windows,启动VC++ 6.0。
步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。
创建一个新的控制台应用程序工程。
步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。
步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。
编译成可执行文件。
步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe运行结果 (如果运行不成功,则可能的原因是什么?) :答:运行成功,结果:(2)计算进程在核心态运行和用户态运行的时间步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。
步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。
步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。
篇一:操作系统实验报告完全版《计算机操作系统》实验报告班级:姓名:学号:实验一进程控制与描述一、实验目的通过对windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解windows 2000的结构。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解windows 2000中进程的“一生”。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional、visual c++6.0企业版。
三、实验内容和步骤第一部分:程序1-1windows 2000 的gui 应用程序windows 2000 professional下的gui应用程序,使用visual c++编译器创建一个gui应用程序,代码中包括了winmain()方法,该方法gui类型的应用程序的标准入口点。
:: messagebox( null, “hello, windows 2000” , “greetings”,mb_ok) ;/* hinstance */ , /* hprevinstance */, /* lpcmdline */, /* ncmdshow */ )return(0) ; }在程序1-1的gui应用程序中,首先需要windows.h头文件,以便获得传送给winmain() 和messagebox() api函数的数据类型定义。
接着的pragma指令指示编译器/连接器找到user32.lib库文件并将其与产生的exe文件连接起来。
这样就可以运行简单的命令行命令cl msgbox.cpp来创建这一应用程序,如果没有pragma指令,则messagebox() api函数就成为未定义的了。
这一指令是visual studio c++ 编译器特有的。
接下来是winmain() 方法。
其中有四个由实际的低级入口点传递来的参数。
《操作系统》实验报告一、实验目的操作系统是计算机系统中最为关键的组成部分之一,本次实验的主要目的是深入理解操作系统的基本原理和功能,通过实际操作和观察,熟悉操作系统的核心概念,包括进程管理、内存管理、文件系统和设备管理等,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、进程管理实验进程是操作系统中最基本的执行单元。
在这个实验中,我们使用C++编写程序来创建和管理进程。
通过观察进程的创建、执行和结束过程,理解进程的状态转换和资源分配。
首先,我们编写了一个简单的程序,创建了多个子进程,并通过进程标识符(PID)来跟踪它们的运行状态。
然后,使用等待函数来等待子进程的结束,并获取其返回值。
在实验过程中,我们发现进程的创建和销毁需要消耗一定的系统资源,而且进程之间的同步和通信需要谨慎处理,以避免出现死锁和竞争条件等问题。
2、内存管理实验内存管理是操作系统的核心功能之一,它直接影响系统的性能和稳定性。
在这个实验中,我们研究了动态内存分配和释放的机制。
使用 C++中的 new 和 delete 操作符来分配和释放内存。
通过观察内存使用情况和内存泄漏检测工具,了解了内存分配的效率和可能出现的内存泄漏问题。
同时,我们还探讨了内存分页和分段的概念,以及虚拟内存的工作原理。
通过模拟内存访问过程,理解了页表的作用和地址转换的过程。
3、文件系统实验文件系统是操作系统用于管理文件和目录的机制。
在这个实验中,我们对文件的创建、读写和删除进行了操作。
使用 C++的文件流操作来实现对文件的读写。
通过创建不同类型的文件(文本文件和二进制文件),并对其进行读写操作,熟悉了文件的打开模式和读写方式。
此外,还研究了文件的权限设置和目录的管理,了解了如何保护文件的安全性和组织文件的结构。
4、设备管理实验设备管理是操作系统与外部设备进行交互的桥梁。
操作系统实验报告操作系统实验报告引言:操作系统是计算机系统中最重要的软件之一,它负责管理计算机硬件资源,并提供程序运行环境。
操作系统的设计和实现是计算机科学领域的重要研究方向之一。
本篇实验报告将介绍我们在操作系统实验中所进行的实践和实验结果。
一、实验目的我们的实验目的是通过实践操作系统的基本功能,深入理解操作系统的原理和实现方式。
具体来说,我们的实验目标包括:1. 学习并掌握操作系统的基本概念和原理;2. 理解操作系统与硬件之间的交互过程;3. 实践操作系统的进程管理、内存管理和文件系统等功能;4. 分析操作系统的性能和优化策略。
二、实验环境我们使用了一台配置较高的计算机作为实验环境,该计算机配备了一块主频为2.5GHz的多核处理器、8GB内存和500GB硬盘。
我们选择了一款常见的操作系统作为实验平台,以便于进行实验和调试。
三、实验过程1. 进程管理在进程管理实验中,我们实现了进程的创建、调度和终止等功能。
首先,我们编写了一个简单的程序,用于创建多个进程并进行调度。
然后,我们通过观察进程的执行顺序和时间片分配情况,分析操作系统的调度算法对系统性能的影响。
2. 内存管理在内存管理实验中,我们实现了内存的分配和回收等功能。
我们编写了一个模拟程序,用于模拟内存的分配和释放过程。
通过观察内存分配的效率和内存碎片的情况,我们评估了不同的内存管理算法的性能。
3. 文件系统在文件系统实验中,我们实现了文件的创建、读写和删除等功能。
我们编写了一个简单的文件操作程序,用于测试文件系统的性能和可靠性。
通过观察文件系统的读写速度和文件恢复的效果,我们评估了不同的文件系统实现方式的优劣。
四、实验结果通过实验,我们获得了以下结果:1. 进程管理实验中,我们发现不同的调度算法对系统性能的影响差异较大。
短作业优先算法在短时间内能够提高系统的响应速度,而时间片轮转算法则能够保证公平性。
2. 内存管理实验中,我们发现不同的内存管理算法对内存利用率和碎片情况有很大的影响。
《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在计算机实验室进行,使用的操作系统为 Windows 10 和Linux(Ubuntu 发行版)。
实验所使用的计算机配置为:Intel Core i5 处理器,8GB 内存,500GB 硬盘。
三、实验内容1、进程管理在 Windows 系统中,通过任务管理器观察进程的状态、优先级、CPU 使用率等信息,并进行进程的结束和优先级调整操作。
在 Linux 系统中,使用命令行工具(如 ps、kill 等)实现相同的功能。
2、内存管理使用 Windows 系统的性能监视器和资源监视器,查看内存的使用情况,包括物理内存、虚拟内存的占用和分配情况。
在 Linux 系统中,通过命令(如 free、vmstat 等)获取类似的内存信息,并分析内存的使用效率。
3、文件系统管理在 Windows 系统中,对文件和文件夹进行创建、复制、移动、删除等操作,了解文件的属性设置和权限管理。
在 Linux 系统中,使用命令(如 mkdir、cp、mv、rm 等)完成相同的任务,并熟悉文件的所有者、所属组和权限设置。
4、设备管理在 Windows 系统中,查看设备管理器中的硬件设备信息,安装和卸载设备驱动程序。
在 Linux 系统中,使用命令(如 lspci、lsusb 等)查看硬件设备,并通过安装内核模块来支持特定设备。
四、实验步骤1、进程管理实验(1)打开 Windows 系统的任务管理器,切换到“进程”选项卡,可以看到当前系统中正在运行的进程列表。
(2)选择一个进程,右键点击可以查看其属性,包括进程 ID、CPU 使用率、内存使用情况等。
(3)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。
班级:计科1141 学号:201411621110 姓名:邓超荣实验二进程间通信(信号量)实验目的了解信号量在进程控制中所起的重要作用。
实验内容父子两个进程共同完成递增正整数序列(1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16……100)的显示。
其中一个进程负责显示奇数,另一个进程显示偶数。
请分别编写“不带有信号量不能完成上述任务”和“使用信号量正确完成上述任务”的程序,观察实验结果,进行细致分析。
(1)不带有信号量不能完成上述任务1:#include <stdio.h>2:#include <stdlib.h>:3:#include <sys/types.h>:4:#include <sys/ipc.h>5:#include <sys/sem.h>:6:#include <unistd.h>7:union semun://使用union开辟空间,把定义的数据放到统一个足够大的空间8:{9: int val;//定义val,当执行SETVAL命令时使用10: struct semid_ds *buf;//定义buf,在IPC_STAT/IPC_SET命令时使用11: unsigned short *array;//在使用GETALL/SETALL命令时使用的指针12: struct seminfo *__buf;//在IPC_INFO命令时使用13:};14:int init_semvalue (int id, int v)15;{16: union semun sem_union;//调用union semun 对象17: sem_union.val = v;18: semctl (id, 0, SETVAL, sem_union);//系统调用senmctl用来执行在信号量及上的控制操作;获取关键字值id,设置信号量的数目为0;SETVAL设置信号量集中的一个单独的信号量的值。
操作系统实验报告学生学院计算机学院专业班级12级网络1班学号**********学生姓名沙宇丰指导教师李敏2015 年01月07日目录1 实验一进程调度………………………………………………………………2 实验二作业调度………………………………………………………………3 实验三存储管理………………………………………………………………实验一进程调度(实现了最高优先级优先,时间片轮转,多级反馈队列三种算法)1、实验目的编写并调试一个模拟的进程调度程序,采用最高优先数优先算法,时间片轮转算法,多级反馈队列算法对进程进行调度。
以加深对进程的概念及进程调度算法的理解.2:实验原理每个进程有一个进程控制块(PCB)表示。
进程控制块可以包含如下信息:进程名、到达时间、需要运行时间、已运行时间、进程状态等等。
每个进程的状态可以是就绪W(Wait)、运行R(Run)两种状态之一。
就绪进程获得CPU后都只能运行一个时间片。
用运行时间加1来表示。
如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程需要继续运行,此时应分配时间片给就绪队列中排在该进程之后的进程,并将它插入就绪队列队尾。
3:实验内容,方法首先对于:最高优先数算法:最高优先数算法的基本思想是把cpu分配给就绪队列中优先数最高的进程。
而我采用优先数动态变化的方式,进程在没获得一次cpu时间后其优先数就减一,然后对各个进程的优先数进行重新排序。
继续把cpu分配给优先数最高的进程。
进程的剩余时间为0时就退出队列。
首先用create()函数创建链表并对其初始化,然后对链表按照优先级大小进行排序,然后把排序后的链表放进processing()函数中进行处理,让其占有一个时间片执行,若进程任然未完成,则把该进程放进insert()函数中插入就绪队列中。
用disp()函数进行进程的显示。
第1篇一、引言操作系统是计算机系统的核心组成部分,它负责管理计算机硬件资源和协调计算机系统中各个程序的运行。
为了更好地理解操作系统的原理和机制,我们进行了一次操作系统实践课程,通过实际操作和实验,加深了对操作系统知识的理解。
以下是对本次实践课程的总结和报告。
二、实践目的1. 理解操作系统的基本原理和机制;2. 掌握操作系统的主要功能和任务;3. 提高实际操作能力,为今后从事相关工作打下基础。
三、实践内容1. 操作系统基本概念操作系统是管理计算机硬件资源和协调计算机系统中各个程序的运行的系统软件。
操作系统的主要功能包括:进程管理、内存管理、文件系统、设备管理和用户界面等。
2. 进程管理进程是操作系统中独立运行的基本单位。
本次实践课程中,我们学习了进程的创建、调度、同步和通信等知识。
通过实验,我们了解了进程的执行过程,以及进程状态转换的原因。
3. 内存管理内存管理是操作系统的重要功能之一。
本次实践课程中,我们学习了内存分配、回收、交换和虚拟内存等知识。
通过实验,我们掌握了内存管理的算法,以及内存碎片问题的解决方法。
4. 文件系统文件系统是操作系统中用于存储和管理数据的系统。
本次实践课程中,我们学习了文件系统的层次结构、目录管理、文件访问控制和磁盘空间分配等知识。
通过实验,我们了解了文件系统的实现原理,以及文件操作的具体过程。
5. 设备管理设备管理是操作系统负责管理计算机系统中各种设备的模块。
本次实践课程中,我们学习了设备驱动程序、中断处理、I/O端口和设备分配等知识。
通过实验,我们掌握了设备管理的原理,以及设备驱动程序的编写方法。
6. 用户界面用户界面是操作系统提供给用户与计算机系统交互的界面。
本次实践课程中,我们学习了命令行界面和图形用户界面等知识。
通过实验,我们了解了用户界面的设计原则,以及图形用户界面的实现方法。
四、实践过程1. 理论学习在实践课程开始之前,我们首先进行了理论学习,了解了操作系统的基本概念、原理和机制。
操作系统实验报告学院计算机学院专业软件工程班别12级4班学号3112006291姓名林炳城指导教师丁国芳2015年6 月27日实验一一、实验题目实现非抢占式短作业优先调度算法二、实验要求1.系统共有100个随机到达的作业。
要求为每个作业设定到达时间和需要运行的时间。
2.按照短作业优先进行调度,直到所有作业完成。
3.计算每个作业的周转时间,计算平均周转时间。
三、实验结果四、实验源码package progress;publicclass ProgressData {publicint arrived;//到达时间publicint server;//服务时间publicint runtime;//运行时间publicint finished;//完成时间publicint working;//周转时间publicdouble powerWorking;//带权周转时间public ProgressData() {}public ProgressData(intarrived, int server) {this.arrived = arrived;this.server = server;}public String toString() {returnnewInteger(arrived).toString() +"\t"+ newInteger(server).toString() + "\t"+ newInteger(runtime).toString() +"\t"+ newInteger(finished).toString() + "\t"+ newInteger(working).toString() +"\t"+ newDouble(powerWorking).toString() ;}}package progress;import java.util.Random;publicclass SJF {publicstaticvoid execate(Progr essData a[]) {int preFinished = 0;int num = -1, min = 4444;for (int i = 0; i<a.length; i++) {// 最外层循环min = 4444;for (int j = i; j<a.length; j++) {// 查找最短作业if (a[j].server< min && a[j].finished == 0&&a[j].arrived<= preFinished) {min =a[j].server;num = j;}}a[num].runtime = preFinished;a[num].finished = preFinished + a[num].server;a[num].working =a[num].finished - a[num].arrived;a[num].powerWorking = a[num].working / (double)a[num].server;preFinished =a[num].finished;ProgressData p = a[i];a[i] = a[num];a[num] = p;}}publicstaticvoid main(String[] args) {ProgressDataa[] =new ProgressData[100];Random rand = new Random();for (int i = 0; i<a.length; i++) {a[i] =new ProgressData(i,rand.nextInt(10));//随机生成100个线程,服务时间随机10}execate(a);System.out.println("到达时间\t服务时间\t运行时间\t完成时间\t周转时间\t带权周转时间");for (int i = 0; i<a.length; i++) {System.out.println(a[i].toStr ing());}}}实验二一、实验题目实现银行家算法二、实验要求1.系统共三种资源A,B,C2.内存中的进程:P0—P43.随机产生当前资源分配状态4.进程P0—P4随机申请资源,用银行家算法控制资源分配,避免死锁。
三、实验结果以书上例题数据进行测试四、实验源码package banker;import java.util.Scanner;/*** 银行家类Banker* @author LinBingcheng**/publicclass Banker {int ProcessNum; // 进程数int SourceNum; // 资源类型数int[] Available; // 可利用资源向量int[][] Max; // 最大需求矩阵int[][] Allocation; // 分配矩阵int[][] Need; // 需求矩阵public Banker(int pN, int sN) { ProcessNum = pN;SourceNum = sN;Available =newint[SourceNum];Max =newint[ProcessNum][SourceNum];Allocation = newint[ProcessNum][SourceNum];Need =newint[ProcessNum][SourceNum];}publicvoid Initilize() {// 初始化方法@SuppressWarnings("resource") Scanner s =new Scanner(System.in);System.out.println("========= =初始化==========");for(int i = 0; i<Max.length; i++) {System.out.print("请依次输入第" + i + "进程的各资源数:");for (int j = 0; j<Max[i].length; j++) {Max[i][j] =s.nextInt();}}for (int i = 0;i<Allocation.length; i++) {System.out.print("请依次输入第" + i + "进程中已分配资源的数量:");for (int j = 0; j<Allocation[i].length; j++) {Allocation[i][j] =s.nextInt();Need[i][j] =Max[i][j] - Allocation[i][j];}}for (int i = 0;i<Available.length; i++) {System.out.print("请输入系统中第" + i + "种资源的剩余量:");Available[i] =s.nextInt();}System.out.println("==========初始化结果==========");System.out.println(" MAX ALLOCATION NEED AVAILABLE");System.out.println(" A B C A BC A B C A B C");for(int i = 0; i<ProcessNum;i++) {System.out.print("P" +i + ": ");for (int j = 0; j<SourceNum; j++) {if (Max[i][j] > 9) {// 如果是两位数,控制格式,在数字前少输出一个" "。
System.out.print(Max[i][j] + " ");} else {System.out.print(" "+ Max[i][j]+ " ");}}System.out.print(" ");for (int j = 0; j<SourceNum; j++) {if(Allocation[i][j] > 9) {System.out.print(Allocation[i][j] + " ");} else {System.out.print(" " +Allocation[i][j] + " ");}}System.out.print(" ");for (int j = 0; j<SourceNum; j++) {if (Need[i][j] > 9) {System.out.print(Need[i][j] + " ");} else {System.out.print(" " +Need[i][j] + " ");}}if (i == 0) {System.out.print(" ");for (int j = 0; j<SourceNum; j++) {if(Available[j] > 9) {System.out.print(Available[j]+ " ");} else {System.out.print(" " + Available[j] + " ");}}}System.out.println();}System.out.println("=====完成初始化=====");System.out.println();}publicvoid BakerAlgorithm() {// 银行家算法具体实现int[] Request =newint[SourceNum];int number; // 进程号@SuppressWarnings("resource") Scanner s =new Scanner(System.in);int i; // 循环计数器System.out.print("请输入要申请资源的进程号:");number = s.nextInt();System.out.print("请输入请求向量:");for(i = 0; i<SourceNum; i++) {Request[i] =s.nextInt();}for(i = 0; i<SourceNum; i++) {if(Request[i] >Need[number][i]) {// 所需资源数大于需求量System.out.println("进程所要求分配的资源数已超过其宣布的最大值,系统不予分配!");return;}if(Request[i] >Available[i]) {// 所需资源大于可利用资源System.out.println("系统中无足够的资源满足进程的申请,系统不予分配!");return;}}for(i = 0; i<SourceNum; i++) { // 假设系统将申请资源数分配给该进程,对数据进行相关修改Available[i] -=Request[i];Need[number][i] -= Request[i];Allocation[number][i] += Request[i];}SafeTestsafetest =new SafeTest(this);if(safetest.SafeTestAlgorithm()) {// 安全性检查结果为安全System.out.println("系统可以为该进程分配资源!");return;} else {System.out.println("系统不为该进程分配资源!");for(i = 0; i<SourceNum; i++) { // 系统不能为该进程分配资源,前面的假设作废,对数据进行相关修改Available[i] += Request[i];Need[number][i] += Request[i];Allocation[number][i] -= Request[i];}return;}}}package banker;/*** 安全性检测算法类SafeTest* @author LinBingcheng**/publicclass SafeTest {int ProcessNum; //进程数int SourceNum; //资源类型数int[] SafeSequence; //安全序列向量int[] Work; //空闲资源矩阵boolean[] Finish; //进程资源分配完成标志Banker banker; //银行家实例public SafeTest(Banker bK){banker = bK;ProcessNum =bK.ProcessNum;SourceNum = bK.SourceNum;SafeSequence =newint[ProcessNum];Work = newint[SourceNum];Finish =newboolean[ProcessNum];for(int i = 0; i<ProcessNum; i++){//初始化向量SafeSequence、FinishSafeSequence[i] = 0;Finish[i] = false;}for(int i = 0;i <SourceNum; i++){//初始化向量WorkWork[i] =bK.Available[i];}}publicboolean SafeTestAlgorith m(){//安全性测试算法具体实现int k = 0;int i,j; //循环计数器for(i=0; i<ProcessNum;i++){if(Finish[i]==false){for(j=0;j<SourceNum; j++){/*判断当前进程需求矩阵能否得到满足*/if(banker.Need[i][j] >Work[j] )break; //不满足则跳出}if(j == SourceNum){//第i个进程满足SafeSequence[k++]=i; //将进程号存入安全序列for(int q=0;q<SourceNum; q++){//修改空闲资源矩阵Work[q] += banker.Allocation[i][q];}Finish[i] = true;//标志该进程可完成i = -1;//下次检查重头开始}}}for(i=0; i<ProcessNum;i++){//检查标志数组,若尚有false则未找到安全序列if(!Finish[i]){System.out.println("找不到安全序列,系统处于不安全状态!");returnfalse;}}System.out.println("找到安全序列:");for(i=0; i<ProcessNum;i++){//显示安全序列System.out.print("P"+SafeSequ ence[i]+" ");}System.out.println();System.out.println("系统处于安全状态!");returntrue;}}package banker;import java.util.Scanner;/*** 主类** @author LinBingcheng**/publicclass Main {publicstaticvoid main(String[] args) {int ProNum, SouNum; // 进程数、资源类型数Banker banker; // 银行家算法对象SafeTestsafetest; // 安全性测试算法对象@SuppressWarnings("resource") Scanner scanner =new Scanner(System.in);System.out.print("请依次输入系统中的【进程数】和【资源类型数】:");ProNum =scanner.nextInt();SouNum =scanner.nextInt();banker = new Banker(ProNum, SouNum);banker.Initilize();safetest =new SafeTest(banker);if(safetest.SafeTestAlgorithm()) {int gate = 1;while (gate != 0) {banker.BakerAlgorithm();// 死锁检测System.out.println("如果您要继续分配资源请输入\"1\",退出请输入\"0\"");System.out.print("您输入的值为:");gate =scanner.nextInt();System.out.println();}} else {System.out.println("初始化错误,原系统进程处于不安全状态!");}System.out.println("使用愉快!期待您下次使用!");}}。