Какая операционная системы была первой ос для 16 разрядных процессоров

Обновлено: 03.07.2024

В компьютерной архитектуры , 16-битных чисел , адресов памяти , или других данных единиц являются те , которые являются 16 битов (2 октета ) в ширину. Кроме того, 16-битные архитектуры ЦП и ALU основаны на регистрах , адресных шинах или шинах данных такого размера. 16-битные микрокомпьютеры - это компьютеры, в которых 16-битные микропроцессоры были нормой.

16-битный регистр может хранить 2 16 различных значений. Диапазон из целочисленных значений , которые могут быть сохранены в 16 битах зависит от целочисленного представления используется. В двух наиболее распространенных представлениях диапазон составляет от 0 до 65 535 (2 16 - 1) для представления в виде ( беззнакового ) двоичного числа и от −32 768 (−1 × 2 15 ) до 32 767 (2 15 - 1) для представления в виде два дополнения . Поскольку 2 16 равно 65 536, процессор с 16-разрядными адресами памяти может напрямую обращаться к 64 КБ (65 536 байтам) памяти с байтовой адресацией . Если система использует сегментацию со смещением 16-битных сегментов, можно получить доступ к большему количеству.

СОДЕРЖАНИЕ

16-битная архитектура

Ранние однокристальные 16-разрядные микропроцессоры ( ок. 1975–76) включают Panafacom MN1610 (1975), National Semiconductor PACE (1975), General Instrument CP1600 (1975), Texas Instruments TMS9900 (1976), Ferranti F100-L и HP BPC . Другие известные 16-разрядные процессоры включают Intel 8086 , Intel 80286 , WDC 65C816 и Zilog Z8000 . Intel 8088 был двоичным совместит с Intel 8086, и был 16-бит в том , что его регистры были 16 бит, и арифметические команды могут работать на 16-битных величинах, даже если его внешняя шина была 8 битыми.

16-битное целое число может хранить 2 16 (или 65 536) различных значений. В представлении без знака эти значения представляют собой целые числа от 0 до 65 535; с использованием дополнения до двух возможные значения находятся в диапазоне от -32 768 до 32 767. Следовательно, процессор с 16-разрядными адресами памяти может напрямую обращаться к 64 КБ памяти с байтовой адресацией .

16/32-битные Motorola 68000 и Intel 386SX

Motorola 68000 иногда называют 16-бит , потому что , как она обрабатывается основы математики. Набор команд был основан на 32-битных числах, а внутренние регистры были 32-битными , так что по общепринятым определениям 68000 является 32-битным дизайном. Внутренне базовая 32-битная арифметика выполняется с использованием двух 16-битных операций, что приводит к некоторым описаниям системы как 16-битной, или «16/32». Хотя в то время это не было обычным решением, в начале 1980-х такие решения имели долгую историю в компьютерной области, когда различные конструкции выполняли математические вычисления, даже 1-битные за раз, что известно как «последовательная арифметика», в то время как большинство проектов к 1970-м годам обрабатывались по крайней мере несколько бит за раз.

Типичным примером является Data General Nova , представлявшая собой 16-разрядную архитектуру, выполнявшую математические вычисления как четыре 4-разрядные операции, поскольку это был размер обычного однокристального ALU того времени. Используя определение, применяемое к 68000, Nova будет 4-битным компьютером, или 4/16. Вскоре после появления Nova была представлена ​​вторая версия, SuperNova, которая включала четыре из 4-битных ALU для выполнения 16-битных математических вычислений за раз и, следовательно, обеспечивала более высокую производительность. Однако это было незаметно для пользователя и программ, которые всегда использовали 16-битные инструкции. Аналогичным образом, более поздние члены семейства 68000, такие как Motorola 68020 , имели 32-битные ALU.

Аналогичный анализ применим к замене процессора Intel 80286 , названному 386SX , который представляет собой 32-битный процессор с 32-битным ALU и внутренними 32-битными путями данных с 16-битной внешней шиной и 24-битной адресацией процессора, который он заменил.

16-битное приложение

В контексте совместимости с IBM PC и платформ Wintel , 16-битное приложение - это любое программное обеспечение, написанное для MS-DOS , OS / 2 1.x или более ранних версий Microsoft Windows, которое изначально работало на 16-битных Intel 8088 и Intel 80286. микропроцессоры . Такие приложения использовали 20- битный или 24-битный сегмент или представление адреса со смещением селектора, чтобы расширить диапазон адресуемых ячеек памяти за пределы того, что было возможно при использовании только 16-битных адресов. Программы, содержащие более 2 16 байт (65 536 байт ) инструкций и данных, поэтому требовали специальных инструкций для переключения между их 64-килобайтными сегментами , что увеличивало сложность программирования 16-битных приложений.

FIFO (First-In-First-Out) – режим обслуживания некоторой очереди (например, очереди введенных заданий) в порядке их поступления.

UNIX - первая мобильная ОС для миникомпьютеров, разработанная в 1970 г. Б. Керниганом и Д. Ритчи на новом языке программирования Си .

Буферизация вывода (spooling) – хранение для каждого задания буфера его вывода (в виде области памяти или файла), накопление в буфере выводимой заданием информации и ее вывод полностью на устройство (принтер) при завершении задания.

ДИСПАК – отечественная операционная система для ЭВМ БЭСМ-6.

Диспетчер (dispatcher) – ранняя упрощенная версия операционной системы , - системная программа , управляющая прохождением пакета вводимых заданий.

Единая система ЭВМ (ЕС ЭВМ) – семейство отечественных mainframe -компьютеров 1970-х – 1980-х годов, разработанных путем копирования американских компьютеров серии IBM 360.

Задание (job) – пользовательская программа , введенная в систему с внешнего носителя или с терминала.

Мобильная (переносимая) ОС – операционная система , используемая на нескольких семействах компьютеров путем переноса ее кода (возможно, с небольшими изменениями).

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

Мультипрограммирование (multi-programming) – одновременная обработка операционной системой нескольких пользовательских заданий.

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

Откачка и подкачка заданий (swapping) – загрузка задания с диска в оперативную память при его активизации и его выгрузка из памяти на диск при неактивности задания; выполняется в режиме разделения времени.

Пакетная обработка (batch mode) – обработка пакета заданий , введенных пользователями, с учетом их приоритетов и требуемых ими ресурсов.

Планирование загрузки процессора (CPU scheduling) – реализация в ОС алгоритмов выбора очередного задания из набора загруженных в память заданий и выделения кванта времени центрального процессора очередному выбранному заданию.

Разделение времени (time sharing) – поддержка операционной системой одновременной работы в системе нескольких пользователей с терминалов, управление прохождением своих заданий, выполнение их ввода, редактирования, компиляции, выполнения, отладки, визуализации результатов.

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

Резидентная программа - программа , постоянно находящаяся в оперативной памяти по фиксированным адресам.

Система мини-ЭВМ (СМ ЭВМ) - семейство отечественных миникомпьютеров 1970-х – 1980-х годов, разработанных путем копирования американских компьютеров серии PDP 10 – PDP 11.

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

Управление процессами – параллельное (или поочередное - на однопроцессорном компьютере) выполнение пользовательских процессов ; возможность явного запуска параллельных процессов, управления ими и их синхронизации.

Фрагментация памяти - дробление свободной памяти на мелкие несмежные участки, вследствие неточного совпадения размеров свободных и требуемых при запросах к ОС участков памяти.

"Эльбрус" - семейство отечественных многопроцессорных суперкомпьютеров (Эльбрус-1, Эльбрус-2) 1970-х – 1980-х годов, архитектура которого основана на использовании тегов, принципах динамизма и аппаратной поддержке механизмов реализации языков высокого уровня ; в операционной системе впервые был реализован аналог многопоточных вычислений (multi-threading), а также были поддержаны виртуальная память , пакетный режим , режим разделения времени , динамическое выделение памяти по запросу, динамическая линковка и загрузка выполняемых программ при первом вызове.

Краткие итоги

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

В 1960-х гг. были разработаны диспетчеры – упрощенные варианты ОС, осуществлявшие поочередный пропуск пользовательских заданий.

Для классических ОС 1960-х – 1970-х гг. ( ATLAS , MULTICS , OS IBM 360) были характерны поддержка мультипрограммирования , пакетного режима, режима разделения времени, управление процессами .

Первой мобильной ОС, использованной на нескольких аппаратных платформах, стала система UNIX , первая версия которой разработана в 1970 г.

Операционная система MacOS фирмы Apple характеризуется удобным графическим пользовательским интерфейсом.

С начала 1990-х гг. до настоящего времени имеет место эволюция Windows от графической оболочки к MS-DOS до наиболее популярной ОС для настольных и портативных компьютеров ( Windows 7, Windows 2008 и др.). Также популярна ОС Linux (как серверная ОС ).

Наиболее распространены в мире операционные системы для мобильных устройств, ввиду широкой распространенности последних. Это прежде всего ОС Symbian. Windows в этом отношении на втором месте.

Наиболее распространенные диалекты ОС UNIX : Berkeley Software Distribution ( BSD ), в настоящее время – FreeBSD (University of Berkeley); System V Release 4 ( SVR4 ) – фирмы AT&T; Linux (RedHat, SuSE, Mandrake, Caldera, Debian, Fedora и другие диалекты); Solaris ( Oracle / Sun ); IRIX ( Silicon Graphics ); HP-UX (Hewlett-Packard); Digital UNIX ( Digital / Compaq).

Из отечественных ОС следует отметить ОС ДИСПАК для БЭСМ-6 и ОС "Эльбрус" для МВК "Эльбрус", отличавшиеся оригинальными идеями и методами.

В 1970-х гг. в СССР было принято правительственное решение о копировании зарубежных компьютеров серии IBM 360, а затем – миникомпьютеров серий PDP -10 и PDP -11, которое на долгие годы предопределило развитие отечественной вычислительной техники и на 15-20 лет продлило срок использования их операционных систем.

Первые операционные системы для mainframe -компьютеров поддерживали обработку пакетов заданий в однозадачном режиме. Затем в ОС появилась поддержка мультипрограммирования и разделения времени, что привело к необходимости реализации в ОС распределения памяти для пользовательских заданий, диспетчеризации процессора и буферизации ввода-вывода.

Особенности ОС с поддержкой режима разделения времени: хранение заданий в памяти либо на диске, с их откачкой и подкачкой ( swapping ) по мере необходимости; поддержка интерактивного взаимодействия между пользователями и ОС; поддержка диалогового доступа к коду и данным пользователей.

Полный список операционных систем

Это список известных операционных систем. Операционные системы могут быть классифицированы по базовой технологии ( UNIX-подобные , пост-UNIX/потомки UΝΙΧ), типу лицензии (проприетарная или открытая), развивается ли в настоящее время (устаревшие или современные), по назначению (универсальные, ОС встроенных систем, ОС PDA , ОС реального времени, для рабочих станций или для серверов), а также по множеству других признаков.

Проприетарные


Ранние


Acorn


Atari ST


Apple


Корпорация Be


Control Data Corporation


DEC/Compaq/HP

    — Выпущена в декабре 1987 года. Одна из первых операционных систем с поддержкой многозадачного режима процессора 80286. — Выпущена в октябре 1988 года. SE = Standard Edition. — 1989 год. — 1989 год. Редакции SE и EE. Улучшенный Presentation Manager. — 1991 год. Также редакции SE и EE. — Весна 1992 года. Первая версия OS/2, которой для работы необходим процессор 80386 с его защищённым режимом. — Май 1993 года. — Конец 1993 года. Не содержит подсистемы Win-OS/2 и устанавливается поверх Windows 3.1. Стоит дешевле других версий OS/2. — Октябрь 1994 года. — Сентябрь 1996 года. — Апрель 1999 года. Дальнейшие обновления получили имена CP1 и CP2 (Convenience Package) и базировались на Aurora.
    — следующая версия после IBM OS/390
    — первая ОС для архитектуры System 360 — OEM-версия MS-DOS, впоследствии дорабатывалась самостоятельно.
    , СВМ, МВС, ДОС ЕС, МОС ЕС — IBM-совместимые операционные системы (клоны) советского производства


ICT/ICL


Microsoft

    (версия Windows 4.00.950) (версия Windows 4.10.1998) (версия Windows 4.90.3000)
    — первая версия Windows NT, выпущена 27 июля 1993 (варианты поставки: Workstation — для рабочих станций и Server — для серверов)
      — отлаженная версия Windows NT 3.5
      (версия Windows NT 5.2) — вариант Windows XP для работы на серверах — вариант Windows XP для работы в кластерных системах — вариант Windows XP для встраиваемых систем
      (версия Windows NT 6.0) — вариант Windows Vista для работы на серверах — замена Windows Compute Cluster Server 2003 для кластерных систем — вариант Windows Vista для встраиваемых систем


      , Pocket PC — версии Windows CE для мобильных телефонов и наладонных компьютеров. — версии Windows CE для встраиваемых систем, включая роботов.


    Mediatek

      — Операционная система для мобильных телефонов на MTK (ARM) процессорах

    Novell


    Strawberry Development Group


    Sun Microsystems

      — Unix-подобная ОС, основана на реализации BSD Unix
      • SunOS 4.x — (Solaris 1.x)
      • SunOS 5.x — (Solaris 2.x, 7.x и более поздние) — SunOS 5.11


      Другие Unix-подобные и POSIX-совместимые

        (Apollo Computer) от Intergraph (Unix-emulating OS from Cromemco) (Эмулирующая Unix ОС от Mark Williams Co. для персональных компьютеров) — Unix-подобная ОС, разработана компанией Sequent Computer Systems, которая позже была поглощена IBM от SGI — свое развитие получила в ОС Mac OS X после объединения компаний NeXT и Apple — Unix-подобная RTOS, эмулирующая Unix от Microware для процессора Motorola 6809
          (Эмулирующая Unix от Microware для процессора Motorola 680x0; создана из OS-9) (портативная эмуляция Unix от Microware; одна из реализаций предназначена для Intel x86)


        Свободные


        Unix-подобные

          (Berkeley Software Distribution, реализация Unix для DECVAX) и её вариации: — основной акцент на безопасности
          (ОС, реализованная как набор серверов работающих на микроядре L4)
          (наиболее популярное свободное Unix-подобное ядро) (основана на ядре «Linux» и использует много кода AtheOS, подобна BeOS)
          (распределённая ОС, произошедшая от Plan 9) (распределённая ОС, произошедшая от Plan 9) (ОС на основе виртуальной машины, произошла от Plan 9)


        Windows-совместимые


        Исследовательские Unix-подобные

          (разработана Bell Labs в 1970 году, идея Кена Томпсона) (от разработчиков ядер ОС в CMU; см.: NeXTSTEP) (учебная ОС от Эндрю Таненбаума) (учебная ОС, сделанная в MIT) (разрабатывается в IBM) (первая отечественная UNIX-подобная операционная система) (советский клон UNIX) (Инструментальная мобильная операционная система — разработана в СССР в 1985 году в ИНЭУМ Институт электронных управляющих машин, Головное КБ Минприбора).


        Исследовательские не-UNIX

          [1] — Object Oriented Operation System [2] — исследовательская ОС от Кембриджского университета — 1994 год — Stanford, ранние 1980-е — разработка Амстердамского свободного университета. — простейшая однозадачная операционная система, использующая только функции BIOS для работы с накопителем информации и дисплеем; разработана в домашних условиях автором с ником Alien7. Для программистов имеется возможность перекомпилировать программы на C++ из Microsoft Windows в MaxOS, если в программе не используются специфические функции Microsoft Windows.


        Клоны MS-DOS

          (Quick and Dirty Operating System) — клон CP/M, созданный в 1980 году Тимом Патерсоном (Tim Paterson) из Seattle Computer Products (SCP) для новых процессоров Intel 808x, был куплен Microsoft за 50 тыс. долл. и стал MS-DOS/PC-DOS. — разработана Microsoft для IBM PC-совместимых машин. — версия DOS от IBM. — ОС от Digital Research, потом Novell, Caldera, Siemens AG …; в настоящее время используется в специфических задачах. — открытая, наследник DR-DOS — свободная DOS, цель — 100 % совместимость с MS-DOS. — ОС от PhysTechSoft (Россия). [3] — ОС от Datalight для встроенных систем. — советский клон для ПК Искра-1030. — советский клон для ПК ЕС-1840. — советский клон для ПК ЕС-1840.


        Авторские/внутренние, не-UNIX и другие

          — новое название для Bluebottle (см. также: AOS) — ОС созданная в рамках проекта «Oberon — операционная система и компилятор» (Оберон (операционная система)) (AROS Research Operating System), свободная портируемая (в том числе, для процессорной линейки x86) операционная система, идейный потомок AmigaOS — развитие идей AOS, современное название A2.
            (CP/M для Intel 8080/8085 и Zilog Z80 от Digital Research)) (CP/M для Intel 8088/86 от Digital Research) (многопрограммная версия CP/M-80 от Digital Research) (многопрограммная версия CP/M-86 от Digital Research) (создана в СССР на основе CP/M 2.2)


          Siemens AG


          «Домашние» OS

            (проект основан на MenuetOS и помещается на одну дискету) — проект основан на FreeBSD. Навеян GUI Navi из Serial Experiments Lain (помещается на одну дискету) (почти полностью совместима с POSIX) (VISOPSYS — Визуальная операционная система) [4] — проект ядра операционной системы под кодовым названием XSystem. [5] — микроядерная операционная система. (проект операционной системы, основанной на микроядерной архитектуре) — многозадачная графическая ОС для Amstrad CPC, Amstrad PCW и MSX. — open-source OS, написаная на чистом ассемблере (помещается на одну дискету).


          Для БК

          Операционные системы, работавшие на БК-0010, БК-0010-01, БК-0011 и БК-0011М


          Для Spectrum


          Прикладные системы


          Наладонный компьютер (PDA)

            от Palm Inc; теперь подразделения PalmSource , Windows Mobile от Microsoft — изначально от Psion (Великобритания), в настоящее время разрабатывается Symbian, под маркой Symbian OS. от Microsoft в Sharp Zaurus


          Смартфоны

            • Google Android; в Palm Pre; в Nokia 770 Internet Tablet, Nokia N800, N810 и Nokia N900; в устройствах Neo 1973 и Neo FreeRunner;
            • MontaVista Mobilinux в Motorola A760, E680; Linux в Motorola A1200, A1600, E6; в Motorola ZINE ZN5; ; в Edelweiss; ;


            Нетбуки, смартбуки, MID

                ; Linux; ; ; ; ; ; Lite в Acer Aspire One;
              • Google Android; ; for Netbooks; ; .
              • Microsoft Windows CE MID в Toshiba JournE;


              Маршрутизаторы

              • SROS от Alcatel-Lucent от Cisco от Cisco от Cisco на основе QNX от Juniper Networks от 3Com RouterOS от MikroTik от Cisco от Juniper Networks от Riverstone Networks бесплатная замена Cisco на основе Linux от ZyXEL
              • SeOS от Ericsson


              МиниАТС


              Для микроконтроллеров, встраиваемые и ОС реального времени


              Вымышленные операционные системы

              Несуществующие операционные системы, упоминаемые в шутках, книгах, фильмах, компьютерных играх и т. п.

              Увеличение объема при отсутствии выгоды Теоретическая гибкость Неоднородная вселенная Мнимое благо 32-разрядности Компиляторы C++ и их производители Длинное и короткое целое ПКспособные работать с 32-разрядными приложениями, появились почти десять лет назад, когда Intel выпустила первый процессор марки 80386.

              ПКспособные работать с 32-разрядными приложениями, появились почти десять лет назад, когда Intel выпустила первый процессор марки 80386. В настоящее время появились ОС OS/2, Windows NT и Windows 95, специально разработанные для 32-разрядных программ. Хотя производители решили, что это открывает им массу новых перспектив, на самом деле не все так просто. 32-разрядное программирование породило проблему так называемого "раздувшегося" программного обеспечения, когда многие небольшие и быстрые приложения становятся более медленными и объемными.

              Если вы занимаетесь разработкой программ на ПК, то придется столкнуться с этой проблемой. Работая с 32-разрядной операционной системой, вы, вероятно, замечали, что в результате перекомпиляции ваших старых, 16-разрядных приложений они становятся куда длиннее и медленнее. Если же вы привыкли к программированию в смешанной среде, состоящей из нескольких операционных систем, вас, возможно, удивит тот факт, что вопрос об использовании 32- или 16-разрядных приложений в каждой из них решается далеко неоднозначно.

              И у 16-разрядных, у 32-разрядных приложений есть свои достоинства. И те и другие находят свою область применения.

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

              Основные типы данных, используемые в 32-разрядном программировании, занимают по 32 бита. Это означает, например, что за один раз можно обработать целое число, находящееся в промежутке от -2 млрд. до 2 млрд. или сразу четыре символа.

              Микропроцессор может манипулировать 32-разрядными значениями с помощью одной инструкции, зачастую выполняемой всего за один такт. Если оснастить кэш-памятью достаточного объема компьютер класса Pentium/100 МГц, машина сможет выполнить около 100 млн. операций сложения за секунду.

              При использовании 32-разрядной адресации размер одного сегмента памяти составляет 4 Гбайт, в отличие от 64 Кбайт при 16-разрядной адресации.

              По словам Алана Далла, менеджера по новым технологиям компании Powersoft, последняя предпочитает "плоскую" модель памяти, предоставляемую 32-разрядными операционными системами, поскольку таким образом увеличивается объем непосредственно адресуемой оперативной памяти. В 16-разрядной DOS приложения могут адресовать сегменты размером 64 Кбайт, получая тем самым доступ максимум к 500 Кбайт оперативной памяти. Плоская модель 32-разрядной ОС Windows NT позволяет адресовать сразу 500 Мбайт в одном сегменте.

              Так почему бы, учтя все вышеописанные преимущества, не делать все приложения 32-разрядными?

              Увеличение объема при отсутствии выгоды

              В области компьютерных технологий, как и везде, за все приходится расплачиваться. Цена использования 32-разрядных инструкций - резкий рост объема приложения по сравнению с 16-разрядными. В большинстве случаев 16 бит достаточно для хранения всех типов данных, используемых в приложении. При преобразовании таких приложений в 32-разрядную форму они (или некоторые их части) просто увеличиваются в объеме и начинают медленнее работать.

              Компания Symantec предоставляет 16-ти и 32-разрядную версии своих инструментов для разработки, которые были созданы при помощи 16- и 32-разрядных компиляторов на основе одного и того же исходного текста.

              "Объем 32-разрядной версии больше", - говорит Мэнсур Сафаи, главный менеджер Symantec по средствам разработки.

              Возьмем приложение для планирования, которое каждую неделю увеличивает на 7 значение числа месяца. 16-разрядная инструкция, прибавляющая 7, занимает 3 байта - 1 байт уходит на команду "ADD" и 2 - на константу 7. Такая же 32-разрядная инструкция занимает 5 байт - снова всего 1 байт на команду сложения, но на константу - уже 4.

              В архитектуре Intel время выполнения 32- и 16-разрядных инструкций не зависит от длины типа данных. Операция сложения с целым, например, производится за одинаковое число тактов процессора, какое бы количество бит ни занимала константа. Тем не менее размер программы очень сильно влияет на общую скорость ее работы. Микропроцессор обрабатывает данные почти в 10 раз быстрее, чем они передаются к нему по шине из оперативной памяти. Чем меньше программа, тем больше вероятность того, что ее инструкции и данные находятся в кэш-памяти процессора или в промежуточной кэш-памяти.

              Аналогичной палкой о двух концах является и 32-разрядная адресация. Возьмем, например, программу размером 100 Кбайт, в которой используется 32-разрядная адресация. Размер каждого адреса в ней увеличивается вдвое, хотя выгоды от увеличения размера сегмента в данном случае никакой. Таким образом множество программ (для которых вовсе не требуются 32-разрядные инструкции) с удвоенными размерами всех данных и адресов увеличиваются в объеме и, соответственно, начинают работать более медленно. 32-разрядные инструкции целесообразно использовать, когда объем приложения превышает 1 Мбайт. Одним из способов проверить, так ли это на самом деле, является генерация и 16-, и 32-разрядных исполняемых файлов для сравнения их размеров и скорости работы.

              Теоретическая гибкость

              Архитектура микропроцессоров Intel позволяет программисту использовать 16-разрядные данные и адреса в 32-разрядных программах и, наоборот - 32-разрядные данные и адреса при работе с 16-разрядными инструкциями. В нашем примере с прибавлением числовой константы 7 та же операция могла бы занять 4 байта, а не 5, если бы программист указал, что размер значения - 16 бит. Компилятор или ассемблер, которыми пользовался разработчик, сгенерировали бы при этом еще один байт, информирующий процессор об изменении статуса (16 или 32 разряда) для одной инструкции.

              Это позволяет программам, работающим в основном с 16-разрядными значениями, использовать преимущества 32-разрядных инструкций только тогда, когда это необходимо. И наоборот, при написании 32-разрядных приложений можно было бы применять 16-разрядную адресацию при отсутствии потребности в большом адресном пространстве. Языки Си и Си++ позволяют разработчикам указывать размеры типов данных. Некоторые компиляторы используют такую декларацию типов для оптимизации исполняемого кода посредством применения инструкций различного размера.

              В ЕХЕ- и других исполняемых файлах инструкции хранятся в связанных группах, называемых сегментами. Значение разрядности команд хранится в заголовке сегмента. Микропроцессор может переключаться между 16- и 32-разрядными режимами, переходя от сегмента к сегменту.

              К сожалению, современные операционные системы склонны игнорировать данную возможность, делая ее таким образом скорее теоретической, чем практической. Windows 3.x и Windows 95, например, требуют наличия специального уровня, определяющего разрядность адресации. Процесс определения достаточно медлителен для того, чтобы утратить все преимущества, предоставляемые дифференциацией типов сегментов для хранения данных программы. Данный способ полезен в основном при использовании 16-разрядных динамических библиотек с новыми 32-разрядными приложениями.

              Неоднородная вселенная

              Большинство организаций, особенно крупных, обладают парком персональных компьютеров, работающих под управлением различных ОС. Несмотря на то что 16-разрядная Windows 3.1 по-прежнему является наиболее популярной из настольных систем, она постепенно заменяется на 32-разрядные Windows 95 и Windows NT. OS/2 и Windows NT Server, также являющиеся 32-разрядными, в основном устанавливаются на серверы приложений, а также используются в некоторых программах высшего класса для конечного пользователя. Однако старая добрая 16-разрядная DOS, занимающая немного места на диске, по-прежнему является неотъемлемой частью почти всех настольных систем.

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

              Многие компании избрали путь полного игнорирования Windows 95 и ожидания выхода NT 4.0. Другие переходят на Windows 95, но медленно. Есть и третья группа - фирмы, решившие работать с Windows 3.1 до тех пор, пока это возможно.

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

              Приложениям, использующим трехмерное моделирование, например DOOM, необходима вся мощь 32-разрядных инструкций. Но DOOM - игра, работающая в DOS. По словам Гено Коши, руководителя разработки компиляторов Watcom компании Powersoft, DOOM работает в 32-разрядном режиме с помощью модуля расширения DOS, который переключается на 16-разрядный режим всякий раз, когда необходимо выполнить операцию, связанную с поддерживаемым DOS аппаратным обеспечением (например чтение с жесткого диска). Игра была написана с использованием компилятора Watcom для DOS. В Windows 95 применяется аналогичная смешанная технология.

              Большинство приложений для Windows 3.x - 16-разрядные, но, используя интерфейс разработчика Win32s компании Microsoft, вы можете работать в этой операционной системе и с 32-разрядными программами. Даже Windows NT, "чисто" 32-разрядная ОС, способна запускать 16-разрядные приложения для DOS.

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

              "При пользовании инструментами Watcom вы просто выбираете нужный вам компилятор и запускаете его, - говорит Коши. - Компиляторы Watcom будут поддерживать и 16- и 32-разрядные инструкции, пока это будет нужно потребителю". Borland и Symantec избрали аналогичные стратегии. (Microsoft же сводит к минимуму поддержку разработки 16-разрядного ПО: для его создания вам придется воспользоваться Visual C++ версии 1.52.)

              Используя различные инструменты, программисты могут создавать и 16-, и 32-разрядные исполняемые файлы за считанные секунды. Для очень больших систем на это уйдет лишь несколько минут. Тестирование покажет, что в большинстве случаев версия вашего приложения, имеющая меньший объем, будет работать быстрее.

              Некоторые инструменты для разработки, например PowerBuilder компании Powersoft, генерируют "байтовый код", независимый от разрядности основной архитектуры. "Байтовый код" обрабатывается небольшим интерпретатором, написанным специально для каждой из платформ.

              Как говорит Далл из Powersoft, - "Мы нейтральны относительно разрядности".

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

              Мнимое благо 32-разрядности

              Преобразование 16-разрядных программ в 32-разрядные зачастую принесет лишь разочарование. Приложения, изначально написанные для 16-разрядных сред, будет несложно перекомпилировать в 32-разрядные, но вероятность того, что после этого получится более объемная и медленная программа, довольно велика. Крупные же программы часто приходится основательно переписывать, для того чтобы они смогли выиграть от использования 32-разрядных инструкций. Многие меньшие по объему программы в 16-разрядном исполнении будут обладать большей производительностью.

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

              В некоторых случаях они будут работать намного лучше, чем старое ПО. Несомненно также, что благодаря 32-разрядным инструкциям появятся приложения, которые просто невозможно было бы сделать в 16-разрядном исполнении. Но, если вы не будете осторожны, ваши маленькие и быстрые программы могут превратиться в медлительных "динозавров".

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

              Компиляторы C++ и их производители

              Длинное и короткое целое

              Язык программирования Си разработан для множества компьютеров. Основным его преимуществом была и осталась мобильность, которая и породила нижеописываемую проблему для программистов. При перекомпиляции 16-разрядных приложений, написанных на Си или Си++ для 32-разрядной среды, все данные типа int удваиваются в размере. В результате при преобразовании из 16- в 32-разрядную форму возникают проблемы, связанные с переопределением типов.

              Программисты на Си и Си++ могут использовать тип данных int (целое), а также short int (короткое целое) или long int (длинное целое), в зависимости от конкретной задачи.

              Однако, в стандартном Си тип int не обладает конкретной длиной. Вместо этого принято, что тип long int имеет длину, большую или равную длине типа int, а int, в свою очередь, - длину, большую или равную длине short int. В обычном случае тип int имеет длину слова, соответствующего конкретному процессору.

              Изначально на персональных компьютерах размер слова составлял 16 бит. В большинстве компиляторов Си этот размер используется и для типа short int, и для типа int. Тип long int занимал 32 бита и требовал специальной обработки. Большинство программистов на ПК не применяли тип short int, поскольку он являлся эквивалентом int.

              С появлением 32-разрядных операционных систем 32-разрядные компиляторы для ПК стали интерпретировать short int как 16-разрядный тип, преобразовывая данные типа int и long int в 32-разрядные значения.

              В итоге при перекомпиляции 16-разрядной программы, написанной на Си или Си++, в 32-разрядную форму, все данные типа int удваиваются в размере даже в том случае, если программист позаботился о том, чтобы значения этого типа занимали 16 бит. Итак, получается, что новая программа приобретает все наихудшее, что есть в обоих типах разрядности: для данных, размер которых строго ограничен 16-разрядным словом, используется 32-разрядное пространство. Таким образом, при перекомпиляции для 32-разрядной системы приложение увеличивается в объеме безо всякой пользы.

              Если вы руководите разработкой программ на Си или Си++ в 16-разрядной среде, убедитесь, что все ваши программисты знают об этой проблеме. Не так уж сложно заставить их использовать типы short и long, чтобы получить оптимальный исполняемый файл и для 16-ти, и для 32-разрядной сред. Применения типа данных int в таких случаях следует избегать.

              Читайте также: