LINUX.ORG.RU
ФорумTalks

Каким образом 32-битная Mac OS запускает 64-bit программы??!

 


0

2

Продолжаю изучать Mac OS, так вот, версия Snow Leopard, имея 32-bit+PAE ядро, запускает 64-bit программы! Я не шучу!

Это как вообще? Это вообще законно?



Последнее исправление: Quasar-Napilnik_CPY (всего исправлений: 1)

Ты просто всё напутал, насколько я понял, у Mac OS X 10.6 обычное 64-битное ядро идет вместе с 32-битным, и в зависимости от машины, грузится нужное. А вот ПО и билиотеки частично 32 бита, а частично 64.

Linux тоже такое умеет. Ты спокойно можешь не только в 64-битном Linux запускать 32-битные приложения при наличии нужных 32-битных библиотек, но и вообще на 64-битном ядре запускать полностью 32-битное окружение, такое называется химера.

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

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

Проверено лично на x86_64 и на armv8.

GPFault ★★
()
Ответ на: комментарий от Quasar-Napilnik_CPY

А как именно битность ядра определяется? В линуксе через uname -a видно, как на маке - не знаю.

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

GPFault ★★
()
Ответ на: комментарий от Quasar-Napilnik_CPY

Ещё есть вариант что софт собран под несколько архитектур сразу, на маке такое можно былот делать. Типа библиотеки с разными архитектурами в одном пакете приложения поставляются

GPFault ★★
()

Вот еще пишут на сайте Apple:

That’s normal. The kernel can boot 32 or 64 bit. But all 64 bit software, system or third party, can still run 64 bit under a 32 bit kernel.

https://discussions.apple.com/thread/3521151

64-bit софт работает на 32-bit ядре у Apple! (полноценное 64-bit ядро тоже есть, и в него можно загрузиться, по-умолчанию оно отключено)

Quasar-Napilnik_CPY
() автор топика
Ответ на: комментарий от Quasar-Napilnik_CPY

Нет. У меня 32-bit ядро, точно! И на нем точно работают 64-bit программы!

Значит ядро переходит в 64-й битный режим.

Ну не доступно из 32-битного режима ничего 64-битное, ни команды, ни регистры, ни адресация. При попытке заюзать там даже не Invalid Opcode будет, а тупо другие команды. Опкод 64-битного префикса для команд - это BCD-команды двоично-десятичной арифметики в ia32. Ими пожертвовали в 64-битах как крайне мало востребоваными.

praseodim ★★★★★
()
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от praseodim

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

GPFault ★★
()

Это вообще законно?

Лучше так не делать, чудес не бывает, огребешь проблем

I-Love-Microsoft ★★★★★
()

Cpuinfo покажи. Если железка не поддерживает 64, то такое не может быть! Нет такой эмуляции, если только проц в будущее на машине времени не слетает ну или через виртуалку какую-нибудь очеь хитрую.

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

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

Много указателей от юзерспейса (пусть и преобразованных в соответствие с таблицами страниц ядра) долетает до конкретных драйверов? Зиро копи довольно малораспространённая вещь. Обычно копируется в буферы ядра, которые уже можно посадить в физически первых 4 ГБ.

utf8nowhere ★★★
()

Это как вообще? Это вообще законно?

Почему работа 32-битных приложений на 64-битном ядре законна, а наоборот (при условии что сам CPU 64-битный) — нет? Единственно что это прослойка для согласования отображения памяти из 64-битного режима в 32-битный может быть посложнее чем наоборот.

utf8nowhere ★★★
()
Последнее исправление: utf8nowhere (всего исправлений: 1)
Ответ на: комментарий от praseodim

Значит ядро переходит в 64-й битный режим.

При возврате контроля приложению, а в начале сискола — обратно.

utf8nowhere ★★★
()

Это как вообще? Это вообще законно?

А в чём проблема? Ядру насрать какие указатели у тебя в юзерспейсе. То, что лялексовое ядро для указателей в юзерспейсе использует тот же тип, что и для своих, это проблемы именно лялекса. Никто не мешает тебе для пользовательских указателей даже в 32-битном ведре гонять uint64_t.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от Quasar-Napilnik_CPY

64-bit софт работает на 32-bit ядре у Apple!

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

полноценное 64-bit ядро тоже есть, и в него можно загрузиться, по-умолчанию оно отключено

Ага, переключается одной командой.

anc ★★★★★
()

да, действительно Mac OS X может запускать 64 bit application в 32 bit OS на 64 bit железе. Ядро OS X (Darwin) на самом деле запускается в режиме совместимости с long mode (https://en.wikipedia.org/wiki/Long_mode). Как работает этот режим совместимости пусть расскажет кто-нибудь из тех, кто программит.

А бинарник Darwin просто напросто содержит две части: для загрузки в режиме 32bit и 64bit.

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 3)
Ответ на: комментарий от utf8nowhere

У него при слове Apple соображалка отключается.

Фанатик, что с него взять. А так действительно macOS могла это. Хотя сейчас это никому не надо уже давным-давно.

fornlr ★★★★★
()
Ответ на: комментарий от Quasar-Napilnik_CPY

i386 не означает что у тебя 32битное ядро, а означает что у тебя intel архитектура

zgen ★★★★★
()

Там ядро использует long mode. Короче, оно архитектуры x86-64, пусть и исполняет 32бит код.

Zyy
()
Последнее исправление: Zyy (всего исправлений: 1)
Ответ на: комментарий от Quasar-Napilnik_CPY

Вот только https://ru.wikipedia.org/wiki/X86-64

В случае ARM справедливо https://ru.wikipedia.org/wiki/ARM_(архитектура)#ARMv8_и_набор_команд_ARM_64_бита

А то что там у вас в apple обзывают 32 битным ядром либо не совсем ядро, либо не совсем 32 битное, благо исключительно 64-битные процы всякую дичь разрешают (а apple только на специфическом оборудовании работает), вроде 64 битных ядер, которые будут вести себя как 32-битные при определённых условиях.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

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

anc ★★★★★
()
Ответ на: комментарий от Quasar-Napilnik_CPY

ну значит побочные эффекты какие вылезут с переполнением чисел когда после 2^31-1 отрицательное число будет

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

процы всякую дичь разрешают (а apple только на специфическом оборудовании работает)

Это ты про Core 2 Duo??
Может имеешь в виду PowerPC?
Чего??!

Quasar-Napilnik_CPY
() автор топика

Это вообще законно?

Что есть Истина? (c)

pacify ★★★★★
()
Ответ на: комментарий от Quasar-Napilnik_CPY

Я про то что любой 64 битный проц (почти каждой архитектуры) может работать как 32 битный, но наоборот это не работает.

А если проще, то тебе всё уже написали и не раз. Поскольку у apple торчит узкий набор процессоров, то на всех 64-битных можно ставить ядро, которое на самом деле 64-битное, но может притворяться 32-битным. Но когда ты то «32 битное» ядро попытаешься на 32-битном проце запустить, то оно не заработает и никакие 64 битные программы там тоже не запустятся.

Каким образом 32-битная Mac OS запускает 64-bit программы??! (комментарий)

Так что да, маркетинговый буллшит.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 3)
Ответ на: комментарий от peregrine

long mode — это только часть ответа. В линуксе, например, такое невозможно в принципе — 64-битное приложение захочет 64-битную libc, которая в ядро заходит по syscall. А 32-битное ядро такого не понимает. XNU же с юзерспейсом общается сообщениями, поэтому битность ядра не важна. Второй финт ушами — libsystem является universal binary, то есть содержит в себе и i386 часть и x86_64, что позволяет к ней линковаться как 32-битным приложениям, так и 64-битным (аналог multilib).

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

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

Я об таком, только на презентации AMD слышал, неужели такой режим в реальности кто-то использует?

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

в линукс-userspce такое есть и называется платфрома x32. Поддерживается компилятороами, многие пакеты есть в нестабильном debian sid - https://packages.debian.org/sid/libc6

Имеет смысл только в задачах «гонять очень много микросервисов на большом сервере», каждый из них жрёт сильно меньше 4ГБ, но суммарно упираются в память. Для крупных корпров, которым поддержка непопулярнуой архитектуры отобьётся более эффективным использованием огромной кучи одинаковых серверов.

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

мда профит был бы если его тогда (презентация была 2006г) на десктопе пустили количество регистров х64, а расход памяти как у х86, я долго на дуалбуте сидел debian-x86, debian-x64 с общим хомяком и ключи в /etc/ssh дублировал, чтобы при подключении к домашней машине ssh не ругался, два года назад от этой практики отказался.

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