2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Требуется взаимодействие между процессами. Например, все уровни управления в школе взаимосвязаны и не могут управляться вертикально. Именно потому, что процессы должны сотрудничать. Предпосылкой для сотрудничества является то, что процессы должны взаимодействовать. Некоторые данные готовы к уведомлению, некоторые данные являются просто передаваемыми данными, а некоторые относятся к данным, связанным с управлением.
Факт: процессы независимы, процесс = структура данных ядра, код и данные процесса.
Цель процесса коммуникации:
Стоимость связи между процессами может быть немного выше: процессы независимы, и любые ресурсы, открытые одним процессом, не видны другому процессу. Когда мы раньше говорили о родительско-дочернем процессе, данные родительского процесса были унаследованы дочерним процессом. Это не относится к связи. Они могут быть унаследованы, но не всегда наследуются. Существует разница между возможностью передачи информации. и всегда иметь возможность передавать информацию.
Предпосылка межпроцессного взаимодействия: сначала позвольте разным процессам видеть один и тот же ресурс (операционной системы) («часть памяти»). Эти два процесса независимы. Для обеспечения связи необходим инструмент, а именно операционная система, позволяющая двум процессам иметь одинаковую память. Причину, по которой операционная система это делает, определяет пользователь.
Как сообщить операционной системе о создании ресурсов:
Конвейер по сути представляет собой файл уровня памяти, который не нужно сбрасывать на диск.
Во-первых, родительский процесс дважды открывает файл в режиме чтения и записи. Причина двойного открытия файла состоит в том, чтобы получить два объекта структурного файла, чтобы для файла было два указателя чтения и записи, чтобы можно было выполнять операции чтения и записи. используйте независимые указатели. Таким образом, чтение и запись не будут влиять друг на друга.Указатель чтения-записи записывает текущую позицию чтения или записи файла.struct file
В файле есть только один указатель чтения-записи. При записи (или чтении) в файл указатель чтения-записи будет перемещаться, а затем снова читать (записывать). В это время указатель чтения-записи больше не существует. в исходном положении и не может прочитать только что написанное содержимое, поэтому нужно открывать один и тот же файл дважды разными способами. Затем создайте дочерний процесс. Дочерний процесс унаследует файл, открытый в родительском процессе, то есть унаследует таблицу дескрипторов файлов родительского процесса. В это время родительский и дочерний процессы будут использовать один и тот же файловый ресурс. процесс может передать в файл файловый дескриптор № 4. При записи в файл родительский процесс может читать из файла через файловый дескриптор № 3. В это время родительский и дочерний процессы осуществляют передачу данных, то есть связь. . Родительский и дочерний процессы видят один и тот же буфер памяти, который мы здесь называем файлом канала. Трубы допускают только одностороннюю связь из-за простоты.
Почему родительско-дочерние процессы печатают данные на один и тот же терминал монитора?
Поскольку соответствующий дочерний процесс унаследует таблицу файловых дескрипторов, соответствующую родительскому процессу, а затем укажет на тот же файл, это означает, что родительский процесс введет файл, а дочерний процесс также введет файл, и то же самое будет записано в буфере, операционная система будет записана на тот же монитор.
По умолчанию в процессе открываются три стандартного ввода и стандартного вывода: 0, 1, 2... Как открыть 0, 1, 2 по умолчанию?
Все команды естьbash
дочерний процесс, покаbash
Когда он включен, все дочерние процессы включены по умолчанию.
Почему дочерний процесс активно закрывается (0/1/2), не влияя на дальнейшее использование файла монитора родительским процессом?
подсчет ссылок на уровне памяти--
, когда счетчик ссылок на уровне памяти уменьшается до 0, ресурсы файла освобождаются.
Родительско-дочерний процесс закрывает ненужные файловые дескрипторы, зачем их раньше нужно было открывать?
Чтобы позволить дочернему процессу наследовать. Его не обязательно закрывать, но рекомендуется закрыть, чтобы предотвратить случайное запись.
Почему трубы односторонние?
Этот метод прост, снижает затраты на разработку и обеспечивает только одностороннюю связь. Любой файл обновляется в буфере, а затем данные обновляются в файле. Этот процесс является односторонним.
Простые трубы, которые мы видим в жизни, все односторонние, например водопроводные, с одним входом и одним выходом, что соответствует характеристикам трубопроводов.
можешь использоватьpipe
Чтобы создать безымянный канал, для параметров не требуются путь к файлу и имя файла.
int pipe(int pipefd[2]);