Názor ke článku To nevymyslíš od LO - [50] Tak ještě jednou: starší verze Windows byly...

  • 16. 1. 2008 16:24

    LO (neregistrovaný)

    [50] Tak ještě jednou: starší verze Windows byly POSIX compliant. Pochopitelně pouze jejich POSIX subsystem. Novější verze jsou POSIX compliant po instalaci Services for UNIX (sloučený POSIX subsystem a Interix).

    Když o volání API nic nevíte (stejně jako o kernelech, a většině dalších věcí), zkusme si to vysvětlit. Windows mají vrstvu HAL (Hardware Abstraction Layer), která řeší věci specifické pro daný HW. Nad ní běží kernel. Ten má architekturu modifikovaného mikrokernelu, což vám nic neříká, tedy to můžeme přeskočit :). Většina volání API z aplikace nakonec propadne na kernel, stejně jako v unixech většina volání API skončím nějakým syscallem (otevření souboru, spuštění procesu, alokace paměti apod, jedno volání API vyústí v 0-mnoho volání kernelu). Nad kernelem stojí jednotlivé subsystémy. Ty poskytují API vyšší úrovně abstrakce. Jedním subsystémem je Win32. Jde o sadu knihoven, které poskytují řadu funkcí (systémové služby včetně IPC, memory managementu, fiel services apod; administrace; grafika a multimédia; komponentové služby; diagnostika; uživatelský interface včetně konzole). Aplikace je vždy psaná pro daný subsystém, například pro Win32, a s kernelem nekomunikuje (obdobně na unixu aplikace pracuje s libc). V případě POSIX subsystému jde o implementaci libc a dalších unixových API. Na unixech tyto knihovny (obdobně jako Win32) něco vyřídí samy, a zbytek propadá na kernel formou syscallů. Ve Windows POSIX subsystem nepoužívá syscally, ale API Windows kernelu.

    Pro ilustraci Win32 API CreateFile (implementované v System Services) po úpravě parametrů "propadá" na volání kernelu NtCreateFile (číslo služby je 0x25, to přijde do registru EAX, poté INT 2Eh, nebo SYSENTER - detaily jsou mimo rámec příspěvku). V případě většiny unixů volání API open propadne na syscall číslo 5 (konstanta SYS_open), což efektivně znamená číslo služby do EAX a poté volání INT 80h nebo SYSENTER. V případě Windows POSIX subsystemu unixové volání open propadne na volání NT kernelu NtCreateFile.

    Výše uvedenému asi nerozumíte (ani přes hrubé zjednodušení, kterého jsem se dopustil), takže to zkusím shrnout. POSIX je ve Windows Services for UNIX implementovaný v zásadě stejně, jako je ve Windows implementované Win32 API. Vaše "běží plně pod diktatůrou Widlí", "simuluje samostatný počítač, včetně hardware, na němž běží unixový sistém", "moc nechápu co s tímhle má společného volání API na různých platformách" a podobné výroky jsou pro diskuzi o tématu zcela diskvalifikující (a vzbuzují pochybnosti, jestli máte ukončenou základní školu; samozřejmě to může být disgrafie). Ukazují, že neznáte vnitřnosti Windows, ale ani unixů.

    Balíček Services for Unix obsahuje řadu utilit, překladač, a na svém stroji jsem měl i jednoduchý balíčkovací systém (nevím jestli je součástí instalace). Samozřejmě aplikace pro SFU na webu jsou. Pokud chcete, aby zákanzíci migrovali z unixů na SFU, musíte jim nabídnout prostředí, do kterého mohou své POSIX-based aplikace převést.