Каким образом ядро на 32 бита может выполнить двоичный файл на 64 бита?

НЕ ИСПОЛЬЗУЙТЕ ЩЕЛЧОК СЛУЧАТЕЛЕЙ В КЛАССЕ ВИДЕОХОЗЯЙКА

он всегда будет возвращать ноль, поскольку не инициализируется.

Используйте прослушиватели щелчков в методе onBindViewHolder () Адаптера просмотра.

25
задан Chris Hanson 9 September 2008 в 07:33
поделиться

6 ответов

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

MacOS X ядер непосредственно не разыменовывают указатели из пользовательского приложения так или иначе, поскольку это находится свое собственное отдельное адресное пространство. Указатель пространства пользователя в вызове ioctl, например, должен сначала быть разрешен к его физическому адресу и затем новому виртуальному адресу, созданному в адресном пространстве ядра. Действительно не имеет значения, был ли тот указатель в ioctl 64 битами или 32 битами, ядро не разыменовывает его непосредственно ни в одном случае.

Настолько смесительное ядро на 32 бита и двоичные файлы на 64 бита могут работать, и наоборот. Вещь, которую Вы не можете сделать, смешать библиотеки на 32 бита с приложением на 64 бита, поскольку указатели передали между ними, будет усеченным. MacOS X предоставлений больше ее платформ в обеих версиях на 32 и 64 бита в каждом выпуске.

44
ответ дан 28 November 2019 в 18:29
поделиться

Это не ядро, которое выполняет двоичный файл. Это - процессор.

двоичный файл действительно называет библиотечные функции, и те должны быть 64 бита. И если они должны сделать системный вызов, это - их обязанность справиться с тем, что они сами - 64 бита, но ядро - только 32.

, Но это не что-то, о чем необходимо было бы волноваться.

6
ответ дан 28 November 2019 в 18:29
поделиться

Обратите внимание, что не весь 32-разрядные ядра способны к выполнению 64-разрядных процессов. Windows, конечно, не имеет этого свойства, и я никогда не видел сделанный на Linux.

6
ответ дан 28 November 2019 в 18:29
поделиться

Ядро на 32 бита, которое способно к загрузке и рабочим двоичным файлам на 64 бита, должно иметь код на приблизительно 64 бита для обработки размещения в ОЗУ, загрузки программы и нескольких других проблем на 64 бита.

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

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

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

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

-Adam

2
ответ дан 28 November 2019 в 18:29
поделиться

Для ядра, чтобы быть 64-разрядным только принес бы эффективное преимущество, что расширения ядра (т.е. обычно драйверы) могли быть 64-разрядными. На самом деле у Вас должны были бы быть или все 64-разрядные расширения ядра, или (как имеет место теперь), все 32-разрядные; они должны быть собственными к архитектуре рабочего ядра.

0
ответ дан 28 November 2019 в 18:29
поделиться

Файл ELF32 может содержать 64-битные инструкции и работать в 64-битном режиме. Единственное, что он имеет, это то, что организация заголовка и символов в 32-битном формате. Смещения таблицы символов - 32 бита. Записи в таблице символов имеют ширину 32 бита и т. Д. Файл, содержащий как 64-битный, так и 32-битный код, может быть представлен как 32-битный файл ELF, если он использует 64-битные регистры для своих внутренних вычислений. mach_kernel - один из таких исполняемых файлов. Его преимущество в том, что с ним можно связать 32-битные драйверы ELF. Если он позаботится о передаче указателей, расположенных ниже 4 ГБ, в другие связанные двоичные файлы ELF, он будет работать нормально.

1
ответ дан 28 November 2019 в 18:29
поделиться
Другие вопросы по тегам:

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