. Ядро ОС. Виды, характеристики ядра различных видов ОС. Решение задачи о синхронизации стрелков
Ядро ОС. Виды, характеристики ядра различных видов ОС. Решение задачи о синхронизации стрелков

Ядро ОС. Виды, характеристики ядра различных видов ОС. Решение задачи о синхронизации стрелков

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

Рубрика Программирование, компьютеры и кибернетика Вид курсовая работа Язык русский Дата добавления 15.01.2014 Размер файла 238,3 K Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

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

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

Магнитогорский государственный технический университет им. Г. И. Носова

Институт энергетики и автоматизированных систем

Кафедра вычислительной техники и программирования

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

По дисциплине: «Теория вычислительных процессов»

на тему: «Ядро ОС. Виды, характеристики ядра различных видов ОС. Решение задачи о синхронизации стрелков».

Скирпичникова А. А.

Содержание

    Введение 3
  • 1.Теоретический вопрос 5
    • 1.1 Виды ядер ОС 5
    • 1.2 Характеристики ядра различных видов ОС 12
      • 1.2.1 Операционная система Windows 2000 12
      • 1.2.2 Операционная система UNIX 13
      • 2.1 Постановка задачи 19
      • 2.2 Решение задачи 19
      • 2.3 Демонстрация работы программы 22

      Введение

      ядро windows модель демонстрация

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

      · Удобство. Операционная система делает использование компьютера простым и удобным.

      · Эффективность. Операционная система позволяет эффективно использоватьресурсы компьютерной системы.

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

      Год за годом развиваются структура и возможности операционных систем. В последнее время в состав новых операционных систем и новых версий уже существующих операционных систем вошли некоторые структурные элементы, которые внесли большие изменения в природу этих систем. Современные операционные системы отвечают требованиям постоянно развивающегося аппаратного и программного обеспечения. Они способны управлять работой многопроцессорных систем, работающих быстрее обычных машин, высокоскоростных сетевых приспособлений и разнообразных запоминающих устройств, число которых постоянно увеличивается. Из приложений, оказавших влияние на устройство операционных систем, следует отметить мультимедийные приложения, средства доступа к Internet, а также модель клиент/сервер. Неуклонный рост требований к операционным системам приводит не только к улучшению их архитектуры, но и к возникновению новых способов их организации. В экспериментальных и коммерческих операционных системах были опробованы самые разнообразные подходы и структурные элементы, большинство из которых можно объединить в следующие категории:

      · Распределенные операционные системы

      Каждому полезно знать, что является основополагающим элементом операционной системы. Центральной частью ОС является ядро. Оно обеспечивает приложениям координированный доступ к ресурсам компьютера, таким как процессорное время, память, внешнее аппаратное обеспечение, внешнее устройство ввода и вывода информации. Также обычно ядро предоставляет сервисы файловой системы и сетевых протоколов.В данной работе рассматриваются виды и характеристики ядер различных ОС.

      1. Теоретический вопрос

      1.1 Виды ядер ОС

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

      Отличительной особенностью большинства операционных систем на сегодняшний день является большое монолитное ядро. Ядро операционной системы обеспечивает большинство ее возможностей, включая планирование, работу с файловой системой, сетевые функции, работу драйверов различных устройств, управление памятью и многие другие. Обычно монолитное ядро реализуется как единый процесс, все элементы которого используют одно и то же адресное пространство.Все части монолитного ядра работают в одном адресном пространстве. Это такая схема операционной системы, при которой все компоненты её ядра являются составными частями одной программы, используют общие структуры данных и взаимодействуют друг с другом путём непосредственного вызова процедур. Монолитное ядро -- старейший способ организации операционных систем. Примером систем с монолитным ядром является большинство UNIX-систем.Достоинства: скорость работы, упрощённая разработка модулей.Недостатки: поскольку всё ядро работает в одном адресном пространстве, сбой в одном из компонентов может нарушить работоспособность всей системы.Примеры: традиционные ядра UNIX (такие как BSD), Linux; ядро MS-DOS, ядро KolibriOS.Некоторые старые монолитные ядра, в особенности систем класса UNIX/Linux, требовали перекомпиляции при любом изменении состава оборудования. Большинство современных ядер позволяют во время работы подгружать модули, выполняющие часть функций ядра. В этом случае компоненты операционной системы являются не самостоятельными модулями, а составными частями одной большой программы, называемой монолитным ядром (monolithickernel), которое представляет собой набор процедур, каждая из которых может вызвать каждую. Все процедуры работают в привилегированном режиме.[1; С. 112]

      В архитектуре микроядра ядру отводится лишь несколько самых важныхфункций, в число которых входят работа с адресными пространствами, обеспечение взаимодействия между процессами (interprocesscommunication) и основное планирование. Работу других сервисов операционной системы обеспечивают процессы, которые иногда называют серверами. Эти процессы запускаются в пользовательском режиме и микроядро работает с ними так же, какс другими приложениями. Такой подход позволяет разделить задачу разработки операционной системы, на разработку ядра и разработку сервера. Серверы можно настраивать для требований конкретных приложений или среды. Выделение в структуре системы микроядра упрощает реализацию системы, обеспечивает ее гибкость, а также хорошо вписывается в распределенную среду. Фактически микроядро взаимодействует с локальным и удаленным сервером по одной той же схеме, что упрощает построение распределенных систем. Достоинства: устойчивость к сбоям оборудования, ошибкам в компонентах системы. Основное достоинство микроядерной архитектуры -- высокая степень модульности ядра операционной системы. Это существенно упрощает добавление в него новых компонентов. В микроядерной операционной системе можно, не прерывая её работы, загружать и выгружать новые драйверы, файловые системы и т. д. Существенно упрощается процесс отладки компонентов ядра, так как новая версия драйвера может загружаться без перезапуска всей операционной системы. Компоненты ядра операционной системы ничем принципиально не отличаются от пользовательских программ, поэтому для их отладки можно применять обычные средства. Микроядерная архитектура повышает надежность системы, поскольку ошибка на уровне непривилегированной программы менее опасна, чем отказ на уровне режима ядра. Недостатки: передача данных между процессами требует накладных расходов.Примеры: Symbian OS; Windows CE; OpenVMS; Mach, используемый в GNU/Hurd и Mac OS X; QNX; AIX; Minix; ChorusOS; AmigaOS; MorphOS.

      Модульное ядро -- современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем компьютеров.В отличие от «классических» монолитных ядер, считающихся ныне устаревшими, модульные ядра, как правило, не требуют полной перекомпиляции ядра при изменении состава аппаратного обеспечения компьютера. Вместо этого модульные ядра предоставляют тот или иной механизм подгрузки модулей ядра, поддерживающих то или иное аппаратное обеспечение (например, драйверов). При этом подгрузка модулей может быть как динамической (выполняемой «на лету», без перезагрузки ОС, в работающей системе), так и статической (выполняемой при перезагрузке ОС после переконфигурирования системы на загрузку тех или иных модулей).Все модули ядра работают в адресном пространстве ядра и могут пользоваться всеми функциями, предоставляемыми ядром. Поэтому модульные ядра продолжают оставаться монолитными.Модульные ядра удобнее для разработки, чем традиционные монолитные ядра, не поддерживающие динамическую загрузку модулей, так как от разработчика не требуется многократная полная перекомпиляция ядра при работе над какой-либо его подсистемой или драйвером. Выявление, локализация, отладка и устранение ошибок при тестировании также облегчаются.Модульные ядра предоставляют особый программный интерфейс (API) для связывания модулей с ядром, для обеспечения динамической подгрузки и выгрузки модулей. В свою очередь, не любая программа может быть сделана модулем ядра: на модули ядра накладываются определённые ограничения в части используемых функций (например, они не могут пользоваться функциями стандартной библиотеки С/С++ и должны использовать специальные аналоги, являющиеся функциями API ядра). Кроме того, модули ядра обязаны экспортировать определённые функции, нужные ядру для правильного подключения и распознавания модуля, для его корректной инициализации при загрузке и корректного завершения при выгрузке, для регистрации модуля в таблице модулей ядра и для обращения из ядра к сервисам, предоставляемым модулем.Не все части ядра могут быть сделаны модулями. Некоторые части ядра всегда обязаны присутствовать в оперативной памяти и должны быть жёстко «вшиты» в ядро. Также не все модули допускают динамическуюподгрузку (без перезагрузки ОС). Степень модульности ядер (количество и разнообразие кода, которое может быть вынесено в отдельные модули ядра и допускает динамическую подгрузку) различна в различных архитектурах модульных ядер. Ядро «Linux» в настоящее время имеет более модульную архитектуру, чем ядра *BSD (FreeBSD, NetBSD, OpenBSD).Общей тенденцией развития современных модульных архитектур является всё большая модуларизация кода (повышение степени модульности ядер), улучшение механизмов динамической подгрузки и выгрузки, уменьшение или устранение необходимости в ручной подгрузке модулей или в переконфигурации ядра при изменениях аппаратуры путём введения тех или иных механизмов автоматического определения оборудования и автоматической подгрузки нужных модулей, универсализация кода ядра и введение в ядро абстрактных механизмов, предназначенных для совместного использования многими модулями (примером может служить VFS -- «виртуальная файловая система», совместно используемая многими модулями файловых систем в ядре Linux).

      Экзоядро -- ядро операционной системы компьютеров, предоставляющее лишь функции для взаимодействия между процессами и безопасного выделения и освобождения ресурсов.В традиционных операционных системах ядро предоставляет не только минимальный набор сервисов, обеспечивающих выполнение программ, но и большое количество высокоуровневых абстракций для использования разнородных ресурсов компьютера: оперативной памяти, жестких дисков, сетевых подключений. В отличие от них, ОС на основе экзоядра предоставляет лишь набор сервисов для взаимодействия между приложениями, а также необходимый минимум функций, связанных с защитой: выделение и высвобождение ресурсов, контроль прав доступа, и т. д. Экзоядро не занимается предоставлением абстракций для физических ресурсов -- эти функции выносятся в библиотеку пользовательского уровня (так называемую libOS).Основная идея операционной системы на основе экзоядра состоит в том, что ядро должно выполнять лишь функции координатора для небольших процессов, связанных только одним ограничением -- экзоядро должно иметь возможность гарантировать безопасное выделение и освобождение ресурсов оборудования. В отличие от ОС на основе микроядра, ОС, базирующиеся на экзоядре, обеспечиваютбольшую эффективность за счет отсутствия необходимости в переключении между процессами при каждом обращении к оборудованию.Архитектуры на основе экзоядер являются дальнейшим развитием и усовершенствованием микроядерных архитектур и одновременно ужесточают требования к минималистичности и простоте кода ядра.«LibOS» может обеспечивать произвольный набор абстракций, совместимый с той или иной уже существующей операционной системой, например,Linux или Windows.

      Наноядро -- архитектура ядра операционной системы компьютеров, в рамках которой крайне упрощённое и минималистичное ядро выполняет лишь одну задачу -- обработку аппаратных прерываний, генерируемых устройствами компьютера. После обработки прерываний от аппаратуры наноядро, в свою очередь, посылает информацию о результатах обработки (например, полученные с клавиатуры символы) вышележащему программному обеспечению при помощи того же механизма прерываний. Также часто реализуют минимальную поддержку потоков: создание и переключение.В некотором смысле концепция наноядра близка к концепции HAL -- HardwareAbstractionLayer, предоставляя вышележащему ПО удобные механизмы абстракции от конкретных устройств и способов обработки их прерываний.Наиболее часто в современных компьютерах наноядра используются для виртуализации аппаратного обеспечения реальных компьютеров или для реализации механизма гипервизора, с целью позволить нескольким или многим различным операционным системам работать одновременно и параллельно на одном и том же компьютере. Например, VMware ESX Server реализует собственное наноядро, не зависимое от ОС и устанавливаемое на «голое железо». Поверх этого наноядра работают пользовательские и административные утилиты VMware и сами операционные системы, виртуализируемые в ESX Server.Наноядра также могут использоваться для обеспечения переносимости (портабельности) операционных систем на разное аппаратное обеспечение или для обеспечения возможности запуска «старой» операционной системы на новом, несовместимом аппаратном обеспечении без её полного переписывания и портирования. Например, фирма AppleComputer использовала наноядро в версии Mac OS Classic для PowerPC для того, чтобы транслировать аппаратные прерывания, генерировавшиеся их компьютерами на базе процессоров PowerPC в форму, которая могла «пониматься» и распознаваться Mac OS для процессоров Motorola 680x0. Таким образом, наноядро эмулировало для Mac OS «старое» 680x0 железо. Альтернативой было бы полное переписывание и портирование кода Mac OS на PowerPC при переходе с 680x0 на них. Позднее, в эпоху Mac OS 8.6, наноядровиртуализировало предоставляемые PowerPC мультипроцессорные возможности и обеспечивало поддержку SMP в Mac OS. Другие удачные примеры использования наноядерных архитектур включают наноядроAdeos, работающее как модуль ядра для Linux и позволяющее выполнять одновременно с Linuxкакую-либо операционную систему реального времени.Наноядро может быть настолько маленьким и примитивным, что даже важнейшие устройства, находящиеся непосредственно на материнской плате или на плате контроллера встраиваемого устройства, такие, как таймер или программируемый контроллер прерываний, обслуживаются специальными драйверами устройств, а не непосредственно ядром. Такого рода сверхминималистичныенаноядра называют иногда пикоядрами.Термин «наноядро» иногда неформально используется для описания очень маленьких, упрощённых и лёгких микроядер, таких, как L4.

      Гибридное ядро (англ. Hybridkernel) -- модифицированные микроядра, позволяющие для ускорения работы запускать «несущественные» части в пространстве ядра. Пример: ядра ОС Windows семейства NT.

      Все рассмотренные подходы к построению операционных систем имеют свои достоинства и недостатки. В большинстве случаев современные операционные системы используют различные комбинации этих подходов. Так, например сейчас, ядро «Linux» представляет собой монолитную систему с отдельными элементами модульного ядра. При компиляции ядра можно разрешить динамическую загрузку и выгрузку очень многих компонентов ядра -- так называемых модулей. В момент загрузки модуля его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.Существуют варианты ОС GNU (Debian GNU/Hurd), в которых вместо монолитного ядра применяется ядро Mach (такое же, как в Hurd), а поверх него в пользовательском пространстве работают те же самые процессы, которые при использовании Linux были бы частью ядра. Другим примером смешанного подхода может служить возможность запуска операционной системы с монолитным ядром под управлением микроядра. Так устроены 4.4BSD и MkLinux, основанные на микроядре Mach. Микроядро обеспечивает управление виртуальной памятью и работу низкоуровневых драйверов. Все остальные функции, в том числе взаимодействие с прикладными программами, осуществляется монолитным ядром. Данный подход сформировался в результате попыток использовать преимущества микроядернойархитектуры, сохраняя по возможности хорошо отлаженный код монолитного ядра.Наиболее тесно элементы микроядернойархитектуры и элементы монолитного ядра переплетены в ядре Windows NT. Хотя Windows NT часто называют микроядерной операционной системой, это не совсем так. Микроядро NT слишком велико (более 1 Мбайт, кроме того, в ядре системы находится, например, ещё и модуль графического интерфейса), чтобы носить приставку «микро». Компоненты ядра Windows NT располагаются в вытесняемой памяти и взаимодействуют друг с другом путем передачи сообщений, как и положено в микроядерных операционных системах. В то же время все компоненты ядра работают в одном адресном пространстве и активно используют общие структуры данных, что свойственно операционным системам с монолитным ядром. Причина проста: чисто микроядерный дизайн коммерчески менее выгоден, поскольку менее эффективен (за счет накладных расходов на передачу сообщений там, где можно было обойтись вызовами функций). Таким образом, Windows NT можно с полным правом назвать гибридной операционной системой.Смешанное ядро, в принципе, должно объединять преимущества монолитного ядра и микроядра: казалось бы, микроядро и монолитное ядро -- крайности, а смешанное -- золотая середина. В них возможно добавлять драйвера устройств двумя способами: и внутрь ядра, и в пользовательское пространство. Но на практике концепция смешанного ядра часто подчёркивает не только достоинства, но и недостатки обоих типов ядер.Примеры: Windows NT,DragonFly BSD.[2; С. 448]

      1.2 Характеристики ядра различных видов ОС

      Операционная система W2K появилась в результате развития операционной системы под названием MS-DOS, разработанной фирмой Microsoftдля первого персонального компьютера IBM. Первая версия этой операционной системы, DOS1.0 содержала в себе 4000 строк исходного ассемблерного кода. Эта система работала на микропроцессоре Intel 8086 и занимала 8 Кбайт памяти.Сейчас в операционной системе W2K трудно однозначно выделить микроядро. Вместо этого W2K имеет структуру, которую фирма Microsoft называет модифицированной архитектурой микроядра. Операционной системе W2K присуще четкое разделение на модули. Каждая функция системы управляется только одним компонентом операционной системы. Остальные ее части и все приложения обращаются к этой функции через стандартный интерфейс. Доступ к основным системным данным можно получить только через определенные функции. В принципе любой модуль можно удалить, обновить или заменить, не переписывая всю систему или стандартный интерфейс прикладного программирования (applicationprograminterface -- API). Однако в отличие от систем с четко выделенным микроядром, у W2K многие функции системы, которые не входят в микроядро, выполняются в режиме ядра, что сделано с целью повышения производительности. Разработчики системы W2K обнаружили, что использование традиционного подхода с выделением микроядра приводит к тому, что многие функции, не входящие в микроядро, требуют наличия нескольких переключателей процессов или потоков, переключателей режимов, а также используют дополнительные буферы памяти. Одной из целей создателей операционной системы W2K была ее переносимость, т.е. возможность ее использования на самых разнообразных аппаратных платформах. Для достижения этой цели большая часть исполняющей системы W2К рассматривает лежащее в основе аппаратное обеспечение. В микроядро входят наиболее часто используемые компоненты операционной системы. Ядро отвечает за распределение ресурсов между процессами, их переключение и синхронизацию. В отличие от остальной части исполняющей системы и от процессов, исполняемых на уровне пользователя, код микроядра не разделяется на потоки. Таким образом, это единственная часть операционной системы, которая не может быть вытеснена или выгружена на диск.

      1.2.2 Операционная система UNIX Как и в любой другой многопользовательской операционной системе, обеспечивающей защиту пользователей друг от друга и защиту системных данных от любого непривилегированного пользователя, в ОС UNIX имеется защищенное ядро, которое управляет ресурсами компьютера и предоставляет пользователям базовый набор услуг. Удобство и эффективность современных вариантов ОС UNIX не означает, что вся система, включая ядро, спроектирована и структурирована наилучшим образом. Естественно, наращивались возможности системы, и, как это часто бывает в больших системах, качественные улучшения структуры ОС UNIX не поспевали за ростом ее возможностей. В результате, ядро большинства современных коммерческих вариантов ОС UNIX (почти все они основаны на UNIX System V) представляет собой не очень четко структурированный монолит большого размера. По этой причине программирование на уровне ядра ОС UNIX продолжает оставаться искусством. Эта недостаточная технологичность организации ядра ОС UNIX многих не удовлетворяет. Отсюда стремление к полному воспроизведению среды ОС UNIX при полностью иной организации системы. Ядро традиционной системы UNIX не является наращиваемым, в нем мало возможностей повторного использования кода. Все это приводило к тому, что при добавлении в очередных версиях UNIX новых возможностей приходилось в больших количествах писать новый код. В результате ядро оказалось громоздким и немодульным. В процессе развития операционной системы UNIX появилось много ее реализаций, каждая из них обладала своими полезными возможностями. Bпоследствии возникла необходимость создать реализацию, в которой были бы унифицированы многие важные нововведения, добавлены возможности других современных операционных систем и которая бы обладала модульной архитектурой. В этой архитектуре типичного современного ядра системы UNIX имеется небольшое ядро, которое может работать различными модулями, предоставляющими различным процессам операционной системы необходимые функции и сервисы. Перейдем к рассмотрению некоторых примеров современных систем UNIX. System V Release 4 (SVR4) Solaris 2.x 4.4BSD Linux

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

      · Стековая организация. Модули организованы в виде определенной иерархической структуры. Отдельные модули могут выполнять роль библиотек при обращении к ним модулей более высоких уровней в рамках этой структуры; они сами также могут обращаться к модулям на более низких уровнях. Динамическое связывание [FRAN97] облегчает настройку системы и экономит память, которую занимает ядро. В системе Linux программа пользователя или сам пользователь может загружать или выгружать модули с помощью команд insmod и rmmod. Само ядро управляет работой отдельных функций и по мере надобности загружает нужные модули или выгружает те, нужда в которых уже отпала. Кроме того, стековая организация позволяет задавать зависимости модулей, что дает два основных преимущества:

      1. Код, являющийся общим для набора однотипных модулей (например, драйверы похожих устройств), можно поместить в один модуль, что позволяет сократить количество повторений.

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

      2. Практическая часть

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

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

      2.2 Решение задачи

      Размещено на http://www.allbest.ru/

      Размещено на http://www.allbest.ru/

      Состояние соседа слева «Огонь»?

      Состояние соседа справа «Готов»?

      Свой номер не равен нулю?

      Установить свой номер: взять номер соседа слева и увеличить на 1

      Уменьшить свой номер на 1

      Решение задачи выполняется следующим образом: первым команду офицера слышит, естественно, крайний в цепи солдат. Получив команду, он передает ее своему соседу с указанием своего номера в цепи («первый») и начинает считать: один, два, три и т.д. Получивший команду вычисляет свой номер в цепи («второй», «третий» и т.д.) и передает его следующему. Последний в цепи солдат будет знать общее количество стрелков в цепи. Получив команду, он сообщает об этом соседу, ее сообщившему («команду принял»), и начинает отсчет от значения, соответствующего количеству стрелков в цепи, до нуля. Каждый из стрелков цепи, получив обратный сигнал, начинает обратный отсчет от значения, до которого он успел добраться при прямом счете (то есть от своего фактического номера в цепи), до нуля. Досчитав до нуля, стрелок открывает огонь. Как только каждый из стрелков доберется до нуля, цепь выстрелит одновременно. На передачу сигнала от стрелка к стрелку тратится 1 с. Значение счетчика изменяется на 1 за 1 с.Данная задача решается при помощи автоматной модели поведения стрелка.В течение работы программа-стрелок может находиться в одном из следующих состояний:

      В состояние прямого счета и обратного счета стрелок переходит в случае изменения состояния соседних стрелков. В состояние прямого счета стрелка переводит изменение состояния соседа слева, в состояние обратного счета переводит изменение состояния соседа справа.

      Рисунок 2.3.1 - Демонстрация работы программы - Состояние ожидания.

      Код программы представлен в разделе «Приложение».

      2.3 Демонстрация работы программы

      Рисунок 2.3.2 - Демонстрация работы программы - Состояние готовности.

      Рисунок 2.3.3 - Демонстрация работы программы - Состояние открытия огня и переход в состояние ожидания

      В данной курсовой работе были рассмотрены виды ядер операционной системы, а также характеристики ядер различных ОС. Ядро ОС может быть:

      В практической части было рассмотрено решение задачи Майхилла «О синхронизации стрелков». Данная задача была решена с использованием автоматной модели поведения стрелков. Основная проблема синхронизации заключалась в обеспечении одновременного залпа всех стрелков цепи. В результате решения все стрелки производят выстрел в одно и то же время.

      Библиографический список

      1. Столлингс В. Операционные системы / В. Столлингс. -- 4-е изд. -- М.: Вильямс, 2004. -- 128-133 с.

      2. Роберт Л. Разработка ядра Linux / Л. Роберт. -- 2-е изд. -- М. : Вильямс, 2006. -- С. 448.