实验一 熟悉Windows2000XP中的进程和线程

实验一 熟悉Windows2000XP中的进程和线程

2023年6月22日发(作者:)

实验一 熟悉Windows2000/XP中的进程和线程

一、实验目的

1、熟悉Windows2000/XP中任务管理器的使用。

2、通过任务管理器识别操作系统中的进程和线程的相关信息。

3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。

二、实验理论基础及教材对应关系

1、实验理论基础:

(1) 操作系统中的进程和线程的概念;

(2) 进程PCB的各项指标含意;

2、本实验内容主要对应于教材第2章。

三、实验内容与步骤

1、启动操作系统自带的任务管理器:

方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“”。如下图所示:

2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表(填满即可):

表一:统计进程的各项主要信息

序号

1

2

3

4

5

6

7

8

进程名称 进程ID 线程数量 占用内存 优先级 占CPU时间 虚拟内存

10

6

1,412

780

12140

1116

1964

12936

24032

680

普通

普通

普通

普通

普通

普通

普通

00:00:00

00:00:00

0:00:04

0:00:00

0:00:01

0:00:10

0:00:13

0:00:00

1,436k

784k

12,168k

1,408k

1,044k

12,240k

36,188k

708k

system

system

administrator 32

system

system

9

11

administrator 5

administrator 27

system 4

3、从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。再从任务管理器中分别找到下列程序:、、、,试着结束它们,观察到的反应是 图标消失机器关机 ,原因是 系统文件 。

4、在任务管理器中找到进程“”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化 桌面图标、开始任务栏消失 、得到的结论是 任务栏、桌面应用 (说出进程的作用)。

5、运行“spy++.exe”应用软件,点击按钮““”的各项信息,并填写下表:

”,切换到进程显示栏上,查看进程

表二:统计线程的各项信息

进程: 中的各个线程

序号

1

2

3

4

00000798

00000000

00000008

00000010

00000074

00000000

00000004

00000004

8

0

0

13

12

0

1

15

0:00:00.156

0:12:02.768

0:0:06.895

0:0:00.000

1586

207348

11260

5

进程ID 线程ID 基本优先级 当前优先级 CPU时间 上下文开关 5

6

7

8

9

10

11

12

13

14

00000018

0000001C

00000024

00000124

0000035C

000000121

000000000

000000022

00000004

00000008

00000014

00000004

00000004

00000120

00000244

000000124

000000010

000000000

000000002

000000009

13

13

13

11

8

5

10

3

13

8

13

13

13

12

9

9

13

15

8

6

0:0:00.031

0:0:00.062

0:0:00.062

0:0:00.015

0:0:00.000

0:0:00.000

0:0:00.005

0:0:00.010

0:0:00.033

0:0:00.002

3860

10181

7796

281

13

5980

960

3

5

10489

6、注意某些线程前有“+”,如图所示:差异是 前者还包含了后者所没有的许多信息 。

,说明二者之间的四、实验材料的提交与成绩评定

1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)

2、实验源程序一份,请表明题号(电子版)

备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。

3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。

实验二 编程实现进程的控制

一、实验目的

1、进一步掌握进程的相关概念

2、掌握Windows2000/XP有关进程操作的API函数的使用。

3、了解进程的地址空间的含义。

二、实验理论基础及教材对应关系

1、实验理论基础:

(1)操作系统中的进程和线程的概念;

(2)进程的各种控制;

2、本实验内容主要对应于教材第2章和第3章的内容。

三、实验内容与步骤

1、启动应用程序“Process ”,应出现下面的界面:

2、依次改变上图中“下拉组合框”的选项,读出界面中显示的各项信息,并完成下表(填满即可):(统计中要包含、、、等应用程序)

表一:统计进程的一些信息

序号 进程名称

1

2

3

4

5

6

7

8

进程ID

父进程ID

优先级 线程数

Heaps数量 模块数量

3、从上表中观察“进程ID”和“父进程ID”两栏,总结并画出下列程序间的亲缘关系:、、、。

系统进程,用于微软Windows系统的安全机制。

微软Windows操作系统的一部分。用于管理启动和停止服务。

Windows 用户登陆程序,管理用户登录和退出。

微软客户端/服务端运行时子系统。

会话管理子系统,负责启动用户会话。

4、打开“ProcessInfo”工程文件,打开文件“”,找到函数:CreateProcess()的使用方法。按下列步骤建立一个工程项目,将记事本应用程序运行起来,即创建了一个新的进程。

步骤1、创建一个基于MFC的应用程序。 步骤2、在应用程序类型中选取“基于对话框”的选项。

步骤3、直接点击完成,系统将为你创建一个工程项目。

步骤4、然后在“资源视图”中,打开对话框“IDD_MY_DIALOG”,将出现以下对话框:

步骤5、打开界面上的“工具箱”,放置一个“按钮”,如下图:

步骤6、双击上面的“Button1”按钮,切换到代码的编写处:

输入以下语句:

步骤7、编译并运行此工程项目,看看运行的结果。

四、实验材料的提交与成绩评定

1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)

2、实验源程序一份,请表明题号(电子版)

备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。

3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。

实验三 Windows中的线程与线程同步现象

一、实验目的

1、掌握Windows中线程的操作。

2、熟悉线程不同步时的现象及环境因素。

3、掌握一种同步对象的使用。

二、实验理论基础及教材对应关系

1、线程和线程不同步的认识。

2、线程间的同步和通信。

3、本实验内容主要对应于教材第2章中关于线程的各节。

三、实验内容与步骤

1、定义全局变量 int i = 0; 初始值置为 0。

2、创建两个线程,一个对 i 执行加 1 操作,另一个对 i 执行减 1 操作。两个线程执行相同的次数。

显然,正常情况下,i 的仍然保持为 0。

#include

#include

#define MaxCount 9000000 // 循环次数要很大,可多次尝试一些值

DWORD __stdcall fun1( LPVOID p1)

{

}

for( int j =0 ;j < MaxCount;j++){

}

return 0;

i++; DWORD __stdcall fun2( LPVOID p1)

{

}

3、观察两个线程执行后的情况,可以发觉最后 i 的值不一定是 0, 有时是很大的正数,有时是很大的负数,这就是多个线程在操作同一个变量 i时,未同步时带来的严重问题。

还应该了解,在多个线程操作共享的变量时,才需要考虑同步问题。

5、给这两个线程加上同步代码,再来观察对 i 值的影响。步骤2的函数稍微改动即可:

CRITICAL_SECTION cs;

DWORD __stdcall fun1( LPVOID p1)

{

}

DWORD __stdcall fun2( LPVOID p1)

{

for( int j =0 ;j < MaxCount;j++){

::EnterCriticalSection(&cs);

i--;

::LeaveCriticalSection(&cs);

for( int j =0 ;j < MaxCount;j++){

}

::EnterCriticalSection(&cs);

i++;

::LeaveCriticalSection(&cs);

for( int j =0 ;j < MaxCount;j++){

}

return 0;

i--; }

}

加入的同步代码的两个线程,无论如何执行,i 的值总是 0 ,结果是正确的。

6、主函数的写法

int main()

{

}

DWORD id1,id2;

HANDLE hThread[2];

::InitializeCriticalSection(&cs);

hThread[0] = ::CreateThread(0,0,fun1,0,0,&id1);

hThread[1] = ::CreateThread(0,0,fun2,0,0,&id2);

::WaitForMultipleObjects(2,hThread,1,INFINITE);

printf("i = %dn",i);

::DeleteCriticalSection(&cs);

getchar();

return 0;

四、实验材料的提交与成绩评定

1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)

2、实验源程序一份,请表明题号(电子版)

备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。

3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。

实验四 操作系统中的经典线程同步问题

一、实验目的

1、加深对线程的理解、掌握Windows中线程的操作。

2、掌握死锁产生的原因。

3、掌握信号量、互斥量、事件、临界区等同步对象的使用。

二、实验理论基础及教材对应关系

1、进程和线程的关系。

2、线程间的同步和通信。

3、本实验内容主要对应于教材第2章中关于线程的各节、第3章中关于死锁的各节。

三、实验内容与步骤

1、运行实验程序“Reader_”,出现如下界面:

2、交替点击“创建读者线程”和“创建写者线程”按钮,出现如下界面:

3、观察第二步的实验现象,多次试验,可总结为:

(1)、当有“读者”的绿灯亮时,其余的“读者”灯的状态是 不亮 、其余的“写者”灯的状态是 亮 。

(2)、当有“写者”的绿灯亮时,其余的“写者”灯的状态是 不亮 、其余的“读者”灯的状态是 不亮 。

这说明“读者”间的关系是 相容 、“读者”之间的关系是 相容 、“读者-写者”之间的关系是 互斥 。(填相容、互斥)

4、打开工程文件“Reader_Writer”,查找下列函数的用法:

(1) AfxBeginThread();创建线程。ResumeThread();让线程恢复运行。

(2) CreateMutex();创建互斥量。ReleaseMutex();删除互斥量。

(3) CreateSemaphore();创建信号量。ReleaseSemaphore()删除信号量。

(4) WaitForSingleObject();等待同步对象。

(5) CloseHandle();关闭内核对象的句柄。

5、运行“”应用程序,观察线程间“死锁”时的状态。 6、创建一个“Console”应用程序,在main()函数中创建4个线程,线程的工作就是向屏幕输出几个字符后,就自己结束掉。

四、实验材料的提交与成绩评定

1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)

2、实验源程序一份,请表明题号(电子版)

备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。

3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1687428986a9354.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信