操作系统原理实验二
实验报告二主存空间的分配和回收

if(strcmp(PName,"OS")==0)
{ printf("ERROR!");
return;
}
while((strcmp(temp->proID,PName)!=0||temp->flag==1)&&temp)
temp=temp->next;
四、程序中使用的数据结构及符号说明
结构1:
typedef struct freeTable
{
char proID[6];
int startAddr; /*空闲区起始地址*/
int length; /*空闲区长度,单位为字节*/
int flag; /*空闲区表登记栏标志,用"0"表示空表项,用"1"表示未分配*/
freeNode=freeNode->next;
}
getchar();
break;
default:printf("没有该选项\n");
}/*case*/
}/*while*/
}/*main()*/
六、运行调试结果
初始界面:
分配主存,五个作业名:P1、P2、P3、P4、P5
显示主存使用情况:
回收主存P2:
if(front->flag==1&&rear->flag==1)
/* 上邻空闲区,下邻空闲区,三项合并*/
{
front->length=front->length+rear->length+temp->length;
操作系统实验二实验报告

操作系统实验二实验报告一、实验目的本次操作系统实验二的主要目的是深入理解和掌握进程管理的相关概念和技术,包括进程的创建、执行、同步和通信。
通过实际编程和实验操作,提高对操作系统原理的认识,培养解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 Windows 10,编程环境为 Visual Studio 2019。
三、实验内容及步骤(一)进程创建实验1、首先,创建一个新的 C++项目。
2、在项目中,使用 Windows API 函数`CreateProcess`来创建一个新的进程。
3、为新进程指定可执行文件的路径、命令行参数、进程属性等。
4、编写代码来等待新进程的结束,并获取其退出代码。
(二)进程同步实验1、设计一个生产者消费者问题的模型。
2、使用信号量来实现生产者和消费者进程之间的同步。
3、生产者进程不断生成数据并放入共享缓冲区,当缓冲区已满时等待。
4、消费者进程从共享缓冲区中取出数据进行处理,当缓冲区为空时等待。
(三)进程通信实验1、选择使用管道来实现进程之间的通信。
2、创建一个匿名管道,父进程和子进程分别读写管道的两端。
3、父进程向管道写入数据,子进程从管道读取数据并进行处理。
四、实验结果及分析(一)进程创建实验结果成功创建了新的进程,并能够获取到其退出代码。
通过观察进程的创建和执行过程,加深了对进程概念的理解。
(二)进程同步实验结果通过使用信号量,生产者和消费者进程能够正确地进行同步,避免了缓冲区的溢出和数据的丢失。
分析结果表明,信号量机制有效地解决了进程之间的资源竞争和协调问题。
(三)进程通信实验结果通过管道实现了父进程和子进程之间的数据通信。
数据能够准确地在进程之间传递,验证了管道通信的有效性。
五、遇到的问题及解决方法(一)在进程创建实验中,遇到了参数设置不正确导致进程创建失败的问题。
通过仔细查阅文档和调试,最终正确设置了参数,成功创建了进程。
(二)在进程同步实验中,出现了信号量使用不当导致死锁的情况。
操作系统原理实验报告

《操作系统原理》实验报告班级:姓名:学号:指导老师:目录:实验题目:实验一线程创建与撤销 (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结构,该结构决定了返回的句柄是否可被子进程继承。
操作系统lab2实验报告

操作系统lab2实验报告实验目的:本实验的目的是通过设计和实现一个简单的操作系统内核,加深对操作系统基本概念和原理的理解。
具体实验内容包括进程管理、内存管理和文件系统的设计与实现。
实验环境:1.操作系统:Linux2.编程语言:C语言一、实验背景1.1 操作系统简介操作系统是计算机系统中的一个重要组成部分,负责管理和控制计算机的各种资源,提供用户和应用程序的接口,以及协调和调度各种任务的执行。
1.2 实验目标本实验的主要目标是设计和实现一个简单的操作系统内核,包括进程管理、内存管理和文件系统等功能。
二、实验内容2.1 进程管理①进程创建描述进程创建的过程和相关数据结构,包括创建新进程的系统调用、进程控制块等。
②进程调度描述进程调度的算法和实现方式,包括进程调度队列、调度算法等。
③进程同步与通信描述进程同步和通信的机制和方法,包括信号量、互斥锁、条件变量等。
2.2 内存管理①内存分配描述内存分配的算法和实现方式,包括连续内存分配、非连续内存分配等。
②页面置换描述页面置换的算法和实现方式,包括最优页面置换算法、先进先出页面置换算法等。
2.3 文件系统①文件操作描述文件操作的系统调用和相关数据结构,包括文件打开、读写、关闭等。
②文件系统结构描述文件系统的组织结构和实现方式,包括超级块、索引节点、块位图等。
三、实验步骤3.1 环境搭建搭建实验环境,包括安装Linux操作系统、编译器等。
3.2 进程管理实现根据设计要求,实现进程创建、调度、同步与通信等功能。
3.3 内存管理实现根据设计要求,实现内存分配、页面置换等功能。
3.4 文件系统实现根据设计要求,实现文件操作和文件系统结构。
3.5 测试与调试编写测试用例,对实现的操作系统内核进行测试和调试,并记录实验结果。
四、实验结果分析分析测试结果,评估实验过程中遇到的问题和解决方法,总结操作系统内核的性能和功能特点。
五、实验总结对实验过程中的收获和经验进行总结,提出改进和优化的建议。
操作系统原理

《操作系统原理》2007年目录实验一安装Windows 2000 Professional (1)实验二操作系统的计算环境 (5)实验三 Windows 2000 系统管理 (7)实验四Windows“任务管理器”的进程管理 (11)实验五 Windows 2000编程 (15)实验六 Windows 2000进程的“一生” (21)实验七提高Windows 2000内存性能 (30)实验八 Windows鼠标处理 (35)实验九优化Windows 2000磁盘子系统 (39)实验一安装Windows 2000 Professional(实验估计时间:120分钟)背景知识计算机执行的任何程序都必须首先读入内存,CPU通过内存来访问程序。
而所谓安装操作系统,实际上是把存放在光盘上的操作系统执行代码存入硬盘的过程。
因为硬盘是PC 机的固定外部存储设备,从硬盘上加载程序到内存很方便。
另外,操作系统中的文件系统主要是靠硬盘提供物理支持。
因此,安装操作系统到硬盘,实际上有两方面的作用:·在硬盘上建立文件系统;·把操作系统的全部内容事先存放在硬盘上以备使用。
当使用计算机时,从硬盘上加载操作系统到内存,然后将机器控制权转给操作系统内核来执行。
在本实验中,我们通过Windows 2000 Professional的安装,来了解Windows操作系统的安装及配置,包括安装前的准备工作、驱动程序的配置以及系统的设定等内容。
可以认为Windows 2000是Windows NT 4.0的后续,它一共有四个版本,即Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server和Windows 2000 Datacenter Server,它们的差别在于功能以及支持CPU、RAM数量上的不同。
见表1-1。
由于用户计算机环境的不同,需要的安装方式和内容也会有所不同。
北理工操作系统实验二读者写者问题

本科实验报告实验名称:操作系统原理实验(读者写者问题)课程名称:操作系统原理实验时间:2015.10.30 任课教师:王耀威实验地点:10#102实验教师:苏京霞实验类型: 原理验证□综合设计□自主创新学生姓名:孙嘉明学号/班级:1120121474/05611202 组号:学院:信息与电子学院同组搭档:专业:信息对抗技术成绩:实验二:读者写者问题一、实验目的1.通过编写和调试程序以加深对进程、线程管理方案的理解;2.熟悉Windows多线程程序设计方法;二、实验要求在Windows环境下,创建一个控制台进程,此进程包含n个线程。
用这n个线程来表示n个读者或写者。
每个线程按相应测试数据文件(后面介绍)的要求进行读写操作。
用信号量机制分别实现读者优先和写者优先问题。
读者-写者问题的读写操作限制(包括读者优先和写者优先)1)写-写互斥:不能有两个写者同时进行写操作2)读-写互斥:不能同时有一个线程在读,而另一个线程在写。
3)读-读允许:可以有一个或多个读者在读。
读者优先的附加限制:如果读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。
运行结果显示要求:要求在每个线程创建、发出读写申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。
测试数据文件包括 n行测试数据,分别描述创建的n个线程是读者还是写者,以及读写操作的开始时间和持续时间。
每行测试数据包括四个字段,每个字段间用空格分隔。
第1个字段为正整数,表示线程的序号。
第2个字段表示线程的角色,R表示读者,W表示写者。
第3个字段为一个正数,表示读写开始时间:线程创建后,延迟相应时间(单位为秒)后发出对共享资源的读写申请。
第4个字段为一个正数,表示读写操作的延迟时间。
当线程读写申请成功后,开始对共享资源进行读写操作,该操作持续相应时间后结束,释放该资源。
下面是一个测试数据文件的例子(在记事本手工录入数据):1 R 3 52 W 4 53 R 5 24 R 6 55 W 5.1 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. 完成实验后,整理实验报告,包括实验目的、实验环境、实验内容、实验步骤和实验结果等。
哈工大威海计算机操作系统原理实验报告2

计算机操作系统原理
实验报告
专业:1104202
学号:110420212
姓名:李敖
哈尔滨工业大学(威海)
实验二进程及其资源管理
一、实验目的
1.理解资源共享与互斥特性以及操作系统管理资源的基本方法。
2.学会使用高级语言进行多线程编程的方法。
3.掌握利用VC++或Java线程库实现一个管理器,用来实现操作系统对进程及其资源的管理功能。
4.通过该实验,学生可在源代码级完成进程及其资源管理方案的分析、功能设计、编程实现,控制进程间的同步、互斥关系。
二、实验要求
1.知识基础:学生应在完成对进程和线程、调度、死锁等章节的学习后进行。
2.开发环境与工具:
硬件平台——个人计算机。
软件平台——Windows操作系统,根据需要,任选安装VC++语言、java 语言或C语言开发环境。
三、实验内容
1.开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结构的初始化。
2.开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种资源的目的。
四、程序流程图
1.进程初始化
2.优先级策略调度
五、实验结果
创建进程1
创建进程2
查看正在运行的进程
替换进程
删除进程
进程调度进程1
进程2
进程3
FCFS
HPF
六、结果分析
有上述程序运行结果可知,此次试验已经基本达到了实验要求,能够实现进程的创建、查看、替换、删除操作以及进程的调度。
不过,在进程的创建中,要求每个资源要用到3个资源,对于再多的资源就无法保证了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<< ", % in Kernel mode:" <<dwPctKernel<<endl;
//消除句柄
::CloseHandle(hProcess);
}
//转向下一个进程
bMore= ::Process32Next(hSnapshot,&pe);
break;
case NORMALPRIORITYCLASS:
std::coutg<<”Normal”,
break;
case IDLEPRIORITYCLASS;
std::cout<<”Idle”;
break;
case REALTIMEPRIORITYCLASS:
std::cout<<”Realtime”;
PROCESS_QUERY_INFORMATION, //指明要得到信息
FALSE, //不必继承这一句柄
pe.th32ProcessID); //要打开的过程
if(hProcess!= NULL)
{
//找出进程的时间
FILETIMEftCreation,ftKernelMode,ftUserMode,ftExit;
程序源代码如下:
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
//确定自己的优先权的简单应用程序
void main()
﹛
//从当前过程中提取句柄
HANDLEhProcessThis=::GetCurrentProcess();
//请求内核提供该过程所属的优先权类
步骤四:将下面的程序源代码输入。
步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。
步骤六:依次输入命令为:
cd\
d://这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方
CL 3.cpp//对这是源程序进行编译
步骤七:若没有错误,则会自动生成3.exe和3.obj文件,双击”3.exe”,
break;
default:
std::cout<<”<unknown>”;
break;
﹜
Std::cout<<std::endl;
Getchar();
﹜
入WindowsXP。
步骤二:Microsoft Visual Studio C++6.0。
步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++SourceFile,选择路径(如D:\3.cpp),并命名为3.cpp。
“提示”,//消息框的标题
MBOK); //其中只有一个OK按钮
//返回0以便通知系统不进入消息循环
return 0;
}
6、扩展实验
1、获得和使用进程的句柄
步骤一:进入WindowsXP。
步骤二:Microsoft Visual Studio C++6.0。
步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++SourceFile,选择路径(如:D:\2.cpp。
DWORDdwPctKernel= ::GetKernelModePercentage(
ftKernelMode, //在内核模式上消耗的时间
ftUserMode); //在用户模式下消耗的时间
//向用户显示进程的某些信息
cout<< "process ID:" << pe.th32ProcessID
# pragma comment(lib,”user32.lib”)
intAPIENTRYWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
∷MessageBox(
NULL, //没有父窗口
“hello windows XP”, //消息框中的文本显示hello windows XP
步骤四:将下面的程序源代码输入。
步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。
步骤六:依次输入命令为:
cd\
d://这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方
CL 2.cpp//对这是源程序进行编译
步骤七:若没有错误,则会自动生成2.exe和2.obj文件,双击2.exe,
//初始化过程入口
PROCESSENTRY32pe;
::ZeroMemory(&pe,sizeof(pe));
pe.dwSize=sizeof(pe) ;
BOOLbMore= ::Process32First(hSnapshot,&pe);
while(bMore)
{
//打开用于读取的过程
HANDLEhProcess= ::OpenProcess(
::GetProcessTimes(
hProcess, //所感兴趣的进程
&ftCreation, //进程的启动时间
&ftExit, //结束时间(如果有的话)
&ftKernelMode, //在内核模式下消耗的时间
&ftUserMode); //在用户模式下消耗的时间
//计算内核模式消耗的时间百分比
const FILETIME&ftUser) {
//将FILETIME结构转化为64位整数
ULONGLONGqwKernel= (((ULONGLONG)ftKernel.dwHighDateTime)
<<32) +ftKernel.dwLowDateTime;
ULONGLONGqwUser= (((ULONGLONG)ftUser.dwHighDateTime)
步骤四:单击“性能”标签,在所示的“性能”选项卡中可以看到CPU的使用情况、内存的使用情况。
2)通过命令观察进程情况、
步骤一:单击“开始”→“运行”选项,输入cmd“命令提示符”下。
步骤二:输入tasklist。
步骤三:继续输入tasklist/?来寻找帮助,里面有更详细的解释。
3)通过命令来关闭一个进程
}
//以下是将当前运行过程名和消耗在内模式下的时间百分数都显示出来的应用程序
void main()
{
//对当前系统中运行的过程拍取“快照”
HANDLEhSnapshot= ::CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS, //提取当前过程
0); //如果是当前过程,就将其忽略
程序源代码如下:
#include <windows.h>
#include < tlhelp32.h >
#include <iostream.h>
#include <stdio.h>
//当在用户模式机内模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计算的帮助方法
DWORDGetKernelModePercentage(const FILETIME&ftKernel,
实验2:Windows基本进程管理
1、实验目的
通过观察任务管理器,来观察各个进程的动态信息。
2、实验工具
(1)一台WindowsXP操作系统的计算机。
(2)计算机装有Microsoft Visual Studio C++6.0专业版或企业版。
3、预备知识
·任务管理器,了解用户计算机上正在运行的程序和进程的相关信息。
}
getchar();
}
7、实验后撰写实验报告。
步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++SourceFile,选择路径(如D:\1.cpp),并命名为1.cpp。
步骤四:将下面的程序源代码输入。
步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。
步骤六:依次输入命令为
cd\
d://这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方
DWORDdwPriority=::GetPriorityClass(hProcessThis);
//发出消息,为用户描述该类
std::cout〈〈“current process priority:”;
switch(dwPriority)
﹛
case HIGHPRIORITYCLASS:
std::cont<<”High”;
CL 1.cpp//对这是源程序进行编程
步骤七:若没有错误,则会自动生成1.exe和1.obj文件,双击“1.exe”,即可看到结果。
源代码如下:
# include <windows.h>
# include <stdio.h>
//告诉连接器与包括MessageBoxAPI函数的user32库进行连接
步骤一:单击“开始”→“运行”选项,输入cmd“命令提示符”下。
步骤二:输入tasklist后回车执行。
步骤三:继续输入taskkill/PID 208/T
5、实验编程
进行一个简单的Windows的图形用户接口(GUI)编程。
步骤一:进入WindowsXP。