Операционные системы

Введение в операционные системы

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

  • **Почему Chrome занимает столько памяти?** Каждая вкладка - отдельный процесс. OS изолирует их через виртуальную память. Одна вкладка крашится - остальные работают. Это архитектурное решение, основанное на понимании OS.
  • **Как WhatsApp доставляет сообщения мгновенно?** OS будит приложение через push-уведомления (даже когда оно "закрыто"). Без поддержки OS это невозможно.
  • **Почему Linux доминирует на серверах?** 96% топ-500 суперкомпьютеров, все Android-смартфоны, большинство веб-серверов. Понимание архитектуры OS объясняет этот выбор: стабильность, контроль, open-source.

Цели урока

  • Понимать роль OS: arbitrator железа, abstraction layer для процессов, security boundary
  • Различать поколения OS: batch 1950х, time-sharing 1960х, personal 1980х, mobile 2000х
  • Знать архитектуры: monolithic (Linux), microkernel (QNX, Mach), hybrid (Windows NT, XNU)
  • Объяснить user mode vs kernel mode и механизм переключения через trap/syscall
  • Идентифицировать задачи OS: CPU scheduling, memory management, I/O, security, IPC

Что такое операционная система

**Операционная система (OS)** - это программа-посредник между пользователем и компьютерным железом. Она управляет ресурсами компьютера и предоставляет удобный интерфейс для работы с ним.

Операционная система как дирижёр оркестра

Оркестр: скрипки, барабаны, флейты - все играют одновременно. Без дирижёра будет хаос. **Дирижёр (OS)** координирует музыкантов (программы), распределяет время выступлений, следит чтобы инструменты (железо) работали синхронно. Так и OS управляет процессором, памятью, дисками, чтобы все программы работали слаженно.

Операционная система выполняет две ключевые роли: 1. **Менеджер ресурсов** - распределяет CPU, память, диск между программами 2. **Абстракция железа** - скрывает сложность hardware, предоставляя программам простой API

**Главные функции OS:** - Управление процессами (multitasking) - Управление памятью (virtual memory) - Файловая система (хранение данных) - Управление устройствами (драйверы) - Безопасность и защита (permissions, isolation)

OS создаёт **слои абстракции**. Программист не думает о том, где физически расположен файл на диске, какие секторы занимает, как управлять головкой чтения. Просто вызываешь `fopen()` - OS делает всю грязную работу.

Пример: изоляция процессов

При одновременном запуске браузера и текстового редактора OS создаёт **иллюзию**, что каждая программа - единственная на компьютере. Браузер не может случайно перезаписать память редактора. Это называется **изоляция процессов**.

Какая из функций НЕ является задачей операционной системы?

Эволюция операционных систем

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

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

**1960-е: Batch-системы.** Первая автоматизация: оператор собирал колоду перфокарт с программами, OS последовательно загружала и выполняла их. Между задачами процессор простаивал - большая трата времени.

**Multiprogramming (многопрограммность)** - прорыв 1960-х. Пока одна программа ждёт данных с медленного диска, процессор переключается на другую. CPU загружен почти на 100%!

**1970-е: UNIX революция.** Деннис Ритчи и Кен Томпсон создали UNIX в AT&T Bell Labs. Ключевые идеи: - **Всё есть файл** (даже устройства) - **Малые утилиты**, которые хорошо делают одно дело - **Pipes (конвейеры)** для связи программ - **Многопользовательский режим** с изоляцией

**1980-е: Эра персональных компьютеров.** MS-DOS - однопользовательская система без multitasking. Apple Lisa (1983) принесла GUI. Windows 1.0 (1985) - графическая оболочка поверх DOS.

От командной строки к GUI

Переход от командной строки к GUI похож на переход от телеграфа к видеозвонку. Раньше взаимодействие с компьютером было как отправка команд телеграфом: `COPY A: B:`, `DIR`, `DEL FILE.TXT`. GUI (Graphical User Interface) сделал взаимодействие визуальным - теперь можно мышкой перетащить файл в корзину.

**1990-е: Windows 95 и современная эра.** Preemptive multitasking (OS сама отбирает процессор у программ), 32-битные приложения, plug-and-play устройства. Linux (1991) Линуса Торвальдса - open-source UNIX-подобная система.

Почему UNIX выжил 50+ лет?

**Простота и модульность.** Ядро делает минимум: управление процессами, память, I/O. Всё остальное - в userspace программах. Поэтому UNIX легко портировать на любое железо: от суперкомпьютеров до роутеров. Linux, macOS, Android - все наследники UNIX.

Какое ключевое нововведение принесли batch-системы 1960-х годов?

Типы операционных систем

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

**Классификация OS по назначению:** 1. **Desktop OS** - Windows, macOS, Linux (Ubuntu, Fedora) 2. **Server OS** - Linux Server, Windows Server, FreeBSD 3. **Mobile OS** - Android, iOS 4. **Real-Time OS (RTOS)** - QNX, VxWorks, FreeRTOS 5. **Embedded OS** - для IoT устройств, роутеров

**Desktop OS: приоритет - удобство пользователя.** Быстрый отклик GUI, поддержка мультимедиа, совместимость с тысячами программ. Пример: macOS использует гибридное ядро (XNU), сочетающее скорость и стабильность.

**Server OS: приоритет - надёжность и производительность.** Серверы работают 24/7, обслуживают тысячи клиентов одновременно. Linux доминирует: 96% топ-500 суперкомпьютеров работают на Linux. Нет GUI (только командная строка) - экономия ресурсов.

**Mobile OS: приоритет - энергоэффективность.** Смартфон работает от батареи, поэтому OS агрессивно управляет питанием: выключает фоновые процессы, снижает частоту CPU, усыпляет радиомодули.

Android и энергосбережение

Android переводит неактивные приложения в **Doze mode** (дремота). Если телефон лежит неподвижно и экран выключен, система блокирует сеть, будильники, GPS для большинства приложений. Экономия батареи может достигать 30-40%.

**Real-Time OS (RTOS): приоритет - детерминированность.** В обычной OS процесс может ждать CPU 10мс или 100мс - неизвестно. В RTOS гарантировано: задача с высоким приоритетом выполнится за **строго определённое время**. Критично для медицины, авиации, автомобилей.

RTOS как швейцарские часы

Обычная OS - как общественный транспорт: автобус придёт «примерно в 9:00», может с опозданием. RTOS - швейцарские часы: поезд отправляется **ровно в 9:00:00**, с точностью до миллисекунды. Для управления двигателем ракеты нужна именно такая предсказуемость.

**Embedded OS для IoT.** Минималистичные системы для устройств с ограниченной памятью (килобайты RAM!): умные лампочки, датчики, носимая электроника. Примеры: Contiki, RIOT OS.

Почему Real-Time OS (RTOS) критична для медицинского оборудования, но обычный Linux не подходит?

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

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

**Монолитное ядро (Monolithic Kernel).** Вся OS - одна большая программа в привилегированном режиме. Драйверы, файловые системы, сеть - всё работает в kernel space. Преимущество: **скорость** (нет накладных расходов на переключение). Недостаток: баг в драйвере может уронить всю систему (kernel panic).

Linux - монолитное ядро

Linux ядро - ~30 миллионов строк кода. Драйвер видеокарты, файловая система ext4, TCP/IP стек - всё работает в kernel mode. Один сбойный указатель в драйвере - и синий экран (kernel panic). Но зато быстро: системный вызов `read()` выполняется за микросекунды.

**Микроядро (Microkernel).** Минимальное ядро делает только базовые вещи: управление потоками, IPC (межпроцессное взаимодействие), виртуальная память. Всё остальное (драйверы, файловые системы) - в userspace как обычные процессы. Преимущество: **надёжность** (сбой драйвера не роняет ядро). Недостаток: **медленнее** (много переключений контекста).

Монолит vs Микроядро

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

**Гибридное ядро (Hybrid Kernel).** Компромисс между монолитом и микроядром. Критичные для производительности части (драйверы видео, сеть) - в kernel space. Остальное - в userspace. Примеры: Windows NT, macOS (XNU).

**Модули ядра Linux - гибкость монолита:** Linux технически монолитен, но поддерживает динамическую загрузку модулей. Драйвер можно загрузить/выгрузить без перезагрузки: ```bash lsmod # Список загруженных модулей modprobe nvidia # Загрузить драйвер Nvidia rmmod old_driver # Выгрузить старый драйвер ``` Это даёт гибкость микроядерного подхода при скорости монолита.

**User mode vs Kernel mode.** Современные процессоры (x86, ARM) имеют минимум два уровня привилегий: - **User mode (Ring 3):** Программы пользователя. Нельзя напрямую обращаться к железу, вызвать IO-инструкции. Попытка приведёт к исключению. - **Kernel mode (Ring 0):** Код OS. Полный доступ к железу, памяти, инструкциям процессора.

**Почему разделение важно?** Без него любая программа могла бы напрямую писать на диск. Один баг - и файловая система уничтожена. Kernel mode защищает систему: все опасные операции проходят через проверку прав.

Микроядерная архитектура всегда лучше монолитной, потому что надёжнее

Выбор архитектуры - это trade-off между производительностью и надёжностью. Для разных задач оптимальны разные подходы

Микроядро действительно надёжнее (изоляция компонентов), но медленнее из-за накладных расходов на IPC. Linux выбрал монолит + модули: скорость для десктопов/серверов, где производительность критична. QNX (микроядро) используют в автомобилях, где важна предсказуемость и безопасность. Не существует «идеальной» архитектуры - есть оптимальная под конкретную задачу.

Ключевые идеи

  • **OS - посредник между пользователем и железом.** Управляет ресурсами (CPU, память, диски) и предоставляет абстракции (процессы, файлы, сокеты).
  • **Эволюция OS - от batch-систем к многозадачности.** UNIX (1970-е) заложил основы современных систем: файловая абстракция, pipes, многопользовательский режим. Linux и macOS - наследники этих идей.
  • **Разные типы OS для разных задач.** Desktop OS (удобство), Server OS (надёжность), Mobile OS (энергоэффективность), RTOS (детерминированность). Нет универсальной OS.
  • **Архитектура ядра - trade-off между скоростью и надёжностью.** Монолитное ядро (Linux) - быстро, но сбой драйвера критичен. Микроядро (QNX) - медленнее, но отказоустойчивее. Гибридное (Windows, macOS) - баланс.

Связанные темы

Операционные системы - фундамент, на котором строятся все остальные области Computer Science:

  • Процессы и потоки — OS создаёт иллюзию параллельного выполнения программ на одном CPU через context switching
  • Управление памятью — Виртуальная память, paging, swapping - механизмы, позволяющие программам "видеть" больше RAM, чем физически установлено
  • Файловые системы — Абстракция хранения данных: от физических секторов диска до привычных файлов и папок
  • Системное программирование — Написание программ, взаимодействующих с OS через системные вызовы (syscalls): fork, exec, mmap

Вопросы для размышления

  • При проектировании OS для марсианского ровера - какую архитектуру ядра предпочесть (монолит, микроядро, гибрид) и почему?
  • Почему смартфоны используют ARM процессоры, а серверы - x86-64? Как архитектура OS связана с выбором процессора?
  • Каким был бы мир без операционных систем? Как бы выглядела разработка ПО? Какие задачи стали бы невозможными?

Связанные уроки

  • os-02-processes — Процессы - первая ключевая абстракция OS
  • arch-01-binary — Архитектура компьютера - физическая основа, которой управляет OS
  • net-01-intro — Сетевой стек реализован внутри OS
  • st-01-feedback-loops — Планировщик OS - классический пример системы с обратной связью
  • arch-04-cpu
Введение в операционные системы

0

1

Войти

Какое главное преимущество микроядерной архитектуры над монолитной?