OS
Операционные системы выполняют две основные функции: предоставляют абстракции железа пользовательским программам и управляют ресурсами компьютера. (Таненбаум Э.)
Что изучают курсы по операционным системам
Если открыть любой университетский курс (MIT, Berkeley, Stanford), то он обычно строится примерно так:
- Что такое процесс
- Что такое поток
- Планировщик
- Контекстное переключение
- Виртуальная память
- Системные вызовы
- Файловые системы
- Драйверы устройств
- IPC
- Синхронизация
Заметьте — почти нигде нет того что связано только с конкретной платформой IBM PC (x86) - GDT или BIOS/UEFI. Это потому, что это архитектурные детали, а не фундаментальные идеи ОС.
Если начать изучать x86 то, большая часть времени уйдёт на ее особенности: BIOS/UEFI; GRUB; GDT; IDT; APIC; legacy-устройства; режимы процессора.
И эти темы относятся к операционным системам общего назначения.
Операционная система общего назначения (General-Purpose OS, GPOS) Linux, Windows и macOS, предназначенная для выполнения множества разных задач и приложений, а не для одной конкретной функции.
ОС не знает заранее, какую именно полезную работу будет выполнять пользовательская программа. Она предоставляет универсальную среду, в которой могут работать самые разные программы.
Набор подсистем GPOS:
Пользовательские программы
│
▼
┌─────────────────┐
│ User Space │
│ │
│ Shell / GUI │
│ Applications │
│ Libraries │
└────────┬────────┘
│
System Calls
│
▼
┌─────────────────┐
│ Kernel │
│ │
│ Process Mgmt │
│ Scheduler │
│ Virtual Memory │
│ Physical Memory │
│ IPC │
│ VFS / Filesystem│
│ Networking │
│ Device Drivers │
│ Security │
│ Interrupts │
│ Timers │
│ IPC │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Hardware / CPU │
│ RAM / Devices │
└─────────────────┘
Специализированные ОС реального времени (RTOS) FreeRTOS, Zephyr, QNX, их главная задача — не просто выполнить работу, а выполнить её с предсказуемыми временными ограничениями.
FreeRTOS отлично показывает:
- задачи;
- планировщик;
- очереди;
- семафоры;
- мьютексы.
Но почти не показывает все что связано с ОС общего назначения:
- процессы;
- виртуальную память;
- файловые системы;
- загрузку программ;
- пользовательский режим;
- системные вызовы в классическом смысле.
ARM-микроконтроллер STM32F303 - это мощный ARM-микроконтроллер без MMU. На нём можно запускать лишь RTOS (операционные системы реального времени) вроде FreeRTOS или NuttX, но не Linux или Windows. Это хороший выбор для изучения встраиваемых систем, но не ОС общего назначения.
Есть еще и другие классы ОС:
- встроенные ОС (Embedded OS). Они предназначены для конкретного устройства или класса устройств и обычно работают при жестких ограничениях по памяти, CPU и энергии.
- мобильные ОС — Android, iOS. Технически они тоже являются довольно универсальными ОС, но оптимизированы под мобильные устройства: батарею, сенсорный экран, мобильную связь, sandboxing приложений и т.д.
- серверные ОС, Linux/Windows Server сами по себе тоже могут быть ОС общего назначения, но их использование ориентировано на серверные нагрузки.
- сетевые ОС — термин используется для систем, основной задачей которых является управление сетевым оборудованием или предоставление сетевых функций. Например, ОС маршрутизаторов и коммутаторов.
Operating Systems: Three Easy Pieces (OSTEP)
В понимании OSTEP, все важные функции ОС объясняются тремя темами:
- Virtualization
- Concurrency
- Persistence
Virtualization
Физические ресурсы компьютера ограничены и общие, но ОС создаёт для каждой программы иллюзию, что она имеет их «как будто в своём распоряжении».
CPU virtualization - Физически CPU может выполнять ограниченное количество Threads одновременно, но программ намного больше. ОС создаёт abstraction Process, переключает выполнение между процессами и решает, кому дать CPU через Scheduler.
Memory virtualization - Физическая RAM одна, но каждый Process получает собственное AddressSpace.
Concurrency
При наличии в системе множества процессов и Threads, возникает проблема когда несколько исполнений происходят одновременно и работают с общими данными. Необходимо корректно координировать параллельное выполнение. Если Thread взаимодействуют без правил, возникают race conditions, lost updates, deadlocks и другие concurrency bugs.
Persistence
CPU и RAM обеспечивают выполнение программы, но необходимо хранить состояние после выключения компьютера.
OSTEP рассматривает filesystem как abstraction поверх persistent device: программы работают с файлами и директориями, а ОС превращает эти операции в чтение и запись storage blocks, заботясь о performance и корректности при сбоях.
Варианты разработки ОС для изучения:
- 🔖 на виртуальном процессоре RISC-V в эмуляторе QEMU (можно писать под RV64GC, она готовая к запуску Linux и на платах RISC-V SBC)
- на реальном RISC-V SBC: StarFive VisionFive 2 или Milk-V Mars (процессор для ISA RV64GC)
- 🔖 на реальном Raspberry Pi 3/4
www.tutorialspoint.com/operating_system
Изучить OS xv6-riscv
Изучить xv6-riscv как эталон минимальной ОС для RISC-V. Параллельно читать OSTEP, чтобы понимать не только "как", но и "зачем". После понимания каждой подсистемы реализовывать её на своём процессоре.
- pdos.csail.mit.edu
- github.com/mit-pdos/xv6-riscv
- Курс MIT 6.S081
- xv6-guide.github.io/xv6-riscv-book
- mit-pdos.github.io/xv6-riscv-book/
xv6-riscv — учебная Unix-подобная ОС для RISC-V, она написана специально для обучения. В ней нет миллионов строк кода, как в Linux, но есть процессы, системные вызовы, файловая система, планировщик и другие базовые механизмы.
p.s. тема устройства операционных систем общего назначения велика, и тема Linux так же большая, если не нужна специализация имеено по операционным системам то пропустим погружение в эту бездну :)
Можно написать ОС общего назначения при поддержке LLM's, но в итоге получим тонны кода, который хорошо проходит тесты и даже вы понимаете про что этот код, но все это будут поверхностные знания т.е. беспользные. А если вы все же захотите понять как работают компоненты операционной системы то возьмите отпуск :)