Сист. прогр. Ч1 (1085770)
Текст из файла
98
Системное программирование.
1. ВВЕДЕНИЕ.
Это пособие преследует две основные цели: познакомить с процедурами проектирования систем программного обеспечения и создать основу для оценки результатов проектирования.
Что такое системное программирование?
Люди
Рис. 1.1. Базис системного программирования
Можно рассматривать компьютер как некое живое существо, которое повинуется всем командам. Иногда говорят, что компьютеры — это по существу люди, сделанные из металла, или, наоборот, люди — это компьютеры, сделанные из плоти и крови. Однако при ближайшем рассмотрении становится очевидным, что компьютеры представляют собой машины, выполняющие весьма специфические и достаточно примитивные команды.
На заре вычислительной техники люди общались с компьютерами, задавая определенные положения двоичных переключателей, обозначающие примитивные команды. Вскоре, однако, они пожелали задавать более сложные команды. Например, им хотелось уметь сказать компьютеру: X = 30 х Y; чему равен X, если Y = 10?
Современные компьютеры не могут понять такого рода язык без помощи системных программ. Системные программы (например, компиляторы, загрузчики, макропроцессоры, операционные системы) были разработаны с целью лучшего приспособления компьютеров к нуждам пользователей. Затем люди пожелали получить еще большую помощь в технической работе по подготовке их программ к выполнению.
Компиляторы — это системные программы, которые воспринимают тексты на языках, близких к естественным, и транслируют их в машинный язык. Загрузчики — это системные программы, которые подготавливают программы на машинном языке к выполнению. Макропроцессоры позволяют программистам использовать сокращения. Операционные системы и файловые системы обеспечивают гибкое запоминание и выборку информации (рис. 1.1).
В мире в настоящее время более 1000000 ЭВМ используется фактически во всех возможных областях применения. Производительность каждой из них в значительной степени зависит от производительности, эффективности, и сложности системных программ.
В этой главе вводятся некоторые термины и дается общее представление о машинной структуре и основных задачах операционной системы.
МАШИННАЯ СТРУКТУРА
Мы начнем с краткого рассмотрения общей организации аппаратуры вычислительной системы (рис. 1.2).
Память
Процессор ввода-вывода
Процессор ввода-вывода
ЦП
ЦП
Диски и ленты
Рис.1.2. Общая организация аппаратуры вычислительной системы.
Память — это устройство, которое служит для запоминания информации. Процессоры — это устройства, которые манипулируют этой информацией. Можно рассматривать информацию как запоминаемую в форме нулей и единиц, Каждая единица или нуль представляют отдельную двоичную цифру, которая называется бит. Биты обычно группируются в блоки, которые называются слова, символы или байты. Расположение информации в памяти определяется адресами. Каждый адрес идентифицирует конкретный байт, слово или символ.
Содержание слова может интерпретироваться как данные (над которыми выполняются операции) или команды (операции, подлежащие выполнению). Процессор представляет собой устройство, выполняющее последовательность операций, заданных командами, расположенными в памяти. Программа (или процедура) есть последовательность команд.
Процессор IBM 1130, рассматривая, например содержимое ячейки 10001 как команду, будет интерпретировать его как команду «останов». Рассматривая ту же самую ячейку как содержащую цифровые данные, процессор будет интерпретировать ее содержимое как двоичное число 0001 0011 0000 0000 0000 (десятичное 12288). Таким образом общая запоминающая среда применяется для хранения как команд, так и данных.
Информация в памяти кодируется группами битов, которые могут интерпретироваться как символы, команды или числа. Код — это совокупность правил для интерпретации групп битов, в качестве примера можно привести коды для представления десятичных цифр (BCD), символов (EBCDIC или ASCII) или команд (коды операций конкретного процессора). На рис. 2 представлены два типа процессоров: процессор ввода-вывода (ПВВ) и центральный процессор (ЦП).
ПВВ занимается передачей данных между памятью и внешними устройствами, такими, как диски, ленты, АЦПУ и пишущие машинки. Центральный процессор манипулирует данными, хранимыми в памяти. Процессоры ввода-вывода выполняют команды ввода-вывода, которые хранятся в памяти; действие этих процессоров обычно вызывается командой, поступившей от центрального процессора. Обычно это команда «Начать ввод-вывод», аргументом которой является адрес входа в программу ввода-вывода. Центральный процессор декодирует эту команду и посылает аргумент процессору ввода-вывода.
Программа ввода-вывода может быть независима от программы центрального процессора и может выполняться асинхронно (одновременно) по отношению к операциям центрального процессора. Асинхронное выполнение операций каналами ввода-вывода и центральными процессорами было одной из ранних форм мультипроцессирования. Мультипроцессирование означает наличие более чем одного процессора, одновременно работающих с общей памятью.
Поскольку команды, подобно данным, хранятся в памяти и могут рассматриваться как данные, изменяя двоичную конфигурацию команды путем добавления к ней некоторого числа, можно получить другую команду. Процедура, модифицирующая сама себя, называется неправильной процедурой. Применение подобных процедур не рекомендуется. Программисты испытывают определенные трудности при чтении такой программы, она к тому же не может одновременно выполняться несколькими процессорами. Каждый процессор, выполняя неправильную процедуру, модифицирует ее. Другой процессор при попытке выполнения той же самой процедуры может обнаружить измененные команды или данные. Таким образом, повторное применение такой процедуры существенно затрудняется. Правильная процедура не модифицирует себя. Если необходимо быть уверенным, что при каждом обращении к программе она содержит одни и те же команды, следует применять правильные процедуры (реентерабельные программы).
ЭВОЛЮЦИЯ КОМПОНЕНТОВ СИСТЕМ ПРОГРАММИРОВАНИЯ
АССЕМБЛЕРЫ
Рассмотрим некоторые аспекты развития компонентов систем программирования.
Некогда в распоряжении программиста была простая вычислительная машина, которая аппаратно интерпретировала некоторый набор основных команд. Он программировал, записывая ряды единиц и нулей (на машинном языке), помещал их в память машины и нажимал кнопку, после чего машина начинала интерпретировать эту информацию как команды.
Программисты нашли, что писать и читать программы на машинном языке затруднительно. В стремлении к более удобному языку они стали применять мнемонику (символы) для каждой машинной команды, которую они затем транслировали в машинный язык. Такой мнемонический машинный язык теперь называют языком ассемблера. Для автоматизации трансляции с языка ассемблера в машинный язык были созданы программы, называемые ассемблерами. На вход программы ассемблера поступает исходная программа, выходом является результат трансляции на машинном языке (объектная программа).
ЗАГРУЗЧИКИ
После того как ассемблер создал объектную программу, она должна быть помещена в память и выполнена. Помещение объектной программы в память в готовой для выполнения форме — задача загрузчика.
Ассемблер мог бы сам поместить объектную программу в память и передать ей управление, тем самым вызывая выполнение программы, написанной на машинном языке. Однако это привело бы к неэкономному использованию памяти, так как при этом ассемблер остался бы в памяти во время выполнения программы пользователя. Кроме того, программист был бы вынужден повторно транслировать программу при каждом ее выполнении, что привело бы к потери времени, необходимого для трансляции. Для преодоления трудностей, связанных с потерей времени на трансляцию и неэкономным использованием памяти, системные программисты и создали еще один компонент, названный загрузчиком.
Загрузчик — это программа, которая помещает программы в память и готовит их к выполнению, В простейшей схеме загрузки ассемблер выводит полученную на машинном языке программу на внешнее запоминающее устройство и загрузчик помещается в основную память, затем загрузчик помещает в память программу пользователя на машинном языке и передает ей управление. Поскольку загрузчик по своим размерам значительно меньше ассемблера, в памяти остается больше места для размещения программ пользователей.
Понимание того, что многие пользователи по существу пишут одни и те же программы, привело к разработке типовых программ (пакетов). Эти пакеты разрабатывались фирмами-производителями ЭВМ или пользователями.
С накоплением опыта программист захотел объединить, скомбинировать готовые типовые программы со своими собственными. Это привело к разработке средств, позволяющих писать основную программу, которая пользуется другими программами с целью выполнения некоторой задачи. Существуют два типа подпрограмм: замкнутые и открытые. Открытая подпрограмма, или макроопределение, — это такая программа, коды которой вставляются в основную программу. Так, если имеются четыре обращения к одной открытой подпрограмме, она будет четырежды помещена в соответствующие места вызывающей программы. Замкнутая подпрограмма может помещаться вне основной программы, получая управление в случае необходимости. В основной программе должны быть предусмотрены средства для передачи подпрограмме управления и данных.
Первоначально замкнутые подпрограммы могли размещаться в памяти только по фиксированным адресам. Например, если пользователь хотел применить подпрограмму вычисления квадратного корня, он должен был писать свою основную программу таким образом, чтобы она передавала управление по адресу, приписанному этой подпрограмме. Его программа и подпрограмма ассемблировались вместе. Если второй пользователь хотел использовать ту же самую подпрограмму, он тоже ассемблировал ее вместе со своей собственной программой, и законченный результат трансляции загружался в память.
Ячейки
SQRT
Программа 1
SQRT
Программа 2
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.