操作系统实验-进程控制

合集下载

操作系统进程控制实验报告

操作系统进程控制实验报告

操作系统进程控制实验报告

硬件环境:处理器:Intel(R) Core(TM) i5-3210M CPU @2.50GHz 2.50GHz

安装内存:4.00GB

系统类型:64位操作系统

软件环境:Linux系统

一、实验目的

加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux系统中进程创建与控制有关的系统调用的编程和调试技术。

二、实验步骤

(1)分析实例实验

(2)进行独立实验

(3)思考并完成实验报告

实验截图:

思考:

说明它们反映出操作系统教材中进程及处理机管理一节讲解的进程的哪些特征和功能?在真实的操作系统中它是怎样实现和反映出教材中讲解的进程的生命期、进程的实体和进程状态控制的。你对于进程概念和并发概念有哪些新的理解和认识?子进程是如何创建和执行新程序的?信号的机理是什么?怎样利用信号实现进程控制?根据实验程序、调试过程和结果分析写出实验报告。

1.进程的概念:进程不仅是一段程序代码,还包括当前活动(通过程序计数器和寄存器中的内容来表示),另外,进程还包括进程堆栈段,和数据段等。

2.并发概念:是指进程之间交替并发执行

3.进程通过系统调用fork()函数创建子进程,子进程由唯一的pid

值标示,pid通常是一个整数值。通过fork创建的子进程实际上是父进程的克隆体,通过复制原来进程的地址空间而成,父子进程同时执行fork之后的程序。但是父子进程的pid值不同,可以通过对pid的判断,使父子进程执行不同的程序。子进程如果想执行不同的程序,需要系统调用exec()函数装入新的程序执行。

操作系统实验报告进程管理

操作系统实验报告进程管理

操作系统实验报告进程管理

操作系统实验报告:进程管理

引言

操作系统是计算机系统中的核心软件,负责管理计算机的硬件资源和提供用户

与计算机之间的接口。进程管理是操作系统的重要功能之一,它负责对计算机

中运行的各个进程进行管理和调度,以保证系统的高效运行。本实验报告将介

绍进程管理的基本概念、原理和实验结果。

一、进程管理的基本概念

1. 进程与线程

进程是计算机中正在运行的程序的实例,它拥有独立的内存空间和执行环境。

线程是进程中的一个执行单元,多个线程可以共享同一个进程的资源。进程和

线程是操作系统中最基本的执行单位。

2. 进程状态

进程在运行过程中会经历不同的状态,常见的进程状态包括就绪、运行和阻塞。就绪状态表示进程已经准备好执行,但还没有得到处理器的分配;运行状态表

示进程正在执行;阻塞状态表示进程由于某些原因无法继续执行,需要等待某

些事件的发生。

3. 进程调度

进程调度是操作系统中的一个重要任务,它决定了哪个进程应该获得处理器的

使用权。常见的调度算法包括先来先服务(FCFS)、最短作业优先(SJF)和时

间片轮转等。

二、进程管理的原理

1. 进程控制块(PCB)

PCB是操作系统中用于管理进程的数据结构,它包含了进程的各种属性和状态

信息,如进程标识符、程序计数器、寄存器值等。通过PCB,操作系统可以对

进程进行管理和控制。

2. 进程创建与撤销

进程的创建是指操作系统根据用户的请求创建一个新的进程。进程的撤销是指

操作系统根据某种条件或用户的请求终止一个正在运行的进程。进程的创建和

撤销是操作系统中的基本操作之一。

3. 进程同步与通信

操作系统实验4-进程管理与控制

操作系统实验4-进程管理与控制

第3章进程管理与控制

一、Linux进程管理

1、fork()

创建一个新的子进程。其子进程会复制父进程的数据与堆栈空间,并继承父进程的用户代码、组代码、环境变量、已打开的文件代码、工作目录和资源限制。系统调用格式:

int fork()

如果Fork成功则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0。如果fork失败则直接返回-1。

2、wait()

等待子进程运行结束。如果子进程没有完成,父进程一直等待。wait( )将调用进程挂起,直至其子进程因暂停或终止而发来软中断信号为止。如果在wait( )前已有子进程暂停或终止,则调用进程做适当处理后便返回。

系统调用格式:

int wait(int *status)

其中,status是用户空间的地址。它的低8位反应子进程状态,为0表示子进程正常结束,非0则表示出现了各种各样的问题;高8位则带回了exit( )的返回值。exit( )返回值由系统给出。核心对wait( )作以下处理:

(1)首先查找调用进程是否有子进程,若无,则返回出错码;

(2)若找到一处于“僵死状态”的子进程,则将子进程的执行时间加到父进程的执行时间上,并释放子进程的进程表项;

(3)若未找到处于“僵死状态”的子进程,则调用进程便在可被中断的优先级上睡眠,等待其子进程发来软中断信号时被唤醒。

3、exit( )

终止进程的执行。

系统调用格式:

void exit(int status)

其中,status是返回给父进程的一个整数,以备查考。为了及时回收进程

所占用的资源并减少父进程的干预,UNIX/LINUX利用exit( )来实现进程的自我终止,通常父进程在创建子进程时,应在进程的末尾安排一条exit( ),使子进程自我终止。exit(0)表示进程正常终止,exit(1)表示进程运行有错,异常终止。

Linux操作系统实验2-进程调度的操作

Linux操作系统实验2-进程调度的操作

1.查看并创建用户的计划任务列表crontab文件;

1)查看crontab命令的帮助信息;

在终端下键入info crontab, 进入crontab帮助手册:

2)查看用户的计划任务列表;

查看特定用户的计划任务列表:

在终端下键入crontab -l -u duke 列出duke用户的所有定时任务,如下:

终端提示no crontab for duke,说明用户duke目前没有计划任务。

查看当前用户的计划任务列表:

在终端下键入crontab -l 列出当前用户的所有定时任务,如下:

终端提示no crontab for duke,说明用户duke目前没有计划任务。

2.通过crontab文件对调度进程的计划任务进行编排操作。

1)建立crontab文件;

在终端下键入crontab -e ,提示当前无crontab文件,选择编辑器并新建如下:进入VI编辑器,编辑当前crontab文件,可以看到提供了一些注解作说明。

在crontab中输入0 3 * * 1 ls /etc 并保存,实现在每周一早上三点执行ls /etc 命令。

再次查看crontab文件,可以看到已经保存。

2)使用crontab命令安装crontab文件,安排计划任务;

对于位于/home下的crontab文件,使用crontab <filename>载入crontab计划任务中,如图:

3)查看计划任务表,确认计划任务是否已被安排;

键入crontab -l,查看计划任务安排情况,如图:

4)删除计划任务列表。

在终端下键入crontab -r ,删除当前用户的crontab文件,如下:

操作系统实验报告

操作系统实验报告

操作系统实验报告

实验项⽬⼆进程管理

⼀、实验⽬的

1.理解进程的概念,掌握⽗、⼦进程创建的⽅法。

2.认识和了解并发执⾏的实质,掌握进程的并发及同步操作。⼆、实验内容

1.编写⼀C语⾔程序,实现在程序运⾏时通过系统调⽤fork( )创建两个⼦进程,使⽗、⼦三进程并发执⾏,⽗亲进程执⾏时屏幕显⽰“I am father”,⼉⼦进程执⾏时屏幕显⽰“I am son”,⼥⼉进程执⾏时屏幕显⽰“I am daughter”。

2.多次连续反复运⾏这个程序,观察屏幕显⽰结果的顺序,直⾄出现不⼀样的情况为⽌。记下这种情况,试简单分析其原因。

3.修改程序,在⽗、⼦进程中分别使⽤wait()、exit()等系统调⽤“实现”其同步推进,并获取⼦进程的ID号及结束状态值。

多次反复运⾏改进后的程序,观察并记录运⾏结果。

三、源程序及运⾏结果

源程序1:

#include

#include

#include

int main(int argc, char ** argv )

{

int pid=fork();

if(pid < 0)

printf("error!");

else if( pid == 0 )

{

printf("I am son!\n");

}

else

{

int pid=fork();

if (pid < 0)

printf("error!");

else if( pid == 0 )

{

printf(“I am daughter! \n");

}

else

printf("I am father!\n");

}

sleep(1);

return 0;

操作系统原理实验

操作系统原理实验

操作系统原理实验

操作系统是计算机系统中最核心的软件之一,它负责管理和控制计算机硬件资源,为应用程序提供运行环境。为了更好地理解操作系统的工作原理,许多学校和研究机构都设立了操作系统原理实验课程,让学生通过实际操作来深入了解操作系统的内部机制。

操作系统原理实验课程通常包括以下几个方面的内容:进程管理、内存管理、

文件系统、输入输出管理等。在这些实验中,学生需要通过编写和调试代码来实现操作系统的各个功能模块。下面我将以这些方面为线索,介绍一下操作系统原理实验的一些典型内容和实践经验。

首先,进程管理是操作系统中最基础也是最重要的一部分。在实验中,学生需

要实现进程的创建、调度和终止等功能。他们可以通过编写一个简单的调度器来模拟操作系统对进程的管理。在这个过程中,学生需要了解进程的状态转换、优先级调度算法等概念,并将其应用到代码中。通过这个实验,学生可以更好地理解操作系统是如何管理和调度进程的。

其次,内存管理也是操作系统中不可忽视的一部分。在实验中,学生需要实现

内存的分配和回收等功能。他们可以通过编写一个简单的内存分配算法来模拟操作系统对内存的管理。在这个过程中,学生需要了解虚拟内存、页面置换算法等概念,并将其应用到代码中。通过这个实验,学生可以更好地理解操作系统是如何管理和利用内存资源的。

另外,文件系统也是操作系统中重要的一部分。在实验中,学生需要实现文件

的创建、读写和删除等功能。他们可以通过编写一个简单的文件系统来模拟操作系统对文件的管理。在这个过程中,学生需要了解文件系统的组织结构、索引节点等概念,并将其应用到代码中。通过这个实验,学生可以更好地理解操作系统是如何管理和组织文件的。

山东大学操作系统实验报告完整版

山东大学操作系统实验报告完整版

山东大学操作系统实验

报告

HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】

操作系统实验报告

计算机科学与技术学院目录

一、进程控制实验

实验目的

加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习 Linux 系统中进程创建与控制有关的系统调用的编程和调试技术。

示例实验

实验内容

以下实验示例程序应实现一个类似shell 子命令的功能,它可以从执行程序中启动另一个新的子进程并执行一个新的命令和其并发执行。实验演示结果

独立实验

实验内容

参考以上示例程序中建立并发进程的方法,编写一个父子协作进程,父进程创建一个子进程并控制它每隔 3 秒显示一次当前目录中的文件名列表。

实验步骤

算法设计

通过进程间的通讯,先创建一个父进程一个子进程,父进程沉睡3秒,子进程作为当前父进程再次创建一个他的子进程,当前子进程执行显示当前目录文件列表功能,执行execve()方法后死亡。While(1)在死循环里无限进行当前操作。即达到父进程创建一个子进程并控制它每隔3秒显示一次当前目录中的文件名列表的要求。

开发调试过程

打开一终端命令行窗体,新建一个文件夹,在该文件夹中建立名为的C 语言程序;

再建立以下名为的 C 语言头文件;

建立项目管理文件 Makefile;

输入 make 命令编译连接生成可执行的 pctl 程序;

执行 pctl 程序;

操作系统课件:Lecture5 进程的控制与调度

操作系统课件:Lecture5 进程的控制与调度
Windows 用ExitProcess( )实现进程撤销。
阻塞原语
引起进程阻塞的事件:
请求系统服务 如等待键盘输入等;
启动某种操作 如等待I/O处理完成等;
如等待其它进程发送一个信息。
阻塞原语
进程阻塞过程:
①进程通过调用阻塞原语block把自己阻塞,由运行态变 为阻塞态;
②中断CPU,将其运行现场保存在其PCB中; ③置状态为阻塞态,插入相应事件的阻塞队列中; ④转进程调度。
(3)为支持可剥夺调度,即使没有新就绪进程,为了让 所有就绪进程轮流占用处理机,可在下述情况下申请 进行进程调度: 当时钟中断发生,时钟中断处理程序调用有关时间片 的处理程序,发现正运行进程时间片到,应请求重新 调度。以便让其他进程占用处理机。 在按进程优先级进行进程调度的操作系统中,任何原 因引起进程的优先级发生变化时,应请求重新调度。 如进程通过系统调用自愿改变优先级时或者系统处理 时钟中断时,根据各进程等待处理机的时间长短而调 整进程的优先级。
进程控制是由操作系统内核实现的。 是属于原语一级的操作,不能被中断。
进程控制
原语(primitive)
–由若干条机器指令构成的可完成特定功能的程序段 ,它是一个 “原子操作(atomic operation)”过程,作 为一个整体而不可分割--要么全都完成,要么全 都不做(类似数据库中的“事务”)。原语主要是 通过屏蔽各种中断保证其原子性的。

操作系统实验及答案

操作系统实验及答案

操作系统实验及答案

一、实验目的

通过本次实验,旨在让学生深入理解操作系统的基本概念、原理和功能,掌握常见操作系统的使用与配置,提高学生对操作系统问题的分析和解决能力。

二、实验内容

实验1:Windows操作系统的基本操作与文件管理

实验2:Linux操作系统的安装与基本命令

实验3:Unix操作系统的进程管理与系统监控

实验4:Windows与Linux的双系统安装及切换

实验5:操作系统安全与权限设置

三、实验步骤及答案

实验1:Windows操作系统的基本操作与文件管理

1、打开Windows操作系统,熟悉桌面环境。

2、使用鼠标和键盘进行文件和文件夹的操作,包括创建、复制、移动、删除等。

3、学习使用Windows资源管理器进行文件和文件夹的管理。

4、学习使用回收站恢复和永久删除文件。

5、掌握Windows操作系统的文件搜索功能。

实验答案:完成以上步骤,并回答以下问题:

1、简述Windows操作系统的桌面组成。

2、列举Windows资源管理器的五大功能。

3、说明回收站的作用以及如何恢复和永久删除文件。

4、如何使用Windows操作系统的文件搜索功能?

实验2:Linux操作系统的安装与基本命令

1、准备一张Linux操作系统安装盘或安装程序。

2、学习使用光驱或U盘引导安装Linux操作系统。

3、学习Linux操作系统的基本命令,如ls、cd、mkdir、rm等。

4、学习使用vi编辑器进行文件编辑。

5、掌握Linux操作系统的常用配置文件和目录结构。

实验答案:完成以上步骤,并回答以下问题:

1、简述Linux操作系统的特点。

实验一操作系统Windows“任务管理器”的进程管理

实验一操作系统Windows“任务管理器”的进程管理

3.1 Windows“任务管理器”的进程管理

(实验估计时间:60分钟)

➢➢背景知识

➢➢实验目的

➢➢工具/准备工作

➢➢实验内容与步骤

背景知识

Windows 2000的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。其中:

1) “应用程序”选项卡显示正在运行程序的状态,用户能够结束、切换或者启动程序。

2) “进程”选项卡显示正在运行的进程信息。例如,可以显示关于CPU 和内存使用情况、页面错误、句柄计数以及许多其他参数的信息。

3) “性能”选项卡显示计算机动态性能,包括CPU 和内存使用情况的图表,正在运行的句柄、线程和进程的总数,物理、核心和认可的内存总数(KB) 等。

实验目的

通过在Windows 任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。

工具/准备工作

在开始本实验之前,请回顾教科书的相关内容。

需要准备一台运行Windows 2000 Professional操作系统的计算机。

实验内容与步骤

1. 使用任务管理器终止进程

2. 显示其他进程计数器

3. 更改正在运行的程序的优先级

启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。

操作系统实验报告 实验一 进程管理

操作系统实验报告  实验一  进程管理

实验一进程管理

一、目的

进程调度是处理机管理的核心内容..本实验要求编写和调试一个简单的进程调度程序..通过本实验加深理解有关进程控制块、进程队列的概念;并体会和了解进程调度算法的具体实施办法..

二、实验内容及要求

1、设计进程控制块PCB的结构PCB结构通常包括以下信息:进程名进程ID、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等..可根据实验的不同;PCB结构的内容可以作适当的增删..为了便于处理;程序中的某进程运行时间以时间片为单位计算..各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定..

2、系统资源r1…r w;共有w类;每类数目为r1…r w..随机产生n进程P i id;s j;k;t;0<=i<=n;0<=j<=m;0<=k<=dt为总运行时间;在运行过程中;会随机申请新的资源..

3、每个进程可有三个状态即就绪状态W、运行状态R、等待或阻塞状态B;并假设初始状态为就绪状态..建立进程就绪队列..

4、编制进程调度算法:时间片轮转调度算法

本程序用该算法对n个进程进行调度;进程每执行一次;CPU时间片数加1;进程还需要的时间片数减1..在调度算法中;采用固定时间片即:每执行一次进程;该进程的执行时间片数为已执行了1个单位;这时;CPU时间片数加1;进程还需要的时间片数减1;并排列到就绪队列的尾上..

三、实验环境

操作系统环境:Windows系统..

编程语言:C..

四、实验思路和设计

1、程序流程图

2、主要程序代码

//PCB结构体

struct pcb

windows操作系统实验报告

windows操作系统实验报告

大学操作系统实验报告

实验一进程控制与描述

一、实验目的

通过对Windows2000编程,进一步熟悉操作系统的基本概念,较好地理解Windows2000的结构。通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows2000进程的“一生”。

三、实验内容和步骤

第一部分:

Windows2000Professional下的GUI应用程序,使用V isualC++编译器创建一个GUI应用程序,代码中包括了WinMain()方法,该方法GUI类型的应用程序的标准入口点。

程序1-1Windows2000的GUI应用程序

也可以利用任何其他文本编辑器键入程序代码,如果这样,例如使用WORD来键入和编辑程序,则应该注意什么问题?保存时,将文件保存为扩展名为*.cpp的C++源文件。

在程序1-1的GUI应用程序中,首先需要Windows.h头文件,以便获得传送给WinMain()和MessageBox()API 函数的数据类型定义。

接着的pragma指令指示编译器/连接器找到User32.LIB库文件并将其与产生的EXE文件连接起来。这样就可以运行简单的命令行命令CLMsgBox.CPP来创建这一应用程序,如果没有pragma指令,则MessageBox()API 函数就成为未定义的了。这一指令是V isualStudioC++编译器特有的。

接下来是WinMain()方法。其中有四个由实际的低级入口点传递来的参数。hInstance参数用来装入与代码相连的图标或位图一类的资源,无论何时,都可用GetModuleHandle()API函数将这些资源提取出来。系统利用实例句柄来指明代码和初始的数据装在内存的何处。句柄的数值实际上是EXE文件映像的基地址,通常为0x00400000。下一个参数hPrevInstance是为向后兼容而设的,现在系统将其设为NULL。应用程序的命令行(不包括程序的名称)是lpCmdLine参数。另外,系统利用nCmdShow参数告诉应用程序如何显示它的主窗口(选项包括最小化、最大化和正常)。

操作系统原理实验

操作系统原理实验

操作系统原理实验

操作系统是计算机系统中最核心的部分之一,它负责管理和控制计算机的硬件和软件资源,为用户提供一个良好的工作环境。操作系统原理实验是计算机相关专业的学生必修课程之一,通过实验学习,可以更深入地理解操作系统的原理和工作机制,提高对操作系统的理解和应用能力。

实验一,进程管理。

进程是操作系统中最基本的概念之一,它是程序执行的基本单位。在进程管理实验中,我们可以学习到进程的创建、调度、同步和通信等内容。通过编写程序模拟进程的创建和调度过程,可以更直观地理解操作系统是如何管理进程的。

实验二,内存管理。

内存管理是操作系统中的重要内容之一,它负责管理计算机的内存资源,包括内存的分配与回收、内存的保护和共享等。在内存管理实验中,我们可以学习到内存分配算法、地址转换技术以及虚拟内存的实现原理。通过编写程序模拟内存分配和回收的过程,可

以更好地理解操作系统是如何管理内存的。

实验三,文件系统。

文件系统是操作系统中负责管理存储设备上的文件和目录的部分,它提供了对文件的读写和管理功能。在文件系统实验中,我们可以学习到文件的组织结构、文件的存储管理和文件的访问控制等内容。通过编写程序模拟文件的创建、读写和删除过程,可以更深入地理解操作系统是如何管理文件系统的。

实验四,设备管理。

设备管理是操作系统中负责管理计算机硬件设备的部分,它包括对设备的初始化、分配和释放等功能。在设备管理实验中,我们可以学习到设备的管理方法、设备的中断处理和设备的驱动程序设计等内容。通过编写程序模拟设备的初始化和中断处理过程,可以更好地理解操作系统是如何管理设备的。

操作系统实验2——进程控制

操作系统实验2——进程控制

实验2 进程控制

一、实验目的

加深对进程概念的理解,明确进程和程序和区别;进一步认识并发执行的实质;分析进程争用资源的现象。

二、实验内容

1. 熟悉Linux进程控制常用命令。

2. 输入进程创建、控制的程序并调试程序。

三、实验预备知识

1. 进程控制常用命令

(1)ps 命令

功能:查看目前的系统中有哪些进程,以及它们的执行情况。

常用命令格式及功能如下:

ps 查看系统中属于自己的进程

ps au 查看系统中所有用户的进程

ps aux 查看系统中包含系统内部的及所有用户的进程

主要输出列说明:

USER:进程所有者的用户名

PID:进程号

TTY:进程从哪个终端启动

TIME:此进程所消耗的CPU时间

COMMAND:正在执行的命令或进程名称

(2)top 命令

功能:动态显示进程,实时监测进程状态。与ps命令相似,只是top命令在执行后会以指定的时间间隔来刷新显示信息,以使top所显示的进程状态总是当前时刻的。

(3)kill 命令

功能:结束或终止进程。

常用命令格式及功能如下:

kill 5302 杀死PID为5302的进程

kill -9 5302 强行杀死PID为5302的进程

(4)echo $变量名

功能:查看外壳变量的设定值。

例:echo $$ 显示当前进程PID

2.常用系统调用函数

常用系统调用函数、程序的说明、参数及定义如下:

(1)fork()函数

功能:创建一个新进程

函数格式:int fork()

其中返回int取值意义如下:

小于0:创建失败

0: 创建成功,在子进程中返回0值

大于0: 创建成功,在父进程中返回子进程id值

操作系统实验(3)

操作系统实验(3)

实验三进程管理--进程的创建与并发执行

一.目的和要求

通过进程的创建、运行和撤销加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。

二.实验内容

1、Shell下的进程控制:用ps命令查看进程;用kill命令中止某些进程;用pstree命令显示系统

中进程的层次结构。(可通过“帮助”查看上述命令有哪些参数)

2、掌握系统调用fork( ),exec系列函数(6个),exit( ),wait( ),waitpid( ),getpid( ),getppid( )

的功能和实现过程。

3、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进

程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符‘a’;两个子进程分别显示字符‘b’和‘c’。观察屏幕上的显示结果,并分析原因。

4、将上述的输出字符改为输出较长的字符串,观察进程并发执行,分析执行结果。

5、编写一段程序,使用系统调用fork( )创建一个子进程,在子进程中显示该子进程及其父进程的

PID,然后子进程睡眠10秒钟(使用系统调用sleep(10));父进程通过调用wait( )等待子进程结束,并显示该子进程的PID。

6、编写一段程序,使用系统调用fork( )创建一个子进程。子进程通过系统调用exec系列函数调

用命令ls,调用exit( )结束。而父进程则调用waitpid( )等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。

三.实验提示

1、fork( )

fork( )是Linux的系统调用,其作用是创建进程,创建的子进程共享父进程在内存的程序段副本。

操作系统进程的创建与控制实验报告

操作系统进程的创建与控制实验报告
#include <stdio.h>
#inlude<stdlib.h>
#include<unistd.h>
main()
{
int p1,p2,i;
while((p1=fork( ))= = -1); /*创建子进程p1*/
if (p1= =0)
for(i=0;i<10;i++)
{sleep(5);printf("daughter %d\n",i);}
操作系统实验报告
实验一进程的创建和控制
班级:12计算机12班
学号:127401219
姓名:刘艳仙
成绩:
2013年6月17日
一、实验目的
1、掌握进程的概念,明确进程的含义
2、复习C语言程序基本知识
3、练习并掌握UNIX提供的vi编辑器来编译C程序
4、学会利用gcc、gdb编译、调试C程序
5、认识并了解并发执行的实质
根据要求,实验源程序如下:
1)利用vi编写的程序及其结果
main( )
{
printf("Hello,world!\n");
}
2)、进程的创建及其结果
1.#include <stdio.h>
#inlude<stdlib.h>
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一、进程控制实验

1.1 实验目的

加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux 系统中进程创建与控制有关的系统调用的编程和调试技术。

1.2 实验说明

1)与进程创建、执行有关的系统调用说明进程可以通过系统调用fork()创建子进程并和其子进程并发执行.子进程初始的执行映像是父进程的一个复本.子进程可以通过exec()系统调用族装入一个新的执行程序。父进程可以使用wait()或waitpid()系统调用等待子进程的结束并负责收集和清理子进程的退出状态。

fork()系统调用语法:

#include pid_t

fork(void);

fork 成功创建子进程后将返回子进程的进程号,不成功会返回-1.

exec 系统调用有一组6 个函数,其中示例实验中引用了execve 系统调用语法:

#include

int execve(const char *path, const char *argv[], const char * envp[]); path 要装

入的新的执行文件的绝对路径名字符串.

argv[] 要传递给新执行程序的完整的命令参数列表(可以为空).

envp[] 要传递给新执行程序的完整的环境变量参数列表(可以为空).

Exec 执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。如果exec 调用失败,它会返回-1。

wait() 系统调用语法:

#include

#include pid_t

wait(int *status);

pid_t waitpid(pid_t pid,int *status,int option); status 用

于保留子进程的退出状态

pid 可以为以下可能值:

-1 等待所有PGID 等于PID 的绝对值的子进程

1 等待所有子进程

0 等待所有PGID 等于调用进程的子进程

>0 等待PID 等于pid 的子进程option 规

定了调用waitpid 进程的行为:

WNOHANG 没有子进程时立即返回

WUNTRACED 没有报告状态的进程时返回

wait 和waitpid 执行成功将返回终止的子进程的进程号,不成功返回-1。

getpid()系统调用语法:

#include

#include pid_t

getpid(void);

pid_t getppid(void);

getpid 返回当前进程的进程号,getppid 返回当前进程父进程的进程号

2)与进程控制有关的系统调用说明可以通过信号向一个进程发送消息以控制进程的

行为。信号是由中断或异常事件引发的,如:键盘中断、定时器中断、非法内存引

用等。信号的名字都以SIG 开头,例如SIGTERM、SIGHUP。可以使用kill -l 命令查看系统当前的信号集合。

信号可在任何时间发生,接收信号的进程可以对接收到的信号采取3种处理措施之一:

•忽略这个信号

•执行系统默认的处理

•捕捉这个信号做自定义的处理信号从产生到被处理所经过的过程:

产生(generate)-> 挂起(pending)-> 派送(deliver)-> 部署(disposition) 或忽略(igore)

一个信号集合是一个C 语言的sigset_t 数据类型的对象,sigset_t 数据类型定义在中。被一个进程忽略的所有信号的集合称为一个信号掩码(mask)。

从程序中向一个进程发送信号有两种方法:调用shell 的kill 命令,调用kill系统调用函数。kill能够发送除杀死一个进程(SIGKILL、SIGTERM、

SIGQUIT)

之外的其他信号,例如键盘中断(Ctrl+C)信号SIGINT,进程暂停(Ctrl+Z)信号SIGTSTP 等等。

调用Pause 函数会令调用进程的执行挂起直到一个任意信号到来后再继续运行。

调用sleep 函数会令调用进程的执行挂起睡眠指定的秒数或一个它可以响应的信号到来后继续执行。

每个进程都能使用signal 函数定义自己的信号处理函数,捕捉并自行处理接收的除SIGSTOP 和SIGKILL 之外的信号。以下是有关的系统调用的语法说明。

kill 系统调用语法:

#include

#include

int kill(pid_t pid, int sig);

pid 接收信号的进程号

signal 要发送的信号

kill 发送成功返回接收者的进程号,失败返回-1。

pause 系统调用语法:

#include int

pause(void);

pause 挂起调用它的进程直到有任何信号到达。调用进程不自定义处理方法,则进行信号的默认处理。只有进程自定义了信号处理方法捕获并处理了一个信号后,pause 才会返回调进程。pause 总是返回-1,并设置系统变量errno 为EINTR。sleep 系统调用语法:

#include

unsigned int sleep(unsigned int seconds);

seconds 指定进程睡眠的秒数如果指定的秒数到,sleep 返回

0。

signal 系统调用语法为:

#include typedef void

(*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

signum 要捕捉的信号handler 进程中自定义的信号处理函数名

signal 调用成功会返回信号处理函数的返回值,不成功返回-1,并设置系统变

量errno 为SIG_ERR。

1.3 示例实验

相关文档
最新文档