К курсовому проекту по курсу «Операционные системы и среды» Тема: «Распределенное решение вычислительной задачи»




Скачать 161.4 Kb.
Название К курсовому проекту по курсу «Операционные системы и среды» Тема: «Распределенное решение вычислительной задачи»
Дата публикации 24.05.2014
Размер 161.4 Kb.
Тип Решение
literature-edu.ru > Информатика > Решение
Министерство образования Республики Беларусь

УО «Белорусский Государственный Университет Информатики и Радиоэлектроники»

Кафедра информатики

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту по курсу

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

Тема: «Распределенное решение вычислительной задачи»
Выполнил:

студент группы 852002

Бенько И.С.
Проверил:

Сиротко С.И.

Минск, 2011

Оглавление





  1. Введение

В настоящее время существует множество задач, решение которых требует очень много времени (обработка петабайтов данных, научные задачи). И так как вычислительная мощность ПК слишком ограничена, а создание суперкомпьютеров слишком дорого – то помочь быстро выполнить ресурсоемкую задачу помогают распределенные вычисления. Главная идея такого подхода – в разделении всей задачи на более мелкие подзадачи, которые могут быть вычислены независимо друг от друга и объединены в итоговый результат.

Можно определить 2 типа построения сетей распределенных вычислений: специализированные кластера компьютеров и «обычные» ПК, подключенные к сети интернет. Первый вариант предусматривает капитальные вложения в оборудование, разворачивание сети, специальное ПО, тогда как второй вариант использует персональные компьютеры интернет пользователей и необходимо лишь специальное ПО и затраты на привлечение людей к вычислениям. Не секрет, что при обычной работе компьютера (интернет браузер, офисные программы и проч.) 99% всего рабочего времени процессор ПК попросту простаивает и понапрасну потребляет электроэнергию.


  1. История распределенных вычислений

В 1973 году Джон Шох и Джон Хапп из калифорнийского научно-исследовательского центра Xerox PARC написали программу, которая по ночам запускалась в локальную сеть PARC и заставляла работающие компьютеры выполнять вычисления [3].

В 1978 году советский математик Виктор Глушков работал над проблемой макроконвейерных распределённых вычислений. Он предложил ряд принципов распределения работы между процессорами.[2]:320 На базе этих принципов им была разработана ЭВМ ЕС-2701.

В 1988 году Арьен Ленстра и Марк Менес написали программу для факторизации длинных чисел. Для ускорения процесса программа могла запускаться на нескольких машинах, каждая из которых обрабатывала свой небольшой фрагмент.[3].

В 1994 году Дэвидом Джиди была предложена идея по организации массового проекта распределённых вычислений, который использует компьютеры добровольцев (т. н. добровольные вычисления) — SETI@Home[4]. Научный план проекта котрый разработали Дэвид Джиди и Крейг Каснофф из Сиэтла был представен на пятой международной конференции по биоастрономии в июле 1996 года[5].

В январе 1996 года стартовал проект GIMPS по поиску простых чисел Мерсенна, также используя компьютеры простых пользователей как добровольную вычислительную сеть.

28 января 1997 года стартовал конкурс RSA Data Security на решение задачи взлома методом простого перебора 56-битного ключа шифрования информации RC5. Благодаря хорошей технической и организационной подготовке проект, организованный некоммерческим сообществом distributed.net, быстро получил широкую известность [3].

17 мая 1999 года стартовал SETI@home на базе Grid, а в начале 2002 года завершилась разработка Калифорнийского Университета в Беркли открытой платформы BOINC (Berkeley Open Infrastructure for Network Computing), разрабатываемой с апреля 2000 года первоначально для SETI@Home, но первым на платформе BOINC стал проект Predictor@home запущенный 9 июня 2004 года.


  1. Теория распределенных вычислений

Распределённые вычисления — способ решения трудоёмких вычислительных задач с использованием нескольких компьютеров, чаще всего объединённых в параллельную вычислительную систему. Выполнение последовательных вычислений в распределенных системах имеет смысл в рамках решения многих задач одновременно, например в распределенных системах управления. Особенностью распределенных многопроцессорных вычислительных систем, в отличие от локальных суперкомпьютеров, является возможность неограниченного наращивания производительности за счет масштабирования. Слабосвязанные, гетерогенные вычислительные системы с высокой степенью распределения выделяют в отдельный класс распределенных систем — Grid.

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

Далее будет рассмотрена модель с одним управляющим центром вычислений, который будет раздавать задачи клиентам. В частности будет реализован фреймворк MapReduce и как пример использования – взлом MD5 хэширования.

  1. MapReduce

MapReduce — это фреймворк для вычисления некоторых наборов распределенных задач с использованием большого количества компьютеров (называемых «нодами»), образующих кластер.

Работа MapReduce состоит из двух шагов: Map и Reduce.

На Map-шаге происходит предварительная обработка входных данных. Для этого один из компьютеров (называемый главным узлом — master node) получает входные данные задачи, разделяет их на части и передает другим компьютерам (рабочим узлам — worker node) для предварительной обработки. Название данный шаг получил от одноименной функции высшего порядка.

На Reduce-шаге происходит свёртка предварительно обработанных данных. Главный узел получает ответы от рабочих узлов и на их основе формирует результат — решение задачи, которая изначально формулировалась.

Преимущество MapReduce заключается в том, что он позволяет распределенно производить операции предварительной обработки и свертки. Операции предварительной обработки работают независимо друг от друга и могут производиться параллельно (хотя на практике это ограничено источником входных данных и/или количеством используемых процессоров). Аналогично, множество рабочих узлов могут осуществлять свертку — для этого необходимо только чтобы все результаты предварительной обработки с одним конкретным значением ключа обрабатывались одним рабочим узлом в один момент времени. Хотя этот процесс может быть менее эффективным по сравнению с более последовательными алгоритмами, MapReduce может быть применен к большим объемам данных, которые могут обрабатываться большим количеством серверов. Так, MapReduce может быть использован для сортировки петабайта данных, что займет всего лишь несколько часов. Параллелизм также дает некоторые возможности восстановления после частичных сбоев серверов: если в рабочем узле, производящем операцию предварительной обработки или свертки, возникает сбой, то его работа может быть передана другому рабочему узлу (при условии, что входные данные для проводимой операции доступны).

Фреймворк в большой степени основан на функциях map и reduce, широко используемых в функциональном программировании, хотя фактически семантика фреймворка отличается от прототипа.



  1. Реализация

В качестве серверной платформы я выбрал .Net Framework 4.0 ASP.NET MVC3 IIS7 WebServer.

Сервер будет позволять зарегистрировать задачу для вычисления, посмотреть прогресс выполнения, перезапустить задачу (через веб-интерфейс) и также раздавать задачи клиентам. Клиенты могут быть разработаны под различные платформы. В данном проекте я разработал клиент для Windows и кроссплатформенный для браузеров, используя Javascript.

5.1. Серверная часть

Интерфейс сервера:

- GetTasks() – получить зарегистрированные задачи

- GetClientExecutable(string taskId, ClientType clientType) – получить исполняемый файл для конкретной задачи и конкретной платформы.

- RegisterTasks(File zipFile) – зарегистрировать задачи (Zip-архив)

- GetTaskResult(string taskId) – получить результат задачи (доступно после выполнения всех частей задачи)

- GetPartOfTask(string taskId, ClientType clientType) – получить параметры для части задачи. Возвращает уникальный идентификатор части задачи.

- PostTaskComputingResult(string taskId, string uid, ClientType clientType) – зарегистрировать вычисленный результат.

- GetAvailableTask() – получить идентификатор задачи, доступной для выполнения.

Регистрация задачи:

Задача описывается .Net классом, реализующим интерфейс ITask (представленный ниже). Сборка с этим классом и дополнительные файлы, необходимые для реализации интерфейса должны быть заархивированы и загружены на сервер.

///

/// Describe methods for new task

///


public interface ITask

{

///

/// Initialize task object

///


///
Initial parameters


void Init(InitParameters parameters);

///

/// Get calculated result of task.

///


/// Return stream with result(file, text, zip archive)

Stream GetResult();
///

/// Get current progress.

///


/// Current progress in interval [0,1].

double GetProgress();
///

/// Is task completed.

///


/// True if task completed

bool IsDone();
///

/// Reset task state. So, progress should be 0.

///


void Reset();
///

/// Returns object (actually string) that should be passed to client to

/// compute some part of task.

///


///
Type of client


///
Unique computing session id


///

///

///

object GetPartOfTask(ClientType clientType, string uid);
///

/// Post calculated result from client.

///


///
Client calculation session unique identifier


///
Stream from client


void PostResult(string uid, Stream stream);
///

/// Returns client executable. For windows platform - actually .exe file.

/// For javascript - .js file, etc..

///


/// Stream passed to client

Stream GetClientExecutable(ClientType clientType);

}

Пример реализации интерфейса для задачи MapReduce. Инициализируется числовым интервалом и далее интервал разбивается на мелкие интервалы и отдается клиентом, чтобы посчитать результат. Посчитанные результаты объединяются и это будет результатом всей задачи:
5.2. Клиентская часть

Работа клиента заключается в бесконечном цикле:

  1. Получить доступную задачу.

  2. Получить исполняемый файл для задачи.

  3. Получить параметры для расчета задачи.

  4. Зарегистрировать результаты расчета.

Windows клиент.

Исполняемый файл - это написанная консольная программа, параметры для которой передаются через командную строку, а результат записывается в заданный файл.

public void Run()

{

var taskManagerProxy = IoC.GetInstance();

for(;;Thread.Sleep(1.Minutes()))

{

try

{

var taskId = taskManagerProxy.GetAvailableTask();

if(string.IsNullOrEmpty(taskId))

continue;
PerformTask(taskId);

var clientConfig = _taskClients[taskId];

var tempFileName = Path.Combine(clientConfig.ResultDirectoryPath,

DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-ff") + ".txt");

for(;;)

{

var partOfTask = taskManagerProxy.GetPartOfTask(taskId);

var processStartInfo = new ProcessStartInfo(clientConfig.ExecutablePath,

"{0} /OutputFile:\"{1}\"".F(partOfTask.Parameters,

tempFileName));

processStartInfo.UseShellExecute = false;
var process = Process.Start(processStartInfo);

process.WaitForExit();
var result = File.ReadAllText(tempFileName);
taskManagerProxy.PostResult(taskId, partOfTask.Uid, result);

}

}

catch (Exception ex)

{

_log.LogException(ex);

}

}

}


Javascript клиент.

Исполняемый файл – javascript код. Клиент загружает исполняемый код, выполняет его. Параметры для задачи – тоже javascript код, который выполняется клиентом и результат передается серверу.
Run: function () {

var cl = this;
var getClientScript = function (taskId) {

$.ajax({

url: "/TaskManager/GetClientExecutable?taskId=" + taskId + "&clientType=Javascript",

type: "GET",

success: function (scripts) {

$.globalEval(scripts);

getPartOfTask(taskId);

},

error: function (obj) {

window.setTimeout(computeAvailableTask, 500);

}

});

};
var computeAvailableTask = function () {

$.ajax({

url: "/TaskManager/GetAvailableTask",

type: "GET",

success: function (obj) {

if (obj.errorCode == 0) {

getClientScript(obj.taskId);

}

},

error: function (obj) {

window.setTimeout(computeAvailableTask, 500);

}

});

};
var computePartOfTask = function (script) {

var result = "";

try {

eval(script)

} catch (e) {
}
return result;

};
var postResult = function (taskId, uid, result) {

$.ajax({

url: "/TaskManager/PostTaskComputingResult",

type: "POST",

data: "taskId=" + taskId + "&uid=" + uid + "&result=" + result,

success: function (obj) {

if (obj.errorCode == 0) {

var val = $("#ComputingLog").text();

$("#ComputingLog").text(val + '|');

}

},

error: function (obj) {

}

});

};
var getPartOfTask = function (taskId) {

$.ajax({

url: "/TaskManager/GetPartOfTask?taskId=" + taskId + "&clientType=Javascript",

type: "GET",

success: function (obj) {

if (obj.errorCode == 0) {

var result = computePartOfTask(obj.taskParameters);

postResult(taskId, obj.uid, result);

window.setTimeout(function () { getPartOfTask(taskId); }, 500);

}

else {

window.setTimeout(computeAvailableTask, 500);

}

},

error: function (obj) {

window.setTimeout(computeAvailableTask, 500);

}

});

};
computeAvailableTask();

}

}

  1. Взлом алгоритма хэширования MD5

Взлом есть обратная задача хэшированию: по данном хэшу найти строку, хэш которой равен данному.

Допустим у нас известен алфавит из символов которого состоит строка. Для нашей задачи алфавит будет состоять из 27 символов – 26 букв английского языка и 1 псевдо буква (отсутствие буквы). Исходная строка будет состоять из 8 символов, то есть существует 282 429 536 481 вариантов различных строк. По каждому номеру мы можем однозначно определить строку. Поэтому задача сводится к разбиению отрезка от 0 до 282 429 536 481 на много интервалов и независимому поиску строку по данному хэшу. В моей реализации задача будет разделяться на 100 000 мелких интервалов размером около 2.8 млн.



  1. . Реализация

Реализация на Javascript:

jQuery(function () {
Type.registerNamespace("TaskComputing.Range");
TaskComputing.Range.Md5Brutforce = function () {

this.init();

}
TaskComputing.Range.Md5Brutforce.prototype = {
init: function () {

this.alphabet = " abcdefghijklmnopqrstuvwxyz",

this.alphabetLength = this.alphabet.length;

},
find: function (from, to, md5toCheck) {

var result = '';

for (var i = from; i <= to; i++) {

var password = this.from10toN(i);

if (calcMD5(password) == md5toCheck) {

result = result + ' ' + password;

}

}

return result;

},
from10toN: function (number) {

var base = this.alphabetLength;

var result = '';

while (number > 0) {

result = this.alphabet.charAt(number % base) + result;

number = Math.floor(number / base);

}

return result;

}

}

});


  1. Результат работы

На Javascript интервал в 2.8 обрабатывается примерно за 20 секунд (однопоточно). Таким образом для вычисления всей задачи на 1 клиенте необходимо около 555 часов. Система была протестирована на 20 компьютерах в корпоративной сети. На каждом компьютере был 4-ядерный процессор AMD Athlon 2 965 и выполнялось по 4 экземпляра javascript клиента. На решение все задачи потребовалось около 9 часов времени.


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

В данном проекте была разработана платформа для организации распределенных вычислений для любых задач. Также реализованы клиенты для платформ Windows и Javascript. Таким образом достаточно написать на Javascript логику решения задачи, и описать ее в .Net сборке.


  1. Список использованной литературы




  1. http://en.wikipedia.org/wiki/Distributed_computing

  2. http://ru.wikipedia.org/wiki/MapReduce

  3. https://www.google.com/

  4. http://habrahabr.ru/

  5. http://www.asp.net/mvc/mvc3

  6. http://jquery.com/

  7. http://www.webtoolkit.info/javascript-md5.html

Добавить документ в свой блог или на сайт

Похожие:

К курсовому проекту по курсу «Операционные системы и среды» Тема: «Распределенное решение вычислительной задачи» icon К курсовому проекту по курсу «Архитектура компьютера» Тема: «Искусственные нейронные сети»
В данной работе будет рассмотрена задача распознавания образа(текста) с помощью нейронной сети Хэмминга
К курсовому проекту по курсу «Операционные системы и среды» Тема: «Распределенное решение вычислительной задачи» icon Тематический план операционные системы, их назначение и классификация
Дается понятие операционной системы, ее назначение и классификация. Рассматриваются различные операционные системы, сравниваются...
К курсовому проекту по курсу «Операционные системы и среды» Тема: «Распределенное решение вычислительной задачи» icon Реферат по дисциплине: «Операционные системы» на тему «Режимы работы...
По числу одновременно выполняемых задач операционные системы могут быть разделены на два класса
К курсовому проекту по курсу «Операционные системы и среды» Тема: «Распределенное решение вычислительной задачи» icon Московский Государственный Университет им. М. В. Ломоносова Факультет...
Изложение проиллюстрировано большим количеством программных примеров. Пособие рекомендуется для студентов, аспирантов и преподавателей...
К курсовому проекту по курсу «Операционные системы и среды» Тема: «Распределенное решение вычислительной задачи» icon Препроцессор пояснительная записка к курсовому проекту по курсу «Схемотехника эвм»
Графическая часть состоит из 4 документов: схема электрическая функциональная (Э2), схема электрическая принципиальная (Э3), диаграмма...
К курсовому проекту по курсу «Операционные системы и среды» Тема: «Распределенное решение вычислительной задачи» icon Препроцессор пояснительная записка к курсовому проекту по курсу «Схемотехника эвм»
Графическая часть работы состоит из 4 документов: схема электрическая функциональная (Э2), схема электрическая принципиальная (Э3),...
К курсовому проекту по курсу «Операционные системы и среды» Тема: «Распределенное решение вычислительной задачи» icon Препроцессор пояснительная записка к курсовому проекту по курсу «Схемотехника эвм»
Использовано 5 литературных источников. Графическая часть включает в себя 4 документа: схему электрическую функциональную (Э2), схему...
К курсовому проекту по курсу «Операционные системы и среды» Тема: «Распределенное решение вычислительной задачи» icon Препроцессор пояснительная записка к курсовому проекту по курсу «Схемотехника эвм»
Использовано 5 литературных источников. Графическая часть включает в себя 4 документа: схему электрическую функциональную (Э2), схему...
К курсовому проекту по курсу «Операционные системы и среды» Тема: «Распределенное решение вычислительной задачи» icon Препроцессор пояснительная записка к курсовому проекту по курсу «Схемотехника эвм»
Использовано 5 литературных источников. Графическая часть включает в себя 4 документа: схему электрическую функциональную (Э2), схему...
К курсовому проекту по курсу «Операционные системы и среды» Тема: «Распределенное решение вычислительной задачи» icon Пояснительная записка к курсовому проекту на тему микропроцессорная...

Литература


При копировании материала укажите ссылку © 2015
контакты
literature-edu.ru
Поиск на сайте

Главная страница  Литература  Доклады  Рефераты  Курсовая работа  Лекции