Сравнительная характеристика языков высокого уровня
По синтаксической сложности он до сих пор не превзойден ни одним из языков. В отличие от перечисленных языков высокого уровня, предложенный Денисом Ритчи в начале 80-х годов язык программирования Си (название содержит одну латинскую букву С) задумывался языком сравнительно низкого уровня. Но это не значит, что этот язык недостаточно мощный. Алгоритмический язык C достаточно полно отражает возможности современных компьютеров, позволяя писать весьма эффективные программы, не прибегая к языкам ассемблера, главным образом за счет простых, последовательных конструкций потоков управления. Язык приобрел популярность благодаря остроумным решениям, сделавшим запись программы на C весьма компактной. Не накладывая на программиста особых ограничений, он дает возможность для разнообразных трюков, чем тоже многим импонирует. Язык Паскаль в оригинальной авторской версии не содержал средств раздельной компиляции — модулей, разнообразных числовых типов, строк переменной длины и многого из того, что добавлено в известные реализации. Вследствие этого Никлаус Вирт предложил язык Модула-2, который должен был заменить Паскаль, устранив основное его ограничение — отсутствие модульности. Известно, что Модула-2 использовалась и используется в проектах, где важнейшую роль играет надежность. Средства межмодульного контроля Модулы-2 заметно совершеннее аналогичных возможностей Паскаля и C. Компилятор Турбо-Паскаль, разработанный Андерсом Хейльсбергом, был выпущен в продажу фирмой Borland в 1983 г. Эта версия уже содержала расширения языка, хотя и небольшие. В последующих выпусках расширений становилось все больше: встроенная графика, модули, средства объектно-ориентированного программирования (ООП) и т.д. Начиная с версии 7.0, язык стал называться Borland-Паскаль. В качестве мощной объектно-ориентированной версии Паскаля сейчас популярен Объектный Паскаль. Объектный Паскаль по сравнению со стандартным Паскалем содержит очень много синтаксических расширений. В результате из простого и изящного Паскаля получился язык, приближающийся по сложности к языку Ада. Объектно-ориентированный язык C++ предложил Бьярн Страуструп с первоначальным названием «Си с классами». Название отражает тот факт, что C++ является надмножеством языка C. Язык C++, по ряду оценок, сложнее C вдвое. В настоящее время это, без преувеличения, язык номер один в мире для профессиональных программистов, поскольку он перенял преимущества и популярность C и добавил мощные средства написания объектно-ориентированных программ. Его реализации поддерживаются на всех аппаратно-программных платформах, в отличие от Паскаля, который широко распространен лишь на платформе IBM PC. Язык Оберон был разработан Н. Виртом в 1987 г. Он представляет собой существенно упрощенный синтаксически вариант Модулы-2, в который добавлены расширяемые записи — основной механизм ООП. Язык необычайно прост, но при этом сохраняет универсальность и в функциональном отношении не уступает другим языкам. В 1992 г. Н. Виртом были приняты расширения Оберона, предложенные Ханспетером Мёссенбёком. В язык введены аналоги виртуальных методов в других языках. Новая версия получила название Оберон-2. Удивительно, но Оберон-2 оказался проще Оберона, расширением которого является. Самый молодой и самый обсуждаемый ныне объектно-ориентированный язык Java (в английском произношении — Джава, русское еще не устоялось) предложен Джеймсом Гослингом (фирма Sun Microsystems). Основная особенность Java — межплатформенная переносимость приложений, благодаря чему язык широко используется для написания приложений для Internet. Java — очень сложный синтаксически язык.
Структура программы на С++
Программа на языке С++ состоит из функций, описаний и директив препроцессора. Одна из функций должна иметь имя main. Выполнение программы начинается с первого оператора этой функции. Простейшее определение функции имеет следующий формат:
1 2 3 | тип возвращаемого значения имя ([ параметры ]){ операторы, составляющие тело функции } |
Как правило, функция используется для вычисления какого-либо значения, поэтому перед именем функции указывается его тип. Ниже приведены самые необходимые сведения о функциях:
- если функция не должна возвращать значение, указывается тип void:
- тело функции является блоком и, следовательно, заключается в фигурные скобки;
- функции не могут быть вложенными;
- каждый оператор заканчивается точкой с запятой (кроме составного оператора).
Пример структуры программы, содержащей функции main, fl и f2:
Идентификатор — это последовательность символов, используемая для обозначения одного из следующих элементов:
· Имени объекта или переменной
· Имени класса, структуры или объединения
· Имени перечисленного типа
· Члена класса, структуры, объединения или перечисления
· Функции или функции члена класса
· Имени определения типа (typedef)
· Имени метки
· Имени макроса
· Параметра макроса
Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера)[2][3][4]. Входной информацией для компилятора (исходный код) является описание алгоритма или программа на объектно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код)[5].
Компоновка (от лат. componere «складывать, строить, сочинять») — расположение, структуризация отдельных частей в целостном объекте.
Компоновка также может означать:
· Компоновка (программирование) — сборка исполнимого модуля из одного или нескольких объектных модулей.
· Компоновка легкового автомобиля — общая схема расположения главных агрегатов на раме легкового автомобиля.
· Компоновка летательного аппарата — совокупность проектных работ по обоснованию формы ЛА и взаимного расположения его агрегатов, систем и узлов.
· Компоновка танков — функционально обусловленное размещение комплекса вооружения, экипажа, моторно-трансмиссионной установки, элементов броневой и специальной защиты, ходовой части, систем танка и вспомогательного оборудования.
Операционные системы
Поколение №0:
1740-ые первая механическая счетная машина. Электронные машины появились после появления триггеров. Некоторый прогресс в создании цифровых вычислительных машин произошел после второй мировой войны. 1944 в США, на них не было ОС. Устройства ввода/вывода – бумажные носители.
В первых ВМ не было ОС, пользователи имели полный доступ к машинному языку, все программы писались непосредственно в машинных командах.
Поколение №1: 50-е годы.
Основные направления:
а) Автоматизация ввода/вывода (перфокарты, перфоленты) зарождение BIOS.
б) Экономия времени (сателлит – малые машины для ввода/вывода рядом с большой вычислительной машиной). Появление операторов ЭВМ.
Первая ОС – начало 50-х годов: General Motors для IBM 701. ОС были разработаны с целью ускорения и упрощения перехода с задачи на задачу. Назначение ОС – обеспечение пакетного режима (пакетный обработкой, который предусматривал объединение отдельных задач в группы или пакеты).
Выделение повторяющихся команд в отдельные процедуры. Создание stdio, стандартов ввода/вывода.
Поколение №2: 60-е годы.
Основные направления:
а) Многозадачная пакетная логика.
б) Многопользовательские режимы.
в) Чисто многозадачный режим.
Бурное развитие ОС и различных теорий ОС. Развиваются ОС пакетной обработки, многозадачные ОС, многопользовательские ОС, ОС с транзакциями. Появились методы, обеспечивающие независимость программирования от внешних устройств (ВУ). Появление многопроцессорных машин и соответственно ОС. Появление ОС реального времени. Пример глобальной сложной системы: Multics (проект провален).
К большой машине стыковались по последовательному порту терминалы (символьные).
К концу 60-х годов появление распределенных машин (сбор информаций из многих мест, например: сбор информации об авиабилетах).
Поколение №3: 70-е годы.
Появление научной дисциплины проектирование программ, создание совместимых систем, создание эмуляторов, начало специализирования ОС. Разработка модульного процедурного программного обеспечения.
Совместимость ОС и программных средств (обеспечения) впервые организовала фирма IBM. Было много фирм, их машины и системы команд были разными. Очень сложно было переходить к вычислительной машине другого класса.
IBM создала линейку вычислительных машин совместимых снизу вверх: IBM System 360 и ОС, совместимую со всеми машинами этой линейки (OS/360), её аналог в СССР – ЕС-ЭВМ. Для облегчения перехода с других машин на эту линейку фирма IBM создала эмуляторы других систем на своей системе. (Аналогично в свое время поступит Win95, потребовала написания драйверов под эту систему). Позднее будут созданы DEC-PDP и ОС UNIX.
Сложность проектирования отладки и поддержки ОС породила технологию конструирования программ – модульность, совместимость и мобильность ОС.
Поколение №4: 80-е годы.
ОС ещё более функционально насыщены. ОС общего назначения становятся сетевыми. Распределенные вычислительные системы. Развиваются средства управления базами данных. Данные стали рассматриваться как объект управления. С точки зрения совместимости широко развивается концепция виртуальной машины.
Удобство для пользователя (системы управления при помощи меню и так далее). Появление первых персональных компьютеров. Удобство программирования (интегрированная оболочка программирования). В 70-е годы появление языка C, языка высокого уровня. В 80-е годы C++ – объектно-ориентированный язык программирования.
В эти годы произошло разделение производителей и появление большого количества независимых фирм, разрабатывающих ОС.
Поколение №5: 90-е годы.
Принцип распределенной обработки данных перешел на принцип распределенных сетевых ОС, в которых основные функции реализуются на распределенных в пределах сети процессорах. Появление глобальной сети.
Интерфейс становится более дружественным (интуитивно понятный интерфейс). Для программиста создание среды визуального программирования.
История развития ЭВМ
По сути, вся история ЭВМ определяется серией замечательных физических открытий в области электроники. Строго говоря, вычислительные машины существовали и до XX века: это абак, счеты, логарифмические линейки, арифмометры, счетные машины Паскаля и Бэббиджа и некоторые другие. Всё это — механические устройства с очень ограниченными возможностями. История же собственно электронных вычислительных машин (рис. 1) начинается в двадцатом веке и связана с изобретением в 1906 году американским инженером Ли де Форестом вакуумного триода. На основе триодов были созданы ЭВМ так называемогопервого поколения, начинающего свою историю в 40-е годы. Это поколение компьютеров-монстров, занимавших по своим размерам целые комнаты и потреблявших мощности, достаточные для работы небольшого завода. Однако, несмотря на такую громоздкость, производительность этих машин была весьма скромной.
Качественное изменение ЭВМ произошло после еще одного эпохального открытия физики — изобретения в 1947 году Джоном Бардином, Уолтером Браттейном и Уильямом Шокли полевого транзистора. Применение полупроводниковых транзисторов вместо вакуумных ламп (триодов) позволило существенно уменьшить размеры и энергопотребление машин второго поколения и повысить их быстродействие и надежность.
Дальнейшее развитие компьютеров связано с использованием интегральных схем, впервые изготовленных в 1960 году американцем Робертом Нойсом. Интегральная схема — это множество, от десятков до миллионов, транзисторов, размещенных на одном кристалле полупроводника. Использование интегральных схем (компьютеры третьего поколения), больших и сверхбольших интегральных схем (четвертое поколение) привело к значительному упрощению процесса изготовления ЭВМ и увеличению их быстродействия. В 80-е годы началось изготовление персональных компьютеров, которые постепенно приобрели современный вид. Примерно тогда же появились первые мобильные компьютеры, или ноутбуки. Огромной производительности достигли многопроцессорные вычислительные комплексы — так называемые суперкомпьютеры.
Почему же именно изобретение триода и транзистора определило весь путь развития компьютеров? Для ответа на этот вопрос нужно вспомнить об основных принципах работы компьютера.
Сердце современного компьютера — это его центральный процессор, поэтому остановимся на нем. Основная функция процессора — обработка информации, т. е. выполнение различных операций над данными. А так как данные в современных ЭВМ представляются в двоичном виде, то и операции с ними производятся на основе двоичной логики, или так называемой булевой алгебры.
Классификаци ОС
Операционные системы могут различаться особенностями реализации внутренних алгоритмов управления основными ресурсами компьютера (процессорами, памятью, устройствами), особенностями использованных методов проектирования, типами аппаратных платформ, областями использования и многими другими свойствами.
Ниже приведена классификация ОС по нескольким наиболее основным признакам.