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

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

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

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

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

3

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

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

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

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

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

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

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

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

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

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

Выполнил

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

Проверил

Кочержинская Ю.В.

Магнитогорск-2013

Содержание

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

Введение

ядро 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 Характеристики ядра различных видов ОС

1.2.1 Операционная система Windows 2000

Операционная система 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)

Версия SVR4, разработанная совместно компаниями AT&T и Sun Microsystems, сочетает в себе особенности версий SVR3, 4.3 BSD, Microsoft Xenix SystemV и SunOS. Ядро SystemV было почти полностью переписано, в результате чего появилась очищенная от всего лишнего, хотя и сложная реализация. Среди новых возможностей этой версии следует отметить поддержку обработки данных в реальном времени, наличие классов планирования процессов, динамически распределяемые структуры данных, управление виртуальной памятью, наличие виртуальной файловой системы и ядра с вытеснением. При создании системы SVR4 объединились усилия как коммерческих, так и академических разработчиков; разработка системы велась, чтобы обеспечить унифицированную платформу для коммерческих реализаций операционной системы UNIX. Эта цель была достигнута, а SVR4 на данный момент, по-видимому, является важнейшей версией UNIX. В ней удачно (с точки зрения конкурентоспособности) сочетаются наиболее важные возможности, реализованные во всех предыдущих системах UNIX. Система SVR4 может работать на компьютерах самых разнообразных типов, начиная с машин, в которых установлены 32-разрядные процессоры, и заканчивая суперкомпьютерами; эта система является важнейшей из всех ранее разработанных операционных систем.

Solaris 2.x

Система Solaris -- это версия операционной системы UNIX, разработанная фирмой Sun на основе SVR4. Реализации системы Solaris версии 2 обладают всеми возможностями системы SVR4, а также некоторыми дополнительными, такими, как полная вытесняемость, наличие многопоточного ядра, полнофункциональная поддержка SMP и объектно-ориентированный интерфейс файловых систем. Solaris -- это наиболее широко применяемая и пользующаяся коммерческим успехом реализация операционной системы UNIX.

4.4BSD

Важную роль в развитии теории устройства операционных систем сыграла серия версий системы UNIX, разработанных в Калифорнийском университете. Серия 4.xBSD широко используется в академических организациях; она послужила основой для создания многих коммерческих продуктов UNIX. Благодаря версиям этой серии UNIX приобрела свою популярность, а многие улучшения этой операционной системы впервые появились в версиях BSD. Последней версией этой серии, выпущенной в Беркли, является система4.4BSD. Эта версия является основным обновлением версии 4.3BSD, куда вошли новая система управления виртуальной памятью, ядро с измененной структурой, а также длинный список улучшений других возможностей.[1; С. 131]

Linux

Система Linux возникла как вариант операционной системы UNIX, предназначенный для персональных компьютеров с IBM-совместимой архитектурой. Первоначальная версия была написана ЛинусомТорвальдсом--финским студентом, изучающим теорию вычислительных машин. В 1991 году Торвальдс представил в Internet первую версию системы Linux. С тех пор множество людей, сотрудничая посредством Internet, развивают Linux под руководством ее создателя. Система Linux является бесплатной, и можно беспрепятственно получить ее исходный код, она стала первой альтернативой рабочим станциям UNIX, предлагавшимся фирмами SunMicrosystems, DigitalEquipmentCorp (теперь Compaq) и SiliconGraphics. На сегодняшний день Linux является полнофункциональной системой семейства UNIX, способной работать на всех этих и других платформах. Linux бесплатно распространяется при поддержке Фонда бесплатно распространяемых программ (FreeSoftwareFoundation -- FSF). Целью этой организации является создание надежного аппаратно-независимого программного обеспечения, которое было бы бесплатным, обладало высоким качеством и пользовалось широкой популярностьюсреди пользователей. Фонд предоставляет инструменты для разработки программного обеспечения под эгидой общедоступной лицензии GNU (GNUPublicLicense -- GPL). Поэтому система Linux в таком виде, в котором она существует сегодня, является продуктом, появившимся в результате усилий Торвальдса, а затем и многих других его единомышленников во всем мире, и распространяющимся в рамках проекта GNU. Linux используется не только многими отдельными программистами, она проникла и в корпоративную среду [MANC00]. В основном это произошло благодаря высокому качеству ядра операционной системы Linux. В эту популярную версию внесли свой вклад многие талантливые программисты, в результате чего появился впечатляющий технический продукт. К достоинствам системы можно отнести то, что она является модульной и легко настраивается. Благодаря этому можно достичь высокой производительности ее работы на самых разнообразных аппаратных платформах. К тому же получая в свое распоряжение исходный код, производители программного обеспечения могут улучшать качество приложений и служебных программ, с тем, чтобы они удовлетворяли определенным требованиям. Ядра большинства версий операционной системы UNIX являются монолитными. Все функциональные компоненты такого ядра имеют доступ ко всем его внутренним структурам данных и ко всем программам. При внесении изменений в любую из частей типичной монолитной операционной системы все ее модули и подпрограммы необходимо повторно компоновать и переустанавливать, а перед тем как изменения вступят в силу, систему нужно будет перезагрузить. В результате все модификации, такие, как добавление драйвера нового устройства или новых функций файловой системы, усложняются. Особенно остро эта проблема стоит в системе Linux, глобальную разработку которой выполняют объединенные на добровольных началах группы независимых программистов. Для решения этой проблемы система Linux организована в виде набора относительно независимых блоков, которые называются загружаемыми модулями (loadablemodules) [GOYE99]. Загружаемые модули Linux имеют две отличительные особенности:

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

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

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

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

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

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

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

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

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

Автоматная модель стрелков и офицера:

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

3

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

X1

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

X2

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

X3

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

Y1

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

Y2

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

Y3

Стрелять

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

· «Ожидание»;

· «Прямой счет»;

· «Обратный счет»;

· «Открытие огня».

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

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

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

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

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

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

Заключение

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

· монолитным;

· модульным;

· микроядром;

· наноядром;

· гидроядром;

· экзоядром.

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

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

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

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

Приложение

Код программы

Unit1.cpp (офицер)

//

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//

boolstrelki=false;

LPSTR pipename = "\\\\.\\pipe\\medpipe";

HANDLE hPipe;//дескрипторканала

STARTUPINFO si;//размерокнаитд

PROCESS_INFORMATION pi;//дескриптор, id и т д

voidCreatingPipe();

void Write(AnsiString message);

//

void __fastcall TForm1::FormDestroy(TObject *Sender)

{

AnsiString message="-1";

Write(message);

}

//

voidCreatingPipe()

{

DWORD dwThreadId; boolfConnected;

hPipe=CreateNamedPipe //канал для 1-го стелка

( pipename, // Имя PIPE канала

PIPE_ACCESS_DUPLEX, // Параметры открытия pipe

PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,// Спецификация pipe канала

PIPE_UNLIMITED_INSTANCES, // количество допустимых клиентов

512, //Размер выходного буфера

512, //Размер входного буфера

NMPWAIT_USE_DEFAULT_WAIT, //Таймаут в миллисекундах

NULL // Атрибуты безопасности

);

fConnected = ConnectNamedPipe(hPipe, NULL); //ожидание подключения 1-го стрелка

if (!fConnected) ShowMessage("Ошибка в функцииConnectNamedPipe. Нет контакта со стрелком.");

else

{ Form1->Memo1->Lines->Add("Контакт со стрелком установлен");

strelki=true;

AnsiString message;//отправляемномер

message=1;

Write(message);

}

}

//

void Write(AnsiString message)

{

DWORDcbToWrite=0,//сколь надо записать в канал

cbWritten=0;//сколько записано

boolfSuccess;//отправил/нет

cbToWrite = (strlen(message.c_str())+1)*sizeof(CHAR);

//отправить сообщение

fSuccess = WriteFile(

hPipe, // дескриптор канала

message.c_str() , // сообщение

cbToWrite, // длина сообщения

&cbWritten, // число записанных байт

NULL); // синхронно

}

//

void __fastcall TForm1::FormCreate(TObject *Sender)

{

HANDLE hThreadCreatingPipe; // дескриптордляканала

DWORD ThreadCreatingPipeId;

hThreadCreatingPipe = CreateThread(

NULL, // Отсутствиеатрибутовбезопасности

0, // размер стека потока выбрать по умолч

(LPTHREAD_START_ROUTINE) CreatingPipe,//функцияпотока

NULL, // параметр потока

0, //не приостановленный

&ThreadCreatingPipeId); // возврат идентификатора потока

}

//

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Close();

}

//

void __fastcall TForm1::Button1Click(TObject *Sender)

{

if (strelki==false)

Form1->Memo1->Lines->Add("Нетстрелков");

else

{Form1->Memo1->Lines->Add("ДанакомандаОгонь");

AnsiString message="0";//началонумерацции

Write(message);

Form1->Memo1->Lines->Add("Стрелокподключен");

}

}

//

Unit1.cpp (стрелок)

//

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//

HANDLE hPipeIn, hPipeOut; intMyNumber=0;

intSoldierState=0; //состояние солдата: 0-ожидание, 1-прямой счет,

//2-обратный счет, 3-выстрел

LPTSTRpipename = "\\\\.\\pipe\\medpipe";

intCount=0;

boollast=true;//флаг, последний он или нет

AnsiString message;

voidCreatingPipe();

voidWriteReadThread();

void Write(AnsiStringmessage,HANDLEhPipe);

int Read(HANDLE hPipe);

HANDLE hThreadCreatingPipe; DWORDThreadCreatingPipeId;

DWORD WriteReadThreadId; HANDLEhWriteReadThread;

//

void __fastcall TForm1::FormCreate(TObject *Sender)

{

hPipeIn = CreateFile(

pipename, // имяканала

GENERIC_READ | // доступначтение/запись

GENERIC_WRITE,

0, // без разделения

NULL, // без атрибутов безопасности

OPEN_EXISTING, // открыть уже существующий

0, // атрибуты по умолчанию

NULL); // нефайлшаблона

if (hPipeIn == INVALID_HANDLE_VALUE)

{

ShowMessage("Подключите офицера");

exit(0);//выход из программы

}

else

{ Form1->Memo1->Lines->Add("Связь с офицером установлена");

boolfSuccess; CHAR chReply[512]; DWORD cbRead=0;

fSuccess = ReadFile(

hPipeIn, // дескрипторканала

&chReply, // буфердляполученияданных

512*sizeof(CHAR), // его размер

&cbRead, // число считанных байт

NULL); // синхронно

MyNumber=StrToInt(chReply);

Form1->Caption="Стрелок " +IntToStr(MyNumber);

hThreadCreatingPipe = CreateThread(

NULL, // Отсутствиеатрибутовбезопасности

0, // размер стека потока выбрать по умолч

(LPTHREAD_START_ROUTINE) CreatingPipe,

NULL, // параметрпотока

0, //не приостановленный

&ThreadCreatingPipeId); // возврат идентификатора потока

if (hThreadCreatingPipe == NULL)

ShowMessage("Ошибка в функцииCreateThread");

}

// Создать поток для записи/чтения

hWriteReadThread = CreateThread(

NULL, // Отсутствие атрибутов безопасности

0, // размер стека потока выбрать по умолч

(LPTHREAD_START_ROUTINE) WriteReadThread,

NULL, // параметрпотока

0, // не приостановленный

&WriteReadThreadId); // возврат идентификатора потока

if (hWriteReadThread == NULL)

ShowMessage("Ошибка в функцииCreateThread");

}

//

voidCreatingPipe()

{ DWORDdwThreadId; boolfConnected;

hPipeOut=CreateNamedPipe

( pipename, // Имя PIPE канала

PIPE_ACCESS_DUPLEX, // Параметрыоткрытия pipe

PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, // Спецификация pipe канала

PIPE_UNLIMITED_INSTANCES, // количество допустимых клиентов

512, //Размер выходного буфера

512, //Размер входного буфера

NMPWAIT_USE_DEFAULT_WAIT, //Таймаут в миллисекундах

NULL // Атрибутыбезопасности

);

if (hPipeOut == INVALID_HANDLE_VALUE)

ShowMessage("Ошибка в функцииCreateNamedPipe. Связьнеустановлена.");

fConnected = ConnectNamedPipe(hPipeOut, NULL);

if (!fConnected) ShowMessage("Ошибка в функцииConnectNamedPipe");

else

{

last=false;

message=MyNumber+1;

Write(message, hPipeOut);

Form1->Memo1->Lines->Add("Естьсолдатсправа");

}

}

//

voidWriteReadThread()

{

for (;;)

{

switch (SoldierState)

{

case 0:

Count=Read(hPipeIn);

if (Count==-1)

{

if (last==false)

{

message=IntToStr(Count);

Write(message,hPipeOut);

Form1->Memo1->Lines->Add("Ожидание");

}

TerminateProcess(GetCurrentProcess(),NULL);

// дескрипторпроцесса,

}

Form1->Memo1->Lines->Add(Count);

SoldierState=1;

Form1->Memo1->Lines->Add("Прямойсчет");

Sleep(1000);

if (last)

{

SoldierState=2;

Form1->Memo1->Lines->Add("Обратныйсчет");

Form1->Memo1->Lines->Add(" Я последний в цепи");

message=IntToStr(Count-1);

Write(message,hPipeIn);break;

}

message=IntToStr(Count+1);

Write(message,hPipeOut);break;

case 1:

Count=Read(hPipeOut);

Form1->Memo1->Lines->Add(Count);SoldierState=2;

Form1->Memo1->Lines->Add("Обратныйсчет");

Sleep(1000);

message=IntToStr(Count-1);

Write(message,hPipeIn);break;

case 2:

if (Count>0) {Count--; Form1->Memo1->Lines->Add(Count);

Sleep(1000);break;}

else

{

SoldierState=3;

break;

}

case 3:

Form1->Memo1->Lines->Add("Стреляю");

Form1->Memo1->Lines->Add("Выстрел произведен!");

Sleep(1500); SoldierState=0;

Form1->Memo1->Lines->Add("Ожидание");

break;

}

}

}

//--

int Read(HANDLE hPipe)

{

DWORD cbRead=0; boolfSuccess;

CHAR chReply[512];

fSuccess = ReadFile(

hPipe, // дескрипторканала

chReply, // буфер для получения данных

512*sizeof(CHAR), // его размер

&cbRead, // число считанных байт

NULL); // синхронно

Count=StrToInt(chReply);

return Count;

}

//---

void Write(AnsiStringmessage,HANDLEhPipe)

{

boolfSuccess;

DWORD cbToWrite=0, cbWritten=0;

cbToWrite = (strlen(message.c_str())+1)*sizeof(CHAR);

fSuccess = WriteFile(

hPipe, // дескрипторканала

message.c_str() , // сообщение

cbToWrite, // длина сообщения

&cbWritten, // число записанных байт

NULL); // синхронно

}

//

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction&Action)

{

Action=caNone;

}

//

Размещено на Allbest.ru

...

Подобные документы

  • Структурная организация операционной системы на основе различных программных модулей. Функции, выполняемые модулями ядра. Модули операционной системы, оформленные в виде утилит. Ядро в привилегированном режиме. Многослойная структура ядра системы.

    презентация [705,2 K], добавлен 16.01.2012

  • Сущность и принцип работы операционной системы, правила и преимущества ее использования. Возможности различных операционных систем, их сильные и слабые стороны. Сравнительная характеристика систем Unix и Windows NT, их потенциал и выполняемые задачи.

    реферат [10,5 K], добавлен 09.10.2009

  • История развития и отличительные признаки UNIX-системы. Основы информационной безопасности и особенности настройки исследуемой операционной системы, ее достоинства, недостатки и базовые права доступа. Общая характеристика безопасности ядра UNIX.

    реферат [599,5 K], добавлен 18.09.2013

  • Виды алгоритмов как логико-математических средств, характеристика свойств. Корректный вывод алгоритма при решении вычислительной задачи. Механизм реализации алгоритма, его описание. Решение задачи Майхилла при помощи автоматной модели поведения стрелка.

    курсовая работа [53,6 K], добавлен 17.07.2014

  • Изучение механизма работы программных инструментов как трудная часть отладочного процесса. Отладчики пользовательского режима, их основные типы. Автоматический запуск приложений в отладчике. Быстрые клавиши прерываний. Отладка ядра операционной системы.

    реферат [260,0 K], добавлен 25.11.2016

  • Применение персональных компьютеров различных классов. Работа со встроенными программами Windows. Характеристика распространенных операционных систем (Windows 3.Х, 9Х, NT, 2000, XP, Windows7, Vista). Виды антивирусных программ и защита данных от вирусов.

    контрольная работа [32,3 K], добавлен 23.01.2011

  • Дослідження внутрішньої структури операційної системи Windows. Архітектура NT і структура ядра. Методи перехоплення функцій у режимі ядра та режимі користувача. Поняття драйверу. Пакети вводу-виводу. Оцінка стабільності та безпеки системи Windows.

    курсовая работа [239,3 K], добавлен 02.01.2014

  • Особенности и свойства операционной системы UNIX, ее история, файловая структура, функции и отличия от других. Архитектура ядра системы. Понятия диспетчеризации, прерываний, системного времени (таймера), кеша. Проблема построения многопроцессорных систем.

    курсовая работа [35,6 K], добавлен 10.05.2011

  • Ядро Windows 98. Роль 16-разрядных модулей ядра. Проблемы быстродействия. Кооперативная и вытесняющая многозадачность. Улучшенное использование ресурсов в Windows 98. Использование WordArt. Программа MS Outlook Express: создание и отправка сообщений.

    контрольная работа [120,4 K], добавлен 14.04.2005

  • Неекспортовані символи ядра. Оптимальний підхід до реалізації пошуку символів у ядрі. Виконання, підміна, додавання та приховання системних викликів. Завантаження модуля ядра із програмного коду та з коду іншого модуля. Робота з UNIX-сигналами.

    курсовая работа [84,0 K], добавлен 23.05.2013

  • Особенности архитектуры MIPS компании MIPS Technology. Иерархия памяти. Обработка команд перехода. Адресная очередь. Переименование регистров. Обоснование выбора операционной системы. Perl-эмулятор и сборка ядра. Электрическая и пожарная безопасность.

    дипломная работа [180,2 K], добавлен 06.03.2013

  • История создания, архитектура операционной системы и перечень возможностей, реализуемых в Linux. Инструментальные средства и цикл разработки новой версии ядра. Жизненный цикл патча. Структура принятия решений при добавлении новых функций (патчей) в ядро.

    лекция [303,8 K], добавлен 29.07.2012

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

    курсовая работа [436,1 K], добавлен 25.10.2012

  • Структура ядра операционной системы. Основные компоненты подсистемы управления процессами и памятью. Характеристика системных и прикладных процессов в Unix. Идентификация процесса Linux, его атрибуты и вызовы. Средства межпроцессного взаимодействия.

    лекция [170,1 K], добавлен 29.07.2012

  • Описание файловой системы Unix. Работа основных команд ls, cmp, comm, их ключей. Разработка программного продукта, работающего в среде Windows и представляющего собой эмулятора командного процессора операционной системы Unix. Выбор средств реализации.

    курсовая работа [183,0 K], добавлен 29.04.2015

  • Структура режима пользователя, предоставляющего возможность пользователю вступать во взаимодействие с системой. Описание режима ядра, который обеспечивает безопасное выполнение приложений (программ) пользователя. Уровень аппаратных абстракций Windows NT.

    презентация [29,6 K], добавлен 23.10.2013

  • Классификация компьютерной памяти. Использование оперативной, статической и динамической оперативной памяти. Принцип работы DDR SDRAM. Форматирование магнитных дисков. Основная проблема синхронизации. Теория вычислительных процессов. Адресация памяти.

    курсовая работа [1,5 M], добавлен 28.05.2016

  • Прикладные программы и утилиты. Простейшие функции операционной системы. История разработки корпорацией Microsoft Corporation графической операционной оболочки Windows. Версия семейства сетевых ОС Windows NT (Millennium Edition, 2000, XP, Vista, Seven)

    презентация [965,2 K], добавлен 12.10.2013

  • Понятие операционной системы (ОС), ее функции и виды для различных платформ (коммерческих и свободных). Выбор ОС для компьютера. Достоинства и недостатки ОС Windows, характеристика ее функций и возможностей. Биография создателя ОС Windows Билла Гейтса.

    презентация [693,8 K], добавлен 11.10.2012

  • Общая организация файловой системы. Виртуальные страницы. Команды для работы с ФС. Способы организации файлов. Системные вызовы управления процессами. Алгоритм работы планировщика процессов. Мультипрограммный режим работы ОС. Структура ядра системы.

    курсовая работа [645,3 K], добавлен 23.03.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.