- •Введение
- •1. Основные понятия в операционных системах
- •1.1. Классификация и функции операционных систем
- •1.2. Ос общего назначения и реального времени
- •1.3. Выполнение команд в вычислительной системе
- •1.4. Прерывания
- •1.5 Архитектуры операционных систем
- •1.6. Управление оперативной памятью вычислительной системы
- •1.7. Общие сведения о процессах и потоках
- •2. Операционная система windows
- •2.1. Версии операционной системы Windows
- •2.2. Архитектура операционной системы windows
- •2.3. Процессы и потоки в Windows
- •2.4. Взаимодействие процессов
- •2.5. Управление потоками в Windows
- •2.6. Файловые системы Windows
- •2.7. Установка и последовательность загрузки Windows
- •Последовательность загрузки Windows xp
- •2.8. Интерпретатор команд и пакетные файлы
- •2.9. Конфигурирование Windows
- •3. Операционная система qnx neutrino
- •3.1. Версии операционной системы qnx Neutrino
- •3.2. Архитектура операционной системы qnx Neutrino
- •3.3. Процессы в qnx6
- •Завершение процесса
- •3.4. Потоки в qnx6
- •Завершение потока
- •3.5. Управление потоками и процессами в qnx6
- •Механизмы ipc
- •Средства синхронизации в qnx
- •3.6. Файловые системы qnx
- •Типы файлов
- •3.7. Инсталляция и последовательность загрузки qnx
- •3.8. Интерпретаторы команд и пакетные файлы в qnx
- •3.9. Конфигурирование qnx
- •4. Виртуальные машины
- •4.1. Общие сведения о виртуальных машинах
- •4.2. Работа с виртуальной машиной VmWare
- •5. Защита от сбоев и несанкционированного доступа
- •5.1. Принципы построения систем безопасности
- •5.2. Безопасность операционной системы windows
- •6. Сетевые возможности операционных систем
- •6.1. Аппратаное обеспечение локальных сетей
- •6.2. Сети Windows
- •6.3. Локальная сеть на основе qnet
- •6.4. Глобальные сети
- •7. Многопроцессорные системы
- •7.1. Архитектуры многопроцессорных операционных систем
- •7.2. Принципы функционирования smp
- •7.3. Принципы функционирования кластеров
- •Список использованной литературы
- •Компилятор
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 |
Память Регистры процессора
300
PC 301
AC
302
IR …
940 941
…
Шаг 4 |
Память Регистры процессора
…
Шаг 5 |
Память Регистры процессора
…
Шаг 6 |
Рис.8. Пример выполнения трех двухбайтных одноадресных команд
Выполнение программы на рис.8 осуществляется следующим образом:
Адрес первой команды (300) хранится в программном счетчике PC. Эта команда (она представлена шестнадцатеричным числом 1940) загружается в регистр команд (IR), а показание программного счетчика увеличивается на 1. Следует отметить, что в этом процессе участвуют регистры адреса и буфера памяти, однако для упрощения они игнорируются.
Значние первых 4 бит (первая шестнадцатеричная цифра) регистра команд указывают на то, что нужно загрузить значение в аккумулятор. Остальные 12 бит ( три шестнадцатеричные цифры) указывают адрес 940 откуда загрузить данные.
Из ячейки 301 извлекается следующая команда (5941), после чего значение программного счетчика увеличивается на 1.
К содержимому аккумулятора прибавляется содержимое ячейки 941, и результат снова заносится в аккумулятор.
Из ячейки 302 извлекается следующая команда (2941), затем значение программного счетчика увеличивается на 1.
Содержимое аккумулятора заносится в ячейку 941.
Этот пример показывает, что для сложения содержимого ячеек 940 и 941 необходимы три цикла команд. При более сложном наборе команд циклов понадобилось бы меньше. Современные процессоры выполняют команды, в состав которых может входить несколько адресов. При этом во время цикла исполнения некоторых команд иногда выполняется несколько обращений к памяти. Вместо обращений к памяти в команде может быть задана операция ввода-вывода.