Что именно является подсистемой? - PullRequest
1 голос
/ 26 апреля 2011

Я читаю книгу, в которой говорится, что существуют следующие подсистемы:

win32,os/2,posix,etc..

Но у меня нет никаких перцептивных знаний с этими обозначениями, вы можете объяснить это короткими словами?

Ответы [ 3 ]

3 голосов
/ 21 ноября 2013

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

Согласно документации MSDN :

Подсистемы среды - это процессы Windows NT, которые эмулируют различные среды операционной системы. Руководитель Windows NT предоставляет общие службы, которые могут вызывать все подсистемы среды для выполнения основных функций операционной системы.

Windows Internals book говорит о следующих двух подсистемах:

  • Подсистема Windows о которой она говорит - «эта [подсистема] особенная в том, что Windows не может работать без нее. (Она владеет клавиатурой, мышью и дисплеем, и она должна присутствовать даже на серверных системах без входа в систему интерактивных пользователей. На самом деле две другие ( какие две? ) подсистемы настроены на запуск по требованию, тогда как подсистема Windows всегда должна быть запущена. "
  • Подсистема для Unix-приложений, также известная как SUA [ POSIX ] Подсистема

Теперь параметр / SUBSYSTEM, который можно отправить в компоновщик Microsoft VS C ++ в его документации , говорит, и я цитирую

Вы можете указать любую из следующих подсистем:

BOOT_APPLICATION Приложение, которое работает в среде загрузки Windows. Для получения дополнительной информации о загрузочных приложениях см. О поставщике BCD WMI.

CONSOLE Приложение в текстовом режиме Windows. Операционная система предоставляет консоль для консольных приложений.

Изображение расширяемого интерфейса прошивки (EFI) Параметры подсистемы EFI описывают исполняемые образы, которые запускаются в среде Extensible Firmware Interface. Эта среда обычно поставляется вместе с оборудованием и выполняется до загрузки операционной системы. Основными различиями между типами изображений EFI являются расположение в памяти, в которое загружается изображение, и действие, которое выполняется при возврате вызова к изображению. Изображение EFI_APPLICATION выгружается при возврате элемента управления. EFI_BOOT_SERVICE_DRIVER или EFI_RUNTIME_DRIVER выгружается, только если элемент управления возвращается с кодом ошибки. Образ EFI_ROM выполняется из ПЗУ. Для получения дополнительной информации см. Спецификации на веб-сайте Unified EFI Forum.

NATIVE Код, который выполняется без подсистемной среды, например, драйверы устройств режима ядра и собственные системные процессы. Этот параметр обычно зарезервирован для системных функций Windows.

POSIX Приложение, которое работает в подсистеме POSIX в Windows.

WINDOWS Приложение, которое работает в графической среде Windows. Это касается как настольных приложений, так и приложений Магазина Windows.

WindowsCE Подсистема WINDOWSCE указывает, что приложение предназначено для запуска на устройстве с версией ядра Windows CE. Версии ядра включают PocketPC, Windows Mobile, Windows Phone 7, Windows CE V1.0-6.0R3 и Windows Embedded Compact 7.

Итак, поехали. Наконец, люди иногда говорят о подсистеме «Win32», которую я не знаю, следует ли мне понимать «подсистему« windows »или« консольную »подсистему в смысле опции компоновщика.

Возвращаясь к книге Windows Internals, в ней также говорится, что «каждый исполняемый образ (.exe) привязан к одной и только одной подсистеме», что объясняет необходимость указания подсистемы, для которой ваше приложение предназначено во время компоновки.

0 голосов
/ 31 декабря 2016

Windows, начиная с NT (NT 3.1), способна поддерживать семантику различных операционных систем (или семейств ОС), которые существовали в то время (1993). Microsoft назвала их Подсистемами (сегодня они, вероятно, назовут их слоями эмуляции).

При связывании с подсистемой она решает, какой будет ваша семантика. Например, для подсистемы Win32 имена файлов не чувствительны к регистру (foo.txt и fOo.Txt относятся к одному и тому же файлу), а файлы устройств (например, con или nul) существуют в каждом каталоге. Для подсистемы POSIX имена файлов чувствительны к регистру, а файлы устройств существуют только в одном месте. Связывая существующие (унаследованные) приложения с подсистемой, отличной от Win32, эти приложения «чувствуют» больше как соответствующие операционные системы, и работа по переносу сокращается.

Если вы хотите знать подсистему EXE / DLL, вы можете открыть ее в DependencyWalker - если она (прямо или косвенно) зависит от KERNEL32.DLL, это подсистема Win32, если она (напрямую) зависит от NTDLL.DLL это собственная подсистема (обратите внимание, что сама KERNEL32.DLL будет зависеть от NTDLL.DLL, обеспечивая уровень совместимости для подсистемы Win32).

Это в основном устарело сегодня. Я говорю в основном потому, что Microsoft включила новую «подсистему Linux» в обновление для Windows 10 Anniversary (которая является подсистемой, такой как Native, Win32 или POSIX), которая ведет себя в двоичном эквиваленте для Linux, что упрощает компиляцию приложений Linux для запуска в Windows ( точнее, его подсистема Linux).

Коммутатор компоновщика /SUBSYSTEM начал делать то же самое, но позже был расширен дополнительными опциями (/SUBSYSTEM:CONSOLE также компилируется для подсистемы Win32, но приложение выделяет консольное окно, если оно не наследует одно из своих родительский процесс, /SUBSYSTEM:EFI_APPLICATION скомпилирует исполняемый файл, который вообще не может работать в Windows, но будет работать в среде загрузки с расширяемым интерфейсом прошивки (EFI / UEFI) и т. д.).

0 голосов
/ 26 апреля 2011

Может быть полезно, если бы мы знали, на какую книгу вы ссылаетесь!

В более общем смысле, Win32 (32-разрядная версия Windows, т.е. Windows NT 3.5 или более поздняя версия), OS / 2 и семейство POSIXвсе операционные системы .(POSIX - это стандартное семейство API-интерфейсов для UNIX-подобных операционных систем - подробнее см. здесь .)

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

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

...