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

os_kr

.pdf
Скачиваний:
25
Добавлен:
24.06.2018
Размер:
219.4 Кб
Скачать

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

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

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

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

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

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

КУРСОВАЯ РАБОТА по дисциплине

ОПЕРАЦИОННЫЕ СИСТЕМЫ на тему:

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

Выполнил:

Студент: Иванюк Пѐтр Григорьевич

(Ф.И.О.)

Группа: 2БВМ15025

Проверил:

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

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

Оценка_________________________

Дата ___________________________

Москва 2018

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

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

системной информации в соответствии с вариантом задания № 10.

Содержание

Введение................................................................................................................................................

3

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

3

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

4

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

5

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

7

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

13

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

14

Заключение .........................................................................................................................................

15

Введение

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

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

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

Необходимо разработать программный комплекс, показывающий информацию о текущем, местном времени и продолжительности текущего сеанса работы за компьютером. А также определять приоритеты клиентского процесса и серверного процесса и дельта - приоритеты их потоков.

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

Процесс 1 определяет и передает текущее местное время и продолжительность текущего сеанса работы в Windows.

Процесс 2 определяет и передает приоритеты клиентского и серверных процессов и дельта-приоритеты их потоков.

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

почтовые ящики.

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

Интерфейс прикладного программирования Win32 API - это программный интерфейс, который используется для управления 32-разрядными операционными системами семейства Windows. Он состоит из набора функций и подпрограмм,

предоставляющих программный доступ к возможностям операционной системы.

Процесс - это исполняемый экземпляр приложения и набор ресурсов, выделяемые ему.

Поток - это внутренняя составляющая процесса, которой операционная система выделяет процессорное время. Каждый процесс должен иметь минимум один поток.

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

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

Многозадачность это возможность управлять несколькими процессами или потоками на базе одного процессора. Многопроцессорной обработкой называется управление некоторым числом процессов или потоков на нескольких процессорах.

Каждый поток в системе имеет уровень приоритета, который представляет собой число в диапазоне от 0 до 31.

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

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

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

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

Инициализируется структура для хранения информации о текущем времени.

Вызывается API-функция для получения текущего времени, которая заполняет структуру.

Вызывается API-функция для получения продолжительности сеанса работы Windows в

миллисекундах с момента еѐ запуска после включения электропитания компьютера.

Выполняется подключение к созданному почтовому каналу. Если канал отсутствует, то приложение закрывается с возвратом кода ноль. Полученные функциями значения передаются через подключенный почтовый канал. При возникновении ошибки в передаче приложение закрывается с возвратом кода ноль. Затем значения выводятся на экран с помощью стандартного диалогового окна Windows. Затем выполняется отключение от почтового канала и приложение закрывается с возвратом кода ноль.

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

Вызывается API-функция для получения идентификатора текущего процесса.

Вызывается API-функция для получения идентификатора текущего потока. Выполняется подключение к созданному почтовому каналу. Если канал отсутствует, то приложение закрывается с возвратом кода ноль. Полученные функциями значения передаются через подключенный почтовый канал. При возникновении ошибки в передаче приложение закрывается с возвратом кода ноль. Затем значения выводятся на экран с помощью стандартного диалогового окна Windows. Затем выполняется отключение от почтового канала и приложение закрывается с возвратом кода ноль.

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

приложение, которое состоит из двух функций.

Главная функция выполняет регистрацию класса окна в операционной системе,

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

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

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

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

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

#include <windows.h> #include <stdio.h> HANDLE hMs; DWORD elapse, written; char str[]="";

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

{

SYSTEMTIME st; GetLocalTime(&st); elapse = GetTickCount();

sprintf(str, "Текущее местное время: %d:%d:%d:%d\nПродолжительность текущего сеанса работы: %d часов %d минут", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds,

(elapse/1000)/3600, ((elapse/1000)/60)/((elapse/1000)/3600)-60);

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 priority, written; int thread;

char str[]="";

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

{

priority = GetPriorityClass(GetCurrentProcess()); thread = GetThreadPriority(GetModuleHandle);

sprintf(str, "Приоритет клиентского процесса: %d\nПриоритет клиентского потока:

%d\n", priority, thread);

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);

CloseHandle(hMs); 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,"Главное окно клиентского приложения",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;

static DWORD ns, mc, nbr, pId; static int tId, 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,hIn st,NULL);

CreateWindow("button","Запустить процесс

1",WS_CHILD|WS_VISIBLE,(rt.right300)/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))

{

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