Balancer> Очень сомневаюсь, что также
Balancer> 16-битные приложения работали в отдельных VM.
Balancer> А 32-хбитные, думаю (могу ошибаться) работают просто в отдельных сегментах.
Balancer> Кто прояснит этот вопрос? [»]
Вообще-то, они могут работать бок-о-бок.
Там есть отдельный 64 битный режим, но на нем можно запускать 32 битные программы.
Вот цитатик:
Like all x86 processors, AMD64 chips power up in real mode, and it's up to to the operating system to shift it into 32-bit protected mode or into 64-bit "long" mode (as AMD calls it). This flexibility ensures that desktops and servers have full compatibility with 32-bit Windows, Linux, FreeBSD, NetWare and other operating system. The shift to 64-bit functionality is enabled by a 64-bit-aware operating system during its own bootstrap process. At that point, pointers can be 64-bits in length, the register extensions and the REX prefix become enabled, the extra quadword and double quadword data types turn on... you get the idea.
But that doesn't mean that every application, running in long mode, has to be a 64-bit app. Because the AMD64 microarchitecture uses the same instructions for 64-bit computing as it uses for 32-bit operations—with just a special prefix for the 64-bit operations—classic 32-bit applications run natively on an AMD64 processor (using a submode of long mode called "compatibility mode") without any modifications, taking advantage of a transparent thunking layer that implements 32-bit calls by translating parameters as necessary, and then calling the 64-bit kernel. As far as the user is concerned, it's just load-and-go. Performance is increased: According to AMD, the extra efficiencies of the 64-bit kernel are such some 32-bit applications will actually run faster on a 64-bit operating system than they will on a 32-bit OS.
While an individual 32-bit app is still limited to a 4GB address space, the operating system and microarchitecture can provide an exclusive address space for that 32-bit app and its data—and don't need to share that address space with the OS kernel, page tables or other apps. Thus, 32-bit Windows apps that are "large address aware" will immediately gain in scalability when running within a 64-bit operating system on the AMD64 architecture. Sweet.
The only limitations are that a 64-bit application must be loaded by a 64-bit operating system, and that an individual application can't mix 32-bit and 64-bits; it has to be one or the other. Of course, a 64-bit operating system can run both 32-bit and 64-bit processes at the same time, and in fact, those processes can use the OS's own interprocess communications structures to pass data between each other. So, a 32-bit legacy user-interface app can use ODBC or JDBC calls to work with a new 64-bit database, all running on the same 64-bit operating system.
In fact, where it's appropriate, you might gain real benefits from intentionally running both 32-bit and 64-bit apps at the same time. Because there's no performance hit, you can choose the instruction set for each application that best suits your needs: 64-bit for greater scalability and 16-byte data operations, and 32-bit for smaller binaries and compatibility with older x86 hardware.
Try that with another 64-bit processor. Only AMD64 processors give you the power of 64-bit computing and zero-compromises compatibility with the familiar 32-bit x86 microarchitecture. AMD may be the new kid on the 64-bit block... but they got it right.
Если кто интересуется программированием AMD64, рекомендую:
developer; dev; development; developing; devcenter; devcentral; developer tools; forums; online community; x86; resource; support; support; AMD APP SDK; GPGPU; APU; heterogeneous computing
// www.amd.com
А по теме - эмулятор нужен хотя бы на уровне API. Без слоя, который транслирует старые 32 битные данные в новые 64 битные, никак не обойтись. Представим себе, например, некую API функцию sum, которая в ХР-32 имеет вид:
int32 sum(int32 a, int32 b);
а в ХР-63, соответственно:
int64 sum(int64 a, int64 b);
Чтоб 32 битная программа выполнялась корректно на 64 бит ОС, то нужен промежуточный слой:
code text
int32 sum(int32 a, int32 b)
{
int64 a64, b64;
a64 = a32; b64=b32;
return sum(a64, b64);
}