Время на прочтение7 мин
Количество просмотров111K
Введение
В последнее время наблюдается большой приток пользователей Linux. Как правило это люди уже имеющие вполне приличный опыт в общении с компьютером, но этот опыт в большинстве случаев ограничен одной системой. Естественно, что этой системой является самая распространенная на сегодня на дескотопах операционная система компании Microsoft MS Windows. Большое число пользователей Windows также ставят Linux, или запускают его с «Live CD» «на посмотреть».
И тут возникает сразу несколько проблем, связанных с тем, что новые пользователи Linux ожидают увидеть перед собой «еще один Windows». А Linux — это совсем не клон Windows, это совсем другая система, с другой основой, другими традициями, другими возможностями и другими требованиями к пользователю.
По моему убеждению именно это непонимание и является одним из источником такого количества так называемых «священных войн». Возможно данная статья позволит если не уменьшить количество таких войн, то хотя бы даст большее понимание позиций противников и снизит накал в войнах.
Очень глубоко лезть в устройство этих двух операционных систем нам, я думаю, ни к чему, будем рассматривать их в основном с точки зрения пользователя.
Экскурс в историю (очень краткий)
Для сравнения, думаю невредно освежить в памяти краткую историю сравниваемых операционных систем.
История Unix
Операционная система UNIX была создана еще до эры коммерческого софта. Она писалась инженерами, как система «для себя». Поэтому в нее были заложены передовые на то время концепции. В дальнейшем своем развитии при добавлении новых черт, обычно считалось, что делать нужно «правильно». Т.е. например если нужно было выбирать из двух решений, одно из которых было с инженерной точки зрения «неправильным», например повышало производительность сегодня, но могло принести затруднения в дальнейшем, как правило, такое решение отвергалось и выбиралось «правильное» решение, пусть и с определенной потерей производительности.
Первые версии UNIX были написаны на Ассеблере, затем система была переписана на СИ. Это дало системе уникальную переносимость. На PC UNIX был портирован, а точнее заново написан (Linux) сразу, как только развитие PC, а точнее выпуск PC на процессоре i386, позволило это сделать.
В 1985 году стартовал проект POSIX. Это стандарт на интерфейсы UNIX-подобных ОС. Во многом благодаря наличию такого стандарта, так быстро смог появится на свет и достигнуть зрелости Linux — свободная воплощение UNIX.
Развитие интернета с самого начала и до нашего времени неразрывно связано с серверами под управлением ОС UNIX. Сначала с коммерческими, а теперь все больше и больше со свободными.
С точки зрения коммерциализации развитие UNIX можно разделить на три этапа.
- Некоммерческое распространение в университетах.
- Распространение коммерческих UNIX систем.
- Появление свободных реализаций (Linux, FreeBSD) и вытеснение коммерческих систем (настоящий момент).
До появления системы X Window System UNIX была системой с текстовым интерфейсом, затем добавился графический, но традиционно текстовый интерфейс сохраняет важное значение.
Очень важно то, что UNIX с самого начала был многозадачной и многопользовательской системой. Т.е. на одной машине могут работать сразу несколько пользователей, и выполняться несколько программ одновременно.
Фирменной чертой всех UNIX-подобных ОС была и остается надежность.
Табличка:
Год | Событие | Комментарий | Разр | Многопольз. | Многозадачн. |
1971 | Первая версия UNIX | На ассемблере | 32 | Есть | Есть |
1973 | Третья версия UNIX | На Си | 32 | Есть | Есть |
1983 | TCP/IP | — | 32 | Есть | Есть |
1983 | Проект GNU стартовал | Подготовил свободную обвязку для UNIX- подобных ОС | 32 | Есть | Есть |
1984 | X Window System | Оконная система | 32 | Есть | Есть |
1985 | Стартовал проект POSIX | Стандарты интерфейсов UNIX-подобных систем | 32 | Есть | Есть |
1991 | Появление Linux | Первая свободная реализация ядра UNIX для PC, 32 разрядная, сеть | 32 | Есть | Есть |
1993 | Появление FreeBSD | Еще одна свободная реализация ядра UNIX для PC, 32 разрядная, сеть | 32 | Есть | Есть |
История Windows
Истоки зарождения операционной системы Windows следует искать в предшествующей ей операционной системе той же самой фирмы — DOS. Все операционные системы компании Microsoft, это прежде всего коммерческие проекты. Об этом нужно помнить всегда, особенно, когда стараешься понять истоки тех или других решений, как коммерческого плана, так и технического.
Первой ОС из этого семейства была DOS. Может показаться, что DOS собственно имеет косвенное отношение к обсуждаемому предмету. Но, многие традиции, база пользователей и разработчиков, их привычки, идут именно оттуда.
DOS была однозадачной однопользовательской операционной системой с текстовым интерфейсом. Первая версия Windows представляла собой нечто, негодное для работы и распространения не получила. Работать стало в Windows стало возможно, начиная с версии 3. В версии Windows For Workgroups 3.1 появилась возможность работы с сетью. Winodws серии 3 представляли собой запускаемую поверх DOS систему. Отличались невысокой надежностью.
В 1995 годы вышла новая версия — Windows 95. Код частично был 32 разрядным, частично 16 разрядным, встроенная сеть. По сравнению с Windows серии 3 это был серьезный шаг вперед. Повысилась надежность, но до надежности UNIX-подобных ОС было еще далеко. В качестве рабочей станции с натяжкой конечно, надежности хватало, в качестве сервера, нет. Позже были выпущены еще две ОС этой линии, Windows 98 и Windows Me. После этого линия была закрыта.
В 1993 году вышла новая версия — Windows NT 3.1. Это уже была полностью 32 разрядная система. Разработана она была с нуля, для ее разработки были наняты известные специалисты. Были внедрены новые концепции. Это подняло надежность почти до уровня надежности UNIX-подобных систем. Эта ОС уже могла работать в качестве сервера. Продолжение этой линии, операционные системы Windows 2000, Windows XP и Windows Vista.
ОС линии NT были многозадачными, начиная с Windows XP появилась и возможность работать нескольким пользователям, хотя и более ограниченная и гораздо менее удобная, чем у UNIX-подобных ОС.
Табличка:
Год | Событие | Комментарий | Разр | Многопольз. | Многозадачн. |
1981 | DOS | — | 16 | Нет | Нет |
1985 | Windows 1.0 | Надстройка над DOS | 16 | Нет | Нет |
1990 | Windows 3.0 | Надстройка над DOS | 16 | Нет | Есть |
1992 | Windows For Workgroups 3.1 | Надстройка над DOS, сеть | 16 | Нет | Есть |
1995 | Windows 95 | сеть | 16/32 | Нет | Есть |
1993 | Windows NT | сеть | 32 | с 1998 | Есть |
2000 | Windows 2000 | сеть | 32 | Есть | Есть |
2005 | Windows XP | сеть | 32 | Есть | Есть |
2007 | Windows Vista | сеть | 32 | Есть | Есть |
Техническое устройство с точки зрения пользователя
UNIX
С точки зрения пользователя UNIX устроен примерно так:
- Ядро. Работает с устройствами, управляет памятью и процессами.
- Текстовая подсистема, работа с системой через терминал. Причем для управления всеми возможностями ОС достаточно только текстовой подсистемы. Возможно вход через эту подсистему многих пользователей. Богатый набор как встроенных утилит, так и приложений, работающих в текстовом режиме.
- Графическая подсистема Xwindow. Запускается как процесс в системе.
- Система удаленного доступа в текстовом режиме. Позволяет полноценную работу с ОС в текстовом режиме. Потребляет мало ресурсов. Позволяет работать на сравнительно слабых компьютерах одновременно десяткам и сотням пользователей. Количество сессий ограничено ресурсами компьютеров.
- Система удаленного доступа в графическом режиме. Позволяет одновременно работать нескольким пользователям в графическом режиме. Количество сессий ограничено ресурсами компьютеров.
- Система передачи графического окна приложения на другой компьютер. Позволяет запустив приложение на одном компьютере, управлять им с другого компьютера, через окно приложения, передаваемое на этот другой компьютер. Количество сессий ограничено ресурсами компьютеров.
Windows
- Ядро. Работает с устройствами, управляет памятью и процессами, управляет графической подсистемой.
- Графическая подсистема. Обеспечивает интерфейс с пользователем. Приоритетная система для пользовательского интерфейса.
- Текстовая подсистема. Обеспечивает текстовый интерфейс с пользователем. Текстовый интерфейс весьма урезанный. Набор утилит текстового режима как встроенных, так и других производителей весьма куцый. Синтаксис и состав команд текстового режима меняется от версии к версии. Запускается только поверх графического режима.
- Система удаленного доступа. Появилась впервые, как встроенная в систему, в Windows NT Server 4.0. До этого были только продукты других фирм. В связи с тем, что запускается полноценная графическая сессия, кушает очень много ресурсов. Наличие системы удаленного доступа и количество одновременных сессий может вообще отсутствовать или быть ограничено в разных версиях из коммерческих соображений.
Сравнение концепций
Давайте теперь рассмотрим, чем отличается подход к работе в этих двух системах.
UNIX: Концепция «Toolbox»
Поскольку UNIX разрабатывалась инженерами и для инженеров, в ее основу была положена концепция toolbox (ящик с инструментами). Что это значит? Это значит, что при создании софта и встроенных утилит для UNIX не делали универсальные программы, каждая из которых выполняла бы внутри себя все, необходимые пользователю действия, а для каждой небольшой задачи создавалась своя утилита, которая выполняла свою задачу, только одну, но делала это хорошо. Дело пользователя было при помощи набора этих утилит выполнить операции, которые ему нужно сделать.
При этом из этого набора утилит можно составлять цепочки и последовательности действий, что позволяет легко автоматизировать рутинные, часто повторяющиеся операции.
Для того, чтобы утилиты могли обмениваться между собой результатами своей работы, в качестве носителя информации был выбран текстовый файл. Для обмена информацией между утилитами были изобретены «pipes» (трубы). При помощи «труб» информация с выхода одной команды может быть передана на вход второй, та ее обрабатывает, выдает свою информацию на выход, которая может быть передана на вход третьей и так далее.
В общем, в результате UNIX позволяет пользователю легко создавать простые программные комплексы, выполняющие повторяющиеся действия как по команде пользователя, так и в автономном режиме.
Такой подход имеет как плюсы, так и недостатки. С одной стороны он дает больший контроль над системой, гибкость в настройке, но при этом повышается порог вхождения в систему, или говоря простыми словами, прежде, чем что нибудь сделать, как правило, нужно изучить основы.
Windows: Концепция «Тостер»
В Windows доминирует другая концепция. Эта концепция — максимально облегчить вхождение пользователя в задачу. Программы в Windows как правило большие, на каждое действие есть пункт в меню или иконка. В системы программы связываются как правило с большим трудом.
Ухудшает ситуацию о построением комплексов на базе Windows то, что большинство программ — коммерческие и используют свои, бинарные и как правило закрытые форматы данных и файлов. Такой подход превращает компьютер в устройство, которое может выполнять ограниченный изготовителем ПО набор функций, в пределе в этакий своеобразный «тостер», который выполняет только то, что задумал его изготовитель.
Плюс такого подхода — легкость вхождения неподготовленного пользователя. Минус — то, что обманутый кажущейся легкостью пользователь вообще не хочет ничему учиться и не выполнять необходимых действий. На поводу идут и производители софта. Это одна из причин такого обилия документов отформатированных пробелами, пренебрежения безопасностью и как следствие вирусных эпидемий.
Заключение
Конечно, в обоих системах не доминирует свой подход на 100 процентов. Как в Windows есть возможность пользоваться текстовой консолью и создавать .bat файлы, так и в UNIX есть большой набор программ, со свойствами присущими скорее «тостерному» подходу. И все таки описанная разница в подходах есть и она достаточно ярко выражена.
Литература
1. http://ru.wikipedia.org/wiki/UNIX
2. http://ru.wikipedia.org/wiki/Windows
3. http://ru.wikipedia.org/wiki/ДОС
4. http://posix.ru/
5. http://ru.wikipedia.org/wiki/POSIX
As a technical expert, I often encounter questions about the fundamental differences between operating systems. One such question that frequently comes up is whether Windows is Unix-based. In this article, I will take a deep dive into this topic and provide you with an in-depth analysis.
The Origins of Unix
Unix, developed in the late 1960s, is a powerful and versatile operating system that has had a significant influence on the development of modern operating systems. Its design principles and concepts, such as multitasking, file hierarchy, and a command-line interface, have been widely adopted and adapted by various operating systems.
Despite its age, Unix continues to be relevant today, with several variants and distributions available. These include popular versions like Linux, BSD, and macOS, which all share a common lineage with Unix. This common lineage has led to the misconception that Windows, developed by Microsoft, is also Unix-based.
Windows: A Different Path
Contrary to popular belief, Windows is not Unix-based. It has an entirely different architecture and design philosophy compared to Unix. Windows was developed by Microsoft, which took a different approach in creating their operating system.
Windows follows the principles of the Windows NT kernel, which was first introduced with Windows NT 3.1 in 1993. This kernel is a separate and distinct entity from Unix and was built from scratch by Microsoft engineers. The Windows NT kernel is known for its robustness, security, and compatibility with a wide range of hardware and software.
Key Differences
There are several key differences between Unix-based operating systems and Windows:
- Kernel: Unix systems are built around the Unix kernel, while Windows utilizes the Windows NT kernel.
- File Systems: Unix commonly uses file systems like ext4 or ZFS, whereas Windows uses the NTFS file system.
- User Interface: Unix systems typically have a command-line interface (CLI) as their primary user interface, while Windows provides a graphical user interface (GUI) alongside a CLI.
- Software Compatibility: Unix-based systems often rely on open-source software, while Windows has a broader range of commercial software support.
These key differences demonstrate that Windows and Unix-based operating systems have distinct architectures and design philosophies. While both have their merits, they serve different purposes and cater to different user needs and preferences.
Conclusion
In conclusion, it is important to dispel any misconceptions about Windows being Unix-based. Windows and Unix-based operating systems have fundamental differences in their architecture, kernel, file systems, user interfaces, and software compatibility. Understanding these differences can help users make informed decisions about which operating system best suits their needs and preferences.
It is always valuable to have a clear understanding of the strengths and weaknesses of different operating systems. Whether you prefer the versatility of Unix-based systems or the user-friendly interface of Windows, both have their place in the ever-evolving world of technology.
Learn Unix from the Best Tutors
Asked by Last Modified
Now ask question in any of the 1000+ Categories, and get Answers from Tutors and Trainers on UrbanPro.com
Ask a Question
Find Unix Training near you
Looking for Unix Training?
Learn from the Best Tutors on UrbanPro
X
Looking for Unix Classes?
The best tutors for Unix Classes are on UrbanPro
- Select the best Tutor
- Book & Attend a Free Demo
- Pay and start Learning
Learn Unix with the Best Tutors
The best Tutors for Unix Classes are on UrbanPro
Windows is not UNIX, but it has some similarities and differences. Here’s a detailed breakdown:
What is UNIX?
- Origin: UNIX is a family of operating systems that originated in the 1960s at Bell Labs. It was designed for multitasking and multi-user capabilities.
- Characteristics: UNIX systems are known for their stability, security, and powerful command-line interfaces. They support multiple users and processes, file permissions, and a hierarchical file system.
- Varieties: There are many variations of UNIX, including AIX, HP-UX, Solaris, and more. Additionally, Linux is often considered a UNIX-like operating system since it follows many UNIX principles.
What is Windows?
- Origin: Windows is a series of operating systems developed by Microsoft, first released in 1985 as a graphical user interface for MS-DOS.
- Characteristics: Windows is designed primarily for personal computers and is known for its user-friendly graphical interface. It supports a wide range of applications, is widely used in business environments, and has a large user base.
- Architecture: Windows has its own architecture based on the Windows NT kernel, which is quite different from UNIX’s architecture.
Key Differences:
-
Kernel:
- UNIX uses a monolithic kernel, while Windows uses a hybrid kernel that combines aspects of microkernel and monolithic kernel architectures.
-
File System:
- UNIX typically uses file systems like ext4, XFS, or ZFS, while Windows uses NTFS, FAT32, and exFAT.
-
User Interface:
- UNIX systems are often command-line based, though many have graphical interfaces available. Windows has a robust graphical user interface that is more prevalent for general users.
-
Security Model:
- UNIX has a strong permission model for file access, which is integral to its multi-user capabilities. Windows has improved its security features over time, especially with the introduction of User Account Control (UAC).
-
Software and Compatibility:
- UNIX systems often run software compiled specifically for them, whereas Windows has a vast library of commercial and open-source applications designed specifically for its environment.
-
Target Audience:
- UNIX is often favored in server environments, scientific computing, and enterprise-level applications, while Windows is commonly used in personal computing and business applications.
UNIX-like Systems in Windows:
- Microsoft has introduced Windows Subsystem for Linux (WSL), which allows users to run a Linux environment directly on Windows without the overhead of a virtual machine. This provides a way for developers and users to access UNIX-like functionalities within Windows.
Conclusion:
While Windows and UNIX serve similar fundamental purposes as operating systems, they are fundamentally different in their architecture, design philosophy, and use cases. Each has its strengths and weaknesses depending on the context in which they are used.
This question has been answered using artificial intelligence. If there is any problem please contact us.
Did you like this answer?
Similar Questions
- Windows UNIX tabanlı mı?
- Welches ist die neueste Version von MS Windows: Windows 2007, Windows 8.1, Windows 2008, Windows 7?
- iOS UNIX tabanlı mı?
- MacOS UNIX tabanlı mı?
- iOS UNIX mi?
- Mac UNIX mi?
- UNIX nedir?
«Чтобы найти истину, каждый должен хоть
раз в жизни освободиться от усвоенных
им представлений и заново построить
систему своих взглядов»
— Рене Декарт.
Статья, которая сейчас открыта в вашем браузере, посвящена детальному рассмотрению архитектуры UNIX и Windows. В ней мы постарались заглянуть внутрь этих двух операционных систем, опустившись на уровень ядра. Без внимания не остались и ошибки (исключения), которые могут возникнуть во время работы ОС. В заключение мы попросили сравнить различия между Windows и UNIX экспертов российской компании ASPLinux (www.asplinux.ru), которым каждый день на практике приходится сталкиваться с операционными системами на низком уровне.
Структуру UNIX проще всего представить в виде двух слоев. Первым является ядро. Оно непосредственно взаимодействует с железом и обеспечивает переносимость всего остального ПО на компьютеры с разным аппаратным обеспечением. Ядро предоставляет программам определенный набор системных API, с помощью которых производятся создание процессов, управление ими, их взаимодействие и синхронизация, а также файловый ввод/вывод. Вторым слоем является программное обеспечение, прикладное или системное: командный интерпретатор, графическая оболочка и т. д.
Структура ОС UNIX
Заглянем глубже в ядро системы. Оно позволяет всем остальным программам общаться с периферийными устройствами, регулирует доступ к файлам, управляет память и процессами. Ядро — это связной, к которому обращаются посредством системных вызовов (запрашивая какую-то услугу). Связь эта — не односторонняя: ядро может и возвращать в случае необходимости какие-то данные. Основным достоинством ядра является строгая стандартизация системных API. За счет этого во многом достигается переносимость кода между разными версиями UNIX и абсолютно различным аппаратным обеспечением.
Структура ядра UNIX
Все обращения к ядру системы можно разделить на две категории: программа вызывает подсистему управления файлами или подсистему управления процессами. Первая отвечает за все, что связано с файлами: управление, размещение, доступ. Процессы же — это, в общем случае, любые запущенные программы. Поэтому подсистема управления процессами служит для их жизнеспособности, синхронизации и управления. Важно так же и то, что файловая подсистема и подсистема управления процессов могут общаться друг с другом: любой процесс может вызывать системные API для работы с файлами. Прелесть UNIX состоит в том, что эти API универсальны (да и в Windows наблюдается та же картина). Вот самые главные из них: open, close, read, write, stat, chown, chmod (суть почти всех вызовов интуитивно понятна из названия, кроме, разве что, последних трех, поэтому поясню — они служат для управления атрибутами файлов, информации о владельце и прав доступа) и др. Каждый из этих системных вызовов в программе на языке С является обычной функцией. Информацию по любому из них можно запросто найти в man.
Подсистема управления файлами — почти единственная из всех работает с драйверами, которые являются модулями ядра. «Почти», потому что есть еще и сетевая подсистема, которая работает, например, с драйвером сетевой карты и с драйверами различных современных сетевых устройств. Ее, однако, мы рассматривать не будем. Обмен данными с драйверами может проходить двумя способами: с помощью буфера или потока. Суть первого метода заключается в том, что для информации выделяется кэш (или сверхоперативная память, как его называли раньше), в который заносится необходимый блок данных. Далее информация из кэша передается к драйверу. Драйвер — единственный элемент ядра, способный управлять периферийными устройствами. Но подсистема управления файлами может взаимодействовать с драйвером и через поток. Поток представляет собой посимвольную передачу данных драйверу. Следует отметить, что способ взаимодействия с драйвером определяется не пользователем и не приложением. Он является характеристикой того устройства, которым управляет драйвер. Очевидно, что потоковое общение позволяет взаимодействовать более оперативно, чем общение через буфер. Ведь на заполнение буфера тратится время и, следовательно, возрастает время отклика.
Теперь более подробно рассмотрим подсистему управления процессами. Она отвечает за синхронизацию и взаимодействие процессов, распределение памяти и планирование выполнения процессов. Для всех этих целей в подсистему управления процессами включены три модуля, которые наглядно продемонстрированы на схеме. Хорошим примером взаимодействия подсистем управления файлами и процессами является загрузка файла на исполнение. В этом случае подсистеме управления процессов требуется обратиться к коллеге, чтобы считать исполняемые файлы.
Чуть выше мы перечисляли системные API для управления файлами. Теперь рассмотрим вызовы, служащие для работы с процессами: fork (создает новый процесса), exec (выполняет процесс), exit (завершает исполнение процесса), wait (один из способов синхронизации), brk (управляет памятью, выделенной процессу), signal (обработчики исключений) и др.
Следующие два модуля являются очень важными в понимании всей подсистемы управления процессами. Первый — модуль распределения памяти, позволяет избежать нехватки оперативной памяти. Хотя механизм свопинга и файлов подкачки (технически правильно это, кстати, называется виртуальной памятью) уже ни для кого не секрет, в тени остается другой факт: операционная система (в лице описываемой подсистемы) может либо скидывать все данные, относящиеся к конкретному процессу, на диск, либо скидывать страницы памяти (страничное замещение). Таким образом, модуль распределения памяти выполняет очень важную функцию — он определяет какому процессу сколько выделить памяти.
Виртуальная память была изобретена в 1962 году, в Англии при создании суперкомпьютера Atlas. В большинстве современных компьютеров оперативная память не так велика, как используемое процессором адресное пространство. Размер ОЗУ типичного персонального компьютера варьируется от десятков до сотен мегабайт. При запуске программа загружается с какого-либо накопителя в оперативную память. Если же программа не помещается в ОЗУ, то те её части, которые в данный момент не выполняются, хранятся во вторичном запоминающем устройстве, чаще всего винчестере, и такая память называется виртуальной. Безусловно, перед выполнением необходимая часть программы должна быть перемещена в оперативную память. Данные функции выполняет ядро операционной системы (диспетчер виртуальной памяти, находящийся в микроядре). И для программы и для пользователя эти действия прозрачны. Естественно, на запросы к виртуальной памяти уходит гораздо большее время, нежели к ОЗУ.
Второй модуль — планировщик. Его задача не менее важна. UNIX — мультизадачная ОС, то есть одновременно может выполняться множество процессов. Мы, однако, знаем, что в фиксированный момент времени на одном процессоре может выполняться только одна команда. Именно поэтому нужен виртуальный рефери, который будет определять, какому процессу исполняться сейчас, а какому — через секунду. На практике же планировщик переключает контекст, то есть перед тем, как остановить исполнение какого-то процесса, он запоминает состояние регистров, памяти и т. д., а уже после этого запускает другой процесс в его собственном адресном пространстве. И еще один тонкий момент: каждый запущенный процесс «думает», что он единственный. Дополнительно существует механизм приоритетов. Очевидно, чем выше приоритет, тем быстрее начнет исполняться процесс. Процессы могут также обмениваться между собой информацией. В случае их синхронного взаимодействия синхронизацию осуществляет модуль взаимодействия (например, функция wait).
Вот мы и подошли к последнему уровню — аппаратному контролю. На данном уровне происходит обработка прерываний и связь ядра с железом. Здесь следует отметить лишь пару моментов, во-первых, прерывания могут «прерывать» работу процессора и требовать внимания к себе (после этого процессор без проблем возвращается к выполнению оставленных процессов), а, во-вторых, обработку прерываний осуществляют специальные функции ядра.
Windows 2000/XP построены на архитектуре микроядра (microkernel architecture). ОС Windows 95/98 используют монолитное (monolithic) ядро. Микроядра являются сравнительно небольшими и модульными. Благодаря последнему новые устройства зачастую добавляются как модули, которые можно загружать/выгружать на этапе исполнения без перекомпиляции ядра. На архитектуре микроядра построены также FreeBSD и Mac OS X. Монолитные же ядра используются еще и в Linux. Они оптимизированы для более высокой производительности с минимальными контекстными переключениями. Такая архитектура упрощает поддержку кода ядра для разработчиков, но требует перекомпиляции ядра при добавлении новых устройств. Следует отметить, что описанные здесь различия являются «классическими», на практике монолитные ядра могут поддерживать модульность (что зачастую и происходит), а микроядра могут требовать перекомпиляции.
Архитектура Windows
Структура Windows 2000/XP не отличается оригинальностью: ядро системы (исполняется на максимально приоритетном уровне процессора) и пользовательские подсистемы (исполняются на минимально приоритетном уровне).
Ядро системы является критичной частью кода, любые ошибки, происходящие в ядре, приводят к фатальному краху системы — «синему экрану». Фактически — это ошибки типа «Нарушение общей защиты». Как только код ядра начинает обращаться в запрещенные для него области памяти (попытка прочитать или записать данные, исполнить неверную инструкцию, переход на запрещенную область), срабатывает система защиты памяти процессора, и управление передается системному обработчику исключений. Обработчик исключений не может восстановить корректное поведение кода. Все, что он делает — это вывод дампа на синий экран с указанием типа ошибки и содержимого памяти в области, где сработала защита.
Пользовательские подсистемы не столь критично влияют на работу системы в целом, так как они изолированы друг от друга и от ядра средствами управления памятью и собственно процессором. Ошибки, возникающие в приложениях, исполняются на уровне пользователя, то есть на менее привилегированном уровне, нежели ядро. Поэтому, система в состоянии контролировать процесс. При возникновении же ошибки или сбоя управление передается обработчику ошибок, который называется «Doctor Watson». Он принудительно завершит приложение. Ядро системы и остальные подсистемы остаются в целости и сохранности.
Ядро UNIX/Linux имеет два вида исключений, которые обычно называют «oops» и «panic». Почти в каждой операционной системе паника происходит в тех случаях, когда ядро обнаруживает серьезную неисправность. Если система каким-либо образом повредила сама себя, ей требуется остановиться немедленно, пока она не произведет необратимых критических изменений (типа уничтожения файловой системы). Везде, где только возможно, UNIX/Linux пытается детектировать проблему и справиться с ней без остановки всей системы. Например, многие ситуации типа «oops» приводят к завершению процесса, который нормально запустился, но потом зациклил систему. Бывают, однако, ситуации, когда все настолько плохо, что полная паника является наилучшим выходом. Считается, что пользователи стабильных версий ядра не должны встречать ни «паник», ни «oops». Но в реальном мире они иногда происходят.
Недавно найденный «TF-баг» (смотрите здесь) является хорошим примером паники. Процессор пытается передать управление процессу, которого не существует. Это приводит к краху всей системы. В данном случае, у системы нет другой альтернативы, чем запаниковать.
Ядро, поставляемое с Red Hat Linux 7.3 (и некоторыми другими дистрибутивами), содержит баг в файловой системе ext3. Эта ошибка приводит к «oops», завершая время от времени некоторые процессы (также этот баг приводит к замедлению всей системы). Хотя данная ошибка уже исправлена (патч есть и в обновлении от Red Hat), этот случай познакомил многих пользователей с ошибками типа «oops».
Ядро Windows 2000/XP состоит из нескольких системных компонентов, каждый из которых отвечает за определенный набор задач. Основные компоненты ядра:
Микроядро (Microkernel) — компактный код, можно сказать, сердце системы. В рамках микроядра работают ключевые службы: диспетчер памяти, диспетчер задач и другие.
Слой абстрагирования (Hardware Abstraction Layer, HAL). Полностью абстрагирует код системы от конкретного аппаратного оборудования. Использование HAL позволяет обеспечить переносимость 99% кода системы между различным оборудованием.
Диспетчер Ввода/Вывода (Input/Output Manager). Полностью контролирует потоки обмена между системой и устройствами. Драйверы устройств работают в контексте I/O Manager. Если драйвер написан с ошибками и может привести к сбою — это вызовет фатальный крах ядра и всей системы. 70% случаев фатальных сбоев («синий экран») — есть результат некорректного поведения драйверов устройств.
Windows XP содержит встроенный механизм контроля драйверов: правильно написанный и тщательно протестированный драйвер поставляется с цифровой подписью (Driver Signing). Правильная настройка системы заключается в запрещении установки драйверов без корректной подписи.
Модуль управления объектами (Object Manager), управления виртуальной памятью (Virtual Memory Manager), управления процессами (Process Manager), управления безопасностью (Security Reference Monitor), управления локальными вызовами (Local Procedure Calls Facilities) — важные компоненты ядра системы подробно рассматриваться не будут.
Наконец, особое по значению и важности место в ядре системы занимает модуль графического интерфейса — Win32k.sys. Фактически — это часть подсистемы Win32, отвечающая за прорисовку и управление графическим интерфейсом. Этот модуль расположен в ядре специально для того, чтобы существенно повысить производительность графических операций ввода/вывода. Однако размещение столь критической части в ядре накладывает чрезвычайно строгие требования к корректности его исполнения. Фактически, ошибка в коде Win32k.sys приведет к краху системы. Разработчики Windows уделяют огромное внимание этому модулю, и именно он наиболее тщательно протестирован. Опыт эксплуатации систем Windows показывает, что код Win32k.sys работает абсолютно корректно и не содержит фатальных ошибок. Однако некорректный драйвер видеосистемы может все испортить.
В Windows также реализованы дополнительные функции для повышения стабильности работы ОС. Система защиты файлов Windows автоматически предотвращает случайные изменения системных файлов операционной системы, вносимые пользователем или приложениями, эффективно защищая всю систему в целом. То есть, когда какая-то программа внесла изменения или просто заменила системные файлы Windows, считая, что у программы более новые, Windows отслеживает изменения и уведомляет об этом пользователя, говоря, что для стабильности системы желательно восстановить исходные файлы. Так же существует поддержка нескольких версий DLL, что повышает совместимость приложений и повышает стабильность.
Итог
Различия между Windows и UNIX для нас прокомментировали разработчики из компании ASPLinux.
«Операционные системы Unix и Windows достаточно сильно отличаются в реализации различных сервисов и служб. В соответствии с темами, затронутыми в этой статье, можно отметить несколько глобальных различий.
В Unix/Linux графическая система существует отдельно от ядра и функционирует как обычное приложение. В операционных системах Windows графическая система интегрирована в ядро. В случае использования операционной системы на рабочей станции, особенно при запуске графикоемких приложений, возможно, лучше, когда графическая система входит в ядро — в этом случае она может быстрее работать. А при работе на сервере предпочтительней отделение графической системы от ядра ОС, так как она загружает память и процессор. В случае Unix/Linux графическую систему можно просто отключить, к тому же, если системный администратор ее все-таки хочет использовать, в Linux есть несколько графических оболочек на выбор, некоторые из них (например, WindowMaker) достаточно слабо загружают машину. Эта же особенность Unix-образных операционных систем позволяет запускать эти ОС на машинах с весьма скромными объемами ОЗУ и т.п. В случае Windows же графическая система слишком тесно интегрирована в ОС, поэтому она должна запускаться даже на тех серверах, на которых она вовсе не нужна.
Отметим также методику разделения прав доступа в Windows 2000 и Unix/Linux. В первом — разделение прав доступа основано на ACL (access control lists), то есть, к примеру, можно настроить систему таким образом, чтобы администратор не имел возможности управлять файлами пользователей. У Unix/Linux же всегда есть суперпользователь — root, который имеет доступ абсолютно ко всему. То есть теоретически модель безопасности в Windows лучше: чтобы полностью завладеть хорошо настроенной системой Windows, хакеру придется ломать больше, в Unix/Linux же достаточно взломать доступ к root. (В Unix/Linux используются более старые технологии, тем не менее, некоторые дистрибутивы Linux сейчас начинают поддерживать ACL, среди них — ASPLinux 7.3 Server Edition). Но теория несколько смазывается практикой с той стороны, что в Windows не так быстро, как в Linux, заделываются «дыры», что уже относится к плюсам открытой модели разработки. В результате оказывается, что в Windows по статистике больше дыр, через которые злоумышленник может пробраться в систему. Но, опять же, точно о количестве дыр в Linux и Windows можно будет сказать только тогда, когда количество пользователей обоих видов ОС будет примерно одинаковым.
В Linux поддерживаются несколько файловых систем, наиболее продвинутые — это Ext2, Ext3, XFS. ОС Windows завязана по большому счету на одну файловую систему — NTFS или FAT 32. Файловые системы Ext2, Ext3, XFS по оценкам работают быстрее. Принципиальное же отличие в том, что в UNIX/Linux вообще нет понятия диска, физического или логического. Вся работа с устройствами хранения данных организуется через специальные файлы устройств, которые отображают физический носитель (диск, лента и т. п ) или его части (разделы) в файловую систему.
Важное отличие — наличие в Windows технологии ActiveX, нечто подобное в Unix/Linux реализуется с помощью CORBA и Bonobo. Эта технология, с одной стороны, предоставляет пользователю множество удобств, с другой стороны — она же допускала в свое время такие вещи, как автоматический запуск Outlook’ом вируса, пришедшего по почте. Одно из важных отличий этих технологий в том, что элементы ActiveX могут внедряться в текст HTML, что имеет как ряд достоинств, так и недостатков.
Можно перечислить еще ряд отличий Unix-подобных операционных систем от Windows, например, встроенную поддержку удаленного доступа в Unix и отсутствие оной в Windows по умолчанию (она реализуется в серверных версиях Windows, а также с помощью дополнительных средств, например, Citrix). В Unix/Linux и Windows сильно различаются сетевые подсистемы (IP-stack), по ряду оценок сетевая подсистема Unix/Linux эффективнее.
Можно было бы упомянуть богатый набор ПО, которое может поставляться вместе с Linux, между тем, Windows также развивается в этом направлении. Дополнительные отличия же в архитектуре в основном сводятся к отличиям работы монолитных и модульных ядер, которые также зачастую не являются преимуществами или недостатками, а просто отличиями. При всем при этом можно с уверенностью сказать, что характеристики работы Windows или Linux гораздо больше зависят от аккуратности и квалификации пользователя, чем от архитектуры той или иной ОС».
Мы искренне надеемся, что нам удалось описать основные различия двух систем. Если вы считаете, что какой-то аспект «анатомии» Windows или UNIX незаслуженно пропущен, милости просим в наш форум. Автор статьи (e-mail в начале) с удовольствием выслушает все ваши мысли.