当前位置:文档之家› 实验1 进程描述与控制

实验1 进程描述与控制

实验1  进程描述与控制
实验1  进程描述与控制

信息学院

操作系统实验报告

姓名:

学号:

专业:

班级:

实验名称:

48 操作系统原理实验(第二版)

实验一进程控制与描述

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

3.1.1 Windows XP的任务管理器

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

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

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

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

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

1. 工具/准备工作

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

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

实验3 进程控制与描述49

2. 实验内容与步骤

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

在本次实验中,你使用的操作系统版本是:

__Microsoft_Windows XP professional版本2002 service pack 2

当前机器中由你打开,正在运行的应用程序有:

1) _ 实验一进程描述与控制– Microsoft Word

2) ____实验报告封面- Microsoft Word __________________________

Windows“任务管理器”的窗口由__5____个选项卡组成,分别是:

1)应用程序

2)____进程____

3)性能

4)联网

5)用户

50 操作系统原理实验(第二版)

当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :

1) 映像名称

2) 用户名

3) CPU

4) 内存使用

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

步骤1:单击“进程”选项卡,一共显示了_46_个进程。请试着区分一下,其中:系统(SYSTEM) 进程有_19__个,填入表3.1中。

表3.1 实验记录

实验3 进程控制与描述51

注:在Windows 2000中,“用户名”需要自己判断。这一点,在Windows XP中有了改进。

服务(SERVICE) 进程有_5 _个,填入表3.2中。

表3.2 实验记录

用户进程有_ _19 _个,填入表3.3中。

表3.3 实验记录

52 操作系统原理实验(第二版)

实验3 进程控制与描述53

步骤2:单击要终止的进程,然后单击“结束进程”按钮。

终止进程,将结束它直接或间接创建的所有子进程。请将终止某进程后的操作结果与原记录数据对比,发生了什么:

原窗口将被关闭,与原窗口相关的程序都将结束执行,没有经过保存的数据都将失去。

(2) 显示其他进程记数器

在“进程”选项卡上单击“查看”菜单,然后单击“选择列”命令。单击要增加显示为列标题的项目,然后单击“确定”。

54 操作系统原理实验(第二版)

为对进程列表进行排序,可在“进程”选项卡上单击要根据其进行排序的列标题。而为了要反转排序顺序,可再次单击列标题。

请记录:经过调整,“进程”选项卡现在显示的项目分别是:

现在显示的项目是映像名称、PID、用户名、CPU、内存使用

通过对“查看”菜单的选择操作,可以在“任务管理器”中更改显示选项:

·在“应用程序”选项卡上,可以按详细信息、大图标或小图标查看。

·在“性能”选项卡上,可以更改CPU记录图,并显示内核时间。“显示内核时间”选项在“CPU使用”和“CPU使用记录”图表上添加红线。红线指示内核操作占用的CPU资源数量。

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

要查看正在运行的程序的优先级,可单击“进程”选项卡,单击“查看”菜单,单击“选择列”>“基本优先级”命令,然后单击“确定”。

为更改正在运行的程序的优先级,可在“进程”选项卡上右键单击您要更改的程序,指向“设置优先级”,然后单击所需的选项。

更改进程的优先级可以使其运行更快或更慢(取决于是提升还是降低了优先级) ,但也可能对其他进程的性能有相反的影响。

请记录:操作完成后你的体会是:

____当进程优先级提高之后,这个进程的执行速度快了很多,电脑也不怎么卡,相反,进程优先级降低之后,这个进程的执行速度也慢了很多。

在多处理器计算机上,用户还可以给处理器指派进程,将程序或进程的执行限制在选定的处理器上,但这有可能导致总体性能的下降。

3. 实验总结

在本节的实验中,通过在Windows任务管理器中对程序进程进行响应的管理操作,熟悉了操作系统进程管理的概念,学习了观察操作系统运行的动态性能。也了解到了修改进程优先级之后所发生的变化。

4. 实验评价 (教师)

____________________________________________________________________ ________________________________________________________________________

实验3 进程控制与描述55

3.1.3 阅读与思考:手机操作系统介绍(之一)

1. Windows Mobile系列手机操作系统

Windows Mobile系列操作系统是在微软计算机的Windows操作系统上变化而来的,因此,它们的操作界面非常相似,熟悉计算机Windows系列操作系统的朋友一看到Windows Mobile系列的操作系统就一般会认得它是出于微软之手。Windows Mobile系列操作系统具有功能更强大,多数具备了音频、视频文件播放、上网冲浪、MSN聊天、电子邮件收发等功能。而且,支持该操作系统的智能手机多数都采用了英特尔嵌入式处理器,主频比较高,另外,采用该操作系统的智能手机在其它硬件配置(如内存、储存卡容量等) 上也较采用其它操作系统的智能手机要高出许多,因此性能比较强劲,操作起来速度会比较快。但是,此系列手机也有一定的缺点,如因配置高、功能多而产生耗电量大、电池续航时间短、硬件采用成本高等缺点。Windows Mobile系列操作系统包括SmartPhone以及Pocket PC Phone两种平台。Pocket PC phone主要用于掌上电脑型的智能手机,而SmartPhone则主要为单手智能手机提供操作系统。

(1) SmartPhone操作系统

Microsoft Smartphone是微软基于Microsoft Windows CE内核开发的、为智能手机提供的一种操作系统,与使用手写笔来进行操作的智能手机不同的是,基于该操作系统的手机无需借助手写笔,只需用手机提供的键盘就能完成几乎所有的操作,因此,使用该操作系统的手机用户只需一只手操作即可。基于Smartphone操作系统的智能手机与其它微软操作系统的智能手机在功能上并没有很大区别,多数具有MP3播放、MSN聊天、电子邮件收发等功能,无需借助手写笔来进行操作,携带方便。目前支持该操作系统的智能手机有神达Mio 8390和多普达565等.

(2) Pocket PC Phone操作系统

Pocket PC Phone是最为常见的微软智能手机操作系统,目前市面上绝大多数基于微软操作系统的智能手机都采用了这一操作系统,例如联想ET180、ET560、多普达696、大显CU928、多普达等智能手机。与微软Smartphone不同的是,该操作系统主要借助手写笔来完成大部分的操作。

56 操作系统原理实验(第二版)

2. Symbian开放式操作系统

Symbian操作系统提供了灵活的应用界面(UI)框架,不但使开发者得以快速掌握必要的技术,同时还使手机制造商能够推出不同界面的产品。Symbian系统手机可以采用多种应用界面形式:一类在设计上很类似当前最常见的手机,即主要通过键盘进行输入的手机;另一类是使用手写笔进行操作;还有一类是既有键盘又有触摸屏的手机,它具有较大的屏幕和较小的键盘。不同的输入方式和外观设计会对各款手机的主要用途产生很大的影响。应用界面在要求上是由手机和市场决定的。有了Symbian操作系统,手机制造商和第三方开发者就可以为上述各类手机开发出独具特色的应用界面,例如:

(1) 采用数字键盘的手机(Symbian s60)

此类手机需要灵活的应用界面,方便用户使用导航键(Joystick)、软按键或转点通键(Jogdial)操作,诺基亚3650和N-Gage也就是代表他们采用了Series 60应用界面。如诺基亚6600;诺基亚7610;诺基亚6670等。

(2) 采用触摸式屏幕的手机(Symbian UIQ)

这类手机主要采用了UIQ界面,其中以索尼爱立信P802、P908为代表。UIQ是一种可定制的基于手写笔输入的应用界面,很适合支持具有丰富多媒体功能的手机。

(3) 采用完整键盘和超大彩色屏幕的手机(Symbian s80)

此类手机为那些需要在办公室以外编辑信息和查看业务数据的用户提供了先进的移动通信功能。诺基亚9300—9500个人通讯器系列是此类应用界面的典型代表。

(待续)

资料来源:中国软件网(https://www.doczj.com/doc/b615527054.html,/tech/6/67348.html)

3.2 Windows XP编程

3.2.1 Windows XP编程初步

Windows XP可以识别的应用程序包括控制台应用程序、GUI应用程序和服务应用程序。控制台应用程序可以创建GUI,GUI应用程序可以作为服务来运行,服务也可以向标准的输出流写入数据。不同类型应用程序间的惟一重要区别是其启动方法。

Windows XP是以NT的技术构建的,它提供了创建控制台应用程序的能力,使用户可以利用标准的C++工具,如iostream库中的cout和cin对象,来创建小型应用程序。当系统运行时,Windows XP的服务通常要向系统用户提供所需功能。

服务应用程序类型需要ServiceMail() 函数,由服务控制管理器(SCM) 加以调

实验3 进程控制与描述57

用。SCM是操作系统的集成部分,负责响应系统启动以开始服务、指导用户控制或从另一个服务中来的请求。其本身负责使应用程序的行为像一个服务。通常,服务登录到特殊的LocalSystem账号下,此账号具有与开发人员创建的服务不同的权限。

当令C++ 编译器创建可执行程序时,编译器将源代码编译成OBJ文件,然后将其与标准库相链接。产生的EXE文件是装载器指令、机器指令和应用程序的数据的集合。装载器指令告诉系统从哪里装载机器代码。另一个装载器指令告诉系统从哪里开始执行进程的主线程。在进行某些设置后,进入开发者提供的main() 、ServiceMain() 或WinMain() 函数的低级入口点。机器代码中包括有控制逻辑,它所做的事包括跳转到Windows API函数,进行计算或向磁盘写入数据等。

Windows允许开发人员将大型应用程序分为较小的、互相有关系的服务模块,即动态链接库(DLL) 代码块,在其中包含应用程序所使用的机器代码和应用程序的数据。

3.2.2 练习与实验

在本节“练习与实验”中,通过对Windows XP编程,进一步熟悉操作系统的基本概念,较好地理解Windows XP的结构。

1. 工具/准备工作

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

需要准备一台运行Windows XP Professional操作系统的计算机,且该计算机中需安装Visual C++ 6.0专业版或企业版。

2. 实验内容与步骤

(1) 简单的控制台应用程序

我们先来创建一个名为“Hello”的应用程序。

步骤1:登录进入Windows XP Professional。

步骤2:在“开始”>“所有程序”>“附件”菜单中单击“记事本”命令,将清单3-l中的程序键入记事本中,并把代码保存为Hello.cpp。

清单3-1 一个简单的Windows XP控制台应用程序

// hello项目

# include

void main()

58 操作系统原理实验(第二版)

{

std::cout<<“Hello, Windows XP”<

}

步骤3:在“开始”>“所有程序”>“附件”菜单中单击“命令提示符”命令,进入Windows“命令提示符”窗口,并利用简单的标准命令行:

C:\> CL Hello.cpp

来创建可执行的Hello.EXE。

请记录:操作能否正常进行?如果不行,则可能的原因是什么?

不能。

步骤4:运行Hello.EXE程序。

请记录:运行结果(如果运行不成功,则可能的原因是什么?) :

应该将第二行的void main() 改为int main()

(2) GUI应用程序

在下面的实验中,C++ 编译器创建一个GUI应用程序,代码中包括了WinMain() 方法,这是GUI类型的应用程序的标准入口点。

步骤1:在“开始”>“所有程序”>“附件”菜单中单击“记事本”命令,将清单3-2中的程序键入记事本中,并把代码保存为3-2.cpp。

清单3-2 Windows XP的GUI应用程序

实验3 进程控制与描述59

// msgbox项目

# include // 标准的include

// 告诉连接器与包括MessageBox API函数的user32库进行连接

# pragma comment(lib,“user32.lib”)

// 这是一个可以弹出信息框然后退出的筒单的应用程序

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

::MessageBox(

NULL, // 没有父窗口

“Hello,Windows 2000”, // 消息框中的文本

“Greetings”, // 消息框标题

MB_OK); // 其中只有一个OK按钮

// 返回0以便通知系统不进入消息循环

return(0);

}

也可以利用任何其他文本编辑器键入程序代码,如果这样,例如使用WORD来键入和编辑程序,则应该注意什么问题?

应该严格区分中文字符和英文字符,切记将英文字符写成中文字符。

步骤2:在“命令提示符”窗口运行CL.EXE,产生3-2.EXE文件:

C:\> CL 3-2.cpp

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

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

接下来是WinMain() 方法。其中有四个由实际的低级入口点传递来的参数。

60 操作系统原理实验(第二版)

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

最后,程序调用MessageBox() API函数并退出。如果在进入消息循环之前就结束运行的话,最后必须返回0。

请记录:运行结果(试将其中的信息与清单3-1程序的运行结果进行比较) :

实验3 进程控制与描述61

(3) 进程对象

操作系统将当前运行的应用程序看作是进程对象。利用系统提供的惟一的称为句柄(HANDLE) 的号码,就可与进程对象交互。这一号码只对当前进程有效。

本实验表示了一个简单的进程句柄的应用。在系统中运行的任何进程都可调用GetCurrentProcess() API函数,此函数可返回标识进程本身的句柄。然后就可在Windows需要该进程的有关情况时,利用这一句柄来提供。

步骤1:将清单3-3.cpp程序键入记事本中,并把代码保存为3-3.cpp。

清单3-3 获得和使用进程的句柄

// prochandle项目

62 操作系统原理实验(第二版)

# include

# include

// 确定自己的优先权的简单应用程序

void main()

{

// 从当前进程中提取句柄

HANDLE hProcessThis=::GetCurrentProcess();

// 请求内核提供该进程所属的优先权类

DWORD dwPriority=::GetPriorityClass(hProcessThis);

// 发出消息,为用户描述该类

std::cout<<“Current process priority:”;

switch(dwPriority)

{

case HIGH_PRIORITY_CLASS:

std::cout<<“High”;

break;

case NORMAL_PRIORITY_CLASS:

std::cout<<“Normal”;

break;

case IDLE_PRIORITY_CLASS:

std::cout<<“Idle”;

break;

case REALTIME_PRIORITY_CLASS:

std::cout<<“Realtime”;

break;

default:

std::cout<<“”;

break;

}

std::cout<

}

实验3 进程控制与描述63

清单3-3中列出的是一种获得进程句柄的方法。对于进程句柄可进行的惟一有用的操作是在API调用时,将其作为参数传送给系统,正如清单3-3中对GetPriority Class() API函数的调用那样。在这种情况下,系统向进程对象内“窥视”,以获取其优先级,然后将此优先级返回给应用程序。

OpenProcess() 和CreateProcess() API函数也可以用于提取进程句柄。前者提取的是已经存在的进程的句柄,而后者创建一个新进程,并将其句柄提供出来。

步骤2:在“命令提示符”窗口运行CL.EXE,产生3-3.EXE文件:

C:\> CL 3-3.cpp

请记录:运行结果:

步骤3:将清单3-4.cpp程序键入记事本中,并把代码保存为3-4.cpp。

清单3-4显示如何找出系统中正在运行的所有进程,如何利用OpenProcess() API 函数来获得每一个访问进程的进一步信息。

清单3-4 利用句柄查出进程的详细信息

// proclist项目

# include

# include

# include

// 当在用户模式和内核模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计

64 操作系统原理实验(第二版)

算的帮助方法

DWORD GetKernelModePercentage(const FILETIME & ftKernel,

const FILETIME & ftUser)

{

// 将FILETIME结构转化为64位整数

ULONGLONG qwKernel=(((ULONGLONG) ftKernel.dwHighDateTime)<<32)+ ftKernel.dwLowDateTime;

ULONGLONG qwUser=(((ULONGLONG) ftUser.dwHighDateTime)<<32)+ ftUser.dwLowDateTime;

// 将消耗时间相加,然后计算消耗在内核模式下的时间百分比

ULONGLONG qwTotal=qwKernel+qwUser;

DWORD dwPct=(DWORD)(((ULONGLONG)100*qwKernel)/qwTotal);

return(dwPct);

}

// 以下是将当前运行进程名和消耗在内核模式下的时间百分数都显示出来的应用程序

void main()

{

// 对当前系统中运行的进程拍取“快照”

HANDLE hSnapshot=::CreateToolhelp32Snapshot(

TH32CS_SNAPPROCESS, // 提取当前进程

0); // 如果是当前进程,就将其忽略

// 初始化进程入口

PROCESSENTRY32 pe;

::ZeroMemory(&pe,sizeof(pe));

pe.dwSize=sizeof(pe);

// 按所有进程循环

BOOL bMore=::Process32First(hSnapshot,&pe);

while(bMore)

{

// 打开用于读取的进程

HANDLE hProcess=::OpenProcess(

实验3 进程控制与描述65

PROCESS_QUERY_INFORMATION, // 指明要得到信息

FALSE, // 不必继承这一句柄

pe.th32ProcessID); // 要打开的进程

if (hProcess!=NULL)

{

// 找出进程的时间

FILETIME ftCreation,ftExit,ftKernelMode,ftUserMode;

::GetProcessTimes(

hProcess, // 所感兴趣的进程

&ftCreation, // 进程的启动时间 (绝对的) &ftExit, // 结束时间 (如果有的话)

&ftKernelMode, // 在内核模式下消耗的时间

&ftUserMode) ; // 在用户模式下消耗的时间

// 计算内核模式消耗的时间百分比

DWORD dwPctKernel=::GetKernelModePercentage(

ftKernelMode, // 在内核模式上消耗的时间

ftUserMode); // 在用户模式下消耗的时间

// 向用户显示进程的某些信息

std::cout<<“Process ID:” <

<< “,EXE file:”<

<< “,%in kernel mode:”<

<< std::endl;

// 消除句柄

::CloseHandle(hProcess);

}

// 转向下一个进程

bMore=::Process32Next(hSnapshot,&pe);

}

}

清单3-4程序首先利用Windows XP的新特性,即工具帮助库来获得当前运行的

66 操作系统原理实验(第二版)

所有进程的快照。然后应用程序进入快照中的每一个进程,得到其以PROCESSENTRY32结构表示的属性。这一结构用来向OpenProcess() API函数提供进程的ID。Windows跟踪每一进程的有关时间,示例中是通过打开的进程句柄和GetProcessTimes() API来直询得到有关时间的。接下来,一个定制的帮助函数取得了几个返回的数值,然后计算进程在内核模式下消耗的时间占总时间的百分比。程序的其余部分比较简单,只是将有关信息显示给用户,清除进程句柄,然后继续循环,直到所有进程都计算过为止。

步骤10:在“命令提示符”窗口运行CL.EXE,产生3-4.EXE文件:

C:\> CL 3-4.cpp

请记录:运行结果:

3. 实验总结

在本节的实验中,通过对Windows XP编程,我进一步熟悉操作系统的基本概念,较好地理解了Windows XP的结构。

4. 实验评价 (教师)

____________________________________________________________________ ________________________________________________________________________

linux进程控制 实验报告

长安大学 操作系统实验报告 实验课程:操作系统 实验名称:linux进程控制 学院:信息学院 专业:软件工程 学号:2406090106 姓名:刘建 日期:2012-5-09

一、实验目的 熟悉进程的创建过程,了解系统调用函数fork() 和execl()。 二、实验内容 1、阅读实例代码fork1,并编辑、编译、运行,记录程序的运行结果,尝试给出合理的解释,查阅有关资料,掌握系统调用fork( )的用法,返回值的意义。 2、阅读实例代码fork2,并编辑、编译、运行,记录程序的运行结果,尝试给出合理的解释,查阅有关资料,掌握在程序中运行一个操作系统命令和运行一个程序的方法。 3、修改fork2,使之能把运行的命令和程序作为参数传给fork2。 三、设计思想 1、程序框架

pid = -1 pid = 0pid> 0 2、用到的文件系统调用函数 fork() 和execl() 四、调试过程 1、测试数据设计 (1)fork1 命名程序1: 编写程序1:

编译程序1: 运行程序1: (2)fork2

编写程序2: 运行程序2:

(3)修改fork2 编写修改程序2: 修改后的运行结果: 2、测试结果分析 (1)对于程序1:因为系统调用fork()函数是一次调用两次返回值,而且先生成子进程还是父进程是不确定的,所以第一次执行生成子进程的时候返回的pid = 0,判断pid!=-1,所以输出了I’m the child. I’m the parent. 第二次,执行父进程的时候,返回的是子进程的进程号pid> 0,即pid的值仍然不为-1,所以又输出了一次I’m the child. I’m the parent。 (2)对于程序2:第一次调用fork()函数时,由于执行的是子进程还是父进程是随机的,所以第一次对父进程返回的是子进程的进程号(大于0),即pid> 0,所以输出I’m the parent. Program end.当第二次执行子进程时返回值是0,即pid = 0,所以输出I’m the child. 并调用了execl()函数,查看了指定路径中的文件。

操作系统实验-进程控制

实验一、进程控制实验 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)与进程控制有关的系统调用说明可以通过信号向一个进程发送消息以控制进程的 行为。信号是由中断或异常事件引发的,如:键盘中断、定时器中断、非法内存引

操作系统精髓与设计原理-第3章 进程描述和控制

第3章进程描述和控制 复习题: 3.1什么是指令跟踪? 答:指令跟踪是指为该进程而执行的指令序列。 3.2通常那些事件会导致创建一个进程? 答:新的批处理作业;交互登录;操作系统因为提供一项服务而创建;由现有的进程派生。(详情请参考表3.1) 3.3对于图3.6中的进程模型,请简单定义每个状态。 答:运行态:该进程正在执行。就绪态:进程做好了准备,只要有机会就开始执行。 阻塞态:进程在某些事件发生前不能执行,如I/O操作完成。新建态:刚刚创建的进程,操作系统还没有把它加入到可执行进程组中。退出态:操作系统从可执行进程组中释放出的进程,或者是因为它自身停止了,或者是因为某种原因被取消。 3.4抢占一个进程是什么意思? 答:处理器为了执行另外的进程而终止当前正在执行的进程,这就叫进程抢占。 3.5什么是交换,其目的是什么? 答:交换是指把主存中某个进程的一部分或者全部内容转移到磁盘。当主存中没有处于就绪态的进程时,操作系统就把一个阻塞的进程换出到磁盘中的挂起队列,从而使另一个进程可以进入主存执行。 3.6为什么图3.9(b)中有两个阻塞态? 答:有两个独立的概念:进程是否在等待一个事件(阻塞与否)以及进程是否已经被换出主存(挂起与否)。为适应这种2*2的组合,需要两个阻塞态和两个挂起态。3.7列出挂起态进程的4个特点。 答:1.进程不能立即执行。2.进程可能是或不是正在等待一个事件。如果是,阻塞条件不依赖于挂起条件,阻塞事件的发生不会使进程立即被执行。3.为了阻止进程执行,可以通过代理把这个进程置于挂起态,代理可以是进程自己,也可以是父进程或操作系统。4.除非代理显式地命令系统进行状态转换,否则进程无法从这个状态中转移。 3.8对于哪类实体,操作系统为了管理它而维护其信息表? 答:内存、I/O、文件和进程。 3.9列出进程控制块中的三类信息。 答:进程标识,处理器状态信息,进程控制信息。 3.10为什么需要两种模式(用户模式和内核模式)? 答:用户模式下可以执行的指令和访问的内存区域都受到限制。这是为了防止操作系统受到破坏或者修改。而在内核模式下则没有这些限制,从而使它能够完成其功能。 3.11操作系统创建一个新进程所执行的步骤是什么? 答:1.给新进程分配一个唯一的进程标识号。2.给进程分配空间。3.初始化进程控制块。 4.设置正确的连接。 5.创建或扩充其他的数据结构。 3.12中断和陷阱有什么区别? 答:中断与当前正在运行的进程无关的某些类型的外部事件相关,如完成一次I/O操作。陷阱与当前正在运行的进程所产生的错误或异常条件相关,如非法的文件访问。 3.13举出中断的三个例子。 答:时钟终端,I/O终端,内存失效。 3.14模式切换和进程切换有什么区别? 答:发生模式切换可以不改变当前正处于运行态的进程的状态。发生进程切换时,一个正在执行的进程被中断,操作系统指定另一个进程为运行态。进程切换需要保存更

进程管理实验报告

实验2过程管理实验报告学生号姓名班级电气工程系过程、过程控制块等基本原理过程的含义:过程是程序运行过程中对数据集的处理,以及由独立单元对系统资源的分配和调度。在不同的数据集上运行程序,甚至在同一数据集上运行多个程序,是一个不同的过程。(2)程序状态:一般来说,一个程序必须有三种基本状态:就绪、执行和阻塞。然而,在许多系统中,过程的状态变化可以更好地描述,并且增加了两种状态:新状态和终端状态。1)就绪状态,当一个进程被分配了除处理器(CPU)以外的所有必要资源时,只要获得了处理器,进程就可以立即执行。此时,进程状态称为就绪状态。在系统中,多个进程可以同时处于就绪状态。通常,这些就绪进程被安排在一个或多个队列中,这些队列称为就绪队列。2)一旦处于就绪状态的进程得到处理器,它就可以运行了。进程的状态称为执行状态。在单处理器系统中,只有一个进程在执行。在多处理器系统中,可能有多个进程在执行中。3)阻塞状态由于某些事件(如请求输入和输出、额外空间等),执行进程被挂起。这称为阻塞状态,也称为等待状态。通常,处于阻塞状态的进程被调度为-?这个队列称为阻塞队列。4)新状态当一个新进程刚刚建立并且还没有放入就绪队列中时,它被称为新状态。5)终止状态是

什么时候-?进程已正常或异常终止,操作系统已将其从系统队列中删除,但尚未取消。这就是所谓的终结状态。(3)过程控制块是过程实体的重要组成部分,是操作系统中最重要的记录数据。控制块PCB记录操作系统描述过程和控制过程操作所需的所有信息。通过PCB,一个不能独立运行的程序可以成为一个可以独立运行的基本单元,并且可以同时执行一个进程。换句话说,在进程的整个生命周期中,操作系统通过进程PCB管理和控制并发进程。过程控制块是系统用于过程控制的数据结构。系统根据进程的PCB来检测进程是否存在。因此,进程控制块是进程存在的唯一标志。当系统创建一个进程时,它需要为它创建一个PCB;当进程结束时,系统回收其PCB,进程结束。过程控制块的内容过程控制块主要包括以下四个方面的信息。过程标识信息过程标识用于对过程进行标识,通常有外部标识和内部标识。外部标识符由流程的创建者命名。通常是一串字母和数字。当用户访问进程时使用。外部标识符很容易记住。内部标识符是为了方便系统而设置的。操作系统为每个进程分配一个唯一的整数作为内部标识符。通常是进程的序列号。描述性信息(process scheduling message)描述性信息是与流程调度相关的一些有关流程状态的信息,包括以下几个方面。流程状态:表

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

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 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 { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

进程管理实验报告

进程的控制 1 .实验目的 通过进程的创建、撤消和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。 【答:进程概念和程序概念最大的不同之处在于: (1)进程是动态的,而程序是静态的。 (2)进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。 (3)1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。 (4)进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块(PCB)三部分组成。而程序是一组有序的指令集合。】2 .实验内容 (1) 了解系统调用fork()、execvp()和wait()的功能和实现过程。 (2) 编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符串“parent:”和自己的标识数,而子进程则重复显示字符串“child:”和自己的标识数。 (3) 编写一段程序,使用系统调用fork()来创建一个子进程。子进程通过系统调用execvp()更换自己的执行代码,新的代码显示“new

program.”。而父进程则调用wait()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。 3 .实验步骤 (1)gedit创建进程1.c (2)使用gcc 1.c -o 1编译并./1运行程序1.c #include #include #include #include void mian(){ int id; if(fork()==0) {printf(“child id is %d\n”,getpid()); } else if(fork()==0) {printf(“child2 id %d\n”,getpid()); } else {id=wait(); printf(“parent id is %d\n”,getpid()); }

实验一-进程控制实验

实验一进程控制 一、实验目的: 加深对进程概念的理解,明确进程和程序的区别;掌握Linux操作系统的进程创建和终止操作,体会父进程和子进程的关系及进程状态的变化;进一步认识并发执行的实质,编写并发程序。 二、实验平台: 虚拟机:VMWare9以上 操作系统:Ubuntu12.04以上 编辑器:Gedit | Vim 编译器:Gcc 三、实验内容: (1)编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示“身份信息”:父进程显示“Parent process! PID=xxx1 PPID=xxx2”;子进程显示“Childx process! PID=xxx PPID=xxx”。多运行几次,观察记录屏幕上的显示结果,并分析原因。 说明: xxx1为进程号,用getpid()函数可获取进程号; xxx2为父进程号,用getppid()函数可获取父进程号; Childx中x为1和2,用来区别两个子进程; wait()函数用来避免父进程在子进程终止之前终止。 程序源码: #include #include #include #define NUM 2 int main(void) {

pid_t pid1,pid2; if((pid1=fork())<0){ printf("创建进程1失败"); }else{ if(pid1==0){ //子进程1执行 printf("Child1 process: "); printf("PID=%d PPID=%d \n",getpid(),getppid()); sleep(2); }else{ if((pid2=fork())<0){ printf("创建进程2失败"); }else{ if(pid2==0){ //子进程2执行 printf("Child2 process: "); printf("PID=%d PPID=%d \n",getpid(),getppid()); } else{ //父进程执行 wait(); wait(); printf("Parent process: "); printf("PID=%d PPID=%d \n",getpid(),getppid()); exit(0); } } } } }

实验1进程的控制与描述资料

实验1 进程的控制与描述 1.1 Windows任务管理器的进程管理 1.1.1 背景知识 Windows 的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。使用任务管理器.可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。也可以使用多个参数评估正在运行的进程的活动,以及查看CPU和内存使用情况的图形和数据。其中: (1)“应用程序”选项卡显示正在运行程序的状态,用户能够结束、切换或者启动程序。(2)“进程”选项卡显示正在运行的进程信息。例如,可以显示关于CPU和内存使用情况、页面错误、句柄计数以及许多其他参数的信息。 (3)“性能”选项卡显示计算机动态性能,包括CPU和内存使用情况的图表,正在运行的句柄、线程和进程的总数、物理、核心和认可的内存总数(KB)等。 1.1.2 实验目的 通过在windows任务管理器中对程序进程进行响应的管理操作系统进程管理的概念,学习观察操作系统运行的动态性能。 1.1.3工具/准备工作 在开始本实验之前,请回顾教科书的相关内容。 需要准备一台运行windows 7操作系统的计算机。 1.1.4 实验内容与步骤 启动并进入Windows环境,按Ctrl+A1t+DeL键,或者右键单击任务栏,快捷菜单中单击“任务管理器”,打开“任务管理器”窗口。 在本次实验中,你使用的操作系统版本是: 在当前机器中,由你打开、正在运行的应用程序有:

Windows“任务管理器”的窗口由个选项卡组成,分别是: 当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察): (1)使用任务管理器终止进程 步骤1:单击“进程”选项卡,一共显示个进程。请试着区分一下,其中:系统(system)进程有个,填入表2-1中。 表2-1 实验记录

浙工大过程控制实验报告

浙工大过程控制实验报告 202103120423徐天宇过程控制系统实验报告 实验一:系统认识及对象特性测试 一实验目的 1了解实验装置结构和组成及组态软件的组成使用。 2 熟悉智能仪表的使用及实验装置和软件的操作。 3熟悉单容液位过程的数学模型及阶跃响应曲线的实验方法。 4学会有实际测的得单容液位过程的阶跃响应曲线,用相关的方法分别确定它们的参数,辨识过程的数学模型。二实验内容 1 熟悉用MCGS组态的智能仪表过程控制系统。 2 用阶跃响应曲线测定单容液位过程的数学模型。三实验设备 1 AE2000B型过程控制实验装置。 2 计算机,万用表各一台。 3 RS232-485转换器1只,串口线1根,实验连接线若干。四实验原理 如图1-1所示,设水箱的进水量为Q1,出水量为Q2,水箱的液面高度为h,出水阀V2固定于某一开度值。根据物料动态平衡的关系,求得: 在零初始条件下,对上式求拉氏变换,得:

式中,T为水箱的时间常数(注意:阀V2的开度大小会影响到水箱的时间常数),T=R2*C,K=R2为单容对象的放大倍数, R1、R2分别为V1、V2阀的液阻,C 为水箱的容量系数。 阶跃响应曲线法是指通过调节过程的调节阀,使过程的控制输入产生一个阶跃变化,将被控量随时间变化的阶跃响应曲线记录下来,再根据测试记录的响应曲线求取输入输出之间的数学模型。本实验中输入为电动调节阀的开度给定值OP,通过改变电动调节阀的开度给定单容过程以阶跃变化的信号,输出为上水箱的液位高度h。电动调节阀的开度op通过组态软件界面有计算机传给智能仪表,有智能仪表输出范围为:0~100%。水箱液位高度有由传感变送器检测转换为4~20mA的标准信号,在经过智能仪表将该信号上传到计算机的组态中,由组态直接换算成高度值,在计算机窗口中显示。因此,单容液位被控对象的传递函数,是包含了由执行结构到检测装置的所有液位单回路物理关系模型有上述机理建模可知,单容液位过程是带有时滞性的一阶惯性环节,电动调节阀的开度op,近似看成与流量Q1成正比,当电动调节阀的开度op为一常量作为阶跃信号时,该单容液位过程的阶跃响应为 需要说明的是表达式(2-3)是初始量为零的情况,如果是在一个稳定的过程下进行的阶跃响应,即输入量是在原来的基础上叠加上op的变化,则输出表达式是对应原来输出值得基础上的增

过程控制实验报告

《过程控制实验》 实验报告

第一章、过程控制实验装置的认识 一、过程控制实验的基本内容及概述 本次过程控制实验主要是对实验室的水箱水位进行控制。水箱液位控制系统是一个简单控制系统,所谓简单液位控制系统通常是指由一个被控对象、一个检测变送单元(检测元件及变送器)、以个控制器和一个执行器(控制阀)所组成的单闭环负反馈控制系统,也称为单回路控制系统。 简单控制系统有着共同的特征,它们均有四个基本环节组成,即被控对象、测量变送装置、控制器和执行器。 图1-1 水箱液位控制系统的原理框图 这是单回路水箱液位控制系统,单回路调节系统一般指在一个调节对象上用一个调节器来保持一个参数的恒定,而调节器只接受一个测量信号,其输出也只控制一个执行机构。本系统所要保持的恒定参数是液位的给定高度,即控制的任务是控制水箱液位等于给定值所要求的高度。 二、主要设备 1)水路装置的认识 过程控制实验用的水路装置图如下

图1-2 水路图 由水路装置图我们看到,装置主要有水箱,交流电动泵,热炉,管道,电动阀,电磁阀,流量计,液位传感器,温度传感器组成,可以构成一个完整的过程控制实验平台。从上图我们可以看出,装置主要分为两大部分,第一水路,管道,热炉,水箱等等物理对象,第二是传感器,执行机构等等的控制部分的装置。 实验装置具体介绍如下:

b)电气连接图 由电气装置的图我们可以看到,所有的电器连接都在这里,主要是一些传感器信号,电动驱动信号,用于电动装置的驱动。 见附件 c)操作面板图: 从操作面板上我们可以看到主要是由四个表,由P909构成,用于测量控制压力、流量、液位、温度的测量以及控制,PV代表反馈测量,外给定可以用于串级控制,OUT用于输出信号,以上接口均使用4-20mA标准 见附件 第二、三章、实验系统的认知(包括力控软件,P909,实验装置) a)力控软件的安装 首先使用光盘里的Setup.exe安装力控软件的主题部分,然后将IO Servers文件夹拷到力控软件的安装目录下,安装IO Servers驱动 然后打开力控软件,寻找到力控软件的目录,点击开发模式,然后找到COM设置的部分,如图

实验一:进程控制描述及控制

实验一:进程控制描述与控制 [1]Windows“任务管理器”的进程管理 一、实验名称 Windows“任务管理器”的进程管理 二、实验目的 通过在Windows 任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。 三、实验容与步骤 1. 使用任务管理器终止进程 2. 显示其他进程计数器 3. 更改正在运行的程序的优先级 启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。 在本次实验中,你使用的操作系统版本是: _______Windows_XP______________________ 当前机器中由你打开,正在运行的应用程序有: 1) _______ ________ 2) ___________实验一___ 3) _________操作系统_____________ 4) ___________百度首页________ 5) ____________ftp://172.16.20.168_______ Windows“任务管理器”的窗口由____4__个选项卡组成,分别是: 1) _______应用程序______________ 2) _进程__________________ 3) ______ 性能___________________ 4) ________联网__________________ 当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :

1. 使用任务管理器终止进程 步骤1:单击“进程”选项卡,一共显示了__40___个进程。请试着区分一下,其中:系统(SYSTEM) 进程有____25__个,填入表3-1中。 表3-1 实验记录 Wmiprvse SYSTEM 00 5376k cidaemon SYSTEM 00 300k cidaemon SYSTEM 00 856k cidaemon SYSTEM 50 284k cisvc SYSTEM 00 924k csrss SYSTEM 00 7412k mqtgsvc SYSTEM00 4144k mqsvc SYSTEM 00 6632k

实验一:进程控制描述与控制

实验一:进程控制描述与控制 [1] Windows“任务管理器”的进程管理 一、实验名称 Windows“任务管理器”的进程管理 二、实验目的 通过在Windows 任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。 三、实验容与步骤 1. 使用任务管理器终止进程 2. 显示其他进程计数器 3. 更改正在运行的程序的优先级 启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。 在本次实验中,你使用的操作系统版本是: _______Windows_XP______________________ 当前机器中由你打开,正在运行的应用程序有: 1) _______ ________ 2) ___________实验一___ 3) _________操作系统_____________ 4) ___________百度首页________ 5) ____________ftp://172.16.20.168_______ Windows“任务管理器”的窗口由____4__个选项卡组成,分别是: 1) _______应用程序______________ 2) _进程__________________ 3) ______ 性能___________________ 4) ________联网__________________ 当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :

1. 使用任务管理器终止进程 步骤1:单击“进程”选项卡,一共显示了__40___个进程。请试着区分一下,其中:系统(SYSTEM) 进程有____25__个,填入表3-1中。 表3-1 实验记录 Wmiprvse SYSTEM 00 5376k cidaemon SYSTEM 00 300k cidaemon SYSTEM 00 856k cidaemon SYSTEM 50 284k cisvc SYSTEM 00 924k csrss SYSTEM 00 7412k mqtgsvc SYSTEM00 4144k mqsvc SYSTEM 00 6632k snmp SYSTEM 00 4340k tcpservcs SYSTEM 00 3840k Smss SYSTEM 00 404k System SYSTEM 00 300k System Idle Process SYSTEM 99 28k

北邮-大三-操作系统-进程管理实验报告

实验一进程管理 1.实验目的: (1)加深对进程概念的理解,明确进程和程序的区别; (2)进一步认识并发执行的实质; (3)分析进程争用资源的现象,学习解决进程互斥的方法; (4)了解Linux系统中进程通信的基本原理。 2.实验预备内容 (1)阅读Linux的源码文件,加深对进程管理概念的理解; (2)阅读Linux的fork()源码文件,分析进程的创建过程。 3.实验内容 (1)进程的创建: 编写一段程序,使用系统调用fork() 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。 源代码如下: #include #include<> #include<> #include <> #include <> int main(int argc,char* argv[]) { pid_t pid1,pid2; pid1 = fork(); if(pid1<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid1 == 0){

printf("b\n"); } else{ pid2 = fork(); if(pid2<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid2 == 0){ printf("c\n"); } else{ printf("a\n"); sleep(2); exit(0); } } return 0; } 结果如下: 分析原因: pid=fork(); 操作系统创建一个新的进程(子进程),并且在进程表中相应为它建立一个新的表项。新进程和原有进程的可执行程序是同一个程序;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!

实验一-进程控制实验

实验一-进程控制实验

实验一进程控制 一、实验目的: 加深对进程概念的理解,明确进程和程序的区别;掌握Linux操作系统的进程创建和终止操作,体会父进程和子进程的关系及进程状态的变化;进一步认识并发执行的实质,编写并发程序。 二、实验平台: 虚拟机:VMWare9以上 操作系统:Ubuntu12.04以上 编辑器:Gedit | Vim 编译器:Gcc 三、实验内容: (1)编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示“身份信息”:父进程显示“Parent process! PID=xxx1 PPID=xxx2”;子进程显示“Childx process! PID=xxx PPID=xxx”。多运行几次,观察记录屏幕上的显示结果,并分析原因。

说明: xxx1为进程号,用getpid()函数可获取进程号; xxx2为父进程号,用getppid()函数可获取父进程号; Childx中x为1和2,用来区别两个子进程; wait()函数用来避免父进程在子进程终止之前终止。 程序源码: #include #include #include #define NUM 2 int main(void) { pid_t pid1,pid2; if((pid1=fork())<0){ printf("创建进程1失败"); }else{

if(pid1==0){ //子进程1执行 printf("Child1 process: "); printf("PID=%d PPID=%d \n",getpid(),getppid()); sleep(2); }else{ if((pid2=fork())<0){ printf("创建进程2失败"); }else{ if(pid2==0){ //子进程2执行 printf("Child2 process: "); printf("PID=%d PPID=%d \n",getpid(),getppid()); } else{ //父进程执行 wait();

操作系统实验实验1进程描述及控制

信息学院 操作系统实验报告 姓名:杨博敏 学号:1305290206 专业:软件工程 班级:软件1302班 实验名称:进程控制与描述

实验一进程控制与描述 3.1 Windows“任务管理器”的进程管理 3.1.1 Windows XP的任务管理器 Windows XP的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。其中: 1) “应用程序”选项卡显示正在运行程序的状态,用户能够结束、切换或者启动程序。 2) “进程”选项卡显示正在运行的进程信息。例如,可以显示关于CPU 和内存使用情况、页面错误、句柄计数以及许多其他参数的信息。 3) “性能”选项卡显示计算机动态性能,包括CPU 和内存使用情况的图表,正在运行的句柄、线程和进程的总数,物理、核心和认可的内存总数(KB) 等。 3.1.2 练习与实验 在本节“练习与实验”中,通过在Windows任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。 1. 工具/准备工作 在开始本实验之前,请回顾教科书的相关内容。 需要准备一台运行Windows XP Professional操作系统的计算机。

2. 实验内容与步骤 启动并进入Windows环境,单击Ctrl+Alt+Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。 在本次实验中,你使用的操作系统版本是: _____windowsXP_______________________________________________ 当前机器中由你打开,正在运行的应用程序有: 1)Microsoft_Word Windows“任务管理器”的窗口由4个选项卡组成,分别是: 1)应用程序 2) 进程 3) 性能 4)用户 当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) : 1) 映像名称 2) 用户名 3) CPU 4)内存使用 (1) 使用任务管理器终止进程 步骤1:单击“进程”选项卡,一共显示了__48个进程。请试着区分一下,其中: 系统(SYSTEM) 进程有___23___个,填入表3.1中。 表3.1 实验记录 注:在Windows 2000中,“用户名”需要自己判断。这一点,在Windows XP中有了改进。 服务(SERVICE) 进程有_5_个,填入表3.2中。

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

操作系统进程控制实验报告 硬件环境:处理器: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()函数装入新的程序执行。 4.信号的机理:信号是用来通知进程某个特定的事件已经发生。信号是由特定的事件产生,信号必须要发送到进程,一旦发送,进程必须得到处理。信号可以可以有系统默认处理也可以用户自定义处理。 5.如何通过信号控制程序:每个进程都有信号机制检验是否有信号到达,如果有,捕获信号后,根据系统默认处理或者用户自定义的防方法处理信号,当信号处理完后,在返回原来的程序继续执行。 代码: pctl.c: #include "pctl.h" int main(int argc, char *argv[]) { int m=2; int i; int seconds=3; int pid1; int pid2; //存放子进程号 int status1; int status2; //存放子进程返回状态 char *args1[] = {"/bin/ls","-all",NULL}; //子进程1要缺省执行的命令 char *args2[] = {"/bin/ps","-l",NULL}; //子进程2要缺省执行的命令 signal(SIGINT,(sighandler_t)sigcat); //注册一个本进程处理键盘中断的函数 while(m!=0)

过程控制实验报告

过程控制系统Matlab/Simulink仿真实验实验一过程控制系统建模 (1) 实验二PID控制 (10) 实验三串级控制 (27) 实验四比值控制 (35) 实验五解耦控制系统 (40)

实验一 过程控制系统建模 作业题目一: 常见的工业过程动态特性的类型有哪几种?通常的模型都有哪些?在Simulink 中建立相应模型,并求单位阶跃响应曲线。 答:常见的工业过程动态特性的类型有:无自平衡能力的单容对象特性、有自平衡能力的单容对象特性、有相互影响的多容对象的动态特性、无相互影响的多容对象的动态特性等。通常的模型有一阶惯性模型,二阶模型等。 (1) 无自平衡能力的单容对象特性: 两个无自衡单容过程的模型分别为s s G 5.01)(=和s e s s G 55.01)(-=,在Simulink 中建立模型如下

(2) 有自平衡能力的单容对象特性: 两个自衡单容过程的模型分别为122)(+=s s G 和s e s s G 51 22 )(-+=,在Simulink 中建立模型如下:

(3) 有相互影响的多容对象的动态特性: 有相互影响的多容过程的模型为1 21 )(2 2++=Ts s T s G ξ,当参数1=T ,2.1 ,1 ,3.0 ,0=ξ时,在Simulink 中建立模型如下:

(4) 无相互影响的多容对象的动态特性: 两个无相互影响的多容过程的模型为) 1)(12(1 )(++= s s s G (多容有自衡能力的对象)和 ) 12(1 )(+= s s s G (多容无自衡能力的对象),在Simulink 中建立模型如下

实验1_进程管理

实验一进程管理 【实验目的】 1.加深对进程概念及进程管理各部分内容的理解。 2.熟悉进程管理中主要数据结构的设计和进程调度算法、进程控制机构、同步机构、通讯机构的实施。 【实验要求】 1.调试并运行一个允许n 个进程并发运行的进程管理模拟系统。了解该系统的进程控制、同 2.步及通讯机构,每个进程如何用一个PCB 表示、其内容的设置;各进程间的同步关系;系统在运行过程中显示各进程的状态和有关参数变化情况的意义。 【实验环境】 具备Windows或MS-DOS操作系统、带有Turbo C 集成环境的PC机。 【实验重点及难点】 重点:理解进程的概念,进程管理中主要数据结构的设计和进程调度算法、进程控制 机构、同步机构、通讯机构的实施。 难点:实验程序的问题描述、实现算法、数据结构。 【实验内容】 一.阅读实验程序 程序代码见【实验例程】。 二.编译实验例程 用Turbo C 编译实验例程。 三.运行程序并对照实验源程序阅读理解实验输出结果的意义。 【问题与讨论】 系统为进程设置了几种状态?说明这些状态的含义。 三种。就绪、执行、阻塞。就绪:处于就绪状态的进程已经得到除 CPU之外的其他资源,只要由调度得到处理机,便可立即投入执行。执行:只有处于内存就绪状态的进程在得到处理机后才能立即投入执行。阻塞:进程因等待某个事件发生而放弃处理机进入等待状态。 采用何种方式来模拟时间片?简要说明实现方法。 系统分时执行各进程,并规定3个进程的执行概率均为33%。通过产生随机数x来模拟时间片。当进程process1访问随机数x时,若x ≥0.33;当进程process2访问x时,若x<0.33或x≥0.66;当进程process3访问x时,若x<0.66,分别认为各进程的执行时间片到限,产生“时间片中断”而转入低就绪态t。 进程调度算法采用剥夺式最高优先数法。各进程的优先数通过键盘输入予以静态设置。调度程序每次总是选择优先数最小(优先权最高)的就绪进程投入执行。先从r状态进程中选择,在从t状态进程中选择。当现行进程唤醒某个等待进程,且被唤醒进程的优先数小于现行进程时,则剥夺现行进程的执行权。 各进程在使用临界资源s1和s2时,通过调用信号量sem1和sem2上的P,V操作来实现同步,阻塞和唤醒操作负责完成从进程的执行态到等待态到就绪态的转换。 系统启动后,在完成必要的系统初始化后便执行进程调度程序。但执行进程因“时间片中断”,或被排斥使用临界资源,或唤醒某个等待资源时,立即进行进程调度。当3个进程都处于完成状态后,系统退出运行 由于输出结果较多,一屏显示不完,如何较好地阅读程序输出? 一是在程序中控制输出的行数,比如20行,输出后用gets停顿一下,继续时回车即可;

相关主题
文本预览
相关文档 最新文档