《操作系统原理》实验报告六
操作系统原理实验报告

《操作系统原理》实验报告班级:姓名:学号:指导老师:目录:实验题目:实验一线程创建与撤销 (2)实验题目:实验二线程同步 (6)实验题目:实验三线程互斥 (11)实验题目:实验四进程通信 (17)实验题目:实验五读者-写者问题 (21)实验题目:实验六进程调度 (37)实验题目:实验七存储管理之动态链接库 (52)实验题目:实验八存储管理之内存分配 (56)实验题目:实验九存储管理之页面置换算法 (69)实验题目:实验十设备管理 (84)实验题目:实验十一文件管理之文件读写 (98)实验题目:实验一线程创建与撤销完成人:XXX报告日期:2018年3月31日一、实验内容简要描述(1)熟悉VC++、Visual Studio开发环境。
(2)使用相关函数创建和撤销线程。
(3)在一个进程中创建3个线程,名字分别为threada、threadb、threadc。
threada输出“hello world! ”。
threadb输出“My name is …”。
threadc输出“Please wait…”,然后sleep 5秒钟,接着输出“I wake up”。
二、程序设计1、设计思路该函数创建一个在调用进程的地址空间中执行的线程。
2、主要数据结构HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);VOID ExitThread(DWORD dwExitCode);VOID Sleep(DWORD dwMilliseconds);VOID Sleep(DWORD dwMilliseconds);三、实验结果1、基本数据lpThreadAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。
操作系统实验报告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、编译并运行程序,通过任务管理器观察进程的运行状态和资源占用情况。
操作系统原理实验

操作系统原理实验一、实验目的本实验旨在通过实际操作,加深对操作系统原理的理解,掌握操作系统的基本功能和调度算法。
二、实验环境1. 操作系统:Windows 102. 虚拟机软件:VirtualBox3. 实验工具:C语言编译器(如gcc)、汇编语言编译器(如nasm)、调试器(如gdb)三、实验内容1. 实验一:进程管理在这个实验中,我们将学习如何创建和管理进程。
具体步骤如下:a) 创建一个C语言程序,实现一个简单的计算器功能。
该计算器能够进行基本的加减乘除运算。
b) 使用fork()系统调用创建一个子进程,并在子进程中执行计算器程序。
c) 使用wait()系统调用等待子进程的结束,并获取子进程的退出状态。
2. 实验二:内存管理在这个实验中,我们将学习如何进行内存管理。
具体步骤如下:a) 创建一个C语言程序,模拟内存分配和释放的过程。
该程序能够动态地分配和释放内存块。
b) 使用malloc()函数分配一块内存,并将其用于存储数据。
c) 使用free()函数释放已分配的内存块。
3. 实验三:文件系统在这个实验中,我们将学习如何进行文件系统的管理。
具体步骤如下:a) 创建一个C语言程序,实现一个简单的文件系统。
该文件系统能够进行文件的创建、读取、写入和删除操作。
b) 使用open()系统调用打开一个文件,并进行读取和写入操作。
c) 使用unlink()系统调用删除一个文件。
四、实验步骤1. 安装虚拟机软件VirtualBox,并创建一个虚拟机。
2. 在虚拟机中安装操作系统Windows 10。
3. 在Windows 10中安装C语言编译器、汇编语言编译器和调试器。
4. 根据实验内容,编写相应的C语言程序并保存。
5. 在命令行中使用gcc编译C语言程序,并生成可执行文件。
6. 运行可执行文件,观察程序的执行结果。
7. 根据实验要求,进行相应的操作和测试。
8. 完成实验后,整理实验报告,包括实验目的、实验环境、实验内容、实验步骤和实验结果等。
操作系统实验报告

《操作系统》课程实验报告专业:软件工程班级:软件二班学号: 2220111350 姓名:韩培培序号: 14目录:实验一、进程的创建实验二、进程控制实验三、进程的管道通信实验四、消息通信实验五、进程调度实验六、FIFO页面调度实验七、LRU页面置换算法实验一进程的创建一.实验目的:进程的创建二.实验内容:编写一段程序,使用系统调用 FORK( )创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符:父进程显示字符“A”子进程分别显示字符“B”和“C”。
试观察记录屏幕上的显示结果,并分析原因。
三.实验代码:#include <stdio.h>Main(){ int p1,p2;While((p1=fork())==-1);If (p1==0)Putchar(ˊbˊ);else{While((p2=fork())==-1);If(p2==0)Putchar(ˊcˊ);else putchar(ˊaˊ);}}四.实验运行结果五.分析原因程序首先调用Fork()函数创建一个子进程1.当创建进程不成功,循环创建进程,直至进程创建成功。
如果Fork()返回值为0,表示当前进程是子进程1,显示字符B。
如果Fork()返回值大于0,则表示当前进程是父进程,表示当前的程序代码是父进程所要执行的。
父进程调用Fork()创建子进程2。
当创建进程不成功时,循环创建进程直至成功。
如果Fork()返回值为0,则表示当前进程是子进程2,显示字符C。
如果Fork()返回值大于0,则表示当前进程是父进程,输出字符A。
实验二:进程控制一.实验目的:进程控制二.实验内容:修改已编写的程序,将每个进程的输出由单个字符改为一个字符串,再观察程序的执行时屏幕上出现的现象,并分析原因三.实验代码:# include<stdio.h>Main(){ int p1,p2,i;While((p1=fork())== -1);If (p1 == 0)For (i=0;i<500;i++)Printf("child %d/n",i);else{While((p2 =fork()) == -1);if(p2 == 0)for (i= 0;i<500;i++)printf("son%d\n",i)elsefor(i = 0;i<500;i++)printf("daughter%d\n",i);}}四.分析原因:由于函数Printf()输出的字符串之间不会被中断,因此,字符串内部的字符顺序输出时不变。
操作系统原理实验报告

2012 软件工程(嵌入式)
学号:____________ 姓名:____________
苏州大学计算机科学与技术学院 2015 年 3 月
目录
操作系统原理实验报告
一、实验环境............................................................................................ 1
5
操作系统原理实验报告 6
操作系统原理实验报告 7
操作系统原理实验报告 8
操作系统原理实验报告
实验二、进程间的通信
实验环境:
实验环境一:Windows 平台
实验时间:
6 小时
实验目的:
初步了解 windows 环境下进程间通信的机制,掌握如何利用消息、共享内存 和剪贴板三种进程间通信机制中的任意 2 种进行通信的原理,并利用 win32API 函数编写实例程序。
[提示] 1、从 root 注册进系统,可以通过用户图形界面中的菜单创建用户组并为用
户分配注册号,也可以通过 shell 命令创建用户组,创建用户组的 shell 命令格式
2
操作系统原理实验报告
如下:
groupadd -g group_ID group_name
为用户分配注册号的 shell 命令格式如下:
usermod options login_ID
其中,任选项 options 可以为如下内容:
-c comment
表示注释信息
-d pathname
表示当前目录
-g group_ID
表示主用户组名
-G supplementary_group_ID 表示主用户组的增补组名
《操作系统原理》实验报告六课件

#define M 3 //资源种类m种
#define N 4 //进程个数n
int need[10][3];//进程还需资源矩阵
int max[10][3];//进程最大需求矩阵
int allocation[10][3];//已分配资源矩阵
int available[3]; //可用资源向量
int request[3];
while(1){
flag1 = flag2 = 0;
printf("请输入要操作的进程号:");
scanf("%d", &i);
if(i>N||i<0) {
printf("你输入的进程号不存在!");
break;
}
printf("请输入各类资源的请求数:");
scanf("%d %d %d", &request[0], &request[1], &request[2]);
puts("*0.初始化数据1.安全性算法2.银行家算法3.退出*");
puts("*******************************************************");
}
int safe()//检查安全序列
{
int i,j,k=1; // k用来结束安全序列的查找
int flag=1; // flag = 0表示当前可用资源<进程申请资源数
puts("* A B C A B C A B C A B C *");
操作系统实验报告6

西北工业大学操作系统实验报告班号:姓名:学号:实验日期: 2010.1.12 实验名称:进程调度算法的修改与验证一、实验目的分析Windows中进程调度算法,通过修改源代码,将多级反馈队列MLFQ算法修改为公平分享调度(Fair Share Scheduling)算法,观察系统效率的变化情况。
二、实验要求对多级反馈队列MLFQ算法进行修改,并编写应用程序,对修改后的算法与原算法的性能进行对比,并对实验结果给出解释。
三、实验过程及结果1)打开源代码,找到进程调度算法实现的具体位置进行修改。
分别修改:base\ntos\ps\psquery.cbase\ntos\ke\ki.h;base\ntos\ke\ki.hbase\ntos\ke\balmgr.cbase\ntos\ke\thredsup.cbase\ntos\ke\thredsup.c修改后,将原文件替换。
2)将多级反馈队列MLFQ算法修改为公平分享调度算法。
可参考老师给的文件:Fair Share Scheduler using WRK.pdf公平分享调度算法基本原理.pdf公平分享调度算法在WRK中的实现.pdf/进程管理/FairSchedulingandNativeAPI.ppt进行修改3)编译内核代码,并复制到虚拟机上启动。
4)编写一个测试程序,对算法修改前后的系统性能进行测试。
运行老师给的spawnthreads.exe,进行测试。
四、实验分析运行结果为设置4个进程,运行共100秒,编号从0到3,所含有的线程数分别为4,8,16,32个。
测试两次:对于多级反馈队列MLFQ算法,4个进程共运行98.31秒,每个进程运行分别占进程运行时间的百分比为6.86%,13.58%,26.97%,52.60%,实际运行性能与理论接近;对于公平分享调度Fair Share Scheduler算法,4个进程共运行98.55秒,每个进程运行分别占进程运行时间的百分比为28.68%,20.27%,17.28%,33.77%,实际运行性能与理论差距较大,对于算法实现的不理想。
操作系统原理_实验报告

一、实验目的1. 理解操作系统基本原理,包括进程管理、内存管理、文件系统等。
2. 掌握操作系统的基本命令和操作方法。
3. 通过实验加深对操作系统原理的理解和掌握。
二、实验环境1. 操作系统:Linux2. 编程语言:C语言3. 开发工具:Eclipse三、实验内容本次实验主要分为以下几个部分:1. 进程管理实验2. 内存管理实验3. 文件系统实验四、实验步骤及结果1. 进程管理实验实验步骤:- 使用C语言编写一个简单的进程管理程序,实现进程的创建、调度、同步和通信等功能。
- 编写代码实现进程的创建,通过调用系统调用创建新的进程。
- 实现进程的调度,采用轮转法进行进程调度。
- 实现进程同步,使用信号量实现进程的互斥和同步。
- 实现进程通信,使用管道实现进程间的通信。
实验结果:- 成功创建多个进程,并实现了进程的调度。
- 实现了进程的互斥和同步,保证了进程的正确执行。
- 实现了进程间的通信,提高了进程的效率。
2. 内存管理实验实验步骤:- 使用C语言编写一个简单的内存管理程序,实现内存的分配、释放和回收等功能。
- 实现内存的分配,采用分页存储管理方式。
- 实现内存的释放,通过调用系统调用释放已分配的内存。
- 实现内存的回收,回收未被使用的内存。
实验结果:- 成功实现了内存的分配、释放和回收。
- 内存分配效率较高,回收内存时能保证内存的连续性。
3. 文件系统实验实验步骤:- 使用C语言编写一个简单的文件系统程序,实现文件的创建、删除、读写等功能。
- 实现文件的创建,通过调用系统调用创建新的文件。
- 实现文件的删除,通过调用系统调用删除文件。
- 实现文件的读写,通过调用系统调用读取和写入文件。
实验结果:- 成功实现了文件的创建、删除、读写等功能。
- 文件读写效率较高,保证了数据的正确性。
五、实验总结通过本次实验,我对操作系统原理有了更深入的理解和掌握。
以下是我对实验的几点总结:1. 操作系统是计算机系统的核心,负责管理和控制计算机资源,提高计算机系统的效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
finish[i]=-1;
finish1[i]=-1;
}
//请在此处插入完成安全性检查算法的代码!
if(r>=4){
printf("-----找到安全序列-----\n");
for(i=0;i<N;i++)
{
if(i!=N-1)
printf("p%d->",path[i]);
else
printf("p%d\n",path[i]);
Finish [i]=False
Need<=Work
如找到,执行(3);否则,执行(4)
(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。
Work=Work+Allocation
Finish=True
GO TO 2
(4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全。
实验内容和步骤
need[i][j]=rand()%10;
max[i][j]=allocation[i][j]+need[i][j];
}
for(i=0;i<N;i++)
{
available[i]=rand()%12;
}
disp();
is_save=0;
}
voidshowMenu(){
puts("\n*****************************************************");
2015——2016学年第二学期
专业
班级
学号
姓名
日期
实
验
题 目
实验目的
1、了解掌握银行家算法;
2、学会模拟实现资源分配,同时按要求编写和调试一个系统分配资源的简单模拟程序;
3、观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生。
实验理论基础
设计要求:编制银行家算法通用程序,并检测所给状态的系统安全性。
voiddisplay(int *a,int n) //显示一维数组
{ int i;
for(i=0;i<n;i++)
printf("%3d",a[i]);
}
void disp() //显示资源列表
{ int i;
printf("Nnumber\t Max\t\t need\t\t allocation\t avalible\n");
for(i=0;i<N;i++)
{printf("p%d\t",i);//--分别显示P0,P1,P2的Max,Need,Allocation,Avalible
display(max[i],M);
printf("\t");
display(need[i],M);
printf("\t");
display(allocation[i],M);
int work[3];//可用资源向量
int finish[10],finish1[10]; //记录进程申请的资源是否能分配
int path[10]={0,1,2,3,4,5,6,7,8,9};//记录安全序列
int is_save;//是否产生安全序列
intmark[10];//记录某进程是否已分配资源
puts("*0.初始化数据1.安全性算法2.银行家算法3.退出*");
puts("*******************************************************");
}
int safe()//检查安全序列
{
int i,j,k=1; // k用来结束安全序列的查找
int flag=1; // flag = 0表示当前可用资源<进程申请资源数
#include <time.h>
#define M 3 //资源种类m种
#define N 4 //进程个数n
int need[10][3];//进程还需资源矩阵
int max[10][3];//进程最大需求矩阵
int allocation[10][3];//已分配资源矩阵
int available[3];//可用资源向量
printf("\t");
if(i==0)
display(available,M);
printf("\n");
}
}
void init(){
int i,j;
srand(time(NULL));
for(i=0;i<M;i++)
for(j=0;j<N;j++)
{
allocation[i][j]=rand()%10;
1.银行家算法:
设进程i提出请求Request[n],则银行家算法按如下规则进行判断。
(1)如果Request[n]>Need[i,n],则报错返回。
(2)如果Request[n]>Available,则进程i进入等待资源状态,返回。
(3)假设进程i的申请已获批准,于是修改系统状态:
Available=Available-Request
(5)如果预分配后,系统处于不安全状态,则提示不能满足请求。
以下提供了部分该实例的源代码,要求同学们根据理论基础部分内容分析该源代码,并将缺失的程序代码补充完整,然后调试这段程序,最终按要求给出相应的结论。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
1、本试验设计的目的是通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地Fra bibliotek生。要求如下:
(1)模拟一个银行家算法;
(2)初始化时让系统拥有一定的资源;
(3)用键盘输入的方式申请资源;
(4)如果预分配后,系统处于安全状态,则修改系统的资源分配情况;
int r=0,r1=0; //记录所需资源能被满足的进程数;
for( j = 0; j < M; j++) //初始化work
{
work[j] = available[j];
}
printf("现在进行安全性检查......\n");
for( i = 0; i < N; i++)//初始化finish[],1表示true,0表示false
}
return 1;
}
else{
Allocation=Allocation+Request
Need=Need-Request
(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。
2.安全性检查
(1)设置两个工作向量Work=Available;Finish[M]=False
(2)从进程集合中找到一个满足下述条件的进程,