Лабораторная работа 7 / Отчет к лабораторной 7
.docФедеральное агентство по образованию
Санкт Петербургский Государственный Электротехнический Университет «ЛЭТИ»
Кафедра ВТ
ОТЧЕТ
по лабораторной работе №7
«Исследование процессов и потоков»
по дисциплине «Операционные Системы»
вариант 4
Выполнили студенты группы
Проверил Степулёнок Д. О.
Санкт Петербург
2007
Задание на лабораторную работу:
Разработать консольное приложение для исследования процессов и связанных с ними потоков.
Возможности программы:
-
получение снимка текущего состояния системы
-
получение упорядоченного списка процессов
-
получение упорядоченного списка потоков для выбранного процесса
В данном варианте необходимо список процессов и список потоков представить
в отсортированном виде по уровню приоритетов в порядке возрастания.
Используемые функции Win32 API (tlhelp32.h).
Порядок выполнения:
-
Постановка задания
-
Разработка алгоритма
-
Реализация алгоритма – написание программы
-
Разработка контрольных и тестовых примеров
-
Тестирование программы
Листинг программы:
#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 потоков.
-Алгоритмы сортировки являются не самыми эффективными.
Схема алгоритма программы.