Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS-theory.doc
Скачиваний:
7
Добавлен:
01.03.2025
Размер:
155 Кб
Скачать
☆

Ядро операционной системы

Программа связана с некоторыми ресурсами:

  • Память

  • Время

  • УВВ

  • Файлы

  • Безопасность

Часть их относится к ядерным, часть - к пользовательским. В Unix графика в пользовательской системе, в Windows наоборот.

Программы, процессы и потоки

Программа и процесс – это не одно и то же. Программа – это то, что хранится в дисковом файле, процесс – это то, что создается, когда мы запускаем программу.

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

Процесс – это просто адресное пространство, в котором работает программа.

Поток – thread (нить).

После выделения процесса запускается главный поток – исполняющая часть программы. Поток существует во времени, а не в пространстве.

В Windows есть два типа потоков:

  • UI-threads – пользовательский интерфейс

  • Working threads – рабочие потоки

Новый процесс всегда создается другим процессом. Первый процесс всегда запускается вместе с ОС. В UNIX порождающая функция fork – порождает копию родительского процесса, в котором потом меняются код и данные. В Windows – CreateProcess, создается сразу нужный процесс. fork позволяет иметь общую часть кода у экземпляров одной программы. В Windows если запустить 100 раз word, то будет 100 его копий в памяти. В Windows нет иерархии процессов, все процессы самостоятельные. В UNIX есть чёткая иерархия процессов.

Права процесса = права порожд. процесса пересечь с правами текущего пользователя.

Ни в UNIX, ни в Windows завершение процесса не приводит к завершению дочерних процессов, но завершение процесса приводит к уничтожению всех его потоков. Демоны и сервисы – потоки, которые выполняются и без родительского процесса.

Завершение процесса – это завершение всех его потоков.

  1. Нормальное завершение потока – все сделал

  2. Нормальное завершение по ошибке (из-за невозможности дальше выполняться)

  3. Фатальная ошибка, не предусмотренная программистом

  4. Насильное завершение потока ОС

Процесс параллельного выполнения

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

С каждым потоком связана структура в памяти – TCB (Thread Control Block).

Е сть также PCB (Process Control Block), там есть список всех работающих потоков.

Состояния потока:

  1. Поток работает (Running)

  2. Поток готов, но ему не дают работать (Ready)

  3. Поток не готов (блокирован), например, ждем ввода-вывода или его насильно остановили (Blocked)

Выбор приоритета: кто работает дольше, тому приоритет меньше. Должна быть корректировка. Иногда процессам с маленьким приоритетом резко повышают приоритет.

Пусть есть потоки с разными приоритетами. Выбирают очередной поток из тех, которые давно не работали, но с учетом приоритета.

В UNIX есть один диспетчер процессов (он же супервизор, он же менеджер процессов).

В Windows есть менеджер процессов и менеджер потоков.

Загрузчик процессов.

Загрузчик (loader).

Исполняемые файлы

  • Абсолютно загружаемые

  • Относительно загружаемые

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

Com – 100h. Проблемы: нельзя реализовать много задач в рамках одного сегмента, трудно работать с функциями API. Сейчас такой подход уже почти не используется.

Обычно файлы перемещаемые – куда конкретно загрузить, решает загрузчик.

В UNIX – это elf. В Windows – exe (PE – portable executable).

Mov eax, [10000h]

Сначала мы загружаем программу в адрес 1000h, затем в 2000h. Все абсолютные должны измениться.

Linker создает в перемещаемых файлах таблицу настроек адресов – список адресов программы относительно её начала. Эта таблица изменяется при загрузке.

Как добраться до API? В UNIX API – это набор библиотечных функций С.

FILE *fp=open(“…”);

open – и есть функция API.

Библиотека функций API в памяти постоянна.

E LF: open адрес в памяти функции open.

Связывание

В Windows все системные функции лежат в исполняемых файлах .dll типа PE

Формат .exe и .dll одинаковый. Dll – это набор функций, которые вызываются из exe.

Kernel32.dll, user32.dll, gdi32.dll – базовый набор функций API Windows.

Kernel32 – работа с файлами, gdi32 – базовая графика, user32 – интерфейс пользователя.

Аналог open – CreateFile из kernel32.dll. Вместо функций С вызывается соответствующая функция из Dll-файлов, при этом файлы подгружаются в память. Kernel32.dll висит в памяти все время.

Виды многозадачности:

1)Вытесняющая – ОС делит время между задачами, гарантируя, что достанется каждой.

2) Кооперативная – сама программа решает, когда дать другим поработать (реализована в Win3.x).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]