操作系统第一次与第二次实验报告

合集下载

操作系统实验报告(全)

操作系统实验报告(全)

操作系统实验报告书院系名称:电子工程学院电子指导教师:班级:学号:学生姓名:实验题目一:进程一、实验目的通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的功能和使用。

二、实验内容(1)补充POSIX 下进程控制的残缺版实验程序(2)回答下列问题:1. 你最初认为运行结果会怎么样?2. 实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。

3. proc_number 这个全局变量在各个子进程里的值相同吗?为什么?4. kill 命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?5. 使用kill 命令可以在进程的外部杀死进程。

进程怎样能主动退出?这两种退出方式哪种更好一些?三、实验步骤1.根据题意进入DOC环境中编写程序。

2.编译,链接,运行程序,进行调试。

3.分析实验结果及回答问题。

四、调试情况,回答问题及体会1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。

2、在设计过程中的感受。

调试情况:回答上述实验内容中的问题1.预期结果:会持续输出0-9号进程,直到输入数字键+回车,则会杀死该进程,接下来的输出将不会有该进程号,当输入q+回车,则退出程序。

2.实际结果:与预期差不多,因输入进程总数20大于设定的最大进程数,因此按进程数10来处理。

随机输出0-9号进程,sleep(SLEEP_INTERV AL),循环输出,直到输入数字键,则会杀死该数字对应的进程,直到输入q退出循环,然后杀死本组所有进程。

分析:每创建一个子进程时,将其pid存储在pid[i]中,i存储在proc_number,然后调用死循环函数do_something(),输出该进程的代号proc_number;当输入数字键时,主进程会执行kill(pid[ch-'0'],SIGTERM),从而杀死(ch-‘0’)号进程。

(完整word版)操作系统第一次试验报告

(完整word版)操作系统第一次试验报告

北京邮电大学操作系统实验实验报告班号:姓名:学号:实验日期: 2014.11.16 实验名称:操作系统实验一、实验目的1、熟悉LINUX的基本环境,了解LINUX下进程和线程的实现二、实验内容1、熟悉UNIX/LINUX的常用基本命令2、利用fork()生成子进程和clone()生成线程。

3、通过mutex来实现生产者和消费者问题。

三、项目要求及分析(1)下载并安装LINUX,可以使用FEDORA或Ubuntu.(2)熟悉UNIX/LINUX的常用基本命令如ls、who、wc、pwd、ps、pstree、top,cat,cd,chgrp,chmod,chown,comm,cmp,cp,rm,diff,mv,rmdir等,了解环境。

(3)比较fork()和clone()的功能,利用fork()生成子进程和clone()生成线程。

(4)利用pthread库,通过其中的mutex来实现生产者和消费者问题。

(5) 使用System V的信号灯,实现第二类读者-写者问题(写者优先,新来的读者不允许进行写操作)。

四、具体实现(1):熟悉UNIX/LINUX的常用基本命令名称: ls使用权限: 所有使用者使用方式: ls [-alrtAFR] [name...]说明: 显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。

参数:-a 显示所有档案及目录(ls内定将档案名或目录名称开头为"."的视为隐藏档,不会列出)-l 除档案名称外,亦将档案型态、权限、拥有者、档案大小等资讯详细列出-r 将档案以相反次序显示(原定依英文字母次序)-t 将档案依建立时间之先后次序列出-A 同-a ,但不列出"." (目前目录) 及".." (父目录)-F 在列出的档案名称后加一符号;例如可执行档则加"*", 目录则加"/"-R 若目录下有档案,则以下之档案亦皆依序列出名称: who使用权限: 所有使用者都可使用使用方式: who - [husfV] [user]说明: 显示系统中有那些使用者正在上面,显示的资料包含了使用者ID,使用的终端机,从哪边连上来的,上限时间,呆滞时间,CPU 使用量,动作等等。

操作系统实验报告

操作系统实验报告

实验名称:操作系统进程管理实验实验目的:1. 理解操作系统进程管理的概念和原理。

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

3. 通过实验加深对进程管理算法的理解和应用。

实验环境:1. 操作系统:Windows 102. 编程语言:C/C++3. 开发环境:Visual Studio实验内容:一、实验一:进程的创建与终止1. 实验目的了解进程的创建和终止机制,掌握进程控制块(PCB)的结构和功能。

2. 实验步骤(1)创建一个进程,使用系统调用创建子进程;(2)设置子进程的属性,如优先级、名字等;(3)终止子进程,释放资源;(4)查看进程信息,确认进程创建和终止过程。

3. 实验代码```c#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main() {pid_t pid;printf("Parent process: %d\n", getpid());pid = fork(); // 创建子进程if (pid == 0) {printf("Child process: %d\n", getpid());printf("Child process is running...\n");sleep(5); // 子进程延时5秒exit(0);} else {printf("Child process created: %d\n", pid);wait(NULL); // 等待子进程结束printf("Child process terminated.\n");}return 0;}```4. 实验结果在运行实验代码后,首先输出父进程的进程号,然后输出子进程的进程号,子进程运行5秒后结束,父进程输出子进程终止信息。

操作系统实验二实验报告

操作系统实验二实验报告

操作系统实验二实验报告一、实验目的本次操作系统实验二的主要目的是深入理解和掌握进程管理的相关概念和技术,包括进程的创建、执行、同步和通信。

通过实际编程和实验操作,提高对操作系统原理的认识,培养解决实际问题的能力。

二、实验环境本次实验使用的操作系统为 Windows 10,编程环境为 Visual Studio 2019。

三、实验内容及步骤(一)进程创建实验1、首先,创建一个新的 C++项目。

2、在项目中,使用 Windows API 函数`CreateProcess`来创建一个新的进程。

3、为新进程指定可执行文件的路径、命令行参数、进程属性等。

4、编写代码来等待新进程的结束,并获取其退出代码。

(二)进程同步实验1、设计一个生产者消费者问题的模型。

2、使用信号量来实现生产者和消费者进程之间的同步。

3、生产者进程不断生成数据并放入共享缓冲区,当缓冲区已满时等待。

4、消费者进程从共享缓冲区中取出数据进行处理,当缓冲区为空时等待。

(三)进程通信实验1、选择使用管道来实现进程之间的通信。

2、创建一个匿名管道,父进程和子进程分别读写管道的两端。

3、父进程向管道写入数据,子进程从管道读取数据并进行处理。

四、实验结果及分析(一)进程创建实验结果成功创建了新的进程,并能够获取到其退出代码。

通过观察进程的创建和执行过程,加深了对进程概念的理解。

(二)进程同步实验结果通过使用信号量,生产者和消费者进程能够正确地进行同步,避免了缓冲区的溢出和数据的丢失。

分析结果表明,信号量机制有效地解决了进程之间的资源竞争和协调问题。

(三)进程通信实验结果通过管道实现了父进程和子进程之间的数据通信。

数据能够准确地在进程之间传递,验证了管道通信的有效性。

五、遇到的问题及解决方法(一)在进程创建实验中,遇到了参数设置不正确导致进程创建失败的问题。

通过仔细查阅文档和调试,最终正确设置了参数,成功创建了进程。

(二)在进程同步实验中,出现了信号量使用不当导致死锁的情况。

南京邮电大学-操作系统实验报告

南京邮电大学-操作系统实验报告

课内实验报告课程名:操作系统任课教师:沈超专业:信息管理与信息系统学号:姓名:二○一六至二○一七年度第一学期南京邮电大学经济与管理学院Process[numberschedul].order=tempcounter;}程序结果截图:二、银行家算法(网上借鉴)银行家算法,当进程提出资源申请时,系统首先检查该进程对资源的申请量是否超过其最大需求量及系统现有的资源能否满足进程需要。

若超过,则报错,若不能满足,则让该进程等待;否则进一步检查把资源分给该进程后系统能否出于安全状态,若安全,则分配,否则置该进程为等待资源状态。

算法实现过程:设进程i 提出请求REQUEST [j] ,则银行家算法按如下规则进行判断。

(1) 如果REQUEST [i] [j]<= NEED[i][j] ,则转(2) ;否则,出错。

(2) 如果REQUEST [i] [j]<= A V AILABLE[i][j] ,则转(3) ;否则,出错。

(3) 系统试探分配资源,修改相关数据:A V AILABLE[j]-=REQUEST[i][j];ALLOCATION[i][j]+=REQUEST[i][j];NEED[i][j]-=REQUEST[i][j];(4) 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

Check()关键代码:{int k, f, no=0;int work[M],a[M];char finish[M];anquan=1;for(i=0;i<n; i++) finish[i]='F';for(j=0;j<m; j++) work[j]=available[j]; k=n;do{ for (i=0;i<n; i++){if (finish[i]=='F'){ f=1;for (j=0;j<m; j++)if (need[i][j]>work[j]) printf("处于安全状态.");printf("安全序列号:");for (i=0;i<n;i++) printf ("%d ",a[i]); printf("\n");printf("进程");printf(" ");printf(" Max ");rintf(" ");rintf("allocation");printf(" ");printf("need");printf(" ");f=0;if (f==1)//找到还没完成的且需求数小于可提供进程继续运行的{ finish[i]='T';a[no++]=i;//记录安全序列号for (j=0;j<m; j++)work[j]=work[j]+allocation[i][j];//释放该进程已分配的资源available[j] =work[j];}}}k--; }while(k>0);f=1;for (i=0;i<n; i++)//判断有没有进程没完成{ if (finish[i]=='F'){f=0;break; }} if (f==0) {printf("不安全状态!\n");anquan=0;} else {printf("available");printf("\n");for (i=0;i<n; i++){ printf("%2d",i);printf(" ");for(j=0;j<m; j++)printf("%2d",max[i][j]);printf(" ");for(j=0;j<m; j++)printf("%2d",allocation[i][j]);printf(" ");for(j=0;j<m; j++)printf("%2d",need[i][j]);printf(" ");for(j=0;j<m; j++){if(i>0)break;printf("%2d",available[j]);}printf("\n");}}}程序结果截图:三、实验总结:这次上机模拟了进程调度过程和解决了死锁问题,让我对短作业优先调度算法和银行家算法有了比在课堂上更深刻的认识。

安装双系统实验报告(3篇)

安装双系统实验报告(3篇)

第1篇一、实验目的1. 了解双系统的概念和原理。

2. 掌握在计算机上安装双系统的操作步骤。

3. 熟悉Windows和Linux操作系统的基本使用方法。

二、实验环境1. 操作系统:Windows 102. 硬件环境:CPU:Intel Core i5,内存:8GB,硬盘:500GB3. 软件环境:Windows 10安装盘、Linux安装盘(如Ubuntu)三、实验步骤1. 准备工作(1)下载并制作Windows 10安装U盘。

(2)下载并制作Linux安装U盘。

(3)备份数据,以防数据丢失。

2. 安装Windows 10(1)将Windows 10安装U盘插入计算机,重启计算机。

(2)进入BIOS设置,调整启动顺序,使U盘优先启动。

(3)按照安装向导进行操作,完成Windows 10的安装。

3. 安装Linux(1)将Linux安装U盘插入计算机,重启计算机。

(2)进入BIOS设置,调整启动顺序,使U盘优先启动。

(3)按照安装向导进行操作,选择安装位置时,选择与Windows 10不同的分区。

(4)完成Linux的安装。

4. 设置双系统启动(1)重启计算机,进入BIOS设置。

(2)在启动菜单中,选择“Boot Menu”。

(3)在Boot Menu中,可以看到Windows 10和Linux两个选项。

(4)根据需要,调整启动顺序,使Windows 10或Linux优先启动。

四、实验结果与分析1. 实验结果成功在计算机上安装了Windows 10和Linux双系统,并可以正常切换。

2. 实验分析(1)双系统可以提高计算机的利用率,满足不同用户的需求。

(2)安装双系统需要注意分区问题,避免数据丢失。

(3)在切换系统时,需要注意系统启动顺序的调整。

五、实验总结通过本次实验,我们掌握了在计算机上安装双系统的操作步骤,了解了双系统的概念和原理。

在实验过程中,我们学会了备份数据、制作安装U盘等操作,提高了实际操作能力。

操作系统实验报告实验二

操作系统实验报告实验二

操作系统实验报告实验二一、实验目的本次操作系统实验二的目的在于深入理解和掌握操作系统中的进程管理和进程调度相关知识,通过实际的编程和实验操作,观察和分析不同进程调度算法的性能和效果,提高对操作系统核心概念的理解和应用能力。

二、实验环境本次实验在 Windows 10 操作系统下进行,使用 Visual Studio 2019作为编程工具。

实验中涉及的编程语言为 C++。

三、实验内容(一)进程创建与控制编写程序实现创建多个进程,并通过进程控制原语(如创建、等待、终止等)对进程进行管理和控制。

(二)进程调度算法实现1、先来先服务(FCFS)调度算法按照进程到达的先后顺序进行调度,先到达的进程先获得 CPU 资源进行执行。

2、短作业优先(SJF)调度算法优先调度执行时间短的进程,以减少平均等待时间。

3、时间片轮转(RR)调度算法将 CPU 时间划分为固定大小的时间片,每个进程在一个时间片内执行,时间片结束后切换到下一个进程。

(三)性能评估指标1、平均等待时间所有进程等待时间的总和除以进程数量。

2、平均周转时间所有进程周转时间的总和除以进程数量。

周转时间为进程从提交到完成的时间间隔。

四、实验步骤(一)进程创建与控制1、定义进程结构体,包含进程 ID、到达时间、执行时间等信息。

2、使用系统调用或库函数创建进程。

3、在父进程中通过等待函数等待子进程结束,并获取子进程的返回状态。

(二)进程调度算法实现1、先来先服务(FCFS)调度算法按照进程到达时间的先后顺序将进程放入就绪队列。

从就绪队列中取出第一个进程进行调度执行。

2、短作业优先(SJF)调度算法计算每个进程的执行时间。

按照执行时间从小到大的顺序将进程放入就绪队列。

从就绪队列中取出执行时间最短的进程进行调度执行。

3、时间片轮转(RR)调度算法将进程按照到达时间先后顺序放入就绪队列。

为每个进程分配一个时间片,当时间片用完后,将进程放入就绪队列尾部,重新调度下一个进程。

系统结构 第一、二次试验报告

系统结构 第一、二次试验报告

实验一熟悉模拟器WinDLX的使用一、实验目的1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点。

2. 加深对计算机流水线基本概念的理解。

3.了解DLX基本流水线各段的功能以及基本操作。

二、实验平台WinDLX模拟器三、实验任务用WinDLX模拟器执行下列两个程序:求阶乘程序求最大公倍数程序分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。

熟练掌握WinDLX的操作和使用。

1.用WinDLX模拟器执行求阶乘程序(1)用WinDLX模拟器执行求阶乘程序。

这个程序说明浮点指令的使用。

该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。

该程序中调用了中的输入子程序,这个子程序用于读入正整数。

(2)输入数据“3”,采用单步执行方法,完成程序并通过使用WinDLX,总结WinDLX的特点。

(3)注意观察变量说明语句所建立的数据区,理解WinDLX指令系统。

(4)分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。

熟练掌握WinDLX的操作和使用。

2.用WinDLX模拟器求最大公约数程序(1)用WinDLX模拟器执行程序。

该程序从标准输入读入两个整数,求他们的greatest common measure,然后将结果写到标准输出。

该程序中调用了中的输入子程序。

(2)给出两组数6、3和6、1,采用单步和连续混合执行的方法完成程序,注意中间过程和寄存器的变化情况,观察流水线工作情况。

然后单击主菜单上的execute/display dlx-i/o,观察结果。

(3 ) 分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。

实验结果:1、(1)导入和代码(2)单步执行流水线:寄存器的值:由图可知:PC寄存器中存放下一条要执行的语句的地址,IMAR中存放当前执行的语句的地址。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告
实验1 Linux基本环境
1、实验目的
(1)熟悉Linux下的基本操作,学会使用各种Shell命令去操作Linux,对Linux 有一个感性认识。

(2)学会使用vi编辑器编简单的C语言程序,并能对其编译和调试。

2、实验内容
(1)以root用户身份登陆,并使用“ls”,“cat”“cd”等命令来实现基本的文件操作并观察Linux文件系统的特点;
(2)使用vi编辑器编写一C程序,并用gcc命令进行编译和链接,并用a.out 来进行输出结果。

3、实验结果
(1) a.输入“ls”后,vi编辑器显示主文件夹下的所有文件及目录名。

使用dir 查看当前目录内容。

b.输入“cat”后,会显示文件:cat 文件名建立文件:cat >文件名,
ctrl+d结束输入。

c.输入“cd”,改变当前目录,cd ..回到上层目录,cd /回到根目录。

(2) a.在命令行键入vi filename.c 然后回车。

b.按一下键盘上的I键(insert),进入编辑模式。

(a与i是相同的用法)
c.当文件编辑完后,按Esc 键;输入:wq) ,保存退出。

d.对刚才编写的程序进行编译。

编译的命令是:gcc filenam
e.c
e.最后运行程序,命令式:./a.out
4、实验总结
通过做本次实验,我熟悉了Linux环境下的基本操作,学会使用各种命令去操作Linux,也学会使用vi编辑器编辑简单的程序,并能对其编译
和调试。

了解并掌握了对vi编辑器的一些基本使用方法等。

可能由于初次接触Linux环境,所以刚开始编程时出现了许多错误,但我及时找同学或老师来帮忙,解决我的问题,这些错误能够让我更清楚地了解自己对哪些知识掌握的不够透彻,让自己对知识掌握的更牢固。

实验2 进程管理
1、实验目的
(1)加深对进程概念的理解,明确进程和程序的区别。

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

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

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

2、实验内容
(1)进程的创建
编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕
上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和
字符“c”。

试观察纪录屏幕上的显示结果,并分析原因。

(2)进程的控制
修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。

如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程
之间的互斥,观察并分析出现的现象。

(3)①编写一段程序,使其现实进程的软中断通信。

要求:使用系统调用fork()创建两个子进程,再用系统调用signal()
让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号
后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信
号后分别输出下列信息后终止:
Child Processll is Killed by Parent!
Child Processl2 is Killed by Parent!
父进程等待两个子进程终止后,输出如下的信息后终止
Parent Process is Killed!
②在上面的程序中增加语句signal (SIGNAL, SIG-IGN) 和signal
(SIGQUIT, SIG-IGN), 观察执行结果,并分析原因。

(4)进程的管道通信
编制一段程序,实现进程的管理通信。

使用系统调用pipe()建立一条管道线;两个子进程P1和P2 分别向管道
中写一句话:
Child 1 is sending a message!
Child 2 is sending a message!
而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。

要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的
消息。

3、实验结果
(1)bca(有时会出现bac)
分析:从进程执行并发来看,输出bac,acb等情况都有可能。

原因:fork()创建进程所需的时间多于输出一个字符的时间,因此在主进程创建进程2的同时,进程1就输出了“b”,而进程2和
主程序的输出次序是有随机性的,所以会出现上述结果。

(2)child….
son…
daughter…
daughter…
或child
…son
…child
…son
…daughter
有时会出现child... son... daughter...
分析:由于函数printf()输出的字符串之间不会被中断,因此,字符串内部的字符顺序输出时不变。

但是 , 由于进程并发执行时的
调度顺序和父子进程的抢占处理机问题,输出字符串的顺序和先
后随着执行的不同而发生变化。

这与打印单字符的结果相同。

如果在程序中使用调用lockf()来给每一个子进程加锁之后出现的情况:
大致与未上锁的输出结果相同,也是随着执行时间不同,输出结果的顺
序有所不同。

分析:因为上述程序执行时,不同进程之间不存在共享临界资源(其中打印机的互斥性已有由操作系统保证)问题,所以,加锁与不加
锁效果相同。

(3)child process2 is killed by parent!
parent process is killed!
分析:由于stop函数和waiting函数共同作用。

保证了parent process is killed!一定在child process1 is killed by parent!
child process2 is killed by parent!之后出现。

当增加语句signal (SIGNAL, SIG-IGN) 和signal (SIGQUIT,SIG-IGN ) parent process is killed!然后程序处于保持阻塞状态。

分析:由于忽略了中断与退出信号,程序会一直保持阻塞状态而无法退出。

(4)延迟5秒后显示:
child1 process is sending message!
再延迟5秒:
child2 process is sending message!
分析:程序通过sleep()函数使当前的进程自我阻塞,而在阻塞过程中没有运行其他进程是因为通过lockf()进行了锁定,从而实
现进程的互斥。

4、实验总结
在本次实验中,由于对其命令的操作方式有了一定的了解,所以在操作步骤上没有多大问题,但程序方面,虽然都是老师给的代码,但是还是不太理解其中的意思,最后通过自己上网查资料看书和同学互相交流,知道了代码中的各个函数的功能,也得到了最终的实验结果。

不过自己还是不能独立编写实验内容程序,课后还需要多多练习。

总之,这次实验受益匪浅,我相信这些会为我以后的学习打下良好的基础,在以后的实验和学习中我可以做得更好!。

相关文档
最新文档