实验三 进程的创建和简单控制
- 格式:doc
- 大小:246.50 KB
- 文档页数:7
操作系统实验报告进程管理操作系统实验报告:进程管理引言操作系统是计算机系统中的核心软件,负责管理计算机的硬件资源和提供用户与计算机之间的接口。
进程管理是操作系统的重要功能之一,它负责对计算机中运行的各个进程进行管理和调度,以保证系统的高效运行。
本实验报告将介绍进程管理的基本概念、原理和实验结果。
一、进程管理的基本概念1. 进程与线程进程是计算机中正在运行的程序的实例,它拥有独立的内存空间和执行环境。
线程是进程中的一个执行单元,多个线程可以共享同一个进程的资源。
进程和线程是操作系统中最基本的执行单位。
2. 进程状态进程在运行过程中会经历不同的状态,常见的进程状态包括就绪、运行和阻塞。
就绪状态表示进程已经准备好执行,但还没有得到处理器的分配;运行状态表示进程正在执行;阻塞状态表示进程由于某些原因无法继续执行,需要等待某些事件的发生。
3. 进程调度进程调度是操作系统中的一个重要任务,它决定了哪个进程应该获得处理器的使用权。
常见的调度算法包括先来先服务(FCFS)、最短作业优先(SJF)和时间片轮转等。
二、进程管理的原理1. 进程控制块(PCB)PCB是操作系统中用于管理进程的数据结构,它包含了进程的各种属性和状态信息,如进程标识符、程序计数器、寄存器值等。
通过PCB,操作系统可以对进程进行管理和控制。
2. 进程创建与撤销进程的创建是指操作系统根据用户的请求创建一个新的进程。
进程的撤销是指操作系统根据某种条件或用户的请求终止一个正在运行的进程。
进程的创建和撤销是操作系统中的基本操作之一。
3. 进程同步与通信多个进程之间可能需要进行同步和通信,以实现数据共享和协作。
常见的进程同步与通信机制包括互斥锁、信号量和管道等。
三、实验结果与分析在本次实验中,我们使用了一个简单的进程管理模拟程序,模拟了进程的创建、撤销和调度过程。
通过该程序,我们可以观察到不同调度算法对系统性能的影响。
实验结果显示,先来先服务(FCFS)调度算法在一些情况下可能导致长作业等待时间过长,影响系统的响应速度。
电大操作系统实验报告3_ 进程管理实验电大操作系统实验报告 3 进程管理实验一、实验目的进程管理是操作系统的核心功能之一,本次实验的目的是通过实际操作和观察,深入理解进程的概念、状态转换、进程调度以及进程间的通信机制,掌握操作系统中进程管理的基本原理和方法,提高对操作系统的整体认识和实践能力。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C 语言,开发工具为 Visual Studio 2019。
三、实验内容及步骤(一)进程的创建与终止1、编写一个 C 程序,使用系统调用创建一个子进程。
2、在父进程和子进程中分别输出各自的进程 ID 和父进程 ID。
3、子进程执行一段简单的计算任务,父进程等待子进程结束后输出结束信息。
以下是实现上述功能的 C 程序代码:```cinclude <stdioh>include <stdlibh>include <unistdh>int main(){pid_t pid;pid = fork();if (pid < 0) {printf("创建子进程失败\n");return 1;} else if (pid == 0) {printf("子进程:我的进程 ID 是%d,父进程 ID 是%d\n",getpid(), getppid());int result = 2 + 3;printf("子进程计算结果:2 + 3 =%d\n", result);exit(0);} else {printf("父进程:我的进程 ID 是%d,子进程 ID 是%d\n",getpid(), pid);wait(NULL);printf("子进程已结束\n");}return 0;}```编译并运行上述程序,可以观察到父进程和子进程的输出信息,验证了进程的创建和终止过程。
(二)进程的状态转换1、编写一个 C 程序,创建一个子进程,子进程进入睡眠状态一段时间,然后被唤醒并输出状态转换信息。
浙江大学城市学院实验报告课程名称操作系统原理实验实验项目名称实验三进程的创建和简单控制学生姓名专业班级学号实验成绩指导老师(签名)日期一. 实验目的和要求1.掌握进程的概念和进程的状态,对进程有感性的认识;2.掌握进程创建方法;3.认识进程的并发执行,了解进程族之间各种标识及其存在的关系;4.熟悉进程的创建、阻塞、唤醒、撤销等控制方法。
二、实验内容1.了解有关Linux进程的属性和进程的层次结构;2.学习有关Linux的前台和后台进程;3.学习有关Linux命令的顺序执行和并发执行;4.学习有关挂起和终止进程;5.了解并发程序的不可确定性,进行简单并发程序设计。
三、实验步骤(一)Shell下的进程控制1、用ps查看进程。
查看ps命令的帮助文件,尝试不同的参数,并观察结果ps –help查看更多ps的参数ps –A 列出所有的进程ps –au 显示较详细的信息USER 进程创建者的用户名PID 进程的ID号%CPU 进程占用的CPU百分比%MEN 进程占用内存的百分比VSZ 进程占用虚拟内存的大小RSS 内存中页的数量(页是管理内存的单位,在PC上通常为4K)TTY 进程所在终端的ID号STAT 进程的状态START 进程启动的时间TIME 进程已经占用的CPU时间COMMAND 命令和参数ps –aux 显示所有包含其他使用者的进程注:top命令即时跟踪进程信息观察了下大概是5s更新一次使用CPU最多的程序排在最前面。
最后用q命令退出这个监视程序。
2、kill命令使用3、pstree命令使用显示系统中进程的层次结构(二)Linux简单进程编程每个步骤请运行程序、截图,并解释运行结果,回答实验指导书的问题。
1、i先执行子进程,最后执行父进程,代表程序运行结束ii2个子进程分别执行一次,然后P1子进程执行一次,接着父进程执行,代表P1进程结束。
P2子进程执行,父进程再执行,代表P2结束。
iP1进程先执行,然后P2进程执行,最后父进程执行ii由于函数printf( )在输出字符串时不会被中断,因此,字符串内部字符顺序输出不变iii3、每次执行的进程号都改变iisleep(1)延长进程执行的时间删除sleep(1)后:iii删除wait()后:父子进程交替执行。
一、实验目的1. 理解进程的概念和特点。
2. 掌握创建进程的方法和过程。
3. 熟悉进程调度和同步机制。
4. 分析进程创建过程中可能遇到的问题及解决方法。
二、实验环境1. 操作系统:Windows 102. 编程语言:C/C++3. 开发工具:Visual Studio 2019三、实验原理进程是操作系统中进行资源分配和调度的基本单位。
创建进程是操作系统提供的一项基本功能,它允许用户在系统中启动新的程序。
在创建进程的过程中,操作系统会为进程分配一定的资源,如内存、文件句柄等。
四、实验内容1. 创建进程2. 父子进程的同步3. 进程的终止五、实验步骤1. 创建进程(1)编写C/C++程序,使用系统调用创建进程。
(2)父进程调用`fork()`函数创建子进程。
(3)在子进程中执行特定任务。
(4)父进程和子进程分别调用`wait()`函数等待对方结束。
2. 父子进程的同步(1)父进程和子进程使用信号量实现同步。
(2)父进程调用`sem_wait()`函数等待信号量。
(3)子进程调用`sem_post()`函数释放信号量。
3. 进程的终止(1)父进程调用`kill()`函数终止子进程。
(2)子进程调用`exit()`函数结束进程。
六、实验结果与分析1. 创建进程(1)在父进程中调用`fork()`函数创建子进程。
(2)父进程和子进程分别输出“父进程”和“子进程”信息。
实验结果:```父进程子进程```2. 父子进程的同步(1)父进程和子进程使用信号量实现同步。
(2)父进程调用`sem_wait()`函数等待信号量。
(3)子进程调用`sem_post()`函数释放信号量。
实验结果:```父进程子进程```3. 进程的终止(1)父进程调用`kill()`函数终止子进程。
(2)子进程调用`exit()`函数结束进程。
实验结果:```父进程子进程```七、实验总结通过本次实验,我们掌握了以下内容:1. 进程的概念和特点。
进程控制与进程通信程序实验报告一、引言进程是计算机系统中最基本的概念之一,是操作系统中最小的资源管理单位。
进程控制与进程通信是操作系统中重要的内容,涉及到进程的创建、调度和终止,以及进程间的信息传递和同步管理。
本实验旨在通过编写进程控制与进程通信程序,加深对操作系统中进程管理和通信机制的理解。
二、实验目的1. 理解进程的概念和特点,掌握进程的创建、调度和终止方法。
2. 掌握进程通信的基本原理和方法,包括共享内存、管道、消息队列和信号量等。
3. 能够编写简单的进程控制和进程通信程序。
三、实验内容1. 进程控制实验:编写一个程序,实现进程的创建、调度和终止。
通过调用系统调用函数,创建多个子进程,并通过进程控制函数实现父子进程的协作与同步。
2. 进程通信实验:编写一个程序,实现进程间的信息传递和同步管理。
通过共享内存、管道、消息队列或信号量等机制,实现不同进程之间的数据交换和共享。
四、实验步骤1. 进程控制实验:(1)创建父进程和子进程:使用fork()函数创建子进程,并通过判断返回值来区分父子进程。
(2)调度子进程:使用wait()函数等待子进程的结束,以实现父子进程的同步。
(3)终止子进程:使用exit()函数终止子进程的运行。
2. 进程通信实验:(1)共享内存:使用shmget()函数创建共享内存段,使用shmat()函数映射共享内存到进程的地址空间,实现共享数据的读写。
(2)管道:使用pipe()函数创建管道,使用fork()函数创建子进程,通过读写管道实现进程间的数据传输。
(3)消息队列:使用msgget()函数创建消息队列,使用msgsnd()函数向消息队列发送消息,使用msgrcv()函数从消息队列接收消息,实现进程间的消息传递。
(4)信号量:使用semget()函数创建信号量,使用semop()函数对信号量进行P操作和V操作,实现进程间的同步和互斥。
五、实验结果通过实验,我们成功实现了进程的创建、调度和终止,以及进程间的信息传递和同步管理。
实验三进程的创建和简单控制实验目的:1. 掌握进程的概念和进程的状态,对进程有感性的认识;2. 掌握进程创建方法;3. 认识进程的并发执行,了解进程族之间各种标识及其存在的关系;4. 熟悉进程的创建、阻塞、唤醒、撤销等控制方法。
实验内容:1. 了解有关Linux进程的属性和进程的层次结构;2. 学习有关Linux的前台和后台进程;3. 学习有关Linux命令的顺序执行和并发执行;4. 学习有关挂起和终止进程;5. 了解并发程序的不可确定性,进行简单并发程序设计。
实验步骤:(一)Shell 下的进程控制1. 进入Linux系统。
2. 用ps查看进程。
a) linux的ps命令是用来监视系统进程和资源使用情况的命令,可显示瞬间进程的动态。
b) ps 的参数非常多,常用的参数有:i. -A 列出所有的进程;ii. -w 显示加宽可以显示较多的信息;iii. -au 显示较详细的信息;iv. -aux 显示所有包含其他使用者的进程。
3. 用kill终止某些进程。
a) kill命令通过向进程发送指定的信号来结束进程。
b) 先使用ps查到进程号,再使用kill杀出进程。
4. 用pstree命令显示系统中进程层次结构。
PDF 文件使用 "pdfFactory Pro" 试用版本创建a) pstree指令用ASCII字符显示树状结构,清楚地表达进程间的相互关系。
b) 语法格式pstree [-acGhlnpuUV][-H <程序识别码>][<程序识别码>/<用户名称>](二)Linux 简单进程编程1. 理解系统调用fork()的使用。
a) fork()会产生一个与父程序相同的子程序,唯一不同之处在于其进程号。
图2 系统调用fork()b) 编辑下面的程序,如图3所示,要求实现父进程产生两个子进程,父进程显示字符“a”、两个子进程,分别显示字符“b”、“c”。
操作系统实验报告专业:软件工程姓名:李程星学号:2011221104220092实验一操作系统的用户界面LINUX操作系统提供了图形用户界面和命令行界面,本实验主要熟悉命令行界面,为后续的实验编程做准备。
一、系统启动1. 开机,选择进入Linux系统,约40秒后系统启动成功,系统提示输入用户名:user输入口令:111111 然后进入Linux系统桌面。
2.进入Linux命令行方式单击小红帽图标,选择“系统工具”,单击“终端”图标,出现Linux的shell提示符.....@......$,,即可输入命令。
实验二进程管理一、实验目的(1)加深对进程概念的理解,明确进程和程序的区别。
(2)进一步认识并发执行的实质。
二、实验内容1、进程的创建执行下面的程序,分析执行的结果。
#include <stdio.h>main(){ int i;printf("just 1 process.\n");i=fork();if (i==0)printf("I am child.\n");elseif (i>0)printf("I am parent.\n");elseprintf("fork() failed.\n");printf("program end.\n");}输出结果:just 1 process.I am parent.program end.I am a child.program end.2、进程的同步执行下面的程序,分析执行的结果。
#include <stdio.h>main(){ int i;printf("just 1 process.\n");i=fork();if (i>0){printf("I am parent.\n");wait();}elseif (i==0) {printf("I am child.\n");exit(1);}printf("program end.\n");}输出结果:just 1 process.I am parent.I am child.program end.3、进程的延迟执行下面的程序,分析执行的结果。
(1)首先查找调用进程是否有子进程,若无,则返回出错码;(2)若找到一处于“僵死状态”的子进程,则将子进程的执行时间加到父进程的执行时间上,并释放子进程的进程表项;(3)若未找到处于“僵死状态”的子进程,则调用进程便在可被中断的优先级上睡眠,等待其子进程发来软中断信号时被唤醒。
4、exit()终止进程的执行。
系统调用格式:void exit(status)int status;其中,status 是返回给父进程的一个整数,以备查考。
为了及时回收进程所占用的资源并减少父进程的干预,LINUX/LINUX 利用exit( )来实现进程的自我终止,通常父进程在创建子进程时,应在进程的末尾安排一条exit( ),使子进程自我终止。
exit(0)表示进程正常终止,exit(1)表示进程运行有错,异常终止。
如果调用进程在执行exit( )时,其父进程正在等待它的终止,则父进程可立即得到其返回的整数。
核心须为exit( )完成以下操作:(1)关闭软中断(2)回收资源(3)写记帐信息(4)置进程为“僵死状态”参考程序#include<stdio.h>#include<unistd.h>main( ){in t pid;pid=fork( ); /*创建子进程*/switch(pid){case -1:printf("fork fail!\n");exit(1);case 0: /*创建失败*//*子进程*/execl("/bin/ls","ls","1","color",NULL); printf("exec fail!\n");exit(1);default:wait(NULL);/*父进程*/ /*同步*/printf("ls completed !\n");exit(0);}}运行结果执行命令ls -l -color ,(按倒序)列出当前目录下所有文件和子目录;ls completed!分析原因程序在调用fork( )建立一个子进程后,马上调用wait( ),使父进程在子进程结束之前,一直处于睡眠状态。