东北大学 操作系统实验四报告

合集下载

操作系统实验实验报告

操作系统实验实验报告

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

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

二、实验环境本次实验使用的操作系统为 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实验报告

东北大学linux实验报告东北大学Linux实验报告引言:在当今信息技术高速发展的时代,计算机科学与技术已经成为了各个领域不可或缺的一部分。

作为计算机领域的重要组成部分,操作系统在实际应用中起着至关重要的作用。

Linux作为一种开源的操作系统,具有稳定性、安全性和灵活性等优势,因此在学术界和工业界均得到了广泛的应用和研究。

本文将对东北大学Linux实验进行总结和分析,以期对Linux操作系统有更深入的了解。

一、实验背景东北大学开设的Linux实验课程旨在帮助学生掌握Linux操作系统的基本原理和应用技巧。

通过实验,学生能够了解Linux的启动过程、文件系统管理、用户权限管理、网络配置等关键概念和操作。

实验采用了虚拟机技术,使得学生可以在实验室或家中的个人电脑上进行实验,提高了实验的灵活性和便捷性。

二、实验内容1. Linux的安装与启动在本实验中,我们首先需要在虚拟机中安装Linux操作系统。

通过选择适当的Linux发行版和版本,进行分区、格式化、安装等步骤,最终完成Linux的安装。

安装完成后,我们需要了解Linux的启动过程,包括BIOS、MBR、GRUB等关键环节。

2. 文件系统管理Linux操作系统以文件为中心,因此文件系统管理是Linux实验的重要内容之一。

通过实验,我们学会了使用命令行和图形界面两种方式来管理文件和目录,包括创建、删除、复制、移动、重命名等操作。

此外,还学习了文件权限和所有权的概念,掌握了chmod、chown等命令的使用方法。

3. 用户权限管理在Linux系统中,用户权限管理是非常重要的一部分。

通过实验,我们学会了创建用户、设置密码、分配权限等操作。

同时,还了解了Linux的用户组概念,学习了添加用户到用户组、设置用户组权限等操作。

4. 网络配置网络配置是Linux实验中的另一个重要内容。

通过实验,我们了解了网络接口的配置和管理,包括IP地址、子网掩码、网关等参数的设置。

《操作系统》实验报告

《操作系统》实验报告

《操作系统》实验报告一、实验目的操作系统是计算机系统中最为关键的组成部分之一,本次实验的主要目的是深入理解操作系统的基本原理和功能,通过实际操作和观察,熟悉操作系统的核心概念,包括进程管理、内存管理、文件系统和设备管理等,提高对操作系统的实际应用能力和问题解决能力。

二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、进程管理实验进程是操作系统中最基本的执行单元。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。

二、实验环境本次实验在计算机实验室进行,使用的操作系统为 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)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。

东北大学操作系统实验报告4-2017

东北大学操作系统实验报告4-2017

东北⼤学操作系统实验报告4-2017实验四进程的管道通信⼀、实验⽬的1、加深对进程概念的理解,明确进程和程序的区别。

2、学习进程创建的过程,进⼀步认识进程并发执⾏的实质。

3、分析进程争⽤资源的现象,学习解决进程互斥的⽅法。

4、学习解决进程同步的⽅法。

5、掌握Linux系统中进程间通过管道通信的具体实现⼆、实验内容使⽤系统调⽤pipe()建⽴⼀条管道,系统调⽤fork()分别创建两个⼦进程,它们分别向管道写⼀句话,如:Child process1 is sending a message!Child process2 is sending a message!⽗进程分别从管道读出来⾃两个⼦进程的信息,显⽰在屏幕上注:实际要求最好创建两个以上⼦进程,但不需要太多三、实验要求1、这是⼀个设计型实验,要求⾃⾏、独⽴编制程序。

2、两个⼦进程要并发执⾏。

3、实现管道的互斥使⽤。

当⼀个⼦进程正在对管道进⾏写操作时,另⼀个欲写⼊管道的⼦进程必须等待。

使⽤系统调⽤lockf(fd[1],1,0)实现对管道的加锁操作,⽤lockf(fd[1],0,0)解除对管道的锁定。

4、实现⽗⼦进程的同步,当⽗进程试图从⼀空管道中读取数据时,便进⼊等待状态,直到⼦进程将数据写⼊管道返回后,才将其唤醒。

四、程序流程图⽗进程⼦进程五、程序代码及注释#include#include//写管程⽤到的那些函数⽤到的头⽂件#include#include//wait⽤到这个int main(){int fd[2];pipe(fd); //⽗进程创建管道char outpipe[50],inpipe[50]; //存放字符串int pid1,pid2,pid3; //存放返回值while((pid1 = fork()) == -1); //创建不成功就跳不出来了if(pid1 == 0) //⼦进程1{sleep(1); //sleep函数可以决定⼦进程的顺序,等的时间长的话进⼊就晚,输出也就晚lockf(fd[1], 1, 0); //对管道写⼊端⼝加锁sprintf(outpipe,"\n child process 1 is sending message !\n");write(fd[1], outpipe, 50); //把字符串内容写⼊管道写⼊⼝lockf(fd[1], 0, 0); //对管道写⼊⼝解锁exit(0);}else//⽗进程{while((pid2 = fork()) == -1);if(pid2 == 0) //⼦进程2{sleep(2);lockf(fd[1], 1, 0);sprintf(outpipe,"\n child process 2 is sending message !\n");write(fd[1], outpipe, 50);lockf(fd[1], 0, 0);exit(0);}else//⽗进程{while((pid3 = fork()) == -1);if(pid3 == 0) //⼦进程3{sleep(3);lockf(fd[1], 1, 0);sprintf(outpipe,"\n child process 3 is sending message !\n");write(fd[1], outpipe, 50);lockf(fd[1], 0, 0);exit(0);}else//⽗进程{wait(0); //阻塞,等待⼦进程read(fd[0], inpipe, 50); //从管道读出⼝读出信息放到数组printf("%s\n",inpipe);wait(0);read(fd[0], inpipe, 50);printf("%s\n",inpipe);wait(0);read(fd[0], inpipe, 50);printf("%s\n",inpipe); //三个⼦进程,要输出三次exit(0);}}}}六、运⾏结果及说明因为加了锁,不会出现⼦进程同时往管道⾥写的情况,所以,⼦进程互斥地往管道⾥写,⽗进程从管道⾥读并输出,就显⽰成了如上图模样注:⼀个之前不明⽩的流程由fork创建的新进程被称为⼦进程(child process)。

操作系统课程实验报告

操作系统课程实验报告

操作系统课程实验报告一、实验目的操作系统是计算机系统中最核心的软件之一,它负责管理计算机的硬件资源和软件资源,为用户提供一个方便、高效、安全的工作环境。

本实验的目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握操作系统的常用命令和操作方法,提高解决实际问题的能力。

二、实验环境操作系统:Windows 10开发工具:Visual Studio Code三、实验内容1、进程管理观察进程的创建、终止和状态转换。

使用任务管理器查看系统中的进程信息,包括进程 ID、CPU 使用率、内存占用等。

通过编程实现创建和终止进程的功能。

2、内存管理了解内存的分配和回收机制。

使用 Windows 系统提供的性能监视器查看内存的使用情况。

编程实现简单的内存分配和释放算法。

3、文件系统管理熟悉文件和目录的操作,如创建、删除、复制、移动等。

研究文件的属性,如文件名、文件大小、创建时间等。

通过编程实现文件的读写操作。

4、设备管理认识设备的驱动程序和设备管理策略。

查看系统中的设备信息,如磁盘驱动器、打印机等。

模拟设备的中断处理过程。

四、实验步骤1、进程管理实验打开任务管理器,观察当前系统中正在运行的进程。

可以看到进程的名称、进程 ID、CPU 使用率、内存占用等信息。

使用 C++语言编写一个简单的程序,创建一个新的进程。

在程序中,使用`CreateProcess`函数来创建新进程,并设置进程的属性和参数。

编写另一个程序,用于终止指定的进程。

通过获取进程 ID,然后使用`TerminateProcess`函数来终止进程。

2、内存管理实验打开 Windows 性能监视器,选择“内存”选项卡,可以查看内存的使用情况,包括物理内存、虚拟内存、页面文件等的使用量和使用率。

编写一个 C 程序,使用动态内存分配函数(如`malloc`和`free`)来分配和释放内存。

在程序中,不断分配和释放一定大小的内存块,观察内存的使用情况和性能变化。

操作系统课程 实验报告(完整版)

操作系统课程 实验报告(完整版)

中南大学《操作系统》实验报告姓名:孙福星专业班级:软件 1006班学号:3902100610完成日期:2011.11.22进程调度与内存管理一、实验目的在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。

当就续进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。

实验模拟实现处理机调度,以加深了解处理机调度的工作,并体会优先级和时间片轮转调度算法的具体实施方法。

帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。

二、实验要求1、可随机输入若干进程,并按优先权排序;2、从就绪队首选进程运行:优先权-1/要求运行时间-1要求运行时间=0时,撤销该进程3、重新排序,进行下轮调度。

4、可随时增加进程;5、规定道数,设置后备队列和挂起状态。

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

被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂入就绪队列。

6、每次调度后,显示各进程状态。

7、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表;表目内容:起址、长度、状态(未分/空表目)8、结合以上实验,PCB增加为:{PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB指针}9、采用最先适应算法分配主存空间;10、进程完成后,回收主存,并与相邻空闲分区合并。

11、采用图形界面;三、实验内容选择一个调度算法,实现处理机调度。

1、设计一个按优先权调度算法实现处理机调度的程序;2、设计按时间片轮转实现处理机调度的程序。

3、主存储器空间的分配和回收。

在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。

四、实验原理该模拟系统采用java语言实现,要实现的功能有新建进程、进程调度、挂起进程、解挂进程、删除进程,道数和时间片大小可以由用户自己调整,有两种调度策略:按优先权调度和按时间片轮转调度。

每个进程可能有5种状态:新建(new)、就绪(ready)、运行(running)、阻塞(waiting)、挂起(suspend)。

操作系统实验报告

操作系统实验报告
(2)a. Linux/UNIX的进程和CPU管理类命令:(8个)
命令名
功能
Ps
显示进程状态
Pstree
显示进程树(display a tree of processes)
Kill
给进程发信号
Killhall
按名给进程发信号(kill processes by name)
Skill,snice
报告进程状态(report process status)
(set and get scheduling algorithm/parameters)
sched_rr_get_interval
查看指定进程的SCHED_RR值(get the SCHED_RR interval for the named process)
f. Linux/UNIX进程管理类系统调用(4):与进程跟踪/进程运行时间有关的系统调用(2个)
设置静态优先级范围(get static priority range)
sched_setparam,sched_getparam
设置/查看调度参数
(set and get scheduling parameters)
sched_setscheduler,sched_getscheduler
设置/查看调度算法和参数
7,进程状态START。
8,队列指针NEXT,用来将PCB排成队列。
(3)优先数改变的原则:
1,进程在就绪队列中呆一个时间片,优先数加1。
<程序3>
#include<stdio.h>
main()
{
int p1,p2,i;
while((pl = fork ( ) ) ==-1);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统实验报告
班级物联网1302班
学号
姓名
实验4 进程的管道通信
1. 实验目的
1)加深对进程概念的理解,明确进程和程序的区别。

2)进一步认识并发执行的实质。

3)分析进程争用资源的现象,学习解决进程互斥的方法。

4)学习解决进程同步的方法。

5)了解Linux系统中进程通信的基本原理。

进程是操作系统中最重要的概念,贯穿始终,也是学习现代操作系统的关键。

通过本次实验,要求理解进程的实质和进程管理的机制。

在Linux系统下实现进程从创建到终止的全过程,从中体会进程的创建过程、父进程和子进程之间的关系、进程状态的变化、进程之间的互斥、同步机制、进程调度的原理和以管道为代表的进程间的通信方式的实现。

2. 内容及要求:
这是一个设计型实验,要求自行编制程序。

使用系统调用pipe()建立一条管道,两个子进程分别向管道写一句话:
Child process1 is sending a message!
Child process2 is sending a message!
父进程从管道读出来自两个子进程的信息,显示在屏幕上。

要求:
1)父进程先接收子进程1发来的消息,然后再接收子进程2发来的消息。

2)实现管道的互斥使用,当一个子进程正在对管道进行写操作时,另一子进程必须等待。

使用系统调用lockf(fd[1],1,0)实现对管道的加锁操作,用lockf(fd[1],0,0)解除对管道的锁定。

3)实现父子进程的同步,当子进程把数据写入管道后,便去睡眠等待;当父进程试图从一空管道中读取数据时,也应等待,直到子进程将数据写入管道后,才将其唤醒。

3.相关的系统调用
1) fork() 用于创一个子进程。

格式:int fork();
返回值:在子进程中返回0;在父进程中返回所创建的子进程的ID值;当返回-1时,创建失败。

2) wait() 常用来控制父进程与子进程的同步。

在父进程中调用wait(),则父进程被阻塞,进入等待队列,等待子进程结束。

当子进程结束时,父进程从wait()返回继续执行原来的程序。

返回值:大于0时,为子进程的ID值;等于-1时,调用失败。

3) exit() 是进程结束时最常调用的。

格式:void exit( int status); 其中,status为进程结束状态。

4) pipe() 用于创建一个管道
格式:pipe(int fd);
其中fd是一个由两个数组元素fd[0]和fd[1]组成的整型数组,fd[0]是管道的读端口,用于从管道读出数据,fd[1] 是管道的写端口,用于向管道写入数据。

返回值:0 调用成功;-1 调用失败。

5) sleep() 调用进程睡眠若干时间,之后唤醒。

格式:sleep(int t); 其中t为睡眠时间。

6) lockf() 用于对互斥资源加锁和解锁。

在本实验中,该调用的格式为:lockf(fd[1],1,0);/* 表示对管道的写入端口加锁。

lockf(fd[1],0,0);/* 表示对管道的写入端口解锁。

7) write(fd[1],String,Length) 将字符串String的内容写入管道的写入口。

8) read(fd[0],String,Length) 从管道的读入口读出信息放入字符串String 中。

4.程序流程
父进程:
1)创建管道;
2)创建子进程1;
3)创建子进程2;
4)等待从管道中读出子进程1写入的数据,并显示在屏幕上;
5)等待从管道中读出子进程2写入的数据,并显示在屏幕上;
6)退出。

子进程:
1)将管道的写入口加锁;
2)将信息“Child process n is sending message!”输入到变量OutPipe中,n=1,2;
3)将OutPipe中信息写入管道;
4)睡眠等待;
5)将管道的写入口解锁;
6)退出。

5.预习报告要求:
1)题目,目的,要求
2)初步的程序流程图
3)初步的程序源代码、文档注释及必要的文字说明
4)预期的程序运行结果
6.实验报告要求:
1)题目,目的,内容,要求
2)程序流程图
3)程序源代码、文档注释及文字说明
4)运行结果及其说明
5)回答以下问题:
①指出父进程与两个子进程并发执行的顺序,并说明原因。

②若不对管道加以互斥控制,会有什么后果?
③说明你是如何实现父子进程之间的同步的。

7.流程图
开始
初始化
创建管道
创建子进程1创建子进程2创建子进程3
锁定管道写入端
fd[1]锁定管道写入端
fd[1]
锁定管道写入端
fd[1]
向写入端写入数据向写入端写入数据向写入端写入数据
解除写入端fd[1]锁
定解除写入端fd[1]锁

解除写入端fd[1]锁

从管道读入端读出
消息
依次终止子进程
1,2,3
结束
等待父进程从管道读取消息等待父进程从管道
读取消息
等待父进程从管道
读取消息
8.源程序
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <error.h>
#include <wait.h>
#include <unistd.h>
int main()
{
pid_t pid1,pid2,pid3; int fd[2];
char buf[100];
pipe(fd);
pid1=fork();
if(pid1 == 0)
{
pid2=fork(); if(pid2 == 0) {
pid3 = fork();
if(pid3 == 0)
{
lockf(1,1,0);
write(fd[1],"come from process3\n",50);
//cout<<"process3"<<endl;
lockf(0,1,0);
exit(0);
}
else
{
int status;
wait(&status);
read(fd[0],buf,100);
printf("%s",buf);
write(fd[1],"come from process2\n",50);
}
exit(0);
}
else
{
int status;
wait(&status);
read(fd[0],buf,100);
printf("%s",buf);
write(fd[1],"come from process1\n",50); exit(0);
}
}
else
{
int status;
wait(&status);
read(fd[0],buf,100);
printf("%s",buf);
}
return 0;
}
八.程序运行结果。

相关文档
最新文档