"Дмитрий Завалишин. Об ОС. Продолжение." - читать интересную книгу автора

Продолжаем разговор c Карлсон. Разговор о том, как строились операционные системы последние
несколько десятков лет :-). Про десятки я подзагнул - в древность совсем уж лезть не хочется, но доля
правды в том есть - от древнего ДОС ЕС современные модерновые оски не так уж и ускакали, увы.
Концептуально, по крайней мере.

Нынешняя мэйнстрим-ОС являет собой арену, на которой встречаются несколько классов
неравноправных бойцов. Обобщая, можно назвать ядро, драйверы, разделяемые библиотеки и
процессы. (Процессы - это то, что исполняет задачи. Например, вы сейчас читаете эту страничку
броузером, а броузер исполняется в рамках собственного процесса.)

В разных ОС по-разному называют эти компоненты, но суть мало меняется от того,что в Юниксе это
называется "разделяемая библиотека", а в полуосе и windows - динамически подгружаемая. Все то же
самое.

Среди драйверов тоже встречаются некоторые различия. Так, в некоторых юниксах существуют
подгружаемые модули ядра вообще, а драйверы - в частности. В OS/2 кроме драйверов есть
менеджеры устройств по классам - CD-ROM-ы, диски, SCSI, ASPI... В NT драйверы могут делиться на
обобщенный драйвер рода устройств (например, CD-writer-ы) и минидрайвер конкретного вида (модели).
Можно долго обсуждать плюсы и минусы отдельных подходов, но, как, надеюсь, будет видно дальше,
это не имеет смысла.

Чем отличается драйвер от ядра, процесс от драйвера а DLL от процесса? Ну вот, например, у DLL-я
нет своего контекста исполнения. Что такое контекст исполнения? "Да вас это не колышет, товарищ
лейтенант!" c анекдот. Ну, вкратце, процесс имеет свой поток управления, свои открытые файлы, свои
системные хендлы, окна, семафоры и прочее тряхозвоние, а DLL - только чужие. Вот видите - я же
говорил, что вас это не колышет... совершенно неинтересно. И непонятно - зачем в системе
существовать сущности (DLL), котороая отличается от другой только отсутствием части прав и
возможностей.

Возьмем драйвер. Чем он отличается от братьев? Тем же поражением в правах, что и DLL, плюс еще
живет на хлебах у ядра, и обладает доступом к аппаратуре. То есть тот же процесс, только допущеный
к святым местам и слегка урезанный. Кто мешал сделать то, что делает драйвер, с помощью обычного
процесса?

Да никто - ответили апологеты микроядерных ОС, и создали новый мир. В нем, как я уже писал, было
мелкое и ничего не умеющее ядро, и активно общающиеся процессы. Единым росчерком пера
дизайнера вся эта кунсткамера была уничтожена и на свет явилась архитектура "клиент-сервер" во
всем великолепии своей простоты. Нет DLL-ей, нет подсистем, нет драйверов - есть только процесс,
который хочет и процесс, который может. Первый - клиент, обращается ко второму за услугой. Второй
ее исполняет и возвращает результат. Все просто и красиво.

А если реализовать с умом - то и ужасно хорошо интегрируется со всяческими сетями. Ибо клиенту все
равно, в общем, где его сервер - тут, или в Актюбинске. Лишь бы запрос ушел и ответ вернулся.

На получившееся посмотрели ценители объектной ориентированности и... прониклись. Потому, что в
результате вышла ОО ОС. Если правильно проектировать, конечно.

Что нетривиально. Ибо практическим воплощением идеи микроядра занялись Юниксоиды, обладающие
в осостроении наибольшей социальной активностью. А юниксоиды что строить не начнут - все одно
выходит юникс. Даже напильник не спасает.