Почему запись на диск не может быть прервана сигналом? [Дубликат]

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

Компилятор обычно хорошо справляется с обнаружением + оптимизации таких вещей.

6
задан twimo 27 January 2013 в 02:08
поделиться

2 ответа

Теперь, когда я прочитал книгу Моника Баха «Дизайн операционных систем Unix», позвольте мне сам ответить на этот вопрос.

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

Некоторые связанные знания, которые я получил от книга:

  1. Слово «без прерывания» должно относиться к «непрерывному сну». Когда процесс находится в режиме бесперебойного сна, он НЕ может быть разбужен сигналами и не будет обрабатывать сигналы.
  2. Процесс обрабатывает сигналы, когда: a. он работает в режиме ядра и собирается вернуться в пользовательский режим. б. он собирается войти и покинуть состояние сна, когда сон прерывается.
  3. Что происходит, когда процесс сна пробуждается сигналом? Он будет обрабатывать сигнал, когда действие по умолчанию выходит из процесса. Когда процесс ожидает завершения ввода-вывода, вы, конечно, не хотите, чтобы он вышел преждевременно.
2
ответ дан twimo 28 August 2018 в 02:20
поделиться

Согласно документации Linux Developers Documentation , это предотвращает потерю данных и не позволяет аппаратным средствам попадать в несогласованное состояние.

Представьте, что может произойти, если read() как с диска) были прерывистыми, и обработчик сигналов, среди других обязанностей, изменил буфер чтения. Поскольку сигнал является асинхронным, результаты считывания не будут воспроизводимыми. Подобный хаос возникнет, если запись будет прервана.

2
ответ дан wallyk 28 August 2018 в 02:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: