что такое повторно используемое ядро

То, что сказал Уилл, было правильно

R - это автоматически сгенерированный класс, который содержит константы, используемые для идентификации ваших> ресурсов. Если у вас нет файла R.java (это будет gen / eu.mauriziopz.gps / R.java в> Eclipse с 1.5 SDK), я бы порекомендовал закрыть и снова открыть ваш проект или перейти в> Project> Build all (и выбрав «Автоматически строить», пока есть рекомендация> Йозеф). Если это не сработает, попробуйте создать новый проект, если проблема будет воссоздана, чем> опубликуйте здесь снова, и мы углубимся в детали.

но я узнал, что была другая проблема, которая вызывала первую. У инструментов в каталоге SDK не было разрешений для выполнения, поэтому он был как будто не существует для Eclipse, поэтому он не создавал файл R.java.

Таким образом, изменение разрешения и выбор «Построить автоматически» решили проблему.

26
задан casperOne 5 April 2012 в 14:16
поделиться

3 ответа

Гораздо более простой ответ:

Повторный вход в ядро ​​

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

Повторно входящее ядро ​​позволяет процессам (или, точнее, их соответствующим потокам ядра) отдавать ЦП в режиме ядра. Они не мешают другим процессам также войти в режим ядра. Типичный вариант использования - ожидание ввода-вывода. Процесс хочет прочитать файл. Для этого он вызывает функцию ядра. Внутри функции ядра у контроллера диска запрашиваются данные. При повторном входе в ядро ​​планировщик назначит ЦП другому процессу (потоку ядра) до тех пор, пока прерывание от контроллера диска не укажет, что данные доступны, и наш поток может быть возобновлен. Этот процесс все еще может получить доступ к вводу-выводу (который требует функций ядра), как и пользовательский ввод. Система остается отзывчивой, и потери процессорного времени из-за ожидания ввода-вывода сокращаются.

Это в значительной степени стандарт для современных настольных операционных систем.

Преимущество ядра

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

Идея заключается в том, что обычно функции ядра прерываются только по аппаратным причинам: либо внешние прерывания, либо случаи ожидания ввода-вывода, когда они добровольно передают управление планировщику. Упреждающее ядро ​​вместо этого также прерывает и приостанавливает функции ядра так же, как оно прерывает процессы в пользовательском режиме. Система более отзывчива, так как процессы, например, обрабатывающие ввод с мыши, просыпаются, даже когда внутри ядра выполняется тяжелая работа.

Упреждение на уровне ядра усложняет задачу разработчика ядра: функция ядра не может быть приостановлена ​​только добровольно или обработчиками прерываний (которые в некоторой степени являются контролируемой средой), но также и любым другим процессом из-за планировщика. Следует проявлять осторожность, например, чтобы избежать взаимоблокировок: поток блокирует ресурс A, но ему нужен ресурс B, который прерывается другим потоком, который блокирует ресурс B, но затем ему нужен ресурс A.

Воспринимайте мое объяснение упреждения с долей скептицизма. . Я рад любым исправлениям.

просыпаются даже тогда, когда внутри ядра выполняется тяжелая работа.

Упреждение на уровне ядра усложняет задачу разработчика ядра: функция ядра не может быть приостановлена ​​только добровольно или обработчиками прерываний (которые в некоторой степени являются контролируемой средой) , но также и любым другим процессом из-за планировщика. Следует проявлять осторожность, например, чтобы избежать взаимоблокировок: поток блокирует ресурс A, но ему нужен ресурс B, который прерывается другим потоком, который блокирует ресурс B, но затем ему нужен ресурс A.

Воспринимайте мое объяснение упреждения с долей скептицизма. . Я рад любым исправлениям.

просыпаются даже тогда, когда внутри ядра выполняется тяжелая работа.

Упреждение на уровне ядра усложняет задачу разработчика ядра: функция ядра не может быть приостановлена ​​только добровольно или обработчиками прерываний (которые в некоторой степени являются контролируемой средой) , но также и любым другим процессом из-за планировщика. Следует проявлять осторожность, например, чтобы избежать взаимоблокировок: поток блокирует ресурс A, но ему требуется ресурс B, который прерывается другим потоком, который блокирует ресурс B, но затем ему требуется ресурс A.

Воспринимайте мое объяснение упреждения с долей скептицизма. . Я рад любым исправлениям.

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

Воспринимайте мое объяснение упреждения с долей скептицизма. . Я рад любым исправлениям.

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

Воспринимайте мое объяснение упреждения с долей скептицизма. . Я рад любым исправлениям.

23
ответ дан 28 November 2019 в 07:31
поделиться

Все ядра Unix реентерабельны. Это означает, что несколько процессов могут выполняться в режиме ядра одновременно. Конечно, в однопроцессорных системах может выполняться только один процесс, но многие из них могут быть заблокированы в режиме ядра при ожидании процессора или завершения некоторой операции ввода-вывода. Например, после выполнения чтения на диск от имени процесса ядро ​​позволяет контроллеру диска обрабатывать его и возобновляет выполнение других процессов. Прерывание уведомляет ядро, когда устройство удовлетворило чтение, так что первый процесс может возобновить выполнение.

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

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

Теперь давайте ' s посмотреть на повторный вход ядра и его влияние на организацию ядра. Путь управления ядром обозначает последовательность инструкций, выполняемых ядром для обработки системного вызова, исключения или прерывания.

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

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

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

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

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

Эта информация доступна на http://jno.glas.net/data/prog_books/lin_kern_2.6/0596005652/understandlk-CHP-1- SECT-6.html

Подробнее на http: // linux. omnipotent.net/article.php?article_id=12496&page=-1[1237 impression

11
ответ дан 28 November 2019 в 07:31
поделиться

Ядро - это основная часть операционной системы, которая напрямую взаимодействует с оборудованием и планирует запуск процессов.

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

Повторно входящее ядро ​​обеспечивает лучшую производительность, потому что нет конкуренции для ядра. Ядро, которое не является реентерабельным, должно использовать блокировку , чтобы убедиться, что никакие два процесса не выполняют код ядра одновременно.

3
ответ дан 28 November 2019 в 07:31
поделиться
Другие вопросы по тегам:

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