Взаимоблокировка

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

Пример. Пусть к ПК подключены стример и пишущий DVD привод. Требуется записать данные со стримера на DVD. Процесс_1 запрашивает и получает в пользование стример. Создается Процесс_2, который запрашивает и получает в свое распоряжение DVD. После этого Процесс_1 запрашивает DVD, который занят Процессом_2. Поэтому процесс_1 приостанавливает свою работу и ждет, пока Процесс_2 не освободит DVD. Аналогично с процессом_2 по отношению к стримеру. И ждут оба). Вот это и есть взаимоблокировка.

Управление памятью

Проблемы:

1. защищенность

2. недостаточно адресного пространства, чтобы вся программа поместилась в ОЗУ. Тогда создается на жестком диске область памяти под виртуальную память. Либо файл подкачки - программа будет загружаться в ОЗУ по частям.

Файлы

Файл нужно открыть(создать) и закрыть. Файл можно читать и писать только тогда, когда он открыт. Файлы нужно хранить. За это отвечает файловая система: как и где?

Место для хранения файлов называется каталог(директория, папка). Есть корневой каталог, есть дочерние. Используется принцип дерева.

Сравнение иерархии файлов и процессов. (таблица)

Иера рхия
Процессы Файлы
не глубокая глубокая
короткое время жизни очень большое время жизни
доступ к процессу может быть осуществлен только из родительского процесса произвольный доступ

Путь - это полное имя файла от корневого каталога.

Файловые системы Юникс систем:

- bin

- sbin

- usr

-

Системные вызовы

Механизм системных вызовов

Системные вызовы это интерфейс между программами пользователя и устройствами.

Выполнение системного вызова похоже на выполнение процедуры.

ПРИМЕР:

системный вызов чтения данных из файлов

в с++ этот системный вызов запускается функцией с таким же именем

count read(fd, buffer, nbyte);

fd - file descripter. идентификатор

буфер - куда считавыются данные

nbyte - кол. байт которые нужно прочесть

count - количество байт которое необходимо прочесть

Если системный вызов не может быть выполнен count = -1, а в глобальной переменной errno = сохраняет номер ошибки. Каждый системный вызов выполняется в несколько этапов:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: