Linux срещу Windows – първа част
Windows и Linux са безспорно най-коментираните операционни системи последните 4-5 години. Тук няма да пиша, за това коя е по-удобна, красива и т.н. По-скоро ще отбележа и коментирам някои технически характеристики.
За начало ще отбележа, че под операционна система (ОС) тук ще приема, че е системният софтуер, който се грижи за управлението на ресурсите в компютърната система. Ресурсите могат да бъдат, както хардуерни (процесор, оперативна памет, шина, порт и т.н.), така и софтуерни (програми). Шелове, компилатори и системни библиотеки ще бъдат съвсем бегло споменати. Друго, което искам да отбележа е, че ще разглеждам ядрата на операционните системи по-често не по имената им, а по номерът им. Например Windows 6.0 отговаря на Windows Vista и Windows Server 2008, Windows 6.1 на Windows 7 и т.н. Когато пиша за Windows ще е предимно за десктоп версии и на места ще отбелязвам разлики със сървърните. Ще разглеждам предимно Windows с ядра 6.0 и 6.1 и Linux след 2.6.28. Когато коментирам други версии ще отбелязвам.
На архитектурно ниво двете ОС са колкото различни, толкова и подобни. Не е голяма грешка да се каже, че двете са с монолитни ядра. Разбира се според Microsoft Windows не е монолитна операционна система, а хибридна и съчетава добрите качества на микроядрата и монолитните. Както Linux, така и Windows осигуряват голяма абстракция от хардуера. Ядрата им са сравнително големи за микроядра, въпреки че позволяват зареждане на модули (драйвери) по време на работа. Въпреки, че всеки модул е отделен, всички се изпълняват в едно пространство – на ядрото. Това е основен недостатък на монолитните ядра – възможно е при грешка на един от модулите да доведе до неработоспособност цялата система. От гледна точка на сигурността на теория микроядрото трябва е много по-сигурно от монолитното. Практиката доказа друго – имплементирането на добър монолитен дизайн може да бъде достатъчно сигурен. Най-големият плюс на монолитните е сравнително по-лесното имплементиране и по-високата производителност. Двете ОС позволяват зареждане на модули от потребителско пространство, но Linux има възможност за зареждане на модули за файлови системи, докато в Windows не ми е известна такава възможност без ползване на външен софтуер.
Твърди се, че Windows е изцяло обектно-ориентирана операционна система. Аз лично не съм напълно убеден в това. Причината е, че не малка част от нея е написа на езикът C, а той не поддържа директно обектно-ориентирани конструкции.
От гледна точка на системни извиквания Linux предоставя около 330 (пиша по памет може да греша). При Windows са с около стотина повече. Приложно-програмният интерфейс (API) в Linux се нарича Linux, а в Windows се нарича WinAPI или Win32 (разликата с Win16 и Win64 не е голяма). Обикновено в Linux се говори за системни извиквания докато в Windows за библиотечни. В Linux основната библиотека, изпълняваща функцията на врапер е glibc. При Windows са C runtime, Win32 и Native API. Native в по-голямата си част е недокументирана. Разбира се Windows не поддържа Linux API, но Linux с инсталиран Wine поддържа Windows API. Linux поддържа POSIX API, а в Windows се инсталира допълнително.
Важен критерий при избор на операционна система е подръжката на хардуерни платформи. Windows поддържа единствено x86 и ADM64/x86_64. Linux поддържа почти всички известни. Двете ОС имат възможност за стартиране, както на еднопроцесорни машини, така и на многопроцесорни и многоядрени. Освен това са съвместими както с BIOS, така и с EFI. Единствената разлика е, че при Linux ядрото обикновено е файл с име vmlinuz и няма значение на какъв хардуер се стартира. При Windows не е така. При него файлът се казва NTOSKRNL.EXE на еднопроцесорна машина без PAE и NTOSKRNLPA.EXE с PAE. Когато системата е многопроцесорна без PAE се казва NTOSKRNLMP.EXE, съответно с PAE – NTOSKRNLPAMP.EXE. Всъщност не е точно така, тъй като в зависимост от лиценза, с който е закупен Windows може да е ограничен в броя на процесорите/ядрата, които използва.
Често се твърди, че силата на GNU/Linux е в конзолата. В първите години от развитието си наистина в Linux графичните среди отстъпваха по развитие и простота на Windows. Това вече не е така. Има поне 2 графични среди, които освен, че не отстъпват по нищо на Windows, а според мен са по-интуитивни и по-напреднали. Това са KDE и GNOME. Какво общо има това с ядрата ли? – Част от графичната система на Windows е в ядрото. Обикновено драйверите в Linux се пишат от общността и при желание се инсталират драйвери със затворен код на самите производители, тъй като те рядко пишат драйвери с отворен код. При Windows положението е съвсем различно – драйверите се пишат от производителите и рядко от ентусиасти.
Как става така, че можем да пускаме по няколко програми едновременно на един компютър? – Постига се с малка измама от страна на многозадачните операционните системи, каквито са Wndows и Linux. За това малко по-надолу. Когато се изпълнява една програма се нарича процес. Освен ресурсите, които притежава този процес, в него има най-малко една нишка. Според дефиницията на Sun нишката не e нищо повече от лек процес. При използване на нишки се пестят много ресурси. Най-вече това са памет (споделят големи пространства памет) и процесорно време (превключването между нишки може да бъде стотици, дори хиляди пъти по-бързо от процесите). В Windows нишката е единицата, за която се разпределя процесорно време. Тъй като Linux различава нишка и процес, но не прави разликa обикновено се говори за задача (task). В Linux моделът за реализиране на нишки е 1х1. Това значи, че всяка нишка от потребителското пространство отговаря на такава в пространството на ядрото. В Windows модела е MxN, което значи, че броят на нишките в двете пространства на паметта не съвпадат. Както стана ясно двете операционни системи поддържат нишки на потребителско и на ниво ядро. Според спецификацията на Microsoft нишките на потребителско ниво се наричат фибри.
Ако все още не сте се досетили как става така, че ползваме много програми едновременно, това става най-просто казано с многократно превключване между тях без да усетим. Това се извършва от т.нар. разпределител на процесорното време (също се нарича планировчик, подсистема за планиране или разпределяне на процесорното време и т.н.).Разпределителя на процесорното време е една от най-важните части на ОС и затова често бива обсъждан и сравняван с такъв на други операционни системи. Основната разлика към момента между подсистемата за планиране на процесора в Linux и Windows, е че първият е замислен за да бъде справедлив, докато втория е мултимедийно ориентиран. Двата са приоритетно ориентирани. Това значи, че една програма може да се изпълнява с по-висок приоритет от друга. Също така различават интерактивните задачи. Кога една задача е интерактивна? – Интерактивна е когато чака много входно-изходни операции, например Word от пакета МС Office, която чака вход от клавиатурата и мишката. Интерактивните задачи получават по-висок приоритет от интензивно натоварващите процесора. Интензивно натоварваща процесора задача може да бъде гледането или конвертирането на филм. Какво значи по-висок приоритет? – Това значи, че задачата ще има по-голям отрязък от време, в което използва процесера, освен това вероятно ще бъде по-често изпълнявана от по-ниско приоритетните. Целта е да не настъпи т.нар. “процесорен глад” и с горните два примера, ако пуснем едновремено да гледаме филм и да пишем текст, да не стане така, че писането да е невъзможно.
В Windows задачите се изпълняват от висок приоритет към нисък, докато при Linux редът на изпълнение на опашката със задачите е от приоритет означен с малка цифра към приоритет с по-голяма цифра. Приоритетите в Linux са от 0 до 139, а в Windows от 31 до 1 (0 е т.нар. празна нишка). Всяко приоритетно ниво има собствена опашка със задачи. Така не е проблем да има задачи с еднакъв приоритет. Тогава те се изпълняват в кръгова дисциплина и след това се преминава към следващото ниво.
В Linux съществуват 4 класа за планиране нa процесора, докато в Windows са само 2. Първият клас това са задачите с нормален приоритет. Повечето задачи са такива. В двете операционни системи тези приоритети са динамични. В Windows това са приоритени нива от 1 до 15, а в Linux от 100-139. Вторият е приоритет “реално време”. По принцип има два типа реално време – меко и твърдо. В Linux и Windows е реализирано единствено меко реално време. Разбира за Linux съществува пач, с който може да се добави поддръжка на твърдо реално време. При Windows положението е по -сложно. Windows NT независимо десктоп или сървър няма такава възможност – eдинствено Windows CE.
Публикувано на | April 9, 2010 | 9 Коментара