2012级操作系统实验报告
操作系统实验报告三
操作系统实验报告三一、实验目的本次实验的目的是通过设计和实现一个简单的操作系统,加深对操作系统内核设计的理解,并学习操作系统内核的基本构建和运行原理。
二、实验背景操作系统是计算机系统中最核心的软件之一,它负责管理计算机的各种资源以及协调和控制应用程序的执行。
操作系统的设计和实现使计算机能够高效地运行并提供友好的用户接口。
操作系统也为应用程序提供了统一的软硬件访问接口,方便开发人员进行软件开发。
操作系统的设计和实现是计算机科学与技术领域中重要的研究方向之一。
通过操作系统的实验,可以深入了解操作系统的内部原理和机制,加深对操作系统的理解和认识。
三、实验内容本次实验需要设计和实现一个简单的操作系统,完成以下功能:1. 实现一个简单的内存管理模块,包括内存分配和释放的功能。
2. 实现一个简单的进程管理模块,包括进程的创建、撤销和切换的功能。
3. 实现一个简单的文件系统模块,包括文件的读写和目录的管理功能。
4. 实现用户与操作系统之间的交互界面,方便用户进行操作系统的使用。
四、实验步骤1. 设计和实现内存管理模块:a. 设计内存分配算法,根据系统的需要分配和释放内存空间。
b. 实现内存分配和释放的功能函数,确保能够正确地分配和释放内存空间。
2. 设计和实现进程管理模块:a. 设计进程控制块(PCB),记录进程的相关信息。
b. 实现进程的创建、撤销和切换的功能函数,确保进程能够正确地被创建、撤销和切换。
3. 设计和实现文件系统模块:a. 设计文件控制块(FCB),记录文件的相关信息。
b. 实现文件的读写和目录的管理功能函数,确保文件能够正确地被读写和目录能够正确地被管理。
4. 实现用户与操作系统之间的交互界面:a. 设计用户界面,包括命令解释器等。
b. 实现用户输入命令的解释和执行函数,确保用户能够正确地与操作系统进行交互。
五、实验结果与分析经过实验,我们成功地设计和实现了一个简单的操作系统,并完成了内存管理、进程管理和文件系统的功能实现。
《操作系统》实验报告
《操作系统》实验报告一、实验目的操作系统是计算机系统中最为关键的组成部分之一,本次实验的主要目的是深入理解操作系统的基本原理和功能,通过实际操作和观察,熟悉操作系统的核心概念,包括进程管理、内存管理、文件系统和设备管理等,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、进程管理实验进程是操作系统中最基本的执行单元。
在这个实验中,我们使用C++编写程序来创建和管理进程。
通过观察进程的创建、执行和结束过程,理解进程的状态转换和资源分配。
首先,我们编写了一个简单的程序,创建了多个子进程,并通过进程标识符(PID)来跟踪它们的运行状态。
然后,使用等待函数来等待子进程的结束,并获取其返回值。
在实验过程中,我们发现进程的创建和销毁需要消耗一定的系统资源,而且进程之间的同步和通信需要谨慎处理,以避免出现死锁和竞争条件等问题。
2、内存管理实验内存管理是操作系统的核心功能之一,它直接影响系统的性能和稳定性。
在这个实验中,我们研究了动态内存分配和释放的机制。
使用 C++中的 new 和 delete 操作符来分配和释放内存。
通过观察内存使用情况和内存泄漏检测工具,了解了内存分配的效率和可能出现的内存泄漏问题。
同时,我们还探讨了内存分页和分段的概念,以及虚拟内存的工作原理。
通过模拟内存访问过程,理解了页表的作用和地址转换的过程。
3、文件系统实验文件系统是操作系统用于管理文件和目录的机制。
在这个实验中,我们对文件的创建、读写和删除进行了操作。
使用 C++的文件流操作来实现对文件的读写。
通过创建不同类型的文件(文本文件和二进制文件),并对其进行读写操作,熟悉了文件的打开模式和读写方式。
此外,还研究了文件的权限设置和目录的管理,了解了如何保护文件的安全性和组织文件的结构。
4、设备管理实验设备管理是操作系统与外部设备进行交互的桥梁。
操作系统实验--处理机调度算法实现
当程序启动时,用户可以选择不同的调度算法。然后用户从控制台输入各个进程的信息,这些信息保存到进程容器中。进程信息输入完毕后,就开始了进程调度,每调度一次判断就绪队列是否为空,若为空则系统时间加一个时间片。判断进程容器中是否有新的进程可以加入就绪队列。
struct proc //定义进程结构体
{
char name[5];
int num;
int pri;
};
void main()//主函数
{ char ch;
struct proc pr[n];//声明结构体数组
int i,k,j;
int count=n;
for(i=0;i<n;i++)//输入5个进程
函数描述:
struct proc/*定义结构体内部包含进程的信息*/
{
char name[5]; /*定义进程名*/
int num; /*定义运行时间*/
int pri; /*定义优先权*/
};
Void main()/*主函数:掌控整个程序的运行过程,是程序的主体部分*/
struct proc pr[n];/*声明结构体数组*/
4.处理机调度总是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“1”,同时将运行时间减“1”。
5.若要求运行时间为零,则将其状态置为“结束”,且退出队列。
6.运行所设计程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程
实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)
for(k=1;k<n;k++)
操作系统 实验报告
操作系统实验报告操作系统实验报告引言:操作系统是计算机系统中最重要的软件之一,它负责管理计算机硬件资源,并提供程序运行环境。
操作系统的设计和实现是计算机科学领域的重要研究方向之一。
本篇实验报告将介绍我们在操作系统实验中所进行的实践和实验结果。
一、实验目的我们的实验目的是通过实践操作系统的基本功能,深入理解操作系统的原理和实现方式。
具体来说,我们的实验目标包括:1. 学习并掌握操作系统的基本概念和原理;2. 理解操作系统与硬件之间的交互过程;3. 实践操作系统的进程管理、内存管理和文件系统等功能;4. 分析操作系统的性能和优化策略。
二、实验环境我们使用了一台配置较高的计算机作为实验环境,该计算机配备了一块主频为2.5GHz的多核处理器、8GB内存和500GB硬盘。
我们选择了一款常见的操作系统作为实验平台,以便于进行实验和调试。
三、实验过程1. 进程管理在进程管理实验中,我们实现了进程的创建、调度和终止等功能。
首先,我们编写了一个简单的程序,用于创建多个进程并进行调度。
然后,我们通过观察进程的执行顺序和时间片分配情况,分析操作系统的调度算法对系统性能的影响。
2. 内存管理在内存管理实验中,我们实现了内存的分配和回收等功能。
我们编写了一个模拟程序,用于模拟内存的分配和释放过程。
通过观察内存分配的效率和内存碎片的情况,我们评估了不同的内存管理算法的性能。
3. 文件系统在文件系统实验中,我们实现了文件的创建、读写和删除等功能。
我们编写了一个简单的文件操作程序,用于测试文件系统的性能和可靠性。
通过观察文件系统的读写速度和文件恢复的效果,我们评估了不同的文件系统实现方式的优劣。
四、实验结果通过实验,我们获得了以下结果:1. 进程管理实验中,我们发现不同的调度算法对系统性能的影响差异较大。
短作业优先算法在短时间内能够提高系统的响应速度,而时间片轮转算法则能够保证公平性。
2. 内存管理实验中,我们发现不同的内存管理算法对内存利用率和碎片情况有很大的影响。
操作系统 实验报告
操作系统实验报告操作系统是计算机硬件和应用软件之间的一个重要桥梁,它提供了对硬件资源的管理和调度,为应用程序提供了一个运行环境。
在操作系统的发展历史中,经历了批处理系统、分时系统、网络操作系统等不同的阶段和发展方向。
本次实验主要涉及操作系统的进程管理、文件系统以及内存管理。
首先是进程管理,进程是计算机中最基本的执行单元,负责处理用户的请求并执行相应的操作。
在实验中,我们使用了进程调度算法来调度不同的进程。
进程调度算法的选择会直接影响到系统的性能和响应时间。
最常见的进程调度算法有FCFS(先到先服务)、SJF(短作业优先)、RR(时间片轮转)等。
本次实验中,我们实现了一个简单的RR调度算法,按照时间片的顺序轮流使用CPU资源。
实验结果显示,RR调度算法能够有效地保证多个进程同时运行且公平地使用CPU。
其次是文件系统,文件系统是操作系统中管理文件和文件夹的机制。
在实验中,我们使用了文件管理的一些基本操作如创建文件、打开文件、写入文件和关闭文件等。
在文件的操作过程中,通过文件指针来记录当前的读写位置以便于下一次读写。
实验结果显示,文件管理功能能够很好地实现对文件的读写和管理。
最后是内存管理,内存是计算机中存储数据和程序的地方,对于操作系统来说管理和分配内存是一个非常重要的任务。
在实验中,我们主要学习了内存的分区管理和分页管理。
内存的分区管理将内存划分为若干个大小不等的区域,每个程序占用相应的内存空间。
而内存的分页管理则将程序划分为固定大小的页,同时也将内存划分为页框,通过页表来进行地址映射。
实验结果显示,分页管理可以有效地利用内存资源,提高系统的性能和可用性。
通过本次操作系统实验,我对操作系统的原理和实践有了更深入的理解。
在实验中,我了解了进程管理、文件系统和内存管理的基本概念和功能,并通过实验来掌握相关的操作和原理。
通过实验的过程,我深刻地认识到操作系统对计算机的重要性,以及良好的操作系统设计对系统性能的影响。
操作系统课程实验报告
一、实验概述实验名称:操作系统课程实验实验目的:1. 理解操作系统基本概念、原理及功能;2. 掌握操作系统的基本操作和应用;3. 提高实际操作能力和分析问题、解决问题的能力。
实验内容:1. 操作系统基本概念及原理的学习;2. 操作系统基本操作的应用;3. 实验项目:文件读写、多进程、多线程。
二、实验环境操作系统:Windows 10编译器:Visual Studio语言:C/C++实验平台:Windows 10系统下的虚拟机三、实验过程1. 操作系统基本概念及原理的学习操作系统是计算机系统中最基本的系统软件,负责管理计算机硬件资源、提供用户接口以及执行各种应用程序。
在实验过程中,我们学习了以下基本概念及原理:(1)进程管理:进程是操作系统能够进行运算处理的独立单位,具有动态性、并发性、异步性和独立性等特点。
进程管理主要包括进程的创建、调度、同步、通信和终止等。
(2)内存管理:内存管理是操作系统核心功能之一,主要负责分配、回收、保护和管理内存资源。
内存管理方式有分页、分段、段页式等。
(3)文件系统:文件系统是操作系统用于存储、检索和管理文件的机制。
文件系统主要包括目录结构、文件属性、文件操作等。
(4)设备管理:设备管理负责管理计算机系统中的各种外部设备,包括输入、输出和存储设备。
设备管理主要包括设备分配、设备驱动程序、缓冲区管理等。
2. 操作系统基本操作的应用在实验过程中,我们应用以下基本操作:(1)进程管理:创建、调度、同步、通信和终止进程。
(2)内存管理:分配、回收、保护和管理内存资源。
(3)文件系统:创建、删除、读写文件,实现目录结构的管理。
(4)设备管理:分配、回收、控制和管理设备。
3. 实验项目:文件读写、多进程、多线程(1)文件读写实验实验目的:掌握文件的基本操作,实现文件的创建、打开、读取、写入和关闭。
实验步骤:① 创建一个文件,命名为“test.txt”。
② 打开文件,以读写模式。
2012 操作系统实验1
《操作系统》课程实验报告实验名称进程同步算法的实现模拟实验序号 1姓名刘徐俊系院专业计算机班级10网络1 学号实验日期2012-11-01 指导教师阮鸥成绩一、实验目的进程同步问题是OS的核心内容。
本实验要求用高级语言编写和调试一个程序来模拟进程同步算法。
通过本实验可以加深理解有关同步技术、进程控制块、进程队列的概念,并体会和了解同步(生产者—消费者问题)算法的具体实施办法。
二、实验内容与要求(1) 模拟实现生产者—消费者问题。
Get、put二进程共用缓冲区s(大小为每次只存放一个记录)。
Get负责输入记录到缓冲区s,put负责把t中的记录取出打印。
(2) 设计进程PCB结构和三种进程状态的队列,可以实现PCB队列的插入、删除、排序功能。
(3) 设计各进程使用的信号灯,画出各进程的P、V操作实现流程图;(4)实现进程同步,完成记录的正常输出,要能够通过程序运行表现出对缓冲区s的进行临界区互斥和进程同步的思想(最好能记录或输出二个进程的实时状态和变化过程、二个进程队列的实时内容、几个缓冲区中实时内容,输出到屏幕上,这个过程同时记录在一个文本文件中);(5) 编程语言不限制,tc2.0,vc6.0,.net,java都可以。
三、实验设备地点:科技楼网络实验室602硬件环境:Intel Pentium Processor 1.8G ,512M内存,windows 操作系统软件环境:win7系统vc++6.0四、实验步骤(1)模拟实现生产者—消费者问题。
Get、put二进程共用缓冲区s(大小为每次只存放一个记录)。
Get负责输入记录到缓冲区s,put负责把t中的记录取出打印。
实验代码:#include <windows.h>#include <stdio.h>#include <producerThread.h>#include <consumerThread.h>DWORD WINAPI producerThread(LPVOID lp){int n=(int)lp;while(empty>0){EnterCriticalSection(&CriticalSection);printf("producer produce %dth good\n", n, T_MAX-empty+1);empty--;LeaveCriticalSection(&CriticalSection);Sleep(500);}void MyThread(){ HANDLE get ,put;get = CreateThread(NULL,NULL,producerThread,(void*)1,NULL,NULL);put = CreateThread(NULL,NULL,producerThread,(void*)2,NULL,NULL);int main(int argc, char* argv[]){//创建临界区对象InitializeCriticalSection(&CriticalSection);2湖北工业大学 计算机学院网络工程系·2009年编制3if(empty>0)MyThread();Sleep(50000);//删除临界区对象 DeleteCriticalSection(&CriticalSection);return 0;}main(){int full=0;int empty=n;int mutex=1;cobeginp1();p2();p3();...pm();c1();c2();c3();...ck();coend}producer(){while(生产未完成)...生产一个产品;P(empty);p(mutex);送一个产品到缓冲区;v(mutex);v(full);}}consumer(){while(还要继续消费){p(full);p(mutex);从有界缓冲区中取产品;v(mutex);v(empty);...消费一个产品;}}具体实现程序:#include "stdafx.h"#include "windows.h"4湖北工业大学 计算机学院网络工程系·2009年编制5 #include "string.h"char temp; //中间缓存DWORD WINAPI Get(LPVOID lp){ //将要打印的字符取出并一个一个的存入缓存char * sp;sp=( char *) lp;while(1) //字符结束标志'\0'{ temp=*sp;if(temp=='\0') return 0;sp++;Sleep(500);}return 0;}DWORD WINAPI Put(LPVOID lp){ //将字符从缓存里面取出,一次一个printf("output the string:");while(temp!='\0'){printf("%c ",temp);Sleep(500);}putchar('\n');return 0;}void Mythread(char sp []){ //建立两个并行线程HANDLE handle1,handle2;handle1 = CreateThread(NULL,NULL,Get,(void*)sp,NULL,NULL);handle2 = CreateThread(NULL,NULL,Put,NULL,NULL,NULL);}int main(int argc, char* argv[]){char sp[100]={'\0'};printf("input the string to print:");scanf("%s",sp);Mythread(sp);Sleep(10000);printf("the output come to teh end !\n");return 0;}(2)设计进程PCB结构和三种进程状态的队列,可以实现PCB队列的插入、删除、排序功能。
操作系统实验报告
操作系统实验报告班级:软件1042姓名:******学号:101*****指导老师:***老师安徽工业大学工商学院2012年12月目录实验一 WINDOWS进程初识 (2)1、实验目的 (2)2、实验内容和步骤 (2)3、实验结论 (4)实验二进程管理 (4)1、实验目的 (4)2、实验内容和步骤 (4)3、实验结论 (9)实验三进程同步的经典算法 (9)1、实验目的 (9)2、实验内容和步骤 (10)3、实验结论 (12)实验四存储管理 (12)1、实验目的 (12)2、实验内容和步骤 (12)3、实验结论 (19)实验一WINDOWS进程初识1、实验目的(1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。
(2)掌握WINDOWS API的使用方法。
(3)编写测试程序,理解用户态运行和核心态运行。
2、实验内容和步骤(1)编写基本的Win32 Consol Application步骤1:登录进入Windows,启动VC++ 6.0。
步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。
创建一个新的控制台应用程序工程。
步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。
步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。
编译成可执行文件。
步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe运行结果 (如果运行不成功,则可能的原因是什么?) :刚开始由于命令输入有误经改正后,正确调试出结果(2)计算进程在核心态运行和用户态运行的时间步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。
操作系统课程实验报告
操作系统课程实验报告一、实验目的操作系统是计算机系统中最核心的软件之一,它负责管理计算机的硬件资源和软件资源,为用户提供一个方便、高效、安全的工作环境。
本实验的目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握操作系统的常用命令和操作方法,提高解决实际问题的能力。
二、实验环境操作系统:Windows 10开发工具:Visual Studio Code三、实验内容1、进程管理观察进程的创建、终止和状态转换。
使用任务管理器查看系统中的进程信息,包括进程 ID、CPU 使用率、内存占用等。
通过编程实现创建和终止进程的功能。
2、内存管理了解内存的分配和回收机制。
使用 Windows 系统提供的性能监视器查看内存的使用情况。
编程实现简单的内存分配和释放算法。
3、文件系统管理熟悉文件和目录的操作,如创建、删除、复制、移动等。
研究文件的属性,如文件名、文件大小、创建时间等。
通过编程实现文件的读写操作。
4、设备管理认识设备的驱动程序和设备管理策略。
查看系统中的设备信息,如磁盘驱动器、打印机等。
模拟设备的中断处理过程。
四、实验步骤1、进程管理实验打开任务管理器,观察当前系统中正在运行的进程。
可以看到进程的名称、进程 ID、CPU 使用率、内存占用等信息。
使用 C++语言编写一个简单的程序,创建一个新的进程。
在程序中,使用`CreateProcess`函数来创建新进程,并设置进程的属性和参数。
编写另一个程序,用于终止指定的进程。
通过获取进程 ID,然后使用`TerminateProcess`函数来终止进程。
2、内存管理实验打开 Windows 性能监视器,选择“内存”选项卡,可以查看内存的使用情况,包括物理内存、虚拟内存、页面文件等的使用量和使用率。
编写一个 C 程序,使用动态内存分配函数(如`malloc`和`free`)来分配和释放内存。
在程序中,不断分配和释放一定大小的内存块,观察内存的使用情况和性能变化。
操作系统实验报告(2)
计算机实验报告(2)操作系统部分一、基本要求和内容1.了解操作系统的基本功能.2.认识WINDOWS桌面的各部分组成,掌握基本的桌面操作.3.掌握各种基本操作对象的操作方法.4.学会使用WINDOWS帮助.5.了解基本的DOS命令和基本的命令行操作方法.6.熟练掌握文件操作方法.7.掌握对图标的操作方法(移动/拖曳/单击/双击/右击等等).8.熟悉资源管理器窗口和”我的电脑”(“计算机”)窗口.9.掌握启动控制面板的方法,了解控制面板的主要功能,掌握使用控制面板对软硬件进行设置的方法。
10.掌握“运行”对话框的使用方法。
11.了解“任务管理器”的简单使用方法。
12.熟悉“画图”“记事本”“计算器”“写字板”等常用应用程序。
13.开始POWERPOINT的基本使用.二、通过上机实验解决下列问题1. CTRL+ALT+DEL 组合键的功能是:打开【任务管理器】窗口2.全角和半角的区别是:半角是一个字符,全角是两个字符3. CTRL+A组合键的功能是:全部选中CTRL+C组合键的功能是:复制CTRL+V组合键的功能是:粘贴CTRL+X组合键的功能是:剪切CTRL+Z组合键的功能是: 撤销ALT+PRINTSCREEN组合键的功能是:复制当前窗口、对话框或其他对象到剪贴板中任务栏隐藏时通过什么组合键可以看到任务栏:Ctrl+Alt+Del进行窗口切换的组合键是:ALT+Tab4.“画图”应用程序默认保存文件类型是:*.png“记事本”应用程序默认保存文件类型是: *.txt.DOC是什么文件类型Word文档.EXE是什么文件类型可执行文件(程序文件)5.鼠标的基本操作方法包括:指向、单击、双击和拖动鼠标指针附近有漏沙钟表示当前的状态是: 沙漏是等待,因为程序先是从硬盘上读取,然后再到内存,芯片在其期间进行运算,再没真正的打开程序时,系统认为它没正真的启动6.资源管理器左下角窗格(即”文件夹”窗口)显示的是:系统中的所有资源以分层树型的结构显示出来7.一般情况下,对文件进行重命名时,不应该修改文件的扩展名,因为: 如果修改了后缀名则会导致文件属性更改,文件无法打开8.文件的属性主要包括哪些:“只读”、“存档”、“隐藏”9.选择多个连续的文件可以采用哪些方法:使用鼠标先选定第一个文件或文件夹,然后按住Shift键,用鼠标单击最后一个文件或文件夹,这样在第一个对象和最后一个对象之间的所有文件或文件夹将全部被选中,包括第一个和最后一个文件或文件夹。
2012-操作系统实验内容
实验一进程的创建和控制1、实验目的通过进程的创建、撤销和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。
2、实验内容(1)了解系统调用fork()、exec()、exit()、和waitpid()的功能和实现过程。
(2)编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符串“parent:”和自己的标识数,而子进程则重复显示字符串“child:”和自己的标识数。
(3)编写一段程序,使用系统调用fork()来创建一个子进程。
紫禁城通过系统调用exec()更换自己的执行代码,显示新的代码“new program.”后,调用exit()结束。
而父进程则调用waitpid()等待子进程结束,并在子进程结束后显示子进程的标示符,然后正常结束。
实验二使用动态优先权的进程调度算法模拟1、实验目的通过动态优先权算法的模拟加深对进程概念进程调度过程的理解。
2、实验内容(1) 用C语言来实现对N个进程采用动态优先权优先算法的进程调度。
(2) 每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:•进程标识数ID。
•进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。
•进程已占用的CPU时间CPUTIME。
•进程还需占用的CPU时间ALLTIME。
当进程运行完毕时,ALLTIME变为0。
•进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,将进入阻塞状态。
•进程被阻塞的时间BLOCKTIME,表示已足赛的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。
•进程状态START。
•队列指针NEXT,用来将PCB排成队列。
(3) 优先数改变的原则:•进程在就绪队列中呆一个时间片,优先数加1。
•进程每运行一个时间片,优先数减3。
(4) 假设在调度前,系统中有5个进程,它们的初始状态如下:具体格式如下:RUNNING PROG:iREADY-QUEUE:-〉id1-〉id2BLOCK-QUEUE:-〉id3-〉id4= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = == = =ID 0 1 2 3 4PRIORITY P0 P1 P2 P3 P4CUPTIME C0 C1 C2 C3 C4ALLTIME A0 A1 A2 A3 A4STARTBLOCK T0 T1 T2 T3 T4BLOCKTIME B0 B1 B2 B3 B4STA TE S0 S1 S2 S3 S4实验三使用动态分区分配方式的模拟1、实验目的了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。
2012级操作系统实验报告
哈尔滨学院实验报告课程名称:计算机操作系统专软件工程业:级:班128-号:学*********名:***教务处制实验一进程管理【实验目的与要求】⒈加深对进程概念的理解,明确进程与程序的区别。
⒉掌握Linux进程创建及撤销的方法,进一步认识并发执行的实质。
⒊掌握Linux系统下守护进程的创建方法。
【实验原理】⒈ Linux进程管理命令⑴进程查看⑵进程终止⑶进程优先级设置⒉ Linux进程控制函数⑴创建和修改进程⑵设置进程属性⑶获取进程属性⑷进程的退出⒊ Linux守护进程⑴独立启动守护进程⑵超级守护进程⑶守护进程的编写流程守护进程的编写遵循特定的流程,主要包括五个步骤:Step⒈创建子进程,退出父进程Step⒉在子进程中创建新会话Step⒊改变当前目录为根目录Step⒋重设文件权限掩码Step⒌关闭文件描述符【实验主要仪器与材料】⒈带Linux操作系统的PC机⒉ GCC编译器【实验内容】⒈获取进程信息通过管理命令,获取系统当前执行进程的信息,包括进程名称与ID、PID 和PGID等。
⒉创建进程编程程序,实现父进程创建一个子进程,返回后父子进程都分别循环输出字符串“I am parent.”或“I am child.”5次,每输出一次延时1秒(sleep(1)),然后进入下一次循环。
观察并分析运行结果。
然后将程序改为父子进程同步执行:子进程循环输出字符串“I am child.”5次,然后父进程再循环输出字符串“I am parent.”5次。
再次观察并分析运行结果。
【实验步骤及实验结果分析】⒈实验内容1通过进程实现及验证父进程及子进程的id号的命令ps -lg⒉实验内容2⑴实现父进程创建一个子进程,返回后父子进程都分别循环输出字符串“I am parent.”或“I am child.”5次,每输出一次延时1秒(sleep(1)),然后进入下一次循环。
#include<sys/types.h>#include<unistd.h>#include<stdio.h>int main(){pid_t pt;printf("Hello world!\n");int i;pt=fork();for(i=0;i<5;i++){if(pt==-1)printf("Fork error.\n");else if{printf("I am a parent.\n");Sleep(1);}else{printf("I am a child.\n");Sleep(1);}}return 0;}⑵父子进程同步执行:子进程循环输出字符串“I am child.”5次,然后父进程再循环输出字符串“I am parent.”5次。
操作系统实验报告
操作系统实验报告引言:操作系统是计算机系统中的重要组成部分,它负责管理计算机的硬件资源,控制和协调软件运行。
在操作系统的设计和开发过程中,实验是锻炼学生理论与实践能力的重要方式。
本篇报告将介绍我们在操作系统实验中进行的研究和实践,以及所取得的成果和体会。
一、实验背景在操作系统实验课程中,我们的任务是设计和实现一个简单的操作系统。
通过这个实验,我们能够深入理解操作系统的内部机制,学习操作系统的设计原则和实现技术。
二、实验内容1. 系统引导(Boot)过程在操作系统启动过程中,首先需要进行系统引导。
我们设计了一个引导程序,该程序将在计算机开机时加载到内存中,并负责引导操作系统的加载和初始化。
这个过程需要对计算机硬件的特性有一定的了解,并通过编程来实现。
2. 进程管理操作系统的一个核心功能是管理进程。
我们实现了一个简单的进程管理系统,包括进程的创建、终止、调度等功能。
通过实现这些功能,我们加深了对操作系统进程管理的理解,也锻炼了编程和调试的能力。
3. 内存管理操作系统需要管理计算机的内存资源,以便为进程提供必要的内存空间。
我们设计了一个简单的内存管理系统,能够分配和回收内存空间,并实现了内存保护和虚拟内存等功能。
通过这个实验,我们了解了内存管理的基本原理和技术。
4. 文件系统文件系统是操作系统的另一个重要组成部分。
我们实现了一个简单的文件系统,能够对文件进行读写操作,并支持文件的创建、删除、重命名等功能。
这个实验使我们熟悉了文件系统的组织结构和操作接口。
三、实验成果通过实验,我们成功地设计并实现了一个简单的操作系统。
该系统具有基本的引导过程、进程管理、内存管理和文件系统功能。
我们对系统的稳定性和性能进行了测试,并得到了令人满意的结果。
在实验过程中,我们不仅学到了操作系统的知识,还培养了团队合作和解决问题的能力。
每位成员都充分发挥自己的优势,共同完成了这个实验项目。
四、实验体会通过这个操作系统实验,我们深入了解了操作系统的工作原理和设计方法。
操作系统课程实验报告
操作系统课程实验报告操作系统课程实验报告一、引言操作系统是计算机系统中最基础的软件之一,扮演着管理计算机硬件和软件资源的重要角色。
为了更好地理解操作系统的工作原理和实践操作系统的相关技术,我们在本学期的操作系统课程中进行了一系列的实验。
二、实验一:进程管理在本实验中,我们学习了进程管理的基本概念和实现方法。
通过编写代码,我们实现了一个简单的进程管理系统。
在这个系统中,我们可以创建、销毁和调度进程,并且实现了进程间的通信和同步机制。
通过这个实验,我们深入了解了进程的创建、调度和通信机制,以及进程的状态转换和资源管理。
三、实验二:内存管理内存管理是操作系统中非常重要的一部分。
在这个实验中,我们学习了内存管理的基本原理和实现方法。
通过编写代码,我们实现了一个简单的内存管理系统。
在这个系统中,我们可以分配和释放内存块,并且实现了虚拟内存和页面置换算法。
通过这个实验,我们深入了解了内存的分配和释放机制,以及虚拟内存的概念和实现。
四、实验三:文件系统文件系统是计算机系统中用于管理和组织文件的一种机制。
在这个实验中,我们学习了文件系统的基本概念和实现方法。
通过编写代码,我们实现了一个简单的文件系统。
在这个系统中,我们可以创建、读取和写入文件,并且实现了文件的目录结构和权限控制。
通过这个实验,我们深入了解了文件的组织和管理机制,以及文件的访问和保护机制。
五、实验四:设备管理设备管理是操作系统中负责管理计算机硬件设备的一部分。
在这个实验中,我们学习了设备管理的基本原理和实现方法。
通过编写代码,我们实现了一个简单的设备管理系统。
在这个系统中,我们可以管理设备的分配和释放,并且实现了设备的互斥和同步机制。
通过这个实验,我们深入了解了设备的管理和调度机制,以及设备的并发和互斥机制。
六、实验总结通过这一系列的实验,我们对操作系统的工作原理和实践操作系统的相关技术有了更深入的了解。
我们学习了进程管理、内存管理、文件系统和设备管理的基本概念和实现方法,并且通过编写代码实现了简单的操作系统功能。
操作系统实验报告总结
操作系统实验报告总结操作系统实验报告总结引言操作系统是计算机系统中非常重要的一个组成部分,它负责管理计算机硬件和软件资源,为用户提供一个良好的工作环境。
通过操作系统实验,我们深入了解了操作系统的原理和功能,并通过实践掌握了操作系统的基本操作和管理技巧。
本文将对我们在操作系统实验中的学习和收获进行总结。
实验一:操作系统的安装与配置在本次实验中,我们学习了如何安装和配置操作系统。
通过实践,我们了解了操作系统的安装过程和常见的配置选项。
在安装过程中,我们需要选择适合我们计算机硬件的操作系统版本,并进行相应的设置。
通过这个实验,我们对操作系统的安装和配置有了更深入的了解。
实验二:进程管理进程是操作系统中的一个重要概念,它代表了一个正在运行的程序。
在本次实验中,我们学习了进程的创建、调度和终止等操作。
通过实践,我们掌握了如何使用操作系统提供的命令和工具来管理进程,如查看进程列表、创建新进程、终止进程等。
这些操作对于提高系统的资源利用率和运行效率非常重要。
实验三:内存管理内存管理是操作系统中的另一个重要概念,它负责管理计算机的内存资源。
在本次实验中,我们学习了内存的分配和释放、虚拟内存的管理等操作。
通过实践,我们了解了操作系统如何通过页表、地址映射等技术来管理内存资源。
这些知识对于保证系统的稳定性和性能至关重要。
实验四:文件系统文件系统是操作系统中用于管理文件和目录的一种机制。
在本次实验中,我们学习了文件系统的创建、读写文件等操作。
通过实践,我们掌握了如何使用操作系统提供的命令和工具来管理文件和目录,如创建文件、复制文件、删除文件等。
这些操作对于有效地组织和管理文件非常重要。
实验五:设备管理设备管理是操作系统中的另一个重要模块,它负责管理计算机的硬件设备。
在本次实验中,我们学习了设备的初始化、打开、关闭等操作。
通过实践,我们了解了操作系统如何通过设备驱动程序来管理硬件设备。
这些知识对于保证系统的稳定性和性能至关重要。
操作系统实验报告
学生学号0120910680115 实验课成绩武汉理工大学学生实验报告书实验课程名称操作系统开课学院计算机科学与技术学院指导老师姓名向广利学生姓名何文明学生专业班级软件0901班2011 —2012 学年第一学期实验课程名称:操作系统实验项目名称Linux键盘命令和vi 实验成绩实验者何文明专业班级软件0901 组别同组者实验日期年月日第一部分:实验分析与设计(可加页)1、实验内容描述(问题域描述)Linux键盘命令和vi要求:掌握Linux系统键盘命令的使用方法。
2、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)VI编辑器的常见命令:vi filename :打开或新建文件,并将光标置于第一行首vi +n filename :打开文件,并将光标置于第n行首vi + filename :打开文件,并将光标置于最后一行首vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filenamevi filename....filename :打开多个文件,依次进行编辑三、主要仪器设备及耗材Ubuntu操作体统Vi编辑器第二部分:实验调试与结果分析(可加页)1、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)2、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)PS:显示进程状态Free 显示系统中已用空闲内存数量 Rm:删除文件或目录Ls:显示文件属性和目录内容3、实验小结、建议及体会通过这次实验对Linux操作系统有了进一步的了解。
初步掌握了一些Linux系统常用的命令。
同时也熟悉了在Linux常用到的Vi编辑器。
对自己的学习有很大的帮助。
实验课程名称:操作系统实验项目名称Linux下C编程实验成绩实验者何文明专业班级软件0901 组别同组者实验日期年月日第一部分:实验分析与设计(可加页)1、实验内容描述(问题域描述)Linux下的C编程要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。
操作系统实验报告
技术资料常州大学操作系统课程实验报告姓名 xxx专业班级计算机科学与技术学号 xxxxxx指导老师 xxx成绩实验时间2012年4月23日——2012年5月7日实验一 Windows XP 系统管理一实验目的1) 了解和学习Windows系统管理工具及其使用;2) 熟悉Windows系统工具的内容和应用;3)熟悉Windows操作系统的应用环境。
二实验环境需要准备一台运行Windows XP操作系统的计算机。
三背景知识Windows XP的“管理工具”中集成了许多系统管理工具,利用这些工具,管理员可以方便地实现各种系统维护和管理功能。
这些工具都集中在“控制面板”的“管理工具”选项下,用户和管理员可以很容易地对它们操作和使用。
在默认情况下,只有一些常用工具——如服务、计算机管理、事件查看器、数据源 (ODBC) 、性能和组件服务等——随Windows XP 系统的安装而安装。
四实验内容与步骤为了帮助用户管理和监视系统,Windows XP提供了多种系统管理工具,其中最主要的有计算机管理、事件查看器和性能监视等。
步骤1:登录进入Windows XP。
步骤2:在“开始”菜单中单击“设置”-“控制面板”命令,双击“管理工具”图标。
在本地计算机“管理工具”组中,有哪些系统管理工具,基本功能是什么:1) 本地安全策略:查看和修改本地安全策略,如用户权限和审核策略2) Internet信息服务:管理 IIS,Internet 和 Intranet 站点的 WEB服务器3) 服务:启动和停止服务4)计算机管理:管理磁盘以及使用其他系统工具来管理本地或远程的计算机5)事件查看器:显示来自于 Windows 和其他程序的监视与排错消息6)数据源ODBC:添加、删除、以及配置 ODBC 数据源和驱动程序7)性能:显示系统性能图表以及配置数据日志和警报8)组件服务:配置和管理 COM+ 应用程序1. 计算机管理使用“计算机管理”可通过一个合并的桌面工具来管理本地或远程计算机,它将几个Windows XP管理实用程序合并到一个控制台目录树中,使管理员可以轻松地访问特定计算机的管理属性和工具。
操作系统实验报告
操作系统实验报告操作系统是计算机科学中十分重要的一门课程,本次实验是关于操作系统的,通过实验,我们可以更深入地了解操作系统的相关知识和操作。
本篇文章将着重介绍本次操作系统实验的内容和实验过程中的收获。
一、实验内容本次实验内容主要涉及操作系统的进程、线程和进程同步三部分。
具体内容包括:1. 进程的创建和管理2. 线程的创建和管理3. 进程同步的实现在实验过程中,我们将分别使用C语言和Linux操作系统实现上述功能。
二、实验过程1. 进程的创建和管理在这一部分实验中,我们要创建多个进程,实现进程的调度和管理功能。
我们采用了Linux系统下的fork()函数,用于创建子进程。
在程序运行时,首先创建一个父进程,然后使用fork()函数创建四个子进程,每个子进程都有自己的进程号(pid),并在屏幕上输出该进程号以示区分。
为了实现进程的调度功能,我们在代码中加入了sleep()函数,用于将进程挂起一段时间,然后再轮流执行其他进程。
2. 线程的创建和管理在这一部分实验中,我们使用了C语言的POSIX线程库pthread.h,实现多线程的功能。
同样地,我们采用了Linux系统下的fork()函数来创建线程。
在代码运行时,我们创建了两个线程,并在屏幕上输出线程号(tid)以示区分。
为了实现线程的调度和管理功能,我们在代码中加入了pthread_join()函数,用于等待线程的执行完成。
3. 进程同步的实现在这一部分实验中,我们使用了Linux系统下的进程同步工具——信号量(semaphore)。
在代码中,我们使用sem_init()函数创建信号量,使用sem_wait()函数阻塞进程或线程,使用sem_post()函数释放进程或线程。
为了更好地理解信号量的工作原理,我们将代码分为生产者和消费者两部分,其中生产者用于向缓冲区添加数据,消费者则用于删除数据。
在这个过程中,我们需要使用信号量控制生产者和消费者的数量,避免出现生产过多或消费过多的情况。
操作系统实验报告
操作系统实验报告
一、实验目的
1. 学习操作系统中进程管理的相关知识和技术,并掌握多进程并发执行的原理与方法;
2. 掌握多进程之间的同步与通信技术;
3. 进一步理解操作系统中进程的各个状态变化过程。
二、实验内容
1. 编写一个简单的多进程模拟系统,实现多个进程在同一时间并发执行;
2. 实现进程之间的同步,避免进程之间的竞态条件;
3. 实现进程之间的通信,可以通过管道等方式进行。
三、实验步骤
1. 设计进程模型,分析进程的状态转换图,确定各个状态的处理方式;
2. 编写进程控制块(PCB)类,定义进程的各种属性和处理方法;
3. 实现进程状态的转换和进程之间的同步机制;
4. 实现进程之间的通信的方式和机制;
5. 设计并执行多个进程并发执行的测试用例;
6. 分析测试结果并进行优化和改进。
四、实验结果
本次实验编写了一个简单的模拟多进程操作系统,实现了多个进程并发执行、进程之间的同步和通信等功能。
通过编写不同的测试用例对系统进行了测试,验证了系统的正确性和可靠性,测试结果证明了系统能够有效地解决进程之间的竞态条件问题,并实现良好的并发执行效果。
五、实验感想
本次实验让我更加深入地了解了操作系统中进程管理的相关知识和技术,学习了多进程并发执行的原理与方法,并掌握了进程之间的同步与通信技术。
通过实验,我进一步理解了操作系统中进程的各个状态变化过程,在实践中深入掌握了进程控制块的定义和处理方法,也收获了许多编程技巧和思维方式。
通过不断调试和改进进程模型,我不断提高了自己的实践能力和解决问题的能力。
总之,本次实验让我得到了很大的启示和帮助,增强了自己的实践经验和能力。
操作系统进程的创建与控制实验报告
7、熟悉进程的睡眠、同步、撤消等进程控制方法
二、实验内容
1)UNIX/LINUX及其使用环境
1、用vi编写一个简单的、显示"Hello,World!"的C程序,用gcc编译并观察编译后的结果
2、利用gdb调试该程序
3、运行生成的可执行文件。
2)进程创建:
1、编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。
操作系统实验报告
实验一进程的创建和控制
班级:12计算机12班
学号:127401219
姓名:刘艳仙
成绩:
2013年6月17日
一、实验目的
1、掌握进程的概念,明确进程的含义
2、复习C语言程序基本知识
3、练习并掌握UNIX提供的vi编辑器来编译C程序
4、学会利用gcc、gdb编译、调试C程序
5、认识并了解并发执行的实质
操作系统实验报告实验一进程的创建和控制12计算机12实验目的1掌握进程的概念明确进程的含义2复习c语言程序基本知识3练习并掌握unix提供的vi编辑器来编译c程序4学会利用gccgdb编译调试c程序5认识并了解并发执行的实质6掌握进程另外的创建方法7熟悉进程的睡眠同步撤消等进程控制方法实验内容1unixlinux及其使用环境1用vi编写一个简单的显示helloworld
#include <stdio.h>
#inlude<stdlib.h>
#include<unistd.h>
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
哈尔滨学院实验报告课程名称:计算机操作系统专业软件工程:级班:128-号学:12031801名姓:常燕如教务处制实验一进程管理【实验目的与要求】⒈加深对进程概念的理解,明确进程与程序的区别。
⒉掌握Linux进程创建及撤销的方法,进一步认识并发执行的实质。
⒊掌握Linux系统下守护进程的创建方法。
【实验原理】⒈ Linux进程管理命令⑴进程查瞧⑵进程终止⑶进程优先级设置⒉ Linux进程控制函数⑴创建与修改进程⑵设置进程属性⑶获取进程属性⑷进程的退出⒊ Linux守护进程⑴独立启动守护进程⑵超级守护进程⑶守护进程的编写流程守护进程的编写遵循特定的流程,主要包括五个步骤:Step⒈创建子进程,退出父进程Step⒉在子进程中创建新会话Step⒊改变当前目录为根目录Step⒋重设文件权限掩码Step⒌关闭文件描述符【实验主要仪器与材料】⒈带Linux操作系统的PC机⒉ GCC编译器【实验内容】⒈获取进程信息通过管理命令,获取系统当前执行进程的信息,包括进程名称与ID、PID与PGID等。
⒉创建进程编程程序,实现父进程创建一个子进程,返回后父子进程都分别循环输出字符串“I am parent、”或“I am child、”5次,每输出一次延时1秒(sleep(1)),然后进入下一次循环。
观察并分析运行结果。
然后将程序改为父子进程同步执行:子进程循环输出字符串“I am child、”5次,然后父进程再循环输出字符串“I am parent、”5次。
再次观察并分析运行结果。
【实验步骤及实验结果分析】⒈实验内容1通过进程实现及验证父进程及子进程的id号的命令ps -lg⒉实验内容2⑴实现父进程创建一个子进程,返回后父子进程都分别循环输出字符串“I am parent、”或“I am child、”5次,每输出一次延时1秒(sleep(1)),然后进入下一次循环。
#include<sys/types、h>#include<unistd、h>#include<stdio、h>int main(){pid_t pt;printf("Hello world!\n");int i;pt=fork();for(i=0;i<5;i++){if(pt==-1)printf("Fork error、\n");else if{printf("I am a parent、\n");Sleep(1);}else{printf("I am a child、\n");Sleep(1);}}return 0;}⑵父子进程同步执行:子进程循环输出字符串“I am child、”5次,然后父进程再循环输出字符串“I am parent、”5次。
#include<sys/types、h>#include<unistd、h>#include<stdio、h>int main(){pid_t pt;printf("Hello world!\n");int i;pt=fork();for(i=0;i<5;i++){if(pt==-1)printf("Fork error、\n");else if{printf("I am a parent、\n");}else{printf("I am a child、\n");}}return 0;}【思考题】⒈程序与进程的区别。
(1)程序就是动态的,程序就是静态的:程序就是有序代码的集合;进程就是程序的执行。
通常进程不可在计算机之间迁移;而程序通常对应着文件、静态与可以复制。
(2)进程就是暂时的,程序就是永久的:进程就是一个状态变化的过程,程序可长久保存。
(3)进程与程序的组成不同:进程的组成包括程序、数据与进程控制块(即进程状态信息)。
(4)进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。
⒉Linux操作系统下有哪些进程类型。
交互进程; 批处理进程; 守护进程;⒊进程创建函数fork与vfork的区别。
(1)fork()用于创建一个新进程。
由fork()创建的子进程就是父进程的副本。
即子进程获取父进程数据空间,堆与栈的副本。
父子进程之间不共享这些存储空间的部分。
而vfork()创建的进程并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec(或exit)于就是也就不会存放该地址空间。
相反,在子进程调用exec或exit之前,它在父进程的空间进行。
(2)vfork()与fork()另一个区别就就是:vfork保证子进程先运行,在调用exec或exit之前与父进程数据就是共享的,在它调用exec或exit之后父进程才可能被调度运行。
(3)vfork与fork之间的还有一个区别就是:vfork保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。
如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。
⒋进程的退出函数有哪些?有何区别?C程序就是如何被启动终止的?exit函数; return函数; abort函数_exit函数。
exit与_exit函数用于正常终止一个程序exit先执行一些清除处理、然后进入内核清除操作包括调用执行各终止处理程序,关闭所有标准I/O流_exit立即进入内核abort函数用于异常终止一个程序exit就是一个函数,有参数,把控制权交给系统return就是函数执行完后的返回,将控制权交给调用函数实验二进程通信【实验目的与要求】⒈了解基于信号的进程通信机制。
⒉熟悉LINUX系统中进程之间软中断通信的基本原理。
【实验原理】一、信号⒈信号的基本概念⒉信号的发送⒊对信号的处理二、所涉及的中断调用⒈kill()⒉signal()⒊wait()⒋waitpid()⒌lockf()【实验主要仪器与材料】⒈带Linux操作系统的PC机⒉GCC编译器【实验内容】⒈编写程序:用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child process1 is killed by parent!Child process2 is killed by parent!父进程等待两个子进程终止后,输出如下的信息后终止:Parent process is killed!⒉分析利用软中断通信实现进程同步的机理。
【实验步骤及实验结果分析】⒈编写程序:用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child process1 is killed by parent!Child process2 is killed by parent!父进程等待两个子进程终止后,输出如下的信息后终止:Parent process is killed!⒉对软中断信号的处理分三种情况进行:(1)如果进程收到的软中断就是一个已决定要忽略的信号,不做处理便立即返回。
(2)进程收到软中断后便退出。
(3)执行用户设置的软中断处理程序。
【思考题】实验内容的参考程序如下,请仔细阅读、调试、分析,回答下述问题:#include <stdio、h>#include <signal、h>#include <unistd、h>#include <stdlib、h>#include <sys/wait、h>void waiting(),stop();int wait_mark;int main(){int p1, p2, stdout=1;while((p1=fork()) == -1); /*创建子进程p1*/if (p1 > 0){while((p2=fork()) == -1); /*创建子进程p2*/if(p2 > 0){wait_mark=1;signal(SIGINT, stop); /*接收到^c信号,转stop*/waiting();kill(p1, 16); /*向p1发软中断信号16*/kill(p2, 17); /*向p2发软中断信号17*/wait(0); /*同步*/wait(0);printf("Parent process is killed!\n");exit(0);}else{wait_mark=1;signal(17, stop); /*接收到软中断信号17,转stop*/waiting();lockf(stdout, 1, 0);printf("Child process 2 is killed by parent!\n");lockf(stdout, 0, 0);exit(0);}}else{wait_mark=1;signal(16, stop); /*接收到软中断信号16,转stop*/waiting();lockf(stdout, 1, 0);printf("Child process 1 is killed by parent!\n");lockf(stdout, 0, 0);exit(0);}return 0;}void waiting(){while(wait_mark != 0);}void stop(){wait_mark=0;}⒈参考程序段前面部分用了两个wait(0),它们起什么作用?作用:wait(0)函数作用就是等待子进程结束,父进程有两个子进程,所以两个wait函数。
⒉参考程序段中每个进程退出时都用了语句exit(0),为什么?作用:就是为了让子进程正常自我终止,正常退出。
⒊参考程序的运行结果就是什么?Parent process is killed!⒋参考程序就是否符合实验要求?为什么?不符合。
原因:p1,p2都会捕捉中断信号。
对于父进程,当它捕捉到中断信号时就会转向指定的函数stop();函数,之后父进程被唤醒,从被中断处继续执行。
对于子进程,由于没有给它们指定的收到中断信号后的动作,就会执行默认的动作,结束自己。
所以当我们发出中断信号后,父进程按预计的方式正常执行,而p1,p2自己结束了自己,所以不会有预计的结果。