Добавил:
piter-i.narod.ru Программист ПЛИС Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

laba26

.docx
Скачиваний:
10
Добавлен:
24.06.2018
Размер:
40.67 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

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

высшего профессионального образования

Московский технический университет связи и информатики

----------------------------------------------------------------------------------------------------

Кафедра Математической кибернетики и информационных технологий

КУРСОВАЯ РАБОТА

по дисциплине

ОПЕРАЦИОННЫЕ СИСТЕМЫ

на тему:

«ИССЛЕДОВАНИЕ МЕХАНИЗМОВ МЕЖПРОЦЕССНОГО ВЗАИМОДЕЙСТВИЯ»

Выполнил:

_______________________________________

(Ф.И.О.)

Группа:_______________________

Проверил:

Старший преподаватель: Королькова Татьяна Валерьевна

(Ф.И.О., должность преподавателя)

Оценка_________________________

Дата ___________________________

Москва 2018

Задание на курсовую работу

Разработать многозадачное приложение, выполняющее получение, сбор и вывод системной информации в соответствии с вариантом задания № 26.

Содержание

Введение 3

Основная часть: 3

Краткие теоретические основы разрабатываемой темы 4

Разработка и описание алгоритма работы приложения 5

Описание структуры программы 5

Руководство пользователя 9

Результаты применения программы 10

Заключение 11

Введение

Данная курсовая работа описывает предоставление пользователю компьютерной системы некоторой системной информации. Для отображения пользователю интересующей его информации используется графическое её отображение в виде оконного интерфейса.

Основная часть:

Постановка задачи:

Приложение должно состоять из трёх процессов.

Процесс 1 определяет и передает имя компьютера, имя пользователя b версию операционной системы

Процесс 2 определяет и передает процент используемой физической памяти b процент используемой виртуальной памяти

Способ коммуникации между двумя процессами осуществляется через локальные, почтовые ящики.

Краткие теоретические основы разрабатываемой темы

Разработка и описание алгоритма работы приложения

Программный комплекс создаётся на основе технологии «клиент-сервер» средствами интегрированной среды разработки Microsoft Visual C++ 6,0 MSDN.

Процесс 1 инициируется файлом srv1.exe. Приложение является проектом Win32 Application. Приложение состоит из одной главной функции.

Процесс 2 инициируется файлом srv2.exe. Приложение является проектом Win32 Application. Приложение состоит из одной главной функции.

Серверный процесс инициируется файлом client.exe. Приложение является полным проектом Win32 Application. Его структура представляет стандартное Windows приложение, которое состоит из двух функций.

Главная функция выполняет регистрацию класса окна в операционной системе, затем создаёт и показывает главное окно. Далее получает сообщения от операционной системы и отправляет их на обработку оконной функции.

Оконная функция обрабатывает три полученных сообщения, а остальные сообщения передаются на обработку по умолчанию. По сообщению о создании окна выполняется создание экранных элементов в окне. Две программные кнопки для вызова клиентских процессов и одно поле для отображения результата. По сообщению о реакции пользователя выполняется создание почтового ящика, вызов одного из двух клиентских процессов, в зависимости от выбора пользователя и приём сообщений из почтового ящика. Далее почтовый ящик закрывается, а принятые сообщения отображаются в главном окне приложения.

Описание структуры программы

Исходный код первого клиентского процесса.

#include <windows.h>

#include <stdio.h>

HANDLE hMs;

DWORD written;

char str[]="";

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)

{

OSVERSIONINFO lpVI;

lpVI.dwOSVersionInfoSize = sizeof(lpVI);

lpVI.szCSDVersion[128];

char lpbuf1[MAX_COMPUTERNAME_LENGTH+1], lpbuf2[MAX_COMPUTERNAME_LENGTH+1];

DWORD size1 = MAX_COMPUTERNAME_LENGTH+1, size2 = MAX_COMPUTERNAME_LENGTH+1;

GetComputerName(lpbuf1, &size1);

GetUserName(lpbuf2, &size2);

GetVersionEx(&lpVI);

switch(lpVI.dwPlatformId)

{

case VER_PLATFORM_WIN32s:

strcat(str, "Win32s работающая на Windows 3.1\n");

break;

case VER_PLATFORM_WIN32_WINDOWS:

strcat(str, "Win32 работающая на Windows 95 или Windows 98\n");

break;

case VER_PLATFORM_WIN32_NT:

strcat(str, "Win32 работающая на Windows NT\n");

break;

}

strcat(str, lpVI.szCSDVersion);

sprintf(str, "Имя компьютера:\x020%s\nИмя пользователя:\x020%s\n%d\x2e%d\x2e%d\n", lpbuf1, lpbuf2, lpVI.dwMajorVersion, lpVI.dwMinorVersion, lpVI.dwBuildNumber);

hMs = CreateFile("\\\\.\\mailslot\\mtuci", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

if(hMs == INVALID_HANDLE_VALUE)

return 0;

if(!WriteFile(hMs, str, strlen(str)+1, &written, NULL))

{

CloseHandle(hMs);

return 0;

}

MessageBox(NULL, str, "Процесс 1", MB_OK);

CloseHandle(hMs);

return 0;

}

Исходный код второго клиентского процесса.

#include <windows.h>

#include <stdio.h>

HANDLE hMs;

DWORD written;

char str[]="";

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)

{

MEMORYSTATUS ms;

ms.dwLength = sizeof(ms);

GlobalMemoryStatus(&ms);

sprintf(str, "Процент используемой физической памяти: %d\nПроцент используемой виртуальной памяти: %d", ms.dwMemoryLoad, ms.dwTotalPageFile);

hMs = CreateFile("\\\\.\\mailslot\\mtuci", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

if(hMs == INVALID_HANDLE_VALUE)

return 0;

if(!WriteFile(hMs, str, strlen(str)+1, &written, NULL))

{

CloseHandle(hMs);

return 0;

}

MessageBox(NULL, str, "Процесс 2", MB_OK);

return 0;

}

Исходный код серверного процесса.

#include <windows.h>

#include <stdio.h>

HINSTANCE hInst;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)

{

HWND hwnd;

MSG msg;

char WinName[]="Mtuci";

WNDCLASS wc;

wc.cbClsExtra = 0;

wc.cbWndExtra = 0;

wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wc.hInstance = hInst;

wc.lpfnWndProc = WndProc;

wc.lpszClassName = WinName;

wc.lpszMenuName = NULL;

wc.style = CS_HREDRAW | CS_VREDRAW;

if(!RegisterClass(&wc))

return 0;

int x,y;

x = GetSystemMetrics(SM_CXSCREEN);

y = GetSystemMetrics(SM_CYSCREEN);

hwnd = CreateWindow(WinName,"Клиентское приложение 26 вариант",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,x/2,y/3,NULL,NULL,hInst,NULL);

if(!hwnd)

return 0;

ShowWindow(hwnd, nShowCmd);

UpdateWindow(hwnd);

while(GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)

{

RECT rt;

static HWND hSub;

STARTUPINFO si;

PROCESS_INFORMATION pi;

HANDLE hMs, event;

static DWORD ns, mc, nbr;

static int t;

static char srv[8];

static char buffer[400], buf[400];

switch(Msg)

{

case WM_CREATE:

GetClientRect(hWnd, &rt);

hSub = CreateWindow("static","",WS_CHILD|WS_VISIBLE,0,0,rt.right,(rt.bottom/2),hWnd,NULL,hInst,NULL);

CreateWindow("button","Запустить процесс 1",WS_CHILD|WS_VISIBLE,(rt.right-300)/3,rt.bottom/2,150,25,hWnd,(HMENU)1,hInst,NULL);

CreateWindow("button","Запустить процесс 2",WS_CHILD|WS_VISIBLE,((rt.right-300)/3)*2+150,rt.bottom/2,150,25,hWnd,(HMENU)2,hInst,NULL);

break;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case 1:

strcpy(srv, "srv1.exe");

break;

case 2:

strcpy(srv, "srv2.exe");

break;

}

ZeroMemory(&si, sizeof(si));

CreateProcess(srv, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi);

hMs = CreateMailslot("\\\\.\\mailslot\\mtuci", 0, MAILSLOT_WAIT_FOREVER, NULL);

if(hMs == INVALID_HANDLE_VALUE)

return 0;

while(GetMailslotInfo(hMs, NULL, &ns, &mc, NULL))

{

if(mc != 0)

{

ReadFile(hMs, buffer, 400, &nbr, NULL);

CloseHandle(hMs);

}

}

SetWindowText(hSub, buffer);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, Msg, wParam, lParam);

}

return 0;

}

Руководство пользователя

Для запуска приложения необходимо запустить файл client.exe

На экране появится главное окно программы с двумя кнопками.

При нажатии на кнопку с надписью «Запустить процесс 1» появится окно, отображающее системные цвета и код раскладки клавиатуры. При нажатии на кнопку с надписью «Запустить процесс 2» появится окно, отображающее идентификатор и дескриптор запущенного процесса.

Для успешной работы приложения файлы srv1.exe и srv2.exe должны находиться в одной папке с файлом client.exe

Результаты применения программы

Серверное приложение при запуске процесса 1

Серверное приложение при запуске процесса 2

Клиентское приложение 1

Клиентское приложение 2

Заключение

Данная курсовая работа описывает процесс создания клиент-серверных приложений для получения системной информации.

Соседние файлы в предмете Операционные системы