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

合集下载

操作系统实验实验报告

操作系统实验实验报告

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

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

二、实验环境本次实验使用的操作系统为 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、设备管理实验设备管理是操作系统与外部设备进行交互的桥梁。

《操作系统》实验报告

《操作系统》实验报告

一、实验目的1. 理解进程的概念及其在操作系统中的作用。

2. 掌握进程的创建、调度、同步和通信机制。

3. 学习使用进程管理工具进行进程操作。

4. 提高对操作系统进程管理的理解和应用能力。

二、实验环境1. 操作系统:Windows 102. 软件环境:Visual Studio 20193. 实验工具:C++语言、进程管理工具(如Task Manager)三、实验内容1. 进程的创建与销毁2. 进程的调度策略3. 进程的同步与互斥4. 进程的通信机制四、实验步骤1. 进程的创建与销毁(1)创建进程使用C++语言编写一个简单的程序,创建一个新的进程。

程序如下:```cpp#include <iostream>#include <windows.h>int main() {// 创建进程STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si, sizeof(si));si.cb = sizeof(si);ZeroMemory(&pi, sizeof(pi));// 创建进程if (!CreateProcess(NULL, "notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {std::cout << "创建进程失败" << std::endl;return 1;}std::cout << "进程创建成功" << std::endl;// 等待进程结束WaitForSingleObject(pi.hProcess, INFINITE);// 销毁进程CloseHandle(pi.hProcess);CloseHandle(pi.hThread);return 0;}```(2)销毁进程在上面的程序中,通过调用`WaitForSingleObject(pi.hProcess, INFINITE)`函数等待进程结束,然后使用`CloseHandle(pi.hProcess)`和`CloseHandle(pi.hThread)`函数销毁进程。

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

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

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

二、实验环境本次实验在计算机实验室进行,使用的操作系统为 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)。

j计算机操作系统实验报告1

j计算机操作系统实验报告1

计算机操作系统 计算机操作系统实验报告学 姓号: 名:2080121 2080121 王佰荣 2009-122009-12-14提交日期: 成 绩:东北大学秦皇岛分校实验报告【实验编号】 实验编号】1【实验名称】 实验名称】 Linux 安装实验 实验内容 1.熟练掌握 内容】 2.掌握虚拟机的使用 掌握虚拟机的使用。

【实验内容】1.熟练掌握 Linux 系统的安装 2.掌握虚拟机的使用。

实验步骤 步骤】 【实验步骤】 一.虚拟机的使用 <1>.新建虚拟机 <1>.新建虚拟机 Vmware,单击菜单“file—new— machine” 1. 打开 Vmware,单击菜单“file—new—virtual machine”,开始创建虚拟机 虚拟机提供两种安装方式“Typical” Custom” 选择“Typical” 2. 虚拟机提供两种安装方式“Typical”和“Custom”,选择“Typical” 选择需要安装的操作系统, Linux— 3. 选择需要安装的操作系统,选择 Linux—Red Hat Linux 4. 输入虚拟机名称和保存文件夹 选择网络连接方式,选择“ networking” 5. 选择网络连接方式,选择“Use bridged networking” 6. 设定虚拟机的硬盘容量为 3G <2>.调整虚拟机的参数 <2>.调整虚拟机的参数 单击出现的“ settings” 调整虚拟机的参数. 单击出现的“Edit virtual machine settings”,调整虚拟机的参数.单击 Memory”可以调整虚拟机的内存; “Memory”可以调整虚拟机的内存;单击 internet”可以调整网卡的工作 “internet” 模式;单击“cd-rom” 文件代替光盘, 模式;单击“cd-rom”可以设置虚拟机的光驱使用 ISO 文件代替光盘,单 add” remove”按钮可以添加、删除硬件。

【免费下载】东北大学操作系统第三次实验报告

【免费下载】东北大学操作系统第三次实验报告

命中次数++
被访问次数最少的
进程退出
};
int page_no;
char flag;
struct one_frame M_Frame[frame_num];
int main()
{
int i,j,k,t,m,kk,r1,r2,p1,p2;
int temp1,temp2,temp3;
int diseffect1=0,diseffect2=0;
实验 5:页面置换算法
一、 题目:编程实现 FIFO 和 LRU 算法
二、 目的: 进一步理解父子进程之间的关系; 理解内存页面调度的机理; 掌握页面置换算法的实现方法; 通过实验比较不同调度算法的优劣; 培养综合运用所学知识的能力。 页面置换算法是虚拟存储管理实现的关键,通过本次试验理解内存页面调度
int k1=0,k2=0,f1=0,f2=0;
float f;
int Access_series[total_instruction];
for(i=0; i<frame_num; i++) M_Frame[i].page_no=-1; printf("页面: ");
for(i=0; i<8; i++)
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资,配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高与中带资负料荷试下卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并3中试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内 纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

操作系统实验报告

操作系统实验报告
(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);

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

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

操作系统实验报告班级物联网1302班学号姓名实验一:熟悉Linux系统目的:①熟悉和掌握Linux系统基本命令,熟悉Linux编程环境,为以后的实验打下基础。

●启动退出、ls(显示目录内容)、cp(文件或目录的复制)、mv(文件、目录更名或移动)、rm(删除文件或目录)、mkdir(创建目录)、rmdir(删除空目录)、cd(改变工作目录)…●C语言编辑、编译内容及要求:●熟练掌握Linux基本文件命令;●掌握Linux编辑程序、对源代码进行编译、连接、运行及调试的过程;●认真做好预习,书写预习报告;●实验完成后要认真总结、完成实验报告login:用户登录系统使用login命令可以允许用户登录系统。

如果没有指定参数,登录时提示输入用户名。

如果该用户不是root,且如果/etc/nologin文件存在,这个文件的内容被显示到屏幕上,登录被终止。

命令语法:Login [选项][用户名]exit:退出系统使用exit命令可以退出shell命令语法:exit[选项]ls:列出目录和文件信息使用ls命令,对于目录而言将列出其中的所有的子目录与文件信息,对于文件而言将输出命令语法:ls[选项][目录|文件]ls命令部分选项含义cp:复制文件和目录使用cp命令可以复制文件vhe目录到其他目录中。

如果同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有的文件或目录复制到该目录中。

若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。

命令语法:cp [选项][源文件|目录][目标文件|目录]cp命令部分选项含义命令格式:mv [选项] 源文件或目录目标文件或目录.mv命令部分选项含义命令格式:rm [选项] 文件…rm命令部分选项含义能是当前目录中已有的目录命令格式:mkdir [选项] 目录..mkdir命令部分选项含义命令格式:cd [目录名]。

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

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

课程编号:B080000070《操作系统》实验报告姓名班级指导教师石凯实验名称《操作系统》实验开设学期2016-2017第二学期开设时间第11周——第18周报告日期2017年7月3日评定成绩评定人石凯评定日期2017年7月5日东北大学软件学院实验一进程的同步与互斥实验题目:通过学习和分析基础例子程序,使用windows进程和线程编程(也可以采用Java 或Unix/Linux的POSIX线程编程)实现一个简单的生产者/消费者问题的程序。

关键代码:import java.util.ArrayList;public class Produce {public Object object;public ArrayList<Integer> list;//用list存放生产之后的数据,最大容量为1public Produce(Object object,ArrayList<Integer> list ){this.object = object;this.list = list;}public void produce() {synchronized (object) {/*只有list为空时才会去进行生产操作*/try {while(!list.isEmpty()){System.out.println("生产者"+Thread.currentThread().getName()+" waiting");object.wait();}int value = 9999;list.add(value);System.out.println("生产者"+Thread.currentThread().getName()+" Runnable");object.notifyAll();//然后去唤醒因object调用wait方法处于阻塞状态的线程}catch (InterruptedException e) {e.printStackTrace();}}}}import java.util.ArrayList;public class Consumer {public Object object;public ArrayList<Integer> list;//用list存放生产之后的数据,最大容量为1public Consumer(Object object,ArrayList<Integer> list ){this.object = object;this.list = list;}public void consmer() {synchronized (object) {try {/*只有list不为空时才会去进行消费操作*/while(list.isEmpty()){System.out.println("消费者"+Thread.currentThread().getName()+" waiting");object.wait();}list.clear();System.out.println("消费者"+Thread.currentThread().getName()+" Runnable");object.notifyAll();//然后去唤醒因object调用wait方法处于阻塞状态的线程}catch (InterruptedException e) {e.printStackTrace();}}}}实验结果:思考题:(1)如何控制进程间的相互通信?答:主要有:管道,信号,共享内存,消息队列(2)什么是进程的同步?什么是进程的互斥?分别有哪些实现方式?答:进程互斥是进程之间的间接制约关系。

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

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

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

具体目的包括: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)观察并分析在不同的并发情况下,系统的运行结果和资源竞争情况。

东北大学操作系统实验之Linux及进程状态

东北大学操作系统实验之Linux及进程状态

操作系统实验报告一实验一进程状态转换及其PCB的变化一、实验目的:自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。

二、实验内容及要求:(1)、设计并实现一个模拟进程状态转换及其相应PCB内容、组织结构变化的程序。

(2)、独立编写、调试程序。

进程的数目、进程的状态模型(三状态、五状态、七状态或其它)以及PCB的组织形式可自行选择。

(3)、合理设计与进程PCB相对应的数据结构。

PCB的内容要涵盖进程的基本信息、控制信息、资源需求及现场信息。

(4)、设计出可视性较好的界面,应能反映出进程状态的变化引起的对应PCB内容、组织结构的变化。

(5)、代码书写要规范,要适当地加入注释。

(6)、鼓励在实验中加入新的观点或想法,并加以实现。

(7)、认真进行预习,完成预习报告。

(8)、实验完成后,要认真总结,完成实验报告。

五状态模型:三、主要数据结构:struct Run_type //运行态进程{char name;int state;int needtime;int priority;};struct Ready_type //就绪态进程{char name;int needtime;int priority;};struct Blocked_type //阻塞态进程{char name;int needtime;int priority;};四、程序源代码:#include<stdio.h>#include<stdlib.h>#include<string.h>int i=0; int j=0;struct Run_type{char name;int state;int needtime;int priority;};struct Ready_type{char name;int needtime;int priority;};struct Blocked_type{char name;int needtime;int priority;};struct Run_type Cpu;struct Ready_type Ready[10];struct Blocked_type Blocked[10];void Creat(){ //创建一个新的进程int k=0;label1:printf(" input new process name(input a letter): \n");scanf("%s",&(Ready[i].name));getchar();for(k=0;k<i;k++)if(Ready[i].name==Ready[k].name||Ready[i].name==Ready[k].name+32||Ready[i].n ame==Ready[k].name-32){printf("the process is already exist!");goto label1;}printf("input needtime (input a int number):\n");label3:scanf("%d",&(Ready[i].needtime));getchar();if(Ready[i].needtime<1||Ready[i].needtime>100){printf("please input the true needtime(1--100)\n");goto label3;}printf(" input the priority(1--10): \n");label2:scanf("%d",&(Ready[i].priority));getchar();if(Ready[i].priority<1||Ready[i].priority>10){printf("please 1--10!\n");goto label2;}i++;}void Dispath() //P135{int t;char v;int k;int j;if(Cpu.state==0)if(Ready[i-1].needtime==0){printf("* there is no process ready!\n");exit(0);}else{for(k=0;k<i-1;k++)for(j=0;j<i-k-1;j++)if(Ready[j].priority>Ready[j+1].priority){t=Ready[j].priority;Ready[j].priority=Ready[j+1].priority;Ready[j+1].priority=t;t=Ready[j].needtime;Ready[j].needtime=Ready[j+1].needtime;Ready[j+1].needtime=t;v=Ready[j].name;Ready[j].name=Ready[j+1].name;Ready[j+1].name=v;}--i;=Ready[i].name;Cpu.needtime=Ready[i].needtime;Cpu.priority=Ready[i]. priority;Cpu.state=1;printf("*%5c is send to cpu! \n",);Cpu.needtime--;if(Cpu.needtime==0){printf("*%5c is finished \n",);Cpu.state=0;}}else{Ready[i].name=;Ready[i].needtime=Cpu.needtime;Ready[i].priority=Cpu.priority;for(k=0;k<i;k++)for(j=0;j<i-k;j++)if(Ready[j].priority>Ready[j+1].priority){t=Ready[j].priority;Ready[j].priority=Ready[j+1].priority;Ready[j+1].priority=t;t=Ready[j].needtime;Ready[j].needtime=Ready[j+1].needtime;Ready[j+1].needtime=t;v=Ready[j].name;Ready[j].name=Ready[j+1].name;Ready[j+1].name=v;}=Ready[i].name;Cpu.needtime=Ready[i].needtime;Cpu.priority=Ready[i]. priority;Cpu.state=1;printf("*%5c is send to cpu! \n",);Cpu.needtime--;if(Cpu.needtime==0){printf("*%5c is finished \n",);Cpu.state=0;}}}void Timeout(){if(Cpu.state==0){printf("* there is no process in cpu(please select Dispath!\n");exit(0);}else{Ready[i].name=;Ready[i].needtime=Cpu.needtime;Ready[i].priority=Cpu.priority;printf("%c is timeout \n",);=0;Cpu.needtime=0;Cpu.priority=0;Cpu.state=0;i++;}}void Eventwait(){if(Cpu.state!=0){Blocked[j].name=;Blocked[j].needtime=Cpu.needtime;Blocked[j].priority=Cpu.priority;printf("* %c is Blocked !\n",);j++;=Blocked[j].name;Cpu.needtime=Blocked[j].needtime;Cpu.priority=Blocked[j].priority;Cpu.state=0;}elseprintf("* There is no process in cpu!");}void Eventoccurs(char a){int k=0;int m=0;int n=0;int p=0;if(Blocked[0].needtime==0){printf("* there is no process blocked!\n");exit(0);}else{for(k;k<j;k++)if(Blocked[k].name==a){Ready[i].name=Blocked[k].name;Ready[i].needtime=Blocked[k].needtime;Ready[i].priority=Blocked[k].priority;p=1;m=j-k;for(n;n<m;n++){Blocked[k].name=Blocked[k+1].name;Blocked[k].needtime=Blocked[k+1].needtime;Blocked[k].priority=Blocked[k+1].priority;k++;}j--;i++;}if(p==1)printf("* %c is ready!\n",a);elseprintf("* %c is not found! \n",a);}}void main(){Cpu.state=0;int Cputime=0;int x=6;while(x!=0){printf("\n1:input new process 2:Dispath\n");printf("3:Timeout4:Eventwait\n");printf("5:Eventoccurs(select whose eventoccur ) 0:exit\n");label4:scanf("%d",&x);getchar();printf("\n==============================================================================\n");if(x==0||x==1||x==2||x==3||x==4||x==5){switch(x){case 1:Creat();break;case 2:Dispath();break;case 3:Timeout();break;case 4:Eventwait();break;case 5:char a;scanf("%c",&a);getchar(); Eventoccurs(a);break;default:printf("please select from 0 to 5\n");}printf("----------------------------- Cputime:%3d----------------------------------\n",Cputime);printf("| ProceNsname NeedTime Priority |\n");if(Cpu.state!=0)//显示Cpu中的程序{printf("| Cpu:%16c",);printf("%20d",Cpu.needtime);printf("%18d|\n",Cpu.priority);}elseprintf("| * Cpu is free |\n");int y=0;if(i==0)//显示Ready队列中的数据{printf("| *There is no process ready. |\n");}else{for(y;y<i;y++)//显示Ready中的程序{printf("| Ready%d:",y);printf("%15c",Ready[y].name);printf("%20d",Ready[y].needtime);printf("%18d|\n",Ready[y].priority);}}int z=0;if(j==0) //显示Blocked队列中的程序{printf("| *There is no process blocked. |\n");}else{for(z;z<j;z++){printf("| Blocked%d:",z);printf("%13c",Blocked[z].name);printf("%20d",Blocked[z].needtime);printf("%18d |\n",Blocked[z].priority);}}Cputime++;if(Cpu.state!=0)Cpu.needtime=Cpu.needtime-1;printf("-----------------------------------------------------------------------------\n");}else{printf("please input 0--5\n");goto label4;}}}五、运行结果:1.创建a,b两个进程2、调度进程(由于b优先级高,所以b先进入运行态)3、当b时间片到了,b变为就绪态4、再次调度(由于b优先级高,故还是b变成运行态)5、正在运行的b阻塞6、当b等待的事件发生,b重新进入就绪态六、程序使用说明:编译程序后若无错就执行程序,初始如下:其中:1表示创建新进程,随后输入进程名,所需时间,优先级 2表示系统调度进程,首先调度最高优先级3表示时间片已到,运行中的进程将编程就绪态4表示进程所需的事件尚未发生,进程将被阻塞5表示进程等待的事件已发生,进程从阻塞态变为就绪态 0退出程序10。

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

东北大学操作系统实验报告
cin >> nam;
= nam;
process.status = "r2";
re.push_back(process);
cout << "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" << endl;
cout << endl;
if(ru.empty())
{
cin >> act;
if(act == 2)
ruTOre();
else if(act == 3)
ruTObl();
else if(act == 4)
blTOre();
else if(act == 5)
neTOre();
else if(act == 6)
ruTOex();
else
cout << "Error in select."<<endl;
class Pro //process class
{
public:
char name;
string status;
};
vector<Pro> ru,re,bl; //ru->running,re->ready,bl->blocked
//function declaration
int helloUI();
基础内容:编写程序使其模拟两个进程,即生产者(producer)进程和消费者(Consumer)进程工作;生产者每次产生一个数据,送入缓冲区中;消费者每次从缓冲区中取走一个数据。每次写入和读出数据时,都将读和写指针加一。当指针到达缓冲区尾,重新将指针退回起点;

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

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

操作系统实验报告班级物联网1302班学号姓名实验3 进程同步和通信-生产者和消费者问题模拟1. 目的:调试、修改、运行模拟程序,通过形象化的状态显示,使学生理解进程的概念,了解同步和通信的过程,掌握进程通信和同步的机制,特别是利用缓冲区进行同步和通信的过程。

通过补充新功能,使学生能灵活运用相关知识,培养创新能力。

2. 内容及要求:1) 调试、运行模拟程序。

2) 发现并修改程序中不完善的地方。

3) 修改程序,使用随机数控制创建生产者和消费者的过程。

4) 在原来程序的基础上,加入缓冲区的写互斥控制功能,模拟多个进程存取一个公共缓冲区,当有进程正在写缓冲区时,其他要访问该缓冲区的进程必须等待,当有进程正在读取缓冲区时,其他要求读取的进程可以访问,而要求写的进程应该等待。

5) 完成1)、2)、3)功能的,得基本分,完成4)功能的加2分,有其它功能改进的再加2分3. 程序说明:本程序是模拟两个进程,生产者(producer)和消费者(Consumer)工作。

生产者每次产生一个数据,送入缓冲区中。

消费者每次从缓冲区中取走一个数据。

缓冲区可以容纳8个数据。

因为缓冲区是有限的,因此当其满了时生产者进程应该等待,而空时,消费者进程应该等待;当生产者向缓冲区放入了一个数据,应唤醒正在等待的消费者进程,同样,当消费者取走一个数据后,应唤醒正在等待的生产者进程。

就是生产者和消费者之间的同步。

每次写入和读出数据时,都将读和写指针加一。

当读写指针同样时,又一起退回起点。

当写指针指向最后时,生产者就等待。

当读指针为零时,再次要读取的消费者也应该等待。

为简单起见,每次产生的数据为0-99的整数,从0开始,顺序递增。

两个进程的调度是通过运行者使用键盘来实现的。

4. 程序使用的数据结构进程控制块:包括进程名,进程状态和执行次数。

缓冲区:一个整数数组。

缓冲区说明块:包括类型,读指针,写指针,读等待指针和写等待指针。

5. 程序使用说明启动程序后,如果使用'p'键则运行一次生产者进程,使用'c'键则运行一次消费者进程。

操作系统实验报告

操作系统实验报告
close:用于关闭文件。
write:用于写文件。
read:用于读文件。
rm:用于删除文件。
思考:
(1)如果引入磁盘索引结点,上述实现过程需要哪些修改?
(2)如果设计的是一个多用户文件系统,则又要进行哪些扩充?
3实验结果(给出编写的程序源代码和运行结果的截图并回答思考问题)
源代码:
实验心得:
基本上实现了DOS下简单文件系统的实现,通过学习基本掌握了文件系统的存储结构
(5)要求提供以下有关的操作:
format:对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。
mkdir:用于创建子目录。
rmdir:用于删除子目录。
ls:用于显示目录。
cd:用于更改当前目录。
create:用于创建文件。
open:用于打开文件。
ID 0 1 2 3 4
PRIORITY 9 38 30 29 0
CPUTIME 0 0 0 0 0
ALLTIME 3 3 6 3 4
STARTBLOCK 2 -1 -1 -1 -1
BLOCKTIME 3 0 0 0 0
STATE ready ready ready ready ready
(5)为了清楚的观察各进程的调度过程,程序应将每个时间片内的情况显示出来,参照的具体格式如下:
(3)置换算法:请分别考虑OPT、FIFO和LRU算法。
(4)作业中指令的访问次序按下述原则生成:
•50%的指令是顺序执行的。
•25%的指令是均匀分布在前地址部分。
•25%的指令时均匀分布在后地址部分。
3实验结果(给出编写的程序源代码和运行结果的截图)

东北大学操作系统实验 绝对自创 实验报告 含可执行源代码 linux环境可运行 有截图

东北大学操作系统实验 绝对自创 实验报告 含可执行源代码 linux环境可运行 有截图
queue<int> blockp;//等待进入缓冲区的数据
int data = 0;//生产者生产的数据
int num = 0;//缓冲区元素个数
int np = 0;//正在等待的生产者
int nc = 0;//正在等待的消费者
int main()
{
print();
char c;
while(scanf("%c",&c)!='e')
buffer.push(ch);
buffer.pop();
}
printf("\n");
}
三、实验结果
实验三进程的管道通信
一、实验目的
加深对进程概念的理解,明确进程和程序的区别。
学习进程创建的过程,进一步认识进程并发执行的实质。
分析进程争用资源的现象,学习解决进程互斥的方法。
学习解决进程同步的方法。
掌握Linux系统中进程间通过管道通信的具体实现。
read(fd[0],father,17);
cout << father << endl;
}
}
}
return 0;
}
三、实验结果
实验四页面置换算法
一、实验目的
进一步加深理解父子进程之间的关系及其并发执行。
理解内存页面调度的机理。
掌握页面置换算法及其实现方法。
培养综合运用所学知识的能力。
二、实验内容
#include <iostream>
{
if(Acess_Series[i] == M_Frame[j])//命中
{
cout << "子程序2 命中: " ;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一熟悉Linux系统
一、实验目的
熟悉和掌握Linux系统基本命令,熟悉Linux编程环境,为以后的实验打下基础。
二、实验原理
基于linux系统的基础操作
三、实验内容(源码、注释、基础内容、扩展点等)
启动、退出、ls(显示目录内容)、cp(文件或目录的复制)、mv(文件、目录更名或移动)、rm(删除文件或目录)、mkdir(创建目录)、rmdir(删除空目录)、cd(改变工作目录)…
cout << "Status contains r1(running),r2(ready) and b(blocked)." << endl;
cin >> sta;
= sta;
if(sta == "r1") ame << ",";
}
cout << endl;
cout << "ready:";
for(i=0; i<(); i++)
C语言编辑、编译
四、实验结果(截图)
ls mkdir:
cd:
rmdir:
实验二进程状态
一、实验目的
自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容 、组织的变化,理解进程与其PCB间的一一对应关系。
二、实验原理
1.进程在内存中存在三种基本状态:就绪态、执行态、阻塞态
showPCB();
return 0;
}
int main()
{
int act; << endl;
iniQ();
while(1)
{
cout << "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" << endl;
cout << "Please select the action to take." << endl;
cout << "####################################" << endl;
cout << endl;
}
return 0;
}
拓展点:五状态模型
四、实验结果(截图)
创建进程ed:
状态blockedready:
());
());
if()) << endl;
cout << endl;
Pro process;
char nam;
string sta;
cout << "Please enter processes names." << endl;
cin >> nam;
= nam;
= "r2";
(process);
cout << "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" << endl;
2.三种状态在满足某种条件时会发生转换:
①就绪——》运行:调度程序选择一个新的进程运行
②运行——》就绪:运行进程用完了时间片
运行进程被中断,因为一高优先级进程处于就绪状态
③运行——》阻塞:当一进程等待某一事件的发生时,如
请求系统服务; 初始化I/O 且必须等待结果;
无新工作可做; 等待某一进程提供输入 (IPC)
cout << "2:running-->ready" << endl;
cout << "3:running-->blocked" << endl;
cout << "4:blocked-->ready" << endl;
cout << "5:new-->ready" << endl;
cout << "6:running-->exit" << endl;
东北大学操作系统实验报告
计算机科学与工程学院实验报告
实验课程名称
操作系统实验
实验成绩
专业
计算机科学与技术
班级
1507班
指导教师签字
学号
姓名
罗艺博
实验报告批改时间
实验项目目录
1.实验一熟悉Linux系统
2.实验二进程状态
3.实验三进程同步和通信
4.实验四进程的管道通信
5.实验五页面置换算法
实验报告正文
()); {
());
());
if(!())
{
());
());
}
else
cout << "Error in ruTObl1." << endl;
}
else
cout << "Error in ruTObl2." << endl;
showPCB();
return 0;
}
int blTOre()
{
if(!()) {
④阻塞——》就绪:当所等待的事件发生时
三、实验内容(源码、注释、基础内容、扩展点等)
#include <iostream>
#include <vector>
#include <>
#include <algorithm> << endl;
cout << "#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#" << endl;
{
cout << re[i].name << ",";
}
cout << endl;
cout << "blocked:";
for(i=0; i<(); i++)
{
cout << bl[i].name << ",";
}
cout << endl;
return 0;
}
int ruTOre()
{
if(!()) {
cout << endl;
cout << endl;
return 0;
}
int iniQ() << endl;
cout << endl;
for(i=0; i<5; i++) << endl;
cin >> nam;
= nam;
cout << "Please enter processes status." << endl;
cin >> act;
if(act == 2)
ruTOre();
else if(act == 3)
ruTObl();
else if(act == 4)
blTOre();
else if(act == 5)
neTOre();
else if(act == 6)
ruTOex();
else
cout << "Error in select."<<endl;
cout << endl;
if())
{
());
());
}
showPCB();
return 0;
}
int ruTOex()
{
if(!()) {
());
if(!())
{
());
());
}
else
cout << "Error in ruTOex1." << endl;
}
else
cout << "Error in ruTOex2." << endl;
相关文档
最新文档