на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Аппаратура, программное обеспечение и микропрограммы
p align="left">Говорят, что машинный язык является машинно-зависимым: программа, написанная на машинном языке компьютера одного типа, как правило, не может выполняться на компьютере другого типа, если его машинный язык не идентичен машинному языку первого компьютера (или не является расширением по отношению к этому языку). Еще одним признаком машинной, или аппаратной, зависимости является характер самих команд: в командах машинного языка указываются наименования конкретных регистров компьютера и предусматривается обработка данных в той физической форме, в которой они существуют в этом компьютере. Большинство первых компьютеров программировались непосредственно на машинном языке, а в настоящее время на машинном языке пишется лишь очень небольшое число программ.

2.3.2 Ассемблеры и макропроцессоры

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

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

2.3.3 Компиляторы

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

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

Перевод с языков высокого уровня на машинный язык осуществляется при помощи программ, называемых компиляторами. Компиляторы и ассемблеры имеют общее название «.трансляторы». Написанная пользователем программа, которая в процессе трансляции поступает на вход транслятора, называется исходной программой; программа на машинном языке, генерируемая транслятором, называется объектной программой, или выходной (целевой) программой.

2.3.4 Система управления вводом-выводом (IOCS)

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

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

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

2.3.5 Спулинг

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

2.3.6 Процедурно-ориентированные и проблемно-ориентированные языки

Языки высокого уровня бывают либо процедурно-ориентированными, либо проблемно-ориентированными. Процедурно-ориентированные языки высокого уровня -- это универсальные языки программирования, которые можно использовать для решения самых разнообразных задач. Проблемно-ориентированные языки предназначаются специально для решения задач конкретных типов. Такие языки, как Паскаль, Кобол, Фортран, Бейсик и ПЛ/1 обычно считаются процедурно-ориентированными, а такие языки, как GPSS (язык моделирования) и SPSS (язык для выполнения статистических вычислений),-- проблемно-ориентированными. 1)

2.3.7 Быстрые компиляторы без оптимизации и оптимизирующие компиляторы

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

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

2.3.8 Интерпретаторы

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

2.3.9 Абсолютные и перемещающие загрузчики

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

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

2.3.10 Связывающие загрузчики и редакторы связей

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

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

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

2.4 Микропрограммы

Принято считать, что автором концепции микропрограммирования является профессор Морис Уилкс. В своей статье в 1951 г. (Wi 51) он предложил принципы, которые легли в основу современных методов микропрограммирования. Однако начало реального внедрения микропрограммирования связано с появлением System/360 в середине 60-х годов. В течение 60-х годов изготовители компьютеров применяли микропрограммирование для реализации наборов команд машинного языка (Ни 70).

Страницы: 1, 2, 3, 4, 5, 6



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.