操作系统原理实验二
- 格式:doc
- 大小:48.50 KB
- 文档页数:5
操作系统实验二实验报告一、实验目的本次操作系统实验二的主要目的是深入理解和掌握进程管理的相关概念和技术,包括进程的创建、执行、同步和通信。
通过实际编程和实验操作,提高对操作系统原理的认识,培养解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 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实验报告实验目的:本实验的目的是通过设计和实现一个简单的操作系统内核,加深对操作系统基本概念和原理的理解。
具体实验内容包括进程管理、内存管理和文件系统的设计与实现。
实验环境: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. 完成实验后,整理实验报告,包括实验目的、实验环境、实验内容、实验步骤和实验结果等。
计算机操作系统原理
实验报告
专业: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个资源,对于再多的资源就无法保证了。
进程创建实验报告计科1301 邓豪学号:1309050158一、实验环境:Win7 64位操作系统(4g内存)VMware Workstation 10虚拟机虚拟机系统:ubuntu-14.04.1二、实验内容:(1)进程创建(2)生产者与消费者(3)读者和写者三、实验步骤:(1)进程创建:使用系统调用fork()创建一个子进程。
当此程序运行时,在系统中有一个父进程和一个子进程同步运行,在程序中分别获得父进程和子进程的进程号编写程序:编译并运行:编译上面程序,观察父进程和子进程的PID号有何关系?可以看到子进程的pid比父进程的pid大1父进程和子进程的关系是子进程是父进程的一个副本,创建子进程后,子进程会有自己的空间,然后把父进程的数据拷贝到子进程的空间里。
运行时,谁先运行是不确定的,这有系统决定如何区分父进程和子进程?父进程从fork()返回时的返回值是子进程的进程号,大于零;而子进程从fork()返回(严格来说子进程是从这里开始的)时的返回值是0。
getpid获得进程号和fork创建返回的PID号有何关系?getpid获得的进程号是当前进程的PIDfork创建返回的PID号是在父进程中返回子进程的PID,大于0扩展:父子进程的同步:编译运行结果:上一段程序中父进程执行完exit退出,再执行子进程这段程序中,父进程执行完不会exit,而是直接执行子进程,然后再依次exit 如果没有父进程中的wait(0),会出现什么现象?父进程会在打印语句结束后直接exit使用ps -aux查看子进程的状态。
如果将子进程中sleep系统调用改成系统调用pause( ),将什么结果?试实验之。
【如果一个进程休眠,而没有进程通知将导致其一直睡眠下去。
】子进程会不exit扩展:多进程运行的结果不可重现编译运行:由于三个进程共享代码区,所以相当于各自有各自的全局变量,所以为了保证结果正确,需在内存在设置一篇数据共享区用来存放共享变量。