Skip to main content

Some notes about operating systems.

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

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

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

Основные сервисы, предоставляемые ОС:

1. Планирование времени CPU;
2. Управление памятью;
3. Подкачка;
4. I/O;
5. Файловая система;
6. Утилиты;
7. Пользовательский интерфейс;
8. Системные вызовы;
9. Защита системных ресурсов;
10. Механизмы коммуникации.

Что такое процесс?

Процесс - программа в состоянии выполнения.
Каждый процесс состоит из:

  • Контекст (состояние программы)
  • Данные (с которыми работает программа)
  • Программа (сам код программы)

Что такое системные вызовы?

Системные вызовы - обращение прикладного ПО к ядру ОС для выполнения какой-либо операции (т.е. они обеспечивают доступ программ к функциям ядра).

Программный код может работать в двух режимах: ядра и пользовательском. В пользовательском режиме код не имеет доступа к ресурсам машины, в то время как в режиме ядра имеет безграничный доступ к ресурсам. Проблема в том, что при ошибке в режиме ядра покрашится вся система, а при ошибке в пользовательском режиме - только сама программа.

Получается что режим пользователя - безопасный, а режим ядра - привелегированный.

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

Системные прерывания - переключение контекста в режим ядра.

POSIX - программный интерфейс, призванный стандартизировать набор программных вызовов, чтобы разработчикам не приходилось писать разные версии приложений под разные ОС. Используется преимущественно для консольных программ. 

Будет ли программа "Hello World" использовать системные вызовы?
В зависимости от архитектуры ОС. Если используется монолитная архитектура ядра, то конечно будет. А при микроядерной архитектуре большинство системного кода вынесено в пространство пользователя, поэтому программе, чтобы обратиться к нему, не нужно использовать системные вызовы.