LINUX.ORG.RU

[kernel]sleep в ядре

 


0

2

Добрый день.

Учусь писать драйвер. При взаимодействии с устройством, после посылки в порт данных, необходимо дать устройству «подумать», перед посылкой очередной порции данных. Интервал задержки составляет не менее 100 мс. В linux/unistd.h не нашел заголовков никаких *sleep-функций. Драйвер регистрирую, как символьное устройство.

Ответ на: комментарий от Love5an

>cli

Использование платформенно-зависимого асма на ровном месте, да ещё с блокированием шедулера. Дерьмовое решение.

nuffsaid
()
Ответ на: комментарий от Love5an

Про платформозависимость это прикол, конечно.

Нет, я понимаю, что на ЛОРе сидят охеренные мультиплатформенные специалисты, у которых вчера писался код под FreeBSD/MIPS, сегодня под Solaris/ARM, а завтра под OpenVMS/IA64, но тем не менее, интересно, хоть кто-нибудь из активно ратующих за кроссплатформенность писал под что-либо отличное от Windows/Linux на x86[-64]?

Love5an
()
Ответ на: комментарий от Love5an

ггг. вдумайся сначала, что этот код делает

Нет, я понимаю, что на ЛОРе сидят охеренные мультиплатформенные специалисты, у которых вчера писался код под FreeBSD/MIPS, сегодня под Solaris/ARM, а завтра под OpenVMS/IA64, но тем не менее, интересно, хоть кто-нибудь из активно ратующих за кроссплатформенность писал под что-либо отличное от Windows/Linux на x86[-64]?

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

И если в своём «совете» ты имел в виду функции, то в синтаксисе языка си они оформляются со скобочками:

cli();
hlt();
Не слишком сложно? А ты нарисовал две асм-команды. Между тем ТС признался, что новичек, он не обязан влезать тебе в голову и разбираться, что ты там имел в виду.

BTW, основной момент: про блокирование шедулера понял, нет? Ты предлагаешь на время > 100 ms (см. условие задачи) заткнуть шедулер, заблокировав прерывания. Это не просто косяк, это вообще не будет принято как рабочее решение. На это возразить есть чего?

nuffsaid
()
Ответ на: комментарий от nuffsaid

> BTW, основной момент: про блокирование шедулера понял, нет?

Основной момент - в том, что машина зависнет. Намертво. Это что, не очевидно?

Ты предлагаешь на время > 100 ms (см. условие задачи) заткнуть шедулер, заблокировав прерывания.

То, что ты принял откровенную издевку за «предложение», очень печально.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>То, что ты принял откровенную издевку за «предложение», очень печально.

Скажу так: ещё меньше неучей мне нравятся персонажи, которые в ответ на конкретный вопрос _начинающего_ начинают что-то из себя строить. За такие шутки нужно бить канделябром.

Ты же сам дал нормальный ответ, я тебя не понимаю.

nuffsaid
()

Используй таймеры. Для точной задержки hrtimer, можно запускать из прерывания, вне обработчика прерывания если нужно переходить в состояние ожидания - wait_for_completion

anonymous
()

Правильный ответ: LDD3, chapter 7.

frey ★★
()
Ответ на: комментарий от nuffsaid

>> То, что ты принял откровенную издевку за «предложение», очень печально.

Скажу так: ещё меньше неучей мне нравятся персонажи, которые в ответ на конкретный вопрос _начинающего_ начинают что-то из себя строить. За такие шутки нужно бить канделябром.

Не понял. «Начинающий» - это ты?

Ты же сам дал нормальный ответ, я тебя не понимаю.

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

tailgunner ★★★★★
()
Ответ на: комментарий от frey

>А ты, видимо, не неуч, почитай хоть для общего развития, что делает команда hlt на x86.

Да знаю я, блджад. Просто обычно до последнего пытаюсь думать, что человек имеет в виду что-то конструктивное, и жду того же от остальных. Видимо, на лоре это является ошибкой. Прицепился я не к hlt, а к команде cli. Применение которой тут противопоказано, даже без hlt. Ожидание в цикле cli-sti убъёт систему, поинт был только в этом.

А человек, советующий на полном серьёзе сделать cli-hlt, это как бы чудак, знающий как завесить машину, и гордящийся этим. Доступно излагаю?

nuffsaid
()
Ответ на: комментарий от nuffsaid

> А человек, советующий на полном серьёзе сделать cli-hlt,

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

tailgunner ★★★★★
()
Ответ на: комментарий от nuffsaid

>советующий на полном серьёзе
На полном серьезе на дебильные вопросы, которые во всех учебниках расписаны от и до, отвечать станут только дебилы.

Love5an
()
Ответ на: комментарий от Love5an

И не только во всех учебниках, а еще в тысячах книг и статей.
Нутыпонел.

Love5an
()
Ответ на: комментарий от frey

А действительно, будет ли хоть какой-то эффект, кроме замирания одного из ядер, на современных мультикорочный процессорах?

Не, конечно в случае ССЗБ, когда подобное сдела под локом глобальным ядреным, то понятно, что все встанет раком, а если локов нет, и «как бы слип» сделан по правилам?

hydraulicbrakefluid
()
Ответ на: комментарий от hydraulicbrakefluid

> и «как бы слип» сделан по правилам?

Это не «как бы sleep», это остановка процессора с блокированием прерываний (то есть запустить процессор больше нечему).

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Так по тому и «как бы», потому что понятно, что это не слип нифига. Вопрос который задал мр. Тормознаяжидкость звучит так: встанет ли после такого вся машина или только одно из ядер?

anonymous
()
Ответ на: комментарий от Love5an

>> советующий на полном серьёзе

На полном серьезе на дебильные ...

Эка ж тебя проняло, а не поленился в «стучалку» написать )))

shelA
()
Ответ на: комментарий от anonymous

Думаю, только одно ядро (но проверять не стану :)).

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.