
- •Оглавление
- •От редактора перевода
- •Введение
- •Использовать
- •Аргументировано обсуждать
- •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.1.3 Управление процессами
Другая функция операционной системы – поддерживать последовательность всех процессов, выполняющихся в настоящий момент, обеспечивая каждому выполнение с разумной частотой. Процесс – частный случай программы. Он включает некоторый набор страниц памяти, набор дескрипторов (описателей) открытых файлов (если это процесс ввода/вывода (I/O)), идентификатор процесса (ID) и другие. Ядро поддерживает список всех процессов в системе. Это программы, запущенные пользователем, различные программы, выполняющие функции операционной системы за пределами ядра, такие как печать и сетевая поддержка. Каждый процесс может быть в одном из состояний: работающий (запущенный), работоспособный, или заблокированный. Только один процесс на ЦП может фактически работать в данный момент времени, хотя любое число может быть работоспособным. Заблокированный процесс – тот, который дожидается некоторого события. Например, программа буферизации печати заблокирована большую часть времени и становится работоспособной, когда пользователь выбирает команду Печать, активизируя процесс.
В операционной системе Windows при вызове менеджера задач (Task Manager) можно увидеть список текущих заданий. (Задание в Windows – это приложение, запущенное пользователем, появляющееся в панели процессов. Задание обеспечивает выполнение одного или более процессов). 3.1.4 Lab: The Task Manager показывает шаги, необходимые для использования Task Manager. В операционной системе UNIX команды ps и top отображают информацию о процессах.
Ядро поддерживает очередь (также называется очередью задач) или очередь процессов на выполнение. Для того, чтобы создать иллюзию что все процессы выполняются одновременно, используется приоритетная многозадачность. По сравнению с другими видами многозадачности, приоритетная многозадачность создает лучшую иллюзию, чем остальные. Трюк заключается в наличии часов реального времени, которые могут регулярно генерировать прерывания. Прерывания по таймеру предоставляют ядру возможность посмотреть на очередь запуска и увидеть, можно ли какой-то процесс запустить прямо сейчас. Если ответ – да, то процесс, выполняемый в данный момент, выгружается. Ранг его состояние понижается от запущенного к работоспособному, этап его выполнения отмечается и содержимое его регистра сохраняется, чтобы процесс можно было возобновить позже. Заблокированные процессы также генерируют эти виды прерываний, но ответ на последний вопрос для них всегда “да”. Затем другой процесс в очереди задач выбирается для работы. Если ядро переключает процессы с достаточной частотой, то человеку кажется, что все процессы выполняются одновременно. Теперь вы знаете секрет иллюзии!
Если приоритетная многозадачность — хорошая идея, то почему бы ни переключать процессы чаще, скажем, после каждой команды? Причина в том, что ядро не переключает от одного процесса к другому, для этого требуется контекстный переключатель, который требует некоторого времени. Для выполнения контекстного переключения процессор должен прервать последовательность команд, сохранить содержимое всех регистров, загрузить новую таблицу страниц и т.п. Это требует определенного количества расходов для каждого приоритетного прерывания. Поэтому, оптимальная стратегия — делать контекстное переключение только тогда, когда нужно гарантировать справедливое обслуживание для всех процессов.
Некоторые приложения для выполнения своих функций требуют многозадачности. Например, для того чтобы веб-навигатор поддерживал многооконность (каждая загрузка — на своей странице или запуск различных Java-апплетов) браузеру нужно создать процесс для каждого окна. Но, наличие множества процессов дорого, потому что каждому требуется собственное адресное пространство, таблицы страниц, файлы дескрипторов и т.п. И многие приложений, использующие многозадачность, не требуют разделения процессов. Поэтому новые версии операционных систем предусматривают облегченные процессы (lightweight processes) называемые потоками (threads), которые находятся в одном адресном пространстве и совместно используют файловые дескрипторы.