Лекция 1
ОПЕРАЦИОННЫЕ СИСТЕМЫ. ИСТОРИЯ РАЗВИТИЯ
НАЗНАЧЕНИЕ. СТРУКТУРА ОПЕРАЦИОННЫХ СИСТЕМ
1.1 История ОС
1.2 Назначение ОС
1.3 Интерфейс прикладного программирования (API)
1.4 Структура операционных систем
1.1 История ОС
Первые (1945 – 1955) компьютеры работали без операционных систем, как правило, на них работала одна программа. Когда скорость выполнения программ и их количество стало увеличиваться, простои компьютера между запусками программ стали составлять значительное время. Появились первые системы пакетной обработки (1955 – 1965), которые просто автоматизировали запуск одной программ за другой и тем самым увеличивали коэффициент загрузки процессора. Системы пакетной обработки явились прообразом современных операционных систем. Совокупность нескольких заданий, как правило, в виде колоды перфокарт, получила название пакета заданий.
Многозадачность (1965 – 1980) – это способ организации вычислительного процесса, при котором на одном процессоре попеременно выполняются несколько задач. Пока одна задача выполняет операцию ввода-вывода, процессор не простаивает, как это происходило при последовательном выполнении задач, а выполняет другую задачу. Для этого создали систему распределения памяти, когда каждая задача загружается в свой участок оперативной памяти, называемый разделом.
Спулинг (spooling-подкачка) в то время задания считывались с перфокарт на диск в том темпе, в котором они появлялись в помещении вычислительного центра, а затем, когда очередное задание завершалось, новое задание с диска загружалось в освободившийся раздел.
Системы разделения времени – вариант многозадачности, при котором у каждого пользователя есть свой диалоговый терминал. Это было сделано, чтобы каждый программист мог отлаживать свою программу в реальном времени. Фактически это была многопользовательская система. Естественно стали возникать проблемы защиты задач друг от друга.
В это время была разработана многопользовательская система MULTICS, которая должна была обеспечивать одновременную работу сотни пользователей.
В это время также стали бурно развиваться мини-компьютеры (первый был выпущен в 1961г.), на которые была перенесена система MULTICS. Эта работа в дальнейшем развилась в систему UNIX.
Появилось много разновидностей несовместимых UNIX, основные из них были System V и BSD. Чтобы было возможно писать программы, работающие в любой системе UNIX, был разработан стандарт POSIX. Стандарт POSIX определяет минимальный интерфейс системного вызова, который должны поддерживать системы UNUX.
В 1974г. был выпущен центральный процессор Intel 8080, для него была создана операционная система CP/M. В 1977г. она была переработана для других процессоров, например Zilog Z80.
В начале 80-х была разработана система MS-DOS, и стала основной системой для микрокомпьютеров.
В 80-х годах стало возможным реализовать графический интерфейс пользователя (GUI – Graphical User Interface), теория которого была разработана еще в 60-е годы. Первой реализовала GUI корпорация Macintosh.
С 1985 года стала выпускаться Windows, в то время она была графической оболочкой к MS-DOS вплоть до 1995г., когда вышла Windows 95. Уже тогда было ясно, что DOS с ее ограничениями по памяти и по возможностям файловой системы не может воспользоваться вычислительной мощностью появляющихся компьютеров. Поэтому IBM и Microsoft начинали совместно разрабатывать операционную систему OS/2. Она должна была поддерживать вытесняющую многозадачность, виртуальную память, графический пользовательский интерфейс, виртуальную машину для выполнения DOS-приложений. Первая версия вышла 1987г.
В дальнейшем Microsoft отошла от разработки OS/2, и стала разрабатывать Windows NT. Первая версия вышла в 1993г.
В середине 80-х стали бурно развиваться сети персональных компьютеров, работающие под управлением сетевых или распределенных операционных систем.
Сетевая операционная система не имеет отличий от операционной системы однопроцессорного компьютера. Она обязательно содержит программную поддержку для сетевых интерфейсных устройств (драйвер сетевого адаптера), а также средства для удаленного входа в другие компьютеры сети и средства доступа к удаленным файлам.
Распределенная операционная система, напротив, представляется пользователям простой системой, в которой пользователь не должен беспокоиться о том, где работают его программы или где расположены файлы, все это должно автоматически обрабатываться самой операционной системой.
В 1987г. была выпущена операционная система MINIX (прототип LINUX), она была построена на схеме микро ядра.
В 1991г. была выпущена LINUX, в отличии от микроядерной MINIX она стала монолитной.
Чуть позже вышла FreeBSD (основой для нее послужила BSD UNIX).
1.2 Назначение ОС
Операционная система, сокр. ОС (англ. operating system, OS) – комплекс управляющих и обрабатывающих программ, которые, с одной стороны, выступают как интерфейс между устройствами вычислительной системы и прикладными программами, а с другой стороны – предназначены для управления устройствами, управления вычислительными процессами, эффективного распределения вычислительных ресурсов между вычислительными процессами и организации надёжных вычислений. Это определение применимо к большинству современных операционных систем общего назначения.
В логической структуре типичной вычислительной системы операционная система занимает положение между устройствами с их микроархитектурой, машинным языком и, возможно, собственными (встроенными) микропрограммами – с одной стороны – и прикладными программами с другой.
Разработчикам программного обеспечения операционных систем позволяет абстрагироваться от деталей реализации и функционирования устройств, предоставляя минимально необходимый набор функций (см. интерфейс программирования приложений).
В большинстве вычислительных систем операционная система является основной, наиболее важной (а иногда и единственной) частью системного программного обеспечения. С 1990-х годов наиболее распространёнными операционными системами являются системы семейства Microsoft Windows и системы класса UNIX (особенно Linux и Mac OS).
1.2.1 ОС как виртуальная машина
ОС предоставляет пользователю виртуальную машину, которую легче программировать и с которой легче работать, чем непосредственно с аппаратурой, составляющей реальную машину.
Например, чтобы считать или записать информацию на дискету, надо:
- Запустить двигатель вращения дискеты
- Управлять шаговым двигателем перемещения головки
- Следить за индикатором присутствия дискеты
- Выбрать номер блока на диске
- Выбрать дорожку
- Выбрать номер сектора на дорожке
- и. т.д.
Все эти функции берет на себя операционная система.
1.2.2 ОС как система управления ресурсами
Чтобы несколько программ могло работать с одним ресурсом (процессор, память), необходима система управления ресурсами.
Способы распределения ресурса:
- Временной – когда программы используют его по очереди, например, так система управляет процессором.
- Пространственный – программа получает часть ресурса, например, так система управляет оперативной памятью и жестким диском.
1.3 Интерфейс прикладного программирования (API)
API (Application Programming Interface) – интерфейс прикладного программирования.
Интерфейс между операционной системой и программами определяется набором системных вызовов.
Например, если пользовательскому процессу необходимо считать данные из файла, он должен выполнить команду системного вызова, т. е. выполнить прерывание с переключением в режим ядра и активизировать функцию операционной системы для считывания данных из файла.
В POSIX существует более 100 системных вызовов, например:
open – открывает файл
close – закрывает файл
read – читает данные из файла в буфер
write – пишет данные из буфера в файл
mkdir – создает новый каталог
rmdir – удаляет каталог
link – создает ссылку
mount – монтирует файловую систему
umount – демонтирует файловую систему
chdir – изменяет рабочий каталог
В UNIX вызовы почти один к одному идентичны библиотечным процедурам, которые используются для обращения к системным вызовам.
Рассмотрим интерфейс прикладного программирования для Windows – Win32 API. Win32 API отделен от системных вызовов. Это позволяет в разных версиях менять системные вызовы, не переписывая программы.
Поэтому непонятно является ли вызов системным (выполняется ядром), или он обрабатывается в пространстве пользователя.
В Win32 API существует более 1000 вызовов. Такое количество связано и с тем, что графический интерфейс пользователя UNIX запускается в пользовательском режиме, а в Windows встроен в ядро. Поэтому Win32 API имеет много вызовов для управления окнами, текстом, шрифтами т. д.
Рассмотрим вызовы Win32 API, которые подобны вызовам стандарта POSIX.
CreatFile (open) – открывает файл
CloseHandle (close) – закрывает файл
ReadFile (read) – читает данные из файла в буфер
WriteFile (write) – пишет данные из буфера в файл
CreatDirectory (mkdir) – создает новый каталог
RemoveDirectory (rmdir) – удаляет каталог
SetCurrentDirectory (chdir) – изменяет рабочий каталог
Рассмотрим интерфейс прикладного программирования для Windows – Win32 API. Win32 API отделен от системных вызовов. Это позволяет в разных версиях менять системные вызовы, не переписывая программы.
Поэтому непонятно является ли вызов системным (выполняется ядром), или он обрабатывается в пространстве пользователя.
В Win32 API существует более 1000 вызовов. Такое количество связано и с тем, что графический интерфейс пользователя UNIX запускается в пользовательском режиме, а в Windows встроен в ядро. Поэтому Win32 API имеет много вызовов для управления окнами, текстом, шрифтами т. д.
Рассмотрим вызовы Win32 API, которые подобны вызовам стандарта POSIX.
ExitProcess (exit) – завершение процесса
CreatFile (open) – открывает файл
CloseHandle (close) – закрывает файл
ReadFile (read) – читает данные из файла в буфер
WriteFile (write) – пишет данные из буфера в файл
CreatDirectory (mkdir) – создает новый каталог
RemoveDirectory (rmdir) – удаляет каталог
SetCurrentDirectory (chdir) – изменяет рабочий каталог

Рисунок 1.1 – Интерфейс Win32 API позволяет программам работать почти на всех версиях Windows
1.4 Структура операционных систем
1.4.1 Монолитная система
Структура системы:
1.Главная программа, которая вызывает требуемые сервисные процедуры.
2.Набор сервисных процедур, реализующих системные вызовы.
3.Набор утилит, обслуживающих сервисные процедуры.

Рисунок 1.2 – Простая модель монолитной системы
В этой модели для каждого системного вызова имеется одна сервисная процедура (например, читать из файла). Утилиты выполняют функции, которые нужны нескольким сервисным процедурам (например, для чтения и записи файла необходима утилита работы с диском).
Этапы обработки вызова:
- Принимается вызов
- Выполняется переход из режима пользователя в режим ядра
- ОС проверяет параметры вызова для того, чтобы определить, какой системный вызов должен быть выполнен
- После этого ОС обращается к таблице, содержащей ссылки на процедуры, и вызывает соответствующую процедуру.
1.4.2 Многоуровневая структура ОС
Обобщением предыдущего подхода является организация ОС как иерархии уровней. Уровни образуются группами функций операционной системы – файловая система, управление процессами и устройствами и т. п. Каждый уровень может взаимодействовать только со своим непосредственным соседом – выше - или нижележащим уровнем. Прикладные программы или модули самой операционной системы передают запросы вверх и вниз по этим уровням.
Уровни | Функции | ||||
1 | Обработчик системных вызовов | ||||
2 | Файловая система 1 | ... | Файловая система n | ||
3 | Виртуальная память | ||||
4 | Драйвер 1 | Драйвер 1 | ... | ... | Драйвер n |
5 | Управление потоками | ||||
6 | Обработка прерываний, управление памятью | ||||
7 | Сокрытие низкоуровневой аппаратуры | ||||
Рисунок 1.3 – Пример структуры многоуровневой системы
Преимущества:
- Высокая производительность.
Недостатки:
- Большой код ядра, и как следствие большое содержание ошибок;
- Ядро плохо защищено от вспомогательных процессов.
Пример реализации многоуровневой модели Windows

Рисунок 1.4 – Структура Windows 2k (2000)
1.4.3 Модель экзоядра
Если предыдущие модели брали на себя максимум функций, принцип экзоядра – все отдать пользовательским программам. Например, зачем нужна файловая система? Почему не позволить пользователю просто читать и писать участки диска защищенным образом? Т. е. каждая пользовательская программа сможет иметь свою файловую систему. Такая операционная система должна обеспечить безопасное распределение ресурсов среди соревнующихся за них пользователей.
1.4.4 Микроядерная архитектура (модель клиент-сервер)
Эта модель является средним между двумя предыдущими моделями.
В развитии современных операционных систем наблюдается тенденция в сторону дальнейшего переноса задач из ядра в уровень пользовательских процессов, оставляя минимальное микроядро.
В этой модели вводятся два понятия:
1. Серверный процесс (который обрабатывает запросы);
2. Клиентский процесс (который посылает запросы).
В задачу ядра входит только управление связью между клиентами и серверами.

Рисунок 1.5 – Модель клиент-сервер
Преимущества:
- Малый код ядра и отдельных подсистем, и как следствие меньшее содержание ошибок.
- Ядро лучше защищено от вспомогательных процессов.
- Легко адаптируется к использованию в распределенной системе.
Недостатки:
- Уменьшение производительности.
Использованная литература
1. Э. Таненбаум. Современные операционные системы. – СПб. : ПИТЕР, 2010, 1120 с. ISBN -306-4, 33.
2. Гордеев, системы : учебник для студентов вузов по специальности "Информатика и вычислительная техника" / . - 2-е изд. - СПб. : Питер, 20с. : ил. - (Учебник для вузов. Гр.). - ISBN -632-3.
3. Олифер, операционные системы : учеб. пособие для вузов / , . - 2-е изд. - СПб. : Питер, 20с. : ил. - (Учебник для вузов. Гр.). - ISBN -528-9.
Лекция 2
ПРОЦЕССЫ И ПОТОКИ (НИТИ)
2.1 Процессы
2.2 Потоки (нити, облегченный процесс)
2.1 Процессы
2.1.1 Понятие процесса
Процесс (задача) – программа, находящаяся в режиме выполнения. С каждым процессом связывается его адресное пространство, из которого он может читать и в которое он может писать данные.
Адресное пространство содержит:
- саму программу
- данные к программе
- стек программы
С каждым процессом связывается набор регистров, например:
- счетчика команд (в процессоре) – регистр в котором содержится адрес следующей, стоящей в очереди на выполнение команды. После того как команда выбрана из памяти, счетчик команд корректируется и указатель переходит к следующей команде.
- указатель стека
- и д. р.
Во многих операционных системах вся информация о каждом процессе, дополнительная к содержимому его собственного адресного пространства, хранится в таблице процессов операционной системы.
Управление процессом | Управление памятью | Управление файлами |
Регистры Счетчик команд Указатель стека Состояние процесса Приоритет Параметры планирования Идентификатор процесса Родительский процесс Группа процесса Время начала процесса Использованное процессорное время | Указатель на текстовый сегмент Указатель на сегмент данных Указатель на сегмент стека | Корневой каталог Рабочий каталог Дескрипторы файла Идентификатор пользователя Идентификатор группы |
2.1.2 Модель процесса
В многозадачной системе реальный процессор переключается с процесса на процесс, но для упрощения модели рассматривается набор процессов, идущих параллельно (псевдопараллельно).
Рассмотрим схему с четырьмя работающими программами.

Рисунок 2.1 – В каждый момент времени активен только один процесс

Рисунок 2.2 – Модели процессов
На рисунке 2.2, б представлены параллельно работающие процессы, каждый со своим счетчиком команд. Разумеется, на самом деле существует только один физический счетчик команд, в который загружается логический счетчик команд текущего процесса. Когда время, отведенное текущему процессу, заканчивается, физический счетчик команд сохраняется в памяти, в логическом счетчике команд процесса.
2.1.3 Создание и завершение процесса
Три основных события, приводящие к созданию процессов (вызов fork или CreateProcess):
- Загрузка системы;
- Работающий процесс подает системный вызов на создание процесса;
- Запрос пользователя на создание процесса.
Во всех случаях, активный текущий процесс посылает системный вызов на создание нового процесса.
В UNIX каждому процессу присваивается идентификатор процесса (PID – Process IDentifier)
Четыре события, приводящие к остановке процесса (вызов exit или ExitProcess):
- Плановое завершение (окончание выполнения);
- Плановый выход по известной ошибке (например, отсутствие файла);
- Выход по неисправимой ошибке (ошибка в программе);
- Уничтожение другим процессом.
Таким образом, приостановленный процесс состоит из собственного адресного пространства, обычно называемого образом памяти (core image), и компонентов таблицы процессов (в числе компонентов и его регистры).
2.1.4 Иерархия процессов
В UNIX системах заложена жесткая иерархия процессов. Каждый новый процесс созданный системным вызовом fork, является дочерним к предыдущему процессу. Дочернему процессу достаются от родительского переменные, регистры и т. п. После вызова fork, как только родительские данные скопированы, последующие изменения в одном из процессов не влияют на другой, но процессы помнят о том, кто является родительским.
В таком случае в UNIX существует и прародитель всех процессов – процесс init.

Рисунок 2.3 – Дерево процессов для систем UNIX
В Windows не существует понятия иерархии процессов. Хотя можно задать специальный маркер родительскому процессу, позволяющий контролировать дочерний процесс.
2.1.6 Состояние процессов
Три состояния процесса:
- Выполнение (занимает процессор);
- Готовность (процесс временно приостановлен, чтобы позволить выполняться другому процессу);
- Ожидание (процесс не может быть запущен по своим внутренним причинам, например, ожидая операции ввода/вывода).
Переходы 2 и 3 вызываются планировщиком процессов операционной системы, так что сами процессы даже не знают о этих переходах. С точки зрения самих процессов есть два состояния выполнения и ожидания.
На серверах для ускорения ответа на запрос клиента, часто загружают несколько процессов в режим ожидания, и как только сервер получит запрос, процесс переходит из "ожидания" в "выполнение". Этот переход выполняется намного быстрее, чем запуск нового процесса.

Рисунок 2.4 – Возможные переходы между состояниями: 1. Процесс блокируется, ожидая входных данных; 2. Планировщик выбирает другой процесс; 3. Планировщик выбирает этот процесс; 4. Поступили входные данные.
2.2 Потоки (нити, облегченный процесс)
2.2.1 Понятие потока
Каждому процессу соответствует адресное пространство и одиночный поток исполняемых команд.

Рисунок 2.5 – Сравнение многопоточной системы с однопоточной
В многопользовательских системах, при каждом обращении к одному и тому же сервису, приходится создавать новый процесс для обслуживания клиента. Это менее выгодно, чем создать квазипараллельный поток внутри этого процесса с одним адресным пространством.
2.2.2 Модель потока
С каждым потоком связывается:
- Счетчик выполнения команд;
- Регистры для текущих переменных;
- Стек;
- Состояние.
Потоки делят между собой элементы своего процесса:
- Адресное пространство
- Глобальные переменные
- Открытые файлы
- Таймеры
- Семафоры
- Статистическую информацию.
В остальном модель идентична модели процессов.
В POSIX и Windows есть поддержка потоков на уровне ядра.
В Linux есть новый системный вызов clone для создания потоков, отсутствующий во всех остальных версиях системы UNIX.
В POSIX есть новый системный вызов pthread_create для создания потоков.
В Windows есть новый системный вызов Createthread для создания потоков.
Преимущества использования потоков:
1. Упрощение программы в некоторых случаях, за счет использования общего адресного пространства.
2. Быстрота создания потока, по сравнению с процессом, примерно в 100 раз.
3. Повышение производительности самой программы, т. к. есть возможность одновременно выполнять вычисления на процессоре и операцию ввода/вывода. Пример: текстовый редактор с тремя потоками может одновременно взаимодействовать с пользователем, форматировать текст и записывать на диск резервную копию.
Реализация потоков:
- в пространстве пользователя;
- в пространстве ядра;
- смешанное.

Рисунок 2.6 – Реализация потоков: А – потоки в пространстве пользователя; В – потоки в пространстве ядра.
В случае А ядро о потоках ничего не знает. Каждому процессу необходима таблица потоков, аналогичная таблице процессов.
Преимущества случая А:
- Такую многопоточность можно реализовать на ядре не поддерживающим многопоточность;
- Более быстрое переключение, создание и завершение потоков;
- Процесс может иметь собственный алгоритм планирования.
Недостатки случая А:
- Отсутствие прерывания по таймеру внутри одного процесса;
- При использовании блокирующего (процесс переводится в режим ожидания, например: чтение с клавиатуры, а данные не поступают) системного запроса все остальные потоки блокируются;
- Сложность реализации.
Поток ядра может содержать несколько потоков пользователя.

Рисунок 2.7 – Мультиплексирование потоков пользователя в потоках ядра
2.2.3 Особенности реализации Windows
Используется четыре понятия:
- Задание – набор процессов с общими квотами и лимитами
- Процесс – контейнер ресурсов (память...), содержит как минимум один поток.
- Поток – именно исполняемая часть, планируемая ядром.
- Волокно – облегченный поток, управляемый полностью в пространстве пользователя. Один поток может содержать несколько волокон.
Потоки работают в режиме пользователя, но при системных вызовах переключаются в режим ядра. Из-за переключения в режим ядра и обратно, очень замедляется работа системы. Поэтому было введено понятие волокна. У каждого потока может быть несколько волокон.
Использованная литература
1. Э. Таненбаум. Современные операционные системы. – СПб. : ПИТЕР, 2010, 1120 с. ISBN -306-4, 33.
Лекция 3
УПРАВЛЕНИЕ ПАМЯТЬЮ. СТРАНИЧНАЯ ОРГАНИЗАЦИЯ
3.1 Основные понятия
3.2 Методы без использования внешней памяти
3.3 Методы с использованием внешней памяти (свопинг и виртуальная память)
3.1 Основные понятия
Менеджер памяти – часть операционной системы, отвечающая за управление памятью.
Основные методы распределения памяти:
- Без использования внешней памяти
- С использованием внешней памяти
3.2 Методы без использования внешней памяти
3.2.1 Однозадачная система без подкачки на диск
Память разделяется только между программой и операционной системой. Схемы разделения памяти:

Рисунок 3.1 – Схемы разделения памяти
Третий вариант используется в MS-DOS. Та часть, которая находится в ПЗУ, часто называется BIOS.
3.2.2 Распределение памяти с фиксированными разделами
Память просто разделяется на несколько разделов (возможно, не равных). Процессы могут быть разными, поэтому каждому разделу необходим разный размер памяти.
Системы могут иметь:
- общую очередь ко всем разделам;
- к каждому разделу отдельную очередь.

Рисунок 3.2 – Распределение памяти с фиксированными разделами
Недостаток системы многих очередей очевиден, когда большой раздел может быть свободным, а к маленькому выстроилась очередь.
Алгоритмы планирования в случае одной очереди:
- поочередный
- выбирается задача, которая максимально займет раздел
Также может быть смешанная система.
6.2.3 Распределение памяти динамическими разделами
В такой системе сначала память свободна, потом идет динамическое распределение памяти.
Недостатки:
- Сложность
- Память фрагментируется

Рисунок 3.3 – Распределение памяти динамическими разделами
3.3 Методы с использованием внешней памяти (свопинг и виртуальная память)
Так как памяти, как правило, не хватает, для выполнения процессов часто приходится использовать диск.
Основные способы использования диска:
- Свопинг (подкачка) – процесс целиком загружается в память для работы;
- Виртуальная память – процесс может быть частично загружен в память для работы.
Свопинг (подкачка)
При нехватке памяти процессы могут быть выгружены на диск (рисунок 3.4). Т. к. процесс С очень большой, процесс А был выгружен временно на диск, после завершения процесса С он снова был загружен в память.
Как мы видим процесс А второй раз загрузился в другое адресное пространство, должны создаваться такие условия, которые не повлияют на работу процесса.

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

Рисунок 3.5 – Диспетчер памяти преобразует виртуальные адреса в физические
Страничная организация памяти
Страницы – это части, на которые разбивается пространство виртуальных адресов.
Страничные блоки – единицы физической памяти.
Страницы всегда имеют фиксированный размер. Передача данных между ОЗУ и диском всегда происходит в страницах.
Страничная организация памяти используется, и в UNIX, и в Windows.
Использованная литература
1. Э. Таненбаум. Современные операционные системы. – СПб.: Питер, 2010, 1120 с. ISBN -306-4, 33.
2. Гордеев, системы : учебник для студентов вузов по специальности "Информатика и вычислительная техника" / . - 2-е изд. - СПб. : Питер, 20с. : ил. - (Учебник для вузов. Гр.). - ISBN -632-3.
3. Карпов, операционных систем : курс лекций ; учеб. пособие / , ; под ред. . - 2-е изд., доп. и испр. - М. : Интернет-ун-т информ. технологий, 20с. - (Учебник для вузов. Гр.). - ISBN 0044-4.
Лекция 4
УСТРОЙСТВА И ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
ВВОДА-ВЫВОДА
4.1 Принципы аппаратуры ввода-вывода
4.2 Принципы программного обеспечения ввода-вывода
4.3 Программные уровни и функции ввода-вывода
4.1 Принципы аппаратуры ввода-вывода
4.1.1 Устройства ввода-вывода
Устройства делят на две категории (некоторые не попадают ни в одну):
- блочные устройства – информация считывается и записывается по блокам, блоки имеют свой адрес (диски);
- символьные устройства – информация считывается и записывается посимвольно (принтер, сетевые карты, мыши).
4.1.2 Контроллеры устройств
Устройства ввода-вывода обычно состоят из двух частей:
- механическая (не надо понимать дословно) – диск, принтер, монитор;
- электронная – контроллер или адаптер.
Если интерфейс между контроллером и устройством стандартизован (ANSI, IEEE или ISO), то независимые производители могут выпускать совместимые как контроллеры, так и устройства. Например: диски IDE или SCSI.
Операционная система обычно имеет дело не с устройством, а с контроллером. Контроллер, как правило, выполняет простые функции, например, при считывании с диска, преобразует поток бит в блоки, состоящие из байт, и осуществляют контроль и исправление ошибок, проверяется контрольная сумма блока, если она совпадает с указанной в заголовке сектора, то блок считан без ошибок, если нет, то считывается заново.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |



