Когда я должен записать модуль ядра Linux?

Не существует общего способа сделать это эффективно, так как класс набора данных реализует только методы __getitem__ и __len__ и не обязательно имеет какую-либо «хранимую» информацию о метках.

В случае класса набора данных MNIST , однако, вы можете отсортировать набор данных из списка меток.

Например, когда вы хотите перечислить индексы, которые имеют метку 5.

mnist = torchvision.datasets.mnist.MNIST("/")
labels = mnist.train_labels
fives = (labels == 5).nonzero()

31
задан Jordfräs 29 September 2008 в 14:52
поделиться

9 ответов

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

До конкретных условий необходимо проверить на при рассмотрении пишущий код привилегированного режима, вот некоторые: этому нужен доступ к ресурсам чрезвычайно низкого уровня, таким как прерывания? Ваш код определяет новый интерфейс/драйвер для аппаратных средств, которые не могут быть созданными сверх в настоящее время экспортируемой функциональности? Ваш код требуют доступ к структурам данных или примитивам, которые не экспортируются из пространства ядра? Вы пишущий что-то, что будет, прежде всего, использоваться другой подсистемы ядра, такие как планировщик или система VM (даже здесь, не совершенно необходимо, чтобы подсистема была привилегированным режимом: у Маха есть мощная поддержка пейджеры виртуальной памяти непривилегированного режима , таким образом, она может определенно быть сделана)?

20
ответ дан 27 November 2019 в 22:26
поделиться

Существуют очень ограниченные причины поместить материал в ядро. Если Вы пишете драйверы устройств, это в порядке. Любое стандартное приложение: никогда.

недостатки огромны. Отладка становится более трудной, ошибки становятся более частыми и твердыми найти. Вы могли бы поставить под угрозу безопасность и устойчивость. Вам, возможно, придется адаптироваться к изменениям ядра более часто. Это становится невозможным к порту к другому OSS UNIX

самое близкое, я когда-либо приезжал в ядро, была пользовательская файловая система (с mysql в фоновом режиме) и даже для которого мы использовали FUSE (где U обозначает пространство пользователя).

18
ответ дан 27 November 2019 в 22:26
поделиться

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

3
ответ дан 27 November 2019 в 22:26
поделиться

В основном я соглашаюсь с rpj. Код должен быть в пространстве пользователя, если это не ДЕЙСТВИТЕЛЬНО необходимо.

, Но, для подчеркивания вопроса, который условие?

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

, Например, создатель, таймер RTC, i2c устройства, и т.д. Те драйверы могут быть легко перемещены в пространство пользователя. Существуют даже некоторые файловые системы, которые записаны в пространстве пользователя.

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

, Но существует много способа иметь дело с этим. Например,/dev/mem обеспечивает хороший способ получить доступ к Вашей физической памяти, точно так же, как Вы делаете это от пространства ядра.

, Когда люди говорят о движении к RTOS, я обычно скептически настроен. В эти дни процессор так мощен, что большую часть времени, аспект в реальном времени становится незначительным.

, Но даже, скажем, Вы имеете дело с SONET, и необходимо сделать защитное переключение в 50 мс (на самом деле еще меньше, так как 50 мс ограничивают, относится к целому кольцу), все еще можно сделать переключение очень быстро, ЕСЛИ поддержка оборудования это.

Партии создателя в эти дни могут дать Вам поддержку оборудования, которая уменьшает сумму записей, которые необходимо сделать. Ваше задание, в основном отвечает на прерывание как можно быстрее. И Linux не плох вообще. Задержка прерывания, которую я получил, составляла меньше 1 мс, даже если у меня есть тонны другого выполнения прерываний (например, IDE, Ethernet, и т.д.).

И если это все еще не достаточно, затем возможно, Ваш аппаратный дизайн является неправильным. Некоторые вещи лучше оставляют на аппаратных средствах. И когда я сказал, что аппаратные средства, имею в виду ASIC, FPGA, Сетевой процессор или другую усовершенствованную логику.

3
ответ дан 27 November 2019 в 22:26
поделиться

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

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

1
ответ дан 27 November 2019 в 22:26
поделиться

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

Да, мог бы звучать резким, но это точно, что я имел в виду, если Вы не знаете, затем почти уверены ответ, не, не делайте этого в ядре. Перемещение Вашей разработки к пространству ядра открывает гигантскую кучу проблем, которую, несомненно, необходимо будет смочь обработать.

0
ответ дан 27 November 2019 в 22:26
поделиться

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

модули Ядра могут быть быстрее (из-за меньшего количества контекстных переключений, меньше системного вызова наверху и меньше прерываний), и конечно делают выполненный в очень высоком приоритете. Если Вы хотите экспортировать небольшой объем довольно простого кода в пространство ядра, это могло бы быть в порядке. Таким образом, если маленькая часть кода, как находят, крайне важна для производительности, и вид кода, который извлек бы выгоду из того, чтобы быть помещенным в привилегированный режим, затем это может быть выровнено по ширине для размещения его туда.

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

-1
ответ дан 27 November 2019 в 22:26
поделиться

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

-4
ответ дан 27 November 2019 в 22:26
поделиться

Я не уверен, что вопросом является правильный путь вокруг. Должно быть серьезное основание переместить вещи в пространство ядра. Если нет никаких причин, не делайте этого.

, С одной стороны, отладка сделана более трудной, и эффект ошибок намного хуже (катастрофический отказ/паника вместо простого coredump).

8
ответ дан 27 November 2019 в 22:26
поделиться
Другие вопросы по тегам:

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