Потоки, которые выполняют блокирующиеся системные вызовы, пробужденные прерываниями?

Обратитесь к этому отчету об ошибках в Inkscape: https://bugs.launchpad.net/ubuntu / + source/inkscape / + ошибка/499257

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

Я просто удалил xpacket элементы и файл, открытый снова. Помните, что элемент text если Вы не привыкли к работе с XML или языками разметки. Если бы это не работает, я попытался бы изменить кодировку символов, как предложено в отчете об ошибках.

3
27.03.2013, 15:47
1 ответ

Прерывания обрабатываются операционной системой, потоки (или процессы, в этом отношении) даже не знают о них.

В сценарии Вы красите:

  • Ваши проблемы a потока read() системный вызов; ядро получает запрос, понимает, что поток ничего не сделает, пока данные не прибудут (блокирующий вызов), таким образом, поток заблокирован.
  • Ядро выделяет место для буферов (в случае необходимости) и инициирует, "находят блок быть считанным, запрос на тот блок, который будет считан в буферный" танец.
  • Планировщик выбирает другой поток для использования справедливого освобожденного ЦП
  • Все идет их веселым путем, до...
  • ... прерывание прибывает от диска. Ядро вступает во владение, видит, что это отмечает завершение чтения, выпущенного прежде, и отмечает готовый поток. Управление возвращается к пространству пользователя.
  • Все идет их веселым путем, до...
  • ... кто-то приводит к ЦП одной из тысячи причин, и это именно так происходит, справедливый освобожденный ЦП присвоен потоку, который ожидал данных.

Что-то как этот, так или иначе. Нет, ЦП не присвоен потоку ожидания, когда прерывание, оказывается, сигнализирует о завершении передачи. Это могло бы прервать другой поток, и выполнение, вероятно, возобновляет, что поток (или возможно другой мог бы быть выбран).

5
27.01.2020, 21:17

Теги

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