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

合集下载

操作系统实验实验报告

操作系统实验实验报告

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

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

二、实验环境本次实验使用的操作系统为 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 等进行文件的创建、读取和写入操作。

中南大学Linux系统实验报告材料

中南大学Linux系统实验报告材料

Unix/Linux系统实验报告学院: 信息科学与工程学院指导老师: 胡小龙班级: 信息安全1401班学号: 0906140106 姓名: 孙毅时间: 2016年12月实验一 Linux的安装(课后) (1)1、实验目的 (1)2、实验设备 (1)3、实验原理 (1)4、实验步逐 (1)Linux安装过程: (1)实验2 Linux基本操作 (9)1、实验目的 (9)2、实验内容 (9)3、实验记录 (15)实验3 Linux系统管理 (19)1、实验目的 (19)2、实验内容 (19)3、实验记录 (20)实验4 Linux Shell程序设计 (22)1、实验目的 (22)2、实验内容 (22)3、实验结果 (23)实验5 Linux 高级程序设计 (25)1、实验目的 (25)2、实验内容 (25)实验6 Linux内核 (28)1、实验目的 (28)2、实验内容 (28)心得体会 (31)实验一 Linux的安装(课后)1、实验目的(1)了解硬盘分区的概念和方法;(2)掌握硬盘的分区规划;(3)掌握Linux操作系统的安装和配置过程。

2、实验设备一台pc机、RedHat Linux 7.2以上版本、VMware Workstation v5.53、实验原理Linux可以以多种方式安装在PC机上:(1)独立分区安装;(2)DOS分区安装;(3)虚拟机VMWare下安装。

鉴于VMware下安装对原来系统影响较小且不影响本实验目的,因此采用VMWare下安装方式。

4、实验步逐(1)在Windows XP下安装VMware 5.5(2)配置虚拟机(3)启动虚拟机(4)启动Linux安装过程(5)安装过程配置(6)安装后配置(7)第1次启动VMWare下Linux操作系统Linux安装过程:(1)语言选择:(2)键盘配置:(3)鼠标配置:(4)选择安装还是升级:(5)安装类型:(6)磁盘分区设置:(7)为系统分区:(8)添加分区:(9)引导装载程序配置:(10)网络配置:(11)防火墙配置:(12)语言支持的选择:(13)时区配置:(14)设置根口令(15)选择软件包组:(16)准备安装:应该看到一个安装Red Hat Linux 做准备的屏幕。

(完整word版)操作系统实验报告.实验一 WINDOWS进程初识

(完整word版)操作系统实验报告.实验一 WINDOWS进程初识

操作系统教程实验指导书实验一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 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、进程管理实验进程是操作系统中最基本的执行单元。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

中南大学系统仿真实验报告

中南大学系统仿真实验报告

实验一MATLAB中矩阵与多项式的基本运算实验任务1.了解MATLAB命令窗口和程序文件的调用。

2.熟悉如下MATLAB的基本运算:①矩阵的产生、数据的输入、相关元素的显示;②矩阵的加法、乘法、左除、右除;③特殊矩阵:单位矩阵、“1”矩阵、“0”矩阵、对角阵、随机矩阵的产生和运算;④多项式的运算:多项式求根、多项式之间的乘除。

基本命令训练1、>> eye(2)ans =1 00 1>> eye(4)ans =1 0 0 00 1 0 00 0 1 00 0 0 12、>> ones(2)ans =1 1>> ones(4)ans =1 1 1 11 1 1 11 1 1 11 1 1 1 >> ones(2,2)ans =1 11 1>> ones(2,3)ans =1 1 11 1 1>> ones(4,3)ans =1 1 11 1 11 1 11 1 1 3、>> zeros(2)ans =0 0>> zeros(4)ans =0 0 0 00 0 0 00 0 0 00 0 0 0 >> zeros(2,2)ans =0 00 0>> zeros(2,3)ans =0 0 00 0 0>> zeros(3,2)ans =0 00 0004、随机阵>> rand(2,3)ans =0.2785 0.9575 0.15760.5469 0.9649 0.9706>> rand(2,3)ans =0.9572 0.8003 0.42180.4854 0.1419 0.91575、>> diag(5)ans =5>> diag(5,5)ans =0 0 0 0 0 50 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0>> diag(2,3)ans =0 0 0 20 0 0 00 0 0 00 0 0 06、(inv(A)为求A的逆矩阵)>> B=[5 3 1;2 3 8;1 1 1],inv(B) B =5 3 12 3 81 1 1ans =0.6250 0.2500 -2.6250-0.7500 -0.5000 4.75000.1250 0.2500 -1.1250>> A=[2 3;4 4],B=[5 3;3 8],inv(A),inv(B);A\B,A/B,inv(A)*B,B*inv(A)A =2 34 4B =5 33 8ans =-1.0000 0.75001.0000 -0.5000ans =-2.7500 3.00003.5000 -1.0000ans =0.2258 0.29030.6452 0.2581ans =-2.7500 3.00003.5000 -1.0000ans =-2.0000 2.25005.0000 -1.75007、>> p =[1,-6,-72,-27], roots(p)p =1 -6 -72 -27ans =12.1229-5.7345-0.3884>> p=[2,3,6],roots(p)p =2 3 6ans =-0.7500 + 1.5612i-0.7500 - 1.5612i8、(A为n*n的方阵)>> A=[0 1 0;-4 4 0;-2 1 2],poly(A),B=sym(A),poly(B)A =0 1 0-4 4 0-2 1 2ans =1 -6 12 -8B =[ 0, 1, 0][ -4, 4, 0][ -2, 1, 2]ans =x^3-6*x^2+12*x-89,、(conv是多项式相乘,deconv是多项式相除)>> u=[1 2 4 6 ],v=[5 0 0 -6 7],conv(u,v)u =1 2 4 6v =5 0 0 -6 7ans =5 10 20 24 -5 -10 -8 42 >> v=[1 2 46 ],u=[5 0 0 -6 7],deconv(u,v)v =1 2 4 6u =5 0 0 -6 7ans =5 -1010、(点乘是数组的运算,没有点的乘是矩阵运算)>> a = [2 5;3 4], b =[3 1;4 7],a.*b,a*ba =2 53 4b =3 14 7ans =6 512 28ans =26 3725 31>> a = [2 3]; b = [4 7];a.*b = [8 21];a*b %错误a*b' = 29;11、(who 可以看到你用过的一些变量,whos是把该变量及所存储的大小等信息都显示出来了)>> whoYour variables are:A B a ans b p u v>> whosName Size Bytes Class AttributesA 2x2 32 doubleB 2x2 32 doublea 1x2 16 doubleans 1x2 16 doubleb 1x2 16 doublep 1x3 24 doubleu 1x5 40 doublev 1x4 32 double12、>> A=[2 5 3;6 5 4],disp(A),size(A),length(A)A =2 5 36 5 42 5 36 5 4ans =2 3ans =3实验二MATLAB绘图命令实验任务熟悉MATLAB基本绘图命令,掌握如下绘图方法:1.坐标系的选择、图形的绘制;2.图形注解(题目、标号、说明、分格线)的加入;3.图形线型、符号、颜色的选取。

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

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

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”。

操作系统实验三实验报告

操作系统实验三实验报告
三、实验内容
(一)进程创建
编写程序实现创建多个进程,并观察进程的执行情况。通过调用Windows API函数`CreateProcess`来创建新的进程。在创建进程时,设置不同的参数,如进程的优先级、命令行参数等,观察这些参数对进程执行的影响。
(二)进程控制
实现对进程的暂停、恢复和终止操作。使用`SuspendThread`和`ResumeThread`函数来暂停和恢复进程中的线程,使用`TerminateProcess`函数来终止进程。通过控制进程的执行状态,观察系统的资源使用情况和进程的响应。
(一)进程创建实验结果与分析
创建多个进程后,通过任务管理器观察到新创建的进程在系统中运行。不同的进程优先级设置对进程的CPU占用和响应时间产生了明显的影响。高优先级的进程能够更快地获得CPU资源,执行速度相对较快;而低优先级的进程则在CPU资源竞争中处于劣势,可能会出现短暂的卡顿或计一个多进程同步的程序,使用信号量、互斥量等同步机制来协调多个进程的执行。例如,实现一个生产者消费者问题,多个生产者进程和消费者进程通过共享缓冲区进行数据交换,使用同步机制来保证数据的一致性和正确性。
四、实验步骤
(一)进程创建实验步骤
1、打开Visual Studio 2019,创建一个新的C++控制台应用程序项目。
六、实验中遇到的问题及解决方法
(一)进程创建失败
在创建进程时,可能会由于参数设置不正确或系统资源不足等原因导致创建失败。通过仔细检查参数的设置,确保命令行参数、环境变量等的正确性,并释放不必要的系统资源,解决了创建失败的问题。
(二)线程控制异常
在暂停和恢复线程时,可能会出现线程状态不一致或死锁等异常情况。通过合理的线程同步和错误处理机制,避免了这些异常的发生。在代码中添加了对线程状态的判断和异常处理的代码,保证了线程控制的稳定性和可靠性。

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

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

中南大学操作系统实验报告姓名:学号:班级:进程模拟与主存分配回收一、实验内容1.设计进程管理中数据结构的内容;2.设计一个优先权调度算法,实现进程调度;3.设计至少两个临界资源的同步管理模拟。

4.主存存储器空间的分配和回收二、实验目的a)加深对进程概念及进程管理各部分内容的理解;b)熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构和同步机构的实现过程。

c)帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收三、实验要求1.最好采用图形界面;2.可随时增加进程;3.规定道数,设置后备队列和阻塞状态。

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

被阻塞进程入阻塞队列,设置唤醒功能用于将指定阻塞进程唤醒进入就绪队列;5.每次调度完成,显示各进程状态;6.设置至少两个临界资源阻塞队列和公共变量,模拟同步过程;7.设置时间片中断操作;8.自行假设主存空间大小,预设操作系统所占大小并构造未分分区表。

9.采用最先适应算法分配主存空间10.进程完成后,分配主存,并与相邻空闲分区合并。

四、 具体实现将实验一与实验二结合在一起。

所以整合成了一分实验报告。

在这里统一给出自己实现的思想。

1. 流程图 开始就绪队列内存是否够用是否有临界资源可以使用阻塞队列外存队列是否完成释放资源部分进程进入就绪队列结束队列2.关键代码:1. 利用冒泡法实现优先级的排序//优先级的排序public void sort(ArrayList<PCB> arraylist){for(int i=0;i<arraylist.size();i++){for(int j=i+1;j<arraylist.size();j++){if(arraylist.get(i).getPriority()<arraylist.get(j).getPriority()){//根据冒泡法来优先级排序PCB temp = arraylist.get(i);arraylist.set(i, arraylist.get(j));arraylist.set(j, temp);}}}}2.自动从后备队列中往就绪队列中增加进程//若内存中进程少于规定道数,可从后备队列中调度作业进入public void checkPCB(ArrayList<PCB> ready,ArrayList<PCB> pool){ while(ready.size()<4&&pool.size()>0){ready.add(pool.get(0));System.out.println("从后备队列往就绪队列中加入进程");pool.get(0).getAll();pool.remove(0);}}3.内存不够时,移入外存队列public void move(PCB PCB,ArrayList externStore,ArrayList PCBready){if(PCB.isGetStore()==false){externStore.add(PCB);PCBready.remove(PCB);}}五、实验总结1.通过此次实验,对于操作系统的模拟有了更深的理解。

《操作系统》课内实验报告

《操作系统》课内实验报告

《操作系统》课内实验报告一、实验目的操作系统是计算机系统的核心组成部分,本次《操作系统》课内实验旨在通过实际操作和观察,深入理解操作系统的基本原理、功能和运行机制。

具体目的包括:1、熟悉操作系统的常用命令和操作,如文件管理、进程管理、内存管理等。

2、掌握操作系统的资源分配和调度策略,观察其对系统性能的影响。

3、培养解决操作系统相关问题的能力,提高动手实践和分析问题的能力。

二、实验环境本次实验在以下环境中进行:1、操作系统:Windows 10 专业版2、开发工具:Visual Studio Code三、实验内容及步骤(一)文件管理实验1、创建、删除和重命名文件及文件夹打开文件资源管理器,在指定目录下创建新的文件夹和文本文件。

对创建的文件和文件夹进行重命名操作,观察文件名的变化。

选择部分文件和文件夹进行删除操作,验证是否成功删除。

2、文件复制、移动和属性设置选取一些文件,将其复制到其他目录,并观察复制过程和结果。

把特定文件移动到不同的位置,检查文件是否正确迁移。

设置文件的属性,如只读、隐藏等,查看属性设置后的效果。

(二)进程管理实验1、查看系统进程打开任务管理器,观察当前正在运行的进程列表。

了解进程的名称、PID(进程标识符)、CPU 使用率、内存占用等信息。

2、进程的终止和优先级设置选择一个非关键进程,尝试终止其运行,观察系统的反应。

调整某些进程的优先级,观察其对系统资源分配和运行效率的影响。

(三)内存管理实验1、查看内存使用情况通过系统性能监视器,查看物理内存和虚拟内存的使用情况。

观察内存使用量随时间的变化趋势。

2、内存优化操作关闭一些不必要的后台程序,释放占用的内存资源。

调整虚拟内存的大小,观察对系统性能的改善效果。

四、实验结果与分析(一)文件管理实验结果1、成功创建、删除和重命名文件及文件夹,系统能够准确响应操作,文件名和文件夹名的修改即时生效。

2、文件的复制和移动操作顺利完成,数据无丢失和损坏。

《操作系统》课程实验报告

《操作系统》课程实验报告

《操作系统》课程实验报告一、实验目的本次《操作系统》课程实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理、进程管理、内存管理、文件系统等核心概念,并掌握相关的操作技能和分析方法。

二、实验环境1、操作系统:Windows 10 专业版2、开发工具:Visual Studio Code3、编程语言:C/C++三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新进程,并观察进程的创建过程和资源分配情况。

同时,实现进程的正常终止和异常终止,并分析其对系统的影响。

2、进程同步与互斥使用信号量、互斥锁等机制实现进程之间的同步与互斥。

通过模拟多个进程对共享资源的访问,观察并解决可能出现的竞争条件和死锁问题。

(二)内存管理实验1、内存分配与回收实现不同的内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。

观察在不同的内存请求序列下,内存的分配和回收情况,并分析算法的性能和优缺点。

2、虚拟内存管理研究虚拟内存的工作原理,通过设置页面大小、页表结构等参数,观察页面的换入换出过程,以及对系统性能的影响。

(三)文件系统实验1、文件操作实现文件的创建、打开、读取、写入、关闭等基本操作。

观察文件在磁盘上的存储方式和文件系统的目录结构。

2、文件系统性能优化研究文件系统的缓存机制、磁盘调度算法等,通过对大量文件的读写操作,评估不同优化策略对文件系统性能的提升效果。

四、实验步骤(一)进程管理实验步骤1、进程创建与终止(1)使用 C/C++语言编写程序,调用系统函数创建新进程。

(2)在子进程中执行特定的任务,父进程等待子进程结束,并获取子进程的返回值。

(3)通过设置异常情况,模拟子进程的异常终止,观察父进程的处理方式。

2、进程同步与互斥(1)定义共享资源和相关的信号量或互斥锁。

(2)创建多个进程,模拟对共享资源的并发访问。

(3)在访问共享资源的关键代码段使用同步机制,确保进程之间的正确协作。

(4)观察并分析在不同的并发情况下,系统的运行结果和资源竞争情况。

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

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

操作系统原理试验报告班级:学号::实验一: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.ge t(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));}////////////////////////////////////加入runningLIst if(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();}}。

操作系统实验报告三

操作系统实验报告三

操作系统实验报告三一、实验目的本次操作系统实验的目的在于深入了解操作系统的进程管理、内存管理和文件系统等核心功能,通过实际操作和观察,增强对操作系统原理的理解和掌握,提高解决实际问题的能力。

二、实验环境本次实验在 Windows 10 操作系统环境下进行,使用了 Visual Studio 2019 作为编程工具,并借助了相关的操作系统模拟软件和调试工具。

三、实验内容与步骤(一)进程管理实验1、创建多个进程使用 C++语言编写程序,通过调用系统函数创建多个进程。

观察每个进程的运行状态和资源占用情况。

2、进程同步与互斥设计一个生产者消费者问题的程序,使用信号量来实现进程之间的同步与互斥。

分析在不同并发情况下程序的执行结果,理解进程同步的重要性。

(二)内存管理实验1、内存分配与回收实现一个简单的内存分配算法,如首次适应算法、最佳适应算法或最坏适应算法。

模拟内存的分配和回收过程,观察内存的使用情况和碎片产生的情况。

2、虚拟内存管理了解 Windows 操作系统的虚拟内存机制,通过查看系统性能监视器观察虚拟内存的使用情况。

编写程序来模拟虚拟内存的页面置换算法,如先进先出(FIFO)算法、最近最少使用(LRU)算法等。

(三)文件系统实验1、文件操作使用 C++语言对文件进行创建、读写、删除等操作。

观察文件在磁盘上的存储方式和文件目录的结构。

2、文件系统性能测试对不同大小和类型的文件进行读写操作,测量文件系统的读写性能。

分析影响文件系统性能的因素,如磁盘碎片、缓存机制等。

四、实验结果与分析(一)进程管理实验结果1、创建多个进程在创建多个进程的实验中,通过任务管理器可以观察到每个进程都有独立的进程 ID、CPU 使用率、内存占用等信息。

多个进程可以并发执行,提高了系统的资源利用率。

2、进程同步与互斥在生产者消费者问题的实验中,当使用正确的信号量机制时,生产者和消费者能够协调工作,不会出现数据不一致或死锁的情况。

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

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

计算机操作系统实验报告学院:信息科学与工程学院专业班级:信息安全1302班指导老师:郁博文学号:0906130205计算机操作系统1.设计目的1、增强学生对计算机操作系统基本原理、基本理论、基本算法的理解;2、提高和培养学生的动手能力。

2.设计要求1、每人至少选作1题,多做不限;2、每人单独完成,可以讨论,但每人的设计内容不得完全相同,抄袭或有2人/多人设计完全一样者,不能通过;3、设计完成后,应上交课程设计文档,文档格式应是学校课程设计的标准格式,所有学生的封面大小、格式也必须一样;4、同时上交设计的软盘(或以班刻录光盘)。

3.设计题目调度算法的模拟:模拟各种调度算法,并进行调度性能分析。

4.设计过程4.1 设计思路模拟了一个作业调度算法,其中用到了先来先服务算法(FCFS)、短作业优先算法(SJF)、最高响应比优先算法(HRN)三种算法。

如下,分别为三种算法的程序流程图。

4.2 实验过程图1 - 开始界面图2 –输入作业的信息(名字、提交时间、运行时间)图3 –选择算法(FCFS、SJF、HRN)图4、5 – 选择FCFS 算法后输出结果图6、7 – 选择SJF 算法后输出结果图8、9 – 选择HRN 算法后输出结果4.3 调度性能分析1.先来先服务算法(FCFS)优点:能体现公平性;缺点:一旦一个较长的作业进入系统后就会长时间的占用系统的资源,这样如果有优先级较高的短作业需要执行的话需要等待很长时间。

2.短作业优先算法(SJF)优点:比前者改善了平均周转时间和平均带权周转时间,缩短作业的等待时间,提高系统的吞吐量;缺点:对长作业非常不利,可能长时间得不到执行,未能一句作业的紧迫程度来划分执行的优先级,难以准确估计作业的执行时间,从而影响调度性能。

3.最高响应比优先算法(HRN)优点:这种算法是对FCFS方式和SJF方式的一种综合平衡。

FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。

《操作系统》实验报告(2)

《操作系统》实验报告(2)
b.将f02.txt的读权限去掉(修改权限的命令是chmod),___chmod -r f02.txt____;看看还能否用cat打开该文件;不能查看,权限不够
c.将subdir目录的读权限去掉,看看是否能用ls命令看到其中内容?
权限不够
(三)Shell程序设计
1.上机编辑、执行实验内容中的例1~例6过程,写出每个脚本(例1~例5)的功能和执行结果;
然后把t01.txt复制一个新文件t03.txt,catt01.txt>t02.txt;
用cat命令将f01.txt的内容追加到t01.txt的末尾,catf01.txt>> t01.txt;
再用diff命令比较t01.txt,t02.txt和t03.txt,比较t01.txt,t02.txt:diff t01.txt t02.txt,结果是否相同:__相同___;比较t01.txt,t03.txt:diff t01.txt t03.txt,结果是否相同:不相同;比较t02.txt,t03.txt:diff t02.txt t03.txt,结果是否相同:不相同。出现上述结果的原因是:______________________________________________________________________________。
2.修改例5,使脚本中不出现break循环控制语句;
3.编写一个Shell过程完成如下功能:
a.合并两个$1、$2文件为$3,并显示内容。
b.如果缺少$3,那么先报告缺少$3,将合并后的内容输出到totaltext.txt,并显示内容。
c.如果缺少$2、$3那么先报告缺少$2、$3,只显示$1的内容。
b.用ln命令给t03.txt建立一个符号链接t04.txt,ln–st03.txt t04.txt;用cat命令看看t04.txt,___cat t04.txt_____;然后删去t03.txt,___rm t03.txt____;再用cat命令看看t04.txt,___cat t04.txt___;结果是:___t04.txt为空____

操作系统实验报告4

操作系统实验报告4

操作系统实验报告4一、实验目的本次操作系统实验的目的在于深入了解和掌握操作系统中进程管理、内存管理、文件系统等核心概念和相关操作,通过实际的实验操作,增强对操作系统原理的理解和应用能力,提高解决实际问题的能力。

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

三、实验内容与步骤(一)进程管理实验1、进程创建与终止使用 C++语言编写程序,创建多个进程,并在进程中执行不同的任务。

通过进程的标识符(PID)来监控进程的创建和终止过程。

2、进程同步与互斥设计一个生产者消费者问题的程序,使用信号量来实现进程之间的同步与互斥。

观察生产者和消费者进程在不同情况下的执行顺序和结果。

(二)内存管理实验1、内存分配与释放编写程序,使用动态内存分配函数(如`malloc` 和`free`)来分配和释放内存。

观察内存的使用情况和内存泄漏的检测。

2、内存页面置换算法实现几种常见的内存页面置换算法,如先进先出(FIFO)算法、最近最少使用(LRU)算法和最佳置换(OPT)算法。

通过模拟不同的页面访问序列,比较不同算法的性能。

(三)文件系统实验1、文件创建与读写使用 C++语言的文件操作函数,创建一个新文件,并向文件中写入数据。

从文件中读取数据,并进行数据的处理和显示。

2、文件目录操作实现对文件目录的创建、删除、遍历等操作。

观察文件目录结构的变化和文件的组织方式。

四、实验结果与分析(一)进程管理实验结果与分析1、进程创建与终止在实验中,成功创建了多个进程,并通过控制台输出观察到了每个进程的 PID 和执行状态。

可以看到,进程的创建和终止是按照程序的逻辑顺序进行的,操作系统能够有效地管理进程的生命周期。

2、进程同步与互斥在生产者消费者问题的实验中,通过信号量的控制,生产者和消费者进程能够正确地实现同步与互斥。

当缓冲区为空时,消费者进程等待;当缓冲区已满时,生产者进程等待。

操作系统实验报告

操作系统实验报告

操作系统实验报告一、实验目的本次操作系统实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理和关键机制,包括进程管理、内存管理、文件系统以及设备管理等方面。

同时,培养我们解决实际问题的能力,提高对操作系统相关知识的综合运用水平。

二、实验环境本次实验使用的操作系统为 Windows 10 和 Linux(Ubuntu 2004 LTS),实验所使用的编程工具包括 Visual Studio Code、gcc 编译器等。

三、实验内容及步骤(一)进程管理实验1、进程创建与终止在 Windows 系统中,使用 C++语言编写程序,通过调用系统 API函数创建新的进程,并观察进程的创建和终止过程。

在 Linux 系统中,使用 C 语言编写程序,通过 fork()系统调用创建子进程,并通过 wait()函数等待子进程的终止。

2、进程调度观察Windows 和Linux 系统中进程的调度策略,包括时间片轮转、优先级调度等。

通过编写程序模拟进程的执行,设置不同的优先级和执行时间,观察系统的调度效果。

(二)内存管理实验1、内存分配与释放在 Windows 系统中,使用 C++语言的 new 和 delete 操作符进行内存的动态分配和释放,并观察内存使用情况。

在 Linux 系统中,使用 C 语言的 malloc()和 free()函数进行内存的分配和释放,通过查看系统的内存使用信息来验证内存管理的效果。

2、虚拟内存管理研究 Windows 和 Linux 系统中的虚拟内存机制,包括页表、地址转换等。

通过编写程序访问虚拟内存地址,观察系统的处理方式和内存映射情况。

(三)文件系统实验1、文件操作在 Windows 和 Linux 系统中,使用编程语言对文件进行创建、读取、写入、删除等操作。

观察文件的属性、权限设置以及文件在磁盘上的存储方式。

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

研究目录结构和文件路径的表示方法。

操作系统课程实验报告

操作系统课程实验报告

操作系统课程实验报告一、实验目的操作系统是计算机系统中最为关键的软件之一,它负责管理计算机的硬件资源和软件资源,为用户提供一个良好的工作环境。

通过操作系统课程实验,旨在深入理解操作系统的基本原理和功能,提高对操作系统的实际操作能力和问题解决能力。

二、实验环境本次实验使用的操作系统为Windows 10 和Linux(Ubuntu 1804),开发工具包括 Visual Studio Code、gcc 编译器等。

三、实验内容(一)进程管理1、进程创建与终止在 Windows 系统中,使用 C++语言创建多个进程,并通过进程句柄控制进程的终止。

在 Linux 系统中,使用 fork()系统调用创建子进程,并通过 exit()函数终止进程。

2、进程同步与互斥使用信号量实现进程之间的同步与互斥。

在 Windows 中,利用CreateSemaphore()和 WaitForSingleObject()等函数进行操作;在Linux 中,通过 sem_init()、sem_wait()和 sem_post()等函数实现。

(二)内存管理1、内存分配与释放在 Windows 中,使用 HeapAlloc()和 HeapFree()函数进行动态内存的分配与释放。

在 Linux 中,使用 malloc()和 free()函数完成相同的操作。

2、内存页面置换算法实现了几种常见的内存页面置换算法,如先进先出(FIFO)算法、最近最少使用(LRU)算法等,并比较它们的性能。

(三)文件系统管理1、文件创建与读写在 Windows 和 Linux 系统中,分别使用相应的 API 和系统调用创建文件,并进行读写操作。

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

四、实验步骤(一)进程管理实验1、进程创建与终止(1)在 Windows 系统中,编写 C++程序,使用 CreateProcess()函数创建新进程,并通过 TerminateProcess()函数终止指定进程。

《操作系统》课程综合性的实验报告

《操作系统》课程综合性的实验报告

《操作系统》课程综合性的实验报告一、实验目的操作系统是计算机系统中最为关键的软件之一,它负责管理计算机的硬件资源和软件资源,为用户和应用程序提供一个良好的运行环境。

本次《操作系统》课程综合性实验的目的在于通过实际操作和实践,深入理解操作系统的工作原理和主要功能,提高对操作系统的认识和应用能力。

二、实验环境本次实验使用的操作系统为Windows 10 和Linux(Ubuntu 2004),实验所使用的计算机配置为:Intel Core i7 处理器,16GB 内存,512GB 固态硬盘。

实验所需的软件工具包括:VMware Workstation 虚拟机软件、GCC 编译器、GDB 调试器等。

三、实验内容1、进程管理进程的创建和终止进程的并发执行和同步进程调度算法的实现和比较2、内存管理内存分配和回收算法虚拟内存的实现和管理3、文件系统文件的创建、读写和删除文件目录的操作和管理文件系统的性能优化4、设备管理设备驱动程序的编写和安装设备的分配和回收I/O 控制方式的实现和比较四、实验步骤1、进程管理实验使用 C 语言编写程序,实现进程的创建和终止功能。

通过 fork()系统调用创建子进程,并在子进程中执行特定的任务,然后使用exit()系统调用终止子进程。

利用信号量机制实现进程的同步。

创建两个进程,一个进程负责生产数据,另一个进程负责消费数据,通过信号量来控制生产和消费的同步。

实现先来先服务(FCFS)、短作业优先(SJF)和时间片轮转(RR)三种进程调度算法,并对不同算法的性能进行比较。

通过模拟多个进程的到达时间、服务时间等参数,计算每种算法下的平均周转时间和平均等待时间。

2、内存管理实验实现首次适应(First Fit)、最佳适应(Best Fit)和最坏适应(Worst Fit)三种内存分配算法。

编写程序模拟内存的分配和回收过程,观察不同算法在内存利用率和分配效率方面的表现。

利用分页机制实现虚拟内存。

操作系统实验报告实验3_1

操作系统实验报告实验3_1

操作系统实验报告实验3_1一、实验目的本次实验的主要目的是深入理解操作系统中进程管理的相关概念和原理,通过实际操作和观察,掌握进程的创建、调度、同步与互斥等关键机制,提高对操作系统内核工作原理的认知和实践能力。

二、实验环境本次实验在装有 Windows 10 操作系统的计算机上进行,使用了Visual Studio 2019 作为开发工具,编程语言为 C++。

三、实验内容与步骤(一)进程创建1、编写一个简单的 C++程序,使用系统调用创建一个新的进程。

2、在父进程和子进程中分别输出不同的信息,以区分它们的执行逻辑。

```cppinclude <iostream>include <windowsh>int main(){DWORD pid;HANDLE hProcess = CreateProcess(NULL, "childexe", NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pid);if (hProcess!= NULL) {std::cout <<"Parent process: Created child process with PID "<< pid << std::endl;WaitForSingleObject(hProcess, INFINITE);CloseHandle(hProcess);} else {std::cerr <<"Failed to create child process" << std::endl;return 1;}return 0;}```(二)进程调度1、设计一个多进程并发执行的程序,通过设置不同的优先级,观察操作系统对进程的调度情况。

2、记录每个进程的执行时间和等待时间,分析调度算法的效果。

```cppinclude <iostream>include <windowsh>DWORD WINAPI ProcessFunction(LPVOID lpParam) {int priority =(int)lpParam;DWORD start = GetTickCount();std::cout <<"Process with priority "<< priority <<"started" << std::endl;for (int i = 0; i < 100000000; i++){//执行一些计算操作}DWORD end = GetTickCount();DWORD executionTime = end start;std::cout <<"Process with priority "<< priority <<" ended Execution time: "<< executionTime <<" ms" << std::endl;return 0;}int main(){HANDLE hThread1, hThread2;int priority1 = 1, priority2 = 2;hThread1 = CreateThread(NULL, 0, ProcessFunction, &priority1, 0, NULL);hThread2 = CreateThread(NULL, 0, ProcessFunction, &priority2, 0, NULL);if (hThread1!= NULL && hThread2!= NULL) {SetThreadPriority(hThread1, THREAD_PRIORITY_LOWEST);SetThreadPriority(hThread2, THREAD_PRIORITY_NORMAL);WaitForSingleObject(hThread1, INFINITE);WaitForSingleObject(hThread2, INFINITE);CloseHandle(hThread1);CloseHandle(hThread2);} else {std::cerr <<"Failed to create threads" << std::endl;return 1;}return 0;}```(三)进程同步与互斥1、实现一个生产者消费者问题的程序,使用信号量来实现进程之间的同步与互斥。

  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.源程序核心代码赫青讲軒枫忧皆:载住一・甯需举讦时可浦,圮迅竹进H哺扎到就箱貼列进用.完我、撤場-僉曲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).getLength(),i,5);}for(int j = handupList.size(); j < 15; j++)jt4.setValueAt(handupList.get(i).getPriority(),i,3);精选文档jt4.setValueAt(handupList.get(i).getStart(),i,4);{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){{putOutMemory(runningList,0);}runningList.get(0).setTime(runningList.get(0).getTime()-1);精选文档if(runningList.get(0).getTime()==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)可编辑-------議is H旗 -----------三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三三二pub-icc-ass MyRunnab-e 二mp-emenfsRunnab-epub=c voidrun()whi-e(=rue)PManageo八Thread.s-eepuooor-------議is H旗 -----------cafchunCDITUPCDdExceptonex)G-------------俞 型 =sf甘 言>対BM三三三三三三三三三三三三三三三三三三三三三三三三三三二pub=c inf gemirsfw(AITayLisADaQrv-isuif (=s !-*s N-e ()v o infminHo八for(inf iHr A--eif(=s!-*gef(min).gefpriorify() V=s!-*gef(i).gefpriorify()) minHr}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).setIsIn(1);runningList.get(0).setStart(unAssignList.get(i).getBase());精选文档if(unAssignList.get(i).getLimit()runningList.get(0).getLength()){update1(unAssignList,i);}else{unAssignList.get(i).setBase(unAssignList.get(i).getBase()+runningList.get(0).get Length());unAssignList.get(i).setLimit(unAssignList.get(i).getLimit()-runningList.get(0).get Length());}break;}}}}if(readyList.size()>0){for(int j = 0; j < readyList.size(); j++){unAssignList.get(i).setLimit(unAssignList.get(i).getLimit()-readyList.get(j).getLeif(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( ngth()); >=j).getLe}}}}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////public void putOutMemory(ArrayList<Data> list, int num) {list.get(num).setIsIn(0);boolean flag1 = false;boolean flag2 = false;ngth());}break;移除内精选文档unAssignList.get(i).setLimit(list.get(num).getLength()+unAssignList.get(i).getLifor(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).getLi mit());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){mit());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()){}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++)i++;{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, value,int index, boolean isSelected, boolean cellHasFocus){super.getListCellRendererComponent(list, value, isSelected,cellHasFocus);setBackground(Color.gray);for(int i = 0; i < unAssignList.size(); i++){for(int j = unAssignList.get(i).getBase() ; unAssignList.get(i).getLimit()+unAssignList.get(i).getBase(); j++){if(index == j) Object index,{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);///////////////////////// 调整waitingList sList.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));}//////////////////////////////////// 加入runningLIst if(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();}}。

相关文档
最新文档