
- •Оглавление
- •От редактора перевода
- •Введение
- •Использовать
- •Аргументировано обсуждать
- •IV. Применять знания
- •Модуль 1. Компьютерные системы
- •Обзор компьютерных систем
- •1.1.1. Компоненты компьютерных систем
- •Эволюция компьютерных систем
- •1.2.1. Краткая историческая справка
- •Закон Мура
- •1.2.2. Применение компьютерных систем
- •Представление данных в компьютерных системах
- •1.3.1. Биты и байты
- •1.3.2. Системы счисления
- •Модуль 2. Системы аппаратного обеспечения
- •2.1 Процессор и память
- •2.1.1 Процессор. Основы.
- •2.1.2 Типы памяти
- •2.1.3 Лабораторная работа: Эталонное тестирование (необязательная)
- •2.2 Внешние устройства
- •2.2.1 Присоединяемые внешние устройства
- •2.2.2 Шины
- •2.2.3 Входные/выходные устройства
- •2.3 Запоминающие устройства
- •2.3.1 Интерфейсы дисковых контроллеров
- •2.3.2 Накопитель (запоминающее устройство большой ёмкости)
- •2.4 Соединение компонентов аппаратного обеспечения
- •2.4.1 Как компоненты компьютера работают вместе
- •2.4.2 Лабораторная работа: Изучение компьютерных систем
- •2.4.3 Лабораторная работа: Конфигурация online
- •2.5 Повышение производительности компьютера
- •2.5.1 Закон Мура
- •2.5.2 “Узкие” места (Bottlenecks)
- •2.5.3 Производительность и время ожидания
- •Модуль 1 и Модуль 2 Обзорные материалы
- •Закон Мура
- •Модуль 3. Программное обеспечение операционных систем
- •Структура
- •3.1.1 Уровни программного обеспечения
- •3.1.2 Bios: Жизнь снизу
- •3.1.3 Управление процессами
- •3.1.4 Лабораторная работа: диспетчер задач (Task Manager)
- •3.2 Управление устройствами и конфигурация
- •3.2.1 Управление прерываниями
- •3.2.2 Характеристики аппаратного обеспечения
- •3.2.3 Конфигурация
- •3.2.4 Лабораторная работа: Управление устройствами
- •3.3. Распределение ресурсов
- •3.3.1 Виртуальная память
- •3.3.2 Совместное использование файлов и принтеров
- •3.4. Файловые системы
- •3.4.1 Организация файлов
- •3.4.2 Таблица размещения файлов (File Allocation Table) и файловая система nt
- •Модуль 4. Прикладное программное обеспечение
- •4.1 Основы программного обеспечения
- •4.2 Использование систем программного обеспечения
- •4.2.1 Лабораторная работа: Команды dos
- •4.2.2 Лабораторная работа: Макросы
- •4.2.3 Лабораторная работа: Встроенные объект-приложения
- •4.3 Пакетные файлы сценариев
- •4.3.1 Расширенные функции командной строки
- •4.3.2 Команды пакетного файла
- •4.3.3 Лабораторная работа: Создание пакетного файла
- •4.4 Базы данных
- •4.4.1 Лабораторная работа: Поиск в библиотеке Конгресса
- •4.5 Проектирование программного обеспечения
- •4.5.1 Введение в разработку крупномасштабных программных систем (Large-Scale Software).
- •4.5.2 Модель открытого кода
- •4.5.3 Средства для создания и управления программным обеспечением
- •Модуль 3 и Модуль 4 - Материалы для проверки
- •Базы данных
- •Виртуальная память
- •Модуль 5. Сетевые системы
- •5.1 Основы Интернета
- •5.1.1 Типы mime
- •5.1.2 Языки Интернет
- •5.2 Локальные и глобальные сети
- •5.3 Стратегии коммуникации
- •5.3.1 Структура клиент-сервер (Client-Server Framework)
- •5.3.2 Равноправное соединение
- •5.4 Технологии передачи данных
- •5.5 Архитектура Интернет
- •5.5.1 Роутеры и tcp/ip
- •5.5.2 Сервис доменных имен (Domain Name Service)
- •5.5.3 Способность к подключению
- •5.5.4 Провайдеры Интернет-сервиса (Internet Service Providers)
- •Модуль 6. Безопасность компьютера
- •6.1 Угрозы безопасности
- •6.1.1 Злоумышленники: кто, зачем и как?
- •6.1.2 Кража личности и нарушение конфиденциальности (Identity Theft and Privacy Violation)
- •6.1.3 Вредоносные программные средства
- •6.1.4 Отказ от обслуживания
- •6.2 Технологии безопасности
- •6.2.1 Шифрование
- •6.2.2 Применение шифрования
- •6.2.3 Идентификация
- •6.3 Предотвращение, определение и восстановление
- •6.3.1 Система сетевой защиты (Firewall)
- •6.3.2 Средства определения вторжения
- •6.3.3 Восстановление данных
- •6.3.4 Обзор типов безопасности
- •Модуль 5 и Модуль 6 Обзорный материал
- •Шифрование
- •Приложение а. Выполнение файла Visual Basic
- •Приложение в. Загрузка приложения WinZip
- •Рекомендации по чтению ssd2
3.2.1 Управление прерываниями
-
Прерывания
-
Приоритет прерываний и встроенные прерывания
-
Системные прерывания и ошибки
Прерывания
Одна из важных задач ядра — обрабатывать прерывания. Прерывание – сигнал процессору о том, что произошло некоторое событие и требует непосредственного внимания. Часто эти события связаны с операциями ввода/вывода, но есть и другие виды прерываний. Ядро вычисляет, что вызвало прерывание и дает соответствующий ответ. Оно должно действовать очень быстро. Во избежание потери информации при следующем прерывании, каждое прерывание должно обрабатываться менее чем за тысячную долю секунды.
Чтобы посмотреть как обрабатываются прерывания, давайте рассмотрим как это делают люди. Предположим, вы находитесь на рабочем месте, читая руководство. Возможно, это документация нового программного обеспечения, которое вы купили. После того, как вы прочитали несколько страниц, входит курьер, извиняется за то, что прервал вас и просит вас расписаться за посылку. Чтобы ответить на это прерывание, вы сначала помещаете закладку в руководство, чтобы отметить место чтения, а затем откладываете руководство. Теперь, когда ваши руки свободны, вы расписываетесь за посылку и помещаете ее на вашем столе, где потом будете с ней работать. Затем вы вновь берете руководство, открываете на закладке и продолжаете чтение.
Управление прерываниями ядра почти то же самое. Вот что происходит в ответ на клавиатурные прерывания, каждый раз при нажатии клавиш. Перед тем, как вы нажмете клавишу, процессор занят некоторой программой или чем-то другим. Допустим вы используете компьютер для редактирования веб-страницы и процессор занят тем, как отобразить файл изображения, который вы только что загрузили. Пока это происходит, вы набираете символы "http" на клавиатуре. Как только вы нажимаете клавишу "H", клавиатура передает байт данных через интерфейс клавиатуры PS/2 на материнской плате. Затем интерфейсу нужно прервать процессор и передать этот байт данных драйверу клавиатуры. Это нужно делать быстро, прежде чем вы нажмете "T", иначе есть опасность, что следующее нажатие клавиши будет потеряно.
Интерфейс клавиатуры отправляет процессору сигнал, называемый ЗАПРОС на прерывание (IRQ — interrupt request). Когда процессор получает этот сигнал, он перестает выполнять прикладную программу (редактор веб-страницы в нашем примере), записывая адрес последней выполняемой команды. Затем он переходит по адресу программы обработки прерывания клавиатуры и запускает выполнение команд, находящихся там. Поскольку регистры процессора содержат все данные, которыми манипулировала пользовательская программа, обработчик прерывания должен сохранить содержимое этих регистров перед тем, как он сможет использовать регистр для его собственных целей. После сохранения регистров, можно рассматривать состояние интерфейса клавиатуры и принимать байт входящих данных. Этот байт размещается в области памяти, которая будет проверена драйвером клавиатуры, когда он в следующий раз заработает, возможно, через миллисекунду. Затем обработчик прерывания клавиатуры восстанавливает содержимое сохраненных регистров и передает управление задаче, выполняемой ранее (приложение редактирования веб-страницы), возобновляя выполнение точно в той точке, где оно было прервано. Все это происходит в течение нескольких сотен микросекунд; прикладная программа даже не знает, что было прерывание.
Приоритет прерываний и встроенные прерывания
Два дополнительных понятия завершат наше обсуждение прерываний. Во-первых — понятие приоритета прерывания. Предположим, два человека входят в ваш офис в одно и то же время. (Или, кто-то первый входит и до того, как вы обратите внимание на него, входит другой.) Если один из них важный и нетерпеливый клиент, а другой — продавец, вы сначала удовлетворили бы потребности нетерпеливого клиента, а второго человека попросили бы подождать. Клиент имеет наивысший приоритет. Процессор также назначает приоритеты различным видам прерываний. Низкоскоростные устройства, подобные клавиатуре, имеют низкий приоритет. Высокоскоростные устройства, такие как диск SCSI имеют высокий приоритет, так как им нужен быстрый ответ для оптимального функционирования.
Во-вторых, есть понятие вложенные прерывания (nested interrupts). Предположим, что вы читаете свое руководство, и кто-нибудь входит, чтобы задать вам вопросы. Вы откладываете руководство, слушаете вопрос, а затем берете справочник чтобы найти ответ. В это время звонит телефон — это другое прерывание! Тогда вы отмечаете свое место в справочнике, откладываете его и отвечаете на звонок. Человеку, сидящему за вашим столом пока придется немного подождать. Когда ваш телефонный разговор закончен, вы берете справочник вновь и заканчиваете ответ на вопрос. Как только это будет сделано и все ушли счастливыми, вы можете взять ваше руководство и возобновить чтение. Второе прерывание — вложено внутри первого.
Прерывания не могут быть вложены бесконечно глубоко, потому что обработчик прерываний может быть прерван только прерыванием более высокого приоритета. Так, если бы вы уже разговаривали по телефону и кто-нибудь еще пробовал обратиться к вам, второму оппоненту пришлось бы пождать, пока вы не закончите первый разговор. Таким же образом, устройствам ввода/вывода может быть отказано в немедленном прерывании процессора, если им уже обрабатывается прерывание с более высоким приоритетом.
Системные прерывания и ошибки
Системное прерывание (trap) — событие, подобное прерыванию, за исключением того, что вместо внешнего сигнала, системное прерывание запускается командами процессора. Например, операция деления на ноль. Если пользовательская программа пытается делить число на ноль, то выполнение не может нормально продолжаться. Системное прерывание процессора подобно обработке прерывания, но без ограничения времени. Обработчик системного прерывания может выдать сообщение об ошибке и прервать пользовательскую программу или, возможен другой путь — принудительно установить результат команды деления – 0 и позволить программе работать дальше. Другое общее использование системных прерываний — когда приложения делают запросы к операционной системе. Приложение делает запрос о том, что оно хотело получить из регистра, а затем использует специальную команду системного прерывания, чтобы «перехватить внимание» операционной системы.
Третий вид события, о котором вы должны знать, называется ошибкой (fault). Ошибка происходит когда технические средства просят то, что нельзя выполнить, например доступ к несуществующему участку памяти. (Программисты C, использующие указатели, вероятно, сталкиваются с этим видом ошибки "несуществующей памяти" пока их программный код не отлажен.) Ошибки могут также происходить, если схема исправления ошибок памяти обнаруживает непоправимую ошибку, попытку деления на ноль или, если программа содержит ошибочную машинную команду. Ошибки и системные прерывания обрабатываются одинаково.