Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа 7 / Отчет к лабораторной 7

.doc
Скачиваний:
27
Добавлен:
01.05.2014
Размер:
69.63 Кб
Скачать

Федеральное агентство по образованию

Санкт Петербургский Государственный Электротехнический Университет «ЛЭТИ»

Кафедра ВТ

ОТЧЕТ

по лабораторной работе №7

«Исследование процессов и потоков»

по дисциплине «Операционные Системы»

вариант 4

Выполнили студенты группы

Проверил Степулёнок Д. О.

Санкт Петербург

2007

Задание на лабораторную работу:

Разработать консольное приложение для исследования процессов и связанных с ними потоков.

Возможности программы:

  • получение снимка текущего состояния системы

  • получение упорядоченного списка процессов

  • получение упорядоченного списка потоков для выбранного процесса

В данном варианте необходимо список процессов и список потоков представить

в отсортированном виде по уровню приоритетов в порядке возрастания.

Используемые функции Win32 API (tlhelp32.h).

Порядок выполнения:

  1. Постановка задания

  2. Разработка алгоритма

  3. Реализация алгоритма – написание программы

  4. Разработка контрольных и тестовых примеров

  5. Тестирование программы

Листинг программы:

#include <cstdlib>

#include <iostream>

#include <windows.h>

#include <Tlhelp32.h>

#include <conio.h>

using namespace std;

void bubble(string etal[100],int item[100],int count);

void bubble1(DWORD etal[1000],int item[1000],int count);

void bubble(string etal[100],int item[100],int count)

{

register int a,b;

int t;string x;

for(a=1;a<count;++a)

for(b=count-1;b>=a;--b)

{

if(item[b-1]>item[b])

{

t=item[b-1];

item[b-1]=item[b];

item[b]=t;

x=etal[b-1];

etal[b-1]=etal[b];

etal[b]=x;

}

}

}

void bubble1(DWORD etal[1000],int item[1000],int count)

{

register int a,b;

int t;DWORD x;

for(a=1;a<count;++a)

for(b=count-1;b>=a;--b)

{

if(item[b-1]>item[b])

{

t=item[b-1];

item[b-1]=item[b];

item[b]=t;

x=etal[b-1];

etal[b-1]=etal[b];

etal[b]=x;

}

}

}

int main(int argc, char *argv[])

{

cout<<"\t\tLaboratory working number 7"<<endl;

//*****Делаем снимок процессов системы******

HANDLE Snapshot,Snapshot1;

Snapshot=CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS,0);

if(Snapshot==INVALID_HANDLE_VALUE){cout<<"Error!"<<endl;}

//*****Получение первого процесса в слепке,потом следующий*****

PROCESSENTRY32 First;

BOOL Flag=1,Next;

int i=0;

int prioritet[100];

string ProcessName[100];

First.dwSize=sizeof(PROCESSENTRY32);

Next = Process32First(Snapshot,&First);

cout<<"\t\tList of process:"<<endl;

while(Next){

prioritet[i]=(int)First.pcPriClassBase;

ProcessName[i]=(string)First.szExeFile;

First.dwSize = sizeof(PROCESSENTRY32);

Next = Process32Next(Snapshot, &First);

i++;

}

bubble(ProcessName,prioritet,i);

for(int j=0;j<i;j++)

{

cout<<"\t"<<ProcessName[j];

cout <<"\tPrioritet - " <<prioritet[j]<< endl;

}

//*****Делаем снимок потоков системы*****

Snapshot1= CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);

if(Snapshot1==INVALID_HANDLE_VALUE){cout<<"Error!"<<endl;}

//*****Получение первого потока в слепке,потом следующий

THREADENTRY32 First1;

int i1=0;

int prioritet1[1000];

DWORD ThreadName[1000];

First1.dwSize = sizeof(THREADENTRY32);

Next = Thread32First(Snapshot1, &First1);

cout<<"\t\tList of threads:"<<endl;

while(Next){

prioritet1[i1]=(int)First1.tpBasePri;

ThreadName[i1]=First1.th32ThreadID;

First1.dwSize = sizeof(THREADENTRY32);

Next = Thread32Next(Snapshot1,&First1);

i1++;

}

bubble1(ThreadName,prioritet1,i1);

for(int j1=0;j1<i1;j1++)

{

cout<<"\tID of thread - "<<ThreadName[j1];

cout<<"\tPrioretet (base) - "<<prioritet1[j1]<<endl;

}

system("PAUSE");

return EXIT_SUCCESS;

}

Контрольные и тестовые примеры:

Тестирование программы:

Программа запускалась на компьютере с операционной системой Windows XP

Professional в нормальном режиме его работы:

Laboratory working number 7

List of process:

[System Process] Prioritet - 0

System Prioritet - 8

svchost.exe Prioritet - 8

svchost.exe Prioritet - 8

svchost.exe Prioritet - 8

svchost.exe Prioritet - 8

svchost.exe Prioritet - 8

spoolsv.exe Prioritet - 8

nod32krn.exe Prioritet - 8

RichVideo.exe Prioritet - 8

svchost.exe Prioritet - 8

alg.exe Prioritet - 8

explorer.exe Prioritet - 8

igfxtray.exe Prioritet - 8

hkcmd.exe Prioritet - 8

igfxpers.exe Prioritet - 8

RTHDCPL.EXE Prioritet - 8

nod32kui.exe Prioritet - 8

hpwuSchd2.exe Prioritet - 8

SSAAD.exe Prioritet - 8

PDVDServ.exe Prioritet - 8

GrooveMonitor.exe Prioritet - 8

ctfmon.exe Prioritet - 8

msmsgs.exe Prioritet - 8

SSScsiSV.exe Prioritet - 8

WINWORD.EXE Prioritet - 8

devcpp.exe Prioritet - 8

lab7.exe Prioritet - 8

services.exe Prioritet - 9

lsass.exe Prioritet - 9

smss.exe Prioritet - 11

csrss.exe Prioritet - 13

winlogon.exe Prioritet - 13

List of threads:

ID of thread - 0 Prioretet (base) - 0

ID of thread - 8 Prioretet (base) - 0

ID of thread - 1124 Prioretet (base) - 1

ID of thread - 1692 Prioretet (base) - 1

ID of thread - 2528 Prioretet (base) - 6

ID of thread - 72 Prioretet (base) - 8

ID of thread - 76 Prioretet (base) - 8

ID of thread - 80 Prioretet (base) - 8

ID of thread - 84 Prioretet (base) - 8

ID of thread - 88 Prioretet (base) - 8

ID of thread - 92 Prioretet (base) - 8

ID of thread - 96 Prioretet (base) - 8

……….. //Отображена часть вывода потоков

ID of thread - 1704 Prioretet (base) - 9

ID of thread - 1484 Prioretet (base) - 10

ID of thread - 1440 Prioretet (base) - 11

ID of thread - 388 Prioretet (base) - 11

ID of thread - 392 Prioretet (base) - 11

ID of thread - 396 Prioretet (base) - 11

ID of thread - 900 Prioretet (base) - 11

ID of thread - 1236 Prioretet (base) - 11

ID of thread - 36 Prioretet (base) - 12

ID of thread - 40 Prioretet (base) - 12

ID of thread - 44 Prioretet (base) - 12

ID of thread - 48 Prioretet (base) - 12

ID of thread - 52 Prioretet (base) - 12

ID of thread - 56 Prioretet (base) - 12

ID of thread - 60 Prioretet (base) - 12

ID of thread - 16 Prioretet (base) - 13

ID of thread - 20 Prioretet (base) - 13

ID of thread - 24 Prioretet (base) - 13

ID of thread - 28 Prioretet (base) - 13

ID of thread - 32 Prioretet (base) - 13

ID of thread - 452 Prioretet (base) - 13

ID of thread - 456 Prioretet (base) - 13

ID of thread - 460 Prioretet (base) - 13

ID of thread - 472 Prioretet (base) - 13

ID of thread - 476 Prioretet (base) - 13

ID of thread - 480 Prioretet (base) - 13

ID of thread - 528 Prioretet (base) - 13

ID of thread - 1868 Prioretet (base) - 13

ID of thread - 224 Prioretet (base) - 13

ID of thread - 3384 Prioretet (base) - 13

ID of thread - 496 Prioretet (base) - 13

ID of thread - 500 Prioretet (base) - 13

ID of thread - 504 Prioretet (base) - 13

ID of thread - 516 Prioretet (base) - 13

ID of thread - 896 Prioretet (base) - 13

ID of thread - 1112 Prioretet (base) - 13

ID of thread - 2188 Prioretet (base) - 13

ID of thread - 3128 Prioretet (base) - 13

ID of thread - 3156 Prioretet (base) - 13

ID of thread - 68 Prioretet (base) - 14

ID of thread - 64 Prioretet (base) – 15

………… //Отображена часть вывода потоков

ID of thread - 228 Prioretet (base) - 15

Программные ограничения:

Данная программа имеет следующие ограничения:

-Возможно отображение до 100 процессов.

-Возможно отражение до 1000 потоков.

-Алгоритмы сортировки являются не самыми эффективными.

Схема алгоритма программы.

Соседние файлы в папке Лабораторная работа 7