Саратовский государственный аграрный университет



Саратовский государственный технический университет

Учебное пособие

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

[pic]

САРАТОВ 2011

РЕФЕРАТ

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

Учебное пособие разработано на основе курса лекций по дисциплине «Операционные системы» для бакалавров направления 230700.62, читаемой на кафедре «Системотехника» Саратовского государственного технического университета.

Учебное пособие содержит 236 с.,

Ил. 70 , табл. 14, библиогр.: 33 назв.

Заказ 902/88

Петров Дмитрий Юрьевич

СОДЕРЖАНИЕ

ВВЕДЕНИЕ 5

1. ОСНОВНЫЕ ПОНЯТИЯ В ОПЕРАЦИОННЫХ СИСТЕМАХ 9

1.1. Классификация и функции операционных систем 9

1.2. Выполнение команд в вычислительной системе 17

1.3. Прерывания 23

1.4 Архитектуры операционных систем 27

1.5. Управление оперативной памятью вычислительной системы 31

1.6. Общие сведения о процессах и потоках 40

2. ОПЕРАЦИОННАЯ СИСТЕМА WINDOWS 46

2.1. Версии операционной системы Windows 46

2.2. Архитектура операционной системы WINDOWS 50

2.3. Процессы и потоки в Windows 55

2.4. Взаимодействие процессов 59

2.5. Управление потоками в Windows 63

2.6. Файловые системы Windows 67

2.7. Установка и последовательность загрузки Windows 78

2.8. Интерпретатор команд и пакетные файлы 83

2.9. Конфигурирование Windows 88

3. ОПЕРАЦИОННАЯ СИСТЕМА QNX NEUTRINO 97

3.1. Версии операционной системы QNX Neutrino 97

3.2. Архитектура операционной системы QNX Neutrino 102

3.3. Процессы в QNX6 110

3.4. Потоки в QNX6 125

3.5. Управление потоками и процессами в QNX6 137

3.6. Файловые системы QNX 151

3.7. Инсталляция и последовательность загрузки QNX 156

3.8. Интерпретаторы команд и пакетные файлы в QNX 159

3.9. Конфигурирование QNX 163

4. ВИРТУАЛЬНЫЕ МАШИНЫ 166

4.1. Общие сведения о виртуальных машинах 166

4.2. Работа с виртуальной машиной VmWare 169

5. ЗАЩИТА ОТ СБОЕВ И НЕСАНКЦИОНИРОВАННОГО ДОСТУПА 175

5.1. Принципы построения систем безопасности 175

5.2. Безопасность операционной системы WINDOWS 184

6. СЕТЕВЫЕ ВОЗМОЖНОСТИ ОПЕРАЦИОННЫХ СИСТЕМ 192

6.1. Аппратаное обеспечение локальных сетей 192

6.2. Сети Windows 202

6.3. Локальная сеть на основе QNET 208

6.4. Глобальные сети 213

7. МНОГОПРОЦЕССОРНЫЕ СИСТЕМЫ 219

7.1. Архитектуры многопроцессорных операционных систем 219

7.2. Принципы функционирования SMP 223

7.3. Принципы функционирования кластеров 226

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 229

ВВЕДЕНИЕ

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

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

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

Большое внимание уделено принципам управления процессами и потоками в операционных системах Windows NT и QNX Neutrino, диспетчеризации и синхронизации протоков, межпроцессному взаимодействию и принципам управления памятью. Рассмотрение особенностей виртуальных машин, многопроцессорных режимов работы вычислительных систем, организации локальных сетей и принципы построения и защиты от сбоев и несанкционированного доступа позволяет студентам понять функциональные возможности и перспективы развития операционных систем выполнено.

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

Учебное пособие разработано на основе курса лекций по дисциплине «Операционные системы» читаемой на кафедре «Информационные системы и технологии» Саратовского государственного аграрного университета для бакалавров направления «Информатика и вычислительная техника» 230700.62.

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

1. ОСНОВНЫЕ ПОНЯТИЯ В ОПЕРАЦИОННЫХ СИСТЕМАХ

1.1. Классификация и функции операционных систем

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

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

Вычислительные системы состоят из аппаратного и программного обеспечения. Программное состоит из системного и прикладного. Системное программное обеспечение - программы и комплексы программ, являющиеся общими для всех, кто использует совместно технические средства компьютера и применяемые как для разработки новых программ, так и для организации выполнения существующих программ [2]. В этом смысле системное программное обеспечение может быть разделено на 5 групп (рис.1):

1. операционные системы (ОС);

2. системы программирования;

3. утилиты (специальные системные программы, с помощью которых обслуживается сама ОС);

4. интерфейсные оболочки для взаимодействия с пользователем;

5. системы управления файлами

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

Рис. 1. Структура системного программного обеспечения

Наиболее общей является следующая классификация ОС:

1. однозадачные (однопрограммные) (MS-DOS) и многозадачные (QNX, Windows);

2. однопользовательские (Windows) и многопользовательские (один центральный процессор и блок оперативной памяти соединялся с многочисленными терминалами (UNIX));

3. однопроцессорные (Windows 98) и многопроцессорные (Windows NT, Linux);

4. общего назначения (Windows) и реального времени (QNX Neutrino, LynxOS-178).

ОС общего назначения - системы, где время реализации функций не критично и не определяет качества функционирования ВС. В ОС жёсткого реального времени (QNX Neutrino) невыполнение тех или иных функций за определённый промежуток времени приводит к отказу всей ВС. ОС мягкого реального времени близки к ОС общего назначения, но в оценке их качества функционирования фигурирует время выполнения функций, но их несвоевременное выполнение не приводит к отказу ВС (Linux).

На рис.2. представлено распределение наиболее известных ОС в пространстве категорий:

1. максимально эффективное использование ВС при ограниченном удобстве пользователя (ОС жесткого реального времени),

2. максимальное удобство пользователя при не эффективном использовании ВС (ОС общего назначения),

3. возможность адаптации ОС к ограниченным аппаратным средствам ВС (встраиваемость ОС)

[pic]

Рис.2. Классификация ОС

Выделяют следующие основные функции операционных систем [2]:

1. приём от пользователя заданий или команд, сформированных на соответствующем языке и их обработка;

2. приём и исполнение программных запросов на запуск, приостановку и остановку других программ;

3. загрузка в оперативную память подлежащих исполнению программ;

4. инициализация программ (передача управления программе, в результате чего процессор начинает исполнение команд программы);

5. идентификация всех программ и данных;

6. обеспечение работы системы управления файлами и базами данных, что обеспечивает увеличение эффективности работы всего программного обеспечения;

7. обеспечение режима многозадачности (мультизадачности), т. е. исполнение двух и более программ на одном процессоре;

8. обеспечение функций по организации и управлению всеми операциями ввода/вывода;

9. удовлетворение жёстким ограничениям на время ответа (тайм-аут) в режиме реального времени;

10. распределение оперативной памяти и организация виртуальной памяти;

11. планирование и диспетчеризация задач в соответствии с заданной стратегией дисциплиной обслуживания;

12. организация механизмов обмена сообщениями и данными между выполняющимися программами;

13. защита одной программы от влияния другой, обеспечение сохранности данных;

14. предоставление услуг на случай частичного сбоя системы;

15. обеспечение работы систем программирования, с помощью которых пользователь разрабатывает свои прикладные программы;

16. обеспечение сетевых функций.

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

Параллельное существование терминов «ОС» и «операционная среда» вызвано тем, что ОС может поддерживать несколько операционных сред. Например, ОС Windows XP может выполнять следующие программы:

1. Родные программы, созданные с помощью 32-битного программного интерфейса этой ОС;

2. Родные программы, созданные с помощью 64-битного программного интерфейса этой ОС;

3. 16-битные приложения для MS-DOS;

4. 16-битные приложения для Windows 3x.

ОС может включать в себя несколько пользовательских и программных интерфейсов. Например, Linux имеет три пользовательских интерфейса:

1. командная строка;

2. файловый менеджер Midnight commander - аналог Norton commander;

3. графический интерфейс – X-Windows.

Вычислительный процесс – выполнение отдельной программы с ее данными на процессоре. Далее термину ВП будет соответствовать термин задача. Вычислительный ресурс – повторно используемый относительно стабильный и часто недостающий объект, который запрашивается, используется и освобождается ВП в период их активности. Ресурс – всякий объект, который может распределяться внутри системы. Выделяют ресурсы делимые и неделимые. Ресурсами ВС являются: оперативная память, процессорное время, дисковое пространство, порты ввода-вывода, файлы, каналы ввода/вывода, периферийные устройства, программные и информационные объекты, сообщения и синхросигналы, которыми обмениваются процессы.

Схема состояний задачи в ВС показана на рис.3. ВП могут быть в активном состоянии, участвуя в конкуренции за ресурсы, и в пассивном, не участвуя в нем [2].

Рис.3. Схема состояния задачи в вычислительной системе

Активное состояние: выполнение – все затребованные ресурсы выделены, в каждый момент времени в нем находится только один процесс (в компьютере с одним процессором); готовность к выполнению – все ресурсы предоставлены за исключением процессорного времени; блокирование (ожидание) – не все ресурсы предоставлены или не завершены операции ввода-вывода.

Суть многозадачности заключается в том, что пока один вычислительный процесс ожидает завершения очередной операции ввода-вывода (IO), другой вычислительный процесс может быть запущен на выполнение в процессоре (рис.4) [3].

Рис.4. Пример однозадачного и многозадачного исполнения ВП

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

В современной ОС выделяют уровни [3]:

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

2 уровень: набор команд (инструкций) процессора; в число операций, выполняемых на этом уровне входят те, которые допускаются набором команд машинного языка (add, sub, mov, jmp).

3 уровень: содержит концепцию процедуры (подпрограмму), а так же операции вызова и возврата (call, push, pop).

4 уровень: уровень прерывания, который заставляет процессор сохранить текущий контекст и выполнить подпрограмму обработку прерывания.

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

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

6 уровень: компоненты этого уровня взаимодействуют со вспомогательными ЗУ компьютера, на этом уровне происходит позиционирование считывающих головок и физическая передача блоков данных. Для планирования работы и уведомления процесса о завершении запрошенной операции этот уровень использует компоненты предыдущего уровня.

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

Описанные выше уровни обеспечивают взаимодействие ОС с процессором, компоненты ОС, начиная с 8 уровня, обеспечивают взаимодействие с внешними объектами (ПУ, сети компьютеров). Объектами этих уровней являются логически именованные объекты, которые смогут совместно использоваться несколькими процессами, использующимися на одном или нескольких компьютерах.

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

9 уровень: обеспечивает долгосрочное хранение файлов, на этом уровне данные, хранящиеся на вспомогательных ЗУ рассматриваются как абстрактные объекты переменной длинны, в противоположность аппаратно-зависимому рассмотрению вторичной памяти, как набора дорожек, секторов и блоков фиксированного размера присущему 6 уровню.

10 уровень: предоставляет доступ к внешним устройствам с помощью стандартных интерфейсов.

11 уровень: поддерживает связь между внешними и внутренними идентификаторами системных ресурсов и объектов. Внешний идентификатор – это имя, которое может использоваться приложением или пользователем. Внутренний идентификатор – это адрес или другой идентификатор, используемый нижними уровнями ОС для обнаружения объекта и управления им, эта связь поддерживается с помощью каталога, который включает в себя не только взаимное отображение внешних и внутренних идентификаторов, но и другие характеристики (например, пространство доступа).

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

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

1.2. ОС общего назначения и реального времени

Аппаратными средствами современных вычислительных систем управляют программные комплексы называемые операционными системами. Они обеспечивают взаимодействие компьютера с пользователем и другими компьютерами. Это взаимодействие основано на двух противоречивых критериях: повышение эффективности работы пользователя за счет неэффективного использования аппаратных средств и повышение надежности вычислений за счет ограничения эффективности работы пользователя. Первому критерию соответствуют операционные системы общего назначения (Windows, Linux), второму – операционные системы реального времени (QNX, VxWorks).

Существует множество определений термина операционная система реального времени взаимодополняющих друг друга [1]. Самыми распространёнными из них являются:

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

2. В соответствии со стандартом POSIX 1003.1: «Реальное время в операционных системах — это способность операционной системы обеспечить требуемый уровень сервиса в определённый промежуток времени».

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

4. Интерактивные системы постоянной готовности. В категорию ОСРВ интерактивные системы постоянной готовности относят, исходя из маркетинговых соображений, и если интерактивную программу называют «работающей в РВ», то это означает, что запросы от пользователя обрабатываются с задержкой, незаметной для человека.

В табл. 1 приведен сравнительный анализ ОСРВ и систем общего назначения.

Сравнительный анализ ОС РВ и общего назначения Таблица 1

|Характеристики |ОС реального времени |ОС общего назначения |

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

| |оборудовании |пользователями и задачами |

|На что  |Обработка внешних событий |Обработка действий пользователя |

|ориентирована | | |

|Как  |Инструмент для создания конкретного |Воспринимается пользователем как набор приложений, |

|позиционируется |аппаратно-программного комплекса реального |готовых к использованию |

| |времени | |

|Кому |Квалифицированный разработчик |Пользователь средней квалификации |

|предназначена | | |

ОС РВ бывают двух типов — системы жесткого и мягкого РВ.

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

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

Системы жёсткого реального времени не допускают задержек реакции системы, так как это может привести: к потере актуальности результатов; к большим финансовым потерям; к авариям и катастрофам.

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

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

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

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

Большинство программного обеспечения ориентировано на «мягкое» реальное время. Для подобных систем характерно:

• гарантированное время реакции на внешние события (прерывания от оборудования);

• жёсткая подсистема планирования процессов (высокоприоритетные задачи не должны вытесняться низкоприоритетными, за некоторыми исключениями);

• повышенные требования к времени реакции на внешние события или реактивности (задержка вызова обработчика прерывания не более десятков микросекунд, задержка при переключении задач не более 100 микросекунд).

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

В своем развитии ОСРВ строились на основе следующих архитектур.

Монолитная архитектура ОС определяется как набор модулей, взаимодействующих между собой внутри ядра системы и предоставляющих прикладному ПО входные интерфейсы для обращений к аппаратуре. Их основной недостаток заключается в плохой предсказуемости ее поведения, вызванной сложным взаимодействием модулей между собой.

Уровневая (слоевая) архитектура (например, MS-DOS). Прикладное ПО имеет возможность получить доступ к аппаратуре не только через ядро системы и ее сервисы, но и напрямую. По сравнению с монолитной такая архитектура обеспечивает значительно большую степень предсказуемости реакций системы, а также позволяет осуществлять быстрый доступ прикладных приложений к аппаратуре. Главным недостатком таких систем является отсутствие многозадачности.

Основной принцип микроядерной архитектуры или «клиент–серверной» заключается в вынесении сервисов ОС в виде серверов на уровень пользователя и выполнении микроядром функций диспетчера сообщений между клиентскими пользовательскими программами и серверами – системными сервисами. Преимущества микродероной архитектуры:

1. Повышенная надежность, так как каждый сервис является, по сути, самостоятельным приложением и его легче отладить и отследить ошибки.

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

3. Повышенная отказоустойчивость, так как «зависший» сервис может быть перезапущен без перезагрузки системы.

Ядро ОСРВ обеспечивает функционирование промежуточного абстрактного уровня ОС, который скрывает от прикладного ПО специфику технического устройства процессора и связанного с ним аппаратного обеспечения. Например, ОС QNX Neutrino поддерживает нескольких аппаратных платформ (MIPS, PowerPC, StrongARM/xScale, SH-4, x86).

1.3. Выполнение команд в вычислительной системе

На макроуровне компьютер состоит из процессора, оперативной памяти и устройств ввода/вывода, при этом каждый из этих объектов может быть представлен одним или несколькими модулями. Для взаимодействия между собой они используют системную шину [3]. Можно выделить четыре структурных компоненты компьютера (рис.5):

• процессор – осуществляет контроль за действиями компьютера, а так же выполняет функции обработки данных;

• основная память – здесь хранятся данные и код программы, как правило она является временной, часто её называют реальной, оперативной или первичной памятью;

• устройства ввода/вывода – служат для передачи данных между ВС и внешним миром, они состоят из различных переферийных устройств (ПУ) (вторичная память, коммуникационное оборудование, терминалы, принтеры, сканеры, клавиатуры, звуковая карта и т. д.);

• системная шина – определяет структуры и механизмы, обеспечивающие взаимодействие между процессором, ОП и устройствами ввода/вывода.

Рис. 5. Общая структура ВС

Для выполнения команд процессор использует два регистра: PC – программный счётчик (из него считывается адрес следующей команды для выполнения на процессоре) и IR – регистр команды (в него помещается из памяти код выбранной на исполнение команды). В состав всех процессоров входит регистр флагов, устанавливаемых и сбрасываемых в зависимости от результата выполнения команд на процессоре.

Одной из функций процессора является обмен данными с памятью, для этого он обычно использует 2 внутренних (по отношению к процессорному регистра) регистра: MAR – регистр адреса памяти, куда заносится адрес ячейки памяти с которой будет производится операция чтения/записи и MBR - регистр буфера памяти, куда заносятся данные, предназначенные для записи в память или те, которые были прочитаны из неё.

Аналогично номер устройства ввода/вывода задаётся в регистре адреса IOAR, а регистр IOBR, служит для обмена данными между устройствами ввода/вывода и процессором. Модуль основной памяти состоит из пронумерованных ячеек, в каждую из которых может быть записано двоичное число, которое интерпретируется либо как команда, либо как данные. Модуль ввода/вывода служит для передачи данных от внешних устройств к процессору и памяти так и в обратном направлении.

Регистры процессора представляют собой область памяти быстрого доступа внутри процессора и делятся на 2 группы:

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

2) управляющие регистры и регистры состояния – они используются в процессоре для контроля над выполняемыми операциями, с их помощью привилегированные программы ОС могут контролировать ход выполнения других программ, к ним относят: PC, IR, MAR, MBR, IOAR, IOBR, RSW (слово состояния), который управляет режимом прерывания и режимами «системный» и «пользовательский», регистр флагов, регистр управления прерываниями, регистр аппаратного управления памятью, регистры управления операциями ввода/вывода.

Программа, которую выполняет CPU, состоит из набора хранящихся в памяти команд, в простейшем случае, обработка команд проходит в 2 стадии: процессор считывает (выбирает) из памяти команду и затем запускает её на выполнение (рис.6) [3].

Рис.6. Исполнение команд процессором

Выполнение команды сводится к процессу выборки команды и её исполнения. Для исполнения одной команды может потребоваться несколько операций, их число определяется природой самой команды. Например, для исполнения команды ассемблера Loop (цикл Until) необходимо выполнить следующие действия: 1) проверить условие завершения цикла, 2) изменить значение регистра счетчика, 3) выполнить переход на начало цикла. Набор действий, требующихся для реализации одной команды называется её циклом. На рис.6 два цикла необходимых для выполнения одной команды: циклы выборки и исполнения. Прекращение работы программы происходит при выключении машины, возникновении неисправимой ошибки или если в программе есть команда-остановки.

В начале каждого цикла процессор выбирает из памяти команду, обычно адрес ячейки, из которой нужно извлечь очередную команду хранится в РС. После извлечения очередной команды процессор увеличивает значение программного счетчика РС на 1, если не указано иное значение (например команда условного или безусловного перехода). Таким образом, команды выполняются в порядке возрастания номеров ячеек памяти, в которых они хранятся.

Пусть значение регистра РС равно 30016 – это значит, что следующая команда, которую должен извлечь процессор находится в 30016-ой ячейке. При успешном завершении цикла команды процессор перейдёт к извлечению команды из ячейки 30116. Извлечённая команда загружается в регистр IR. Команда состоит из последовательности бит, указывающих процессору, какие именно действия он должен выполнить, процессор интерпретирует команду и выполняет требуемые действия.

Все действия процессора можно разделить на 4 категории [3]:

• процессор и память – здесь данные пересылаются из процессора в память и обратно;

• процессор и устройства ввода/вывода – данные из процессора поступают на ПУ через устройства (контроллер) ввода/вывода и наоборот;

• обработка данных – процессор выполняет над данными арифметические и логические операции;

• управление – операция может задать последовательность выполнения команд.

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

Рассмотрим гипотетический (упрощённый) компьютер (рис.7). В его процессоре есть один регистр данных, называемый аккумулятором (accumulator – AC), регистр команды (IR) и программный счетчик (PC) [3]. Каждая команда и данное имеет длину 16 бит (одно слово). При такой структуре данных удобно организовать память (адресовать) как в виде 16-битных ячеек. Формат команды предусматривает выделение 4 бит для кода операции и 12 бит для адреса ячейки памяти, со значением которой выполняется операция. Таким образом, всего может быть 24 = 16 различных кодов операций (каждый из которых можно представить одной шестнадцатеричной цифрой). Адресоваться можно к 212 = 4096 слов памяти (8 Кбайт) (которые можно представить трехзначным шестнадцатеричным числом).

| | |Формат команды |

|Код |операции (команды) |Адрес |

|0 |3 |4 |

| | |15 |

| | |Формат данных (целого числа) |

|Знак | |Число |

|0 |1 |15 |

Рис. 7. Характеристики гипотетического компьютера

Пусть процессор поддерживает следующие команды (операции):

00012 (116) – загрузить значение из памяти в аккумулятор (AC);

00102 (216) – сохранить содержимое аккумулятора (AC) в памяти;

01012 (516) – добавить к аккумулятору (AC) значение ячейки памяти;

01102 (616) – вычесть из аккумулятора (AC) значение ячейки памяти;

10102 (A16) – инвертировать значение ячейки памяти.

На рис. 8 показаны шесть шагов необходимых для выполнения трех команд (116 , 216 , 516). Каждый шаг описывают три регистра (PC, AC, IR,) и два фрагмента памяти, где в ячейках с адреса 300 записаны команды программы, с адреса 940 данные программы. Каждый нечетный шаг это цикл считывания команды, а каждый четный – цикл исполнения выбранной команды.

|Память Регистры процессора |Память Регистры процессора |

| | |

| | |

| | |

| | |

|… |… |

| | |

| | |

| | |

| | |

|Шаг 1 |Шаг 2 |

|Память Регистры процессора |Память Регистры процессора |

| | |

| | |

| | |

| | |

|… |… |

| | |

| | |

| | |

| | |

|Шаг 3 |Шаг 4 |

|Память Регистры процессора |Память Регистры процессора |

| | |

| | |

| | |

| | |

|… |… |

| | |

| | |

| | |

| | |

|Шаг 5 |Шаг 6 |

Рис.8. Пример выполнения трех двухбайтных одноадресных команд

Выполнение программы на рис.8 осуществляется следующим образом:

1. Адрес первой команды (300) хранится в программном счетчике PC. Эта команда (она представлена шестнадцатеричным числом 1940) загружается в регистр команд (IR), а показание программного счетчика увеличивается на 1. Следует отметить, что в этом процессе участвуют регистры адреса и буфера памяти, однако для упрощения они игнорируются.

2. Значние первых 4 бит (первая шестнадцатеричная цифра) регистра команд указывают на то, что нужно загрузить значение в аккумулятор. Остальные 12 бит ( три шестнадцатеричные цифры) указывают адрес 940 откуда загрузить данные.

3. Из ячейки 301 извлекается следующая команда (5941), после чего значение программного счетчика увеличивается на 1.

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

5. Из ячейки 302 извлекается следующая команда (2941), затем значение программного счетчика увеличивается на 1.

6. Содержимое аккумулятора заносится в ячейку 941.

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

1.4. Прерывания

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

Механизм прерывания реализуется аппаратно-программными средствами и включает в себя следующие этапы:

1. установка факта прерывания и его идентификация;

2. запоминание контекста (состояния) прерванного процесса; состояние процесса определяют: счетчик команд (PС), содержимое регистров процессора (АС), а также может включать спецификацию режима (пользовательский или привилегированный) и др. информацию хранящуюся в регистре флага;

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

4. сохраняется информация о прерванной программе, если это не было сделано аппаратно;

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

6. восстанавливается информация, относящаяся к прерванному процессу;

7. возврат управления прерванной программы.

При этом этапы 1-3 реализуются аппаратно, а 4-7 программно.

При возникновении запроса на прерывание естественный ход вычислений нарушается, и управление передаётся программе обработчика возникшего прерывания. При этом средствами аппаратуры (с помощью механизмов стековой памяти) сохраняется адрес той команды, с которой следует продолжить выполнение прерванной программы. После выполнения программы обработки прерывания управление возвращается прерванной ранее программе посредством занесения в указатель команд сохранённого адреса команды из стека (рис.9). Такая схема используется для простейших ОС, для более сложных ОС при обработке прерываний используется супервизор прерываний [3].

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

• распознавание или классификация прерываний;

• передача управления соответствующему обработчику прерываний;

• корректное возвращение к прерванной программе.

Рис.9 . Исполнение процессором команд с прерыванием

Прерывание, возникающее при работе ВС можно разделить: на внешние (асинхронные), внутренние (синхронные) и программные.

Внешние прерывания вызываются асинхронными событиями, которые происходят вне прерываемого процесса (программы) (например, прерывание таймера, внешних устройств, по нарушению питания, с пульта оператора ВС, от другого процессора или ВС).

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

Существуют программные прерывания, которые возникают при выполнении процессором соответствующей команды (INT). По этой команде процессор осуществляет те же действия, что и при обработке внутренних прерываний (рис.10). Этот механизм введён для переключения на системные программные модули по правилам прерываний, а не подпрограмм, это обеспечивает автоматическое переключение процессора в привилегированный режим с возможностью выполнения любых команд [3].

Рис.10. Схема обработки прерывания

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

Стек — это специальным образом организованный участок памяти, используемый для временного хранения переменных, для передачи параметров вызываемым подпрограммам и для сохранения адреса возврата при вызове процедур и прерываний. Легче всего представить стек в виде стопки листов бумаги (это одно из значений слова «stack» в английском языке) — вы можете класть и забирать листы бумаги только с вершины стопки. Таким образом, если записать в стек числа 1, 2, 3, то при чтении они будут получаться в обратном порядке — 3, 2, 1.

Для процессоров Intel x86 стек располагается в сегменте памяти, описываемом регистром SS, а текущее смещение вершины стека записано в регистре ESP, причем при записи в стек значение этого смещения уменьшается, то есть стек растет вниз от максимально возможного адреса.

[pic]

Такое расположение стека «вверх ногами» необходимо в бессегментной модели памяти, когда все сегменты, включая сегмент стека и сегмент кода, занимают одну и ту же область — всю память. Тогда программа исполняется в нижней области памяти, в области малых адресов, и EIP растет, а стек располагается в верхней области памяти, и ESP уменьшается.

1.5 Архитектуры операционных систем

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

На принципе модульного программирования в 1970-80-х годах были разработаны слоистые ОС с иерархической организацией функций, взаимодействие которых возможно только между функциями находящимися на соседних уровнях. Управление этими функциями выполнялось в режиме ядра.

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

В архитектуре с микроядром уровни расположены вертикально, а в слоистой горизонтально (рис.11). Внешние по отношению к ядру компоненты реализуются как обслуживаемые процессы. Между собой они взаимодействуют как равноправные партнёры. Обычно взаимодействие реализуется с помощью обмена сообщениями, которые передаются через микроядро. Таким образом, микроядро вступает в роль посредника. Оно подтверждает правильность сообщений, передаёт их от одного компонента к другому и предоставляет доступ к аппаратному обеспечению [4]. Микроядро выполняет защитные функции, оно не пропускает сообщения, если такой обмен не разрешён. Например, если приложению нужно открыть файл, то оно отправляет сообщение администратору ФС, если ему нужно создать новый поток в процессе, то оно отправляет сообщение администратору процессов. Каждый из администраторов может отправлять сообщения другим администраторам (серверам, супервизорам, менеджерам) и обращаться к элементарным функциям микроядра и т.о. в одном компьютере реализуется архитектура клиент-сервер.

Достоинством архитектуры микроядра является [3]:

• единообразный интерфейс;

• расширяемость;

• гибкость;

• переносимость;

• надёжность;

• поддержка распределённых вычислительных систем;

• поддержка объектно-ориентированных систем на основе использования компонентов.

Рис. 11.Структуры многослойного ядра и микроядра

Основными функциями микроядра, которые непосредственно зависят от аппаратного обеспечения, являются:

• низкоуровневое управление памятью;

• взаимодействие между процессами;

• управление вводом/выводом и прерываниями.

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

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

Когда поток приложения обращается к странице, которая отсутствует в основной памяти, возникает прерывание из-за отсутствия страницы, и управление перехватывается ядром (рис.12). После этого ядро отправляет системе страничной организации памяти сообщение, в котором указывается запрашиваемая страница. ССОП и ядро должны взаимодействовать между собой, чтобы выполнить действия по переносу требуемой страницы в основную память. Как только страница станет доступна, ССОП отправляет приложению сообщение о том, что оно может продолжить работу. Такая стратегия позволяет внешнему по отношению к ядру процессу отображать файлы БД в пользовательском адресном пространстве без участия ядра [3].

Рис. 12 Принцип работы структуры с микроядром

Для поддержания внешних ССОП и системы управления виртуальной памятью микроядру достаточно трех операций.

1) Предоставление. Владелец адресного пространства может предоставить некоторые свои страницы другим процессам.

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

3) Восстановление. Процесс может восстановить любые страницы, предоставленные другим процессам или отображенные в их адресном пространстве.

1.6. Управление оперативной памятью вычислительной системы

Оперативная память (оперативное запоминающее устройство, ОЗУ) — часть памяти ЭВМ, в которую процессор может обратиться за одну операцию (jump, move и т. п.). Она предназначена для временного хранения данных и команд, необходимых процессору для выполнения им операций. Оперативная память передаёт процессору данные непосредственно, либо через кеш-память. Каждая ячейка оперативной памяти имеет свой индивидуальный адрес.

Система управления оперативной памятью должна поддерживать [3]:

1. перемещение программ из одной области памяти в другую (поддержка относительности адреса);

2. защиту одного процесса от влияния других;

3. совместное использование процессами памяти для взаимодействия (обратная защита) – механизмы межпроцессного взаимодействия (IPC);

4. поддержка логических операций с адресацией;

5. поддержка физических операций с адресацией.

Пусть процесс занимает непрерывную область основной памяти. ОС необходимо знать местоположение управляющей информации процесса и стека исполнения, а также точки входа для начала выполнения процесса. Поскольку управлением памятью занимается ОС и она же размещает процесс в основной памяти, соответствующие адреса она получает автоматически. Однако помимо получения ОС указанной информации, процесс должен иметь возможность обращаться к памяти в самой программе. Так команды ветвления содержат адреса, указывающие на команды, которые должны быть выполнены после них; команды обращения к данным – адреса байтов и слов, с которыми они работают. ОС переводит ссылки в коде программы (логические адлеса) в реальные физические адреса, соответствующие текущему расположению процесса в основной памяти рис. 13.

Рис. 13.Образ процесса в оперативной памяти

Система управления памятью характеризуется :

1. Стратегией выборки. Страница загружается в оперативную память, как по требованию процесса, так и с использованием стратегии предварительной выборки, при которой происходит загрузка страниц кластерами [3].

2. Стратегией размещения. При использовани сегментации все вновь загруженные сегменты должны быть размещены в доступном адресном пространстве.

3. Стратегией замещения. При заполнении памяти следует принимать решение о том, какая страница будет замещена загружаемой в оперативную память новой страницей.

4. Стратегией очистки. Изменённые страницы процесса должны быть записаны (сохранены) при их замещении.

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

6. Управление резидентным множеством процессов. ОС определяет сколько памяти отводить процессу при загрузке его в оперативную память. Память может быть выделена статически в момент создания процесса, либо изменяться динамически в процессе работы [3].

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

|Кадр |Осн.Пам. |

|Идентификатор процесса - уникальное значение, идентифицирующее процесс в|Идентификатор потока - уникальное значение, идентифицирующее поток, |

|ОС |когда он вызывает сервис. |

|Дескриптор защиты – описывает, кто создал процесс, права доступа и пр. |Контекст потока – набор значений регистров, которыми определяется |

| |состояние выполняемого потока. |

|Базовый приоритет – базовый приоритет для потоков |Динамический приоритет - приоритет выполняемого потока в данный |

| |момент. |

| |Базовый приоритет – нижний приоритет динамического приоритета потока.|

|Родственность процессов по умолчанию – заданный по умолчанию набор |Родственность процессов по потоку – множество процессов, где возможно|

|процессов, где возможно выполнение потоков. |выполнение потоков. |

|Время выполнения – суммарное время, затраченное на выполнение всех |Время выполнения потока - совокупное время, затраченное на выполнение|

|потоков в процессе. |потока в пользовательском режиме и режиме ядра. |

|Счётчик ввода/вывода - переменные, в которые заносятся сведения о |Статус извещения (оповещения) – этот флаг, который указывает, следует|

|количестве и типе операций ввода/вывода, выполненных потоками процесса. |ли потоку выполнять асинхронный вызов процедуры. |

|Счётчик операций с виртуальной памятью – это переменные, в которые |Счётчик приостановок – в нём указывается, сколько раз выполнение |

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

|выполненных потоками процесса. | |

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

|времени доступного процессу | |

|Порты исключения/отладки – это каналы обмена информацией между |Порт завершения – это канал обмена информацией между процессами, куда|

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

|при возникновении исключительных ситуаций одного из потоков процесса. | |

|Статус выхода – причины завершения процесса |Статус выхода – причины завершения потока |

Все потоки процесса совместно используют код, глобальные переменные, строки окружения и ресурсы процесса [3]. Каждый поток планируется независимо. Поток включает следующие элементы:

• стек вызова процедур, переменных, обработчиков исключений и автоматических данных;

• локальная память потока – это массивы указателей, которые дают возможность процессу выделить память для создания собственного уникального окружения данных потока;

• структура контекста, управляемая ядром, содержащая значение аппаратных регистров.

Некоторые атрибуты потока подобны атрибутам процессов. Значениия таких атрибутов потока извлекаются из значений атрибутов процесса. Например, в многопроцессорной системе родственные процессоры по потоку – это множество процессоров, на которых может выполняться данный поток. Оно совпадает с множеством процессоров родственных по процессу или является его подмножеством. Информация, содержащаяся в контексте потока, позволяет ОС приостанавливать и возобновлять потоки [9]. Основные функции управления процессами и потоками показаны в табл.3.

Сервисы процесса и потока в Windows Таблица 3

|Процесс |Поток |

|Создание процесса CreateProcess(). |Создание потока CreateThread(). |

|Открытие процесса OpenProcess(). |Открытие потока OpenThread() |

|Информация по запросу процесса |Информация по запросу потока |

|Информация по наладке процесса |Информация по наладке потока |

|Текущий процесс GetCurrentProcessID() |Текущий поток GetCurrentThreadID() |

|Прекращение процесса ExitProcess() |Завершение потока ExitThread() |

| |Получение контекста |

| |Установка контекста |

| |Приостановка Delay() |

| |Возобновление |

| |Извещение потоков |

| |Проверка извещения потока |

| |Порт регистрации завершения. |

Основной функцией для управления процессом win32 является функция CreateProcess(). Она создаёт процесс с одним потоком. Так как процесс требует наличие кода, то в вызове функции CreateProcess() необходимо указывать имя исполняемого файла программы. Функция имеет 10 параметров и при успешном выполнении возвращает дескрипторы для процесса и для первичного потока. Дополнительные потоки можно создать функцией CreateThread(). Для Windows все процессы одинаковы, и она не различает дочерние и родительские, в отличие от Unix.

Жизненный цикл потока в Windows (рис 23) проходит следующие шесть состояний [3]:

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

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

Рис. 23. Жизненный путь потока в Windows

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

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

Переходное: поток готов к выполнению, но не все ресурсы необходимые ему для работы доступны. При доступности всех ресурсов он переходит в состояние готовности.

Завершающее: завершение потока может быть инициировано самим потоком, другим процессом или может произойти вместе с завершением родительского процесса.

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

2.4. Взаимодействие процессов

В Windows процессы имеют три типа взаимодействия между собой [3]. Они показаны в табл.4.

1) Процессы могут быть не осведомлены о наличии друг друга: это независимые процессы, не предназначенные для совместной работы, например, многозадачность для конкретных заданий и интерактивная сеть.

2) Процессы косвенно осведомлены о наличии друг друга: они не обязательно могут знать идентификаторы друг друга, однако могут разделять доступ к некоторому объекту (буфер ввода/вывода).

3) Процессы непосредственно осведомлены о наличии друг друга: они обращаются друг к другу по идентификаторам и предназначены для совместной работы.

Взаимодействие процессов Таблица 4.

|Степень |Взаимосвязь |Влияние одного процесса на другой |Потенциальная проблема |

|взаимодействия | | |взаимодействия |

|Не осведомлены |Конкуренция |Результаты работы одного процесса не зависят от |Взаимоисключение, |

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

| | |на работу другого | |

|Косвенно |Сотрудничество с |Результаты работы одного процесса могут зависеть |Взаимоисключение, |

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

| |ресурса |влияние одного процесса на работу другого |связь данных |

|Непосредственно |Сотрудничество с |Результаты работы одного процесса могут зависеть |Взаимоблокировка, голодание |

|осведомлены |использованием связей |от информации, полученной от других. Возможно | |

| | |влияние одного процесса на работу другого | |

Взаимоисключение (mutual exclusion) – это предоставление процессу некоторого ресурса в монопольное использование, например, принтер предоставляется файла для печати, иначе на распечатке будут чередоваться строки различных файлов. Такой ресурс будет называться критическим, а участок программы, который его использует – критической секцией программы.

Взаимоблокировка (deadlock) – пусть в системе 2 процесса П1 и П2 и 2 ресурса Р1 и Р2. Для работы П1 требуется Р1 и Р2 и он уже захватил Р1, а Р2 недоступен. В тоже время, П2 требуется Р1 и Р2, он захватил Р2, а Р1 недоступен, таким образом, процессы оказываются взаимноблокированы.

Голодание - пусть в системе 3 процесса П1, П2 и П3, которые используют ресурс. Возможна ситуация, когда ресурсом владеет П1, а затем передаёт П3. ОС может предоставлять ресурс так, что П2 его не получит, а П1 и П3 будут использовать его попеременно. Таким образом, П2 не получает ресурса, хотя никакой взаимоблокировки нет, т. е. он голодает.

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

Система виртуальной памяти в Win32 использует файл подкачки - swap file (или файл размещения - page file), имея возможность преобразования страниц оперативной памяти в страницы файла подкачки на диске и наоборот. Система может проецировать на оперативную память не только файл размещения, но и любой другой файл. Приложения могут использовать эту возможность. Это может использоваться для обеспечения более быстрого доступа к файлам, а также для совместного использования памяти.

Такие объекты называются проекциями файлов на оперативную память (file-mapping object). Для создания проекции файла сначала вызывается функция CreateFileMapping(). Ей передается дескриптор (уже открытого) файла или указывается, что нужно использовать page file операционной системы. Кроме этого, в параметрах ей передается флаг защиты, максимальный размер проекции и имя объекта. Затем вызывается функция MapViewOfFile(). Она отображает представление файла (view of a file) в адресное пространство процесса. По окончании работы вызывается функция UnmapViewOfFile(). Она освобождает память и записывает данные в файл (если это не файл подкачки). Чтобы записать данные на диск немедленно, используется функция FlushViewOfFile(). Проекция файла, как и другие объекты ядра, может использоваться другими процессами через наследование, дублирование дескриптора или по имени.

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

Сокет - это абстрактный объект для обозначения одного из концов сетевого соединения, в том числе и через Internet. Сокеты Windows бывают двух типов: сокеты дейтаграмм и сокеты потоков. Интерфейс Windows Sockets (WinSock) основан на BSD-версии сокетов, но в нем имеются также расширения, специфические для Windows.

Для синхронизации в Win API используются (табл.5): уведомление об изменении файла, мьютекс, семафор, события, таймер ожидания.

Механизмы для синхронизации параллельных вычислений Таблица 5

|Тип объекта |Определение |Условие перехода в сигнальное состояние |Ожидающие потоки |

|Процесс |Программа, включающая адресное пространство и |Завершение последнего потока |Освобождаются все потоки |

| |ресурсы, требуемые для её выполнения | | |

|Поток |Выполняемая единица внутри процесса |Завершение работы потока |Освобождаются все потоки |

|Файлы |Открытый файл или устройство ввода/ вывода |Завершение операций ввода/вывода |Освобождаются все потоки |

|Консольный ввод |Буфер текстового окна используется для |Имеется введённая информация доступная |Освобождается один поток |

| |операций I/O в MS-DOS |процессу | |

|Объекты специально для синхронизации |

|Уведомление об |Уведомление о любых изменениях ФС |Изменение в ФС соответствующее заданным |Освобождается один поток |

|изменении файла | |объектом фильтру | |

|Мьютекс |Механизм обеспечения взаимоисключений в Win 32|Поток освобождает мьютекс |Освобождается один поток |

|Семафор |Счётчик, регулирующий количество потоков, |Счётчик семафора обнуляется |Освобождается один поток |

| |которые могут использовать ресурс | | |

|События |Извещение о наступлении некоторого события в |Поток осуществляет событие |Освобождаются все потоки |

| |системе | | |

|Таймер ожидания |Счётчик, учитывающий прошедшее время |Наступил указанный момент времени или истёк |Освобождаются все потоки |

| | |указанный интервал времени. | |

Семафор – это объект синхронизации, имеющий счетчик целых значенией и над которыми определены три операции:

• инициализация неотрицательным числом;

• уменьшения значения семафора: если значение отрицательное, то поток, выполняющий эту операцию блокируется;

• увеличения значений семафора: если значение было отрицательным, то оно увеличиваясь становится больше нуля, тогда заблокированный поток разблокируется.

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

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

2.5. Управление потоками в Windows

Система управления виртуальной памятью контролирует распределение памяти и работу страничной организации. Диспетчер памяти может использовать страницы размером от 4 до 64 кб. Каждый пользовательский процесс получает отдельное 32-битное адресное пространство, предоставляющее процессу 4 Гб памяти (диапазон адресов 232). Часть адресов памяти зарезервирована под ОС так, что каждому пользователю доступны только 2 Гб виртуального адресного пространства.

В страничной организации каждая страница может находится в следующих состояниях:

1. доступна, т.е. страница используется процессом;

2. зарезервирована – множество страниц, которые диспетчер отвел под процессы, но которые не учитываются в квоте памяти процесса до их использования;

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

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

При выполнении процесса (потока) ОС должна принимать 3 типа решений, связанных с планированием: долгосрочное, среднее и краткосрочное (рис.24). Долгосрочное определяет, когда новый процесс должен поступить в систему. Среднесрочное является частью свопинга и определяет, какой из готовых к выполнению процессов будет выполняться процессором следующим.

При краткосрочном планировании планировщик использует ряд критериев. Основные: время отклика системы (для пользователя) и степень использования процессора (для системы) [3]. Они противоречивы. Имеется ряд альтернативных критериев для выбора среди готовых к выполнению потоков.

1. Первым поступил – первым обслужен. Выбирается поток, ожидающий обслуживания дольше других.

2. Круговое планирование. Использует кванты времени для ограничения времени непрерывного выполнения потока (они выполняются циклически).

3. Выбор самого короткого потока. Выбирается поток с минимальным времени работы. Вытеснение потоков не применяется.

4. Наименьшее остающееся время. Выбирается поток с минимальным ожидаемым временем оставшейся работы. Поток может быть вытеснен.

Рис.24. Уровни планирования загрузки процессора

5. Наивысшее отношению отклика. Принимаемое решение опирается на оценку нормализованного времени оборота потока по состояниям.

6. Снижение приоритета. Определяет множество очередей и распределяет в них потоки, основываясь на истории выполнения и других критериях.

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

В Windows NT реализован планировщик с вытеснением и гибкой системой уровней приоритетов, включая круговое планирование на каждом уровне, а для уровней «переменных приоритетов» – динамическое изменение приоритета на основе текущей активности потоков. В Windows NT две группы (класса) приоритетов: реального времени и переменные, по 16 уровней в каждом (рис. 25). При появлении потока (в состоянии готов) с большим приоритетом, чем у выполняющегося потока, выполняющийся поток вытесняется и начинает выполняться поток с большим приоритетом.

Рис. 25 Приоритеты потоков в Windows

В классе РВ все потоки имеют ориентированные приоритеты от 16 до 31, которые никогда не изменяется. Все активные потоки с определенным уровнем приоритета располагаются в круговой очереди данного уровня. Приоритеты потоков в период исполнения остаются постоянными [3].

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

Начальный приоритет потока в классе переменных приоритетов определяется двумя величинами: базовым приоритетом процесса и базовым приоритетом потока (рис.26).

Одним из атрибутов процесса является его базовый приоритет, который может принимать значения от 0 до 15. Каждый объект потока, связанный с объектом процесса, имеет собственный базовый приоритет, который указывает базовый приоритет потока по отношению к приоритету процесса. Он может отличаться от базового приоритета процесса не более чем на 2 уровня в большую или меньшую сторону. Так, например, если базовый приоритет процесса равен 4, а базовый приоритет одного из его потоков равен -1, то начальный приоритет (при создании потока) этого потока равен 3.

|15 | | | | | |

|0 | | | | | |

| | | |Приоритет |Базовый |Динамический приоритет |

| | | |процесса |приоритет потока | |

Рис. 26 Пример отношения приоритетов в Windows NT

После активизации потока из класса переменных приоритетов его действительный приоритет (именуемый динамическим приоритетом потока) может колебаться в определенных пределах. Он не может упасть ниже наименьшего базового приоритета потока и не может подняться выше максимально возможного значения приоритета для данного класса, т.е. 15. В приведенном выше примере (рис.26) это диапазон приоритетов от 2 до 15.

2.6. Файловые системы Windows

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

Файловая система состоит из системы управления файлами и совокупности файлов на определенном виде носителя (CD, DVD, FDD, HDD, Flash и т.д.). Система управления файлами обеспечивает пользователям и приложениям возможность доступа к файлам, их сохранения и поддержку целостности их содержимого. Наиболее распространенным долговременным носителем информации в современных вычислительных системах является жесткий диск – «Винчестер». Этот термин применяется к любому герметичному диску с аэродинамической конструкцией считывающих магнитных головок.

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

Раздел (англ. partition) — часть долговременной памяти жёсткого диска, выделенная для удобства работы, и состоящая из смежных блоков. На других носителях информации выделение разделов или не предусмотрено, или (за редкими исключениями) не практикуется. Однако, существуют флеш-драйвы, память которых можно разбить на два раздела, причём один раздел можно защитить паролем, при этом система «увидит» составное устройство из двух флеш-карт (на самом деле любую флеш карту можно разбить на два и более разделов, однако драйвер в Windows отображает только первый из них; работа с ними возможна при подмене драйвера или при работе с другими ОС).

Выделение на одном жёстком диске нескольких разделов даёт следующие преимущества [1]:

• на одном физическом жёстком диске можно хранить информацию в разных файловых системах, или в одинаковых файловых системах, но с разным размером кластера (например, выгодно хранить файлы большого размера — например, видео — отдельно от маленьких, и задавать больший размер кластера для хранилища больших файлов);

• можно отделить информацию пользователя от файлов ОС;

• на одном жёстком диске можно установить несколько ОС;

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

Информация о размещении разделов на жёстком диске хранится в таблице разделов (англ. partition table), которая является частью главной загрузочной записи (MBR). MBR располагается в первом физическом секторе жёсткого диска.

Раздел может быть либо первичным (основным), либо дополнительным. В первом секторе каждого основного раздела находится загрузочный сектор (Boot Record), отвечающий за загрузку ОС с этого раздела. Информация о том, какой из основных разделов будет использован для загрузки операционной системы, тоже записана в главной загрузочной записи.

В MBR под таблицу разделов выделено 64 байта. Каждая запись занимает 16 байт. Всего на жестком диске может быть создано не более 4 разделов. Когда разрабатывалась структура MBR, это считалось достаточным. Однако, позднее был введён дополнительный раздел, структура которого (EBR) может поддерживать неограниченное число логических дисков (разделов).

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

Первичный раздел (англ. primary partition) обязательно должен быть на физическом диске. Этот раздел всегда содержит только одну файловую систему (рис.27). На физическом диске может быть до четырёх первичных разделов. Некоторые старые операционные системы - например, MS-DOS и ранние версии Windows - могли быть установлены только на первичный раздел.

Основная таблица разделов может содержать не более 4 первичных разделов, поэтому был изобретён Расширенный (дополнительный) раздел (англ. extended partition). Это первичный раздел, который не содержит собственной файловой системы, а содержит другие логические разделы.

| |Первичный раздел 1 |(Логический раздел 1): ФС |

|Физический |Расширенный раздел | Логический раздел 4: ФС |

|диск (HDD) |(Первичный раздел 2,Логический раздел 2): | Логический раздел 5: ФС |

| |Первичный раздел 3 |(Логический раздел 3): ФС |

Рис. 27. Пример разбиения жёсткого диска на разделы

Для работы с разделами используются следующие программы, которые обычно называют «дисковыми утилитами»:

• Acronis Disk Director;

• Paragon Partition Manager;

• fdisk - утилита, входящая в комплект ОС MS-DOS, позволяет создавать разделы FAT, удалять любые разделы и выбирать активный;

• fdisk, cfdisk и sfdisk — стандартные текстовые утилиты для работы с разделами диска под GNU/Linux;

• Disk Druid — утилита для работы с разделами диска под GNU/Linux с графическим пользовательским интерфейсом;

• GParted — GNOME Partition Editor (free, GUI);

• оснастка «Управление дисками», являющаяся частью консоли Windows NT/2000/XP (Windows Management Console), позволяет просматривать, создавать и удалять основные и логические разделы, изменить букву логического диска или отформатировать его под FAT32 или NTFS.

Файловые системы FAT. Существуют три файловые системы FAT: FAT12 (для гибких дисков FDD), FAT16, FAT32. Они различаются количеством бит (12, 16, 32) для указания номера кластера в системе управления файлами. В файловых системах FAT логическое дисковое пространство любого логического диска делится на системную область и область данных (рис. 28).

[pic]

Рис.28 Деление дискового пространства

BR – загрузочная запись Boot Record; RS – зарезервированные сектора; FAT1, FAT2 – таблицы 1 и 2 размещения файлов; RDir (Root directory, ROOT) – корневой каталог. Область данных разбивается на кластеры, которые представляют собой 1 или несколько смежных секторов. В таблице FAT кластеры, принадлежащие одному файлу, связываются по цепочке. Картой области данных является, по сути, Таблица размещения файлов (File Allocation Table - FAT) Каждый элемент таблицы FAT (12, 16 или 32 бит) соответствует одному кластеру диска и характеризует его состояние: свободен 00, занят ХХ, последний FF или является сбойным кластером (bad cluster) F7. Для указания номера кластера в системе управления файлами FAT16 используется 16-ти битовое слово, и можно адресовать 65536 кластеров.

Кластер – это минимально адресуемая единица дисковой памяти, выделяемая для файла. Файл или каталог занимает целое число кластеров [3]. Если файл имеет размер 8001 байт, а кластер равен 2 Кбайтам, то файл на диске займет 5 кластеров, причем в последнем будет записан только один байт. Разбиение области данных на кластеры вместо использования секторов позволяет: уменьшить размер таблицы FAT, уменьшить фрагментацию файлов, сокращается длина цепочек файла, ускоряется доступ к файлу.

Последний кластер может быть задействован не полностью, что приведет к заметной потере дискового пространства при большом размере кластера. На дискете кластер занимает 1 или 2 сектора. На жестком диске – 4, 8, 16, 32, 64 – сектора в одном кластере. Каждый элемент имеет следующую структуру (рис.29): имя файла, атрибут файла, резервное поле, время создания, дата создания, дата последнего доступа, резерв, дата последней модификации, время последней модификации, номер начального кластера Fat, размер файла. В данном примере файл с именем MyFile.txt размещается, начиная с 8-го кластера и занимает 12 кластеров. Цепочка кластеров для данного случая: 8,9,А,В,15,16,17,19,1А,1В,1C,1D. Кластер с номером 18 помечен кодом F7 как плохой. Он не может быть использован для размещения данных. Этот код выставляется утилитами форматирования и проверки дисков. Кластер 1D помечен кодом FF как конечный, принадлежащий данному файлу. Свободные кластеры помечены кодом 0.

[pic][pic]

Рис.29 Представление файла в FAT-системе

При выделении нового кластера для записи в файл берется 1-ый свободный кластер. Поскольку файлы на диске изменяются, удаляются, перемещаются, увеличиваются и уменьшаются, то данное правило размещения приводит к фрагментации, т.е. данные одного файла располагаются не в смежных кластерах, а порой очень удаленных друг от друга. Образовывается сложная цепочка. Это приводит к замедлению работы с файлами. Так как Fat используется при доступе к диску очень интенсивно, она загружается в оперативную память. Система Fat32 намного эффективнее расходует дисковое пространство, так как использует кластеры меньшего размера по сравнению с предыдущими версиями Fat. По сравнению с Fat16 это дает экономию 10-16%.

Элемент каталога в поле атрибут может хранить следующие значения: 1) архивный (устанавливается при изменении файла и снимается программой выполняющей резервное копирование файлов на другой носитель); 2) директория; 3) метка тома; 4) системный; 5) скрытый; 6) только для чтения.

Длинные имена в FAT32 обеспечиваются использованием нескольких элементов записи каталога: для одного файла (один элемент – одна запись для имени 8.3, и 24 записи для самого длинного имени, которое может содержать до 256 символов. Поэтому не рекомендуется использовать длинные имена.

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

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

NTFS поддерживает размеры кластеров от 512 байт до 64 Кбайт; 2 или 4 Кбайт диска отводятся под MFT-зону — пространство, которое может занимать, увеличиваясь в размере, главный служебный метафайл MFT. Запись данных в эту область невозможна. MFT-зона пуста, чтобы служебный файл (MFT) по возможности не фрагментировался при своем росте [3].

MFT (общая таблица файлов) - централизованный каталог всех остальных файлов диска, в том числе и себя самого. MFT поделен на записи фиксированного размера в 1 Кбайт, каждая запись соответствует какому-либо файлу. Первые 16 файлов носят служебный характер и недоступны операционной системе — они называются метафайлами, причем самый первый метафайл — сам MFT. Эти первые 16 элементов MFT — единственная часть диска, имеющая строго фиксированное положение. Копия этих же 16 записей хранится в середине тома для надежности, поскольку они очень важны. Остальные части MFT-файла могут располагаться в произвольных местах диска — восстановить его положение можно с помощью его самого, «зацепившись» за самую основу — за первый элемент MFT.

Каждый файл в NTFS представлен с помощью потоков, у него нет данных, а есть «потоки». Один из потоков — данные файла. Для одного файла можно определить несколько потоков данных.

Основные особенности NTFS:

• Работа на дисках большого объема происходит эффективно (намного эффективнее, чем в FAT);

• имеются средства для ограничения доступа к файлам и каталогам;

• разделы NTFS обеспечивают локальную безопасность как файлов, так и каталогов;

• введен механизм транзакций, при котором осуществляется журналирование файловых операций;

• существенное увеличение надежности;

• сняты многие ограничения на максимальное количество дисковых секторов и/или кластеров;

• имя файла в NTFS, в отличие от файловых систем FAT и HPFS, может содержать любые символы, включая полный набор национальных алфавитов, так как данные представлены в Unicode — 16-битном представлении, которое дает 65535 разных символов. Максимальная длина имени файла в NTFS — 255 символов.

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

Каталог в NTFS представляет собой специальный файл, хранящий ссылки на другие файлы и каталоги.

NTFS обеспечивает безопасность на уровне файлов; это означает, что права доступа к томам, каталогам и файлам могут зависеть от учетной записи пользователя и тех групп, к которым он принадлежит. Каждый раз, когда пользователь обращается к объекту файловой системы, его права доступа проверяются по списку разрешений данного объекта. Если пользователь обладает достаточным уровнем прав, его запрос удовлетворяется; в противном случае запрос отклоняется. Эта модель безопасности применяется как при локальной регистрации пользователей на компьютерах с NT, так и при удаленных сетевых запросах.

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

Основной недостаток файловой системы  NTFS - служебные данные занимают много места (например, каждый элемент каталога занимает 2 Кбайт) - для малых разделов служебные данные могут занимать до 25% объема носителя.

RAID массивы. Повышение эффективности системы ввода-вывода может, достигается параллельным использованием нескольких устройств. В случае с дисками – использование массивов независимо для параллельной работы дисков. То есть различные запросы I/O могут обрабатываться одновременно. Raid – избыточный массив независимых дисков, его схема состоит из 7 уровней, которые не имеют иерархической структуры. Raid – набор физических дисков, рассматриваемых ОС, как один. Данные распределяются по физическим дискам массива. Избыточная емкость дисков используется для хранения контрольной информации, гарантирующей восстановление данных в случае отказа одного из дисков. Сравнительная характеристика уровней RAID [3], показаны в табл. 6.

Raid 0 – не является RAID блоком, не использует избыточность. Данные распространяются системные данные по всем дискам. Эффективность зависит от способа размещения. Приложения с высокими требованиями к передаче данных удовлетворяют условиям: на протяжении передачи между памятью и дисками должна быть большая пропускная способность, создание запросов ввода-вывода, которые бы эффективно управлялись дисковым массивом. Дисковый массив может обеспечивать высокую скорость работы i/o путем выравнивания загрузки нескольких дисков.

Raid 1 – отличается способом достижения избыточности. Достигается дублирование всех данных. Запросы на чтение могут быть обслужены любыми из дисков, содержащих данные, выбирается диск с минимальным временем поиска. Для запросов на запись необходимо обновление полос. Скорость записи определяется более медленной из них. Простота восстановления данных. Raid 3 аналогичен с 2 – требуется резервный диск. Высокая скорость передачи данных. 1 запрос выполняется 1 раз. Raid 4 – используется технология независимого доступа. В массиве каждый диск функционирует независимо. Запросы выполняются независимо. Каждая операция записи должна обновлять информацию на диске четности. Raid 5 - располагает полосы четности по всем дискам. Raid 6 – выполняет 2 расчета четности, результаты хранятся в разных блоках на разных дисках (для n дисков n+2). Схема обеспечивает высокую надежность хранения данных.

Уровни RAID Таблица 6

|Уровень |Категория |Описание |Скорость обработки|Скорость |Типичное |

| | | |запросов |передачи данных |применение |

|0 |Расщепление |Все избыточности |Большие полосы: |Малые полосы: |ПО с некритическими данными, требующие|

| | | |отлично |отлично |высокой производительности |

|1 |Отражение |Отражение |Хорошо/удовл. |Удовл./ |Системные диски, важные файлы |

| | | | |удовл. | |

|2 |Параллельный доступ |Избыточность с кодами Хэмминга |Плохо |Отлично | |

|3 |Независимый доступ |Четность с чередующимися битами |Плохо |Отлично |ПО с большими запросами I/O |

|4 | |Четность с чередующимися блоками |Отлично/ |Удовл./ плохо | |

| | | |удовл. | | |

|5 | |Распределенная четность с |Отлично/ |Удовл./ |Высокая скорость запросов, скорость |

| | |чередующимися блоками |удовл. |плохо |данных, интенсивное чтение |

|6 | |Двойная распределенная четность с|Отлично/ |Удовл./ |ПО, требующие исключительно высокой |

| | |чередующимися блоками |Плохо |плохо |надежности |

Ввод-вывод в Windows. Внешние устройства, обеспечивающие операции ввода-вывода, можно разделить на:

1) работающие с пользователем: используются для связи пользователя с компьютером (мышь, терминал, клавиатура);

2) работающие с компьютером: используются для связи с электрическим оборудованием. Это дисковые устройства, датчики и контроллеры;

3) коммуникации: используются для связи с удаленными устройствами (модемы и драйверы цифровых линий).

Операции ввода-вывода могут осуществляться тремя способами [3]:

1) программируемый ввод-вывод. Процессор посылает необходимые команды контроллеру ввода-вывода, после этого процесс находится в состоянии ожидания, завершающем операцию ввода-вывода;

2) ввод-вывод, управляемый прерыванием. Процессор посылает необходимые команды контроллеру ввода-вывода и продолжает выполнение следующих команд. Выполнение процесса прерывается контроллером ввода-вывода, когда последний выполнит свое задание;

3) прямой доступ к памяти (ПДП): модуль ПДП управляет обменом данных между основной памятью и контроллером ввода-вывода. Процессор посылает запрос на передачу блока данных модулю ПДП, а прерывание происходит только после передачи всего блока данных.

В Windows диспетчер ввода-вывода отвечает за весь ввод-вывод ОС и обеспечивает однородный интерфейс, который может быть вызван драйвером любого типа. Он обеспечивает управление: диспетчером КЭШа, драйверами ФС, драйверами сети и драйверами аппаратных устройств.

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

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

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

Диспетчер ввода-вывода рассматривает драйвер ФС, как обычный драйвер устройства и направляет сообщения для томов, соответствующих программе-драйверу адаптера этого устройства.

Драйверы сети Windows включают интегрированные сетевые возможности и поддержку распределенных приложений.

Драйверы аппаратных устройств. Эти драйверы обращаются к регистрам ПУ через точки входа в динамически компонуемых библиотеках исполнительной системы Windows.

Windows предоставляет два режима выполнения операции ввода-вывода: синхронный и асинхронный. При асинхронном вводе-выводе приложение инициирует операцию ввода-вывода, а затем может продолжить свою работу во время выполнения этого запроса. При синхронном вводе-выводе приложение блокируется до завершения выполнения операции ввода-вывода.

2.7. Установка и последовательность загрузки Windows

Установка Windows XP. Существует два способа установки Windows XP: на раздел с Windows более ранних версий (более простой) и на пустой дисковый раздел (более стабильный в работе).

Шаг первый. Рассмотрим установку Windows XP на новый компьютер с пустым разделом [10]. После включения компьютера и установки инсталляционного диска с ОС в CD- или DVD-ROM необходимо и зайти в BIOS (setup), нажав кнопку “DEL” (в процессе начальной загрузки компьютера), для изменения опций загрузки компьютера (параметр «загрузка с компакт-диска»).

На рис. 30 показано меню BIOS, где для изменения параметров необходимо выбрать вкладку Advanced – Advanced BIOS Features. Все настройки BIOS всегда стоят по умолчанию, поэтому их изменять не нужно. Необходимо изменить только одну строку во вкладке Advanced – First Boot Device. Выберите в столбце справа, в этой же строке, [CD-ROM]. Затем нужно выйти из BIOS, нажав клавишу F10. В сплывающем окне система попросит, подтвердить сохранение изменений перед выходом из меню. После нажатия клавиши «Y» компьютер перезагрузится и, согласно изменениям, начнет загрузку с компакт-диска.

Рис. 30. Меню BIOS и вкладка Advanced

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

Шаг второй. После перезагрузки необходимо ввести серийный номер – Serial Number. Он должен быть указан на коробке с диском. После этого, появится диалоговое окно с выбором установки. Здесь тоже все по умолчанию, поэтому нажимаем «Далее» (“Next”). Теперь на экране появится окно с параметрами установки рис.31.

Рис. 31. Окно с параметрами установки

Настройка параметры языка определяет основной и дополнительные языки. Кнопка дополнительные параметры открывает окно настроек, в котором будет два поля. Первое содержит путь и имя папки с файлами для установки Windows XP (значение этого поля должно стоять по умолчанию с компакт-диска). Во втором поле указывается папка, в которую будет установлена система (тоже по умолчанию, но если необходимо здесь можно переименовать папку). Специальные возможности на установку не влияют. В следующем окне нужно указать свои персональные данные: Имя (“Name”) и Организация (“Company”). Поле Имя заполняется в обязательном порядке, а Организацию указывать необязательно.

В следующем диалоговом окне можно выбрать место своего проживания (“Location”). От этого зависят форма записи даты, времени, изображение некоторых значков (например, значок валюты), а также многие значения, которые в соответствии со страной проживания, устанавливаются по умолчанию (например, язык). Большинство программ, написанных под Windows XP, подстраиваются под параметры, указанные при установке, для более удобной работы. Далее установка Windows XP продолжается в автоматическом режиме. В зависимости от скорости работы ПК установка занимает 20-50 минут (рис.32).

Рис. 32 Установка Windows

В течение этого времени еще несколько раз появится окно, сообщающее о необходимой перезагрузке компьютера. Не обязательно все это время ждать перед монитором - компьютер сам перезагрузится через 15 секунд, а после перезагрузки сам продолжит установку.

Шаг третий. После установки Windows XP и очередной перезагрузки компьютера установочная программа произведет автоматическую настройку системы в зависимости от особенностей оборудования вашего ПК. Она сама определит его состав и установит необходимые драйверы. На протяжении всего этого процесса, на экране будут высвечиваться соответствующие диалоговые окна, сообщающие о действиях программы. После завершения этого этапа компьютер снова будет перезагружен (либо автоматически через 15 сек, либо после того, как вы нажмете любую клавишу). Осталось только установить пакет всех необходимых вам программ. А сама операционная система Windows XP установлена и готова к использованию.

Последовательность загрузки Windows XP

После того как компьютер включен, процессор начинает выполнять инструкции BIOS. BIOS стартует компьютер, даже если операционная система не установлена. Первый набор инструкций - power-on self test (POST). POST выполняет следующие функции [11]:

1) выполняет начальную проверку оборудования, например, определяет количество установленой RAM,

2) проверяет наличие устройств для начала загрузки ОС, например жесткого диска,

3) получает установки системной конфигурации из CMOS.

После того как POST закончен, дополнительные адаптеры (видео карта, контроллеры жесткого диска) выполняют свой тест внутренней диагностики.

Затем BIOS загружает код загрузчика (который должен быть написан на ассемблере), передавая ему управление. Код загрузчика находится в master boot record (MBR), если конечно загрузчик существует, если нет, то BIOS выдаст Operating system not installed, т.е. Операционная система не установлена. MBR - это самый первый сектор жесткого диска. Код загрузчика содержит информацию, откуда загружать ОС.

После этого начинает загружаться Windows, выполняя следующие шаги:

1) Ntldr (сокращение от NT loader) загружает загрузочные файлы с загрузочного раздела и переводит процессор в 32 битный режим плоской памяти (32-bit flat memory) и загружает файловую систему

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

3) Ntldr стартует ядро (Ntoskrnl.exe) и говорит ему что установлено, т.е. инфо об установленном оборудовании от . Ntldr также загружает hardware abstraction layer (HAL) в память. Ядро и HAL инициализируют Windows executive, который просто напросто читает конфигурацию оборудования из регистра (ключ HKEY_LOCAL_MACHINE\SYSTEM) и запускает сервисы и драйверы. Надо отметить, что драйверы это тоже сервисы

4) Ядро запускает Session Manager (Smss.exe), который:

• переключает Windows из текстового режима в графический;

• запускает менеджер входа в систему Logon Manager (systemroot\System32\Winlogon.exe);

• создает дополнительные файлы виртуальной памяти;

• и если установлены новые программы и/или драйверы, то спросит перезагрузить систему.

5) менеджер входа в систему Logon Manager (Winlogon.exe) запускает подсистему сервисов (Services.exe) и локальную систему безопасности (Local Security Authority, Lsass.exe) и на последок делает возможным комбинацию клавиш CTRL+ALT+DEL, чтобы показать экран регистрации пользователя.

6) после успешной регистрации пользователя считываются настройки пользователя из реестра (ключ HKEY_USERS) и запускает приложения автозагрузки из меню Пуск\Программы\Автозагрузка (Common Startup) и из ветки реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run.

Загрузка окончена.

2.8. Интерпретатор команд и пакетные файлы

В Windows используется два интерпретатора команд (рис.30) и cmd.exe (рис.31), которые можно запустить через меню «Пуск» (Пуск-> Выполнить-> cmd -> ОК или Пуск-> Выполнить-> commad -> ОК). На рис. 33 показана возможность использования справки по командам DOS/Windows. Справка становится доступной при наборе команды help в командной строке.

Рис.33 Интерпретатор команд

На рис. 34 показана возможность создания нового файла с использованием команды copy con имя_файла.расширение.

Рис.34. Интерпретатор команд cmd.exe

Использование пакетных файлов (*.cmd или *.bat) помогает автоматизировать выполнение нескольких заданий при установке и загрузке Windows [12]. При этом никакого вмешательства пользователя не требуется. Эти файлы могут быть выполнены из cmdlines.txt, svcpack.inf, RunOnceEx раздела в реестре, или из секции [GuiRunOnce] в файле winnt.sif.

Пакетные файлы поддерживают все команды, которые могут быть выполнены из командной строки. Чтобы увидеть командую строку достаточно проделать следующее: Пуск->Выполнить->cmd->ОК

Рассмотрим простейший пакетный файл. Для этого необходимо открыть Блокнот и набрать в нем следующий текст:

TITLE Batch File Testing

ECHO Hello World

ECHO.

ECHO Starting Notepad

START notepad

ECHO.

ECHO Starting Wordpad

START Wordpad

ECHO.

PAUSE

EXIT

Затем нужно сохранить файл с любым именем и в любом месте, но с расширением *.cmd (а не .txt, которое Блокнот присвоит по умолчанию). При запуске этого файла он назначит окну имя "Batch File Testing", запустит Блокнот и WordPad, попросит нажать любую клавишу для продолжения работы и закроет окно.

Значения команд, использованных в командном файле Таблица 7

|@echo off |Скрывает строку C:\> и все команды, используемые в пакетном файле |

|echo. |Создает пробел между строками |

|echo message |Отображает сообщение в окне, исключительно с информационными целями |

|Title |Название окна |

|Start |Запускает приложение или установочный процесс |

|Pause |Отображает сообщение "Press any key to continue..." ("Нажмите любую клавишу для продолжения...") |

|Exit |Закрывает командную строку |

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

start /wait %systemdrive%\install\some_application\setup.exe /ключ /еще ключ,

start запустит установку приложения, а /wait дождется ее окончания перед тем, как выполнить установку следующего приложения. Использование /wait очень важно, т.к. в противном случае одновременно запустится установка сразу нескольких приложений и конфликты неизбежны.

Пакетные файлы могут быть запущены из cmdlines.txt или svcpack.inf, которые будут исполнены на Т-13/Т-12 этапе установки Windows (Т-13 означает 13 минут до окончания установки).cmdlines.txt удобен для таких задач как Добавление Пользователей, или для импортирования заранее подготовленных ключей реестра HKEY_CURRENT_USER в профиль по умолчанию (Default Profile).

Метод svcpack.inf, как правило, используется для установки обновлений (хотфиксов). Однако ничто не мешает рассматривать пакетный файл как еще один хотфикс.

Пример пакетного файла, запущенного из [GuiRunOnce] (скриншот).

Как вы видите, здесь используется комбинация ECHO и ECHO Message. Делать это не обязательно, но рекомендуется, т.к. дает возможность видеть, как происходит процесс инсталляции приложений в реальном времени. [GuiRunOnce] запускается при первом входе в систему.

Пример содержимого пакетного файла:

@echo off

TITLE Windows XP SP2 - Unattended Installation

ECHO.

ECHO Over the next few minutes you will see automated installations

ECHO of various sofware applications, and registry tweaks being

ECHO implemented.

ECHO.

ECHO Removing Wallpapers and Screensavers...

DEL "%systemroot%\*.bmp"

DEL "%systemroot%\Web\Wallpaper\*.jpg"

DEL "%systemroot%\system32\dllcache\*.scr"

DEL "%systemroot%\system32\*.scr"

ECHO.

ECHO Removing useless shortcuts...

DEL "%systemdrive%\Documents and Settings\All Users\Start Menu\Windows

Update.lnk"

DEL "%systemdrive%\Documents and Settings\All Users\Start Menu\Set

Program Access and Defaults.lnk"

DEL "%systemdrive%\Documents and Settings\All Users\Start Menu\Windows

Catalog.lnk"

ECHO.

ECHO Installing TweakUI 2.10 Powertoy

ECHO Please wait...

start /wait %systemdrive%\Install\TweakUI.msi /qn

ECHO.

ECHO Applying Registry Tweaks...

REGEDIT /S %systemdrive%\Install\RegTweaks.reg

ECHO.

ECHO Deleting User Account created by .NET Framework 1.1...

net user aspnet /delete

ECHO.

EXIT

Он производит удаление обоев и скринсэйверов, устанавливаемых по умолчанию системой, а также некоторых ярлыков. Затем устанавливает TweakUI, импортирует ключи реестра и удаляет учетную запись , созданную при установке .NET Framework.

Вызов внешних командных файлов:

1. После выполнения вызванного файла управление не передается в вызывающий файл.

@ECHO OFF

CLS

REM Вывод списка log-файлов

DIR C:\*.log

REM Передача выполнения файлу f.bat

f.bat

COPY A:\*.* C:\

PAUSE

2. После выполнения вызванного файла управление передается в вызывающий файл:

@ECHO OFF

CLS

REM Вывод списка log-файлов

DIR C:\*.log

REM Передача выполнения файлу f.bat

CALL f.bat

COPY A:\*.* C:\

PAUSE

Файл cmdlines.txt нужно положить в директорию $OEM$, и Windows автоматически найдет его во время установки. Все пакетные файлы, запускаемые из cmdlines.txt, должны находиться в той же директории, что и cmdlines.txt.

Файл svcpack.inf сохраняется в директории I386 на инсталляционном диске ( необходимо удалить оттуда svcpack.in_ ). Все пакетные файлы, запускаемые из svcpack.inf, должны находиться в директории I386\svcpack, если только это не прописано иначе в самом файле.

В пакетных файлах широко используются команды передачи управления IF, FOR, SHIFT, а также параметры, передаваемые из командной строки и операторы перенаправления ввода-вывода >, >>, cycles_per_sec;

// частота процессора:

return (double)ccl * s2m / (double)cps;

};

struct mbyte {

#pragma pack( 1 )

uint8_t data[ 1024 * 1024 ];

#pragma pack( 4 )

};

int main( int argc, char *argv[] ) {

mbyte *blk = NULL;

if( argc > 1 && atoi( argv[ 1 ] ) > 0 ) {

blk = new mbyte[ atoi( argv[ 1 ] ) ];

};

uint64_t t = ClockCycles();

pid_t pid = fork();

if( pid == -1 ) { perror( "fork" ); exit( EXIT_FAILURE );}

if( pid == 0 ) exit( EXIT_SUCCESS );

if( pid > 0 ) {

waitpid( pid, NULL, WEXITED );

t = ClockCycles() - t;

};

if( blk != NULL ) delete blk;

cout ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download