Передайте $ @ команде, сохраняя кавычки

Проблема в том, что openssl является «полезным» и помещает новую строку в конец случайной строки. Вы можете удалить это, пропустив его через tr

openssl rand -hex 4 | tr -d '\n'
0
01.10.2018, 17:50
2 ответа

Хорошо, что вы указали или в заголовке, так как ответ положительный.

А именно, точный ответ зависит от того, о каком именно прерывании вы спрашиваете. Давайте использовать порт SPI и DMA в качестве примера.SPI — это двунаправленный последовательный интерфейс.

Например, прерывания прямого доступа к памяти обычно помечают так -так называемые уровни воды. У вас будет прерывание, когда буфер DMA заполнен, когда он «почти заполнен» (, скажем, на 3/4 ), когда он «почти пуст» (, скажем, на 1/4 )и когда он полностью пустой.

Для порта SPI у вас будет два канала DMA. Один будет обрабатывать данные, поступающие с внешнего устройства, а другой будет обрабатывать данные, которые должны быть отправлены с вашего компьютера на устройство.
Таким образом, когда прерывание выходного канала DMA указывает на то, что буфер пуст, это означает, что вывод завершен. Когда прерывание входного канала DMA указывает, что буфер не пуст, это означает, что эти входные данные доступны.

5
28.01.2020, 02:13

Большинство современных устройств действительно генерируют прерывания, когда происходит важное событие.

Однако прерывание обходится дорого. Он останавливает процессор от того, что он делает в данный момент, заставляя его обрабатывать прерывание. Если вы получаете слишком много прерываний, это может фактически сломать вашу ОС. У меня была проблема с такими вещами, как слишком много прерываний Bluetooth (, то есть более 700 000 в секунду ).

В средневековье на Apple 2 вообще не было прерываний. Все делалось по опросной схеме. Вы будете читать порты ввода-вывода и, в зависимости от различных битов, будете знать, читаете ли вы новые данные или нет. Например, чтобы загрузить один байт с гибкого диска, вы должны зацикливаться до тех пор, пока байт не станет отрицательным (бит 7 не будет установлен):

$1
  LDA 0xC030
  BPL $1

Обратите внимание, что на процессорах Intel (и, возможно, других )прерывания очень сильно перегружены. Другими словами, если вы получаете прерывание VBL, прерывание USB-порта или прерывание от вашего нового SSD-накопителя, все они могут использовать прерывание 0x20. Затем задача ЦП состоит в том, чтобы определить, какой из них или какие из них должны быть обслужены. В этом последнем случае, т. е. несколько устройств инициировали одно и то же прерывание одновременно , вы должны убедиться, что все они обслужены, прежде чем вы вернетесь, потому что вы не собираетесь получать другое прерывание (, т. е. большинство устройств отправляют одно прерывание. сигнал прерывания, они не повторяют его, пока не будет подан ).

Еще одна деталь, при обслуживании одного прерывания CPU блокирует дальнейшие прерывания (STI/CLIна процессорах Intel ). Это означает, что он может выполнять всю работу с текущим прерыванием, а затем, в конце концов, ему приходится обрабатывать другое прерывание. Это обеспечивает сериализацию при обработке данных ввода-вывода. Вот почему мы часто получаем относительно небольшой объем данных с устройств. Это позволяет размещать данные в пользовательском пространстве, а затем обрабатывать их любым количеством потоков. На современных процессорахкаждое конкретное прерывание может обрабатываться отдельным процессором. Это позволяет обрабатывать несколько прерываний параллельно. Однако из того, что я видел до сих пор, вы должны заранее решить, какой процессор будет обрабатывать какое прерывание. Это не пинг-понг между процессорами.

0
24.06.2021, 17:36

Теги

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