четверг, 25 декабря 2008 г.

Организация человеческого мозга

Нейрон

Нейрон является основным строительным блоком нервной системы. Он. является клеткой, подобной всем другим клеткам тела; однако определенные существенные отличия позволяют ему выполнять все вычислительные функции и функции связи внутри мозга.

Как показано на рис. А.1, нейрон состоит из трех частей: тела клетки, дендритов и аксона, каждая часть со своими, но взаимосвязанными функциями.

Рис. А.1. Компоненты нейрона

Функционально дендриты получают сигналы от других клеток через контакты, называемые синапсами. Отсюда сигналы проходят в тело клетки, где они суммируются с другими такими же сигналами. Если суммарный сигнал в течение короткого промежутка времени является достаточно большим, клетка возбуждается, вырабатывая в аксоне импульс, который передается на следующие клетки. Несмотря на очевидное упрощение, эта схема функционирования объясняет большинство известных процессов мозга.

Тело ячейки. Нейроны в мозгу взрослого человека не восстанавливаются; они отмирают. Это означает, что все компоненты должны непрерывно заменяться, а материалы обновляться по мере необходимости. Большинство этих процессов происходит в теле клетки, где изменение химических факторов приводит к большим изменениям сложных молекул. Кроме этого, тело клетки управляет расходом энергии нейрона и регулирует множество других процессов в клетке. Внешняя мембрана тела клетки нейрона имеет уникальную способность генерировать нервные импульсы (потенциалы действия), являющиеся жизненными функциями нервной системы и центром ее вычислительных способностей.

Рис. А.2. Типы нейронов

Были идентифицированы сотни типов нейронов, каждый со своей характерной формой тела клетки (рис. А.2), имеющей обычно от 5 до 100 мкм в диаметре. В настоящее время этот факт рассматривается как проявление случайности, однако могут быть найдены различные морфологические конфигурации, отражающие важную функциональную специализацию. Определение функций различных типов клеток является в настоящее время предметом интенсивных исследований и основой понимания обрабатывающих механизмов мозга.

Дендриты. Большинство входных сигналов от других нейронов попадают в клетку через дендриты, представляющие собой густо ветвящуюся структуру, исходящую от тела клетки. На дедритах располагаются синаптические соединения, которые получают сигналы от других аксонов. Кроме этого, существует огромное количество синаптических связей от аксона к аксону, от аксона к телу клетки и от дендрита к дендриту; их функции не очень ясны, но они слишком широко распространены, чтобы не считаться с ними.

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

Определено более 30 видов нейротрансмиттеров. Некоторые из них являются возбуждающими и стремятся вызывать возбуждение клетки и выработать выходной импульс. Другие являются тормозящими и стремятся подавить такой импульс. Тело клетки суммирует сигналы, полученные от дендритов, и если их результирующий сигнал выше порогового значения, вырабатывается импульс, проходящий по аксону к другим нейронам.

Аксон. Аксон может быть как коротким (0,1 мм), так и превышать длину 1 м, распространяясь в другую часть тела человека. На конце аксон имеет множество ветвей, каждая из которых завершается синапсом, откуда сигнал передается в другие нейроны через дендриты, а в некоторых случаях прямо в тело клетки. Таким образом, всего один нейрон может генерировать импульс, который возбуждает или затормаживает сотни или тысячи других нейронов, каждый из которых, в свою очередь, через свои дендриты может воздействовать на сотни или тысячи других нейронов. Таким образом, эта высокая степень связанности, а не функциональная сложность самого нейрона, обеспечивает нейрону его вычислительную мощность.

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

Рис. А.3. Синапс

Кроме распространения такого бинарного сигнала, обеспечиваемого возбуждением первого импульса, в нейронах при слабой стимуляции могут также распространяться электрохимические сигналы с последовательной реакцией. Локальные по своей природе, эти сигналы быстро затухают с удалением от места возбуждения, если не будут усилены. Природа использует это свойство первых клеток путем создания вокруг аксонов изолирующей оболочки из шванковских клеток. Эта оболочка, называемая миелиновой, прерывается приблизительно через каждый миллиметр вдоль аксона узкими разрывами, называемыми узлами, или перехватами Ранвье. Нервные импульсы, приходящие в аксон, передаются скачкообразно от узла к узлу. Таким образом, аксону нет нужды расходовать энергию для поддержания своего химического градиента по всей своей длине. Только оставшиеся неизолированными перехваты Ранвье являются объектом генерации первого импульса; для передачи сигнала от узла к узлу более эффективными являются градуальные реакции. Кроме этого свойства оболочки, обеспечивающего сохранение энергии, известны ее другие свойства. Например, миелинизированные нервные окончания передают сигналы значительно быстрее немиелинизированных. Обнаружено, что некоторые болезни приводят к ухудшению этой изоляции, что, по-видимому, является причиной других болезней.

Мембрана клетки

В мозгу существует 2 типа связей: передача химических сигналов через синапсы и передача электрических сигналов внутри нейрона. Великолепное сложное действие мембраны создает способность клетки вырабатывать и передавать оба типа этих сигналов.

Мембрана клетки имеет около 5 нм толщины и состоит из двух слоев липидных молекул. Встроенные в мембрану различные специальные протеины можно разделить на пять классов: насосы, каналы, рецепторы, энзимы и структурные протеины.

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

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

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

Градиент ионной концентрации в мембране клетки вырабатывает внутри клетки электрический потенциал –70 мВ относительно ее окружения. Чтобы возбудить клетку (стимулировать возникновение потенциала действия) синаптические входы должны уменьшить этот уровень до приблизительно –50 мВ. При этом потоки натрия и калия сразу направляются в обратную сторону; в течение миллисекунд внутренний потенциал клетки становится +50 мВ относительно внешнего окружения. Это изменение полярности быстро распространится через клетку, заставляя нервный импульс распространиться по всему аксону до его пресинаптических окончаний. Когда импульс достигнет окончания аксона, открываются управляемые напряжением кальциевые каналы. Это вызывает освобождение нейротрансмиттерных молекул в синаптическую щель и процесс распространяется на другие нейроны. После генерации потенциала действия клетка войдет в рефракторный период на несколько миллисекунд, в течении которого она восстановит свой первоначальный потенциал для подготовки к генерации следующего импульса.

Рассмотрим этот процесс более детально. Первоначальное получение нейротрансмиттерных молекул снижает внутренний потенциал клетки с –70 до –50 мВ. При этом зависимые от потенциала натриевые каналы открываются, позволяя натрию проникнуть в клетку. Это еще более уменьшает потенциал, увеличивая приток натрия в клетку, и создает самоусиливающийся процесс, который' быстро распространяется в соседние области, изменяя локальный потенциал клетки с отрицательного до положительного.

Через некоторое время после открытия натриевые каналы закрываются, а калиевые каналы открываются. Это создает усиленный поток ионов калия из клетки, что восстанавливает внутренний потенциал –70 мВ. Это быстрое изменение напряжения образует потенциал действия, который быстро распространяется по всей длине аксона подобно лавине.

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

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

Гамма–аминомасляная кислота (ГАМК) является одним из более общих тормозных нейротрансмиттеров. Обнаруженная почти исключительно в головном и спинном мозге, она попадает на рецептор канала, который выборочно пропускает ионы хлора. После входа эти ионы увеличивают отрицательный потенциал клетки и тем самым препятствуют ее возбуждению. Дефицит ГАМК связан с хореей Хантингтона, имеющей нейрологический синдром, вызывающий бесконтрольное движение мускулатуры. К несчастью, гематоэнцефалический барьер препятствует увеличению снабжения ГАМК, и как выйти из этого положения, пока неизвестно. Вероятно, что и другие нейрологические и умственные растройства будут наблюдаться при подобных нарушениях в нейротрансмиттерах или других химических носителях. Уровень возбуждеия нейрона определяется кумулятивным эффектом большого числа возбуждающих и тормозящих входов, суммируемых телом клетки в течение короткого временного интервала. Получение возбуждающей нейротрансмиттерной молекулы будет увеличивать уровень возбуждения нейрона; их меньшее количество или смесь тормозящих молекул уменьшает уровень возбуждения. Таким образом, нейронный сигнал является импульсным или частотно–модулируемым (ЧМ). Этот метод модуляции, широко используемый в технике (например, ЧМ-радио), имеет значительные преимущества при наличии помех по сравнению с другими способами. Исследования показали изумляющую сложность биохимических процессов в мозге. Например, предполагается наличие свыше 30 веществ, являющихся нейротрансмиттерами, и большое количество рецепторов с различными ответными реакциями. Более того, действие определенных нейротрансмиттерных молекул зависит от типа рецептора в постсинаптической мембране, некоторые нейротрансмиттеры могут быть возбуждающими для одного синапса и тормозящими для другого. Кроме того, внутри клетки существует система «вторичного переносчика», которая включается при получении нейротрансмиттера, что приводит к выработке большого количества молекул циклического аденозинтрифосфата, тем самым производя значительное усиление физиологических реакций.

Исследователи всегда надеются найти простые образы для унификации сложных и многообразных наблюдений. Для нейробиологических исследований такие простые образы до сих пор не найдены. Большинство результатов исследований подвергаются большому сомнению прежде, чем ими воспользуются. Одним из таких результатов в изучении мозга явилось открытие множества видов электрохимической деятельности, обнаруженных в работе мозга; задачей является их объединение в связанную функциональную модель.


понедельник, 22 декабря 2008 г.

Откуда есть пошли операционные системы, и что это вообще такое?

Давайте посмотрим с высоты нашего третьего тысячелетия на вычислительные машины пятидесятых годов прошлого века. Громоздкие, занимавшие целые здания, они управлялись множеством кнопочек, рычажков и переключателей, с помощью которых оператор мог загрузить программу с перфокарт (или с каких-нибудь других носителей) и управлять действиями компьютера. Оператор ЭВМ представлял собой как бы "живую" операционную систему; он заботился о следующем:

  1. Управление ресурсами компьютера (к примеру отработавшую программу необходимо было выгрузить из памяти и т.п.)
  2. Представлял собой "упрощенный интерфейс" при взаимодействии с компьютером с точки зрения пользователей. Пользователь мог просто сказать оператору: "загрузи-ка мне вот эту перфокарту", даже не постигая тонкости управления машиной.

В сущности, все современные операционные системы выполняют такие же функции, как и наш воображаемый оператор ЭВМ 50-х годов прошлого века. Они точно так же распределяют ресурсы компьютера и предоставляют пользователю (а еще явственнее - программисту) развитые средства взаимодействия с компьютером (например в Windows окно с сообщением можно создать при помощи системной функции MessageBoxA или MessageBoxU, хотя на самом деле процессор (да и все другое аппаратное обеспечение) даже не имеют представления о том, что такое окно. Максимум, что они могут - это выводить разноцветные точки в нужных местах экрана. Но ведь прикладному программисту даже не нужно знать, что происходит под капотом системы!)

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

В общем - операционная система прячет малое за большим, менее важные детали работы с аппаратурой за крупными информационными структурами, увеличивая в сотни, тысячи и десятки тысяч раз эффективность работы программиста и пользователя.

Android-смартфон

Компания Kogan Technologies представила Android-смартфон

04 декабря 2008 года, 18:13 | Текст: Алексей Стародымов

Австралийская компания Kogan Technologies представила смартфон, работающий под управлением операционной системы Google Android. Первые упоминания об этом устройстве появились в Интернете в начале ноября.

Новинка доступна в двух версиях: Agora и Agora Pro. Внешне они почти одинаковы, а вот с точки зрения функциональности интереснее именно последняя, имеющая 2-мегапиксельную камеру, GPS-приемник и контроллер Wi-Fi.

В остальном характеристики моделей одинаковы: QWERTY-клавиатура, 2,5-дюймовый TFT-дисплей с разрешением 240х320 точек, модуль Bluetooth версии 2.0+EDR, 128 Мб оперативной памяти, 256 Мб встроенной памяти, слоты для флешек формата microSD, музыкальный плеер и наборы приложений разработки Google. «Сердцем» Kogan Agora и Agora Pro служит процессор, «пульсирующий» с частотой 624 МГц. Оба устройства поддерживают работу в сетях GSM/GPRS/EDGE 850/900/1800/1900 МГц и UMTS/HSDPA 850/1900/2100 МГц.

Kogan Agora стоит 299, а Kogan Agora Pro — 399 долларов США. Заказать смартфоны можно уже сейчас, однако доставить устройства покупателям компания обещает не ранее 29 января 2009 года

Kogan Agora Pro оборудуется камерой, GPS-приемником и Wi-Fi-модулем.

Android

Android — основанная на Linux платформа для мобильных телефонов, разрабатываемая Open Handset Alliance (OHA), инициированном Google. Первая бесплатная, открытая платформа для мобильных устройств.

Исходный код

21 октября 2008 года альянс OHA опубликовал исходный код платформы Android[3]. В релиз вошел весь стек Android: и операционная система, и промежуточное ПО (middleware), и основные конечные приложения, написанные на Java. Общий объем исходного кода Android составил 2,1 Гб.

«Предпочтительной лицензией» на исходный код Android является Apache License 2.0.[4]

Исходный код платформы Android доступен на source.android.com

Приложения

Разработку приложений для Android можно вести на языке Java (Java v1.5) при помощи плагина для Eclipse — «Android Development Tools» (Eclipse 3.3).

 Для Android нет разницы между основными приложениями телефона и сторонним программным обеспечением – можно изменить даже программу для набора номера или заставку экрана.

Доступные библиотеки:

libc (en)
SSL (шифрование)
Media Framework (PacketVideo OpenCORE™, MPEG4H.264MP3AACAMRJPGPNG)
Surface Manager
LibWebCore (на базе WebKit)
2D SGL
3D-библиотеки (на базе OpenGL)
FreeType (шрифты)
SQLite (легковесная СУБД)

Критика

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

Появилась информация о том, что Google будет по своему усмотрению удалять приложения на телефонах пользователей, если нарушаются условия их использования. [6]

Невозможность установки приложений на карту памяти. Недостаток является существенным, если у телефона небольшой объём встроенной памяти (у T-Mobile G1 всего 70 МБ). [7]

Ядро операционной системы

Ядро операционной системы


Материал из Википедии — свободной энциклопедии

Ядро́ — центральная часть операционной системы, обеспечивающая приложениям координированный доступ к ресурсам компьютера, таким как процессорное времяпамять и внешнее аппаратное обеспечение. Также обычно ядро предоставляет сервисы файловой системы.

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

Описанная задача может различаться в зависимости от типа архитектуры ядра и способа её реализации.

Типы архитектур ядер операционных систем

Монолитное ядро

Основная статьяМонолитное ядро

Монолитное ядро предоставляет богатый набор абстракций оборудования. Все части монолитного ядра работают в одном адресном пространстве.

Старые монолитные ядра требовали перекомпиляции при любом изменении состава оборудования. Большинство современных ядер позволяют во время работы подгружатьмодули, выполняющие части функции ядра.

Достоинства: Скорость работы, упрощённая разработка модулей, богатство предоставляемых возможностей и функций, поддержка большого количества разнообразного оборудования.[источник не указан 105 дней]

Недостатки: Поскольку всё ядро работает в одном адресном пространстве, сбой в одном из компонентов может нарушить работоспособность всей системы.

В этом случае компоненты операционной системы являются не самостоятельными модулями, а составными частями одной большой программы. Такая структура операционной системы называется монолитным ядром (monolithic kernel). Монолитное ядро представляет собой набор процедур, каждая из которых может вызвать каждую. Все процедуры работают в привилегированном режиме.

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

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

Монолитное ядро — старейший способ организации операционных систем. Примером систем с монолитным ядром является большинство Unix-систем.

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

Данный тип архитектуры ядер имеет преимущества. В частности, монолитное ядро более производительно, чем микроядро, поскольку состоит не из множества разрозненных процессов, «общающихся» между собой через механизм посылки сообщений, а работает в одном адресном пространстве, кроме того нет необходимости осуществлять переключения между процессами-сервисами.

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


Примеры: Традиционные ядра UNIX(такие как BSD), Linux; ядро MS-DOS.

Модульное ядро

Основная статьяМодульное ядро

Модульное ядро — современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем компьютеров.

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

Все модули ядра работают в адресном пространстве ядра и могут пользоваться всеми функциями, предоставляемыми ядром. Поэтому модульные ядра продолжают оставаться монолитными.

Модульные ядра удобнее для разработки, чем традиционные монолитные ядра, не поддерживающие динамическую загрузку модулей, так как от разработчика не требуется многократная полная перекомпиляция ядра при работе над какой-либо его подсистемой или драйвером. Выявление, локализация, отладка и устранение ошибок при тестировании также облегчаются.

Модульные ядра предоставляют особый программный интерфейс (API) для связывания модулей с ядром, для обеспечения динамической подгрузки и выгрузки модулей. В свою очередь, не любая программа может быть сделана модулем ядра: на модули ядра накладываются определённые ограничения в части используемых функций (например, они не могут пользоваться функциями стандартной библиотеки С/С++ и должны использовать специальные аналоги, являющиеся функциями API ядра). Кроме того, модули ядра обязаны экспортировать определённые функции, нужные ядру для правильного подключения и распознавания модуля, для его корректной инициализации при загрузке и корректного завершения при выгрузке, для регистрации модуля в таблице модулей ядра и для обращения из ядра к сервисам, предоставляемым модулем.

Не все части ядра могут быть сделаны модулями. Некоторые части ядра всегда обязаны присутствовать в оперативной памяти и должны быть жёстко «вшиты» в ядро. Также не все модули допускают динамическую подгрузку (без перезагрузки ОС). Степень модульности ядер (количество и разнообразие кода, которое может быть вынесено в отдельные модули ядра и допускает динамическую подгрузку) различна в различных архитектурах модульных ядер. Ядро «Linux» в настоящее время имеет более модульную архитектуру, чем ядра *BSD (FreeBSDNetBSDOpenBSD).

Общей тенденцией развития современных модульных архитектур является всё большая модуларизация кода (повышение степени модульности ядер), улучшение механизмов динамической подгрузки и выгрузки, уменьшение или устранение необходимости в ручной подгрузке модулей или в переконфигурации ядра при изменениях аппаратуры путём введения тех или иных механизмов автоматического определения оборудования и автоматической подгрузки нужных модулей, универсализация кода ядра и введение в ядро абстрактных механизмов, предназначенных для совместного использования многими модулями (примером может служить VFS — «виртуальная файловая система», совместно используемая многими модулями файловых систем в ядре Linux).

Микроядро

Основная статьяМикроядро

Микроядро предоставляет только элементарные функции управления процессами и минимальный набор абстракций для работы с оборудованием. Бо́льшая часть работы осуществляется с помощью специальных пользовательских процессов, называемых сервисами.

Достоинства: Устойчивость к сбоям оборудования, ошибкам в компонентах системы.

Недостатки: Передача данных между процессами требует накладных расходов.

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

Остальные компоненты системы взаимодействуют друг с другом путем передачи сообщений через микроядро.

Основное достоинство микроядерной архитектуры — высокая степень модульности ядра операционной системы. Это существенно упрощает добавление в него новых компонентов. В микроядерной операционной системе можно, не прерывая ее работы, загружать и выгружать новые драйверы, файловые системы и т. д. Существенно упрощается процесс отладки компонентов ядра, так как новая версия драйвера может загружаться без перезапуска всей операционной системы. Компоненты ядра операционной системы ничем принципиально не отличаются от пользовательских программ, поэтому для их отладки можно применять обычные средства. Микроядерная архитектура повышает надежность системы, поскольку ошибка на уровне непривилегированной программы менее опасна, чем отказ на уровне режима ядра.

И чтобы добавить в ОС с микроядром драйвер того или иного устройства, не надо перекомпилировать всё ядро, а надо лишь отдельно откомпилировать этот драйвер и запустить его в пользовательском пространстве.

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

Микроядра типа ядра ОС Minix и GNU Hurd развиваются медленно, гораздо медленнее, чем Linux и ядро систем семейства BSD, но они обладают огромным потенциалом, то есть заделом на будущее, и, возможно, в этом самом будущем, достигнут аналогичного функционала.

Клаcсическим пpимером микpоядерной cистемы являeтся Symbian OS. Этo пpимер pаспространенной и oтработанной микpоядеpной (a нaчиная c вeрсии Symbian OS v8.1, и нaноядерной) oперационной сиcтемы. B oтличии oт Windows NT, cоздателям Symbian OS удaлось cовмеcтить эффeктивность и кoнцептуальную cтройность, нeсмотря нa тo чтo совремeнные вeрcии этoй сиcтемы пpедостaвляют обширные возможности, в тoм чиcле cредства для pабoты c пoтоковыми дaнными, cтеками пpотoколов, кpитичными к лaтентности ядpа, гpафикой и видеo выcокого pазрeшения). Будyчи микpoядерной oпeрационной cистемой, Symbian «вынoсит» пpaктически вcе пpикладные (т.e. выxoдящие зa прeделы кoмпетeнции ядpа) зaдачи в мoдули-сeрверы, фyнкциoнирующие в пoльзовательском aдреcном пpoстранствe.

Примеры: Symbian OSMach, используемый в GNU/Hurd и MacOS XQNXAIXMinix ; ChorusOS ; AmigaOSMorphOS.

[править]Экзоядро

Основная статьяЭкзоядро

Экзоядро — ядро операционной системы компьютеров, предоставляющее лишь функции для взаимодействия между процессами и безопасного выделения и освобождения ресурсов. Предполагается, что API для прикладных программ будут предоставляться внешними по отношению к ядру библиотеками (откуда и название архитектуры).

Возможность доступа к устройствам на уровне контроллеров позволит эффективней решать некоторые задачи, которые плохо вписываются в рамки универсальной ОС, например реализация СУБД будет иметь доступ к диску на уровне секторов диска, а не файлов и кластеров, что положительно скажется на быстродействии.

Наноядро

Основная статьяНаноядро

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


Гибридное ядро

Основная статьяГибридное ядро

Гибридные ядра это модифицированные микроядра, позволяющие для ускорения работы запускать «несущественные» части в пространстве ядра.

Имеют «гибридные» достоинства и недостатки.

Все рассмотренные подходы к построению операционных систем имеют свои достоинства и недостатки. В большинстве случаев современные операционные системы используют различные комбинации этих подходов. Так, например, ядро «Linux» представляет собой монолитную систему с элементами микроядерной архитектуры. При компиляции ядра можно разрешить динамическую загрузку и выгрузку очень многих компонентов ядра — так называемых модулей. В момент загрузки модуля его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.

Существуют варианты ОС GNU, в которых вместо монолитного ядра применяется ядро Mach (такое же, как в Hurd), а поверх него крутятся в пользовательском пространстве те же самые процессы, которые при использовании Linux были бы частью ядра. Другим примером смешанного подхода может служить возможность запуска операционной системы с монолитным ядром под управлением микроядра. Так устроены 4.4BSD и MkLinux, основанные на микроядре Mach. Микроядро обеспечивает управление виртуальной памятью и работу низкоуровневых драйверов. Все остальные функции, в том числе взаимодействие с прикладными программами, осуществляется монолитным ядром. Данный подход сформировался в результате попыток использовать преимущества микроядерной архитектуры, сохраняя по возможности хорошо отлаженный код монолитного ядра.

Наиболее тесно элементы микроядерной архитектуры и элементы монолитного ядра переплетены в ядре Windows NT. Хотя Windows NT часто называют микроядерной операционной системой, это не совсем так. Микроядро NT слишком велико (более 1 Мбайт), чтобы носить приставку «микро». Компоненты ядра Windows NT располагаются в вытесняемой памяти и взаимодействуют друг с другом путем передачи сообщений, как и положено в микроядерных операционных системах. В то же время все компоненты ядра работают в одном адресном пространстве и активно используют общие структуры данных, что свойственно операционным системам с монолитным ядром. По мнению специалистов Microsoft, причина проста: чисто микроядерный дизайн коммерчески невыгоден, поскольку неэффективен.

Таким образом, Windows NT можно с полным правом назвать гибридной операционной системой.

Смешанное ядро, в принципе, должно объединять преимущества монолитного ядра и микроядра: казалось бы, микроядро и монолитное ядро — крайности, а смешанное — золотая середина. В них возможно добавлять драйвера устройств двумя способами: и внутрь ядра, и в пользовательское пространство. Но на практике концепция смешанного ядра часто подчёркивает не только достоинства, но и недостатки обоих типов ядер (тот же NT со смешанным ядром не может видеть жесткие диски большого объёма в обход BIOS, в то время как GNU/Linux с его монолитным ядром обеспечивает такую возможность, поскольку возможность видеть жесткие диски в обход BIOS встроена в его ядро).

Примеры: Windows NTDragonFlyBSD.

Проект "ПОтребитель"

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

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

Проект "ПОтребитель" - это наша попытка открыть в Internet движение в защиту потребительских прав пользователей программного обеспечения. В приведённых на сайте материалах мы всесторонне демонстрируем последствия интервенции корпораций на рынок ИТ - некачественность производимых программ, необоснованное многократное завышение цен на них, наличие в программах "чёрных ходов" для разработчиков, абсурдные лицензионные соглашения и прямой обман потребителей.

Сайт проекта http://consumer.nm.ru/

"Проблема кодировок": стечение обстоятельств или стратегический замысел?

Павел Кармышев, vscc@operamail.com 

"Проблема кодировок": стечение обстоятельств или стратегический замысел?

В данном материале будет рассказано об одной из наиболее обсуждаемых как среди специалистов в области ИТ, так среди и рядовых пользователей компьютерной техники, тем - о проблеме представления (кодирования) символов естественных языков в машинно-читаемом виде. В кругах ИТ-общественности она получила название "проблемы кодировок".

Эта проблема состоит в том, что для решения задачи кодирования символов естественных языков в машинно-читаемом виде было предложено и принято множество стандартов, в том числе международных, которые несовместимы между собой и противоречат друг другу. В результате, как несложно догадаться, при работе с компьютерной техникой возникают многочисленные проблемы при обработке текстовой информации на ряде языков. Эти проблемы в значительной степени препятствуют и свободному обмену такой информацией, в том числе через сеть Internet.

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

К сожалению, в подавляющем большинстве материалов на тему "проблемы кодировок" их авторы (как русские, так и зарубежные) погружаются исключительно в одну тему - в описание многочисленных технических "внутренностей" различных стандартов, из-за которых при работе с тем или иным языком возникают проблемы. Если даже они и предлагают свои собственные варианты решения данной проблемы, то делают это, "не видя за деревьями леса" и не поднимая ряда нетехнических вопросов, которые имеют более глобальный характер. В результате ничего не меняется - несовместимые стандарты лишь продолжают множиться, и "проблема кодировок" остаётся нерешённой.

Для того, чтобы на практике приблизиться к решению "проблемы кодировок", нужно иметь представление о том,

  • каким образом она возникла;
  • кто её создал и продолжает поддерживать;
  • кто несёт от неё наибольший ущерб, а кто - выигрывает.

Собственно, рассмотрению этих вопросов и посвящена статья.

***

К началу 1960-х годов мировая сфера производства компьютерной техники контролировалась рядом крупнейших транснациональных корпораций, головные отделения которых располагались, преимущественно, в одной стране - США. И сложилась ситуация, когда каждая корпорация в своих устройствах предлагала свою собственную систему для кодирования символов естественных языков, несовместимую с таковой системой конкурентов. Каждая корпорация таким образом хотела заставить покупателей приобретать исключительно свою "линейку оборудования", в рамках которой совместимость различных устройств была обеспечена.

Подобная ситуация не устраивала покупателей компьютерной техники и шла вразрез с национальными интересами США - ведь буквы английского языка в каждой из указанных систем кодировались по-своему, и это тормозило развитие национальной сферы ИТ в США. Поэтому американскому национальному стандартизирующему органу - ASA (позднее - ANSI) - была поставлена задача решить проблему путём разработки единого государственного стандарта на систему кодирования символов естественных языков в машинно-читаемом виде.

Был организован специальный комитет (X3.4 Committee), для работы в котором были приглашены представители крупнейших корпораций-производителей компьютерной техники. Некоторые согласились принять участие в этой работе, поскольку на тот момент путаница в области систем кодирования достигла такой степени, что, очевидно, стала причинять проблемы уже и им самим. Ведь речь шла уже о том, что из-за использования разных систем кодирования символов стал невозможен обмен информацией даже между двумя компьютерами, произведёнными одной и той же корпорацией, но принадлежащих к разным "линейкам" или семействам.

"У нас существовало более 60 различных систем, использовавшихся для кодирования символов естественных языков в компьютерах. Это было самое настоящее 'вавилонское столпотворение'" [1] - констатировал в интервью американскому журналу "ComputerWorld" Боб Бемер (Bob Bemer), с 1956-го по 1962-й годы - работник корпорации IBM и один из главных разработчиков системы ASCII, которая в 1963-м году была принята ANSI в качестве государственного стандарта США на кодирование символов естественных языков в машинно-читаемом виде. При этом принята она была в недоработанном виде; окончательная версия системы ASCII была утверждена в 1968-м году.

Заметим, что корпорация IBM - бесспорный лидер в производстве компьютерной техники в 1960-х - 1970-х гг. - тем не менее без каких-либо последствий для себя нарушала государственный стандарт ASCII на протяжении многих лет после его официального принятия (вплоть до августа 1981-го года, когда она выпустила первые компьютеры серии PC). IBM использовала в своих "мэйнфреймах" System/360, которые впервые поступили в продажу в 1964-м году, свою собственную, несовместимую с ASCII, патентованную систему кодирования символов - EBCDIC, - которая существовала в 57 различных версиях, в том числе "национальных". При этом получить от IBM документацию по версиям EBCDIC было чрезвычайно сложно.

В 1967-м году ISO * выпускает рекомендацию ISO 646, которая фактически сделала систему ASCII уже международным стандартом. И это при том, что система ASCII заведомо не удовлетворяла самым очевидным требованиям, предъявляемым к системе кодирования символов, пригодной для международного применения.

* Об этой и других транснациональных стандартизирующих организациях см. здесь.

Как известно, количество одних только ныне используемых естественных языков, используемых в мире, превышает 2500. Общее количество символов, используемых только в одном из них - японском, к примеру, - превышает 65000.

В системе ASCII же для кодирования каждого символа использовалось 7 бит, а её таблица символов содержала 128 позиций (из которых 32 были отведены под управляющие последовательности, а собственно под символы было отведено, соответственно, 96). Среди этих 96 позиций 52 были уже забронированы за заглавными и строчными буквами английского алфавита, 10 - за арабскими цифрами, прочие - за различными знаками препинания и специальными символами. Для изображения символов и букв "всех прочих" национальных языков, кроме английского, ISO определила в этой таблице "открытые позиции", общим количеством... 10 штук.

Чтобы обеспечить "поддержку" работы с другими языками, кроме английского - не "работу", а именно "поддержку", рассматриваемую ISO, таким образом, как нечто опциональное! - предлагалось использовать технические ухищрения - управляющие последовательности (escape-последовательности). После того, как компьютер встречал в тексте специальную управляющую последовательность, считалось, что произошла смена стандартной таблицы символов, используемой в ASCII, на одну из "дополнительных", содержащую символы того или иного "дополнительного" языка. Таких "дополнительных" таблиц ISO было утверждено в общей сложности более 180!

***

Затем систему кодирования ASCII пересмотрели, и для кодирования каждого символа стали использовать не 7, а 8 бит (этот 8-й бит существовал и ранее, но использовался не для представления данных, а для осуществления контроля чётности). Заметим, что в тексте стандарта ASCII такое "расширение" никак не регламентировано. Это привело к многочисленным проблемам, так как существующее на тот момент ПО работало с ASCII в его оригинальном виде [8].

Объём таблицы символов возрос до 256 позиций. Это позволяло отказаться от использования управляющих последовательностей для обеспечения работы с некоторыми языками, символы которых можно было уместить в появившееся место *. ISO выпускает стандарты ISO 2022 и серию стандартов ISO 8859-X (X - цифра от 1 до 15), описывающие, как следует задействовать новую возможность.

* Заметим, что свободных позиций там было не так уж и много, так как некоторые были уже зарезервированы за псевдографическими символами. Такие символы необходимы при работе в текстовом "режиме работы" (с позволения сказать - при ближайшем рассмотрении оказывается, что он неполноценен абсолютно в каждом из важнейших аспектов. Например, векторные по своей природе символы представляются там с помощью растровых шаблонов...), первоначально созданным корпорацией IBM в семействе своих видеокарт, применённом в компьютерах PC.

Серия стандартов ISO 8859-X по заказу ISO разрабатывалась с середины 1980-х гг. ассоциацией крупнейших европейских производителей компьютерной техники (ECMA, European Computer Manufacturer's Association). В каждом из этих стандартов были определены 15 разных таблиц символов, каждая из которых содержала 256 позиций.

При этом оговаривалось, что первые 128 символов каждой таблицы должны обязательно быть теми же самыми, что в стандартной 128-символьной таблице системы ASCII (и рекомендации ISO 646). Таким образом, в каждой из этих таблиц вновь обеспечивалась неприкосновенность для символов английского языка. Для представления символов других языков отводились остающиеся позиции, во вторых половинах этих 256-символьных таблиц.

Совершенно очевидно, что определённая в ISO 8859-X схема заведомо неприемлема, так как в ней символы разных языков обозначаются одними и теми же двоичными последовательностями, и определить, какую именно таблицу символов использовать для их прочтения - ISO 8859-1 или же, например, ISO 8859-5, - невозможно, если не знать этого заранее.

Однако это - только половина проблемы. Дело в том, что американские корпорации не соблюдали стандарты ISO серии 8859-X. В "национальных" версиях своего программного обеспечения они использовали расширенную до 8 бит систему кодирования ASCII и таблицы символов, содержащие 256 позиций; первые 128 символов в которых соответствовали стандартной 128-символьной таблице 7-битной системы ASCII (то есть вновь английский язык не затронут), а расположение символов национальных языков во второй половине таблицы не соответствовало расположению, определённому ISO в стандартах серии 8859-X *.

* Кстати, некоторые из стандартов серии 8859-X, а именно - ISO 8859-1, ISO 8859-4, ISO 8859-6 - позднее, в 1998-м году, были пересмотрены самим ISO.

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

Возьмём в качестве примера многострадальный русский язык. Для кодирования больших и малых букв русского алфавита используются следующие несовместимые или не полностью совместимые между собой таблицы (и это не полный список; см. [2]):

  • ISO использует таблицу "Cyrillic", описанную в стандарте ISO 8859-5;

  • корпорации IBM и Microsoft в своих ОС PC DOS и MS DOS использует таблицу CP866. CP866 - это один из представителей целой серии таблиц, используемых для "поддержки национальных языков" различными производителями DOS (CP437, CP850, CP852 и т.д., вплоть до CP874. Интересно, что ISO 8859-5 в этом наборе есть и упоминается как CP915). Очевидно, эта серия таблиц была составлена разработчиками и региональными продавцами компьютерной техники (Microsoft называет её "OEM charsets"), но из приведённых в [5] данных ясно, что она как-то между прочим и фактически тайком была стандартизирована ISO - в документе ISO 9241-3, описывающем параметры мониторов * - "в дополнение" к уже определённой ранее серии стандартов 8859-X;

  • корпорация Apple в русскоязычной версии своей ОС Mac OS использует свою таблицу X-Mac-Cyrillic;

  • корпорация Microsoft в своих ОС Windows 3.X и Windows 9X использует таблицу CP-1251. CP-1251 - это также представитель целой серии таблиц (CP-125X, где X - от 0 до 8), использованных Microsoft в различных "национальных" версиях Windows. При этом в документации к Windows 3.X Microsoft называет их "ANSI charsets", и вполне возможно, что они действительно были где-то и когда-то стандартизированы ANSI;

  • советский (теперь - русский) национальный стандартизирующий орган ГОСТ определяет таблицу КОИ-8 (ГОСТ 19768-74; в этом стандарте определяется также 128-символьная таблица КОИ-7), затем - таблицу, известную как "основная кодировка ГОСТ" (ГОСТ 19768-87). (Впоследствии, правда, ГОСТ принял "альтернативную кодировку", таблица которой соответствовала, за малым исключением, таблице CP866 - только было уже поздно).

* Также в этой связи там упоминается документ немецкого национального стандартизирующего института - DIN - за номером 66234. Между прочим, и DIN, и ANSI и ГОСТ Р являются членами ISO.

***

На практике в аппаратном обеспечении компьютерных систем * и в ОС для работы с текстами на разных языках использовались и по сей день используются 8-битная система кодирования символов вкупе с вышеописанными различными таблицами символов, объёмом в 256 позиций каждая. Однако американские компьютерные корпорации IBM и Xerox ещё в первой половине 1980-х начали работу над созданием новой "многоязычной" системы кодирования, в которой для представления символов используются двоичные последовательности длиною в 16 бит, а также единая большая таблица символов объёмом в 65536 позиций.

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

Впоследствии к этим корпорациям присоединились другие, и был начат проект, названный представителями американской компьютерной индустрии "Unification Code", или Unicode. Причём, дошло до того, что в 1991-м году эти корпорации (в их числе также Adobe, Microsoft и др.) для продвижения Unicode в качестве международного стандарта создали одноимённый транснациональный консорциум [3].

Главной задачей Unicode официально было объявлено сведение существующих в мире символов естественных языков в указанную большую таблицу и обеспечение одновременной и "равноправной" работы с ними. То есть, очевидно, когда количество недовольных "проблемой кодировок" пользователей превысило некоторую "критическую массу", указанные корпорации решили "обнародовать" систему Unicode и представить её как решение данной проблемы, делая намучившимся операторам ПК заманчивое, на первый взгляд, предложение - покупать поддерживающее её ПО.

Однако на самом деле и система Unicode является не окончательным решением проблемы кодирования символов, а лишь паллиативом. Дело в том, что метод кодирования, используемый в оригинальной версии Unicode, не предусматривал использования управляющих последовательностей для переключения между "базовой" и возможными "дополнительными" таблицами символов (как в ISO 646), поэтому максимальное количество символов, которые можно было представить, пользуясь Unicode, равнялось объёму одной-единственной ("базовой") таблицы символов, используемой в этой системе - 65536.

А поскольку мы знаем, что в одном только японском языке используется около 65000 символов, можно понять заранее, что метод и таблица символов Unicode на самом деле малы для представления всех символов языков мира.

Таблица символов, используемая в Unicode, устроена следующим образом. Она разбита на 256 рядов. Первые ряды содержат некоторые из старых таблиц символов (объёмом в 128 или 256 позиций каждая) , определённых для некоторых языков. Самый первый ряд (под номером 0) представляет из себя таблицу ISO 8859-1 (в свою очередь, она содержит 128 символов из таблицы 7-битной системы ASCII, а также некоторые символы, используемые в языках стран Западной Европы).

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

В общей сложности в таблице символов системы Unicode (на данный момент, то есть в версии 3.0 - см. ниже) насчитывается около 28000 иероглифов. Как видно, многие иероглифы - в частности те, что в Японии используются для написания имён людей, названий местностей, а также в исторических текстах - вообще были оставлены "за бортом". При этом "похожие" и действительно одинаковые символы европейских языков, например, букв "A", "унификации" подвергнуты не были, поэтому в то же самое время масса места в таблице символов Unicode используется, по сути, впустую.

Как следствие, жители стран Юго-Восточной Азии, за которых американские корпорации пытаются решить, какие символы им "разрешается" использовать в компьютерной технике, а какие - "запрещается", уже в течение нескольких лет борются с системой Unicode. Она совершенно не соответствует самым первоочерёдным требованиям, предъявляемым к ней в этих странах, - вопреки рекламным заявлениям корпораций-членов консорциума.

***

Уместно рассмотреть теперь, какие агрессивные шаги предпринимают корпорации для утверждения Unicode в качестве международного стандарта.

В начале 1990-х в ISO для решения проблемы кодировок рассматривалась другая, более совершенная чем Unicode, система кодирования символов - UCS (Universal Coded Character Set). Объём её таблицы символов составляет примерно 4,3 миллиарда символов (а точнее, 2^32=4294967296). Эта таблица разбита на 65536 "внутренних" таблиц по 65536 символов каждая, и разбивка этих "внутренних" таблиц (256x256 рядов) совпадает с разбивкой таблицы, используемой в системе Unicode. Для переключения между "внутренними" таблица ми в UCS предлагалось использовать управляющие последовательности.

Система UCS была описана в "черновике" ISO DIS-10646.1:1990, подготовленном ISO/IEC JTC1/SC02/WG02. Её поддержали европейские и японские исследователи. Однако американские корпорации UCS не устраивала. А поскольку ISO, как она сама указывает в своих документах, "выпускает только те стандарты, которые нужны рынку", а также потому, что многие нанимаемые ISO "эксперты" - это работники американских компьютерных корпораций, то неудивительно, что вскоре черновик ISO DIS-10646.1:1990 тихо прекратил своё существование.

"Зато" появился - уже в качестве не черновика, а стандарта - документ ISO/IEC 10646 Version 2, позднее названный ISO/IEC 10646-1: 1993. Он был обозначен как "ISO/IEC 10646 Universal Multiple-Octet Coded Character Set (UCS) - Part 1: Architecture and Basic Multilingual Plane", и в качестве его базовой таблицы символов (т.е. первой из "внутренних" 65536-символьных таблиц) была утверждена... правильно, таблица системы Unicode, со всеми вытекающими отсюда последствиями.

Заметим, что по мере изменения и пополнения таблицы символов системы Unicode и выхода новых версий этой системы - а эта работа ведётся постоянно, поскольку изначально система Unicode была представлена в ISO в недоработанном виде - выходят и новые документы ISO. Система Unicode существует в общей сложности в следующих версиях: 1.1 (соответствует стандарту ISO/IEC 10646-1: 1993), 2.0, 2.1 (тот же стандарт ISO/IEC 10646-1: 1993 плюс дополнения: "Amendments" с 1-го по 7-е и "Technical Corrigenda" 1 и 2), 3.0 (стандарт ISO/IEC 10646-1:2000). В начале 2002-го года планируется выход Unicode 3.2, а в 2003-м - Unicode 4.0.

Кстати, работа по "унификации" иероглифов для таблицы символов Unicode сейчас ведётся тоже не консорциумом Unicode, а ISO - специальным комитетом IRG при JTC1/SC02/WG02. И это при том, что в оригинальной версии UCS (в черновике ISO DIS-10646.1:1990) было чётко определено, что "базовая" (первая "внутренняя") таблица вообще не предназначена для иероглифов. При этом работа по "унификации" продолжается до сих пор, хотя в одной из более поздних версий системы Unicode было объявлено, что таблица символов будет расширена до примерно 1000000 позиций (с помощью использования специальных "расширений", которые в первоначальной версии Unicode не планировались - см. выше).

В дополнение к всему уже сказанному об Unicode нужно отметить ещё некоторые обстоятельства. Для того, чтобы сделать её хотя бы частично совместимой с ранее существовавшим ПО (а возможно, и чтобы не тратить денег на серьёзную переделку своего ПО, находящегося в стадии разработки), членами консорциума были разработаны различные методы представления (номеров) символов таблицы Unicode: UTF-8, UTF16, UTF16LE и UTF16BE. Отсюда возникает необходимость в реализации в ПО поддержки каждого из них, что определённо порождает новый виток путаницы. С этим обстоятельством связано, вероятно, большинство проблем, существующих в конкретных реализациях поддержки работы с системой кодирования Unicode в различном ПО.

Отметим, что консорциум Unicode держит "про запас" методы UTF32, UTF32LE, UTF32BE, в которых для кодирования (номера) каждого символа предусматривается использование уже 32-битных последовательностей (что, однако, "автоматически" не означает, что таблица символов будет расширена до 4,3 миллиардов позиций). Однако их применение чрезвычайно расточительно с точки зрения расходования системных ресурсов, и представители Unicode прямо указывают, что в ближайшее время промышленность (читай - корпорации-члены Unicode) не планирует переходить на применение этих методов.

У системы Unicode есть и другие нерешённые проблемы, наличие которых для международного стандарта просто неприлично, но мы не будем на них останавливаться отдельно. Интересующиеся могут ознакомиться с этой информацией на web-сайте проекта TRON [4].

***

Зададимся теперь вопросом: почему же всё-таки не возник единый международный стандарт, в таблице символов которого были бы последовательно занесены символы всех существующих естественных языков *, притом одинаково удобный для применения во всех странах мира? Почему, напротив, в качестве международных принимались и принимаются заведомо несовершенные стандарты, часто недоработанные, и появилось большое количество несовместимых таблиц символов? Попробуем оценить основные причины.

* По данным японских учёных, символы всех известных языков мира, как используемых сейчас, так и ныне "мёртвых", можно уместить в таблицу символов, насчитывающую 2^24 = 16777216 позиций.

  1. корпорациям-производителям ПО, очевидно, весьма выгодно продавать разные "национальные" версии операционных систем, офисных пакетов и т.д. за отдельные деньги. Так, Microsoft продавала "американскую", "панъевропейскую", "восточно-азиатскую", " ближневосточную" и "тайскую" версии Windows 95, а IBM - стандартную, "арабскую", "израильскую", "японскую", "корейскую", "китайскую" и "тайваньскую" версии PC DOS. Отсюда возникновение несовместимых таблиц символов, содержащих 256 позиций каждая.

    Кроме того, как уже говорилось, это, очевидно, позволило корпорациям в дальнейшем нажиться на продажах ПО, соответствующего стандарту Unicode - кому оно было бы нужно, не существуй "проблема кодировок"?! - а также на продаже самогО текста этого стандарта.

  2. поскольку "проблема кодировок" теперь не касается английского языка, у ANSI и правительства США не было повода вмешиваться в её решение, как это было в 1963-м.

    Более того, "проблема кодировок", не касающаяся английского языка, стратегически выгодна для США. Она обеспечивает лидерство США и его крупнейшего англоязычного партнёра по НАТО - Великобритании (и Австралии) - в сфере ИТ, и отставание других стран, так как "проблема кодировок" препятствует информационному обмену между людьми, работающими с данными не на английском языке.

    Особенно это заметно на примере важнейшей сферы ИТ, относящейся к сети Internet:

  • использование для представления различных символов различных языков одних и тех же двоичных последовательностей (при этом "угадать", которую из таблиц символов нужно использовать, ПО без дополнительных данных не может) делает их употребление в именах файлов * и Internet-ресурсов если не невозможным, то, как минимум, нефункциональным и потому нежелательным. Символам английского языка, напротив, всегда "горит зелёный свет";

  • существование "проблемы кодировок" препятствует навигации по не англоязычным текстовым материалам в сети Internet, так как оно значительно увеличивает требования к вычислительным мощностям и программному обеспечению компьютерных систем, на базе которых строятся поисковые серверы Internet. Кроме того, заметим, что на важнейшей - начальной - стадии развития Internet, когда на серверы выкладывались данные, ни клиентского, ни серверного ПО, которое позволяло бы удовлетворительным образом решить "проблему кодировок", практически не было. Тем, кто не согласен, предлагаю вспомнить, сколько таблиц символов и с каким качеством "понимали" ранние версии, ну, хотя бы www-броузеров Netscape Navigator и Internet Explorer... Поэтому можно с полной ответственностью заявить, что это воспрепятствовало равноправному участию всех стран в построении международного информационного пространства. "Проблема кодировок" не дала шансов вырваться в этой важнейшей области ИТ в лидеры ни одной из не англоязычных стран, так как не позволила своевременно разместить в сети Internet их национальное культурное достояние и обеспечить его общедоступность;

  • проявление "проблемы кодировок" в сервисах www, e-mail и news оказало колоссальное влияние не только на поставщиков информации, но и на её конечных потребителей: во-первых, увеличивается общее время пребывания людей в Internet (что выгодно провайдерам, в конечном итоге приносящим доход экономике США), во-вторых, большинство непрофессионалов таким образом вынуждается пользоваться для работы с Internet теми программами, в которых поддерживается наибольшее количество таблиц символов и методов кодирования. Как правило, такое ПО относится к одной из двух категорий - произведённое корпорациями в соответствии с их интересами (вероятно, нет необходимости лишний раз перечислять здесь его, мягко говоря, недостатки) или же предлагаемое за отдельные деньги. ПО, принадлежащее к последней категории, скорее всего, будет загружено нуждающимися из Internet, что вытянет из их карманов ещё больше денег в карманы провайдеров.

* Эта проблема так или иначе освещена в трудах практически всех русских авторов "компьютерных" книг, включая бестселлеры Левина и Фигурнова, и официально признана (но не решена, заметим...) Microsoft в стандартной документации к ОС Windows 9X - см. например, WINDIR\general.txt, секция "Pan-European: known issues". Существенные проблемы создаёт "проблема кодировок" и во многих других случаях, к примеру, при запароливании архивов (и передаче их между компьютерами, на которых используются разные таблицы символов), если при этом в пароле используются буквы национального языка. Что касается Internet-адресов, то возможность использования в них букв русского (например) языка была "санкционирована" практически только через 10 лет после возникновения сети (см., например, [6])... При этом гарантии качества работы данной "услуги", если не ошибаюсь, не предоставляется, что с учётом сказанного выше (а также того, что далеко не всё ПО для работы с Internet, в том числе провайдерское, способно обеспечить её поддержку) и неудивительно.

Наконец, существование "проблемы кодировок", вкупе с чрезвычайно низким качеством перевода "национальных" версий многочисленных программных продуктов (да и всей относящейся к ИТ терминологии, запутанной даже в оригинальных, преимущественно англоязычных, источниках), а то и полным отсутствием таковых, послужило серьёзным толчком к "англификации" мира.

Получается, что сложившиеся (или всё же кем-то намеренно сложенные?) обстоятельства в сфере ИТ фактически в принудительном порядке заставляют всё больше и больше людей изучать английский язык и даже переходить на использование его алфавита, отказываясь от алфавитов своих национальных языков - вспомните-ка так часто вынужденно используемую в www и e-mail транслитерацию! Ажиотаж вокруг этого уже сейчас активно подогревают некоторые псевдонаучные деятели, ненавязчиво убеждающие, в частности, русскоязычную общественность в том, что "лет через 30-40 она естественным образом перейдёт на использование латиницы"...

Чем это грозит накапливаемому в течение веков национальному информационно-культурному потенциалу, вероятно, не менее очевидно, чем стратегический характер "проблемы кодировок". И то, что направлена она не только на отдельно взятый "великий и могучий" русский язык... Уместно обратить внимание на то, что наибольший вред "проблема кодировок" имеет тенденцию причинять именно государствам с наиболее богатыми культурными традициями, таким как Япония, Китай (Тайвань) и Южная Корея. При этом отметим, что данные государства являются преуспевшими в развитии не только культурной, но и, по совместительству технологической базы. Высокотехнологическая промышленность ("hi-tech") в этих странах является единственным реальным конкурентом таковой промышленности США. Не правда ли, интересное совпадение?!

***

В завершение статьи хотелось бы привести несколько фактов без комментариев.

В таблице символов японского национального стандарта JIS X 0208-1990 предусмотрено место не только для иероглифов японского языка, но также для букв греческого алфавита и кириллицы; в то же время аналогичные советско-росийские ГОСТы, как было показано выше, не дают пользоваться не то что японскими, но даже собственными, русскими, буквами. Не менее уместно заметить, что ГОСТ уже много лет как нарушает собственные стандарты, и даже сайт этого ведомства выдаёт страницы с использованием таблицы символов CP-1251.
(Прим. ред. - С. Середы: При этом все немного забывают, что в России сейчас, а тем более в СССР ранее, пишут и писали не только на русском, но и на украинском, белорусском, татарском, казахском, молдавском, армянском, грузинском, чеченском, иврите, якутском (саха), литовском, латышском, эстонском и языках многих других национальностей, ныне населяющих СНГ. Можно ли после этого назвать работу ГОСТа в области унификации и стандартизации национальных кодировок хотя бы удовлетворительной? Чем же мы 'не вышли', если китайцы и японцы способны решать такие проблемы, а мы - нет!?)

В 1991-м году в Испанию была завезена крупная партия западных компьютеров, на которых использовалась таблица символов, не содержащая одной из букв алфавита национального языка (а именно буквы "N под тильдой"). В результате этого произошёл скандал на государственном уровне: "возмущённые возможностью искажения испанских слов (в том числе и ESPAN~A) парламентарии обязали торговых посредников оплатить стоимость адаптации партии компьютеров, а впредь на таможнях осуществлять 'входной контроль'" [7]. Что касается русского ГОСТа, в ряде своих вышеперечисленных творенийстандартизировал на государственном уровне отсутствие в таблице символов одной из букв национального алфавита (Ё)...

Несмотря на то, что в российских научных кругах имеется ряд интересных предложений по решению "проблемы кодировок" (см., например, [9]), о серьёзной поддержке их на государственном уровне речи не идёт. Подавляющей части русскоязычной широкой общественности эти предложения вообще неизвестны. Какой уж тут разговор о "национальных интересах"?

***

На этом разрешите окончить статью. Надеюсь, мне удалось предоставить читателям достаточно пищи для размышлений...

Использованные источники:

[1]  http://www.bobbemer.com/brandela.htm
[2]  http://czyborra.com/charsets/,
     http://czyborra.com/charsets/cyrillic.html#Unicode
[3]  http://www.unicode.org/ (официальный сайт консорциума)
[4]  http://tronweb.super-nova.co.jp/characcodehist.html (сайт проекта TRON Web)
[5] Документация ОС PC DOS 2000 ( (tm) of IBM Corp. )
[6]  http://www.625-net.ru/news/2001/20010227.htm#1 (реклама РБК)
[7] А.И. Катаев. "Текстовый процессор ЛЕКСИКОН (от Н до С)".
    Москва, 1992, изд-во "Радио и связь", ISBN 5-256-01060-3.
[8] О. Татарников. "Крестоносцы", 1997 // "Компьютерра", №189 (стр. 18)
[9] Ю.С. Затуливетер. "Информация и эволюционное моделирование", 2000.
    См. http://zvt.hotbox.ru/