/
Текст
OPERATING
SYSTEMS
A SYSTEMATIC
VIEW
WILLIAM S. DAVIS,
MIAMI UNIVERSITY
Addison-Wesley Publishing Company
Reading, Massachusetts
Menlo Park, California London Amsterdam Don Mills, Ontario Sydney
1977
У ДЕВИС
ОПЕРАЦИОННЫЕ
СИСТЕМЫ
ФУНКЦИОНАЛЬНЫЙ
подход
Перевод с английского
канд. физ.-мат. наук В, В, ФРОЛОВА
ИЗДАТЕЛЬСТВО «МИР»
Москва 1980
УДК 681.142.2
В книге рассматриваются структура и основные
компоненты операционных систем (ОС) IBM/360 и IBM/370. Использован
функциональный подход к анализу и оценке ОС, учитывающий
конкретные условия применения автоматизированных систем
обработки данных. Опуская детальное описание отдельных
модулей ОС, автор дает ясное представление об их
взаимодействии, необходимое для более углубленного изучения вопросов
разработки и эксплуатации специализированных ОС.
Книга представляет интерес для разработчиков и
пользователей автоматизированных систем управления. В качестве
руководства по изучению основ операционных систем она будет
полезна студентам высших учебных заведений, аспирантам и
слушателям курсов повышения квалификации.
Редакция литературы по новой технике
2405000000
30502-149
Д 041(01)-80 Copyright © 1977 by Addison-Wesley Publishing
Company, Inc.
Перевод на русский язык, «Мир», 1980
i
ПРЕДИСЛОВИЕ К РУССКОМУ ПЕРЕВОДУ
Основные понятия, касающиеся операционных систем,
сформировались в период широкого внедрения ЭВМ второго
поколения, когда вычислительные машины стали регулярным и
рентабельным средством решения деловых задач. Однако существенное
различие в быстродействии центрального процессора и устройств
ввода—вывода, а также несовершенство структуры и элементной
базы вычислительных машин заметно ограничивали область
их использования. С целью снижения влияния названных
выше факторов на пропускную способность ЭВМ, т. е. на
количество задач, решаемых в единицу времени, создавались и
постоянно совершенствовались операционные системы,
обеспечивающие рациональное распределение имеющихся вычислительных
ресурсов и автоматизацию процесса обработки прикладных
программ.
На протяжении почти двадцатилетней истории развития
операционных систем эффективность работы ЭВМ оценивалась на
основе сравнения ее пропускной способности со стоимостью
аппаратных средств. При этом смена поколений операционных
систем происходила по восходящей линии развития — более
совершенные ЭВМ оснащались и более совершенными операционными
системами, а проблема классификации последних решалась по
очень простому правилу, согласно которому новое всегда лучше
старого. До определенного времени подобная точка зрения
представлялась весьма разумной, поскольку могла быть оправдана
высокой стоимостью и ограниченными возможностями ЭВМ.
Однако по мере снижения стоимости аппаратных средств и
улучшения их эксплуатационных характеристик во вновь
создаваемых операционных системах стали обнаруживаться явные
признаки «полиморфизма» —: конкретные условия применения
обусловливали разнообразие форм и структур операционных систем,
при классификации которых необходимо было учитывать не
только выбранную конфигурацию аппаратных средств, но и
особенности автоматизируемого процесса обработки данных. Все большее
распространение получают так называемые операционные системы
специального назначения, используемые практически во всех
современных АСУ, АСУП, АСУТП, а также в системах
автоматизированного проектирования и конструирования, в системах
реального времени обработки экспериментальных данных и т. д.
6 Предисловие к русскому переводу
Таким образом, стало очевидным, что структура
разрабатываемой операционной системы должна определяться возложенными
на нее функциями исходя из конкретных условий применения.
Именно такой, более прагматический взгляд на назначение
операционных систем характеризует книгу Девиса, перевод которой
предлагается советскому читателю.
Эта книга написана на основе курса лекций по операционным
системам, прочитанного автором в Майамском университете
(США). Благодаря удачно выбранному (функциональному)
подходу ему удалось найти ту форму изложения материала, которая
без ущерба для понимания существа дела позволила опустить
детальное описание многочисленных компонентов операционной
системы, так часто оказывающееся непреодолимым барьером для
читателей, недостаточно подготовленных в области системного
программирования. Подобное изложение дает ясную картину
функционирования типичной операционной системы на
«макроуровне» и четкое представление о ее архитектуре, что выгодно
отличает книгу Девиса от большинства уже известных изданий
на эту тему.
Книга безусловно заинтересует специалистов, связанных с
разработкой и внедрением современных автоматизированных
систем, — руководителей проектов, специалистов-разработчиков,
пользователей. Она будет полезна студентам младших курсов,
специализирующимся в области системного программирования, а
также всем программистам-прикладникам, использующим в своей
работе современные вычислительные системы.
В. Фролов
*
• Посвящается Кэтти
ПРЕДИСЛОВИЕ
Летом 1968 г. я прослушал первый в моей жизни курс по
операционным системам. Его читал один из программистов фирмы IBM,
где я в то время работал. Аудиторию составляли и новички, и
специалисты, имевшие некоторый опыт в программировании. Те
и другие всячески стремились проявить свои способности на
новом месте работы.
Мы начали с детального анализа реальных кодов программы
обработки прерываний по обращению к супервизору, стремясь
продвинуться к более общему пониманию системы. Однако
желаемого успеха достигнуть не удалось. Мы «закопались» в деталях
с самого начала. По-видимому, был выбран неверный путь, если
слушатели не усваивали предмет. Анализ рабочих программ
операционной системы «на уровне битов» как метод обучения основам
построения операционных систем оказался неприемлем.
Работая в течение следующих трех лет системным аналитиком
и программистом, я постепенно, так сказать осмотически, начал
осваивать операционные системы. Благодаря ряду удачно
выполненных заданий мне довелось стать непосредственным участником
разработки существенно различающихся операционных систем:
одной — автоматизированной системы управления
производством специального назначения, основанной на DOS, и второй —
операционной системы OS/MVT общего назначения.
Сопоставление их свойств и различий весьма способствовало моему
образованию. По-настоящему все мои разрозненные и крайне
несистематизированные сведения об операционных системах стали
«увязываться» друг с другом лишь после того, как мне удалось
составить ясное и общее представление о том, каким образом
отдельные компоненты данной операционной системы объединяются
в единое целое. Иными словами, я пришел к пониманию
операционных систем, научившись видеть в них именно системы, а не ряд
программных модулей, выполняющих независимые функции.
Расставшись с работой в IBM, я вернулся к
преподавательской деятельности в Майамдком университете, получив
предложение вести курс по операционным системам. Подыскивая
подходящее пособие, я убедился в том, что большинство хороших
руководств по операционным-системам адресовано студентам
старших курсов или выпускникам, специализирующимся в области
вычислительной техники.
»
8 Предисловие
Принятый в них подход имел чисто математическую
ориентацию* при этом предполагалась основательная теоретическая под- ,
готовка обучающихся как в области вычислительной техники,
так и в высшей математике. Мне же предстояло обучать
студентов-второкурсников .
Является ли курс по операционным системам для
второкурсников чем-то необычным? Думаю, что нет. В соответствии с
программой первых двух лет обучения, утвержденной на нашей кафедре
системного анализа, предусматривается глубокая подготовка
студентов в области использования вычислительных машин, включая
изучение таких предметов, как математическое моделирование,
исследование операций, системный анализ и т. д., связанных с
дисциплинами, изучаемыми на младших и старших курсах.
Помимо основной массы специализирующихся по нашей кафедре
студентов, мы обучаем на курсах повышения квалификации большое
число специалистов, не удовлетворенных своей профессиональной
подготовкой, а также читаем лекции для
студентов-второкурсников. Большинство студентов основного состава и специадистов-
стажеров изучают курс по операционным системам. Кроме того,
для соискателей у нас читаются курсы по двум программам, в
каждую из которых входит курс по операционным системам.
Аналогичные программы предлагаются и в других учебных заведениях;
знание программирования для ЭВМ и умение им пользоваться
на практике рассматриваются сейчас как весьма ценные
профессиональные качества.
Читая лекции по теории операционных систем в течение одной
четверти учебного года, я убедился, что математический подход
неприменим на уровне знаний студентов-второкурсников или
специалистов невысокой квалификации; замечания и советы
коллег только утвердили меня в этом мнении. Мой собственный опыт
говорил о том, что метод, опирающийся на анализ рабочих
программ, также не годится. Я чувствовал, что здесь требуется
функциональный подход, позволяющий определить важнейшие
компоненты операционной системы и показать обучающимся,
каким образом эти компоненты объединяются в единое целое,
образуя операционную систему. Я испытал такой подход, и он
оказался успешным! Предвидя возможное проявление интереса к нему,
я решил написать эту книгу.
Мой подход определенно не является теоретическим; я
стремлюсь показать, в каких целях нужны операционные системы и что
на функциональном макроуровне они выполняют. В этой книге
отсутствует обсуждение реальных программных модулей
операционных систем какой-нибудь конкретной машины. Я
предполагаю, что пользующиеся этой книгой студенты прослушали,
по крайней мере, полный годовой курс по вычислительным
машинам, обычно включающий вводный курс и один или два курса
Предисловие 9
программирования; знание языка ассемблера весьма желательно,
но не обязательно. Для профессионального программиста,
практически независимо от используемого им языка, освоение
материала, изложенного в книге, потребовало бы самых
незначительных усилий. По существу можно обойтись без какой-либо
математической подготовки.
Книга состоит из пяти частей. Собственно, любая
операционная система предназначена для управления ресурсами; в связи
с этим в части I обсуждаются основные ресурсы вычислительной
системы: аппаратные средства, математическое обеспечение и
данные. Здесь я стремился дать основные понятия о функциях
операционной системы и заполнить возможные пробелы в знаниях
читателя (так, несколько страниц, посвященных системам
счисления, будут полезны программирующим на языке высокого уровня).
Для большинства читателей какой-то раздел, а возможно, и вся
эта часть книги, хорошо известны.
В части II мы приступаем к описанию эволюции
операционных систем, объясняя их назначение и, в очень общих чертах,
выполняемые ими функции. В этой части вводятся понятия
компилятора, библиотеки, метода доступа, мультипрограммирования,
спулинга и др.
В части III дано описание языка управления заданиями, при
этом гл. 7 посвящена основам управления заданиями в системе
DOS фирмы IBM, а гл. 8 и 9 —в системе OS. Я стремился
показать необходимость применения формализованных средств
представления управления заданиями в современных
мультипрограммных системах; для этого можно было бы использовать любой язык
управления заданиями, с тем чтобы преподаватели при
необходимости могли заменить его языком управления заданиями
имеющейся в их распоряжении вычислительной машины,
изготовленной не обязательно фирмой IBM. Этот материал помещен в самом
начале книги, предоставляя слушателям достаточно времени для
выполнения упражнений. Часть III может быть опущена (вся
или частично) без ущерба для понимания книги в целом.
В части IV мы обращаемся к более детальному изучению
реальных операционных систем, описывая внешние условия,
определяющие функционирование вычислительных машин серий
IBM/360 и IBM/370 (PSW, прерывания и взаимодействие с
каналами), и показывая на макроуровне, как при этом реализуются
функции двух различных операционных систем — DOS и OS/MFT.
Выбор разработок фирмы IBM в качестве примеров обусловлен
лишь тем, что данная фирма является основным поставщиком
вычислительных машин на Западе, и, следовательно, для многих
читателей операционная система, предлагаемая этой фирмой,
окажется доступнее, чем система любого другого изготовителя.
После достаточно подробного рассмотрения двух систем, упомя-
10 Предисловие
нутых выше, мы переходим к обсуждению проблемы управления
памятью, анализируя понятия области переменной длины,
динамического перераспределения памяти, сегментации программы
и страничной оранизации памяти, виртуальной памяти и
иерархически организованной памяти.
В последней части рассматривается ряд специализированных
операционных систем. Основной предмет обсуждения состоит в
иллюстрации положения, согласно которому операционная система
считается эффективной лишь в том случае, когда она отвечает
целям конкретного применения. Здесь мы уделяем также
некоторое внимание вопросу о соотношении между аппаратными
средствами и математическим обеспечением, отмечая, что многие
функции операционных систем могут быть реализованы аппарат-
но, программно или путем комбинирования тех и других средств.
Книга предназначена для слушателей второго года обучения
по программе, ориентированной на использование
вычислительных машин, а не на их проектирование. Она могла бы оказаться
полезной коллегам-преподавателям в качестве дополнительного
материала к традиционным курсам, составляющим четырехлетнюю
программу подготовки специалистов высшей или средней
квалификации. В программе обучения теоретическим вопросам из
области науки об ЭВМ настоящая книга может быть использована
в качестве начального курса по операционным системам,
закладывающего основу для их дальнейшего, более глубокого изучения.
Гамильтон,
шт. Огайо
Октябрь, 1976
У. Девис
Глава 1
ВВЕДЕНИЕ И ОБЩИЙ ОБЗОР
Назначение любой системы обработки данных состоит в том,
чтобы превращать данные в более полезную информацию, т. е. в
преобразовании данных. Для достижения этой цели в электронной
системе обработки данных используется сочетание ресурсов в
виде аппаратных средств, программного обеспечения и данных.
Названные ресурсы стоят весьма дорого. Многие фирмы
ежегодно расходуют миллионы долларов на приобретение аппаратных
средств и часто еще большие суммы на разработку программ и
управление данными. При столь высокой стоимости ресурсов
важно, чтобы они использовались с наибольшей эффективностью.
Создание операционных систем мотивировалось именно этой
целью — необходимостью повышения эффективности систем
обработки данных.
Обратите особое внимание на употребление в предыдущем
контексте слова «система». В хорошо спроектированной
операционной системе не просто учитываются особенности либо
аппаратных средств, либо программного обеспечения, либо системы
управления данными, а реализуется оптимальная организация
их совместного использования для достижения поставленной цели.
Системы обработки данных могут различаться по своему
назначению — в системе управления производственным процессом
может иметь большее значение быстрота ответа, в то время как
в обучающей системе университета важнее обеспечить большую
гибкость. Таким образом, в разных приложениях могут
потребоваться различные операционные системы и понятие «лучшей»
из них применимо лишь для данной ситуации. Здесь мы будем
рассматривать операционные системы не отвлеченно, а как средства
решения определенных задач обработки данных, всегда имея
в виду их целевое назначение.
Настоящая книга должна дать читателю основы понимания
того, что такое операционная система и как она работает. Для
иллюстрации ряда положений будут использоваться конкретные
примеры проектирования и реализации операционных систем;
мы постараемся избежать детального обсуждения (на «уровне
12 Глава 1
битов») особенностей функционирования каких-либо реальных
операционных систем или вопросов теории их проектирования.
Наша цель состоит в том, чтобы описать задачи, решаемые с
помощью операционных систем, а не какой-либо набор решений
этих задач. Изложение носит характер вводного курса в теорию
операционных систем. Основное внимание уделяется
использованию этого специального вида программного обеспечения в
реальных условиях, т. е. излагаемый предмет не является
теоретическим курсом.
Книга состоит из пяти частей. Часть I, включающая гл. 2—4,
содержит описания основных понятий, касающихся
программного обеспечения, аппаратных средств и структуры данных —
системных ресурсов, управляемых операционной системой. Для
многих обучающихся значительная часть материала в
вышеназванных главах покажется знакомой; включение этих сведений
объясняется тем, что они должны быть известны читателю для
понимания последующих глав.
В части II, гл. 5 и 6, отмечается быстрый технический
прогресс последних двух десятилетий и связанная с ним эволюция
операционных систем. В данной части вводятся понятия
мультипрограммирования и разделения времени, при этом
подчеркивается важность обусловливающих их экономических факторов.
В части III, гл. 7—9, рассматриваются современные средства
связи программиста с системой на примере двух языков
управления заданиями. В гл. 7 анализируется процесс управления
заданиями ft рамках дисковой операционной системы (DOS) фирмы
IBM; гл. 8 и 9 посвящены изложению сведений о языке
управления заданиями полномасштабной операционной системы фирмы
IBM (OS/JCL), причем карты JOB и EXEC рассматриваются в
гл. 8, а карты данных DD —в гл. 9. Выбор систем, созданных
фирмой IBM, вполне объясним, поскольку последняя является
основным поставщиком ЭВМ на Западе. В этом разделе
рассматриваются не все особенности языков управления заданиями, а
лишь те, которые наиболее употребительны. Его назначение
состоит в иллюстрации современных средств общения
программиста с системой, а не в изложении исчерпывающего курса JGL;
в то же время для начинающего программиста прикладная
ориентация этого материала должна оказаться полезной в решении
многих задач его каждодневной практики программирования.
Часть IV, гл. с 10 по 15, содержит описания ряда
операционных систем общего назначения. В гл. 10 приводится краткий
обзор основных функций любой операционной системы, при этом
уделяется особое внимание различным способам оценки
эффективности системы. Следующие три главы, с 11 по 13, взаимосвязаны;
в них дано описание некоторого комплекта аппаратных средств
и используемых с этим комплектом двух различных операцион-
Введение и общий обзор 13
ных систем. Для иллюстрации основных идей излагаются
принципы функционирования Системы IBM/360 (гл. 11) и двух
операционных систем фирмы IBM, DOS и OS/MFT. В действительности
этой цели могла бы служить вычислительная система практически
любого поставщика, однако продукция фирмы IBM знакома куда
•большему числу читателей, чем продукция любой другой фирмы.
Гл. 14 обобщает материал трех предыдущих глав, сопоставляя
^го с особенностями систем других изготовителей. Последняя
глава этого раздела, гл. 15, вводит важнейшие понятия
виртуальной и страничной организации памяти.
Наконец, в части V, гл. с 16 по 19, будет рассмотрен ряд
специализированных систем и связанное с ними системное
математическое обеспечение. Гл. 16 посвящена приложениям к задачам
управления технологическими процессами, где требования
быстроты ответа и повышенной надежности обусловлены высокой
стоимостью производственного времени. В гл. 17 в связи с
обработкой информации при решении управленческих задач
рассматриваются системы управления базами и передачей данных.
Обсуждаются прикладные системы, включающие несколько ЭВМ,
прежде всего сочетания мини-ЭВМ с большими машинами. В
каждой из этих глав мы будем рассматривать прикладную систему
в связи с внешними условиями, выявляя при этом, каким образом
операционная система и другие виды системного математического
обеспечения способствуют наилучшему использованию
системных ресурсов при заданных наиболее существенных критериях
эффективности прикладной системы.
Материал этой книги может служить основой односеместро-
вого курса с четырьмя зачетами; опуская часть III или часть V,
можно построить четырехзачетный полусеместровый курс. Для
большинства обучающихся содержание части I покажется
повторением уже известного материала. Предполагается, что читатель
владеет по крайней мере одним языком программирования; тем,
кто не имеет опыта работы с языком ассемблера, следует
внимательно прочесть главу, посвященную математическому
обеспечению, поскольку основные особенности операций на уровне битов
будут важны в части IV, где мы займемся изучением принципов
функционирования Системы IBM/360. Глава, посвященная
аппаратным средствам, содержит описание технических устройств
« связи с рядом понятий, которые обсуждаются в последующих
разделах; принципы действия каналов, контроллеров и средств
-телеобработки могут пока.заться неизвестными. Многим
читателям полезно ознакомиться с материалом, касающимся
структуры и файловой организации данных.
Часть II написана без излишних технических подробностей и
должна давать студенту, руководителю делового предприятия,
инженеру или специалисту по вычислительной технике ясное
14
Глава 1
представление о том, что такое операционная система. Главы,
касающиеся управления заданиями, могут использоваться на
любом уровне как введение в предмет. Части IV и V посвящены
главным образом функциональному описанию операционных
систем на «макроуровне», исключающему рассмотрение элементов
операционной системы на уровне битов; освоив основные
представления вводного материала части I, программист, имеющий
опыт работы с любым алгоритмическим языком, не встретит
никаких затруднений при чтении этих последних частей книги.
*
Часть I
ОСНОВНЫЕ СИСТЕМНЫЕ РЕСУРСЫ
Глава 2
БИТЫ, ЧИСЛА, КОДЫ И МАТЕМАТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ
Введение
В этой главе будут рассмотрены основные понятия двоичной
системы счисления, представления данных в ЭВМ и языков
программирования.
Двоичная система счисления
Современные цифровые вычислительные машины приспособлены
для работы с двоичными данными; поэтому знание основных
представлений двоичной системы существенно для понимания того, как
в действительности работает ЭВМ. Поскольку для большинства
из нас намного ближе десятичная система счисления, начнем наше
изучение двоичных чисел более подробным рассмотрением
нескольких десятичных чисел.
Рассмотрим два числа: 3 и 30; они содержат одну и ту же
цифру три, однако все мы знаем, что перед нами два различных числа.
В чем различие между 3 в числе три и 3 в числе тридцать? Ответ
известен любому школьнику: в позиции; в первом случае 3
занимает позицию единиц, во втором —позицию десятков. Более
тщательный анализ приводит к выводу, что число 30 в
действительности является способом выражения того факта, что имеется
три десятка и ни одной единицы.
Выразим это иным способом. Любое десятичное число
представляет собой ряд цифр —.0, 1, 2, 3, 4, 5, 6, 7, 8, 9 —в
определенной комбинации, записанных с учетом их позиционных
значений. Число двадцать три записывается как 23, в то время как
другая комбинация тех же двух цифр, 32, представляет иное число.
Значение данной последовательности цифр находится умножением
каждой цифры на ее разрядное или позиционное значение и
суммированием этих произведений.
Рассмотрим, например, число 3582; в действительности это
сочетание представляет следующее:
16 Глава 2
2 раза по 1 = 2
+ 8 раз по 10= 80
+5 раз по 100= 500
+3 раза по 1000 = 3000
3582
В более общих понятиях любое число является просто суммой
произведений его цифр и разрядных значений; на языке
математики:
Число = 2 (цифровое значение умножить на разрядное
значение).
юс | ю511041 то311021 ю11 ЮР jio-tjnr-ajio~3
Рис. 2.1. Десятичные разрядные значения.
Рассмотрим более внимательно последовательность разряд*
ных значений: 1, 10, 100, 1000, 10 000, 100 000, 1 000 000 и т. д.
Правило их построения довольно очевидно. Используя
математическую символику и тот факт, что всякое число в нулевой
степени равно единице, разрядные значения десятичной системы
счисления можно представить в виде последовательности степеней
десяти (основания) в соответствии с возрастающей
последовательностью целых показателей степени (рис. 2.1). Десятичные дроби,
например 0.25, включают в качестве разрядных значений
отрицательные степени десяти:
2 раза по 10"1 = 2 раза по 1/10 = 0.2
+5 раз по 10"2 = 5 раз по 1/100 = 0.05
0.25
В нашем обсуждении десятичной системы счисления исполь-
вуется ряд положений. Прежде всего — идея разрядного, или
позиционного значения, представленного основанием 10,
возведенным в целую степень. Другое положение состоит в
использовании цифры 0 для выражения отсутствия слагаемого,
соответствующего данной позиции. Третье — для записи десятичных чисел
требуется весь набор из десяти цифр, от 0 до 9. Наконец, лишь
значения, меньшие основания, в данном случае — десяти, могут
быть представлены с помощью одной позиции.
В этих положениях нет ничего такого, что ограничивало бы
их применение исключительно в системе счисления с основанием
десять. Если позиционные значения представляются степенями
двух, а не десяти, то мы получаем построение, отвечающее систе-
Биты, числа, коды и математическое обеспечение 17
ме счисления с основанием два, или двоичной системе счисления.
Графически это построение представлено на рис. 2.2.
Как и в случае десятичной системы, цифра нуль требуется для
выражения отсутствия значения в данной позиции. Помимо
цифры нуль в двоичной системе счисления для образования чисел
используется лишь одна цифра —единица. Почему только две
цифры? Как и в десятичной системе, с помощью одной позиции
могут быть выражены лишь значения меньшие, чем основание,
в данном случае —два; таким образом, необходимы лишь цифры
нуль и единица. В соответствии с правилом «цифровое значение-
28 | 27
Десятичные
26
64
25
32
г4
16
23
8
22
4
21
2
2° I 2-1 j 2~2 | 2-3 12-4
1 i
Рис. 2.2. Двоичные разрядные значения.
раз-по-разрядное значение» двоичное число 1100101 равно
следующему десятичному числу:
1 раз по 2е = 1 раз по
-+-1 раз по 25 = 1 раз по
-J-0 раз по 24 = 0 раз по
+0 раз по 23 = 0 раз по
-f-1 раз по 22 = 1 раз по
-f-О раз по 21 = 0 раз по
-f-1 раз по 2° = 1 раз по
64
32:
16:
8
4
2
1
= 64
= 32
= 0
= 0
= 4
= 0
= 1
101
Число 2 в двоичном представлении записывается как 10; число
4 — как 100; Уа записывается как 0.1, что означает
1 раз по 2"1 = 1 раз по V2 = */2.
Всякое целое число может быть выражено в двоичном
представлении. Точное двоичное представление возможно не для всех
дробей, однако это не должно вызывать удивления, если вы
вспомните, что не все дроби имеют точное десятичное представление,
например одна треть.
Мы, люди, по крайней мере в этой части вселенной,
пользуемся десятичной системой счисления, поскольку привыкли к этой
системе. Во всем остальном основание десять ниснолько не лучше
любых других оснований.
В вычислительной машине как электронном устройстве,
использование двоичной системы счисления дает огромные
преимущества; если данные представляются с помощью только двух
18 Глава 2
цифр — нулем и единицей, — вычислительная машина может
работать на основе простой логики замыкания и размыкания
электрических цепей. Двоичная система является поистине системой
счисления электронных устройств.
В области вычислительной техники пользуются
популярностью также другие системы счисления, в особенности
восьмеричная (с основанием восемь) и шестнадцатеричная (с основанием
шестнадцать). В восьмеричной системе для представления
позиционных значений используются степени восьми (рис. 2.3); при
8*
87 | 8е | 85 | 84 | 83 | 82 | 81 | 8° I 8-1 | 8~* 18~3 J8~*
Рис. 2.3. Восьмеричные, или по основанию восемь, разрядные значения.
165|l64 I 163 I 1621 161 I 16° И6-1
I I I——I 1 ;
16-2 Мб"3
Рис. 2.4. Шестиадцатеричные, или по основанию шестнадцать, разрядные
значения.
Восьмеричные
0
1
2
3
Двоичные
000
001
010
011
Восьмеричные
4
5
6
7
Двоичные
100
101
110
111
Рис. 2.5. Таблица восьмерично-двоичных преобразований.
этом для записи числовых величин используются цифры 0, 1, 2,
3, 4, 5, 6 и 7. В шестнадцатеричной системе (рис. 2.4)
используются степени шестнадцати и цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В,
С, D, Е и F. Шестнадцатеричное число (FF)ie равно
15 раз по 161 = 240
+ 15 раз по 16° == 15
(255)
ю
Причина, по которой эти две системы счисления так важны в
вычислительной технике, состоит в простоте переходов от
восьмеричных чисел или шестнадцатеричных к двоичным и наоборот.
Каждая восьмеричная цифра в точности эквивалентна трем двоичным
цифрам (рис. 2.5); каждая шестнадцатеричная цифра
непосредственно преобразуется в четыре двоичных цифры (рис. 2.6).
Таким образом, восьмеричное и шестнадцатеричное представления
могут использоваться в качестве стенографических записей рас-
Биты, числа, коды и математическое обеспечение 19
сматриваемых двоичных данных, и это обстоятельство
чрезвычайно важно, учитывая необходимость компактности печати и
наглядности данных (рис. 2.7).
Числовые данные. Поскольку двоичные числа так удобны для
электронных устройств, не удивительно, что многие ЭВМ
обнаруживают наивысшую эффективность при работе с двоичными
Шестнадцатеричные Двоичные Шестнадцатеричные Двоичные
0
1
2
3
4
5
6
7
0000
0001
0010
0011
0100
0101
0110
0111
8
9
А
В
С
D
Е
F
1000
1001
1010
1011
1100
1101
1110
1111
Рис. 2.6. Таблица шестнадцатерично-двоичных преобразований.
Двоичные
11001010^011 000101001000 101100001111
011001100001 100000100011 011101010100
000100000010 011111110000 000010000101
100100100100 100001011111 100000011001
X
4 \
восьмеричные Шестнадцатеричные
6253 0510 5417 CAB 148 B0F
3141 4043 3524 661 823 754
0402 3760 0205 102 7F0 085
4444 4137 4031 924 85F 819
Рис. 2.7. Восьмеричные и шестнадцатеричные представления как
стенографическая запись двоичного. Отметьте, насколько нагляднее и компактнее
восьмеричное и шестнадцатеричное представления.
числами. Многие машины спроектированы на основе
представления двоичных данных в виде слов — основных элементов,
обычно содержащих 16, 24 или 32 бита (двоичных цифры), хотя могут
использоваться (и, возможно, используются) практически любые
длины слов. Один бит, обычно старший разряд, выделяется для
записи знака — нуль для положительных и 1 для отрицательных
чисел; остальные же позиции занимают цифры двоичного числа.
В таких числах не предусмотрено фиксированное положение
десятичной точки, и определение десятичного порядка
предоставляется самому программисту. Размер слова определяет пределы
абсолютных значений чисел, представимых в данной машине.
Например, машина с 32-разрядным словом может обрабатывать числа.
20
Глава 2
запись которых содержит знак и следующие за ним 31 двоичную
цифру (число, имеющее десятичным представлением запись
2 147 483 647), в то время как в машине с 16-битовым словом
предельным является число (0111111111111111)2 или 32 767 в
десятичном представлении.
Отрицательные числа обычно хранятся в виде дополнений.
Идея дополнения к числу на первый взгляд представляется
довольно странной, но в действительности усвоить ее очень легко.
Ключом к пониманию арифметики дополнительных чисел
является положение о том, что все числа должны иметь одно и то же
число разрядов; для примера предположим, что мы ограничены
тремя десятичными цифрами. В трехзначных числах дополнением
к 001 является 999; дополнением к 002 —998; дополнением к
020 —980; дополнением к 500 —500; дополнением к 997 —003
и т. д. Правило простое — вычесть исходное число из 1000 (первое
четырехзначное число, находящееся вне пределов наших
трехзначных чисел). Если мы работаем с четырехзначными числами,
то следует вычитать из 10 000; мы использовали бы 1 000 000,
если бы все наши числа были шестизначными.
И что дальше? Какое преимущество дает нам использование
дополнений? Дополнения используются потому, что они
позволяют нам выполнять операцию вычитания с помощью операции
сложения. Рассмотрим следующую задачу,
852 852
— 137 Дополнение ►- + 863
715 1715
Беря дополнение указанного числа, мы выполняем вычитание, и,
складывая его с исходным числом, мы получаем тот же самый ответ,
как при обычном вычитании за исключением цифры более
высокого порядка. Однако если мы можем удерживать в памяти
только три цифры, то дополнительная цифра более высокого.порядка
исчезает, давая правильный результат. Разумно ли предполагать,
что эта цифра более высокого порядка исчезнет? В машине с
фиксированной длиной слова, ограниченной, скажем, шестнадцатью
разрядами, нет места для записи семнадцатого двоичного знака.
Что, если ответ отрицателен? Рассмотрим следующую задачу:
356 356
— 432 Дополнение >■ + 568
— 076 0924
Кажется, что в этом случае такой подход неприемлем, однако
что является дополнением к 924? Ответ —076, и поскольку
дополнительный старший разряд равен нулю, а не единице, то ответ
Биты, числа, коды и математическое обеспечение
21
отрицателен. Все получилось! Правило действительно простое —
найди дополнение ко второму из чисел и сложи. Если
вспомогательный старший разряд равен 1, то его нужно отбросить, но если
он равен 0, то ответ отрицателен и хранится в форме дополнения.
Вы, может быть, заметили одно небольшое затруднение —
при фиксированной разрядности чисел для получения
дополнения к трехзначному числу мы должны вычесть его из
наименьшего чешырехзяачяото числа; если мы в действительности
ограничены тремя знаками, то откуда берется эта дополнительная
старшая цифра? Ответ состоит в том, что она нам и не нужна;
вместо того чтобы вычитать из 1000, мы вычитаем из 999 и к
результату добавляем 1. Другое преимущество такого подхода
состоит в том, что исключается необходимость занимать старшую
единицу в процессе вычитания.
Теперь мы обратимся к действительной причине
использования дополнений в ЭВМ. Для иллюстрации выполняемых действий
воспользуемся рядом четырехзначных двоичных чисел.
Маловероятно существование реальной машины с фиксированной
длиной слова в 4 бита, но этот случай позволяет проиллюстрировать
основной принцип.
Правило отыскания дополнений к трехзначным десятичным
числам сводилось, как вы возможно помните, к вычитанию из
наибольшего трехзначного числа 999 и прибавлению к ответу 1.
Если бы мы работали с четырехзначными числами, то
характерным значением было бы 9999. В двоичной системе правило остается
тем же самым с той разницей, что мы вычитаем из наибольшего
(при заданном размере слова) двоичного числа и прибавляем к
результату 1. Рассмотрим следующие дополнения:
1111
Число —1001
ОНО
+0001
Дополнение 0111
1111
—00111
1100 J
+0001
1101
ИИ
—1110
0001
+0001
0010
1111
—0101
1010
+ 0001
1011
1111
—0100
1011
+0001
1100
Обратите внимание на результаты начального этапа процесса
вычитания; во всех случаях промежуточный результат,
предваряющий прибавление двоичной единицы, совпадает с исходным
числом, в котором изменены все двоичные разряди — единицы
заменены нулями и нули единицами. Эту операцию очень легко
реализовать в электронных схемах. Поскольку использование
дополнений позволяет нам свести вычитание к сложению, то обе
арифметические операции могут выполняться одной и той же
электронной схемой, что экономит средства изготовителя (а следовательно,
и покупателя) благодаря отказу от независимой аппаратной
реализации операции вычитания.
22
Глава 2
Двоичные целые числа вполне обеспечивают многие
прикладные вычисления, однако иногда требуются числа, большие
максимально возможных при данной длине слова, а также дробные
величины. В научной литературе очень большие числа
(астрономические расстояния) и очень малые числа (субатомные
измерения) записываются с помощью специальной нотации в виде
десятичной дроби и следующей за ней степенью десяти; скорость
света, например, 186 000 миль в 1 с может быть записана как
0.186 х 106.
S
Характеристика
Дробная часть
Длинный формат
5
Характеристика
Старшие разряды дробной части
Младшие разряды дроЕной части
Рис. 2.8. Форматы данных с плавающей точкой фирмы IBM.
Большие, малые и дробные числа могут храниться в ЭВМ
в форме, имитирующей эту научную нотацию. Поскольку ЭВМ
обычно не работают с десятичными числами, то нельзя
использовать степень 10, однако система с основанием 2 дает
приемлемые результаты. Например, в Системах 1ВМ/360и IBM/370 для
каждого числа с плавающей точкой отводится полное слово в 32
бита. Самый старший разряд (рис. 2.8) содержит знак дробной
части. Следующие семь битов содержат двоичную степень
шестнадцати, играющую ту же роль, что степень десяти в обычной
научной нотации. Остальные 24 бита содержат дробную часть
числа.
Для простоты обращения с десятичной точкой числа обычно
представляют в форме двоичных величин, умноженных на степень
шестнадцати, при этом двоичная 'точка помещается перед первым
значащим битом (в отличие от десятичной точки); таким образом,
все функции, отвечающие манипуляциям с десятичной точкой,
реализуются характеристикой.
Для повышения точности вычислений фирмой IBM
используются форматы повышенной точности представления чисел с
плавающей точкой; обычное поле записи числа с плавающей точкой
пополняется 32-битовым словом, увеличивая длину дробной части
числа с 24 до 56 разрядов.
Биты, числа, коды и математическое обеспечение 23
Кодирование в ЭВМ
Двоично-кодированные десятичные числа BCD, По экономическим
соображениям устройства чтения перфокарт, принтеры и другие
устройства ввода-вывода приспособлены для передачи данных в
ЭВМ или из нее в форме последовательностей независимых
символов. Число 12, например, рассматривается как 1 и 2, а не
двенадцать. Поскольку каждый символ обрабатывается как
независимый элемент, то он м(5жет быть записан в форме
индивидуального кода. Обращаясь сначала к числовым данным, можно
представить десятичную цифру ее двоичным эквивалентом (рис. 2.9),
Десятичное Десятичное
число Код число Код
0 0000 5 0101
1 0001 6 0110
2 0010 7 0111
3 0011 8 1000
4 0100 9 1001
Рис. 2.9. Двоично-кодированные десятичные числа.
для каждой цифры используются четыре бита, даже если
некоторые из них не являются значащими, так как проще
спроектировать электронное устройство, обрабатывающее всегда одно и
то же число битов. Число двенадцать в этой схеме кодирования
цифр выглядело бы так: 00010010. Если это число рассматривать
как двоичное и преобразовать его в десятичную систему, то
значением было бы 21 + 24, что составляет 18, а не 12. К счастью,
большинство ЭВМ оснащено специальными электронными
устройствами, преобразующими двоично-кодированные десятичные
числа в чисто двоичные. В некоторых машинах можно выполнять
арифметические операции с двоично-кодированными данными;
в машинах IBM, например, такие данные называются
десятичными числами в упакованном формате.
Во многих прикладных вычислениях обрабатываются не
только числовые, но и буквенные данные; таким образом, требуется
шире, чем используемый, упомянутый выше простой числовой
код. Одним из самых ранних решений этой задачи был
шестибитовый код BCD, показанный на рис. 2.10. В этом коде
отдельные символы представляются последовательностью из шести
битов — двумя битами «зоны» и четырьмя «числовыми» битами.
Буквы от А до I относятся к битам зоны 11; так как А является
первой буквой в этой группе, то числовая часть ее BCD-кода
равна 0001. Вторая буква, В, имеет код 11 0010. Буквы от J до R
относятся к битам зоны 10 и от S до Z — к битам зоны 01; и в этих
24 Глава 2
случаях числовые биты показывают порядковый номер символа
внутри соответствующей зоны. С учетом всего сказанного код BCD
оказывается куда более разумным, чем телеграфный код Морзе.
Использование кода, как было установлено выше, позволяет
обрабатывать символы при их вводе и выводе как независимые
элементы; ЭВМ, управляемая программой, объединяет эти
независимые символы, формируя содержательные данные.
Соблюдая необходимые правила, можно пользоваться любым кодом.
Символ
А
В
С
D
Е
F
G
Н
1
J
К
L
М
N
О
Р
Q
R
11
11
11
11
11
11
11
11
11
10
10
10
10
10
10
10
10
10
Код
0001
0010
0011
0100
0101
0110
0111
1000
1001
000 Т
0010
0011
0100
0101
0110
0111
1000
1001
Еимбол
S
т
и
V
W
X
Y
Z
0
1
2
3
4
5
6
7
8
9
Код
01 0010
01 0011
01 0100
01 0101
01 0110
01 0111
01 1000
01 1001
00 1010
00 0001
Q0 0010
00 0011
00 0100
00 0101
.00 0110
00 0111
00 1000
00-1001
Рис. 2.10. Шестибитовый код BCD. Некоторые неиспользованные
комбинации битов употребляются для представления знаков препинания и других
специальных символов.
В современных вычислительных системах наибольшей
популярностью пользуются расширенный двоично-кодированный
десятичный код для обмена информацией, или EBCDIC (Expanded
Binary Coded Decimal Interchange Code) — произносится как «эб-
си-дик», — и код ASCI 1-8 Американского института
национальных стандартов (рис. 2.11). Оба эти кода —восьмибитовые.
Еще одно заключительное замечание — и мы перейдем к
языкам программирования. В ЭВМ данные поступают через
устройства чтения перфокарт в кодированной форме; воспользуемся,
например, кодом EBCDIC. Данные в этой форме представляют собой
строки независимых двоично-кодированных символов; такие
«наглядные», или «внешние», или просто «кодированные» данные
неудобны для вычислений.
Биты, числа, коды и математическое обеспечение 25
EBCDIC ASCIIS
Дбоичная Шестнадцатеричная Двоичная Шестнадцатеричная
Симбол
А
В
С
D
Е
F
G
Н
Г
J
К
L
М
N
0
Р
а
я
s
т
и
V
W
X
Y
Z
0
1
2
3
4
5
6
7
8
9
форма
1100
1100
1100
1100
1100
1100
1100
1100
1100
1101
1101
1101
1101
1101
1101
1101
1101
1101
1110
1110
1110
1110
1110
1110
1110
1110
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
0001
0010
0011
0100
0101
0110
0111
1000
1001
0001
0010
0011
0100
0101
0110
0111
1000
1001
0010
0011
0100
0101
0110
0111
1000
1001
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
форма
С1
С2
сз
С4
С5
С6
С7
С8
С9
D1
D2
D3
D4
D5
D6
D7
D8
D9
Е2
ЕЗ
Е4
Е5
Еб
Е7
Е8
Е9
F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
аюрма
1010 0001
101® 0010
1010 0011
1010 0100
1010 0101
1010 0110
1010 0111
1010 1000
1010 1001
1010 1010
1010 1011
1010 1100
1010 1101
1010 1110
1010 1111
1011 0000
1011 0001
1011 0010
1011 0Ц11
1011 0100
1011 0101
1011 0110
1011 0111
1011 1000
1011 1001
1011 .,1010
0101 0000
0101 0001
0101 0010
0101 0011
oioi оюо
0101 0101
0101 0110
0101 0111
0101 1000
0101 1001
форма
А1
А2
A3
А4
А5
Аб
А7
А8
А9
АА
АВ
АС
AD
АЕ
AF
ВО
В1
В2
ВЗ
В4
65
Вб
В7
ВО
В9
ВА
50
51
52
53
54
55
56
57
58
59
Рис. 2.11. Восьмибитовые коды EBCDIC и ASCII. Неиспользованные
сочетания битов употребляются для представления знаков препинания и других
специальных символов; эти символы не показаны, так как правила их
кодирования не столь очевидны. Полный перечень соответствующих им кодов
можно найти почти в любом справочном руководстве.
Печатающее устройство приспособлено для приема данных
в кодированной форме. Если данные (например, фамилия или
номер в системе социального страхования) всего лишь считыва-
ются с внешнего устройства, быть может, копируются и затем
пересылаются в печатающее устройство, то представляется весьма
26 Глава 2
разумным хранить такие данные в их внешней, или наглядной,
или кодированной форме. Однако для других данных (например,
отработанные часы или ставка почасовой оплаты), которые
используются в вычислениях, форма представления данных должна
быть изменена. В вычислительных машинах фирмы IBM
исходные данные в коде EBCDIC сначала преобразуются в
упакованный десятичный формат, при этом четыре бита зоны
отбрасываются и остается лишь числовая часть каждого символа. Такое
представление допускает выполнение арифметических операций,
однако во многих случаях приходится выполнять дополнительное
преобразование упакованных десятичных форматов в двоичную
форму или к представлению с плавающей точкой. Прежде чем
переслать результаты вычислений в печатающее устройство,
данные должны быть преобразованы по этой цепочке в обратном
направлении от двоичного представления к упакованным
десятичным форматам и затем вновь в код EBCDIC. ЭВМ других фирм-
изготовителей могут отличаться в тех или иных деталях
кодирования, однако общая идея остается той же самой.
Языки программирования
Программирование на машинном языке. Программа для ЭВМ
представляет собой последовательность команд, управляющих
вычислительной машиной в выполнении некоторой логической
функции. Эти команды записаны в двоичном коде, по крайней
мере на уровне машинных операций. Отдельные команды состоят
из кодов операций — СЛОЖИТЬ, ВЫЧЕСТЬ, ПЕРЕСЛАТЬ,
СРАВНИТЬ — и операндов, определяющих длину и
размещение полей, подлежащих обработке.
В качестве примера программирования на машинном языке
рассмотрим следующий фрагмент программы, в соответствии с
которой должны складываться два числа. Прежде чем выполнить
арифметическое действие, по крайней мере над двоичными
числами, в большинстве ЭВМ данные сначала нужно переслать в
регистр; в Системах IBM/360 и IBM/370 команда засылки значения
числа в регистр имеет код операции «01011000». Не вдаваясь в
рассмотрение отдельных полей операндов, отметим лишь, что эта
первая команда сообщает ЭВМ о том, где находятся данные и в
какой регистр их следует переслать; она имеет примерно
следующий вид:
01011000001100001100000000000000
что, как вы должны согласиться, не самый простой текст, который
вам когда-либо доводилось читать.
Поскольку мы намерены складывать два числа, то второе зна-.
чение также должно быть размещено в регистре; это делается с
Биты, числа, коды и математическое обеспечение 27
помощью второй команды, совершенно аналогичной первой:
0101lOOCfclOOOOOOl100000000000100.
S
»
Заметьте, что код операции (первые восемь битов) остается тем
же, а адрес (последние шестнадцать битов) отличается.
Шестнадцатеричная
форма Дбоичная форма
58 30 С000 0101 1000 0011 0000 1100 0000 0000 0000
58 40 С004 ►Old 1000 0100 0000 1100 0000 0000 0100
1А 34 >0001 1010 0011 0100
50 30 С008 ►OIOI 0000 0011 0000 1100 0000 0000 1000
Рис. 2.12. Программирование с шестиадцатеряяно-двоичным
преобразованием вручную.
Команда сложения имеет кодом операции «00011010»; таким
образом:
0001101000110100
обеспечивает сложение содержимого третьего и четвертого
регистров. Если результат должен использоваться в последующих
вычислениях, то ответ может быть сохранен выполнением команды
записи в память с кодом операции «01010000»:
01010000001100001100000000001000.
На самых ранних этапах развития вычислительной техники
программирование осуществлялось именно таким образом.
Представьте себе теперь, насколько трудно было контролировать
правильность написания всех этих нулей и единиц! Каждый неверно
записанный бит означал программную ошибку. Поэтому некоторые
программисты стали писать программы в восьмеричных или шест-
надцатеричных обозначениях, пользуясь простотой их
представления в двоичной форме, а затем, после окончания написания
программы, формировали строки двоичных знаков (рис. 2.12).
Поскольку преобразования в двоичный код в основном сводятся
к просмотру таблиц, а вычислительные машины хорошо
приспособлены к выполнению таких операций, вскоре некоторым
предприимчивым программистам пришла на ум идея написать
программу, выполняющую требуемые преобразования
автоматически (рис. 2.13). Таким образом, возникло важное понятие
ассемблера, или компилирующей программы.
Следующий шаг в развитии программного обеспечения не
столь очевиден, поэтому требуется некоторая осторожность. Если
программу можно описать, просматривая таблицу и подставляя
двоичное число «01011000» вместо шестнадцатеричного «58»,
28
Глава 2
то почему бы не подставить в программу тот же самый двоичный
код операции вместо буквы L? L определенно имеет большее
сходство с словом LOAD, которое можно рассматривать как
обозначение операции пересылки в регистр, чем (58)1в. И почему бы не
использовать А вместо ADD, S вместо SUBTRACT, M в качестве
MULTIPLY или ST вместо STORE? Такие мнемонические коды
реализованы в языках ассемблера, как это показано на рис. 2.14;
50 30 С008
1А34
58 40 С004
58 30 С000
0101100000110000
1100000000000000
0101100001000000
1100000000000100
0001101000110100
0101000000110000
1100000000001000
Рис. 2.13. Автоматическое шестнадцатерично-двоичное преобразование.
Программа
шестнадцатерично-
Шинного
преобразования
Ассемблирующая
программа
oioiioooooiioooa
1100000000000000
0101100001000000
1100000000000100
000110100011010О
0101000000110000
1100000000001000
Рис. 2.14. Ассемблирующая программа.
ассемблирующая программа осуществляет преобразование
мнемонических записей команд в двоичные коды, используемые
машиной.
Языки высокого уровня. Программирование даже на уровне
ассемблера — занятие утомительное и чревато ошибками.
Применение макрокоманд явилось первым шагом отхода от принципа
«каждой исполняемой машинной команде —свой код». В
результате обработки макрокоманды ассемблирующей программой
формируется не одна, а несколько команд в двоичном коде. Первые
применения макрокоманд, по-видимому, относятся к операциям
ввода и вывода, в которых требуется проверять и перепроверять
несколько битов, определяющих состояние устройств, чтобы
убедиться в успешном завершении операции. Возможности,
предоставляемые макрокомандами, позволяют закодировать
необходимый набор команд лишь один раз и затем просто вносить его
в любую другую программу.
Первым полноценным языком высокого уровня был Фортран.
Если уяснить основную идею языков типа Фортран, то вы согла-
Биты, числа, коды и математическое обеспечение 29
ситесь, что она довольно проста. Так как сложение двух чисел
включает две операции пересылки в регистр, операции сложения
и записи в память, то почему бы не написать специальную
программу, которая выглядит примерно так:
С =А + В
и формирует необходимые четыре команды (рис. 2.15)? Люди
мысленно пользуются сложением; функции пересылки и записи в
память связаны исключительно с удобством реализации операций
в ЭВМ. В такой схеме операции загрузки и записи в память
рассматриваются как самоочевидные, что упрощает процесс
программирования. Конечно, это дается не бесплатно — хороший
01011000001100&О
1100O0000000000O
0101100001000000
1100000000000100
0001101000110100
0101000000110000
1100000000001000
Рис. 2.15. Компилятор с Фортрана.
программист на языке ассемблера наверняка может написать
более эффективную программу, чем самый лучший компилятор с
Фортрана, однако Фортран позволяет использовать возможности
ЭВМ ученым, инженерам, математикам и другим специалистам,
которые, быть может, никогда бы не обратились к вычислительной
машине при ограничениях программирования на языке
ассемблера.
Другие компиляторы приспособлены для получения двоично-
кодированных программ машинного уровня, исходя из несколько
иных форм представления входных данных. Кобол, например,
является языком, ориентированным на решение задач
экономического характера и позволяющим записывать программы в форме,
близкой языку делового мира (рис. 2.16). В ПЛ/1 сочетаются
многие особенности Фортрана и Кобола. БЭЙСИК является
превосходным языком для обучающихся, только приступивших к
изучению программирования. Языки многих компиляторов
предназначаются для работы с использованием профессиональной
терминологии в определенной области; хорошим примером может
служить компилятор COGO для инженеров-строителей. В
настоящее время существуют буквально тысячи компилирующих
программ; в каждой из них применяется определенный набор правил
интерпретации исходного программного кода, приводящих в
конечном итоге к формированию программы на машинном языке.
/ С=В+А
Компилятор с
Фортрана
30 * - _._ Глава 2
Компилятор, вообще говоря, проектируется таким образом,
чтобы обеспечивать наибольшую эффективность (т. е. создавать
эффективные программы на машинном языке) в решении
определенного типа прикладных задач; прекрасной тому
иллюстрацией могут служить различия между Фортраном и Коболом. Как
вы помните, данные ЭВМ поступают в закодированной форме
и должны быть преобразованы в форму, удобную для выполнения
над ними вычислительных операций, такую, как двоичная или с
/аБ5"А, В GIVING С:
Компилятор с
Кобола
0101100000110000
1100000000000000
0101100001000000
1100000000000100
V 00011010001101*00
V 0101000000110000
v*—► 1100000000001000
Рис. 2.16. Компилятор с Кобола.
плавающей точкой. В Фортране такое преобразование
происходит, как только данные прочитаны или непосредственно перед
их записью. Таким образом, в Фортране данные сразу
запоминаются в вычислительной форме. Язык Фортран, как вы уже
наверное догадываетесь, предназначается для решения
математических задач. С другой стороны, Кобол был создан для решения
экономических задач, в которых обычно выполняется много
операций ввода и вывода данных и относительно мало вычислений;
такие данные чаще всего хранятся в закодированной форме, при
этом переход к вычислительной форме выполняется лишь во время
самого процесса вычислений. Фортран оказывается неудобным
в тех областях, где царит Кобол, и наоборот.
Объектный и загрузочный модули. Программа, написанная на
языке программиста —Фортране, Коболе, языке ассемблера, —
называется исходным модулем; команды исходного модуля не
могут непосредственно исполняться никакой машиной. Исходный
модуль читается и транслируется компилирующей или
ассемблирующей программой (рис. 2.17), в результате чего появляется
1
Биты, числа, коды и математическое обеспечение
31
Исходная
колода
Компилятор или
ассемблирующая
программа
*
Объектный
\ модуль-
Редактор
связей или
загрузчик
Ы
Загрузочный
I модцль
Рис. 2.17. Исходный, объектный и загрузочный модули.
версия той же программы на языке машины, называемая
объектным модулем. Во многих ЭВМ объектный модуль должен пройти
еще один этап преобразований, прежде чем стать готовой к
исполнению программой. Другая программа, редактор связей или
загрузчик (детально рассматриваемые ниже), выполняет ряд
функций, необходимых для подготовки программы к исполнению
в командах ЭВМ, и формирует загрузочный модуль.
Краткие выводы
В этой главе мы кратко рассмотрели некоторые основные понятия
программного обеспечения ЭВМ. Важнейшие темы включали
двоичную систему счисления, вычислительные форматы данных,
такие, как двоичное представление, представление с плавающей
точкой, двоичные коды, включающие BCD, EBCDIC и ASGII-8,
шестнадцатерично-двоичное и восьмерично-двоичное
преобразования, язык ассемблера, компиляторы, исходные, объектные и
загрузочные модули.
32 Глава 2
УПРАЖНЕНИЯ
1. Перевести следующие двоичные числа в десятичные:
а) 110111 б) 1000010
в) 11111111 г) 10101001
д) 1111000011 е) 11.01
ж) 1.1001 з) 1000.0001
2 • Перевести двоичные числа из упражнения 1 в шестнадцате-
ричные.
3 • Перевести двоичные числа из упражнения 1 в восьмеричные.
4. Перевести следующие шестнадцатеричные числа в двоичные:
a) F0 б) 1С
в) 1111 г) 777
д) 15 е) FACE
5. Перевести следующие восьмеричные числа в двоичные:
а) 70 б) 33
в) 1111 г) 777
д) 15 е) 6543
6. Запишите свое имя, пользуясь шестибитовым кодом BCD.
Запишите его в коде EBCDIC; в коде ASCII-8.
7. Запишите две цифры своего возраста в коде EBCDIC —
результат будет содержать 16 битов. Рассматривая полученную
строку двоичных цифр как чисто двоичное число, преобразуйте
его в десятичную систему. Объясните (очевидно) ошибочный
ответ. Что бы вам следовало проделать для получения правильного
значения возраста в чисто двоичном представлении?
8 • В качестве продолжения упражнения 7 объясните разницу
между «кодированным» (наглядным) и числовым представлением
данных в ЭВМ. Чем объясняется необходимость обоих типов
представлений?
9. Объясните разницу между исходным, объектным и
загрузочным модулями. Как образуется каждый из этих модулей?
10 • Что такое слово? Что означает термин «ЭВМ с
фиксированной длиной слова»? Как связаны между собой идеи ЭВМ с
фиксированной длиной слова и операцией вычитания с помощью
дополнения?
Глава 3
АППАРАТНЫЕ СРЕДСТВА
Введение
В этой главе мы рассмотрим основные компоненты аппаратных
средств вычислительной системы — центральный процессор ЭВМ,
память, регистры, устройства для обработки единичных записей,
контроллеры, каналы и различные устройства ввода и вывода.
Кратко мы рассмотрим также некоторые важные понятия теле-
процессирования.
Центральный процессор
Центральный процессор, часто называемый просто CPU, является
сердцем вычислительной системы, хотя, быть может, была бы
удачней аналогия с мозгом. Именно здесь фактически
реализуются арифметические, логические и управляющие функции ЭВМ, и
именно этим устройством ЭВМ «оправдывает свое существование».
CPU разделяется на два компонента; один из них реализует
арифметические и логические функции, а другой —
управляющие.
Центральный процессор состоит из множества чрезвычайно
сложных (и очень дорогих) электронных схем, детальный анализ
которых выходит далеко за рамки обсуждаемой темы.
Электронные цепи CPU в основном составлены из вентильных элементов
и переключателей, которые реализуют функции двоичной логики
булевой алгебры. Эта система логики построена на базе трех
элементарных устройств: вентильного устройства И (рис. 3.1),
вентильного устройства ИЛИ (рис. 3.2) и вентильного устройства
НЕ (рис. 3.3).
С помощью различных сочетаний вышеназванных элементов
могут быть реализованы операции сложения, вычитания,
умножения и деления, а также ряд логических функций. Не вспомните
ли вы, например, то, что говорилось в предыдущей главе относи-
ельно использования дополнений и вычитаний. В двоичной
форме дополнение может быть получено изменением каждого бита
исходного числа — все единицы становятся нулями и все нули
становятся единицами —и прибавлением единицы. Простейший
2—821
34 Глава 3
способ изменить значение каждого бита данного числа на
обратное состоит в «пропускании» этого числа через вентильный
элемент НЕ. Представьте себе шестнадцатизначное двоичное число,
проходящее последовательно, бит за битом, через вентильный
элемент НЕ и формирующее на выходе свое отрицание, — и вы
получите общее представление о том, что в действительности здесь
происходит.
Входы
А В
0 0
0 1
1 0
1 1
Выход
С
0
0
0
1
в
J
Рис. 3.1. Логика элемента И.
Входы
А В
0 0
0 1
1 0
1 1
Выход
С
0
1
1
1
Рис. 3.2. Логика элемента ИЛИ.
Иод
А
О
1
Выход
С
1
О
Рис. 3.3. Логика элемента НЕ.
-► С
Временная упорядоченность имеет определяющее значение
в этой операции. Каким образом, например, можно рассчитывать
на распознавание на входе логического элемента НЕ нулевого
бита, если чуть ли не по определению нулевому биту отвечает
отсутствие электрического тока? Если отдельные биты
посылаются в электрическую цепь с абсолютно равными промежутками —
скажем, по одному биту за одну наносекунду, — то элемент НЕ
«понимает», что отсутствие сигнала в данную наносекунду
означает посылку нулевого бита. Создание электрических цепей с
учетом такой синхронизации требует той высокой степени
технической оснащенности, которая характеризует область
проектирования ЭВМ.
Аппаратные средства
35
Единицы
Перенос
Рис. 3.4. Схема двухбитового сумматора.
Более сложные комбинации этих основных логических
элементов позволяют выполнять аппаратно и более сложные
функции. На рис. 3.4 показан пример двухбитового сумматора.
Хранилище, или память
Поскольку ЭВМ является устройством с бинарными состояниями
элементов, то целесообразно хранить данные и команды в двоичной
форме; лучшим из известных способов достижения этой цели
является использование памяти на магнитных сердечниках (рис. 3.5),
составленной из' множества крошечных ферритовых колец,
намагниченность которых может принимать одно из двух возможных
состояний — по часовой стрелке (что может быть сопоставлено
единице) и против часовой стрелки (что мы можем рассматривать
Рис. 3.5. Память на магнитных сердечниках.
2*
36 Глава 3
эквивалентом нуля). Применение таких сердечников и послужило
причиной того, что основная память ЭВМ часто называется
памятью на сердечниках. Это название и сейчас употребляют для
обозначения основной памяти, несмотря на современные тенденции
использования более быстродействующих элементов,
основанных на полупроводниках и интегральных схемах, пленочных
и даже лазерных компонентах.
В большинстве ЭВМ не предусмотрена возможность адресации
отдельного бита — основной адресуемой единицей является
некоторый набор битов. (В машинах фирмы IBM, например,
восьмибитовый байт содержит один символ в коде EBCDIC.) Такие
наборы битов схемно реализуются как единое целое, и это следует
учитывать при хранении данных в памяти; в каждый момент
времени CPU может оперировать не менее, чем с целым набором.
байт О
байт 7
Полу слабо 0
байт 2
байт J
Полуслово 1
Полное слабо 0
байт 4
байт 5
Полуслабо Z
Байт 6
байт 7
Полуслобо 3
Полное слабо 1
Двойное слабо 0
Рис. 3.6. Электронные схемные связи между байтами, полусловами,
словами и двойными словами.
Например, для выполнения логических операций И и ИЛИ,
запрограммированных на языке ассемблера, для изменения даже
одного бита необходима обработка целого байта.
Во многих ЭВМ обрабатываемые данные могут быть (а часто
и должны быть) распределены среди различных подобным
образом адресуемых элементов. Хорошие тому примеры можно найти
в вычислительных Системах IBM/360 и IBM/370. В машинах
фирмы IBM двоичные данные могут занимать полуслово,
состоящее из двух байтов (16 битов), полное слово из четырех байтов или
двойное слово из восьми байтов. Нулевой и первый байты (первые
два байта основной памяти) схемно объединяются таким образом,
чтобы обеспечить возможность их одновременной обработки
(рис. 3.6). Байты 2 и 3,4 и 5 и каждая последующая пара байтов,
начинающаяся с четного адреса, точно так же схемно
объединяются, образуя полуслова; байты первый и второй и другие пары
байтов, начинающиеся нечетным номером, не находятся в такой
связи и не могут обрабатываться совместно. Байты 0, 1, 2 и 3,
а также всякая последовательность из четырех байтов,
начинающаяся с четного номера, кратного четырем, составляют полные
слова, содержимое которых может использоваться в качестве
Аппаратные средства 37
операндов определенных команд, обрабатываемых CPU как
единое целое; байты 1, 2 , 3 и 4 не обладают таким свойством.
Аналогично, группируя последовательности из восьми байтов,
начинающихся с адреса, кратного восьми, образуют двойные слова,
содержимое которых благодаря имеющимся электронным связям
может при определенных условиях обрабатываться как единое
целое. Эти простые схемные связи между отдельными байтами
объясняют необходимость в выравнивании границ большей части
обрабатываемых данных при их записи в память машин фирмы
IBM.
Регистры
Данные хранятся в памяти ЭВМ; обрабатываются же они в
центральном процессоре (CPU); в связи с этим существенное
значение имеет способ передачи данных между CPU и памятью. В
большинстве ЭВМ данная функция реализуется с помощью регистров.
В вычислительных системах фирмы IBM, описанных выше,
программист, а точнее его программа, размещенная в памяти ЭВМ,
имеет доступ к 16 регистрам общего назначения, каждый из
которых состоит из 32 битов, или одного полного слова, и к 4
регистрам для обработки данных с плавающей точкой. Данные
пересылаются в регистры с помощью той или иной команды типа LOAD
и обрабатываются CPU, управляемым командами арифметических
операций. Результат обработки отсылается CPU в один из
регистров, и программист может его сохранить, пользуясь одной из
команд типа STORE. Регистры, таким образом, играют роль
промежуточного звена, связывающего два важнейших блока ЭВМ.
Обратите внимание на соотношение между размерами регистра
и длиной слова; слово составляет такой объем данных, который
можно разместить в одном регистре. Это положение справедливо
для ЭВМ большинства фирм-изготовителей, а не только фирмы
IBM. Физически регистры могут размещаться в основной памяти,
в CPU или в «ничейной зоне» между этими двумя блоками — все
зависит как от изготовителя, так и от мощности ЭВМ, — однако
основная их функция остается той же. Кроме упомянутой связи
с размером регистра, во многих ЭВМ слово является основным
адресуемым элементом памяти.
Устройства для обработки единичных записей
С перфокартами для обработки данных знакомы почти все. В наше
время стандартная карта с восьмьюдесятью колонками является
наилучшим из известных носителей входных данных для ЭВМ и
используется при решении самых различных прикладных задач.
Каждая из колонок может содержать один символ данных; отдель-
HSKr*JF>3
88 Глава 3
ные символы представляются комбинациями нескольких (в
отсутствие символа — ни одного) отверстий в данной колонке
(рио. 3.7). Колонки могут объединяться в группы, образуя поля;
поле —не что иное, как группа символов, составляющих
замкнутый элемент информации. Отдельная карта обычно содержит
все данные, необходимые для исполнения одного повторяемого
действия программы; каждая карта называется записью. (Тот
факт, что одна карта содержит одну запись, объясняет
происхождение термина «единичная запись».) Набор записей, например
полный рабочий комплект перфокарт, составляющих программу
начисления жалованья, образует файл.
Во время считывания карт анализируются перфорационные
отверстия. Для этой цели используются различные методы. В
одном из часто применяемых способов карта обертывает
металлический цилиндр и по ней проскальзывает ряд металлических
щеток; если отверстие отсутствует, то карта служит изолятором,
размыкающим электрическую цепь; при наличии отверстия
металлическая щетка оказывается в контакте с цилиндром и цепь
замыкается. В более современных установках карта размещается
между фотоэлементами и освещается; свет, проходя через
отверстия, попадает в ячейку фотоэлемента, соответствующего
определенной позиции отверстия на карте.
Карты могут не только считываться
электронно-механическими устройствами; многие годы использование перфокарт в качестве
носителей выходных данных было общепринятым.
Выражаясь популярно, можно сказать, что печатающее
устройство выполняет функцию, обратную функции устройства
чтения перфокарт. В печатающих устройствах электрические
импульсы, идущие от ЭВМ, преобразуются в механические удары
отдельных печатающих молоточков. При этом могут
использоваться разнообразные механизмы, в том числе цепные и рейковые
печатающие элементы, а также ряд более современных устройств
неконтактного типа, однако их назначение остается все тем же —
представить выходные данные ЭВМ в «читабельной» для
человека форме.
Другие широко используемые устройства для обработки
единичных записей (например, MICR, OCR и «Марк Сенс»)
приспособлены для ряда более специальных целей. MIGR, что в переводе
на русский язык означает «Распознавание символов, записанных
магнитными чернилами», используется в области банковских
операций. Отпечатанные магнитными чернилами чеки содержат
записи банковского регистрационного номера и номера счета,
при этом сумма чека в результате кассовой операции добавляется
к сумме счета. Символы, записанные магнитными чернилами,
распознаются электронно-механическим устройством по различию
в характере магнитной напряженности. OCR, или оптическое
0123456789
AECBi
. . ...■>_ . . _ _ . _
IFGKIJKLMNCPQRSTUVWtfrZ Ufc. •-ЗЭ/^аЭ' + чСЮ^иО.Л- :8=
lllllllll
III
Hill
lllllllll
060
111
222
333
444
555
866
177
888
999
i i j
looooooooooooooooooooooooooooooo
5 I J I I II II 12 И 14 IS К I» II 19 ?| 21 27 21 24 2S X 2» 21 71 31 Л 12 3) И JS К
111 ii ii ii 111 ni ii i ii 11 ig 111 it 11
2| 2 2 2 2 2 2 2 2 2 2 2 2 2| 2 2 2 2 2 2 2 2| 2 2 2 2 2 2
3 3| 3 3 3 3 3 3 3 3 3 3 3 3 3| 3 3 3 3 3 3 3 3| 3 3 3 3 3
4 4 4| 4 4 4 4 4 4 4 4 4 4 4 4 4| 4 4 4 4 4 4 4 4| 4 4 4 4
5 5 5 5| 5 5 5 5 5 5 5 5 5 5 5 5 5f 5 5 5 5 5 5 5 5| 5 5 5
6 6 6 6 6f 6 6 6 6 6 6 6 6 6 6 6 6 6f 6 6 6 6 6 6 6 6f 6 6
7 7 7 7 7 7| 7 7 7 7 7 7 7 7 7 7 7 7 7| 7 7 7 7 7 7 7 7| 7
8 8 8 8 8 8 8| 8 8 8 8 8 8 8 8 8 8 8 8 8| 8 8 8 8 8 8 8 8|
9 9 S 9 9 9 9 9 9| 9 9 9 9 9 9 9 9 9 9 9 9 9ff 9 9 9 S 9 9 9 9
i I 1 I ! I111 1111 VI IS К tl II TS II 21 22 П 21 П 21 2171 21 31 31 12 3) 34 tt 21
•tfvoncrt S06I
41
0 0 0 0 0 0|||0 0 0 0 0 0 0 0 0 0 l|||0 0 0 0 0 0 0
4! SI И J7 S3 S4 И И U SI il И II 12 f'l M (S К 17 M II 71 V 7213 * И И 77 11 7J И
111111| 11111111111111111111111
2 2 2 2 2 2 2 2 2 2 2 2 2 2| 2 2 2 2| 2 2 2 2| 2 2 2 2 2
3| 3 3| 3 3| 3| 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
4 4| 4 4| 4 4| 4|| 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5 5 5 5| 5 5| 5 5 5 5| 5| 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6 6 6 6| 6 6 6 6| 6 6| 6 6 6 6 6| 6 6 6
77777 7777777777 777777 777 77)777
'II 'II4IIIIIIIIIIIIIIIIIII' I'
9 990 909 99 9 99 9 999 9 9 99 99999 999 9 9
I 31 33 41 41 42 43 44 4S 4< 41 41 4) SI S1 52 S3 S4 3S S& Я 51 » 10 |1 U 13 И И « I? » И 71 11 12 7314 73 7( 77 II 7! И
•NIIIIII • i
37 31 И 41 41 42 43 44 45 « 47
11111111111
2| 2 2 2 2 2 2
3 3| 3 3 3 3 3
4 4 4| 4 4 4 4
5 5 5 5| 5 5 5
6 6 6 6 6| 6 6
7 7 7 7 7 7| 7
8 8 8 8 8 8 8|
9 9 3 9 9 9 9|
Рис. 3.7. Перфокарта с данными, подлежащими обработке.
40 Глава 3
устройство для распознавания символов, является прекрасным
средством передачи данных в любых приложениях, в которых
ограниченные объемы рукописного или машинописного текста
должны считываться вычислительной машиной; основной
механизм чтения таких данных использует различие в отражательной
способности белых (бумага) и черных (линии) участков
поверхности. Устройство «Марк Сенс» представляет собой упрощенный
вариант той же самой идеи, при этом дело сводится к расстановке
меток на листе бумаги в соответствии с предписанными им
значениями; хорошим примером могут служить бланки ответов,
используемые в тестах.
Контроллеры
Основная проблема использования описанных выше устройств для
обработки единичных записей связана с быстродействием; скорость
их обработки очень низка в сравнении со скоростью выполнения
внутренних процессов в ЭВМ. Другая трудность связана с самой
формой представления данных; эта трудность не так очевидна,
однако уделим ей чуть больше внимания. ЭВМ приспособлена
для приема и передачи данных, представленных в некоторой
кодированной форме —EBCDIC и ASCII, —но устройства чтения
перфокарт считывают комбинации отверстий, которые хотя и
являются по своей природе двоичными (наличие отверстия или его
отсутствие), представляются совершенно иным кодом. Цепной
печатающий элемент принтера не является устройством,
работающим в коде EBCDIC. Магнитные пики и провалы,
анализируемые читающим устройством типа MIGR, шифруются не
внутренним кодом ЭВМ; иначе кодируется и интенсивность отраженного
света в устройствах типа OCR и «Марк Сенс».
Обе вышеназванные проблемы решаются с помощью
контроллеров — электронных систем, связывающих входные или
выходные устройства с ЭВМ. Контроллер выполняет две важные
функции: обеспечивает буферизацию и стандартный интерфейс.
Буферизация в контроллере осуществляется следующим образом: по мере
чтения записей медленным устройством ввода контроллер
размещает каждый символ в буфере, пока не будет укомплектована
полная запись, которая затем передается в ЭВМ; аналогично
выходная запись может быть принята из ЭВМ с большой скоростью
и размещена в буфере, с тем чтобы в последующем переслать ее
со значительно меньшей скоростью в периферийные устройства
вывода данных. Таким образом, ЭВМ оказывается по крайней
мере частично изолированной от слишком (в сравнении с ней)
медлительных устройств чтения карт, принтеров и других
устройств ввода —вывода.
Аппаратные средства 41
Словами «стандартный интерфейс» именуется другая функция
контроллеров — автоматическое прямое и обратное
преобразования при записи в кодах EBCDIC, ASCII или в каком-нибудь
другом двоичном коде. Контроллер устройства чтения перфокарт
автоматически преобразует код перфорированной карты во
внутренний код ЭВМ; контроллер печатающего устройства
преобразует коды ЭВМ в импульсы, вызывающие перемещение
печатающих молоточков; таким образом, ЭВМ всегда имеет дело с одним
и тем же кодом. Все переходы от одного кода к другому
происходят в контроллере.
Каналы
Контроллер собственными средствами не может полностью
разрешить проблему несоответствия быстродействия ЭВМ и устройств
ввода—вывода; дополнительным средством по крайней мере
частичного решения этой проблемы служит другое устройство —
канал. Являясь промежуточным устройством между контроллером
и собственно ЭВМ, канал выполняет функции учета и пересылки
символов от одного из этих компонентов к другому. Функция
подсчета символов на первый взгляд кажется довольно
тривиальной, однако в ЭВМ, не имеющих каналов, она должна выполняться
центральным процессором. Реально пересылка данных включает
функции приращения адреса основной памяти и проверки
граничных значений набора адресов, с тем чтобы исключить
случайное разрушение защищаемых зон памяти. Фактически канал
является небольшой ЭВМ, выполняющей ряд логических функций,
и позволяющей, таким образом, занять центральный процессор
другими операциями на протяжении циклов ввода или вывода.
В наше время применяются в основном два типа каналов.
Первый из них, мультиплексор, предназначается для работы
с низкоскоростными устройствами обработки единичных записей,
описанными выше. В мультиплексоре перекрываются во времени
операции, выполняемые рядом физических устройств ввода —
вывода; мультиплексор принимает символ от контроллера
устройства чтения карт и затем посылает символ контроллеру
печатающего устройства, тогда как в это же время устройство чтения
карт заканчивает считывание очередного символа.
С другой стороны, селекторный канал предназначается для
использования с быстродействующими устройствами ввода-
вывода — магнитными лентами, дисками и барабанами,
описываемыми ниже. Селекторные каналы работают в импульсном
режиме, посылая или принимая в импульсе непрерывный поток
данных от одного устройства. На рис. 3.8 показана схема
типичной вычислительной системы, иллюстрирующая относительное
расположение каналов и контроллеров.
42
Глава 3
/Устройство
чтения
карт.
Печатающее
устройство
Контроллер
Контроллер
•
—|
Мультиплексный
канал
Контроллер
Селекторный
канал
Контроллер
35М
Селекторный
канал
Контроллер
Рмок
Диск
Рис. 3.8. Схема типичной вычислительной системы, иллюстрирующая
относительное расположение каналов и контроллеров.
Магнитная лента
Магнитная лента является быстродействующим промежуточным
носителем входных и выходных данных; скорость обмена данными
с помощью магнитных лент может достигать 60 тыс. и более
символов в секунду, и она значительно превосходит
быстродействие устройств чтения карт (однако сравнительно низка для со-
Аппаратные средства
43
временных ЭВМ, выполняющих около миллиона команд в
секунду). Лента является носителем последовательного типа, т. е., для
того чтобы прочитать запись № 1000, необходимо по крайней
мере продвинуть ленту на длину предыдущих 999 записей.
Сочетая быстродействие, компактность и возможность многократного
использования, магнитная лента является превосходным средством
хранения данных при решении прикладных задач, связанных с
обновлением файлов.
2 3
I
I
I I
I I
I I
I I
I I I
I
f<— бит контроля по четности
>6иты зоны
I
> Числовые биты
Рис. 3.9. Хранение данных на ленте. Девятидорожечный четный код
EBCDIC.
Данные на ленте хранятся в двоичной форме и размещаются
по ширине ленты (рис. 3.9). Для семидорожечной ленты обычно
используется код BCD, представляющий каждый символ шестью
битами, в то время как для девятидорожечной ленты применяется
либо восьмибитовый код EBCDIC, либо восьмибитовый код ASCII.
Вы, может быть, обратили внимание на то, что для
девятидорожечной ленты используется восьмибитовый код, а для
семидорожечной — шестибитовый. Зачем нужен этот дополнительный
бит? Дополнительный бит является битом контроля по четности,
позволяющим повысить точность работы лентопротяжного
механизма. Четный код означает, что каждый символ должен
кодироваться четным числом двоичных единиц (рис. 3.9). Таким
образом, бит контроля по четности для числа один (11110001)2 в коде
EBCDIC равен единице, что в сумме дает шесть двоичных единиц
в записи кода, в то время как бит контроля по четности для числа
три (11110011)2 в коде EBCDIC равен нулю. Бит контроля по
четности проверяется контроллером лентопротяжного механизма
непосредственно перед записью или сразу после чтения. В случае
ошибки предпринимаются корректирующие действия
—повторное чтение или останов операции с передачей соответствующего
сообщения, как оператору, так и ЭВМ. Нечетный код (коды
каждого символа должны содержать нечетное количество двоичных
единиц) является альтернативой четного кода.
44 Глава 3
В отличие от записи на перфокартах запись на ленте не имеет
естественных ограничений в размере. Для разграничения
отдельных записей на ленте между ними размещаются специальные
промежутки (IRG), фактически представляющие собой
неиспользуемую часть ленты (рис. 3.10). Лентопротяжное устройство
выполняет операцию чтения данных, передвигая ленту от одного
промежутка до другого.
R1
Шж
S2
Шж
R3
жщ
R4
ЖЩ
Ж
R5
ЖЩ
Рис. 3.10. Промежутки между записями (IRG).
Размер этого промежутка определяется рядом физических
факторов. Данные на ленте упакованы по 800, 1600 или больше
символов на дюйм, при этом с большой точностью выдерживаются
определенные расстояния между записями символов. В читающем
устройстве предусматривается, что лента движется относительно
головки чтения — записи с постоянной скоростью, поэтому
временная упорядоченность является определяющим фактором.
Никакая масса не может быть мгновенно переведена из состояния
покоя в состояние движения с постоянной скоростью;
промежутки между записями занимают пространство, достаточное для
разгона покоящейся ленты до заданной скорости. Промежуток по
другую сторону записи дает возможность лентопротяжному
механизму остановить ленту между записями.
Промежутки между записями решают одни проблемы и
порождают другие. Рассмотрим, например, промежуток шириной 0,6
дюйма, довольно часто используемый на практике. Образ
одной карты при плотности записи 800 символов на дюйм
займет на ленте расстояние 0,1 дюйма. В этом случае каждая
запись в 0,1 дюйма сопровождалась бы 0,6 дюймами
неиспользованной длины ленты. Это эквивалентно включению шести
пустых карт на каждую содержательную карту исходной колоды,
что означает не слишком эффективное использование ленты. Для
повышения эффективности использования ленты данные можно
объединять в блоки (рис. 3.11), размещая несколько логических
записей в зоне одной физической записи. Поскольку в
лентопротяжном механизме предусматривается чтение от одного проме-
?
R1
RZ
R3
R4
R5
щщ
16
R7
R8
R9
RW
Ж
Рис. 3.11. Блокирование записей.
Аппаратные средства 45
жутка между записями , IRG, (или промежутка между блоками —
IBG) до другого, то несколько логических записей будут
пересылаться в ЭВМ или обратно за одну операцию записи или чтения.
Более высокая эффективность использования ленты и
повышенная скорость ввода или вывода (меньше разгонов и остановов)
с лихвой возмещают потери на дополнительных операциях по
блокированию и деблокированию данных в ЭВМ.
Диск
Во многих применениях одним существенным недостатком ленты
оказывается последовательный характер обработки
записываемых или считывемых данных; для того чтобы прочитать запись
№ 1000, необходимо сначала прочитать или по крайней мере
прогнать предшествующие 999. Представим себе, что лента
разрезана на ряд полос, каждая из которых содержит 100 записей. Если
бы потребовалась запись № 1000, и только она, то нужно было
бы просмотреть одну-единственную полосу ленты, содержащую
искомую запись.
Это соображение положено в основу дискового устройства
хранения данных (рис. 3.12). Вместо полос магнитной ленты для
хранения данных используются концентрические окружности
на поверхности диска, покрытого магнитным материалом. Для
выбора нужной дорожки, — этим словом пользуются для
обозначения концентрических окружностей, — подвижная головка
чтения — записи помещается в соответствующую позицию. Часто
для увеличения объема памяти несколько дисковых поверхностей
объединяются вместе (как показано на рис. 3.12); общая позиция
головок чтения — записи, охватывающая в данном случае десять
дорожек, называется цилиндром. (Верхняя и нижняя
поверхности обычно не используются для хранения данных из-за
возможных ошибок чтения, вызываемых загрязнением поверхности
или пылью.)
Операции чтения или записи данных на диске выполняются в
три этапа. Во-первых, головка чтения — записи должна быть
расположена над соответствующей дорожкой, на что уходит так
называемое время поиска на любые перемещения (может быть
просмотрено до нескольких сот дорожек). После того как головка
размещена в нужной позиции, может потребоваться еще
небольшое время, поскольку требуемая запись движется по кругу под
головкой чтения — записи; это время называется ротационным
запаздыванием и в самом худшем случае равно длительности
полного оборота диска. Последний этап составляет время передачи
данных, необходимое для выполнения фактического обмена
данными между диском и ЭВМ; это время существенно меньше
времени поиска и ротационного запаздывания.
46
Глава 3
Подбижная
юлобка
чтения-записи
^Цилиндр
Дорожки
Вид сверху
Рис. 3.12. Диск.
Другие виды устройств памяти прямого доступа
В магнитном барабане данные также записываются
концентрическими окружностями, называемыми дорожками, и хранятся на
внешней поверхности устройства, по форме напоминающего
цилиндрическую бочку из-под нефти. В отличие от дискового
устройства в барабане обычно имеется отдельная головка чтения —
записи для каждой дорожки, что исключает необходимость
движения головки, а следовательно, и времени поиска. Огромное
преимущество диска состоит в большой его емкости. Благодаря
быстродействию барабаны пользуются возрастающей популярностью
в современных вычислительных системах с виртуальной памятью;
к подробному анализу этой техники мы вернемся в гл. 15.
Аппаратные средства 47
Еще одно устройство прямого доступа — запоминающее
устройство на магнитных картах — в основных чертах
представляет собой попытку реализации идеи хранения данных на
магнитной ленте, разрезанной на отдельные полосы, той самой идеи,
изложением которой открывается раздел, посвященный
устройствам прямого доступа. Так как магнитные карты не нашли
широкого применения, их детальное описание здесь не приводится.
Традиционно из устройств прямого доступа чаще всего
используются диски и барабаны. В последнее время, однако,
начинает проявляться возможность конкуренции. Запоминающие
устройства на так называемых гибких дисках обладают меньшей
емкостью и быстродействием, чем стандартные дисковые
драйверы, но зато они намного дешевле и поэтому становятся все более
цопулярными в некоторых применениях, в особенности в связи с
использованием мини-ЭВМ. Еще один новый способ хранения
данных реализуется в виде набора ячеек сотовой структуры,
каждая из которых допускает прямой доступ и независимое
взаимодействие с устройством чтения — записи; это сравнительно
медленное, но очень емкое запоминающее устройство, аналогичное
известному устройству, использующему ячейки для хранения
магнитных карт. По мере снижения стоимости основной памяти
на полупроводниковых схемах некоторые из названных
запоминающих устройств действительно могут найти широкое
применение в качестве накопителей больших объемов данных; быть
может, наступит день, когда устройства хранения данных прямого
доступа фактически станут простым расширением основной
памяти ЭВМ, допускающим непосредственную взаимосвязь с CPU.
Аппаратные средства телеобработки
Любое обсуждение аппаратных средств ЭВМ будет неполным,
если не упомянуть устройств телеобработки, составляющих, по-
видимому, наиболее быстро расширяющуюся область спроса в
ассортименте систем обработки данных. Клавишный терминал —
самое распространенное устройство ввода —вывода — в основном
представляет собой электрическую пишущую машинку. Такие
терминалы обычно имеют собственный буфер — объемом чаще
всего в одну печатную строку, — который загружается при
нажатии пользователем клавиши RETURN. Поскольку в телефонах
и ЭВМ используются различные формы электрического тока,
то необходимо обеспечивать преобразование одной формы в
другую. Эта функция выполняется с помощью устройств сопряжения,
или модемов, которые размещаются на обоих концах каждой
телефонной линии. Основные компоненты телепроцессорной
установки схематически изображены на рис. 3.13. От терминала данные
передаются в устройство сопряжения и далее в телефонную сеть;
48 Глава 3
на другом конце линии данные поступают в устройство
сопряжения, проходят через контроллер и канал и наконец принимаются
ЭВМ. Передача данных на терминал осуществляется точно
также, но в обратном порядке.
Существует много различных видов контроллеров. В некоторых
из наиболее популярных разновидностей решаются все задачи по
Терминал
Устройство
сопряжения
Устройство
сопряжения
Рис. 3.13. Основные компоненты системы телеобработки.
координации параллельной работы нескольких телефонных
линий, при этом ЭВМ одинаково взаимодействует с контроллером
независимо от конструктивных особенностей и удаленности
терминала. Иногда на периферийном конце телефонной линии помещают
еще один контроллер, управляющий работой нескольких
терминалов в одной и той же линии связи. Функция удаленного
контроллера особенно важна в системах, использующих терминалы
на электронно-лучевых трубках, в которых, так же как и в
телевизорах, изображение должно постоянно восстанавливаться.
В телепроцессорных системах применяются не только
клавишные терминалы; устройства чтения перфокарт, принтеры,
лентопротяжные устройства, диски и даже другие ЭВМ могут
передавать данные по линиям связи. Одним из популярных применений
является ввод заданий с удаленного терминала; специальный
терминал с устройством чтения перфокарт и печатающим
устройством размещается на удаленном конце линии связи,
передавая в ЭВМ программы и данные и принимая и распечатывая ре-
Аппаратные средства 49
зультаты вычислений. Некоторые терминалы, часто называемые
«разумными», обладают определенными логическими
возможностями, организуя исходные данные и выполняя распечатку
перфокарт без помощи ЭВМ; некоторые из них допускают даже
редактирование входных данных, программно управляемое
исправление очевидных ошибок в наборе данных перед их пересылкой
в центральную ЭВМ. По мере того как такого рода терминалы
берут на себя все больше и больше вычислительных функций,
они становятся очень похожими на мини-ЭВМ.
Наиболее широко используемым средством связи являются
стандартные телефонные линии. Передача данных по телефону,
в особенности на большие расстояния, стоит дорого; эта стоимость
возрастает еще значительнее из-за продолжительности сеансов
связи, которые в типичных операциях передачи данных могут
достигать часа и более. Многие фирмы пытаются снизить эти
расходы, прибегая к аренде частных линий. Такие линии
характеризуются широким диапазоном возможностей передачи
информации. На звуковой частоте можно передавать приблизительно
2400 бит в 1 с. Объединение двух, трех или четырех линий
звуковой частоты дает соответственно 4800, 7200 и 9600 бод.
Специальные широкополосные кабели обепечивают еще более высокие
скорости передачи данных. Термин «бод» первоначально
произошел от имени Жана Бодб, создавшего пятибитовый код для
передачи данных; он означает «бит в секунду». В области обработки
данных растущим спросом пользуются услуги фирм, владеющих
общегосударственными или региональными сетями
широкополосных линий и сдающих в аренду эти линии многим пользователям,
распределяя между ними затраты на передачу данных. Другая
возможность организации линий связи заключается в передаче
данных в микроволновом диапазоне с использованием, быть
может, даже спутников связи.
Дабы исключить ошибочные представления, заметим, что не
во всех применениях терминалы обязательно должны быть
удалены от ЭВМ; терминал может быть связан с контроллером,
который в свою очередь связывается с каналом, последний — с ЭВМ.
Такие местные сети очень распространены.
Краткие выводы
В этой главе мы рассмотрели представления об аппаратных
средствах, включающих: центральный процессор, память на
сердечниках, регистры, устройства для единичных записей,
контроллеры, каналы, магнитные ленты, диски, барабаны, аппаратные
средства телепроцессирования, такие, как терминалы, устройства
сопряжения и средства телекоммуникации.
50
Глава 3
УПРАЖНЕНИЯ
1. Соотнесите описание устройства памяти на магнитных
сердечниках или ее более современные реализации с двоичными
кодами и вычислительными форматами данных, описанными в гл.2.
2. Рассмотрите еще раз рис. 3.4 и покажите, каким образом все
возможные способы сложения в двоичной системе (0+0, 0+1,
1+0, 1 + 1) могут осуществляться этой простой схемой. Пусть А
представляет собой первый из участвующих в сложении бит и В —
второй; проследите преобразование этих битов в логических
элементах схемы.
3. Соотнесите описание устройства памяти на магнитных
сердечниках или ее более современные реализации с логическими
операциями И/ИЛИ/НЕ центрального процессора.
4. Обсудите функции контроллера.
5. Обсудите функции канала.
6. Идеальное устройство хранения данных должно обладать
чрезвычайно большим быстродействием, неограниченной емкостью,
быть компактным и дешевым. Поскольку ни один носитель не
удовлетворяет всем этим критериям, проектировщик систем часто
сталкивается с необходимостью принимать компромиссные
решения, жертвуя быстродействием в пользу емкости или более низкой
стоимости. Ранжируйте по этим четырем критериям основную
память, память на дисках, барабанах, магнитной ленте и
перфокартах. Если возможно, приведите действительные цифры,
касающиеся быстродействия, емкости, физического размера и
стоимости каждой из них.
7. Сравните скорость телепроцессорной линии, передающей
данные со скоростью 2400 бод, с быстродействием устройства
чтения карт и принтера. Предположите, что используется
восьмибитовый код. Каким может быть быстродействие устройства
чтения карт или принтера (предполагая, что в строке содержится
120 символов) при скорости потока информации в 2400 бод?
В 9600 бод?
Глава 4
УПРАВЛЕНИЕ ДАННЫМИ И СТРУКТУРЫ ФАЙЛОВ
Введение
В этой главе обсуждается ряд важных понятий и определений,
касающихся данных, управления данными и организации файлов
данных; таким образом, завершается рассмотрение трех
важнейших видов ресурсов, используемых любой системой обработки
данных: математического обеспечения, аппаратных средств и
данных.
Исходные определения. Поле, запись и файл
В гл. 3 мы уже касались вопросов группирования символов в поля,
полей в записи и записей в файлы; рассмотрим эти понятия еще
раз.
Поле представляет собой не что иное, как порцию данных —
имя, адрес, отработанные часы, короче, отдельную законченную
по смыслу порцию данных. Оно характеризуется произвольной
длиной (например, односимвольный классификатор задания и
двенадцатисимвольная фамилия) и может быть представлено
символами в коде EBCDIC или ASCII, двоичным числом,
занимающим слово или полуслово, числом с плавающей точкой или
в упакованном десятичном формате.
Записью является набор полей, содержащий множестЕО
данных, необходимых для выполнения одной итерации или цикла
программы. Логика программы обычно строится на чтении одной
записи, ее обработке и пересылке в запоминающее устройство.
Для таких носителей, как перфокарта, существуют физические
ограничения длины одной записи, тогда как для магнитной ленты
или диска подобные ограничения отсутствуют.
Файл — это набор соотносимых, подобных записей. Если имя
служит примером поля в записи карты платежной ведомости, то
файл в этом случае состоит из всех карт платежной ведомости,
по Одной на каждого служащего. Инвентаризационная запись,
очевидно, не имеет отношения к программе начисленкя заработной
платы и, следовательно, не может быть частью такого файла.
t
52 Глава 4
Форматы записей
Наше обсуждение мы начнем с форматов записей на перфокартах.
Хотя возможны записи, размещаемые и на нескольких
перфокартах, но это является скорее исключением, чем правилом.
Записи на перфокартах имеют одну и ту же длину, равную обычно
восьмидесяти (или девяноста шести на более современных и
меньшего размера перфокартах) символам. Для описания таких
записей используются «слова фиксированной длины».
Промежуток Данные Промежуток Данные Промежуток Данные Промежуток Данные Промежуток ,
Рис. 4.1. Данные фиксированной длины на ленте
С ключами
□ □ I I ПП □ CZ
Счетчик Ключ Данные Счетчик Ключ Данные
без ключей
Счетчик Данные Счетчик Данные Счетчик Данные
Рис. 4.2. Данные фиксированной длины на диске.
Магнитная лента и устройства прямого доступа не имеют
ограничений на длину записей, тем не менее они могут хранить записи
фиксированной длины, содержащие одно и то же число символов.
В действительности, по-видимому, правильно сказать, что
большинство записей характеризуется фиксированной длиной.
Частично это объясняется особенностями программирования —
с подобными записями легче работать. Отдельные записи
фиксированной длины на магнитной ленте разделяются специальными
промежутками (рис. 4.1). Записи на диске или любом другом
аналогичном устройстве прямого доступа также отделены друг
от друга промежутками; для облегчения прямого доступа с
каждой записью могут быть связаны поля счетчика ив некоторых
случаях поля ключей (рис. 4.2).
Для экономии пространства на диске или ленте данные часто
блокируются; блокирование к тому же повышает эффективность
программы, поскольку сокращается количество физических
операций чтения и записи (поиска на диске, запусков и остановов
ленты), а следовательно, и время, расходуемое на чтение и запись
Управление данными и структуры файлов
53
данных. Блокирование состоит в объединении нескольких
логических записей в одну физическую запись большой длины (рис. 4.3).
Следует отчетливо представлять себе различие между логическими
и физическими записями; физическая запись представляет собой
целый блок, тогда как логическая запись составлена из данных,
необходимых для выполнения одного цикла программы.
Большинство устройств ввода — вывода приспособлено к операциям
чг
Промежу/пок
Данные
Промежуток
Данные
Промежуток
Рис. 4.3. Блокированные данные фиксированной длины на ленте.
Промежуток Данные Промежуток Данные Промежуток Данные Промежуток Данные
Рис. 4.4. Неблокированные данные переменной длины.
Счетчик
Ключ
Данные
Рис. 4.5. Блокированные данные переменной длины на диске.
над совокупностью данных, заключенных между двумя
промежутками; таким образом, устройства ввода — вывода в ЭВМ
обмениваются физическими записями. Выдаче данных предшествует
формирование в основной памяти блоков, объединяющих ряд
логических записей. После ввода физический блок подлежит
операции деблокирования на отдельные логические записи.
Не все данные имеют фиксированную длину; во многих
применениях полезны данные переменной длины (рис. 4.4). Для
обработки данных переменной длины длина записи обычно
включается в ее состав (поле RL на рис. 4.4). Данные переменной
длины могут быть блокированными (рис. 4.5) или неблокированными
(рис. 4.4). Хорошим примером записи переменной длины может
служить зачетная книжка студента —почти пустая в начале
обучения и довольно объемистая на последнем курсе. Кстати, поле
BL на рис. 4.5 соответствует длине блока — информация
необходимая для метода доступа.
,_
54
Глава 4
Блокирование данных создает некоторые трудности для
прямого доступа по ключам. Рассмотрим, например, блок,
показанный на рис. 4.6; следует ли считать ключом блока ключ первой»
последней или одной из промежуточных записей? Обычно
используется ключ последней записи, и тогда свидетельством того, что
найден блок, содержащий искомую запись, является значение
опрашиваемого ключа, меньшее значения ключа блока.
002 i
т i
007 \
Счетчик Ключ Данные
Рис. 4.6. Блокированные данные фиксированной длины о ключами.
В большинстве ЭВМ разрешен еще один формат записей —
неопределенный. Уже из самого названия видно, что
неопределенные записи не связываются с каким-либо фиксированным
форматом. Основная причина существования записей
неопределенного формата объясняется необходимостью работы с неизвестной
магнитной лентой или пакетом дисков. Поскольку содержание
ленты или диска неизвестно, программист не может задать
системе информацию о формате записи; однако пользуясь
неопределенным форматом, он по крайней мере может прочитать
содержимое ленты в оперативную память ЭВМ и распечатать на принтере.
Последовательные файлы
Перфокарты читаются последовательно одна за другой. Таким
образом, перфокарточный файл является последовательным
файлом; данные читаются в определенной последовательности,
которая не допускает каких-либо отклонений.
Иа ленте отдельные записи хранятся в форме непрерывных,
без вставок, цепочек, что определяет порядок обработки данных.
Так же как и карты, магнитная лента по самой своей природе
является носителем последовательного типа с фиксированным
порядком чтения (или записи) данных.
Одно из наиболее распространенных применений ЭВМ состоит
в ведении записей. Довольно наглядным примером может
служить программа обновления основного файла учета чековых
операций, эксплуатируемая ежедневно большинством банков.
Сначала чеки и депозиты упорядочиваются (в соответствии с
номерами счетов) на магнитной ленте, далее содержимое этой ленты,
называемой лентой «текущих операций», обрабатывается совместно
с содержимым основного файла, который также упорядочен в
соответствии с номерами счетов (рис. 4.7). В этом процессе слия-
Управление данными и структуры файлов
55
ния данных значения депозитов прибавляются к суммам счетов
прежнего состояния основного файла, а значения сумм чеков
вычитаются, давая в итоге новое состояние сумм счетов.
Выходными данными являются распечатанный отчет (быть может,
предназначенный для почтовых отправлений) и новое состояние
основного файла. Это новое состояние основного файла
используется в качестве источника входных данных при следующем запуске
Лепта с упорядоченными
операциями
/
Записи
операций
Отпечатанные
отчеты
Старое
состояние основною
файла
Мое
состояние основное*
фай/ia
Рис. 4.7. Система обновления основного файла.
программы обновления файла. Необходимо, чтобы вклады по
депозитам и расходы по чекам соответствовали счетам
вкладчиков; любой банк, в котором систематически наблюдаются хотя
бы небольшие неточности в ведении счетов, очень скоро оказался
бы на грани финансовых затруднений. Важнейшим
обстоятельством в логике функционирования такой программы обновления
файла является последовательность обработки данных, т. е. мы
имеем дело с применением последовательного типа файла.
Запоминающие устройства прямого доступа по своему
замыслу предназначаются не для операций последовательного
доступа, тем не менее как на дисках, так и на барабанах хранение и
поиск последовательных файлов может осуществляться весьма
эффективно. Ключом для понимания последовательного доступа
на устройствах прямого доступа является относительный адрес
дорожки. Рассмотрим одну поверхность диска, изображенную
56
Глава 4
'опись
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
Относительный
номер
записи
0
1
2
3
4
5
6
7
8
9
на рис. 4.8. Эта поверхность может быть разбита на десять
дорожек (некоторое упрощение для облегчения понимания) с
номерами от 0 до 9. Допустим, что у нас имеется файл, состоящий в
точности из десяти записей, по две записи на каждой дорожке,
начиная с дорожки номер 5. Наши отдельные записи
распределяются по дорожкам в соответствии со следующей таблицей:
Относительный Абсолютный
адрес дорожки адрес дорожки
О 5
0 5
1 ' 6
1 6
2 7
2 7
3 8
3 8
4 9
4 9
Относительный номер записи определяется положением записи
относительно начала файла. В нашем примере на каждой
дорожке имеется в точности две записи; таким образом, относительный
адрес дорожки может быть вычислен просто делением
относительного номера записи на 2. Так как рассматриваемый файл
начинается на дорожке с номером 5, то абсолютный адрес дорожки
может быть получен сложением относительного адреса дорожки
с адресом начала файла. Описанный выше способ адресации
аналогичен адресации с помощью базы — смещения, используемой
в основной памяти, при этом начальный адрес файла имеет смысл
базы, а относительный номер записи заменяет смещение. Такие
файлы могут обрабатываться последовательно просто путем
наращивания относительного адреса записи. Нумерация дорожек
на диске с многими поверхностями, может быть, чуть сложнее, тем
не менее понятие относительного номера записи остается
прежним.
А почему бы не выбрать просто абсолютный адрес дорожки и не
отсчитывать смещение от него? При написании программы
программист редко знает в точности, где будут храниться его данные;
подход, основанный на использовании относительного адреса
дорожки, позволяет связывать размещение данных с началом
файла, «куда бы оно ни пришлось»; при этом абсолютный адрес
начала может быть определен позже.
Управление данными и структуры файлов 57
Рис. 4.8. Относительные адреса дорожек.
Прямой доступ
В отличие от описанных выше применений процедуры
обновления файла в некоторых случаях обработка данных с
использованием ЭВМ требует скорее случайного, чем упорядоченного
доступа к одиночным записям. Допустим, что вы пытаетесь
зарезервировать билеты на самолет, летящий из Нью-Йорка в
Лос-Анджелес. В системе обслуживания авиалинии ABC необходимо
повторить свой запрос в шесть часов вечера, после того как будут
обновлены файлы резервирования мест, в то время как для
самолетов авиалинии XYZ сведения о наличии свободных мест могут
быть получены непосредственно через терминал в течение 15 с.
Какую из авиалиний вы бы предпочли? Почти наверняка вы
выберете авиалинию с оперативным обслуживанием, и это является
58 Глава 4
превосходным подтверждением экономических преимуществ
системы резервирования прямого доступа.
В силу своей линейной структуры магнитная лента не отвечает
требованиям подобных применений. Если информация,
касающаяся, скажем, рейса 526 авиалинии Тритон Эйруэйс на 26
декабря 1977 г., представлена в первой записи на ленте, то ее поиск
не займет много времени, однако эта информация могла бы
содержаться и в записи с номером 10 000. Запоминающие
устройства прямого доступа, прежде всего диски и барабаны,
предназначаются для решения задач подобного рода, позволяя
программе непосредственно обращаться к требуемой записи. Файлы
прямого доступа могут быть организованы многими различными
способами; некоторые из них описываются ниже.
Простой прямой доступ
Представим себе файл, состоящий в точности из ста записей,
пронумерованных от 00 до 99. Для простоты в нашем первом
примере предположим, что каждая запись занимает в точности одну
полную дорожку. Организуем этот файл последовательно. В
таком случае номер записи совпадает с относительным адресом
дорожки. Для поиска записи номер 55 достаточно определить
абсолютный адрес первой записи файла, прибавить к нему 55 и
расположить головку чтения над дорожкой с вычисленным таким
образом номером. В несколько более реальной ситуации, если
записи номеруются от 01 до 100, формула для вычисления
абсолютного адреса записи на диске оказывается чуть более сложной —
прежде чем складывать относительный адрес дорожки и
абсолютный адрес первой записи файла необходимо вычесть единицу.
Предположение о том, что одна запись занимает одну дорожку,
является слишком упрощенным; допустим, что каждая дорожка
содержит в точности двадцать записей файла, состоящего из
тысячи записей, пронумерованных от 0001 до 1000. В таком файле
записи с 0001 по 0020 хранятся на дорожке с относительным
номером 0, записи с 0021 по 0040 — на дорожке с относительным
номером 1, записи с 0041 по 0060 —на дорожке с относительным
номером 2 и т. д. Для определения относительного адреса
дорожки, содержащей произвольную запись, достаточно
вычесть.единицу из номера записи и разделить результат на 20 — число
записей на одной дорожке. Запись номер 0030, которая, как нам
известно, должна храниться на дорожке с относительным номером 1,.
вычисляется следующим образом:
0030 минус 1 = 0029 деленное на 20 = 1 с остатком 9.
Отыскиваемая запись имеет счетчик, равный 91), и расположена на
ЮПоле счетчика записи прямого доступа описано на рис. 4.2.
Управление данными и структуры файлов 59
дорожке с относительным номером 1 — оба числа получаются
исключительно операцией деления. Но, скажете вы, запись номер
30 является десятой записью на дорожке. Считается, что первая
запись на дорожке имеет нулевое значение счетчика, таким
образом, десятая запись снабжается номером 09. По тому же
самому правилу запись с номером 0020 —самая последняя запись
на первой дорожке (с относительным номером, равным 0) — при
аналогичных расчетах дает частное, равное нулю (относительный
номер дорожки), и остаток, равный 19 (номер записи на дорожке).
Подобным же образом запись, имеющая ключ, равный 121,
адресуется нулевым значением счетчика записи на дорожке с
относительным номером 6.
Косвенная адресация
Описанный выше метод прямого доступа отличается одним
большим неудобством — во всем диапазоне значений ключей
необходимо предусмотреть место для каждой записи. Если активно
используется большая часть записей такого диапазона, то
никаких сложностей не возникает. Однако, что, если, например, в
качестве ключа файла сотрудников использовать значение их
номера в системе социального страхования? В большой фирме,
насчитывающей до ста тысяч сотрудников, использовалась бы лишь
некоторая часть возможных 999 999 999 значений номеров
социального страхования; даже в небольшой фирме можно ожидать,
что максимальные значения этих номеров могут достигать
нескольких миллионов. Эффективное использование метода простого
прямого доступа предполагает отведение необходимого
пространства в памяти для всех возможных записей, так как лишь в этом
случае значения ключей могут быть непосредственно
преобразованы в соответствующие относительные адреса.
Существует ряд методов косвенной адресации данных в
устройствах прямого доступа. Вот некоторые из наиболее
распространенных методов:
1. Метод деления с остатком. Значение ключа делится
на большое целое число, обычно близкое к общему числу записей
в файле. Остаток от деления — некоторое случайное число —
используется в качестве относительного номера записи.
2. Цифровой анализ. Устанавливается частотное
распределение цифр от 0 до 9 в зависимости от их позиции в значении
ключа. Три или четыре позиции, отличающиеся наиболее
равномерным распределением, используются в качестве относительного
номера записи.
3. Свертывание. Цепочка цифровых знаков ключа
разбивается на две или большее число частей, значения которых
складываются, давая относительный номер записи. Шестизнач-
60 Глава 4
ный ключ, например, можно было бы разбить на два трехзначных
числа — первые три знака и последние три знака — и вычислять
сумму этих двух чисел.
4. Переход к другому основанию. Значение ключа
выражается в форме числа по основанию, отличному от десяти, и
результат используется как относительный номер записи.
Все вышеперечисленные методы предназначены для получения
ряда значений относительных адресов дорожек, равномерно
распределенных по всей доступной области памяти. Некоторые
методы рандомизации позволяют вычислить как относительный адрес
дорожки, так и номер записи, с помощью других определяются
только относительные адреса дорожек (RTA); последние
используются для определения правильного положения головок чтения —
записи над соответствующей дорожкой, поиск записи на которой
может затем выполняться по значению ключа.
Основная проблема косвенной адресации связана с
возможностью появления синонимов. Синонимы возникают в тех случаях,
когда в результате рандомизации слишком много записей
соотносятся с одним и тем же относительным адресом дорожки или
когда две или большее число записей оказываются связанными
с одним и тем же относительным номером записи. Ни один из
методов рандомизации не дает идеально однородного
распределения относительных адресов для всех записей файла. Если
некоторая дорожка оказывается заполненной или относительный адрес
данной записи занят, то рандомизированное к этому
относительному адресу следующее значение ключа не может быть
использовано и должно быть связано с некоторой дорожкой переполнения;
если в процессе поиска данные не могут быть найдены по
вычисленному относительному адресу, то необходим дополнительный
поиск и чтение содержания дорожки переполнений. Хорошо
продуманный метод рандомизации, приспособленный пользователем
к особенностям данных его прикладной задачи, может
минимизировать количество синонимов (обычно стремятся, чтобы оно не
превышало 20%); к сожалению, ни одним из известных методов
рандомизации проблема поиска адресов не решается до конца.
Список перекрестных ссылок
Список перекрестных ссылок по существу является таблицей
содержания файла. В этом подходе в процессе создания файла
параллельно формируются списки ключей и ассоциированных с ними
адресов, хранящих номера записей. Во время поиска данных
таблица просматривается до тех пор, пока не найдется
соответствующее значение ключа, чем и определяется относительный адрес
искомой записи. Данные в этом случае могут храниться в любом
порядке; если перекрестные ссылки фиксируются должным об-
Управление данными и структуры файлов
61
разом, поиск реализуется весьма просто. В такой системе не
требуется учет возможного переполнения. Среди прочих методов
доступа возможен и последовательный, который эквивалентен
обычному просмотру списка перекрестных ссылок сверху вниз.
Пример списка частичных перекрестных ссылок и связанного с ним
набора данных на одной поверхности диска показан на рис. 4.9.
R03
RiO
R09
R05
R51
R52
R27
R93
R13
R06
R15
R60
Номер
записи
01
02
03
04
05
06
09
11
12
13
14
15
18
20
27
34
Относительный
номер записи
4
5
2
13
14
15
10
16
8
11
12
19
1
6
3
17
Относительный
адрес
дорожки
0
1
0
3
3
3
2
3
1
2
2
4
0
1
0
А и т.О.
Рис. 4.9. Прямой доступ с использованием списка перекрестных ссылок.
Хранение и ведение подобных списков перекрестных ссылок
составляет основную трудность реализации метода просмотра
таблиц как средства прямого доступа. Для больших файлов такая
таблица может оказаться очень длинной. Если доступ должен быть
максимально быстрым, то таблицу можно хранить в основной
памяти, однако эта память сравнительно дорогая; в других случаях
таблицу можно хранить на диске и считывать в ЭВМ только на
время ее использования, но это означает, что для получения
каждой записи требуется дважды повторить поиск и дважды —
считывание. В некоторых вычислительных системах тщательным
программированием добиваются размещения таблицы в основной
памяти при пиковой нагрузке и хранения ее на диске в остальное
62 Глава 4
время. Ведение таблицы имеет свои трудности: поскольку
большинство методов просмотра таблицы зависит от способа ее
организации, то по мере добавления записей к файлу необходимо
переупорядочивать элементы таблицы. Несмотря на этот длинный
перечень приведенных недостатков, использование списка
перекрестных ссылок оказывается прекрасным способом реализации
прямого доступа во многих применениях.
Индексно-последовательные файлы
Ряд изготовителей ЭВМ и фирм-разработчиков математического
обеспечения предоставляют пользователям программно
реализованные средства, необходимые для создания и ведения таблиц
перекрестных ссылок, подобных описанным выше. Хорошим примером
такого рода математического обеспечения является организация
индексно-последовательных файлов. Индексно-последовательная
организация разработана для облегчения как прямого, так и
последовательного доступа к одному и тому же файлу. Такие файлы
обычно формируются последовательно, что сразу же
обеспечивает последовательный доступ. Единственная трудность,
связанная с последовательным доступом, обусловлена
возможным переполнением в результате добавления записей к
первоначально сформированному файлу. Такие записи не
укладываются в исходную последовательность, и, чтобы справиться с этой
проблемой, создано огромное количество программных средств
индексно-последовательной обработки.
Для обеспечения прямого доступа к данным используется
некоторая иерархия индексов. В случае файла на диске индекс
цилиндра указывает наибольшее значение ключа записей файла для
соответствующего цилиндра. В каждом цилиндре используется
свой собственный индекс дорожки, указывающий наибольшее
значение ключа записей, хранящихся на данной дорожке. При
поиске записи сначала необходимо установить индекс
цилиндра — один поиск и одно чтение. Таким образом, мы приходим
к индексу дорожки, значение которого также должно быть
считано, прежде чем мы сможем приступить к считыванию данных
с нужной дорожки. В итоге для каждой записи данных требуется
три поиска и три считывания! Переполнение данных связано с
большим объемом дополнительных операций ввода — вывода.
Хотя при таком подходе, пользуясь программными средствами,
можно по крайней мере индекс цилиндра хранить в основной
памяти, тем не менее другие способы организации данных
оказываются несколько более эффективными при использовании
устройств с прямым доступом.
Управление данными и структуры файлов 63
Сцепление записей
При правильном использовании индексно-последовательная
организация файла является наиболее эффективной при обработке
последовательно представленных данных, однако ей присущи
некоторые недостатки в условиях работы с прямым доступом. Очень
хороший способ организации файла, обычно используемый при
прямом доступе (но требующий время от времени
последовательной обработки), связан с применением метода сцепления данных.
Рис. 4.10. Сцепление записей.
В каждую запись файла включается компонент, указывающий
значение ключа и, может быть, относительный адрес следующей
записи последовательности (рис. 4.10); другими словами, в
каждой записи есть указатель следующей записи. Последовательная
обработка может вызывать частое перемещение рычага головки
чтения — записи и, следовательно, снижение эффективности
поиска. Однако если такая обработка случается сравнительно
редко, то какое это имеет значение? Файл можно построить на основе
применения наиболее эффективных методов прямого доступа,
оптимизируя, таким образом, основной способ его обработки.
Указатели применяются также для сцепления логически
связанных записей. Допустим, например, что в учреждении заводятся
персональные файлы для каждого из сотрудников. Некоторые
данные этих файлов — фамилия, социально-страховой
регистрационный номер, почасовая оплата — используются во время
расчетов, связанных с выплатой жалованья, тогда как другая
информация требуется значительно реже. Вместо того, чтобы в
программе начисления заработной платы предусматривать разделы
основного файла, касающиеся фактов образования и обучения
сотрудников, создается отдельный файл данных об образовании
и обучении, при этом в каждой личной записи основного файла
помещают указатель, значение которого определяет вход в этот
64 Глава 4
новый файл. При таком подходе прослеживание всего набора
данных не требует создания слишком длинных и неэффективных при
обработке записей. Использование указателей как средства
сцепления логически связанных записей является общепринятым в
современных системах управления базами данных. К обсуждению
этой темы мы вернемся в гл. 17.
Файлы, использующие виртуальную память
Когда фирма IBM объявила о завершении разработки серии ЭВМ
Системы/370, в которых реализован способ управления памятью,
называемый «виртуальная память», в употребление был введен
и некоторый новый метод доступа — виртуальный
последовательный метод доступа, или VSAM. Полагая, что детальное знакомство
с особенностями виртуальной памяти для большинства читателей
этой книги пока еще впереди, мы не станем здесь подробно изучать
VSAM. Однако, поскольку VSAM обеспечивает иной подход к
организации файлов, о нем следует по крайней мере упомянуть.
Мы вернемся к этой теме в гл. 15, после того как будут
рассмотрены основные понятия виртуальной памяти.
При использовании VSAM данные хранятся блоками
фиксированной длины. Порядок расположения отдельных логических
записей внутри блока может определяться либо значением
некоторого ключа — номером сотрудника, социально-страховым
регистрационным номером, номером раздела, —либо очередностью
появления (т. е. последовательностью поступления записей). В
случае упорядочения по ключу, вероятно наиболее
распространенного, формируется список-указатель значений самых последних
записей в каждом блоке. В этом отношении VSAM весьма похож
на индексно-последовательный метод доступа (ISAM).
Однако в остальном метод VSAM отличается от метода ISAM,
обеспечивая некоторые существенные преимущества. Метод ISAM
с его индексами цилиндров и дорожек специально приспособлен
для дисковых файлов; в методе VSAM используется адресация,
привязанная к «относительному байту» и аналогичная адресации
основной памяти. Таким образом, доступ к данным,
выполняемый в соответствии с обсуждаемым методом, оказывается аппа-
ратно независимым. Отметим это еще раз: по крайней мере
теоретически метод VSAM аппаратно независим] До тех пор пока
диск оставался единственным устройством прямого доступа,
аппаратная независимость не имела большого значения, однако при
наличии новых технических средств метод VSAM обеспечивает
необходимую гибкость.
Еще один серьезный недостаток ISAM связан с методом
включения новых и исключения старых записей файла. В соответствии
с методом VSAM используется «свободное пространство», распре-
i
Управление данными и структуры файлов 65
деленное по всему объему физического файла, а программные
средства VSAM обеспечивают вычисление значений кодов,
необходимых для перестройки записей и переопределения указателей,
что делает процедуры обновления файла и поиск данных намного
более эффективными.
Однако потенциально наиболее значительные преимущества
методов виртуального доступа обусловлены, вероятно, связью
этих методов доступа с самой организацией виртуальной памяти.
Как будет показано в гл. 15, понятие виртуальной памяти
позволяет программисту адресовать команды и области данных
программы, которые фактически размещаются в памяти внешних
запоминающих устройств (таких, как диск или барабан), как если
бы они реально хранились в основной памяти машины.
Программа управления виртуальной памятью обеспечивает
преобразование этих адресов в реальные адреса; тем самым как бы
продвигается еще на шаг адресация по схеме база — смещение. Такой
способ выполнения команд программы весьма значительно
стимулирует разработку ЭВМ, в которых применением специального
математического обеспечения и, быть может, специальных
аппаратных средств достигается максимально эффективное выполнение
операций передачи данных «диск — память» и «барабан —
память». Подобным образом метод VSAM позволяет манипулировать
и данными. Если в ЭВМ предусмотрены средства виртуальной
памяти, способствующие повышению эффективности ввода —
вывода, то представляется разумным воспользоваться этими
дополнительными возможностями при программировании задач
обработки данных.
В наше время виртуальные методы доступа используются
довольно широко. Их применение будет возрастать и в будущем.
Какая организация лучше?
Ответ на вопрос «Какая организация файла является лучше?»
зависит от конкретных требований решаемой задачи. Например,
нелепо даже обсуждать возможность организации прямого
доступа к файлу, состоящему из пяти или шести записей. За время
вычисления относительного адреса дорожки можно
последовательно просмотреть весь такой файл; т. е. объем файла или число
записей в нем, весьма существен. Другим важным фактором
является изменчивость данных; выбор индексно-последовательной
организации файла, например, не может считаться оптимальным,
если ожидается высокая интенсивность внесения новых и
исключения старых записей.
Активность файла также является существенным фактором.
В системах, функционирующих в реальном масштабе времени,
где каждая порция оперативной информации должна независимо
3-821
6в Глава 4
обрабатываться сразу же вслед за ее поступлением, необходимо
пользоваться некоторой формой прямого доступа; в процедуре
обновления главного файла, включающей модификацию
значительной доли записей файла, естественно выбрать
последовательный доступ. Между этими крайними возможностями
располагается довольно широкая область, включающая промежуточные
средства доступа. Индексно-последовательный подход весьма
эффективен в применениях, требующих «в основном
последовательного и в меньшей степени прямого доступов». Если прямой доступ
обусловлен основными требованиями, а последовательный доступ
связан с использованием внешних запоминающих устройств, то,
быть может, следует предпочесть сцепление записей или метод
перекрестных ссылок, «формируемых и модифицируемых
программистом». «Лучшая организация» является в данном случае
относительным понятием.
Тома, метки и прочее
На языке обработки данных том — это отдельный физический
элемент какого-либо носителя устройств ввода — вывода, т. е.
одна магнитная лента, или один диск, или один барабан. Том
может содержать один файл, несколько файлов, часть файла или
составляющие нескольких файлов.
Применительно к ленте обычно используют правило «один
том —один файл», но возможны и другие подходы. На рис. 4.11
изображен многофайловый том на ленте. Перед каждым файлом —
даже если на данном томе имеется только один файл —
записывается заголовок, проверяемый схемно ЭВМ, что исключает
возможность чтения не того файла, который был запрошен. Могут
Рис. 4.11. Многофайловый том на ленте.
Рис. 4.12. Таблица содержания тома.
Управление данными и структуры файлов 67
использоваться также многотомные файлы — один файл,
распределенный среди нескольких томов на ленте.
Задача распознавания файлов на многофайловых томах
прямого доступа, в качестве которых, как правило, используются
диски и барабаны, решается обычно при помощи оглавления тома
(VTOC), где попросту перечисляются все файлы или наборы
данных, размещенные на данном томе, с указанием абсолютных
адресов (цилиндра или дорожки) первой и последней записей файлов
(рис. 4.12). В таблице VTOC хранятся абсолютные адреса начала
файлов, которые при вычислении фактического адреса отдельных
записей складываются с относительным адресом дорожки, о чем
мы уже говорили выше.
Краткие выводы
В этой главе мы рассмотрели несколько важнейших понятий,
касающихся данных, в том числе: поля, записи, файлы, записи
фиксированной и переменной длины, блокирование,
последовательная организация файла, ряд организаций прямого доступа
(простая, косвенная и на основе таблицы перекрестных ссылок),
индексно-последовательная организация, сцепление записей,
метки, тома, таблицы VTOC и факторы, определяющие выбор
организации файла.
УПРАЖНЕНИЯ
1 • Определите и сопоставьте понятия поля, записи и файла.
2. Опишите или изобразите: неблокированные данные
фиксированной длины, блокированные данные фиксированной длины,
неблокированные данные переменной длины, блокированные
данные переменной длины и данные неопределенного формата.
3. Объясните разницу между последовательным и прямым
доступами.
4. Обсудите понятие относительного адреса на диске. Каким
образом относительный адрес дорожки может быть преобразован
в абсолютный адрес?
5. Один из методов обеспечения прямого доступа состоит в
формировании и модификации списка перекрестных ссылок,
хранящего действительные значения ключей и соответствующих
относительных номеров записей. Сравните этот метод с индексно-
последовательной организацией.
6. Обсудите метод сцепления записей. Как он используется?
В чем его ценность?
7. Какая разница между файлом и томом?
8. Укажите связь между таблицей VTOG прямого доступа
к файлу и понятием относительного адреса дорожки.
3*
68 Глава 4
9 • Файл личных данных персонала используется программой
начисления жалованья еженедельно. Через равные промежутки
времени в небольшую часть записей файла отделом кадров
вносятся изменения, касающиеся приема новых сотрудников,
перемены адресов, увольнения. Как бы вы организовали такой файл?
Объясните свой выбор.
10. В учреждении используется диалоговая система
инвентарного учета. В случае поступления материалов или отправки
их на склад в инвентарный файл вносятся изменения, отражающие
вновь достигнутое состояние. Рая в году с целью проведения
физической инвентаризации содержимое файла необходимо
распечатывать в последовательности, определяемой номерами партий.
Как бы вы организовали этот файл? И снова объясните свой
выбор.
Часть II
ЭВОЛЮЦИЯ ОПЕРАЦИОННЫХ СИСТЕМ
Глава 5
СИСТЕМЫ ОБРАБОТКИ ОДИНОЧНЫХ ПРОГРАММ:
ВТОРОЕ ПОКОЛЕНИЕ
Введение
Многие важные понятия в области операционных систем возникли
в течение так называемого второго поколения эволюции процессов
обработки данных —периода, охватывающего 50-е и начало
60-х годов, когда вычислительные машины нашли довольно
широкое применение. Эти машины были небольшими и весьма
медлительными по сравнению с современными ЭВМ. Большинство
вычислительных систем использовалось в режиме, который
можно было бы назвать пакетной обработкой, когда программы
исполняются последовательно, причем исполняемая программа с
момента ее запуска и до полного завершения вычислений
занимает все системные ресурсы.
Отличительная черта этого этапа заключается во внедрении
автоматизированных методов обработки данных в сферу
экономики. Первые ЭВМ использовались главным образом для решения
научных и военных задач, например для вычисления
баллистических таблиц и математических соотношений, представляющих
интерес для ученых; в таких применениях очень редко
используются операции ввода и вывода данных, и поскольку
требовалось выполнять весьма обширный объем сложных расчетов, порой
невыполнимых без помощи ЭВМ, то эффективность использования
самой вычислительной машины не учитывалась. С другой стороны,
с точки зрения предпринимателя, в чьем пользовании находится
ЭВМ, последняя представляет собой еще одну материализованную
составляющую его основного капитала и поэтому должна
использоваться с максимальной эффективностью; вопрос о том, как
достигнуть максимальной эффективности при минимальном объеме
оборудования, выдвигается на первый план.
Функционирование аппаратных средств, определяющих
наиболее заметную часть стоимости системы обработки данных,
подвергается тщательному экономическому анализу; общепринятой
мерой эффективности системы становится пропускная
способность, т. е. объем работы, выполняемой ЭВМ в данный
отрезок времени. Оценивалась также стоимость математического
обеспечения и программирования, однако, главным образом, в
•
70 Глава 5
связи с эффективностью функционирования аппаратных средств;
хорошей считалась такая программа, которая позволяла получать
нужные результаты обработки данных с использованием
минимального объема памяти и за минимальное время.
На этапе развития систем второго поколения был предложен
ряд концепций в области математического обеспечения,
обусловленных стремлением сократить время отладки программ и упростить
работу программиста, хотя в их основе преобладала ориентация
на аппаратные средства, т. е. назревала необходимость учета
стоимости самого математического обеспечения. В области
обработки данных многие из понятий и методов организации файлов,
рассмотренных в гл. 4, появились именно в этот период развития
ЭВМ.
В данной главе мы обсудим некоторые из наиболее важных
результатов, достигнутых на этапе развития второго поколения
ЭВМ, а также выясним, каким образом функции управления и
математического обеспечения эволюционизировали в соответствии
с конкретными требованиями, порождая идеи и методы,
сыгравшие несколько позже важную роль в разработке операционных
систем. Не забудьте, что в этой главе в качестве основного
критерия эффективности ЭВМ используется ее пропускная
способность; за редким исключением, обсуждаемые здесь системные
концепции были введены с целью повышения эффективности
операционной системы, исходя из упомянутого выше критерия.
Минимизация объема подготовительных операций
Перед запуском любой программы вручную должен быть
выполнен ряд подготовительных операций (карты загружаются в
читающее устройство, печатающее устройство заправляется либо
стандартной непрерывно подаваемой бумагой, либо специальными
формами, устанавливаются ленты и пакеты дисков и т. д.), на
что затрачивается определенное время (рис. 5.1). В машинах с
небольшим быстродействием, скажем порядка тысячи операций
в секунду, это не приводит к большим осложнениям; за одной
пятиминутной подготовкой могут следовать несколько часов
вычислений. Однако с ростом быстродействия ЭВМ задача
сокращения времени, затрачиваемого на подготовительные операции,
вырастает в целую проблему. Время подготовки не зависит от быст-
Ыг.опер.
mm
Счет
Подг.опер
)
Счет (
Рис. 5.1. Отношение времени выполнения подготовительных операций к
времени счета для ЭВМ с малым быстродействием.
Системы обработки одиночных программ: второе поколение
71
содействия машины —если раньше на нее расходовалось пять
минут, то и теперь расходуется пять минут, —но относительное
время вычислительных операций с ростом быстродействия ЭВМ
значительно уменьшается. Неожиданно какие-то пять минут
подготовительных операций, затрачиваемых прежде на
двухчасовое задание, становятся весьма ощутимыми по отношению
к времени задания, выполняемого теперь за четверть часа (рис. 5.2);
значительная доля доступного машинного времени расходуется
на непроизводительные операции. Хороший предприниматель не
может мириться с такими неоправданными простоями
дорогостоящего оборудования.
Шсопер.
шш
mm
Шг.опер.
Подшер.
Шг.опер.
Шг.опер.
Счет
Счет
Счет
Счет
Счет-
Рис. 5.2. Отношение времени выполнения подготовительных операций к
времени счета при возросшем быстродействии ЭВМ.
Простое исключение этапа подготовки невозможно; установка
лент, заправка печатающих устройств и другие подготовительные
операции должны непременно выполняться. Одно частное решение,
давно применяемое в промышленности для минимизации простоев
производственного оборудования, состоит в планировании
выполняемых работ. Рассмотрим, например, следующие четыре
задания, отличающиеся требованиями к оформлению печатаемых
данных:
ЗАДАНИЕ ФОРМАТ БУМАГИ
А
Б
В
Г
Одно поле
Четыре поля
Одно поле
Четыре поля
Исполнение этих заданий в приведенной на рис. 5.3
последовательности вызывает необходимость трижды менять формат
бумаги печатающего устройства; в измененной последовательности
выполнения заданий, объединенных в группы по сходству
требований (рис. 5.4), та же работа выполняется лишь с одной
сменой форматов, что существенно снижает общее время подго-
йодгшр.
Шг.опер.
r\\\\v
Подг.опер
Подг.01
х
$
В
Г
Рис. 5.3. Подготовительные операции для заданий без планирования
вычислительных работ.
72 Глава 5
товки. Не всякая последовательность заданий может быть столь
просто проанализирована, тем не менее идея группирования
заданий по сходству подготовительных операций является разумной.
Планирование часто реализуется на основе разбиения заданий
на классы. Например, тестовым прогонам, программам
компиляции и ассемблирования можно было бы приписать класс «А»;
при исполнении заданий этого класса достаточно было бы
ограничиться устройством чтения карт и печатающим устройством,
использующим всю ширину бумаги. Задания класса «А»,
поступающие в вычислительный центр, попросту ожидают оцределен-
ного графиком момента времени, когда целый «пакет» таких
заданий можно «пропустить» через ЭВМ, не прерывая вычислений
Подгшр.
А
8
Подг.опер.
В
Г
Рис. 5.4. Подготовительные операции для заданий с планированием
вычислительных работ.
подготовительными операциями. Другие классы, а именно, «Б» —
запрашивающие магнитную ленту, «В» — требующие нескольких
магнитных лент, «Г» — для задач, использующих формат бумаги,
разделенной на несколько полей, — позволяют группировать
остальные типы заданий.
Каким образом оператор может идентифицировать класс
задания, представленного колодой перфокарт некоторой программы?
Один из принятых способов состоит в использовании
перфокарты идентификации задания. На этой перфокарте,
помещаемой в начале колоды, указывается класс задания и, быть может,
другая информация, например фамилия программиста и учетные
данные. Были испробованы различные виды таких карт, в том
числе разноцветные — для каждого класса использовались карты
определенного цвета; основная цель этих попыток — обеспечить
возможность группирования подобных заданий, упрощая тем
самым планирование вычислительных работ с целью минимизации
подготовительных операций.
Другим фактором планирования может служить доступность
устройства ввода — вывода. Например, подготовительные
операции задания, требующего установки нескольких магнитных
лент, можно выполнять во время прохождения задания, не
использующего лент, исключая тем самым возможные потери
времени на установку лент. Планирование такого рода
затруднительно в анализе и реализации, но при некоторых усилиях и
предусмотрительности может обеспечить значительное снижение
объема непроизводительных операций. В вычислительных системах
Системы обработки одиночных программ: второе поколение 73
второго поколения для упрощения планирования использовался
журнал программистов — официальный документ, содержащий
описание всех действий оператора, требуемых данным заданием.
Возможность использования приоритетов является важной
составной частью любой системы планирования — даже при
самом совершенном планировании могут неожиданно возникать
«горящие» задания. Карта классификации задания, описанная
выше, часто снабжается признаком определенного приоритета,
что упрощает распознавание таких заданий.
Завершая обсуждение вопроса планирования, коснемся
основного критерия вычислительной системы — пропускной
способности. Пока выполняются подготовительные операции, ЭВМ
простаивает; это сказывается отрицательно на эффективности
системы. Целью планирования является снижение времени
непроизводительных операций, и соответственно, увеличение периода
времени полезного применения систем. Разница между хорошим
и плохим планированием может составлять один час
производительного времени в день; спросите у любого предпринимателя,
что значит один час в день с экономической точки зрения.
Хорошее планирование, снижая время непроизводительных операций,
повышает эффективность системы.
Время компиляции и объектные модули
Подготовительные операции являются не единственным
источником потерь производительного времени ЭВМ; существует
также ряд причин, которые могут вызвать значительные потери
времени в самом процессе прогона заданий. Рассмотрим, например,
процесс компиляции.
Программист обычно подготавливает задание в виде колоды
перфокарт, изображенной на рис. 5.5. Это довольно типичное
многошаговое задание, в котором редактирование данных
сопровождается сортировкой с последующим обновлением главного
файла. Все три программы написаны на Коболе, таким образом,
перед каждым из трех модулей должна быть вставлена копия
программы компилятора с Кобола. Одно лишь чтение всех этих
карт сравнительно медленно работающим читающим устройством
требует заметного времени.
Почему бы не хранить объектный модуль компилирующей
программы на диске, а не на картах? На рис. 5.6 объектные колоды
карт компилятора с Кобола заменены картами EXEC,
указывающими на то, что копия компилирующей программы должна счи-
тываться с диска. Обратите также внимание на новую версию
программы сортировки — она также заменена картой EXEC,
вслед за которой помещается единственная карта данных,
описывающая сортируемые поля. Сортировка является настолько рас-
74
Глава 5
/Конец задания
*£
у^
/ UPDATE
/Глабный файл
/ COBOL
/ SORT
/ COBgL
Данные
EDIT
COBOL
/Карта JOB
Рис. 5.5. Колода перфокарт задания с компилирующими программами в
форме объектных модулей.
/Коней, задания
/Глабный файл
UPDATE
/exeTcobol
/SORT FIELD
/ EXEC SORT
Данные
EDIT
/EXEC COBOL
/ Карта JOB
Рис. 5.6. To же задание с компилирующими и сортирующей стандартными
программами, хранящимися на диске.
пространенной процедурой обработки данных, что многие фирмы
давно закупили или разработали своими силами стандартную
программу сортировки, хранящуюся в форме объектного модуля
на диске, что позволяет пользоваться ею всем программистам
отдела обработки данных. Исключение столь большого числа
карт из пакета само по себе приводит к заметному снижению
полного времени исполнения задания.
Объектные модули компилятора и программы сортировки
хранятся в библиотеке. Требуется ряд специальных программ для
ведения библиотеки, включения новых и изъятия устаревших
Чтение
компилятора i
с Кабала
Компиляция
Ч/пение
программы
сортиробки
i
Программа
сортиробки
I
Чтение
компилятора
с Кобола
i
Компиляция
I
Чтение
загрузчика
Рабочий
файл
Загрузка
и исполнение
Рис. 5.7. Блок-схема исполнения задания, включающего программы
редактирования, сортировки и обновления файла, с использованием программы
загрузчика и объектных модулей, хранящихся в библиотеке.
76
Глава 5
программ, а также загрузки библиотечных программ в основную
память. Программы, реализующие последний тип функций,
называются загрузчиками. Блок-схема, иллюстрирующая
прохождение программ редактирования, сортировки и обновления
в нашем примере показана на рис. 5.7.
Что можно сказать о самом процессе компиляции? Если
программа до конца отлажена, то компиляция, т. е. преобразование
программы с языка программиста на язык машины
непроизводительно занимает ЭВМ, вновь и вновь выдавая один и тот же
результат. Почему бы не хранить программу в форме объектного
(или загрузочного) модуля в библиотеке? Это вполне возможно.
/Коней, задания
/Глабный фай/1
/EXEC UPDATE
/ SORT FIELD
/ EXEC SORT
Данные
/EXEC EDIT
Карта JOB
Рис. 5.8. Колода перфокарт задания с хранением всех программ в библио*
теке.
Колода перфокарт задания, использующего библиотечные
модули, показана на рис. 5.8. Можно видеть, что уменьшилось число
считываемых перфокарт и медленный карточный ввод заменен
быстрым вводом с диска, причем здесь исключена сама процедура
компиляции. Использование библиотек, как правило, заметно
снижает время выполнения программы, освобождая тем самым время
для выполнения других заданий, т. е. повышается пропускная
способность, а следовательно, и эффективность системы.
Несоответствие быстродействия ЭВМ
и скорости работы устройств ввода — вывода
Устройство чтения карт, принимающее 600 карт в минуту,
обрабатывает одну карту приблизительно за одну десятую секунды.
За ту же самую долю секунды ЭВМ с микросекундным циклом
способна выполнить около ста тысяч операций. Большинство
программ требует выполнения значительно меньшего количества
операций. Иначе говоря, ЭВМ способна работать со скоростями,
?
Системы обработки одиночных программ: второе поколение 77
значительно превышающими скоростные возможности устройств
ввода —вывода в отношении передачи данных.
Это положение лучше всего иллюстрируется примером.
Конкретное содержание используемой в этом примере программы не
имеет значения; пусть программа включает чтение данных, за
которым следует выполнение одной сотни
команд и затем запись (рис. 5.9). После
этого работа программы повторяется.
Каждый цикл включает одну операцию чтения,
выполнение одной сотни команд и одну
операцию записи, и все, что касается
временных соотношений в пределах одного
цикла, простым умножением переносится
на любое число циклов.
Пусть мы используем ЭВМ с миллисе-
кундным циклом, способную выполнять
лишь тысячу операций в секунду. Время,
необходимое для выполнения одного цикла,
с учетом времени ввода перфокарт и печати
данных приводится на рис. 5.10. Для чтения
одной перфокарты нашему устройству с
быстродействием в 600 карт в минуту
требуется одна десятая секунды. При выводе
на печать с быстродействием устройства
печати в 1200 строк в минуту распечатка
одной строки выходных данных займет 0,05 с—
двадцать строк в секунду. В ЭВМ с милли- Рис 5 9 упрощен.
секундным циклом на выполнение ста команд ный пример выполне-
требуется 0,1 с машинного времени. Полный ния программы,
цикл составляет 0,250 с. Из этого
суммарного времени цикла целых 60% (0,100 с)
расходуется на операции ввода и вывода. В течение времени ввода
и вывода CPU (центральный процессор ЭВМ), наиболее
дорогостоящий компонент системы обработки данных, простаивает.
В результате фактическое использование CPU составляет лишь
40% времени занятости системы; 60% этого времени проходит в
ожидании завершения процесса передачи данных в устройствах
ввода и вывода.
Чтение одной карты 0,100 с
Выполнение 100 команд 0,100 с
Печать одной строки 0,050 с
Полное время цикла 0,250 с
Время счета =0,100 с из каждых 0,250 с, т. е. 40%
Время простоя CPU = 150 с из каждых 0,250 с, т. е.
60%
Рис. 5.10. Распределение временя в одном цидае программа.
i
Чтение
Выполнение
100 команд
Запись
78
Глава 5
Эта проблема успешно решается аппаратными средствами,
особенно в машинах с таким низким быстродействием. Магнитная
лента может читаться со скоростями, превышающими 60 тыс.
символов в секунду. При такой скорости чтение образа 80-сим-
вольной карты составит уже не 0,1 с (время, необходимое для
чтения физической карты), а чуть больше одной тысячной
секунды, а запись на ленту отдельной строки в 120 символов
выполняется за 0,002 с. Быстродействие ЭВМ не зависит от того, что мы
пользуемся более скоростными устройствами ввода — вывода,
так что выполнение 100 команд нашей программы займет те же
0,100 с. Полное же время цикла теперь составляет 0,103 с, при
этом CPU оказывается занятым в каждом цикле в течение
0,100 с —приблизительно 97% полного времени (рис. 5.11).
Точно так же мы могли бы воспользоваться диском или
барабаном — результат был бы не менее выразительным. Эти цифры
не претендуют на точное описание реальных соотношений, а лишь
иллюстрируют порядок величин. Выигрыш от использования
высокоскоростных устройств ввода—вывода не так велик для
ЭВМ более высокой производительности, однако этот пример
действительно показывает преимущества, достигаемые применением
ленты и диска.
Чтение образа одной перфокарты 0,001 с
Выполнение 100 команд 0,100 с
Запись одной строки 0,002 с
Полное время цикла 0,103 с
Время счета =0,100 с из каждых 0,103 с, т. е. 97%.
Рис. 5.11. Распределение времени в одном цикле программы с
использованием магнитной ленты.
Блокирование, буферизация и методы доступа
Использование ленты или диска обычно предполагает объединение
данных в блоки с целью более эффективного применения этих
носителей; таким образом, физическому процессу выдачи данных
должны предшествовать операции построения в основной памяти
блоков данных, а вслед за физическим считыванием логических
записей необходимо выполнять их деблокирование. Хотя это и не
является неразрешимой проблемой, блокирование и
деблокирование представляют собой еще одну задачу, которую должен
решать программист. Чтобы облегчить последнему
программирование связанных с передачей данных процедур, были разработаны
так называемые методы доступа. Метод доступа аналогичен
подпрограмме; важнейшей составляющей метода доступа является
некоторая закодированная информация, необходимая для
блокирования и деблокирования данных.
Системы обработки одиночных программ: второе поколение
79
Математическое обеспечение, которое может существенно
повысить эффективность системы, включает использование много-
блочных буферов. В качестве примера рассмотрим работу с
данными, объединенными в блоки по десять восьмидесятисимвольных
записей. Мы выделим два буфера объемом 800 символов каждый,
что составляет размер физической записи, или блока. В момент
времени, соответствующий началу выполнения программы, оба
буфера заняты и первая логическая запись пересылается из
первого буфера в выделенную программистом рабочую зону
(рис. 5.12). По завершении одного цикла и выдачи второй коман-
буфер
гё1
буфер
|Л2
R1
R6
R11
R16
R2
R7
R12
R17
R3
R8
R13
R18
R4
R9
R14
R19
. R5
R10
R15
R20
Рис. 5.12. Спаренные буферы в программе.
ды считывания следующая логическая запись просто пересылается
из буфера, при этом физических операций ввода—вывода пока
не требуется. В соответствии с логикой программы (см.
блок-схему программы на рис. 5.13) пересылка данных из первого буфера
в рабочую зону происходит до тех пор, пока этот буфер не
окажется пустым; в этот момент — на одиннадцатом считывании —
программно осуществляется переключение на второй буфер и
одновременно выдается команда физического чтения. Пока
лентопротяжный механизм или дисковое устройство выполняют эту
сравнительно медленную операцию, ЭВМ обрабатывает данные
второго буфера, что значительно снижает непроизводительный
расход времени. Когда исчерпывается содержимое второго
буфера, данные принимаются (как мы надеемся) из заполненного
первого буфера, при этом параллельно заполняется второй буфер.
Программное обеспечение действий со многими буферами
обычно составляет часть метода доступа. Возможно
использование более чем двух буферов — иногда используются четыре, а то
и больше. Существуют методы доступа, которые избавляют
программиста от всех проблем, связанных с блокированием,
деблокированием и буферизацией, позволяя ему писать программы так,
как если бы он работал с простыми неблокированными записями.
Некоторые методы доступа дают возможность программисту
обрабатывать данные внутри буфера, не пересылая записи в рабо-
80
Глава 5
чую зону; это делается без участия программиста введением
указателя текущей записи и использования относительных адресов.
Каким образом следует включать в программу буферы и
команды метода доступа, чтобы процедуры блокирования и буферизации
не касались деятельности программиста? Эта задача часто
решается программой-загрузчиком, уже рассмотренной в этом разделе.
Заполнение 11 Логическое
\обоих буферов Г 'Tj чтение
Да
Начать
физический
Вбод
Пересылка
одной записи
Переключиться
на другой буфер
Рис. 5.13. Логика многоблочной буферизации.
Взгляните на описание процесса компиляции, представленное
рис. 5.14. Выходом компилирующей программы по-прежнему
является объектный модуль; этот объектный модуль записывается
на диск, где хранится до завершения следующего шага этого
цикла. Программа загрузчика, иногда именуемая редактором связей,
добавляет к объектному модулю команды метода доступа и
выделяет пространство для буферов, формируя таким образом
загрузочный модуль. Последним формальным действием редактора
связей является вызов загрузочного модуля для его загрузки
в основную память и исполнения.
Спулинг
При решении задач обработки данных нельзя совсем отказаться
от использования перфокарт и печатающих устройств. Одним
из способов минимизации влияния этих медленных устройств
является спулинг. В офлайновом режиме спулинга. карты без
Системы обработки одиночных программ: второе поколение
81
библиотека
( Начало J
Чтение
компиляторам
Компиляция
Чтение
редактора
сбязеи
Редактирование
сбязеи
'Чтение загру
Ьочного модуля
Исполнение
программы
( Стоп J
Рис. 5.14. Компиляция, редактирование связей и исполнение программы.
участия CPU считываются непосредственно на ленту (рис. 5.15).
Затем эта лента устанавливается на лентопротяжное устройство,
Доступное CPU, что позволяет ЭВМ получать все данные с
устройства значительно большего быстродействия. Выходные данные
Для печати передаются не прямо печатающему устройству, а
накапливаются на ленте с тем, чтобы в последующем их печатать не
загружая CPU. В идеальном случае программист не должен за-
^
82
Глава 5
Осрлайнобьш
процессор
i »
ЗВМ В он/юйно-
бом режиме
Рис. 5.15. Спулинг.
Офлайнобый
процессор
ботиться о промежуточном хранении данных —процедуры спу-
линга должны выполняться автоматически. Для этого необходимо
специальное математическое обеспечение.
Контрольные точки и возобновление счета
Каждому программисту доводилось услышать «страшные»
истории о том, как после 2 ч и 50 мин счета, за десять минут до ее
нормального завершения все результаты работы программы
пропадали из-за машинного сбоя, ошибки в программе или данных.
Такого рода непредвиденные прерывания выполняемой
программы приводят к весьма ощутимым потерям машинного времени.
Использование контрольных точек и процедур возобновления
обработки может минимизировать последствия подобных
прерываний. Промежуточные результаты работы программы
периодически, например через каждые 10 мин, целиком записываются на
ленту или диск; иногда такой дамп включает и копию всей
программы. В случае ошибки или сбоя работа программы
возобновляется по данным, записанным в последней контрольной точке;
таким образом, в нашем примере максимальная потеря машинного
времени составила бы 10 мин. Программное обеспечение процедур
обработки контрольных точек и возобновления счета обычно
хранится в библиотеке и так же, как средства буферизации и
методов доступа, может быть добавлено к загрузочному модулю в
процессе редактирования связей.
Системы обработки одиночных программ: второе поколение 83
Таймеры
Еще одну проблему, о которой большинство программистов по
крайней мере что-то слышали, составляют бесконечные циклы —
фрагменты программы, которые без конца повторяются.
Бесконечный цикл безрезультатно «пожирает» машинное время. Во
времена первых ЭВМ программист обычно мог следить за
выполнением своей программы; если ожидаемые результаты не
появлялись в течение некоторого промежутка времени, он мог прервать
работу программы.
Если присутствие программиста исключается, то такая
обязанность возлагается на оператора, от которого нельзя ожидать
глубокого понимания каждой прикладной программы. В этом
случае полезен таймер. Введением временного контроля
предусматривается, что программист приблизительно оценивает
полное время прогона своей программы и фиксирует его вместе с
другими параметрами на карте JOB. Если фактическое время прогона
превышает оценку, заданную в карте JOB, прогон программы
принудительно заканчивается.
Минимизация времени счета. Краткие выводы
Итак, мы обсудили ряд методов минимизации фактического
времени счета программы. Рассмотренные нами темы включают:
библиотеки, программы загрузки и редакторы связей,
блокирование и буферизацию, методы доступа, спулинг, контрольные
точки, возобновление обработки и логические таймеры. Все эти
методы реализуемы программными средствами. Комплект такого
программного обеспечения вместе с компиляторами и
ассемблирующими программами образуют прототип операционной
системы.
Использование основной памяти — оверлейные структуры
В условиях пакетной обработки, характерной для систем второго
поколения, программа могла использовать всю доступную память
системы —так уж получилось; не было никакого смысла
пытаться минимизировать занимаемую память. Реально проблема
состояла в получении достаточного объема основной памяти, а
не в минимизации используемой.
Некоторым выдающимся программистам удалось, используя
оверлеи (перекрытия), решить проблему размещения программы
длиной в 16К в машине с памятью в 8К; логические принципы
оверлейных структур иллюстрируются рис. 5.16.
Рассматриваемая программа разбивается на ряд модулей; пусть, например,
имеется 4 модуля размером 4К. В одном из модулей, называе-
84
Глава 5
Модуль л/#/
4К
Модуль №2
4К
Модуль №3
4К
Модуль N*4
4К
Программа 3 WK
Модуль л/* 7
4К
Модуль №1
4К
8К памяти
6
Модуль л/-?/
4К
Модуль №3
4К
8 К памяти
Модуль №1
4К
Модуль rJ'4
4К
8К памяти
Рис. 5.16. Программирование с использованием оверлейных структур.
мом главным, или управляющим, хранятся данные и рабочие зоны
памяти, общие для всей программы; в эту часть программы часто
включают подпрограммы ввода и вывода. Остальные три части
являются относительно независимыми в том смысле, что во втором
модуле предусматривается обращение к адресам и полям только
первого и второго модулей, но не третьего или четвертого; сфера
действия третьего модуля ограничивается только собственной
памятью и обращениями в раздел управления (первый модуль);
четвертый модуль не содержит каких-либо обращений ко второму
и третьему модулям. Проектирование и реализация такой
структуры доступна лишь выдающимся программистам.
Если организация подобной оверлейной структуры удалась,
то она используется приблизительно следующим образом. При
Системы обработки одиночных программ: второе поколение 85
запуске программы главный модуль (номер один) и второй модуль
размещаются в основной памяти, занимая в сумме объем 8К,
составляющий всю доступную для использования основную память.
Программа работает по алгоритмам этих двух модулей, пока не
отпадет необходимость в модуле номер два. В этот момент времени
в основную память, занимаемую модулем номер два, считывается
модуль номер три (рис. 5.16, б), перекрывая таким образом
отработавший модуль. Затем третий модуль также замещается
четвертым; в последующем весь описанный цикл может снова
повторяться. Отметьте, что главный управляющий раздел все время
остается в основной памяти.
Мы привели пример изобретательного программирования,
которое нельзя отнести к разряду легко реализуемых
общедоступными средствами математического обеспечения машин второго
поколения. Понятие оверлея вводится здесь главным образом
потому, что оно было логическим предшественником современных
идей программно реализуемых организаций постраничной и
виртуальной памяти, которые нам предстоит подробно рассмотреть
в гл. 15.
Управление данными
Многие методы и способы организации файлов, рассмотренные
в гл. 4, были разработаны для ЭВМ второго поколения. Вновь
созданные средства математического обеспечения этих методов
управления данными включали стандартные модули
формирования и обновления файлов, процедуры обработки индексов и меток,
процедуры контроля меток, программы защиты данных и
библиотек, алгоритмы рандомизации и другие средства.
Две макрокоманды, OPEN и CLOSE, позволяют
программисту отказаться от прежних методов, основанных на принципе
«каждый сам отвечает за свои данные», в пользу более
современных способов управления данными. Программист записывает
макрокоманду OPEN непосредственно перед самой первой
операцией ввода или вывода данных рассматриваемого файла. К
функциям этой макрокоманды относятся выдача сообщений
оператору об установке необходимых носителей, контроль меток файла
входных данных, запись метки в файл выходных данных и в
некоторых случаях заполнение ряда входных буферов.
Макрокоманда CLOSE записывается в самом конце задания; она обеспечивает
запись маркеров конца файла и освобождение всех временных
зон памяти на устройствах прямого доступа. Эти макрокоманды
реализуют функции управления и защиты данных. Контроль
меток гарантирует правильный выбор используемого файла.
Программно реализованные процедуры доступа к файлам,
управляемые системой, а не командами прикладной программы, позволя-
86
Глава 5
ют осуществлять ряд проверок и тестов, исключающих
преднамеренное или случайное разрушение данных или библиотек.
Краткие выводы
С ЭВМ второго поколения связана разработка ряда программно
реализуемых методов повышения эффективности вычислительной
системы. Большинство из них обусловлено стремлением повысить
пропускную способность ЭВМ, т. е объем работы, выполняемый
в данный период времени. Совокупность этих средств
математического обеспечения составляет прототип операционной системы
и остается неотъемлемой частью современных операционных систем.
Другие проблемы и решения, рассмотренные в этой главе,
—подготовительные операции и планирование, минимизация
используемой памяти и управление данными — вызывают необходимость
разработки определенного математического обеспечения, однако
для систем мультипрограммирования, относящихся к третьему
поколению (они рассматриваются в следующей главе),
характерны другие, более сложные проблемы.
УПРАЖНЕНИЯ
1. Дайте определение пропускной способности.
2. Дайте определение времени обращения. В этой главе оно
не определено; найдите определение в каком-нибудь другом
источнике. Сравните время обращения с пропускной способностью.
3. Соотнесите использование карты JOB с планированием.
Каким образом планирование позволяет повысить пропускную
способность?
4. Какие преимущества дает исполнение программ,
хранящихся в библиотеке в форме загрузочных модулей по сравнению
с последовательным выполнением компиляции и редактирования
связей исходного модуля?
5. Что такое метод доступа? Какие функции относятся к
методу доступа?
6. Как реализуется многоблочная буферизация? Каким
образом можно с помощью многоблочной буферизации повысить
эффективность использования канала?
7. Что такое спулинг?
Глава 6
МУЛЬТИПРОГРАММИРОВАНИЕ И РАЗДЕЛЕНИЕ ВРЕМЕНИ
Введение
В середине 60-х годов получили широкое распространение ЭВМ
на интегральных схемах (SLT). Хотя детальное обсуждение
тонкостей методов изготовления SLT выходит за рамки этой книги,
заметим, что значительно возросшее благодаря использованию
названных схем быстродействие ЭВМ явилось одним из основных
факторов, стимулировавшим разработку современных
операционных систем. На смену старым ЭВМ второго поколения с милли-
секундным временем цикла пришли ЭВМ с микросекундным (один
миллион операций в секунду) и даже наносекундным временем
цикла; прежние методы —спулинг, блокирование,
многоблочная буферизация —уже не могли сами по себе гарантировать
сколько-нибудь экономически приемлемый уровень
использования вычислительных машин. Скорости выполнения операций
ввода и вывода данных не изменились по сравнению с почти
непостижимыми скоростями обработки в CPU новых машин.
Одним из решений проблемы эффективного использования
ЭВМ является одновременное размещение в основной памяти
нескольких программ, поочередно обрабатываемых центральным
процессором подобно действиям гроссмейстера в сеансе
одновременной игры с двадцатью пятью или большим числом
шахматистов. Ниже будут рассмотрены два способа достижения
поставленной цели — мультипрограммирование и разделение времени;
существенно, что эти понятия относятся к области
математического обеспечения и что программы, необходимые для реализации
режимов мультипрограммирования или разделения времени,
составили важную часть того, что впоследствии было названо
операционной системой.
В данной главе для оценки эффективности системы обработки
данных будут использоваться два термина: пропускная
способность и время обращения. Пропускная способность, как и
прежде, служит мерой объема работы, выполняемой ЭВМ в
единицу времени. Время обращения представляет собой
временной промежуток от момента приема задания до его
завершения. Назначение системы можно было бы сформулировать так:
«обеспечение максимальной пропускной способности при некото-
88
Глава в
ром разумном ограничении, накладываемом на время обращения»,
или просто «обеспечение максимальной пропускной способности»,
или «обеспечение минимального времени обращения», —либо
использовать какое-нибудь другое сочетание требований. Важно
отметить, что последние два критерия часто противоречат друг
другу. В универсаме, например, пропускную способность
контролеров можно было бы максимизировать, оборудовав лишь один
контрольный выход, вынуждая покупателей простаивать в
очереди, но зато обеспечивая занятость контролера; с другой
стороны время обращения покупателей можно было бы
минимизировать наняв столько контролеров, сколько одновременно проходит
покупателей, обеспечив им практически нулевое время ожидания.
Ни одно из этих решений, очевидно, неприемлемо, и необходим
некоторый компромисс. Точка зрения и цели руководства имеют
большое значение в определении относительной важности
факторов пропускной способности и времени обращения. Та же самая
необходимость взвешивать и сопоставлять оба критерия
возникает и в области проектирования операционных систем; этот
вопрос мы будем обсуждать ниже.
Производительность устройств ввода — вывода
и скорость обработки данных в ЭВМ третьего поколения
Вернемся к нашей программе из ста команд, рассмотренной в
гл. 5 при определении понятия времени ожидания (простоя
машины). Для ЭВМ с миллисекундным временем цикла мы
установили, что применение высокоскоростных устройств ввода —
вывода типа ленты или диска совместно с такими программными
средствами, как блокирование, многоблочная буферизация и
спулинг позволяет достичь очень высокой степени использования
CPU. Представим себе, что в результате прогресса в технологии
изготовления SLT быстродействие нашей ЭВМ приблизилось
к быстродействию ЭВМ микросекундного уровня, способных
выполнять один миллион (а не одну тысячу) операций в секунду.
При использовании устройства чтения карт и печатающего
устройства (рис. 6.1) ввод данных по-прежнему займет 0,1 с, а их
вывод —0,05 с; однако время, необходимое для выполнения ста
команд уменьшается с 0,1 с (100 раз по 1/1000) до
Чтение одной карты 0,1000 с
Выполнение 100 команд 0,0001 с
Печать одной строки 0,0500 с
Полное время цикла 0,1501 с
0,0001
Время счета в процентах = =0,00066 = 0,066%
Рис. 6.1. Использование ЭВМ с микросекупдпым циклон оиг>а*д-шия.
/
Мулътипрограммирование и разделение времени 89
0,0001 с (100 раз по 1/1000000). Полное время выполнения
одного цикла программы уменьшается до 0Д501 с, из которых —
и это весьма важно —лишь 0,001с (меньше чем 0,07% времени
одного цикла) приходится на работу CPU. ЭВМ, аренда которой,
быть может, стоит сто тысяч долл. в месяц, расходует более 99,9%
оперативного времени, ожидая завершения процессов передачи
данных в устройствах ввода —вывода! Выражая эти
соотношения в несколько ином масштабе, можно сказать, что ЭВМ,
используемая таким образом, фактически в течение суток только одну
минуту была бы занята выполнением полезной работы. Полное
время цикла старой ЭВМ миллисекундного уровня составляло,
если вы помните, около 0,2500 с; для машины с большим
быстродействием оно сократилось до 0,1501 с — менее чем наполовину.
При этом микросекундная машина в тысячу раз быстрее своей
предшественницы. И вероятно, в десять раз дороже. Какой смысл в
повышении быстродействия машины?
Прежде проблема решалась применением более скоростных
устройств ввода — вывода; рассмотрим их еще раз.
Процессорное время, продолжительностью 0,0001 с, 0,001 с времени чтения
с ленты, выполненного до этого, и 0,002 с последующей записи
на ленту (рис. 6.2) составляют полное время цикла, равное
0,0031 с, из которых лишь 0,0001 с, или 3,2%, используется
CPU. Ученый или инженер, работающий над сложной
вычислительной задачей, например, полета на Луну, возможно, и
согласится платить за аренду столь быстродействующего процессора
машин третьего поколения, однако предпринимателя,
по-видимому, не смогли бы удовлетворить ожидаемые четыре или пять
процентов полезной загрузки ЭВМ и, в лучшем случае,
некоторая минимального размера прибыль, компенсирующая более
высокую (по сравнению со старыми не столь быстродействующими
машинами) стоимость. Прибегая к аналогии, можно спросить,
зачем нам расходовать средства на покупку скоростного поезда,
если по состоянию путей во многих местах мы вынуждены
ограничиваться пятнадцатью—двадцатью милями в час? Скорость
дает большие преимущества, если только мы можем ее
использовать.
Чтение образа одной карты 0,0010 с
Выполнение 100 команд 0,0001 с
Запись одной строки 0,0020 с
Полное время цикла 0,0031 с
0,0001
Время счета в процентах = ~ТТ7ТГ~ =0,032=3,2%
Рис. 6.2. Использование ЭВМ с применением магнитной ленты.
90
Глава 6
Одно из решений — мультипрограммирование
Оставим ненадолго тему вычислительных машин и представим
себя владельцами телефонного справочного бюро. У нас всего
один абонент, и, исходя из прошлого опыта, каждую ночь мы
можем ожидать трех-четырех вызовов. Другими словами, наше
занятие состоит из краткосрочных нерегулярных периодов работы
и длительных ожиданий. А как мы используем все это свободное
время? Мы могли бы читать или писать или разгадывать
головоломки. Если мы действительно предприимчивы, то могли бы
принять на обслуживание еще некоторое количество клиентов,
позаботившись о том, чтобы их вызовы не мешали обеспечению
запросов нашего первого абонента. Безусловно, существует
некоторый предел числа новых клиентов, которых мы можем
обслужить, поскольку наш телефон был бы настолько занят, что
абоненты отказались бы от мысли воспользоваться им, а это не
отвечает целям нашего предприятия; тем не менее идея выполнения
других работ в незанятое время является весьма привлекательной.
Другой пример на эту же тему можно найти в шахматах. Мы
все читали о шахматных мастерах, дающих сеансы
одновременной игры с двадцатью или двадцатью пятью соперниками. Как
это им удается? Ответ в действительности довольно прост: каждый
раз шахматист концентрирует свое внимание только на одной
партии. Начиная с доски первого соперника, мастер анализирует
позицию, принимает решение о выборе хода и делает этот ход.
Затем он переходит к следующей доске и повторяет тот же процесс
до следующего круга, совершенно забывая о только что
сделанном ходе. Его мастерство проявляется в быстроте; он может,
взглянув на шахматную доску и быстро оценив позицию, выбрать
решение, сделать ход и перейти к следующей доске. Тот факт, что
среднему шахматисту для выбора очередного хода требуется
некоторое время, лишь повышает интерес к сеансам одновременной
игры.
Вернемся, однако, к вопросу об эффективности использования
ЭВМ. Уже рассмотренный случай относительно
кратковременных периодов счета, сопровождаемых длительными ожиданиями
завершения операций ввода —вывода, приводится на рис. 6.3.
Почему бы не использовать время ожидания, в течение которого
процессор ничем не занят, для каких-нибудь других целей? Поче-
Счет
Ожидание
Счет
Ожидание
Время
Рис. 6.3. Временной цикл счета и ожидания.
Мультипрограммирование и разделение времени
91
му бы не поместить в основную память другую программу? В этом
случае, когда программа А начинает действия по вводу —выводу
и оказывается в состоянии ожидания, CPU можно было бы
переключить на управление программой В (рис. 6.4). Те же самые
рассуждения касаются и трех программ (рис. 6.5), четырех
и даже больше. Эта фундаментальная идея загрузки в основную
Программа А
Программа В
Счет
Ожидание
Ожидание
Счет
Счет
Ожидание
Ожидание
Счет
Ожидай
Время
Рис. 6.4. Мультипрограммирование с двумя программами.
Программа А
Программа В
Программа С
Счет
Ожидание
Ожидание
Счет
Ожидс
\ние
Счет
Ожидание
Счет
0
Ожидание
Счет
Ожидание
Ожида
чие
\
Счет
О
Время
-*-
Рис. 6.5. Мультипрограммирование с тремя программами.
память нескольких программ, позволяющая разделить между
ними функции CPU, известна под названием
«мультипрограммирование». Важное замечание: упомянутые программы не
выполняются «одновременно»; они поочередно замещают друг друга,
при этом CPU (наподобие шахматного мастера) сосредоточивает
свои возможности в каждый момент времени только на одной из
них. Для обозначения такого способа выполнения программ
обычно используется термин конкурентное выполнение. Существует
тонкое различие между понятиями «конкурентный» и
«одновременный»; в первом случае подразумевается выполнение в течение
того же самого периода времени, во втором же — в один и тот же
момент времени. Мультипрограммирование означает
конкурентное выполнение в одной ЭВМ нескольких программ. Все эти
программы занимают память в одно и то же время (одновременно
представлены в основной памяти), но используют возможности
центрального процессора поочередно, одна за другой.
92
Глава в
Преимущества мультипрограммирования должны быть
очевидными. Действительно, время, необходимое для завершения
операций ввода или вывода данных, не расходуется впустую, а
используется для решения какой-нибудь другой задачи; на
основе мультипрограммирования теоретически можно выполнить
задания четырех-пяти или большего числа программ за тот же
отрезок времени, который требуется для завершения лишь одного
задания в режиме последовательной пакетной обработки.
Некоторое взаимное влияние программ неизбежно, хотя этот
теоретический предел едва ли достижим; тем не менее
мультипрограммирование приводит к существенному увеличению объема работы,
производимой ЭВМ (пропускной способности). Экономическая
сторона мультипрограммирования, благодаря которому
оказалось возможным выполнение пятикратного или шестикратного
объема работ в течение заданного периода времени, не осталась
без внимания в деловом мире. Мультипрограммирование
способствовало внедрению современных сверхскоростных ЭВМ в сфере
экономики.
Разделение времени
Помимо обеспечения существенного повышения
производительности системы мультипрограммирование также способствует
уменьшению времени обращения. Если за тот же самый период
времени выполняется большее число программ, то, вероятно, и
«моя программа» будет выполнена быстрее. И все же существует
одна проблема, которая по крайней мере исходя из времени
обращения не может быть решена с помощью
мультипрограммирования; это касается заданий, постоянно связанных с
процессором. Для повышения производительности ЭВМ они весьма
желательны. Такие задания просто все время находятся в основной
памяти и постоянно занимают CPU, повышая
среднестатистический процент использования ЭВМ. Тем временем другие задания
находятся в режиме ожидания. Если в качестве меры
эффективности системы принимается пропускная способность, то эта
ситуация не вызывает никаких проблем, однако возможны и другие
случаи. В некоторых применениях определяющую роль играет
время обращения, вследствие чего необходимо использовать
несколько иной подход. Примером одного из таких применений
может служить интерактивная система разделения времени с
пятьюдесятью или большим числом пользователей, имеющих
возможность с помощью терминалов решать задачи и составлять
программы. Обычно пользователь системы разделения времени запрашивает
довольно малые ресурсы ЭВМ, редко требуя обработки
больших объемов данных или исполнения длинных программ;
единственное, что делает систему разделения времени экономически
Мультипрограммирование и разделение времени 93
оправданной, является возможность распределения ресурсов
ЭВМ среди многих таких пользователей. Случайно в системе
разделения времени может появиться задание с большим временем
счета (например, задача регрессионного анализа),
вынуждающее простаивать остальных сорок девять или большее число
пользователей; хорошо управляемая система разделения
времени должна справляться с такой трудностью.
Вследствие одновременного присутствия в основной памяти
программ многих пользователей метод разделения времени, как
вы могли предположить, весьма сходен с
мультипрограммированием, но с одним очень важным отличием, связанным с
проблемой обработки «длинных» программ. Система
мультипрограммирования ведет себя весьма пассивно в моменты времени,
определяемые операциями ввода и вывода отдельных программ,
находящихся в системе; решение освободить CPU для управления другой
программой принимается самим программистом. В системе
разделения времени каждой программе предоставляется некоторое
ограниченное время выполнения, скажем одна десятая или одна
сотая секунды. Если в течение этого интервала времени в тексте
программы встречается инструкция, в соответствии с которой
связь с CPU должна быть разорвана, например, для
осуществления ввода —вывода, то и прекрасно; если, однако, такой
инструкции нет, то программа прерывается и помещается в конец
очереди программ, ожидающих следующего интервала связи с CPU.
Разделение времени относится к активным методам в том
смысле, что его основной механизм управляется самой системой,
а не пользователями.
Математическое обеспечение систем мультипрограммирования
и разделения времени
Присутствие в основной памяти нескольких программ создает ряд
трудностей, которые обычно решаются программными средства-
хми. Несколько следующих страниц мы посвятим рассмотрению
некоторых из этих трудностей и обсуждению, в общих чертах,
программно реализуемых решений, которыми можно было бы
воспользоваться. Чтобы наметить план такого обсуждения,
представим вычислительную систему как совокупность следующих
пяти компонентов:
1. Время CPU.
2. Основная память.
3. Регистры.
4. Устройства ввода — вывода.
5. Файлы данных и библиотеки.
Мультипрограммирование и разделение времени вызывают
трудности в использовании каждого из этих компонентов; эффективная
94
Глава в
операционная система должна осуществлять оптимальное
использование всех перечисленных выше ресурсов.
Прежде чем идти дальше, сделаем еще одно замечание.
Реально найдется немного систем, реализующих только критерий
максимальной пропускной способности или минимального
времени обращения; чаще всего выбирается некоторый компромисс
между упомянутыми критериями. В дальнейшем мы будем часто
отмечать это обстоятельство.
Распределение времени CPU
Что происходит, когда две программы завершают операцию ввода —
вывода в один и тот же момент времени? Обе программы готовы
возобновить счет (рис. 6.6), но CPU в данный момент может
управлять только одной из них. Какая должна быть первой? Какая
из них первой попала в память? Или последней? Самая длинная?
Или самая короткая? Или та, которая находилась в памяти
дольше остальных? В соответствии с хорошо известным «законом»
обработки данных и инженерной практики, «если что-то может
произойти, то оно обязательно произойдет». Таким образом,
в любой реальной системе мультипрограммирования должна быть
предусмотрена возможность такой ситуации.
Программа А
Программа В
Запуск
ббода-быбода
Ожидание
Завершение ббода-бывода
♦
Ожидание
Запуск ^
ввода-бывода
Ожидание
Завершение ббода-быбода
*
Время
Рис. 6.6. Конфликтная ситуация — обе программы готовы возобновить
счет в один и тот же момент времени.
Одним из возможных решений могла бы быть печать
сообщения на консоли оператора, описывающего возникшую ситуацию
и требующего ответа. В лучшем случае на это потребовалось бы
несколько секунд. За эти несколько секунд ЭВМ
микросекундного цикла, по всей вероятности, могла бы выполнить все команды
обеих программ до их следующего обращения к устройствам
ввода — вывода. Время реакции человека зачастую слишком велико.
Обычно применяемый подход состоит в написании программы,
принимающей решение. В такой программе может быть
реализовано практически любое правило принятия решения («последним
вошел» — первым вышел», «первым вошел — первым вышел»,
Мультипрограммирование и разделение времени 95
«наиболее трудоемкая задача —первая» и т.д.). Существуют
хорошие и плохие правила, но важно то, что решение
принимается программой, специально написанной для этой цели.
Эта небольшая программа является частью операционной
системы. Обычно она размещается в той части основной памяти,
которая отводится для хранения модулей операционной системы,
или программ супервизора. На рис. 6.7 показана схема
распределения основной памяти в типичной системе
мультипрограммирования; место для размещения «онлайновых», или резидентных,
Пяаниробщик
приоритетов
CPU
Резидентные модули
операционной системы
Прикладная программа л/*7
Прикладная программа a/s2
Рис. 6.7. Распределение основной памяти при мультипрограммировании.
модулей операционной системы отводится в младших физических
адресах основной памяти; показано также возможное
размещение программы разделения функций CPU. Эта последняя
программа вызывается в каждой конфликтной ситуации,
вырабатывая затем решение с максимально достижимой для ЭВМ скоростью.
Для принятия таких решений часто используется
определенная схема приоритетов. Приоритет задания может указываться
в карте JOB, и, попав в память машины, задание с наивысшим
приоритетом в любой конфликтной ситуации первым получает
управление CPU. В модуле операционной системы,
осуществляющем распределение приоритетов, могут быть реализованы по
существу любые правила распределения, лишь бы они были
программируемы. Существуют, конечно, определенные практические
ограничения — зачем тратить десять секунд, решая, какую из
программ, выполняемых за три секунды, запустить первой?
Важно не забывать, что такое решение принимается программой,
написанной с использованием команд языка ассемблера, который
может быть использован любым прикладным программистом.
В системе разделения времени используется таймер,
инициирующий в длинных программах выполнение псевдооперации
ввода — вывода, тем самым вынуждая программу освободить CPU
96
Глава 6
для другого пользователя. Большинство современных ЭВМ имеет
аппаратно реализованный таймер, установка которого может
выполняться программой операционной системы. Если время
счета прикладной программы превышает заданное, то таймер,
подобно будильнику, посылает в CPU сигнал, называемый
прерыванием. Так как большинство центральных процессоров не могут
функционировать независимо, то для обработки прерываний от
таймера нужна какая-то программа. Такая программа является
еще одним модулем операционной системы (рис. 6.8).
Планиробщик Обработчик
приоритетов прерываний
CPU от таймера
Резидентные модули
операционной системы
Прикладная программа V- /
Прикладная программа ri*2
Прикладная программа №3
Рис. 6.8. Обработчик прерываний от таймера как модуль операционной
системы.
Помимо использования в режиме разделения времени таймер
играет важную роль в минимизации возможных последствий
«бесконечных циклов». Рассмотрим следующее тривиальное
выражение на Фортране:
5 GO ТО 5
Результат кодирования такой команды должен быть
очевиден (настолько очевиден, что программисты в действительности
очень редко допускают такую ошибку); команда с номером 5
исполняется снова и снова, и так без конца, если, конечно, для
программы не задано определенное время, по истечении которого
она прерывается и выводится из системы.
Приоритеты и таймер могут использоваться либо для
повышения пропускной способности, либо для уменьшения времени
обращения и в некоторых случаях для того и другого. Конкретный
характер модулей операционной системы, используемых для
управления распределением времени CPU, будет зависеть от
относительного значения, придаваемого каждому из этих критериев
в конкретной вычислительной установке.
Мультипрограммирование и разделение времени 97
Распределение памяти
Большинству программистов известно о случаях разрушения
данных, когда из-за ошибки в программе портится константа
или обнуляется содержимое счетчика. Оверлейные структуры
программ, описанные в предыдущей главе, могут служить
хорошим примером преднамеренного разрушения разделов программы.
Обучаясь, программист очень скоро узнает, что ЭВМ может
«забывать» столь же эффективно, как и «запоминать».
В системе мультипрограммирования это составляет серьезную
проблему. Вообразите, что стало бы с вашей программой, если
какой-нибудь «безумный подвижник» взялся бы упорядочивать
ее команды по алфавиту, пока она ожидает завершения операций
ввода или вывода. Одно дело —случайное или преднамеренное
разрушение данных внутри программы, и совсем другое —
возможность непредсказуемых воздействий одних программ на
другие. Если в основной памяти содержится больше одной
программы, то их необходимо защищать одну от другой. Защита памяти
является еще одной функцией операционной системы. Ни один
оператор.не успевал бы своевременно принимать меры,
исключающие разрушение одной программы другой. Защита памяти
должна осуществляться со скоростью, равной быстродействию
ЭВМ; таким образом, модуль защиты памяти является весьма
важным резидентным модулем операционной системы.
Распределение памяти. Планирование заданий
В системе мультипрограммирования даже простая загрузка
программ в основную память сталкивается с трудностями. В системах
последовательной пакетной обработки, описанных в гл. 5, эта
функция выполнялась оператором; распределение заданий по
классам и, быть может, приоритетам упрощало эту операцию; тем
не менее планирование заданий в процессе их первоначальной
загрузки в память выполнялось исключительно вручную. Однако
следует ли рассчитывать на то, что оператор справится с задачей
распределения в памяти десяти или пятнадцати различных
программ? Можно ли надеяться, что человеку удастся следить за
изменением состояний всех этих программ и в точно указанный
момент времени вводить новые программы в соответствующие
зоны памяти? Действительно, очень проворный оператор, быть
может, и смог бы выполнять столь сложную работу, но уж
определенно не с микросекундными скоростями. В большинстве систем
мультипрограммирования задача планирования заданий решается
средствами программного обеспечения операционной системы.
Один из широко используемых методов включает управление
очередностью заданий. Каждое задание приписывается к опре-
4-821
98
Глава 6
\ЮВ CLASS=A
'JOB CLASS=B
"JOB CLASS=A
" Входной поток заданий
Модуль упраб-
ления
очередями заданий
Резидентные модули
операционной системы
Прикладные программы
Очередь
масса
А
Очередь
масса
В
Очередь
масса
С
Рис. 6.9. Построение очередей заданий.
деленному классу. К классу А можно было бы отнести десяти-
секундные задания, использующие лишь устройства чтения карт
и печатающее устройство; класс В можно было бы составить из
заданий, требующих до 30 с времени CPU и не более двух лен-
топротяжек и т. д. Класс каждого задания указывается в карте
JOB. Задания считываются программным модулем операционной
системы и с помощью техники спулинга помещаются в одну из
очередей заданий; задания класса А отправляются в очередь А,
задания В составляют очередь В и т. д. (рис. 6.9). Таким образом,
сходные задания могут быть объединены в группы.
Впоследствии эти задания могут быть извлечены в онлайновом
режиме из памяти устройства (часто им оказывается диск), куда
они были записаны в процессе спулинга и считаны в основную
память с помощью программного модуля операционной системы
инициирования заданий. Поскольку сходные задания
объединяются в группы, то в этом модуле инициирования заданий можно
предусмотреть такую последовательность загрузки программ, кото-
Мультипрограммирование и разделение времени
99
рая максимизирует эффективность системы. Часто некоторую
часть памяти ЭВМ отводят для хранения простых заданий,
которые используют лишь устройства чтения карт и печати и требуют
незначительного внимания со стороны оператора, поскольку
параметры, определяющие ввод данных с перфокарт* указываются
в исходной колоде, содержащей и задание, и, таким образом,
также доступны для обработки в ЭВМ. Задания, использующие
магнитную ленту, могут выполняться параллельно, занимая
другой раздел памяти (рис. 6.10). После любого задания другим
модулем операционной системы, называемым терминатором заданий,
стираются все ссылки, касающиеся завершенного задания,
и управление передается модулю инициирования заданий,
работой которого начинается повторение данного цикла. Все это,
конечно, происходит в период времени, определяемый
быстродействием ЭВМ.
Мы уже обсудили трудности, связанные с планированием
функций CPU, распределенных между несколькими заданиями,
находящимися в основной памяти; в данном разделе наше
рассмотрение касается прежде всего проблемы записи в память программ
заданий. Эти вопросы не являются независимыми; хорошая
программа инициирования заданий может свести к минимуму
проблемы процессорного планирования.
Очередь
масса
А
Очередь
масса
б
Очередь
масса
С
Резидентные модули
операционной системы
Инициатор
заданий
Программа класса А
Программа масса С
Программа масса А
Рис. 6.10. Инициализация заданий.
В системе разделения времени планирование несколько
усложняется. Довольно часто большое число пользователей пытается
одновременно установить связь с помощью (как правило,
удаленных) терминалов. Большое число программ само по себе
представляет серьезную проблему — основная память имеет
ограниченный объем. Эта проблема в большинстве случаев решается
4*
100
Глава 6
с помощью той или иной процедуры свертывания —
развертывания. В своей простейшей форме она сводится к тому, что
программа, завершившая этап интенсивных процессорных операций,
копируется на диск, освобождая место в основной памяти для
другой программы. Когда свернутая программа снова обнаруживает
необходимость в интенсивном использовании CPU, она
копируется в основную память. Сравнительно низкая скорость реакции
человека делает практически неощутимыми для пользователя
операции ввода и вывода, связанные с процедурами свертывания
и развертывания. В качестве примера см. рис. 6.11.
Пврбый шаг
Второй шаг
н
Рис. 6.11. Логика свертывания — развертывания.
Будучи давно практикуемой в среде профессиональных
программистов логика процедур свертывания — развертывания
применима не только в системах разделения времени. Развитие этой
идеи легло в основу систем виртуальной памяти, описываемых
в одной из последующих глав.
Планирование заданий довольно очевидным образом влияет
на эффективность системы. Определенные классы заданий могут
исполняться в первую очередь, тем самым уменьшая время
обращения программ этих классов. Альтернативой могло бы служить
такое планирование заданий, в котором за счет увеличения
времени обращения повышается пропускная способность (исполнение
в первую очередь наиболее длинных заданий). Программное
обеспечение, управляющее очередностью и инициированием
заданий, следует тщательно спроектировать, максимизируя тот
критерий, который для данной вычислительной установки
рассматривается в качестве показателя (или показателей) ее
эффективности.
Мультипрограммирование и разделение времени 101
Регистры
Вопреки распространенному убеждению используемые
программистом регистры не являются исключительно его собственностью.
Все программы должны использовать один и тот же набор
регистров. Так как содержимое регистров может изменяться в процессе
исполнения программы, то с этим могут быть связаны трудности
реализации мультипрограммирования.
По крайней мере частичным решением может служить
принятие соглашений о регистрах. Непосредственно перед тем, как
программа переводится в режим ожидания, содержимое всех
регистров копируется в защищенную область основной памяти.
Когда программа готова восстановить связь с процессором,
значения регистров вновь загружаются из этой защищенной области.
Программисты, использующие язык ассемблера, знакомы с этими
соглашениями о регистрах по крайней мере в связи с написанием
макрокоманд. Программисты, использующие языки высокого
уровня, не рассматривают детально эти соглашения, но тем не
менее они должны соблюдаться. Функции сохранения и
восстановления регистров осуществляются многими модулями
операционной системы; во избежание дублирования программ,
реализующих соглашения о регистрах, последние часто включаются
в резидентную часть операционной системы в форме стандартной
подпрограммы.
Распределение устройств ввода — вывода
Рассмотрим ситуацию, когда две разные программы пытаются
использовать одно и то же лентопротяжное устройство, одна —
для ввода, а другая —для вывода данных. Хаос! Что
происходит, когда программа обращается к ленте или диску, которые по
какой-то причине недоступны? Программа остается в основной
памяти до тех пор, пока устройство не освободится, впустую
расходуя ресурсы памяти. Это лишь две из большого числа проблем
распределения устройств ввода—вывода, создаваемых
мультипрограммированием. В системе последовательной пакетной
обработки каждая программа постоянно управляется CPU и в
процессе счета располагает всеми устройствами ввода — вывода;
в мультипрограммировании к этим устройствам должны иметь
доступ и другие программы. Одно и то же устройство прямого
доступа может использоваться несколькими различными
программами при поиске или записи данных, однако магнитная
лента, перфокарты, печатающее и многие другие устройства не
отличаются такой степенью гибкости. Необходима та или иная
форма управления операциями ввода —вывода.
102 Глава 6
Прежде всего управление касается загрузки программы.
Попросту говоря, если все устройства ввода —вывода,
необходимые для работы данной программы, недоступны, то стоит ли
заниматься ее загрузкой и инициированием? Следует загрузить
какую-нибудь другую программу и опросить устройство еще раз
несколько позже. Для этой цели обычно заводится таблица
текущего состояния занятости всех устройств ввода — вывода
системы, размещаемая в резидентной части операционной системы.
Перед загрузкой программы по этой таблице проверяется
доступность требуемых программе устройств ввода — вывода и вносятся
пометки о всех используемых программой устройствах. Когда
в дальнейшем к загрузке готовятся другие программы, они
предварительно проверяются по той же самой таблице, что
минимизирует риск одновременного обращения нескольких программ
к одному и тому же устройству или появления программы,
задержавшейся в основной памяти ЭВМ из-за недоступности
требуемого ей устройства. Программы, оказавшиеся в таких
ситуациях, попросту выводятся из основной памяти и не загружаются
в нее до то:: пор, пока не освободится требуемое устройство.
Описанная проверка обычно относится к функциям модуля
инициирования программ, о котором упоминалось выше. Эта процедура
может отличаться конкретными деталями реализации в
отдельных операционных системах, однако идея проверки таблицы
доступности устройств весьма распространена.
Если потребность в устройствах ввода — вывода должна
проверяться программными средствами, то необходимая
информация должна передаваться в операционную систему в понятной
для машины форме; диспетчерская книга времен второго
поколения здесь не годится. Для достижения этой цели фирмой IBM
используются специальные управляющие перфокарты. Мы уже
рассмотрели функции двух управляющих карт:
// JOB GLASS =A •
и
// EXEC COBOL
которые соответственно разделяют задания и идентифицируют
вызываемую к исполнению программу. Третьим типом
управляющей карты является карта определения данных; программист
должен включать такую карту для каждого набора данных,
запрашиваемых программой. Типичная карта DD, такая, как
//ТАРЕ DD UNIT = 2400, ...
описывает с помощью ряда параметров отдельный (в данном
случае размещаемый на ленте) набор данных. Некоторые детали
языка управления заданиями фирмы IBM мы рассмотрим в части III.
Мультипрограммирование и разделение времени 103
Коль скоро программа уже в памяти, то мы знаем, что все
запрашиваемые устройства ввода —вывода доступны и все
ожидаемые операции ввода —вывода исполнимы. Но здесь наши
проблемы еще не кончаются. Каким образом мы можем избежать
случайного или преднамеренного разрушения существующих
данных? Как нам исключить конфликт, возникающий в
результате того, что две или большее число программ пытаются на
законном основании обращаться к одному и тому же пакету дисков?
Общепринятым решением является подчинение всех операций
ввода и вывода некоторому резидентному модулю операционной
системы. Команды, с помощью которых осуществляется
фактическое выполнение операций ввода и вывода данных,
объявляются привилегированными, т. е. они могут использоваться только
модулем операционной системы. Прикладные программы не
могут непосредственно связываться с устройством ввода —
вывода, но, установив определенные значения в ряде управляющих
полей, передают управление операционной системе, запускающей
необходимые физические операции. Таким образом, управление
всеми действиями по вводу и выводу осуществляется одним и тем
же модулем, в котором предусмотрены всесторонняя проверка
и контроль.
Распределение устройств ввода — вывода.
Спулинг
Офлайновый (т. е. не использующий CPU) спулинг, как вы,
вероятно, помните, характерен для систем второго поколения.
В третьем поколении спулинг становится онлайновой операцией.
Описанная выше функция управления очередностью заданий
является по существу некоторой формой спулинга, в процессе
которого перфокарты с данными, принимаемые устройством чтения
перфокарт, пересылаются в более быстродействующее устройство,
работающее в онлайновом режиме. Данные к программе,
представленные на картах, входят, естественно, в образ
составляющей задание колоды перфокарт и могут быть при необходимости
непосредственно считаны с онлайнового устройства. Многие
системы включают не только спулинг ввода, но и спулинг вывода —
с пересылкой данных сначала на диск или ленту и последующей
распечаткой на бумаге печатающего устройства.
В онлайновом спулинге используются преимущества,
обеспечиваемые высоким быстродействием современных ЭВМ; по существу
он представляет собой еще один уровень
мультипрограммирования. Когда все программы, загруженные в систему, оказываются
в состоянии ожидания (для быстродействующих ЭВМ характерна
работа с десятью или пятнадцатью программами), вызываются
программы спулинга ввода и вывода, запускающие физические
104 Глава 6
операции чтения перфокарт и распечатки листингов. Эти
медленные одерации имеют место, когда система ничем не занята.
Устройства ввода — вывода и разделение
времени
В системе разделения времени управление операциями ввода и
вывода оказывается еще более сложным, поскольку с системой
могут быть связаны сто и более различных терминалов. Одно из
решений проблемы множественного доступа к ЭВМ состоит в том,
что система воспринимает операции ввода и вывода так, как если
бы они осуществлялись только при участии контроллера,
независимо от количества подсоединенных к нему терминалов.
Рассмотрим в качестве примера систему, изображенную на рис. 6.12.
Здесь контроллер составлен из четырех независимых блоков,
называемых портами. Порт 1 может быть связан телефонной
линией с любым из ста (или большего числа) терминалов, но что
касается ЭВМ и ее операционной системы, то они обмениваются
информацией только с портом 1. Физическая реализация такой
связи является функцией аппаратных средств контроллера.
ЭВМ
Канал
Рис. 6.12. Контроллеры системы разделения времени.
Управление данными
Основные идеи управления данными в ЭВМ второго поколения
с некоторыми важными усовершенствованиями и модификациями
были перенесены в системы третьего поколения. По-прежнему
используются те же методы организации файлов, методы доступа,
программы формирования и проверки меток, библиотеки, компи-
i
Порт №1
Порт №2
Порт № 3
Порт №4
без участия ЭВМ
Мультипрограммирование и разделение времени
105
ляторы и макрокоманды. Основной прогресс в системах третьего
поколения касается характеристик самой ЭВМ; поэтому не
удивительно, что и прогресс в области управления данными не столь
заметен.
В современных системах макрокоманды OPEN и CLOSE
сложнее, чем они были в ЭВМ второго поколения, что объясняется
главным образом мультипрограммным характером новых систем.
Планировщик
приоритетов СРП
Терминатор
заданий
Системный
быбод
Обработчик
прерыбаний
от таймера
Подпрограммы
соглашений
о регистрах
OPEN
Модуль
защиты памяти
Таблицы
занятости
устройств
CLOSE
Упрабление
очередями
заданий
Программы у проб
ления вводом -
быбодом
Таблицы
Инициатор
заданий
Системный
ббод
Управление
библиотеками
Прикладная программа л/=/
1
Рис. 6.13. Резидентные модули операционной системы.
В дополнение к функциям проверки меток и выдачи сообщений
об установке носителей макрокоманда OPEN является
прекрасным средством формирования таблиц, необходимых для
обеспечения операций ввода и вывода. Все указатели в таблице
стираются макрокомандой CLOSE, как только программа отказывается
от соответствующих устройств; таким образом, устройства
оказываются занятыми только при действительном их использовании
программами. Поскольку эти две макрокоманды почти наверняка
используются в каждой программе, находящейся в памяти, они
часто входят в состав резидентных модулей операционной
системы (рис. 6.13), что позволяет просто включать эти модули в
индивидуальные программы в процессе редактирования связей.
Библиотеки
Библиотека представляет собой специальную форму хранения
файлов. В системах третьего поколения обычно обслуживаются
те же самые типы библиотек, какие были рассмотрены в
предыдущей главе, — одна для компиляторов и служебных программ
(утилит), другая —для программ пользователей и третья —
для макрокоманд. Ряд дополнительных типов библиотек тре-
106 Глава 6
буется для обеспечения некоторых специальных требований
систем третьего поколения и мультипрограммирования. Одной из
них является библиотека супервизора, содержащая те модули
операционной системы, хранение которых в основной памяти не
оправдано. В другой — хранятся часто используемые при
решении практических задач наборы команд управления заданиями;
один элемент такой библиотеки может содержать, например, все
команды JCL, необходимые для компиляции Кобол-программы.
Рис. 6. f4. Библиотечный набор данных.
Библиотека отличается от других видов данных. Прежние
представления полей, записей и файлов уже не соответствуют ее
организации; основным элементом библиотеки является
законченная программа или полное макроопределение. Для
обозначения любых, рассматриваемых как единое целое совокупностей
данных — будь то стандартный файл данных или библиотека — был
введен в употребление термин набор данных; это понятие шире
понятия «файл».
Для хранения элементов библиотек часто используется
специальная организация данных, называемая библиотечной.
Представим на минуту, что у нас имеется библиотека объектных
модулей на перфокартах. Каждая программная колода
перфокарт тщательно помечена и положена на стол (рис. 6.14). Для
запуска данной программы оператору требуется лишь выбрать
соответствующую колоду и установить ее в устройство чтения
карт. В библиотечном наборе данных объектные или загрузочные
Мультипрограммирование и разделение времени 107
модули копируются на диск, при этом в указателе набора
фиксируются начальный и конечный адреса каждого элемента набора.
При загрузке программы в указателе отыскивается начальный
адрес, в соответствии с которым элемент набора копируется в
основную память.
Управление данными является функцией операционной
системы. Программы, обеспечивающие эту функцию, часто входят в
состав резидентных модулей операционной системы.
Операционная система
Операционная система представляет собой совокупность
программ. Эти программы предназначаются для повышения
эффективности системы обработки данных. Отдельные ее программы
обеспечивают лучшее использование каждого из основных видов
системных ресурсов —времени CPU, основной памяти,
регистров, устройств ввода —вывода и данных. Вследствие своего
частого использования модули идеальной операционной системы
представляются в виде компактных, хорошо написанных
стандартных программ. Они должны быть реентерабельными
—способными обслуживать несколько конкурентных вызовов — и
допускать повторное использование. Часто требуется, чтобы они были
рекурсивными, т. е. допускающими запросы из вызванной
программы. И тем не менее это не более чем программы. За
исключением нескольких привилегированных команд, используемый в
них набор операций тот же самый, какой предоставляется
прикладному программисту, составляющему программы на языке
ассемблера.
Не все операционные системы размещаются в основной памяти.
Многими вычислительными установками используется дисковая
операционная система, индивидуальные модули которой
хранятся на диске и при необходимости считываются в основную память.
Это экономит основную память, но требует дополнительного
процессорного времени — быстродействие даже высокоскоростных
устройств ввода — вывода прямого доступа значительно ниже
скорости выполнения операций CPU. Дисковые операционные
системы обычно используются в малых ЭВМ, обладающих
небольшим быстродействием, для которых объем основной памяти
имеет определяющее значение и несоответствие скоростей
операций ввода —вывода и процессорной обработки менее ощутимо,
чем для больших ЭВМ.
Другой крайний случай представляют операционные системы,
целиком размещаемые в основной памяти. С точки зрения
скорости обработки такая конфигурация является оптимальной,
однако модули операционной системы занимают значительное место
основной памяти, которое, быть может, следовало бы использо-
108 Глава в
вать для прикладных программ. Для большинства систем
принимают компромиссное решение, состоящее в том, что наиболее
важные модули размещаются в основной памяти, тогда как менее
важные хранятся в библиотеке на устройствах прямого доступа
и считываются в память по мере необходимости (рис. 6.15).
Часто для хранения собственно системных подпрограмм выделяется
отдельная библиотека, другую же системную библиотеку
образуют такие средства обеспечения программистов, как
компиляторы, служебные программы и макрокоманды.
Резидентная область
операционной системы
Транзитная область операционной
системы
Область прикладных программ
библиотека \
супервизора J
Компилятора
утилиты,
макросредсШ
Рис. 6.15. Компоненты операционной системы, размещаемые в основной
памяти и на диске.
Программы операционной системы предназначены для
повышения эффективности системы, но сами по себе не выполняют
никакой полезной работы. Как и любая другая программа, модуль
операционной системы расходует процессорное время. Эти
модули занимают определенное место в основной памяти. Однако без
этих автоматизированных средств управления ресурсами системы
современные высокоскоростные ЭВМ были бы экономически
неоправданными.
Краткие выводы
В этой главе мы рассмотрели развитие средств программного
обеспечения систем мультипрограммирования и разделения
времени. Мультипрограммирование, как способ конкурентной
обработки нескольких программ, представляет собой одно из решений
проблемы крайнего несоответствия между скоростями ввода
вывода и процессорной обработки; суть
мультипрограммирования состоит в том, что оно позволяет во время сравнительно
продолжительных операций ввода и вывода переключать систему
Мультипрограммирование и разделение времени 109
на выполнение других заданий. Одновременное размещение в
основной памяти многих программ ставит ряд новых задач,
связанных с управлением распределения времени центрального
процессора, распределением основной памяти, использованием
регистров, распределением устройств ввода и вывода и управлением
данными. Операционная система представляет собой
совокупность программ, предназначенных для решения этих задач.
УПРАЖНЕНИЯ
1. Чем объясняется необходимость использования
операционных систем мультипрограммирования для ЭВМ третьего
поколения?
2. Выше отмечалось, что мультипрограммирование по
существу является пассивным методом, тогда как квантование времени
в системе разделения времени позволяет достигнуть более
целенаправленного управления функционированием системы.
Поясните это положение.
3. Почему распределение функций GPU столь важно в
мультипрограммной системе? Почему распределение времени CPU не
может осуществляться оператором?
4. Почему распределение основной памяти столь важно в
мультипрограммной системе?
5. Почему распределение устройств ввода —вывода столь
важно в мультипрограммной системе?
6. Поясните различие между внутренним (в ЭВМ) и внешним
приоритетами программы.
7. Чем объясняется необходимость защиты памяти в
мультипрограммной системе?
8. Поясните, как осуществляется управление очередностью
заданий.
Часть III
ЯЗЫК УПРАВЛЕНИЯ ЗАДАНИЯМИ
В СИСТЕМАХ IBM/360 И IBM/370
Глава 7
УПРАВЛЕНИЕ ЗАДАНИЯМИ В ДИСКОВОЙ
ОПЕРАЦИОННОЙ СИСТЕМЕ ФИРМЫ IBM
Введение
Для второго поколения ЭВМ подробная инструкция о
прохождении задания доводилась до сведения системных операторов
соответствующими записями в диспетчерском журнале для
программистов. В современных мультипрограммных системах многие из
прежних функций оператора выполняются программно
реализованными средствами, входящими в операционную систему.
Старина Боб, оператор третьей смены, возможно, разобрался бы в
смысле записи «Уст-ть лен. ном. АВ1253», однако большинство
существующих программ не обладает такими возможностями.
Прежние рукописные или машинописные диспетчерские журналы
прохождения программ уже не приемлемы. Процесс общения
программиста с современной вычислительной системой требует
тщательной организации.
Для этой цели фирмой IBM был разработан новый язык,
применимый практически в любых случаях, —язык управления
заданиями (JCL); в следующих трех главах рассмотрены некоторые
особенности этого языка. Здесь же основное внимание уделено
процессу управления заданиями в дисковой операционной
системе (DOS) фирмы IBM. В гл. 8 и 9 будет рассмотрен значительно
более сложный язык управления заданиями, разработанный для
обеспечения функций операционных систем OS/360 и OS/370.
Мы не ставим целью глубокий анализ всех возможностей этих
языков — об этом написаны целые книги. Ограничимся
рассмотрением ряда наиболее широко используемых средств языка
управления заданиями, с которыми рядовой программист
сталкивается в своей каждодневной работе. Слишком часто первые
попытки программиста в освоении языка управления заданиями
ассоциируются с отпугивающим и нарастающим, подобно снежной
лавине, множеством операторов, параметров, субпараметров и
других данных. Поэтому, опустив некоторые редко используемые
средства управления заданиями, можно избежать подобной
ситуации и сохранить ясное понимание истинного назначения этих
специальных языков.
Управление заданиями в DOS 111
Дисковая операционная система фирмы IBM может служить
хорошим примером операционной системы, предназначенной для
обработки прикладных программ в ЭВМ малой и средней
производительности. DOS обеспечивает режим
мультипрограммирования, причем последними ее версиями допускается конкурентное
исполнение до шести программ, включая резидентный компонент
операционной системы. Язык управления заданиями в DOS имеет
простую структуру и довольно легко воспринимается; таким
образом, он может служить отправной точкой в нашем изучении
структурированных средств общения программиста с системой.
Прежде чем приступить к обсуждению языков управления
заданиями, необходимо сделать несколько замечаний. Во-первых,
называясь языками, в действительности они не предназначены
для написания программ; управление заданиями относится к
вспомогательным программным средствам, необходимым для
описания реально исполняемых программ и устройств ввода и
вывода, используемых в процессе выполнения задания.
Во-вторых, язык, обеспечивающий выполнение отмеченных выше функ*
ций, должен быть единым для всех пользователей; таким образом,
средства этого языка предназначены для реализации любых
методов использования устройств ввода и вывода, в том числе и самых
совершенных, которые представляют интерес лишь для немногих
профессиональных системных программистов. Чаще всего
трудности, связанные с освоением языков управления заданиями,
появляются в процессе обучения программистов всем
возможностям языка, даже мало известным или редко используемым.
Язык управления заданиями обычного использования не труден
для понимания. С ним ассоциируются точность выражений, быть
может, некоторое разочарование, но не трудности
Карта JOB в DOS
Важнейшие функции управления заданиями связаны с
разделением заданий и их идентификацией; в DOS эти функции
выполняются с помощью карты JOB. Общая форма карты JOB в DOS
имеет следующий вид:
// JOB имя задания учетная информация
Две косые черты (//) являются признаком управляющей карты;
они должны занимать первую и вторую колонки. Две косые
черты отделяются от ключевого слова JOB, идентифицирующего
карту JOB, одним или несколькими пробелами. «Имя задания»
включает не более восьми алфавитно-цифровых символов,
выбранных программистом для идентификации задания. Внесение
учетной информации не обязательно; если в данном вычислительном
112 Глава 7
центре она используется, то учетная информация отделяется от
имени задания одним или несколькими пробелами.
Отметьте употребление пробелов в карте JOB; пробелы
используются для разделения полей. По этой причине пробелы
не могут входить в запись имени задания.
Любой набор, включающий от одного до восьми алфавитно-
цифровых символов, составляет допустимое имя задания,
например:
// JOB DAVIS
— вполне приемлемая карта JOB. Если программист желает
обозначить разные программы различными именами, то он может
записать
// JOB DAVIS1
для своего первого задания и
// JOB DAVIS2
для второго.
Краткий анализ почти любой телефонной книги позволяет
сказать, что такой способ выбора имен заданий не исключает
возможность дублирования последних. Чтобы избежать этих
трудностей, в большинстве организаций устанавливается
стандартная процедура назначения имен заданий. В одних случаях
имя задания может включать префикс, идентифицирующий
подразделение, за которым следует порядковый номер;
// JOB PG0015
может, например, обозначать задание номер 15
планово-производственного (Production Control) отдела. В других случаях
имена заданий могут связываться с функцией программы,
используя
// JOB PAYROLL1
для обозначения одной из наиболее распространенных программ.
Карта JOB должна быть первой картой в колоде задания.
Она определяет начало нового задания.
Карта EXEC в DOS
Картой EXEC определяется та конкретная программа, которая
должна быть загружена в память ЭВМ и исполнена. Общая
форма этой карты имеет вид
1 PAYROLL или PAYSHIT — «платежная ведомость» — название
программы начисления заработной платы. — Прим, перев.
Управление заданиями в DOS
113
'Карта
Выполненных работ
Ошибочные
данные
(Старт \
задания J
Программа
редактирования
Программа
сортиробки
Программа
начисления заработной
платы
Программа
подготобки
отчетов
(Шеи \
задания J
Выплаты
по чекам
Отчетные
документы
Рис. 7.1. Типичное четырехшаговое задание.
// EXEC имя программы
И в этом случае две косые черты (//) должны перфорироваться
в колонках 1 и 2. Одним или несколькими пробелами эти две
черты отделяются от ключевого слова EXEC, которым
обозначается карта EXEC. Слово EXEC отделяется одним или
несколькими пробелами от имени программы; имя программы
используется для идентификации хранящегося в библиотеке программного
модуля. Следует заметить, что имя программы никак не связано
с именем задания, за одним исключением: подобно имени задания,
114 Глава 7
имя программы содержит от одного до восьми
алфавитно-цифровых символов. Имя задания необходимо для идентификации
конкретного задания, выполняемого ЭВМ в данный момент времени.
Для самой вычислительной системы одновременно с
завершением задания перестает существовать и имя задания (до тех пор,
пока не возникнет необходимость повторного выполнения того же
задания). С другой стороны, имя программы используется для
идентификации определенной программы, входящей в системную
библиотеку; после завершения задания такая программа
продолжает существовать как элемент библиотеки для
последующего использования, быть может, в другом задании. Еще одно
важное различие между именами программы и задания состоит в
том, что имя задания может определять задание, состоящее из
нескольких программ, каждая из которых имеет имя.
Рассмотрим, например, типичное задание обработки данных,
изображенное на рис. 7.1. На первом «шаге задания» карты
выполненных работ считываются в программу редактирования,
которая фиксирует возможные ошибки перфорации. Правильные
данные впоследствии упорядочиваются программой сортировки на
втором шаге задания. Затем упорядоченные данные вместе с
содержимым главного файла, определяющего текущие значения
тарифных ставок заработной платы, считываются программой
начисления зарплаты. Последний шаг задания (заметьте, что слова
«шаг задания» употребляются уже без кавычек, шаг задания —
это не что иное, как отдельная программа, исполняемая в составе
данного задания) состоит в выполнении программы подготовки
отчетов, которая формирует документы для планового отдела.
Для этого задания можно было бы использовать следующие
операторы языка управления заданиямиз
// JOB PAYROLL
// EXEC PAYEDIT
// EXEC SORT
// EXEC PAYROLL
// EXEC PAYAUDIT
/&
Для каждой программы этого задания (другими словами, для
каждого шага задания) требуется карта EXEC; каждая из четы*
рех названных программ существует в форме загрузочного
модуля как элемент системной библиотеки. Приняв оператор
// EXEC PAYEDIT
Управление заданиями в DOS 115
программа-загрузчик DOS считывает в основную память ЭВМ
копию программы с этим именем и передает управление CPU на
первую команду программы.
Вы, вероятно, заметили, что именем задания и именем третьей
программы является один и тот же идентификатор PAYROLL.
В таком употреблении нет никакой ошибки, оно вполне
допустимо. Однако в данном случае это простое совпадение, имя задания
и имя входящей в него программы никак не связаны между собой,
если только программист намеренно не пользуется названиями,
соответствующими назначению программы или задания. В
операционной системе такая возможность не анализируется; мы могли
бы назвать это задание MELVIN, как это сделано в операторе
// JOB MELVIN
и тем не менее использовать те же самые программы.
Компиляция и редактирование связей
Большинство программистов нуждается не только в
использовании программ, составляющих библиотеку, но и в средствах
включения в последнюю своих собственных программ. Обычно первым
шагом этого процесса является компиляция. Компилятор —это
программа, преобразующая входные данные в форме
предложений на языке программиста в объектный модуль. Как и любая
другая программа, компиляторы хранятся в библиотеке и
загружаются операционной системой в основную память при обработ-
, ке карты EXEC, содержащей имя компилятора. Для
компиляции программы на Коболе программист мог бы написать
следующие команды:
// JOB TEST1
// EXEC COBOL
> исходная колода
/*
/& .
Кстати, уже второй раз нам встречается карта /& . Этой картой
отмечается конец задания.
В приведенном выше задании будут выданы только листинг
программы, сообщение об ошибках компиляции и колода карт
объектного модуля. Как только в программе будут устранены все
116 Глава 7
ошибки ассемблирования или компиляции, программист
наверняка вахочет опробовать ее в работе; для этого должна быть
использована еще одна управляющая карта — карта OPTION. В
общем елучае эта карта имеет следующий вид:
U OPTION опция1, опция2, опцияЗ, ...
Поясним карту OPTION простым примером, в котором
программист при первых попытках компиляции хочет отказаться от
перфорации колоды объектного модуля (нет смысла перфорировать
объектный модуль, если программа имеет ошибки компиляции).
Для этого он может записать
// OPTION NODECK
U EXEC ASSEMBLY
В DOS программисту предоставляются многие другие
возможности, связанные с этой картой; мы не станем анализировать их
все. Нас будет интересовать главным образом опция LINK
// OPTION LINK
// EXEC FORTRAN
Употребление опции LINK обеспечивает запись объектного
модуля в файл, доступный для программы редактирования связей
(LINKAGE EDITOR), и преобразование его в загрузочный
модуль.
Следующий набор операторов управления заданиями
обеспечивает компиляцию программы (здесь использован компилятор с
Кобола, но мог бы быть и любой другой), редактирование связей
и исполнение
// JOB DAVIS1
// OPTION LINK
// EXEC COBOL
Исходная ко/юда
i*
Управление заданиями в DOS 117
// EXEC LNKEDT
// EXEC
Карты данных
/*
/&
В последней карте EXEC не указано имя программы; в тех слу-
чаях* когда поле имени программы не заполнено, система
выбирает для загрузки и исполнения только что сформированный
редактором связей загрузочный модуль.
В приведенном выше примере использована еще одна, новая
карта —карта «/*». Этой картой отмечается конец данных; она
следует за последней картой исходной колоды и за последней
картой данных (если таковые имеются) и служит для
системной обрабатывающей программы указанием на то, что данная
карта —последняя. Некоторые программисты используют карту
«/*» для разделения шагов задания.
Каталогизирование программ
В дисковой операционной системе фирмы IBM загрузочные
модули, каталогизированные в библиотеке «образов памяти»,
называются фазами. Чтобы каталогизировать в этой библиотеке новую
программу, программист должен сообщить редактору связей имя
каталогизируемой программы; в DOS оно называется именем
фазы и задается с помощью управляющего оператора PHASE.
Для того чтобы выполнилось ассемблирование программы,
преобразование полученного при этом объектного модуля в
загрузочный и внесение загрузочного модуля в библиотеку образов
памяти, программист пишет следующие команды;
// JOB PGM14
// OPTION CATAL
PHASE MYPGM,*
// EXEC ASSEMBLY
Исходная ко/юда
/*
118
Глава 7
II EXEC LNKEDT
// EXEC
Карты данных
/*
/&
Если в последующем программисту понадобится вновь
использовать эту же программу, то ему достаточно записать
// JOB WHATEVER
// EXEC MYPGM
Карты данных
/*
Ранее эта программа была каталогизирована в библиотеке
образов памяти в форме загрузочного модуля (т. е. в исполняемой
форме). Системная библиотека называется библиотекой «образов
памяти», потому что отдельные загрузочные модули, или фазы,
хранятся в ней в исполняемой форме, т. е. все, что требуется для
исполнения фазы, сводится к их копированию в основную
память.
Вторым операндом в использованном выше операторе PHASE
является звездочка (*). Этим операндом определяется адрес
памяти в разметке DOS, начиная с которого следует разместить
загружаемую для исполнения фазу; звездочка в качестве операнда
указывает на то, что данная фаза должна загружаться в первой
доступной зоне памяти. Адрес загрузки может определяться
многими способами, здесь мы их рассматривать не будем. Обратите
внимание на то, что колонка 1 карты PHASE пуста. Эта карта не
относится к числу стандартных управляющих карт; она
обеспечивает функции редактора связей.
Программистам часто необходимо использовать в своих
программах подпрограммы, стандартные заголовки и другие модули,
написанные другими программистами. В DOS это достигается
использованием оператора INCLUDE. Такие подпрограммы хра-
Управление заданиями в DOS 119
нятся в форме загрузочных модулей в «перемещаемой
библиотеке» и могут быть связаны редактором связей с
каталогизированной фазой или загрузочным модулем программы написанием
таких команд, как
// JOB NAME
// OPTION CATAL
PHASE PGMA,*
// EXEC ASSEMBLY
> Исходная колода
/*
INCLUDE SUBRl
INCLUDE SUBR2
// EXEC LNKEDT
// EXEC
Карты данных
/*
/&
Каталогизированная фаза будет включать главную программу и
две указанные подпрограммы. Карта INCLUDE является еще
одной картой обеспечения редактора связей; поэтому по крайней
мере в колонке 1 должен быть пробел.
Управление вводом — выводом в DOS
В DOS каждому физическому устройству ввода —вывода,
входящему в систему, присваивается определенное символическое
имя. Прикладные программы считывают карты данных, обращаясь
к устройству SYSIPT, посылают строки данных для печати
SYSLST, обращаются к ленте, адресуясь (возможно) к SYS006,
и т. д. Точное значение конкретного символического имени может
изменяться в зависимости от выбора установки, но в каждом
120 Глава 7
вычислительном центре символическим именам приписаны
фиксированные значения. Специальные управляющие карты
требуются лишь в том случае, когда программист хочет изменить
значение того или иного символического имени.
С точки зрения программиста основным элементом
управления вводом —выводом в DOS является макрокоманда
определения файла, или DTF; для каждого файла, используемого данной
программой, программист должен написать соответствующие ко-
• ды DTF (в действительности коды DTF часто хранятся в
перемещаемой библиотеке и могут быть добавлены к загрузочному
модулю с помощью карты INCLUDE, как было описано выше; тем
не менее для каждого файла в программе должен быть код DTF).
DTF предназначается для определения основных параметров
данного файла и метода доступа, используемого при его обработке.
Каждое устройство ввода — вывода общего назначения
характеризуется своим DTF. DTFCD определяет параметры карточного
файла; DTFPR характеризует файлы печатающего устройства;
DTFMT определяет файлы на магнитной ленте; DTFSD
определяет последовательные файлы на диске или других устройствах
прямого доступа; DTFDA определяет прямой доступ к файлу на
устройстве прямого доступа. Возможны и другие сочетания
устройств и методов доступа. Наглядным примером,
иллюстрирующим характер параметров, задаваемых для выполнения
макрокоманды, может служить DTFGD; образец программы на языке
ассемблера, содержащей DTFCD, показан на рис. 7.2.
В этом примере использования DTF указываются три
параметра: DEVADDR — символическое имя физического устройства
ввода —вывода, IOAREA1 —метка начала поля памяти
длиной в восемьдесят символов, отведенного для записи вводимых
данных, и EOFADDR —адрес (метка) команды, которой следует
передать управление при обнаружении признака конца файла
(/*). В нашем примере значением адреса устройства (DEVADDR)
является SYSIPT, что как раз соответствует имени физического
устройства, обычно используемого прикладными программами
для карт входных данных; эта программа может исполняться без
упоминания устройства ввода — вывода в командах языка
управления заданиями.
Среди других параметров, кодируемых в DTF, могут быть:
размер блока, имя второй зоны памяти для устройства ввода —
вывода при использовании спаренной буферизации, типы меток,
тип файла (входного или выходного), форма записи в устройствах,
допускающих различные формы (блокирование, фиксированная
длина, переменная длина), длина логической записи,
информация, определяющая ключ прямого или индексно-последователь-
ного доступа, и многие другие.
Управление заданиями в DOS
121
PGMA
GO
START
BALR
USING
OPEN
0
12,0
*,12
CARDS
INITIALIZE BASE REGISTER
RUN
GET
CARDS
► Другие команды
В
RUN
OUIT
CLOSE CARDS
•EOJ
********************
* THE DTFCD MACRO DEFINITION.
********************
CARDS
INPUT
DTFCD DEVADDR=SYSIPT,I0AREA1=INPUT,E0FADDR=QUIT
^Другие определения данных
DS
CL80
CARD READER INPUT AREA
END GO
Рис. 7.2. Сегмент программы, содержащий макрокоманду DTFCD.
Изменение стандартных присвоений — оператор ASSGN
Бывают случаи, когда программисту требуется изменить
стандартные имена логических и физических устройств. Предполо-
122 Глава 7
жим, например, что в DTFMT (магнитная лента) упоминается в
качестве значения DEVADDR=SYS010 и что это символическое
имя присвоено определенному лентопротяжному устройству.
Оказавшись в вычислительном центре, программист выясняет,
что нужное ему лентопротяжное устройство занято двухчасовым
заданием, а два других таких же устройства свободны. Используя
управляющую карту ASSGN, он может изменить стандартное
распределение имен, приписав на время исполнения только своего
задания символическое имя SYS010 другому физическому
устройству.
Для того чтобы понять, как работает карта ASSGN, полезно
сначала познакомиться с методом адресации устройств в
вычислительных системах фирмы IBM. Все операции ввода — вывода
осуществляются через канал; именно через канал устройства
связываются с ЭВМ. Каждый канал имеет свой номер — мульти-
плексорному каналу придан номер 0, тогда как селекторные
каналы нумеруются цифрами 1, 2, 3 и т. д. до максимального
значения, равного 7.
Каждому устройству может быть присвоен двузначный шест-
надцатеричный номер, принимающий значения от 00 до FF (255
в десятичном представлении); таким образом, с каждым каналом
могут быть связаны до 256 устройств. Системный адрес любого
физического устройства ввода —вывода, входящего в
вычислительную систему, равен просто номеру устройства вместе с
предшествующим ему в записи номером канала, связанного с
устройством. Устройство 008 связано с каналом 0 и имеет номер 8;
устройство 00Е также связано с каналом 0 (мультиплексорным), но имеет
номер устройства 14 (0Е в шестнадцатиричном представлении).
Устройство 181 относится к каналу 1, а устройство 281 — к
каналу 2. Загляните в любой вычислительный центр — и вы
обнаружите, что каждому физическому устройству приписан
постоянный номер; эти номера очень напоминают то, о чем мы только что
говорили. Первая цифра определяет канал; вторая и третья —
номер устройства.
Если имени SYS010 по стандартному назначению отвечает
устройство 180, а свободно устройство 181, то на время исполнения
своего задания программист может изменить назначение
устройства, записав
// ASSGN SYS010,X'18i'
и поместив эту управляющую карту перед картой EXEC того
шага задания, в котором используется названное устройство.
Вновь введенное соответствие выполняется только для данного
задания] после его завершения восстанавливается стандартное
назначение. Картой ASSGN нельзя изменить стандартное
распределение разделов основной памяти.
Управление заданиями в DOS 123
Другие функции управления заданиями в DOS
Большинство программистов, работающих с DOS, редко
пользуется какими-либо предложениями управления заданиями,
отличными от тех, которые были рассмотрены выше. Карта JOB, как и
карта EXEC, конечно, необходимы для описания конкретных
программ, вызываемых для исполнения. На этапе компиляции и
тестирования требуется карта OPTION. Когда тестирование
закончено, загрузочные модули часто помещаются в библиотеку
образов памяти, а следовательно, карты OPTION, PHASE и,
вероятно, одна или несколько карт INCLUDE должны входить в
колоду карт задания. Иногда используется карта ASSGN для
изменения стандартного соответствия устройств символическим
именам. Практически это все, что действительно требуется среднему
программисту при работе с DOS. Другие средства управления
заданиями обычно используются лишь очень немногими
специалистами.
Поскольку настоящая глава имеет целью рассмотрение
некоторых из наиболее употребительных средств языка управления
заданиями в DOS, мы не будем уделять много времени
обсуждению особенностей менее употребительных типов управляющих
предложений; однако ниже приводится краткое описание
предложений JCL, которые могут иногда встретиться программисту со
средней квалификацией.
Большинство файлов на магнитной ленте и устройствах
прямого доступа снабжается метками. Предложение DLBL содержит
информацию, необходимую при записи и проверке меток в
устройствах прямого доступа; те же функции для файлов на магнитной
ленте обеспечиваются предложением TLBL. Предложением
LBLTYP редактору связей сообщается информация о
необходимости выделения для обработки меток объема основной памяти.
На одном томе прямого доступа (например, пакете дисков)
может храниться несколько различных файлов; чтобы избежать
случайного разрушения данных при записи нового файла на диск
или другой том прямого доступа, необходимо обеспечить
тщательное управление физическим процессом записи. В реализации
такого управления используется предложение EXTENT, которым
передается такая информация, как: символическое имя
устройства (SYSnnn), порядковый номер файла, тип файла (индекс,
область основных данных, область переполнений), номер дорожки,
начиная с которой следует записывать новый файл, и число
дорожек, отводимых для этого файла. Создание файла на DASD
(устройстве прямого доступа) обычно требует использования как
предложения EXTENT, так и DLBL. Часто для ведения
«журнала», содержащего сведения о расположении каждого файла на
физическом томе, назначается специалист из числа сотрудни-
124 Глава 7
ков отдела обработки данных; его разрешение необходимо при
создании новых файлов.
В условиях DOS программист имеет доступ к ряду
«указателей переключений программы пользователя». Они могут
использоваться для выяснения некоторых важных условий перед
началом прогона программы — проверка их значений осуществляется
стандартными командами языка ассемблера. Конкретные
сочетания значений этих указателей могут быть заданы с помощью
управляющего предложения UPSI.
Краткие выводы
В этой главе мы рассмотрели некоторые из основных
особенностей языка управления заданиями для дисковой операционной
системы (DOS) фирмы IBM. Два важнейших типа управляющих
предложений, по крайней мере с точки зрения потребностей
программиста средней квалификации в DOS, задаются картой JOB,
которой разделяются и идентифицируются отдельные задания, и
картой EXEC, определяющей конкретный загрузочный модуль,
подлежащий исполнению. За одной картой JOB может следовать
несколько карт EXEC; каждой картой EXEC отмечается один
шаг задания.
В заданиях, включающих компиляцию и тестовый прогон,
программист должен послать в систему сообщение о
необходимости загрузки и исполнения сформированного редактором связей
загрузочного модуля. Это достигается применением карты
OPTION. Если программист включает предложение
// OPTION LINK
то объектный модуль записывается в системный файл (обычно
файл прямого доступа) и по управляющему предложению EXEC,
не содержащему имени программы, загружается в память и
исполняется.
В рабочих условиях большинство программ обычно хранится
в форме загрузочных модулей, которые инициализируются для
исполнения считыванием из библиотеки; таким образом,
исключаются весьма продолжительные шаги задания, связанные с
ассемблированием (или компиляцией) и редактированием связей. В DOS
элементы библиотеки загрузочных модулей называются фазами.
Чтобы каталогизировать фазу в библиотеке образов памяти,
программист прежде всего кодирует предложение
// OPTION CATAL
Таким предложением OPTION реализуются две различные
функции: во-первых, как и выбором LINK, загрузочный модуль
записывается в системный файл; во-вторых, выбор GATAL инфор-
"Управление заданиями в DOS 125
мирует редактор связей о необходимости каталогизировать
загрузочный модуль (или фазу) в библиотеке образов памяти.
Каждой каталогизированной фазе должно быть сопоставлено
уникальное имя; это делается с помощью предложения PHASE.
С помощью карты INCLUDE к фазе могут быть добавлены
подпрограммы и другие ранее составленные модули. Карты PHASE
и INCLUDE передают информацию программе редактирования
связей; колонка 1 (по крайней мере) должна в этих картах быть
пустой. Другие из рассмотренных в этой главе карт управления
заданиями —карты JOB, EXEC и OPTION —должны иметь
в первых двух колонках символы косой черты (//) и в третьей
колонке — пробел.
В системе DOS каждому физическому устройству ввода —
вывода сопоставлено определенное символическое имя. Если
программист желает изменить на время исполнения задания выбор
устройства, символическое имя которого упоминается в программе,
то он может это сделать с помощью карты ASSGN. Как и карты
JOB, EXEC и OPTION, карта ASSGN начинается двумя косыми
чертами (//) в колонках 1 и 2.
Важнейшим элементом управления устройствами ввода —
вывода в системе DOS является макрокоманда DTF, кодируемая
в тексте прикладной программы. Каждое сочетание физического
устройства и метода доступа характеризуется своей формой DTF
(определение файла); DTFCD определяет карточный файл;
DTFPR определяет файл печатающего устройства; DTFMT
определяет файл на магнитной ленте и т. д. Этой
макрокомандой определяется конкретное вводное или
выводное устройство, метод доступа, который должен быть в этом
устройстве применен, а также детальное описание данных.
Для программиста средней квалификации эти немногие,
сравнительно простые управляющие предложения вполне достаточны
для работы. Остальные, менее употребительные средства
управления заданиями в DOS обычно используются лишь немногими
специалистами.
УПРАЖНЕНИЯ
1. Каково назначение карты JOB?
2. Каково назначение карты EXEC?
3. Поясните разницу между именем задания и именем
программы.
4. Что означает отсутствие имени программы в карте EXEC?
5. Поясните процесс каталогизирования программы в
библиотеке образов памяти, начиная с ввода колоды исходного модуля.
6. Какие действия определяются картой ASSGN? Ваш
преподаватель может предложить вам и другие упражнения,
касающиеся изучения языка управления заданиями.
Глава 8
ЯЗЫК УПРАВЛЕНИЯ ЗАДАНИЯМИ В ОПЕРАЦИОННЫХ
СИСТЕМАХ OS/360 И OS/370 —КАРТЫ JOB И EXEC
Введение
Дисковая операционная система фирмы IBM предназначена для
управления сравнительно малыми ЭВМ; в зависимости от
производительности ЭВМ и версии системы DOS может обеспечить
конкурентное управление несколькими (но не более чем пятью)
прикладными программами, не считая модулей самой операцией»
ной системы. В подобной системе не составляет особого труда
присваивать каждому физическому устройству ввода — вывода
индивидуальное символическое имя или вести журнал о размещении
отдельных файлов на устройствах прямого доступа (DASD).
Операционные системы IBM OS/360 и OS/370, включающие
в своих наиболее современных версиях виртуальную память,
позволяют управлять конкурентным исполнением значительно
большего числа прикладных программ. В таких
высокопроизводительных системах сравнительно простые подходы,
предполагающие стандартное назначение символических имен устройствам
и единственный регистратор системы управления файлами
прямого доступа, уже неприемлемы. Необходимы дополнительные
средства программного обеспечения. Если, например, в
некоторой программе предполагается размещение данных на диске, то
язык управления заданиями должен обладать средствами,
необходимыми для передачи значительных объемов информации
соответствующему управляющему модулю операционной системы;
таким образом, язык управления заданиями в такой более мощной
системе будет, вероятно, значительно сложнее языка систем
уровня DOS. Язык управления заданиями расширенных
операционных систем фирмы IBM действительно намного сложнее языка
системы DOS.
Как и при работе с DOS, программист средней квалификации
нуждается лишь в некотором ограниченном подмножестве
полного языка управления заданиями. Мы уделим основное внимание
рассмотрению таких операторов и параметров языка управления
заданиями, которые, по нашему представлению, используются
«средним» программистом. Поскольку язык управления
заданиями полной операционной системы несколько сложнее языка в DOS,
Язык управления заданиями в OS — карты JOB и EXEC 127
изложение материала будет разбито на две части: в гл. 8 будут
рассмотрены карты JOB и EXEC; гл. 9 будет посвящена описанию
карты DD, или карты определения данных. Мы не ставим целью
изучение всех возможностей языка управления заданиями
(JCL) в операционных системах OS/360 и OS/370 и ограничимся
лишь широко используемыми средствами. Таким способом, как
мы надеемся, нам удастся избежать ситуации «полной
растерянности», столь часто возникающей в практике начинающих
программистов, впервые приступающих к изучению JCL.
Карты JCL
К основным картам JCL относятся следующие три карты:
1. Карта JOB —предназначается для разделения и
идентификации заданий. К дополнительным функциям относится
передача в систему учетной информации и сведений о приоритете. Эта
карта JOB представляет собой расширенный вариант карты JOB
в DOS.
2. Карта исполнения, или ЕХЕС-карта. Эта карта служит для
идентификации индивидуальной программы или загрузочного
модуля, которые должны быть исполнены; она также является
расширением соответствующей карты EXEC системы DOS.
3. Карта определения данных, или карта DD, используемая
для детального описания входных и выходных устройств в
конкретном задании. Необходимость этой карты обсуждалась в гл. 6.
В этой главе рассмотрим первые два типа карт JGL, а также
некоторые общие представления, отложив обсуждение карт
определения данных (DD) до следующей главы.
Задания и шаги заданий
Рассмотрим схему задания, изображенную на рис. 8.1. Это
задание состоит из трех отчетливо различимых шагов —
компиляции, редактирования связей и, наконец, исполнения
интересующего программиста загрузочного модуля. Для программиста все
эти шаги представляются единым заданием, результатом выпол^
нения которого является объединенный набор выходных данных.
При этом система должна выполнить три разные программы.
Программист мыслит заданиями; вычислительная система имеет дело
с последовательностями шагов заданий. Задание включает все
программные коды, необходимые для получения определенного
результата обработки данных; оно является независимым и
неделимым. Задание может состоять из ряда отдельных программ —
компиляторов, редакторов связей, программ сортировки и
прикладных программ, упорядоченных таким образом, чтобы обе-
128 Глава 8
Рис. 8.1. Трехшаговое задание: компиляция, редактирование связей,
исполнение.
спечить получение требуемого результата; каждая из этих
программ составляет отдельный шаг задания.
Для отдельного задания должна быть написана одна карта JOB.
В колоде карт задания она является первой картой. Каждый шаг
задания должен быть снабжен своей картой EXEC. В одном и том
же задании может встречаться практически любое число карт
EXEC.
Рассмотрим в качестве примера простую программу,
показанную на рис. 8.1 и включающую шаги компиляции,
редактирования связей и исполнения. Необходимость этих трех различных
шагов мы уже отмечали; дополним наш пример требованиями к
Язык управления заданиями в OS — карты JOB и EXEC 129
устройствам ввода и вывода данных и попытаемся перечислить
карты управления заданиями, необходимые для решения
приведенной на рис. 8.1 прикладной задачи. В первом шаге
задания — компиляции — входные данные поступают от
устройства чтения карт, а выходные посылаются в печатающее
устройство или (часто по специальному требованию) в устройство
перфорации объектной колоды карт, а также на диск, где копия
объектного модуля сохраняется для выполнения последующих шагов.
Редактор связей считывает входные данные из файла на диске,
сформированного на предыдущем шаге, и, быть может, использует
содержимое системной библиотеки. Выходные данные этого шага
посылаются в печатающее устройство, а также на диск, где
хранится копия загрузочного модуля. Входные данные
заключительного шага включают прежде всего этот загрузочный модуль и
данные о любых устройствах ввода —вывода, используемых
прикладной программой. В рассматриваемом примере входные
данные считываются с ленты, выходные пересылаются в печатающее
устройство и записываются на другую ленту.
Рассмотрим теперь операторы управления заданиями,
необходимые для обеспечения этого задания. Прежде чем перечислять
требуемые карты, мы должны напомнить два положения:
во-первых, вычислительная система воспринимает каждый шаг задания
как неделимый компонент и, во-вторых, для каждого
используемого в программе устройства ввода — вывода должна быть
составлена своя карта DD. Для выполнения этого задания нам
требуются следующие карты:
1. Карта JOB.
2. Карта EXEC шага компиляции.
3. Карта DD файла объектного модуля на диске.
4. Карта DD выходных данных печатающего устройства.
5. Карта DD выходного файла на перфокартах.
6. Карта DD входных данных на перфокартах.
7. Карта EXEC шага редактирования связей.
8. Карта DD для считывания объектного модуля с диска —
это тот же самый файл, который был описан выше в п. 3, но, так как
он упоминается в другом шаге задания, требуется отдельная
карта DD.
9. Карта DD записи загрузочного модуля на диск.
10. Карта DD выходных данных печатающего устройства.
11. Карта EXEC для загрузочного модуля.
12. Карта DD для входных данных на ленте.
13. Карта DD для выходных данных на ленте.
14. Карта DD для выходных данных печатающего устройства.
15. Карта DD для программы загрузочного модуля — это
тот же самый файл, который упоминался в п. 9, однако для
нового шага.
5—821
130
Глава 8
Первая карта идентифицирует задание; карты 2, 7 и И —три
карты EXEC — отмечают соответственно начало каждого из трех
шагов задания. Обратите внимание на то, что для данного шага
задания все перечисленные карты DD действительно необходимы
в этом шаге.
Каталогизированные процедуры
Слишком много управляющих карт для столь простого задания!
И при этом все они, за исключением некоторых карт DD,
определяющих реальные требования к входным и выходным данным
заключительного шага, —в нашем примере карт 12, 13 и 14, —
не играют, с точки зрения программиста, никакой роли. К тому
же любое задание, включающее шаги компиляции,
редактирования связей и исполнения, в этом отношении не отличается
от другого задания, содержащего те же самые три шага, и какое
имеют значение характер и организация файла для хранения
промежуточных результатов компиляции, если они практически
не влияют на окончательные результаты. В многолетней практике
использования языков программирования такие многократные
операции реализуются с помощью макрокоманд. Эквивалентом
макрокоманды в языке управления заданиями служит
каталогизированная процедура.
Каталогизированной процедурой является набор написанных
заранее управляющих операторов. Соответствующий
макрокоманде модуль обычно хранится в библиотеке и
включается в состав колоды исходной программы при ее вводе в систему;
внесение каталогизированных процедур в колоду выполняется
модулем чтения заданий (см. гл. 6), управляющим очередностью
выполнения задания. С использованием каталогизированных
процедур наш набор управляющих карт для рассматриваемой
программы изменяется следующим образом:
1. Карта JOB.
2. Карта EXEC COBOL или EXEC FORTRAN, описывающая
на языке программиста требуемую каталогизированную
процедуру.
3. Карта DD для входных данных на ленте.
4. Карта DD для выходных данных на ленте.
5. Карта DD выходных данных печатающего устройства.
Приняв карту EXEC, модуль чтения заданий обращается в
библиотеку каталогизированных процедур, считывает
соответствующие управляющие операторы и включает их в состав колоды
карт задания программиста, которые затем примут форму образов
памяти в очереди того или иного класса. Программисту
необходимо позаботиться лишь о тех управляющих картах, которыми его
задание отличается от других; все повторяющиеся операторы за-
Язык управления заданиями в OS — карты JOB и EXEC 131
даниями управления входят в состав процедуры. Программист
может не думать о действительных именах программ компилятора
или редактора связей, а также об особенностях организации
промежуточных данных этих стандартных программ.
Намного позже, после того как будут рассмотрены несколько
реальных операторов управления заданиями, мы изучим
некоторые из типичных каталогизированных процедур.
Язык управления заданиями. Основные параметры
Обратимся к особенностям языка. Традиционный подход к
обсуждению любого языка основывается на анализе общих форматов
допустимых предложений; язык управления заданиями не
составляет в этом смысле исключения. Общий формат оператора в языке
управления заданиями фирмы IBM имеет вид
//ИМЯ ОПЕРАЦИЯ ОПЕРАНДЫ КОММЕНТАРИЙ
Ниже следует описание выделенных полей.
1. Колонки 1 и 2 должны обязательно содержать символ
косой черты (/). Этим же символом в Фортране обозначается
деление.
2. Поле ИМЯ (по существу метка) начинается в третьей
колонке. Это поле служит для идентификации конкретного задания, -
шага задания или набора данных; как мы увидим, поле ИМЯ
дает возможность программисту и операционной системе
идентифицировать определенную управляющую карту или ссылаться
на нее.
3. За полем ИМЯ следует по крайней мере один пробел.
Пробел в колонке 3 служит для системы указанием на то, что ИМЯ
отсутствует; пробел используется в качестве разделителя
полей.
4. После первой цепочки пробелов следует поле ОПЕРАЦИЯ,
которым определяется тип управляющей карты. Основные три
оператора —JOB, EXEC и DD.
5. За полем ОПЕРАЦИЯ следуют один или несколько
пробелов.
6. Вслед за этой второй цепочкой пробелов помещается поле
ОПЕРАНДЫ —ряд параметров, детализирующих информацию
о задании, шаге задания или наборе данных.
7. Вновь один или несколько пробелов отделяют операнды
от следующего поля.
8. Не обязательные для включения комментарии.
9. За исключением комментариев, ни одно поле не должно
простираться далее колонки 71.
В поле имени программист может поместить любое имя с учетом
лишь одного ограничения: число символов в имени не более вось-
5*
132 Глава 8
ми, в качестве символов могут использоваться только буквы и
цифры, первым символом должна быть буква. Поля операций
и операндов должны заполняться в соответствии с точно
определенными стандартами; допускаются только три упомянутых
выше оператора. Некоторые из правил кодирования операндов
мы рассмотрим в этой и следующей главах. Написание
комментариев определяется, конечно, желанием программиста.
Обратите особое внимание на использование пробелов в
картах JCL; пробелы используются для разделения полей.
Произвольное употребление пробелов является наиболее частой
причиной ошибок в картах JGL начинающих программистов.
Случайные пробелы будут непременно истолкованы как разделители
полей. Кодируя
// STEP1 EXEC COBOL
мы получим очень странное сообщение об ошибке — не
существует операции с именем STEP1; допустимы лишь JOB, EXEC
и DD. Мы знаем, что мы имели в виду, а машина не знает.
Попробуем записать это предложение иначе:
// STEP1 EXEC COBOL
*
не оставляя пробела между // и полем имени операции.
Карта JOB
Основное назначение карты JOB состоит в фиксации начала
задания, с тем чтобы отличать его от всех других заданий,
выполняемых ЭВМ. Поле имени служит средством однозначной
идентификации каждого задания, необходимой в мультипрограммной
системе, и поэтому обязательно должно быть заполнено. Любая
комбинация из восьми или меньшего числа символов, каждый
из которых является буквой или цифрой, а первая —буквой,
составляет допустимое имя, хотя во многих вычислительных
центрах вводятся местные ограничения, касающиеся выбора имен.
Часто используются заранее отперфорированные карты JOB с
готовыми именами; они могут также снабжаться порядковыми
номерами, что практически снимает все трудности, связанные с
возможным появлением двух или большего числа заданий с одним
и тем же именем.
В некоторых вычислительных центрах используются лишь поля
операции и имени задания:
//JOB396 JOB
В других —требуется дополнительная информация, что уже
относится к содержимому поля операндов карты JOB.
Язык управления заданиями в OS — карты JOB и EXEC 133
Карта JOB. Учетная информация
Одна важная косвенная функция карты JOB состоит в передаче
учетной информации в соответствующий модуль операционной
системы. Эта информация кодируется как первый параметр поля
операндов;
//JOB396 JOB 1234
могло бы, например, указывать на то, что стоимость выполнения
задания с именем JOB396 следует начислять на расчетный счет
с номером 1234. Часто требуется указывать несколько учетных
подпараметров, как в записи
//JOB435 JOB (1234,875)
которая могла бы означать, что выполнение задания JOB435
следует отнести на счет с номером 1234 с номером пользователя
875. Точный смысл содержимого поля учетной информации зависит
от конкретных соглашений, принимаемых в каждом
вычислительном центре.
Обратите внимание на использование скобок; скобки
требуются в тех случаях, когда кодируется больше одного подпараметра.
Отметьте также позицию, занимаемую учетной информацией —
первая порция информации в поле операндов. Учетная
информация служит наглядным примером позиционного параметра;
смысл учетной информации, а также смысл отдельных
подпараметров, составляющих учетную информацию, определяются их
позициями.
Обсуждая содержимое поля учетной информации, мы
использовали термины «параметр» и «подпараметр»; что они означают?
Параметр — это просто отдельный набор логически связанных
элементов информации в поле операнда управляющей карты;
совокупность элементов учетной информации представляется
логически единой. Подпараметром является отдельный элемент
данных в составе параметра. Аналогом подпараметра могла бы,
например, служить фамилия человека, если определить в
качестве параметра полный почтовый адрес последнего.
Карта JOB. Имя программиста
Чтобы упростить идентификацию программиста, его имя часто
указывается в карте JOB. Для этой цели используется второй
позиционный параметр, как в записи
111 OB098 J OB (2987,235), DAVIS
Иногда используется несколько иной формат;
//J OB098 JOB (2987,235) /DAVIS'
134
Глава 8
Употребление апострофов необходимо лишь в тех случаях, когда
в поле имени желательно использовать некоторые специальные
символы — интервал, пробелы и т. д.
Карта JOB. Параметр CLASS
Несколькими главами ранее, когда впервые было введено
понятие карты JOB, мы упоминали о возможности ее использования
для указания класса (приоритета) задания. В языке управления
заданиями фирмы IBM для этой цели используется параметр
GLASS. Добавляя его к нашим уже известным параметрам,
получим
//JOB760 JOB (3984,444)/W. S. DAVIS', CLASS =A
Карта JOB, Параметр TIME
He вспомните ли вы, что такое таймер и каким образом модуль
операционной системы, обрабатывающий сигналы от таймера,
может использоваться для прерывания программы, попавшей
в бесконечный цикл? Данные для установки таймера должны
быть откуда-то получены; таким источником данных часто служит
параметр TIME, кодируемый в карте JOB. Параметр TIME
может иметь два подпараметра:
TIME = (минуты, секунды)
Параметром TIME вида
TIME = (5,30)
запрашиваются пять минут и тридцать секунд времени CPU,
тогда как
TIME = 5 или TIME = (5) или TIME = (5,0)
запрашивается ровно пять минут, и записью
TIME = (,30)
запрашивается тридцать секунд. Обратите внимание на
употребление скобок. Если кодируется только первый подпараметр, то
они при желании могут быть опущены, однако если параметров
больше одного, то употребление скобок обязательно. Коды,
определяющие значения минут и секунд, являются позиционными
подпараметрами, т. е. значение подпараметров определяется их
позицией в параметре TIME. В форме «только секунды» запятая
в коде параметров указывает на отсутствие позиционного
подпараметра «минуты».
GLASS и TIME являются ключевыми параметрами; т. е.
значения подпараметров CLASS и TIME определяются независимо
Язык управления заданиями в OS — карты JOB и EXEC 135
от их положения в карте JOB. Если позиционные параметры
учетной информации и имени программиста должны
кодироваться в определенных позициях, то ключевые параметры могут
кодироваться в любом порядке. Вот несколько примеров:
//XY1 JOB (345,86), JONES,CLASS = G,TIME=3
//XY2 JOB (296,25)/A. SMITH',TIME ==(,45),CLASS =A
//XY3 JOB rill,22),DAVIS,CLASS=D,TIME=(3,30)
Параметр REGION
В некоторых системах приоритет задания частично зависит от
объема требуемой памяти. Программист может указать объем
необходимой для его программы памяти пользуясь параметром
REGION; это еще один параметр, определяемый ключевым
словом, значением которого является число требуемых блоков
основной памяти по 2048 (2К) байтов каждый, например;
REGION =34К или REGION =124К.
Параметр MSGLEVEL
Карты JGL, кодируемые программистом, управляющие карты,
входящие в каталогизированную процедуру, а также сообщения
о том, какие действия фактически выполнены системой в
отношении различных наборов данных и устройств, важны для
программиста в процессе отладки программы. Однако по завершении
этого этапа подобная информация становится излишней и обычно
не имеет никакого смысла для пользователя. Параметр
MSGLEVEL (или уровень сообщений) дает возможность
программисту выбирать типы выдаваемых на печать сообщений,
касающихся операторов управления заданиями и распределения устройств.
Общая форма этого параметра такова:
MSGLEVEL =(карты JGL, сообщения)
Два указанных подпараметра имеют следующие коды и значения:
КАРТЫ ЗНАЧЕНИЯ
0 Печатать только карту JOB
1 Печатать все операторы JGL, включая кодируемые
программистом и добавляемые каталогизированными
процедурами
2 Печатать только кодированные программистом операторы
JCL
136
Глава 8
СООБЩЕНИЯ ЗНАЧЕНИЯ
0 Не печатать каких-либо сообщений о распределении
устройств, за исключением случая непредусмотренного
завершения задания
1 Печатать все сообщения
Запись параметра
MSGLEVEL =(1,1)
означает печать всех сообщений, тогда как запись параметра
MSGLEVEL = (0,0)
требует печати только карты JOB в случае неудачного
завершения задания. Параметром
MSGLEVEL =(1,0)
от системы требуется печать всех карт JGL, при этом отменяются
сообщения о распределении устройств.
Выбор по умолчанию
Во многих вычислительных центрах предпочитают использование
подразумеваемых значений параметров, избавляя тем самым
программиста от кодирования каждого параметра карты JOB.
Выражаясь совсем просто, если программист по какой-либо причине
не упоминает тот или иной параметр, его значение определяется
системой. Часто ряд важнейших параметров — учетная
информация, фамилия программиста и класс задания —должны
кодироваться программистом; соглашения по умолчанию
связываются с классом задания так, например, все задания класса А
получают значение параметра REGION = 90K и предельное
значение параметра TIME-30 с, тогда как задания класса В
характеризуются объемом памяти в 120К и предельным временем
в 2 мин. Если программист не удовлетворяется значениями
параметров, задаваемыми по умолчанию, он просто кодирует нужные
ему значения параметров, отменяя тем самым значения по
умолчанию.
Другие параметры карты JOB
Другие параметры, задаваемые ключевыми словами, позволяют
программисту определять такие условия, как приоритет задания,
тип прогона, ограничения на признак результата, выбор,
касающийся свертывания —развертывания, а также условия
возобновления счета. Мы не будем здесь рассматривать эти
параметры; упомянем лишь факт их существования. При
необходимости убедитесь в правильности назначения этих параметров,
обратившись за помощью к системному программисту или к
руководству по JGL.
Язык управления заданиями в OS — карты JOB и EXEC 137
Некоторые карты JOB
//J OB A J OB (2938,24), AD AMS, GLASS =B
//G1234567 JOB (3998,659)/A. B. JONES',CLASS=A,
// TIME -(5,30),REGION =128K
Перенос записи оператора JCL на вторую карту
Запись второго из приведенных выше примеров карты JOB не
умещается на одной карте; так что здесь нам предоставляется
случай ввести правила переноса записей карт JCL. Эти правила
весьма просты:
1. Прервать заполнение текущего поля законченной записью
параметра или подпараметра, включая ограничительную запятую;
т. е. остановиться после запятой (которая, как вы должны
согласиться, является обычным знаком препинания).
2. Записать любой отличный от пробела символ в колонке 72.
Колонка 72 может оставаться и пустой; использование символа,
обозначающего продолжение, не обязательно.
3. Записать две косые черты (II) в колонках 1, 2 карты
продолжения.
4. Возобновить кодирование карты, начиная с любой колонки
с номерами от 4 до 16 — колонка 3 должна быть пустой и
продолжение кодов JGL своим началом должно приходиться на
колонку с номером, не превышающим 16.
Другими словами, просто прервите написание кодов после
запятой и возобновите запись на следующей карте.
Карта EXEC
Картой EXEG отмечается начало каждого шага задания. Она
служит для передачи в систему информации, идентифицирующей
программу (или каталогизированную процедуру), подлежащую
исполнению; таким образом, единственное требование сводится
к тому, что первый параметр карты EXEG должен идентифици*
ровать программу или процедуру
// EXEC PGM=SORT6
или
// EXEG PROC=COBOL
При упоминании каталогизированной процедуры, как в случае
// EXEC COBOL
138
Глава 8
ключевое слово PR ОС может опускаться. Объявляя исполнение
программы, необходимо использовать ключевое слово PGM.
Хороший пример действий, связанных с картой EXEC, можно
найти в типичной каталогизированной процедуре, скажем
процедуре FORTRAN. Запись оператора
//
EXEC FORTRAN
идентифицирует каталогизированную процедуру, при этом
подразумевается, что из библиотеки считываются и добавляются
к операторам управления заданиями, кодируемым программистом,
следующие коды:
//FORT
//SYSPRINT
//SYSLIN
//LKED
//SYSLIB
//SYSLMOD
//SYSPRINT
//SYSUT1
//SYSLIN
EXEC
DD
DD
EXEC
DD
DD
DD
DD
DD
PGM=IEYFOF
параметры
параметры
PGM =IEWL
параметры
параметры
параметры
параметры
параметры
LT
(распечатываемые
выходные данные)
(выдача объектного
модуля)
(системная библиотека)
(выдача загрузочного
модуля)
(распечатываемые
выходные данные)
(рабочее поле)
(ввод объектного
модуля).
//GO
EXEC PGM = *.LKED.SYSLMOD
Последняя из этих карт немного странная. Она означает
следующее: «Выполнить программу, сформированную в шаге задания
с именем LKED и сохраняемую в наборе данных, связанных с
именем SYSLMOD». Поле имени карты JCL используется в
основном в качестве метки, что позволяет ссылаться на данный шаг
задания любой другой команде; специальный формат,
использованный в рассматриваемой ссылке:
*. LKED. SYSLMOD
называется составным именем. Приведем еще два примера
составных имен; в нашей процедуре имеются два набора данных, с
именем SYSLIN, по одному в каждом из первых двух шагов задания;
ссылаясь на первый из них, мы бы записали *.FORT.SYSLIN,
Язык управления заданиями в OS — карты JOB и EXEC 139
тогда как для второго следовало бы употребить *.LKED.
SYSLIN —звездочка указывает на то, что ссылка относится к
другому шагу задания, описанному ранее.
Программист написал команды каталогизированной процедуры.
В самой процедуре в нашем случае содержатся три карты EXEC,
каждая из которых предназначена для вызова своей программы.
Все ссылки на индивидуальные программы отмечены ключевым
словом «PGM=».
Часто все, что программист должен записать в своей карте
EXEC, сводится к идентификации соответствующей программы
или каталогизированной процедуры. Однако иногда требуется
большой объем информации, и для этой цели существует ряд
дополнительных параметров.
Параметр COND, или условие выполнения
шага задания
Большинству программистов рано или поздно случалось вводить
задания с одной или несколькими синтаксическими ошибками.
В этом случае в результате компиляции выдается распечатка
ошибок с последующим сообщением о том, что шаги редактирования
связей и исполнения программы не состоялись из-за ошибок
компиляции. Это вполне здравый подход; какой смысл заниматься
последующими шагами, если первый —ошибочный? Возможно,
раньше вы об этом не задумывались, и все-таки: как же
вычислительная система выясняет необходимость опустить тот или иной
шаг, в частности, при выполнении каталогизированной
процедуры, включающей шаги редактирования связей и исполнения
программы загрузочного модуля?
Вы, быть может, обратили внимание на сообщения в листинге
ошибок, называемые уровнями серьезности ошибок компиляции,—
предупреждения оцениваются в 4 балла; простым ошибкам могла
бы отвечать оценка 8, а грубым ошибкам — 12 баллов; программа,
содержащая грубые ошибки, почти наверняка не будет запущена
в счет. Компилятор сообщает системе значение оценки наиболее
серьезной из выявленных ошибок, посылая в один из регистров
признак результата, —программисты, работающие на языке
ассемблера, вероятно, знакомы с понятием признака результата
как одной из составляющих обычных соглашений о регистрах.
Модуль операционной системы, инициирующий задания, перед
загрузкой и исполнением программы загрузочного модуля может
проверить состояние этого признака результата, обходя шаг
исполнения, в случае если фактическое значение признака
результата, отвечающее предыдущему шагу, оказывается
неприемлемым. По аналогии с вышесказанным используемые предельные
значения уровней серьезности задаются программистом с помощью
140
Глава 8
параметра COND, или условия выполнения шага задания.
Общая форма параметра GOND такова:
COND = (значение, отношение, имя шага)
Параметр
COND = (12,LE,FORT)
записанный в карте EXEC шага редактирования связей,
воспринимается модулем, инициирующим задания, как требование
пропустить шаг редактирования связей, если фактическое значение
признака результата, полученного в шаге FORT (т. е.
соответствующая этому шагу карта EXEC идентифицирована именем FORT),
больше или равно 12. Проследим еще раз логику этого условия.
Параметр COND в следующей карте EXEC:
//LKED EXEC PGM=IEWL,COND=(12,LE,FORT)
означает, что шаг с именем LKED следует обойти, если 12 меньше
или равно действительному значению признака результата,
полученному в шаге с именем FORT. Форма этого условия
несколько необычна, так что будьте внимательны. Большинство
программистов, кодируя сравнение значений переменной и константы
в операторе IF или при поразрядном сравнении, сначала
используют имя переменной — это почти стандартный прием
программирования. В записи параметра COND сначала кодируется
константа, при этом логическое выражение как бы читается в
обратном порядке. То, что это сравнение используется для
принятия негативного решения, еще больше усложняет его понимание.
Лучший способ правильного кодирования условия COND состоит
в прочтении слева направо только что написанного выражения —
настоящий шаг опускается, если некоторая константа
удовлетворяет некоторому условию, зависящему от фактического значения
признака результата, полученного в одном из предшествующих
шагов задания. В некоторых случаях третий позиционный
подпараметр (имя того предшествующего шага задания, которому
отвечает используемое в операции сравнения значение признака
результата) может опускаться; если этот подпараметр не
кодируется, то подразумевается имя самого последнего из
завершенных шагов задания.
В операциях сравнения может использоваться ряд логических
отношений, в том числе отношения «больше, чем» (GT), «равно»
(EQ), «меньше, чем» (LT), «больше или равно» (GE), «меньше или
равно» (LE) и отношение «не равно» (NE). В описанной выше
каталогизированной процедуре FORTRAN параметры COND
употребляются в карте EXEC, соответствующей шагам
редактирования связей и исполнения программы; мы опустили их запись
Язык управления заданиями в OS — карты JOB и EXEC 141
только потому, что к тому времени еще не знали смысла этого
параметра. Записывая
//LKED EXEC PGM=IEWL,COND=(4,LT,FORT)
мы сообщаем операционной системе требование опустить шаг
LKED, если 4 меньше фактического значения признака
результата, полученного в шаге задания с именем FORT. Оператор JGL
//GO EXEC PGM=*.LKED.SYSLMOD,COND=(4,LT,FORT)
определяет то же самое условие в отношении шага исполнения
загрузочного модуля. В некоторых случаях записываются
составные условия, как, например, в записи
GOND = ((4,LT,FORT),(4,LT,LKED))
согласно которой данный шаг задания опускается, если 4 меньше
действительного значения признака результата, полученного в
шаге FORT, или 4 меньше действительного значения признака
результата, полученного в шаге LKED. Обратите внимание на
использование скобок; соблюдение правил синтаксиса языка JGL
может быть довольно утомительным, что приводит к
дополнительным трудностям написания операторов и ошибкам.
Программист может сам написать необходимые программные
коды, реализующие проверку действительных значений признака
результата, что позволяет ему, например, обходить распечатку
списка ошибок среди других данных, если таких ошибок в
предшествующем шаге задания не обнаружилось. Многим способ
кодирования параметра GOND кажется несколько «кособоким»,
быть может, из-за того, что выполняемая с его помощью проверка
имеет целью негативное решение —обход шага задания.
Необходима осторожность при использовании или истолковании
смысла этого параметра; прочтите внимательно, что именно выражает
ваша запись, и это должно вас уберечь от слишком грубой ошибки.
Другие параметры EXEC
Другие параметры карты EXEC дают возможность программисту
пересылать значения параметров из одного шага задания в
другой, снабжать текущий шаг задания учетной информацией,
устанавливать диспетчерский приоритет шага задания, предельное
время его исполнения, задавать объем требуемой памяти,
управлять операциями свертывания — развертывания и
возобновления счета. Некоторые из этих параметров могут быть определены
в карте JOB; программисту предоставляется возможность самому
делать выбор относительно требуемого времени счета, основной
памяти, операций свертывания — развертывания и возобновле-
142 Глава 8
ния счета, а также признаков результата либо для всего задания,
либо для каждого из его шагов в отдельности.
Программистам часто встречается в картах задания вариант
параметра PARM в форме команды
// EXEC FORTRAN,PARM.FORT=='NODECK,LIST'
которая сообщает шагу задания с именем FORT
(соответствующему компиляции) об отказе от перфорации колоды объектного
модуля и необходимости выдачи листинга программы.
Подробную информацию о значении параметров, определенных в языке
любого компилятора, можно найти в руководстве для
программистов по этому языку.
Краткие выводы
В этой главе мы исследовали некоторые общие идеи языка
управления заданиями фирмы IBM и рассмотрели конкретные
параметры управляющих карт JOB и EXEC. Подробное описание
этих параметров в форме сводной таблицы приводится в
приложении Б. Мы продолжим рассмотрение этих вопросов в гл. 9.
УПРАЖНЕНИЯ
1. Поясните разницу между заданием и шагом задания.
Сопоставьте эти два понятия с картами JOB и EXEC.
2. Что такое позиционный параметр? Приведите несколько
примеров.
3. Что такое параметр, определяемый ключевым словом?
Приведите несколько примеров.
4. Что означает запись «MSGLEVEL = (1,1)», внесенная
в карту JOB?
5 • Что такое каталогизированная процедура? Как применяются
каталогизированные процедуры?
6. Поясните выбор значений параметров по умолчанию.
7. Запишите карту JOB, выбирая по желанию имя задания,
номер вашего курса в качестве учетного номера, вашу фамилию
как имя программиста в задании класса Q, требующего 90К
основной памяти в течение одной минуты и тридцати секунд
процессорного времени. Откажитесь от печати сообщений, касающихся
используемых устройств. Запросите распечатку составленных вами
команд JCL.
8. Напишите карту EXEC, соответствующую исполнению
каталогизированной процедуры с именем COBOL (компиляция,
редактирование связей и исполнение). Заявите об отказе от
исполнения этого шага, если признак результата, полученный в шаге
с именем STEP1, равен 100.
Глава 9
КАРТА ОПРЕДЕЛЕНИЯ ДАННЫХ
Введение
Продолжим начатое в гл. 8 обсуждение языка управления
заданиями фирмы IBM, уделяя основное внимание карте определения
данных, или карте DD. Карта определения данных позволяет
программисту сообщить системе подробное описание каждого
набора данных, используемого его программой. Необходима одна
карта JOB для каждого задания, одна карта EXEC для каждого
шага задания и одна карта DD для каждого набора данных,
используемого отдельными программами в каждом шаге задания.
Существует много различных типов устройств ввода и вывода.
Каждый тип характеризуется своими особенностями,
преимуществами и недостатками. Язык управления заданиями должен
обеспечивать реализацию даже самых совершенных приемов
ввода и вывода данных и при этом, быть может, с помощью весьма
редко используемых устройств; по этой причине количество и
сложность параметров оператора DD прямо-таки устрашающие.
В этой главе мы рассмотрим лишь наиболее употребительные из
параметров оператора DD —те, которые в каждодневной работе
используются большинством программистов. Изучение более
тонких свойств и менее употребительных параметров следует отнести
к содержанию курса в дополнительных главах, касающихся
языка управления заданиями. Если вы проектируете набор данных
с использованием некоторых экзотических возможностей языка
управления заданиями, то неплохо было бы обратиться за
советом к специалисту—системному программисту или
консультанту вычислительного центра.
Многими учебниками по JCL параметры карты DD вводятся
жак ряд независимых элементов; это может привести к путанице.
Воспользуемся несколько иным подходом, анализируя
особенности устройств ввода — вывода и описывая операторы JGL,
необходимые для определения данных в устройстве рассматриваемого
типа. Поэтому будем следовать схеме, включающей три этапа:
1. Анализ особенностей конкретного устройства ввода— вывода.
2. Определение тех характеристик устройства, о которых
необходимо послать сообщение в операционную систему.
144 Глава 9
3. Описание и анализ тех специальных параметров оператора
DD, которые требуются для такого сообщения.
Таким образом, будут рассмотрены устройства для единичных
записей, лента, устройства прямого доступа и устройства
системного ввода и вывода (спулинг).
Прежде чем начать описание, отметим еще одно
обстоятельство. Команды управления заданиями объединены в
независимую совокупность карт, добавляемых к программе как средство
передачи информации в операционную систему; они играют
служебную роль и фактически не являются частью программы. В этом
отношении карты JOB и EXEC не вызывают никаких трудностей,
но карта DD определяет набор данных, к которым должен быть
обеспечен доступ из программы; таким образом, программа и ее
карты DD должны быть как-то связаны. В операционных
системах фирмы IBM, которые мы сейчас рассматриваем, для такой
связи используются поле имени карты DD и программная
макрокоманда, называемая блоком управления данными или
DGB. Несколько следующих параграфов посвящено описанию
этой связи.
Карты DD и блоки управления данными
Во времена второго поколения ЭВМ решение изменить ввод
данных в программе, переходя, скажем, от карт к ленте, вообще
говоря, обходилось не дешево. Зачастую необходимо было
переписывать заново почти всю старую программу, включая в нее
средства блокирования, многоблочной буферизации и совершенно иной
набор макрокоманд ввода и вывода. Рассмотренные ранее
программные модули операционной системы, в частности модули,
реализующие методы доступа, упростили эту проблему, однако не
разрешили ее до конца. Этим обстоятельством объяснялось
нежелание многих фирм переходить к новым техническим
средствам. Однако с течением времени постоянное использование не
самых совершенных технических решений оказывалось все более
невыгодным и с точки зрения изготовителей могло означать
потерю потенциальных покупателей; таким образом, одним из
основных принципов проектирования Системы IBM/360 стала идея
об аппаратно независимых программах.
Независимость от устройств означает, что программист имеет
возможность изменить выбор одного или большего числа
устройств ввода и(или) вывода с минимальными усилиями и
минимальным количеством изменяемых кодов. Решение этой задачи
в Системе IBM/360 включает использование макрокоманд ввода
и вывода—новой макрокоманды, называемой блоком
управления данными, — и карт DD.
Карта определения данных 145
Рассмотрим сначала некоторый фрагмент программы. Блок
управления данными, или макрокоманда DCB, записываемая на
языке ассемблера в форме
INPUT DCB MACRF=GM,DSORG=PS,DDNAME=CARDS,C
другие параметры
определяет ряд констант и адресов, описывающих характеристики
физических и логических записей, подлежащих обработке.
Приведенной записью определяются три параметра. MACRF, или
параметр типа макрокоманды, и параметр DSORG,
определяющий организацию набора данных, описывают используемый метод
доступа. Параметром DDNAME осуществляется связь с картой DD;
подробнее этот параметр будет рассмотрен позже. В программе
могли быть определены и другие параметры, описывающие
размеры логических записей в блоков, форму записи, метод
буферизации, плотность записи (на ленте) и многие другие физические
характеристики записей. Приведенные выше три параметра
составляют тот минимум, который обязательно кодируется внутри
программы; как мы увидим, другие параметры могут быть
включены в запись карты DD и внесены в блок управления данными
действием макрокоманды OPEN.
В действительности макрокоманды ввода и вывода довольно
просты. Основная форма макрокоманды ввода для
последовательного набора данных имеет вид
метка GET адрес DGB, адрес области
Макрокоманда вывода последовательных файлов такова:
метка PUT адрес DCB, адрес области
Рассмотрим простую программу «Прочитать карту и
напечатать ее», показанную на рис. 9.1. Макрокоманды DCB
кодируются в области, отведенной для констант и рабочих ячеек; в этих
макрокомандах нет исполняемых операций, они содержат лишь
константы и адреса. Параметры DSORG и MAGRF определяют
метод доступа. Здесь появляется еще один параметр —EODAD,
или параметр адреса конца набора данных; этим параметром
задается адрес команды программы, которой следует передать
управление при появлении признака конца набора данных в
устройстве ввода.
Картой EXEC задается каталогизированная процедура —
ASMFGLG; эта процедура включает компиляцию, редактирование
связей и исполнение загрузочного модуля, при этом исходным
модулем на первом шаге является программа на языке
ассемблера. Ассемблирующей программой формируется объектный модуль,
содержащий ядро блока управления данными. Описание метода
доступа вносится в DCB загрузочного модуля редактором свя-
//J0B33 JOB (2398,34),DAVIS,CLASS=A
//
EXEC
ASMFCLG
//ASM.SYSIN DD *
STARTUP макрокоманда дейстбии, определяемых соглашениями в регистрах
В
GO
обход констант и рабочих ячеек
CARDOUT DC CL1
I t
CARD
DS CL80
DC CL51
t t
INPUT DCB MACRF=GM, DSORG=PS ,DDNAME*CARDS ,EODAD=QUIT
OUTPUT DCB MACRF=PM,DSORG=PS ,DDNAME«LINES
GO
OPEN (INPUT, INPUT)
OPEN (OUTPUT,OUTPUT)
RUN
GET INPUT,CARD
PUT OUTPUT,CARDOUT
В
RUN
QUIT
CLOSE (INPUT,OUTPUT)
QUTT2 CLOSEOUT макрокоманда действии,обязанных с забершением задания
/*
//LINES DD параметры
//CARDS DD параметры
I*
Рис. 9.1. Программа на языке ассемблера, использующая аппаратно
независимые макрокоманды ввода и вывода.
Карта определения данных
147
а
CARDDCB
CARDIN
Метод доступа
буферы
ВСВ
BBNAME=CARDS,,
V
BS
CL80
GET CARDBCB, CARDIN
^ Формируемый переход
9-
II CARDS DD параметры
Физическое
устройство
LINEBCB
UNEOUT
<_
ВСЗ
BS
BBNAME= LINES,,
V
CL120
Л
^
PUT LINEBCB, LINEOUT
^ Формируемый первт
Метод доступа
9
Буферы
//LINES BB параметры
Физическое
устройство
Рис. 9.2. Ввод — вывод в Системе IBM/360.
зей. Макрокоманды GET и PUT содержат адрес DCB и адрес
области, предназначенной для хранения входных данных или
поиска выходных данных; этими макрокомандами формируются
две константы и обеспечивается передача управления в
программный модуль метода доступа. Загрузочный модуль,
соответствующий этой программе, показан на рис. 9.2.
Операция ввода выполняется следующим образом.
Макрокоманда GET встречается как элемент цикла исполняемых команд
программы. При этом происходит передача управления в модуль
метода доступа. Модулю метода доступа подробные спецификации
L
148
Глава 9
вводимых данных становятся известными посредством анализа
блока управления данными (адрес DGB является одним из
параметров макрокоманды GET); кроме того, модулю метода доступа,
также из макрокоманды GET, известно место размещения в
основной памяти вводимых данных. Короче говоря, в этот момент
известно все, за исключением физических характеристик
устройства ввода. Их идентификация относится к функциям карты
DD. В DGB содержится параметр DDNAME, который определяет
карту DD, связанную с рассматриваемым набором данных.
Параметрами именно этой карты определяется выбор физического
устройства ввода данных.
Рассмотрим поэтапно, что здесь происходит в процессе вывода
данных. Блок управления данными, макрокоманда вывода и метод
доступа входят в загрузочный модуль программы (рис. 9.2, б).
Используемый метод доступа определяется программистом с
помощью параметров макрокоманды DCB; соответствующий модуль
операционной системы попросту вносится редактором связей в
загрузочный модуль программы. Макрокомандой PUT
реализуется передача управления в метод доступа. Используя адреса,
сообщаемые макрокомандой PUT, метод доступа может найти
нужный DCB и адрес данных, дополняя их необходимой для
управления выдачей данных подробной характеристикой записей.
В DGB имеется указатель на связанную с этой макрокомандой
карту DD, которая с помощью ряда параметров идентифицирует
физическое устройство вывода.
Переход от ленты к диску может быть достигнут заменой
одной карты управления заданиями. Большинство отлаженных
программ хранится в библиотеке в форме загрузочных модулей,
которые запускаются в счет, минуя процесс компиляции. Поскольку
операторы JGL не входят в загрузочный модуль программы, то
переход от ленты к диску не требует даже повторной компиляции!
Даже в том случае, когда требуется повторная компиляция,
связанная с выбором новых параметров блокирования или нового
метода доступа, все действия сводятся к изменению единственной
макрокоманды DGB.
Что можно сказать в этом отношении о языках высокого
уровня, таких, как Кобол и Фортран? Источником микрокоманд GET
и PUT в них, очевидно, являются операторы READ и WRITE,
но откуда берутся блоки управления данными? В Коболе блок
управления данными строится исходя из оператора SELECT...
ASSIGN, входящего в раздел описания функциональных средств,
и ряда предложений раздела данных, таких, как BLOCK
CONTAINS, LABELS ARE, и других. В Фортране DCB
формируются компилятором при чтении операторов R EAD или WRITE,
при этом предполагается запрос последовательного метода
доступа, если применением оператора FILE не оговорено противное.
Карта определения данных 149
В Коболе параметр DDNAME входит в оператор SELECT...
ASSIGN, как, например, в следующем операторе:
SELECT DATAIN ASSIGN TO UT -S -CARDS
указывающем на
//CARDS DD параметры
В Фортране DDNAME определяется по номеру устройства в
операторе ввода или вывода, например:
WRITE (6,15) А, В, С
который указывает на блок управления данными
метка DCB DDNAME =FT06P001f ...
связанный с операторами JGL типа
//FT06F001 DD параметры
Обратимся теперь к описанию самих карт DD.
Устройства для единичных записей
Для современных высокоскоростных ЭВМ программисты очень
редко используют непосредственное чтение данных с устройства
чтения карт или непосредственное обращение к печатающему
устройству; исходя из соображений эффективности такие данные
обычно пересылаются на ленту или диск специальным модулем
операционной системы. Однако устройства для единичных
записей составляют наиболее простой класс устройств ввода —
вывода, и поэтому на их примере удобнее начать рассмотрение карт
DD.
Что характерно для данных в форме единичных записей? Во-
первых, естественно, мы рассматриваем только единичные записи.
Нет необходимости думать о блокировании. Все записи имеют
одну и ту же длину, и логическая длина записи совпадает с
физической. В записях обычно отсутствуют метки. Карты и бумага,
несущие данные в этой форме, обычно не используются повторно,
разве что в качестве макулатуры; таким образом, стандартные
циклы движения этих носителей с последующей их передачей
в распоряжение программистов соответствуют особенностям
данных, представленных в форме единичных записей. Печатающие
устройства могут работать с различными длинами строк, и не все
устройства чтения карт ограничиваются только «стандартными»
картами с 80 колонками. Однако, за исключением задания длины
записей, вся информация, которую программист должен в этом
150
Глава 9
случае сообщить системе, сводится к назначению конкретного
устройства ввода или вывода. Это делается с помощью параметра
UNIT.
Устройства для единичных записей. Параметр UNIT
Параметр UNIT позволяет программисту задать конкретное
устройство ввода или вывода. Этот параметр может записываться
в любой из трех возможных форм:
1. UNIT = адрес устройства
2. UNIT = тип устройства
3. UNIT = групповое имя
Первой формой — UNIT = адрес устройства — обеспечивается
кодирование фактического адреса устройства. Каждому элементу
оборудования, входящего в состав вычислительной системы IBM,
присваивается индвидуальный трехзначный адрес; если,
например, определенное печатающее устройство имеет номер 8 и связано
с каналом 0, то его адрес равен 008 и карта DD, определяющая
доступ программы к этому и только к этому устройству, должна
быть закодирована в форме
//PRINTR DD UNIT =008
Если запрашиваемое устройство занято или недоступно по какой-
нибудь другой причине, то загрузочный модуль должен
оставаться в режиме ожидания. Это очень специальное требование —
«никакое другое печатающее устройство не годится». По этой
причине такая форма задания параметра, определяющего
устройство, используется редко.
Вторая форма задания параметра UNIT — UNIT=тип
устройства — используется чаще. Если программисту требуется
печатающее устройство типа 1403 и любое печатающее устройство этого
типа допустимо, то он использует запись
//OUTS DD UNIT =1403
Если вычислительная система оснащена несколькими
печатающими устройствами типа 1403, то загрузка задания и запуск его
в счет становятся возможными, как только освобождается хотя бы
одно из этих устройств; такая форма значительно свободнее и
поэтому используется намного чаще. Устройство чтения карт типа
2501 может быть запрошено записью UNIT = 2501; выходной
перфоратор карт типа 2520 запрашивается записью UNIT =
= 2520. Для запрашивающей программы применимо любое из
устройств, определяемых такими записями.
Третья форма задания параметра UNIT —- UNIT =
групповое имя.
Карта DD вида
Карта определения данных 151
//XYZ DD UNIT-READER
следует понимать как запрос любого из доступных устройств
чтения карт, будь то 2501, 2520 или 1442; это —наиболее общий
вид задания параметра UNIT. В каждом вычислительном центре
могут быть определены индивидуальные имена групп устройств;
здесь нет общепринятых стандартов, хотя запись UNIT = PUNCH
представляет широко распространенный способ формирования
запроса на устройство перфорации карт, а запись UNIT =
= PRINTER определяет, очевидно, групповое имя печатающих
устройств, входящих в состав системы. Используя эту форму
задания параметра UNIT, программист кодирует запрос любого
устройства чтения карт, или перфоратора, или печатающего
устройства независимо от их типа, физического адреса, фирмы-
изготовителя и других характеристик.
Обратите внимание на то, что в записи UNIT=READER от-
сутствуют пробелы. Напоминаем, что в управляющих картах
пробелы используются в качестве разделителей полей.
Единичная запись. Параметр DCB
Для каждого набора данных, используемого его программой,
программист должен записать макрокоманду блока управления
данными; именно здесь уместно указать длину логической записи.
Такой подход связан с некоторым неудобством — решение
перейти, например, от карт с 80 колонками к более современным
картам с 96 колонками требует повторной компиляции
программы.
Существует альтернатива этому подходу; параметры DCB
можно указать в карте DD. Это делается с помощью параметра
DGB. В упомянутом выше примере старая карта DD могла иметь
вид
//GARDIN DD UNIT=READER,DGB-(LREGL=80)
Заменяя эту управляющую карту другой
//CARDIN DD UNIT=READER,DCB=(LREGL=96)
изменяют длину логической записи, минуя повторную компиляцию.
Подпараметр (LRECL) определяет длину логической записи.
Подпараметры DCB могут задаваться либо в программном блоке
управления данными, либо в карте DD. Использование для этой
цели подпараметров карты DD —несколько более гибкий метод,
дающий возможность изменять характеристики записей без
повторной компиляции.
152
Глава 9
Подпараметры блока управления данными1 пересылаются в
программный блок DCB в момент исполнения процедуры OPEN,
к подробному описанию которой мы обратимся позже. Любая
информация о записях, кодируемая в программном DGB, не
модифицируется, даже если меняются соответствующие поля
параметров карты DD, т. е. программно кодированная информация
считается более значимой. Если программист предвидит какие-то
изменения в основных форматах своих записей, он не должен
определять соответствующие характеристики программно
кодируемыми параметрами, а передавать их значения с помощью
карты DD. Во многих системах, базирующихся на языке ассемблера,
программно кодируется лишь абсолютный минимум параметров
DSORG, MACRF, DDNAME —и это считается вполне
приемлемой нормой программирования.
Хотя при описании единичных записей не требуется
упоминания других параметров, по общему правилу допустимо
использование ряда подпараметров, разделенных запятыми и
заключенных в общие скобки. В поле параметра DGB не должны
употребляться пробелы. В рассмотренном выше примере
использования двух параметров отсутствуют разделяющие пробелы;
случайное употребление пробела между полями UNIT и DGB
привело бы к истолкованию параметра DGB как комментария,
содержание которого игнорируется.
Как UNIT, так и DGB являются параметрами,
определяемыми ключевым словом; они могут кодироваться в любом порядке.
Магнитная лента
Магнитная лента является намного более сложным носителем.
Логические записи не ограничиваются каким-либо определенным
форматом, они могут быть произвольной длины, блокированными
или неб локированными, и записи, составляющие файл, не
обязательно характеризуются одной и той же длиной. Файл может
составлять один том на ленте, но возможны и многотомные файлы
и многофайловые тома. Данные могут записываться с любой из
нескольких возможных значений плотности на лентах с семью
или девятью дорожками.
- В отличие от представления данных на картах или бумаге
печатающего устройства, данные на ленте часто хранятся в
библиотеке и отмечаются каталогизированным именем. Лента
допускает повторное использование, однако при этом прежние данные
теряются. С целью последующего многократного использования
1 Внутри программы мы используем параметры блока DGB, однако в
карте DD аббревиатура DCB является именем параметра; таким образом,
LRECL является параметром DCB, используемым в программе этого
блока, но, как элемент карты DD, это — подпараметр параметра DGB.
Карта определения данных 153
в конце шага задания данные, хранящиеся на ленте, могут быть
каталогизированы, сохранены с защитой, стерты или переданы
в программу другого шага. Всегда существует возможность
ошибочных действий человека — он не может читать записей на
ленте, — и важно предусмотреть меры по минимизации ошибок
такого характера. Простые правила типа «отдать ленту
программисту, и пусть он использует ее по своему усмотрению» неприемлемы
для носителей этого типа.
Тот факт, что лента не может читаться человеком, создает
трудности уже при выборе ленты, устанавливаемой на
лентопротяжное устройство. Для упрощения этой задачи и
минимизации ошибок большинство лент снабжаются метками, которые
проверяются программным модулем операционной системы (часто
это связывается с исполнением макрокоманды OPEN).
Проверка меток должна быть простой, однако не все ленты
размечаются и не все метки отвечают общепринятому стандарту.
Используя ленту, программист должен сообщить системе
необходимые сведения, однозначно определяющие выбранный
вариант обработки данных на ленте. Идентификация физических
устройств ввода — вывода имеет, конечно, существенное значение.
Необходимо сообщение об использовании меток с точным
указанием их типов. Порядковый номер (или порядковые номера) тома
или томов на магнитной ленте, устанавливаемых на
лентопротяжном устройстве, также требуют ясного указания. По
завершении шага задания оператор должен точно знать, что делать с
использованной в нем лентой. Если данные на ленте должны быть
каталогизированы и включены в библиотеку, то необходимо
указать каталогизируемое имя. С помощью блока управления данны- *
ми или параметров карты DD необходимо сообщить подробную
информацию, характеризующую записи. Любой программист,
использующий ленту, должен хорошо представлять правила
обработки- данных на ленте; они составляют важный раздел
оформления документации к заданию. Язык управления заданиями
представляет собой формализованное средство передачи сведений об
этих правилах в операционную систему.
В следующих ниже разделах рассматриваются различные
параметры карты DD, необходимые для формирования на ленте
нового набора данных. После того как будут описаны основные
параметры, рассмотрим задачу поиска существующего на ленте
набора данных.
Лента. Параметр UNIT
Во всем, за исключением присваиваемых ему конкретных
значений, параметр UNIT ленты идентичен с параметром UNIT
устройств для единичных записей. UNIT =181 —пример записи
154 Глава 9
в форме, использующей «адрес устройства» и содержащей
сообщение оператору о необходимости установить том на ленте на
устройство с номером 181 (канал 1, устройство 81). В большинстве
вычислительных центров номера устройств, входящих в состав
аппаратных средств, отчетливо обозначены на каждом из
устройств.
Используя максимально свободную форму записи — UNIT =■
ТАРЕ9, —можно было бы сообщить запрос об установке любой
ленты с 9 дорожками либо с помощью записи UNIT =»
ТАРЕ7 — об установке любой ленты с 7 дорожками.
Ввиду того что используемые ленты могут отличаться плотностью
записи, числом дорожек, а также вследствие того, что большинство
лентопротяжных устройств не приспособлено для работы с любым
из возможных типов лент, форма записи параметра UNIT,
основанная на «групповых именах», используется редко.
В работе с магнитными лентами наиболее широко
используется форма записи «UNIT — тип устройства». Семейство
лентопротяжных устройств фирмы IBM, идентифицируемое номером
«2400», включает следующие типы:
ТИП УСТРОЙСТВА ОПИСАНИЕ
2400 9 дорожек, плотность 800 бит/дюйм
2400-1 7 дорожек, преобразование данных не
предусматривается
2400-2 - 7 дорожек, возможно преобразование данных
2400-3 9 дорожек, плотность 1600 бит/дюйм
2400-4 9 дорожек, плотность 800 и 1600 бит/дюйм:
2400-5 Устройство 2420, модель 5, 1600 бит/дюйм
* Аналогично классифицируются по типам другие виды
лентопротяжных устройств. С помощью этой формы задания параметра
UNIT программист, планируя чтение 9-дорожечной ленты с
плотностью записи 800 бит/дюйм, употребил бы следующую запись:
UNIT = 2400-4
Иногда, имея дело с многоатомными наборами данных,
программист может заказать не одно лентопротяжное устройство.
Для этой цели вводится подпараметр UNIT COUNT. Запись
UNIT = (2400-3,3)
означает, что данная программа нуждается в трех
лентопротяжных устройствах для 9-дорожечных лент с плотностью записи
1600 бит/дюйм. Оба этих подпараметра — тип устройства и
количество устройств — являются позиционными; тип устройства
должен кодироваться как первый подпараметр, а количества
устройств должно кодироваться как второй подпараметр. Если
бы программист употребил ошибочную запись
UNIT = (3,2400)
Карта определения данных 155
система, вероятно, попыталась бы интерпретировать ее как заказ
на 2400 лентопротяжных устройств типа 3. Значения
позиционных параметров определяются их положением в поле записи.
Еще раз обратите внимание на то, что кодирование
нескольких подпараметров предполагает обязательное использование
скобок. Если подпараметр количества устройств явно не указан,
то подразумевается запрос только одного устройства.
Для экономии системного времени и сокращения времени
ожидания программ, уже находящихся в основной памяти (в
таком случае бесполезно занимающих дорогостоящие системные
ресурсы), сообщение об установке лент обычно вырабатывается
программным модулем операционной системы, инициирующим
задание, непосредственно перед вводом последнего в систему.
Учитывая вероятность сбоев ленты или других особенностей
обработки данных на ленте, иногда представляется целесообразным
отложить действия по установке ленты до момента фактического
выполнения процедуры открывания файла, когда потребность
в ленте становится очевидной. Запись UNIT = (2400,2,DEFER)
означает запрос двух девятидорожечных лентопротяжных
устройств с плотностью записи 800 бит/дюйм с указанием об
отсрочке установки; DEFER является третьим позиционным
подпараметром параметра UNIT. Сообщение об отсроченной
установке ленты на единственное лентопротяжное устройство с
плотностью записи 1600 бит/дюйм можно было бы записать в виде
UNIT = (2400-3„DEFER)
Лишняя запятая указывает на отсутствие одного из позиционных
подпараметров. Повторим тут еще раз, что значение позиционных
подпараметров определяется их положением в записи. DEFER
является третьим позиционным подпараметром.
Лента. Параметр VOLUME
Параметр VOLUME, часто сокращаемый до VOL, дает
возможность программисту запрашивать установку конкретного тома на
магнитной ленте. Отдельные тома на ленте обычно снабжаются
индивидуальными порядковыми номерами. Запрашивая
установку ленты с порядковым номером MU1234, программист мог бы
воспользоваться записью
VOL=SER=MU123f4
в которой «SER = порядковый номер ленты» является
подпараметром параметра VOLUME или VOL. Требование установить
на лентопротяжное устройство именно этот ленточный том с
плотностью записи 1600 бит/дюйм содержится вместе с рядом других
необходимых параметров в записи
156 Глава 9
//TSRQ DD UNIT=2400-3,VOL=SER=MU1234,...
Отметьте еще раз отсутствие пробелов.
Тот же самый набор параметров и подпараметров применим
к описанию многоатомных файлов, как, например, в записи
VOL =SER =(М01 ,М02,МОЗ,М04)
которой отвечает запрос об установке четырех различных томов
на лентах.
Программист может запросить установку общей или рабочей
ленты, просто не упоминая параметр VOLUME в своих
управляющих картах. В некоторых вычислительных центрах
стараются не допускать такого выбора по умолчанию, настаивая на явном
упоминании запрашиваемой рабочей ленты и включении в
управляющие карты записи типа
//ТАРЕ DD UNIT=2400-3,VOL=SER =SCRTCH,...
Параметр VOLUME используется модулем операционной системы
при формировании сообщений оператору об установке лент.
Сообщение
MOUNT TAPE SGRTGH ON DEVICE 182
явно указывает на то, что запрашивается общая лента. (Просто
не следует приписывать индивидуальной ленте в качестве ее
порядкового номера то же символическое имя, что и рабочей —
SCRATCH, например.)
Лента. Параметр LABEL
Как вы, наверное, догадались, параметр LABEL используется
для задания типа меток в выбранном томе; эта информация
используется макрокомандой OPEN при формировании меток вновь
создаваемых наборов данных и проверке меток существующих
файлов. Кроме того, этот параметр используется для задания
относительного положения рассматриваемого файла на
многофайловом томе —в этом состоит единственная особенность лент,
хранящих более одного файла. Существуют и другие подпараметры,
но пока мы их рассматривать не будем; для наших целей основная
форма параметра LABEL такова:
LABEL = (порядковый номер, тип метки)
Порядковый номер файла равен относительному положению
рассматриваемого файла на томе — первый файл имеет порядковый
номер 1; третий —3. Допустимые значения подпараметров типа
метки включают
Карта определения данных 157
ТИП МЕТКИ ЗНАЧЕНИЕ
SL Стандартные метки
SUL Стандартные метки и метки пользователя
NL Без меток
NSL Нестандартные метки
BLP Обойти обработку метки
Стандартные метки могут создаваться и проверяться
операционной системой, метки пользователя и нестандартные метки должны
проверяться подпрограммой, составляемой программистом (если
вообще они проверяются). Выбор «обойти обработку метки»
означает, что, хотя метки и присутствуют, их проверка по той или
иной причине не требуется.
Обычно каждый том на ленте хранит лишь один файл; для
создания нового тома на ленте со стандартными метками
программист кодирует запрос типа
LABEL = (1,SL)
или
LABEL = (,SL)
при этом запятая указывает на отсутствие первого позиционного
параметра, который по умолчанию полагается равным единице.
При создании нового набора данных на ленте макрокомандой
OPEN формируется соответствующая метка; при обращении к
существующему набору данных макрокомандой OPEN
проверяется метка набора с тем, чтобы убедиться в правильности
установки запрашиваемого файла.
Лента. Параметр DCB
Блок управления данными на ленте аналогичен блоку
управления данными в форме единичных записей, хотя и несколько
сложнее. Назначение блока управления данными состоит в том, чтобы
сообщить системе особенности отдельных записей. На ленте
записи могут иметь фиксированную или переменную длину,
объединяться в блоки или оставаться неблокированными; в связи с этим
требуются дополнительные подпараметры DGB, позволяющие
точно определить характер данных на ленте. Общепринятый
набор подпараметров DCB включает
Подпараметр Значение
BLSKIZE = Размер блока в байтах
DEN = Плотность записи на ленте
LRECL= Длина логической записи
RECFM= Формат записи
158
Глава 9
Назначение подпараметров размера блока и длины логической
записи очевидно; подпараметр RECFM определяет формат записи,
при этом F обозначает записи фиксированной длины, В
—блокированные записи, FB — блокированные данные фиксированной
длины, V —записи переменной длины и т. д. Подпараметр DEN
определяет плотность записи на ленте с кодом 0 для семидорожеч-
ной ленты с плотностью записи в 200 бит/дюйм, 1 — для 7-
дорожечной ленты — 556 бит/дюйм; 2 — для 7- или 9-дорожеч-
ной ленты — 800 бит/дюйм и кодом 3 для 9-дорожечной ленты —
1600 бит/дюйм. Стоит ли здесь беспокоиться о задании
плотности записи, если эта характеристика скорее является частью
параметра UNIT? Некоторые устройства позволяют работать с
лентами различной плотности записи, а параметр UNIT касается
только физического устройства.
Параметром DCB вида
DGB=(BLKSIZE=750, DEN=3,LRECL=75,RECFM=FB)
определяются блокированные записи фиксированной длины,
имеющие длину 75 байт, хранящиеся блоками по 750 байт (десять
логических записей в блоке) на ленте с плотностью записи
1600 бит/дюйм. Как и в случае устройств для единичных записей,
значения этих подпараметров можно было бы указать в
макрокоманде DCB; в карте DD параметр DCB кодируется в зависимости
от желания пользователя.
Лента. Параметр диспозиции
Что следует сделать оператору с данной лентой после завершения
задания? Ответ на этот вопрос кодируется значением параметра
диспозиции (DISP). Общая форма параметра диспозиции такова:
DISP = (а, 6, с)
где:
а —состояние набора данных в начале исполнения задания,
Ъ —состояние этого набора после успешного завершения
задания,
с —состояние того же набора при непредвиденном
завершении задания.
Все три параметра —позиционные.
Если в некотором шаге задания создается новый набор данных,
то значением его подпараметра а является NEW. Для уже
существующего набора данных в качестве значения а используется OLD.
К некоторым наборам данных, например библиотечным, могут
обращаться несколько программ, одновременно находящихся
в памяти. Значением подпараметра а для таких наборов данных
Карта определения данных 159
является слово SHR, что означает «разделенный», —это значение
не может использоваться заданием, включающим модификацию
данных рассматриваемого файла. Использование SHR
указывает на то, что файл доступен двум или большему числу программ.
Диспозиция MOD используется в тех случаях, когда программист
намерен добавить к существующему набору данных
дополнительные записи; в момент исполнения макрокоманды OPEN
операционной системой вносятся указатели операций чтения — записи
на место прежнего признака конца файла.
При нормальном завершении шага задания используется
значение второго подпараметра диспозиции. Если рассматриваемые
данные больше не нужны, то программист может воспользоваться
кодом DELETE; употребление в этом случае подпараметра KEEP
означает, что набор данных должен быть сохранен на ленте, а
лента перемотана и снята с устройства. Если данные на ленте
требуются для исполнения одного из следующих шагов того же самого
задания, то программист может употребить в качестве
значения подпараметра Ъ слово PASS. Файл может быть
каталогизирован (GATLG), сохранен в библиотеке, или удален из нее
(UNGATLG), или оставлен для повторного использования.
При непредусмотренном завершении задания выбор
диспозиции может быть иным, причем значением третьего подпараметра
DISP может быть любая опция, соответствующая нормальному
завершению задания, за исключением опции PASS. Если значение
третьего подпараметра не указывается, то считается, что
диспозиция, соответствующая нормальному завершению, применима и к
случаю непредусмотренного завершения задания.
Для создания некоторого набора данных, передачи его в
другой шаг задания и уничтожения в случае грубой ошибки пишут
DISP = (NEW.PASS DELETE}
Если требуется создать новый файл и каталогизировать его в
случае нормального завершения шага, сохраняя для последующего
анализа или возобновления счета при появлении ошибки, то
кодируется следующая запись:
DISP = (NEW,GATLG,KEEP)
Для временно используемой рабочей ленты, которая требуется
лишь для выполнения одного шага Задания, в карте DD этого
задания следует указать такой параметр диспозиции;
DISP = rNEW,DELETE)
Так как параметр диспозиции, соответствующий
непредусмотренному завершению задания, не кодируется, то по умолчанию он
считается совпадающим со вторым подпараметром DELETE.
160
Глава 9
Лента. Параметр имени набора данных
Чтобы упростить задачу поиска каталогизированных или
передаваемых наборов данных, программист может приписать набору
данных индивидуальное имя пользуясь параметром DSNAME
(DSN —приемлемое сокращение). Допустимое имя набора
данных включает от одного до восьми символов (букв или цифр), в
том числе символы $ или #, и начинается с буквы.
Допускается использование составных имен наборов данных: например,
запись
DSNAME == MU.USERDATA.SAN1
указывает на то, что размещение набора данных, поименованного
словом SAN1, может быть определено по значению индекса
USERDATA, которое в свою очередь определяется значением
главного индекса, названного MU. Каждый уровень классификации
должен быть реализован в форме индекса в системном каталоге.
Временным наборам данных, существующим лишь в течение
исполнения задания, приписываются имена, начинающиеся с
символа амперсанда (&), как, например,
DSNAME =-- && TEMP
Обычно во избежание возможных совпадений с некоторыми
системными параметрами в качестве признака временного набора данных
используются двойные амперсанды.
Имена библиотечных или индексно-последовательных наборов
данных строятся несколько иначе; прежде чем работать с файлами
этих двух типов, ознакомьтесь с хорошим руководством.
Примеры создания набора данных на ленте
с помощью карт DD
1. Создать временный набор данных и передать его в следующий
шаг задания:
//ТАРЕ DD UNIT=2400-3*VOL=SER*WX2453,
// DCB«(LRECL*145,BLKSIZE=2900,RECFM=FB),
// LABEL=(,SL),DISP«(NEW,PASS).DSN-&&T
2. Создать и каталогизировать постоянный набор данных:
Карта определения данных 161
//MAGI DD UNIT=2400-4,LABEL»(,SL),DSN«TT,
// VOL=SER=A572,DCB=(RECFM=FB,
// BLKSIZE=1200,LRECL=120,DEN=O),
// DISP«(NEW,CATLG)
3. Использовать общую ленту:
//SCRATCH DD DISP=(NEW,DELETE),DSNAME=&&WORK,
// DCB=(BLKSIZE=104,LRECL=52,RECFM=FB),
// LABEL=(,SL),UNIT=2400-3,
// VOL«SER=SCRTCH.
Все параметры карты DD определяются ключевыми словами, т. е.
они могут кодироваться в любом порядке. (Многие из
подпараметров — позиционные.) Обратите также внимание на то,
каким образом операторы JCL продолжаются во второй, третьей и
четвертой картах, —мы просто обрываем запись после любой
запятой и возобновляем ее на следующей карте. Карты
продолжения должны начинаться символами // в первых двух
колонках — отличительный признак управляющей карты, —а
возобновляемая запись должна начинаться до семнадцатой колонки.
Лента. Параметр DUMMY
Установка лент не относится к излюбленным занятиям оператора,
поэтому задания, требующие ленты, часто обрабатываются с
очень низким уровнем приоритета. Тестируя свою программу,
программист может при желании отказаться от посылки
оператору сообщения об установке ленты (а следовательно, и от
использования ленты). Это может быть сделано с помощью параметра
DUMMY
//DATA DD DUMMY,UNIT=2400,...
Слово DUMMY является параметром позиционным и должно
располагаться в самом начале поля операндов. Впоследствии, когда
программист пожелает использовать данные, хранимые на его
лентах, задание может быть введено без параметра DUMMY.
6—821
162 Глава 9
Поиск существующего набора данных на ленте
Если некоторый набор данных был каталогизирован или передан
из предыдущего шага того же самого задания, то обычно для его
идентификации достаточно записать только параметры DDNAME
и DISP
//ТАРЕ1 DD DSNAME = && WORK, DISP=f OLD, DELETE)
//MAGS DD DSN =MAST01 ,DISP =(OLD ,KEEP)
//FILE DD DSNAME =MU.USERDATA.SAN1,DISP =SHR
Другие параметры, в том числе параметры блока управления
данными, входят частью каталогизированных наборов данных или
частью таблиц операционной системы для пересылаемого набора
данных; таким образом, их повторное кодирование не требуется.
Однако во многих вычислительных системах повторное
кодирование хотя бы одного из опущенных параметров означает
необходимость повторного кодирования и всех остальных.
Параметр UNIT кодируется лишь в том случае, когда «текущий» шаг
задания связан с созданием новых данных, требующих
дополнительных лентопротяжных устройств.
Во втором из приведенных выше примеров по завершении
задания ранее каталогизированный набор данных сохраняется; в
результате данные и все значения индексов сохраняются. Если
сохраняется некаталогизированный набор данных, то программист
должен задать значения параметров DSNAME, DISP, UNIT и
VOLUME, обеспечивающих его поиск, например:
//DATA DD DSNAME = KEEPIT,DISP =(OLD,KEEP),
// UNIT =2400-3,VOL - SER =X12
Параметр LABEL необходим во всех случаях использования
нестандартных меток. Информация DGB не обязательна и обычно
может быть получена по значению метки в момент исполнения
макрокоманды OPEN.
Запоминающие устройства прямого доступа
Хранение данных в устройствах прямого доступа аналогично
хранению данных на ленте. Возможны разнообразные форматы
записей. Могут быть использованы многофайловые тома и много-
Карта определения данных 163
томные файлы, хотя наиболее распространен первый способ
хранения. Плотность записи не является изменяемым фактором.
Пространство на диске может использоваться повторно, а файлы —
каталогизироваться и сохраняться или объявляться общими и,
таким образом, доступными другой программе. Не исключена
возможность случайного или преднамеренного разрушения данных.
Пакеты дисков и магнитных ячеек могут устанавливаться и
сниматься по запросу программиста, хотя такая практика во многих
вычислительных центрах не поощряется. К наборам данных
прямого доступа применима проверка меток. Основное отличие
устройств прямого доступа от ленты — возможность как прямого,
так и последовательного доступа — является функцией программ
метода доступа, а не языка управления заданиями. Поэтому не
удивительно, что большинство параметров карты DD,
относящихся к использованию ленты, могут рассматриваться и как
параметры наборов данных, хранящихся на устройствах прямого
доступа.
Тем не менее существует одно важное отличие. Магнитная
лента может рассматриваться как носитель неограниченной
емкости, тогда как пространство памяти прямого доступа относится
к лимитируемым ресурсам. Запуск программы, формирующей
набор данных на устройстве прямого доступа, предваряется
проверкой наличия достаточного для ее выполнения свободного
пространства, при этом программист должен сообщить системе
оценку требуемого объема пространства памяти прямого доступа;
это делается с помощью параметра SPACE. В последующих
параграфах мы рассмотрим различные параметры карты DD,
связывая их с созданием файлов прямого доступа; новый параметр
SPACE мы рассмотрим позже. В ходе обсуждения параметров
будут приведены примеры карт DD, необходимых для создания
и поиска наборов данных прямого доступа.
Файлы прямого доступа. Параметр UNIT
Устройства прямого доступа часто запрашиваются ссылкой на
тип устройства, употребляя числа 2311, 2414 и 3330 в качестве
обозначений общеупотребительных типов дисковых устройств, а
2301, 2302 и 2303 —для барабанов. Запись
UNIT =3330
означает запрос пространства на любом диске типа 3330.
Диск и барабан часто используются для хранения
промежуточных результатов процесса обработки данных. Чтобы упростить
кодирование запросов на такие рабочие файлы, во многих
вычислительных центрах введены групповые имена для одного или не-
6*
164
Глава 9
скольких томов прямого доступа,SYSDA и WORK1 —типичные
групповые имена такого рода.
Иногда программисты заказывают устройство прямого
доступа по его фактическому адресу. Обычно этот метод применим
лишь к личным съемным пакетам дисков, совместимым только с
определенным дисководом.
Файлы прямого доступа. Параметр VOLUME
Параметр VOLUME используется для задания конкретного тома
прямого доступа. Для временных наборов данных, точный адрес
размещения которых до момента их создания не имеет большого
значения, параметр VOLUME обычно не используется; в случае
постоянного файла набор данных, вероятно, размещается на
одном и только одном томе, поэтому задание параметра VOLUME
необходимо. Употребление параметра VOLUME означает, что
рассматриваемый файл может храниться «на этом и только этом
томе».
Файлы прямого доступа. Параметр LABEL
Поскольку устройства прямого доступа почти всегда снабжаются
стандартными метками, указание параметра LABEL обычно
не требуется. Иногда, в основном с целью обеспечения
повышенной безопасности набора данных, применяются метки
пользователя. Чтобы сообщить о наличии меток пользователя, применяют
запись
LABEL =(,SUL)
которая указывает на присутствие как стандартных меток, так и
меток пользователя.
Файлы прямого доступа. Параметр DCB
И в этом случае общеупотребительными подпараметрами DCB
являются LRECL, или длина логической записи. BLKSIZE, или
размер блока, и REGFM, или формат записи. Плотность записи
не изменяется, поэтому подпараметр DEN используется редко,
если вообще используется.
Файлы прямого доступа. Параметр диспозиции
Возможные значения параметра диспозиции для устройства
прямого доступа и ленты во всех практических случаях совпадают.
Поскольку пакеты дисков меняются значительно реже, действия
оператора могут быть несколько иными. Однако с точки зрения
программиста, возможные диспозиции в этих случаях идентичны.
Карта определения данных 165
Файлы прямого доступа. Параметр имени набора данных
Как и в случае ленты, параметр имени набора данных, или
DSNAME, или —еще короче —DSN, служит удобным
механизмом поиска каталогизированных или пересылаемых наборов
данных. Использование составных имен файлов прямого доступа
широко распространено.
Файлы прямого доступа. Параметр SPACE
В большинстве вычислительных систем пространство памяти
устройств прямого доступа относится к лимитируемым ресурсам. Если
программу, требующую на диске десять цилиндров, загрузить
в память и запустить в решение в момент, когда доступны лишь
пять цилиндров, то она либо остается в памяти, ожидая
освобождения необходимого пространства памяти прямого доступа, либо
ее приходится принудительно вывести из состояния «задача» с
тем, чтобы в последующем ввести заново; в обоих случаях
бесполезно расходуются дорогостоящие системные ресурсы. Чтобы
избежать или по крайней мере минизировать возможность
подобной ситуации, программист должен сообщать системе данные о
необходимом для выполнения его программы пространстве
памяти прямого доступа, задавая значения параметра SPACE.
Потребность в пространстве памяти может задаваться числом
дорожек, цилиндров или блоков данных. Единица измерения
пространства памяти и требуемое их число определяется двумя
позиционными подпараметрами; запись
SPACE = (TRK,20)
означает запрос двадцати дорожек, тогда как записью
SPACE = (CYL,14)
запрашиваются четырнадцать цилиндров, а записью
SPACE = (200,10)
— десять блоков по 200 байт каждый. Единица измерения
пространства — цилиндры, дорожки или блоки —является первым
позиционным подпараметром, далее следует число требуемых
единиц.
Оценку необходимого пространства памяти не всегда легко
произвести. Рассчитывая получить достаточный объем
пространства памяти прямого доступа, программист может попытаться
запросить несколько больший объем, чем необходимо его
программе,- понапрасну расходуя этот лимитируемый ресурс и,
вероятно, снижая уровень приоритета своей программы. К счастью,
он может воспользоваться еще одной опцией. Запись
SPACE =(TRK,(10,5))
*
166 Глава 9
означает требование отвести в пользование данной программой
десять дорожек; если этого пространства окажется мало, то
программе будут отведены дополнительно еще пять дорожек (если
в это время они окажутся доступными). Как и прежде, первый
позиционный подпараметр определяет единицу измерения
запрашиваемой памяти; второй подпараметр задает число требуемых
единиц. Третьим подпараметром определяется повторное
распределение памяти, при этом он учитывается лишь в том случае,
когда программа исчерпывает все первоначально выделенное ей
пространство. Важно помнить, что первоначальное
распределение пространства осуществляется до начала исполнения
программы, на самом деле даже до загрузки программы в основную память.
Повторное распределение памяти происходит по мере
необходимости уже в процессе выполнения шага задания. Выполнение шага
задания может быть прекращено из-за недостатка пространства
памяти прямого доступа (хотя определяемое первичным и
вторичным запросами суммарное пространство может быть вполне
достаточным), если в момент повторного распределения в
распоряжении системы не окажется требуемого свободного
пространства памяти. В интересах программиста задавать первичную
оценку необходимого пространства как можно точнее. Вторичное
распределение пространства может быть повторено до пятнадцати раз.
Например, параметр SPACE вида
SPACE = (CYL,(5,2))
определяет запрос максимум на тридцать пять цилиндров — пять
цилиндров по первичному запросу плюс два цилиндра в каждом
из пятнадцати повторных распределений.
Синтаксис записи этого параметра, использующего вложенные
скобки, несколько необычен. Для облегчения пользования
скобками следует помнить о том факте, что как второй, так и третий
позиционный подпараметр касаются числа требуемых единиц
пространства прямого доступа и, следовательно, должны
рассматриваться совместно.
Запрос слишком большого пространства может привести к
полному захвату лимитируемого системного ресурса и вызвать
тем самым отсрочку исполнения другой программы. Во
избежание подобных ситуаций программист может объявить о возврате
в систему всего не использованного к концу шага задания
пространства прямого доступа, что достигается кодированием RLSE,
или параметра освобождения, как в примере
SPACE = (CYL,(5,1),RLSE)
Этот подпараметр является позиционным и должен записываться
вслед за подпараметрами количественного распределения.
Карта определения данных 167
Для обеспечения оптимальных условий ввода и вывода
данных на диске пространство иногда запрашивается в связной
форме, минимизируя таким образом время поиска на диске при
переходе от цилиндра к цилиндру. Параметром
SPACE = (TRK,(5,2),RLSE,CONTIG)
запрашиваются пять смежных дорожек с двумя
дополнительными смежными дорожками при вторичном распределении с
освобождением всего неиспользованного к завершению шага задания
пространства. Без указания подпараметра RLSE этот параметр
кодировался бы так:
SPACE = (TRK,(5,2)„CONTIG)
Обратите внимание на лишнюю запятую, указывающую на
отсутствие одного из позиционных подпараметров.
Примеры. Создание набора данных прямого доступа.
1. Временный набор данных на системном рабочем пакете дисков:
//DISK DD DSNAME=&&TEMP,UNIT=SYSDA,
// DISP=(NEW,PASS) ,SPACE=(CYL,5),
// DCB=(LRECL=120,BLKSIZE»2400,
// RECFM=FB)
2. Каталогизированный набор данных на определенном томе:
//RECS DD DSN=MU-USERDATA.SAN4,UNIT=3330,
// V0L=SER=MIAMI3,DISP=(NEW,CATLG),
// SPACE=(TRK,(20,5),RLSE,CONTIG),
// DCB=(LRECL=155,RECFM=FB,BLKSIZE=1550)
3. Сохраняемый набор данных:
//KEEPIT DD SPACE=(CYL,(10,2),RLSE),
// DCB=(RECFM»FB,LRECL=72,BLKSIZE=720),
// VOL=SER=MYPACK,DISP=(NEW,KEEP).,
// DSNAME=MYDATA,UNIT»3330
Примеры. Поиск набора данных прямого доступа,
1. Пересылаемый набор данных
168 Глава 9
//DATA DD DSNAME =&&TEMP,DISP = (OLD, DELETE)
2. Каталогизированный набор данных
//STUFF DD DSN=MU.USERDATA.SAN4,DISP=OLD
3. Сохраняемый набор данных, который не каталогизирован и не
определен значением индекса, требует в дополнение к параметрам
DSNAME и DISP задания значений параметров UNIT и VOLUME
//DDNAME DD DSNAME =MYDATA,UNIT =3330,
// VOL= SER=MYPACK,DISP = (OLD,KEEP)
Устройства системного ввода и системного вывода
В процессе спулинга создаются два новых набора данных:
системное устройство ввода заменяет физическое устройство чтения
карт и системное устройство вывода — непосредственное
обращение к печатающему устройству. Многие вычислительные
системы оснащаются также третьим системным устройством,
предназначенным для обеспечения спулинга, связанного с выдачей
данных на перфокарты. В таких операциях спулинга часто
используется диск; может использоваться и лента. Спулинг может
быть реализован в онлайновом или офлайновом режимах.
Используемые при этом физические тома могут изменяться ото дня
ко дню или даже в течение одного дня. Поскольку эти устройства
используются столь часто, большинство соответствующих
параметров карт DD назначаются операционной системой, оставляя
программистам указывать лишь самые необходимые признаки.
Большинство программистов, работавших с вычислительными
машинами типа IBM, знакомы с картой вида
//SYSIN DD *
SYSIN, очевидно, является значением параметра DDNAME, но
что означает эта звездочка? Как вы, вероятно, помните, задание
посылается в систему в форме колоды карт, включающей
операторы JCL, один или, быть может, несколько исходных
модулей и данные. Звездочка указывает на то, что за этой картой DD
следуют данные, являющиеся частью того же самого потока
заданий. Во время спулинга весь поток заданий пересылается в
некоторое устройство; если система в состоянии найти эту карту DD,
то она сможет найти и связанные с ней данные. Между прочим,
в символах SYSIN нет ничего мистического; это не более чем
значение параметра DDNAME, Программист мог бы
воспользоваться любым значением DDNAME для идентификации системного
Карта определения данных 169
устройства ввода, лишь бы это значение было согласовано с
выбранным в его программе именем, входящим в блок управления
данными. Многими компиляторами и утилитами (которые обычно не
могут изменяться прикладным программистом) SYSIN
используется как значение параметра DDNAME карточного файла (или
его образа), поступающего из системного устройства ввода, что,
вероятно, и объясняет популярность этого специального имени.
Спулинг данных в выходное печатающее устройство обычно
обеспечивается следующей картой:
//SYSOUT DD SYSOUT = A
Перфорация выходных данных на картах будет выполнена как
результат использования карты
//SYSPUNCH DD SYSOUT=В
SYSOUT и SYSPUNCH, также как и SYSIN, являются широко
распространенными значениями параметра DDNAME и никакого
другого реального смысла не имеют. Программист, который
предпочитает сам кодировать в своей программе блоки управления
данными, может использовать любые имена в качестве значений
параметра DDNAME, соответствующего системным устройствам
ввода и вывода, хотя нельзя отрицать преимуществ
документирования, основанного на использовании стандартов и принятых
правил.
В приведенных выше примерах буквой А обозначены
выходные данные печатающего устройства, тогда как В означает
перфокарты. Эти идентификаторы широко распространены, однако
вряд ли они являются универсальными; в каждом
вычислительном центре могут быть выбраны свои наборы символических
обозначений различных системных устройств. Во многих
вычислительных системах вводится ограничение на пространство памяти
системного диска, предоставляемое одной программе и
используемое в спулинге выходных данных. В тех случаях, когда
ожидаются большие объемы выходных данных, это ограничение
может быть отменено кодированием параметра
//SYSPRINT DD SYSOUT =A,SPACE=(GYL,r5,2))
t
Классификаторы шагов задания в картах DD
Часто две или большее число карт DD, входящие в различные
шаги одного и того же задания, снабжаются одним и тем же
значением параметра DDNAME. Обычно это случается при
использовании каталогизированной процедуры, включающей
компиляцию, редактирование связей и исполнение. Компилирующая
программа принимает входные данные от системного устройства вво-
170 Глава 9
да, поэтому исходная колода обычно сопровождается картой
//SYSIN DD*. В шаге исполнения программы, если
предусматривается ввод данных на картах, также используется
системное устройство ввода, и в этом случае данным предшествует
карта SYSIN DD* , за исключением тех случаев, когда
программист сам кодирует блоки управления данных в тексте
программы. Для различения этих двух карт часто используется
следующая запись операторов JCL:
//JOBNAME JOB (9824,18),DAVIS,CLASS=A
// EXEC FORTRAN
//FORT,SYSIN DD *
FORTRAN Исходная тода
/*
//GO.SYSIN DD *
Данные
/*
Картой исполнения EXEC вызывается каталогизированная
процедура с именем FORTRAN; эта процедура включает три шага
с именами FORT (компилятор), LKED (редактор связей) и GO
(загрузочный модуль программы). FORT.SYSIN является
именем карты DD, включенной в первый шаг задания с именем
FORT. GO.SYSIN вносится в карты шага GO.
Кстати, оператор-ограничитель —карта/* —отмечает конец
данных, входящих в поток задания. Начиная с четвертого поля
управляющей карты могут кодироваться комментарии.
Некоторые программисты используют карту /* для выделения шага в
многошаговых заданиях.
Оператор PROC
Операторы JOB, EXEC и DD являются, безусловно, наиболее
употребительными операторами управления заданиями, но
существуют и другие операторы. Оператор PR ОС, например,
используется для задания «умалчиваемых» значений
символических параметров каталогизированных процедур. Другая карта —
нулевая — содержит лишь две косые черты в первых двух
колонках;
//
Карта определения данных 171
Этой картой иногда отмечают конец задания. В карте
комментариев символы //* перфорируются в первых трех колонках, при
этом остальная часть карты может содержать произвольные
записи. Комментарии могут сопровождать любой управляющий
оператор потока задания.
Законченный пример
Наилучший способ овладения любым языком состоит в
рассмотрении и анализе конкретного примера; в этом отношении
язык управления заданиями не составляет исключения.
Наш пример (см. рис. 9.3) представляет довольно типичное
Рис. 9.3. Блок-схема задания к примеру, представленному на языке JCL.
172
Глава 9
//MYJOB JOB (9182,333) ,.fW.S. DAVIS*,CLASS=A
//STEP1 EXEC PGM=EDIT
//STEPLIB DD DSN=MU.USERPGM.SAN,DISP=SHR
//OUTS DD DSNAME=&&TEMP,UNIT=SYSDA,DISP=(NEW,PASS),
// SPACE=(TRK,(10,2),RLSE),DCB=(LRECL=80,
// BLKSIZE=800,RECFM=FB)
//SYSIN DD *
[Карты данных]
/*
//SECOND EXEC SORTPC
//SORTIN DD DSN=&&TEMP,DISP=(OLD,DELETE)
//SORTOUT DD DSNAME=MYOUTS',UNIT=2400-3,VOL=SER=F712,
// LABEL*(,SL),DISP=(NEW,PASS),DCB=(LRECL=80,
// BLKSIZE=800,RECFM=FB)
//* THE NEXT TWO CARDS GIVE THE SORT ROUTINE ITS FIELDS,
//SYSIN DD *
*s* SORT, FIELDS=(1,5,CH,A)
/* THE FIELD STARTS IN COLUMN 1, CONSUMES 5 COLUMNS,
//* AND HOLDS CHARACTER DATA WHICH IS TO BE SORTED
//* INTO ASCENDING ORDER.
Рис. 9.4. Пример полной записи задания на языке JCL.
многошаговое задание. В первом шаге задания читаются
и редактируются данные на картах, поступающие из
системного устройства ввода, при этом результаты обработки
пересылаются на диск; программа редактирования хранится в личной
библиотеке. Во втором шаге, использующем каталогизированную
Карта определения данных 173
//THIRD EXEC PGM=PROCESS
//STEPLIB DD DSN=MU.USERPGM.SAN,DISP=SHR
//TAPEIN DD DSN=MYOUTS,DISP=(OLD,CATLG)
J /MASTER DD DSN=MU.USERDATA. SANS, DISP= (OLD ,.KEE?)
J/TAPEOUT DD DSN=MYERRS,UNIT=2400-3,VOL=SER=E712,
JI LABEL=(,SL) ,DISP=(NEW,CATLG) ,
JI DISP=(LRECL=80,BLKSIZE=1200,RECFM=FB)
J/LAST EXEC COBOL
У/COB.SYSIN DD *
[Исходная коаода карт программы на Коболе]
/*
//TAPEIN DD DSN=MYERRS>DISP=(OLD,KEEP)/
//
Рис. 9.4 (продолжение).
процедуру стандартной программы сортировки, эти данные
сортируются, а результаты записываются на ленту. В третьем шаге
задания выполняется слияние этого файла на ленте с главным
файлом, хранящимся на диске; обнаруженные ошибки
записываются на другую ленту, и в конце шага задания содержимое
обеих лент каталогизируется. Заключительный шаг является новым
для этого задания — в нем все еще используется исходная колода
программы на Коболе. Этим шагом считываются с ленты
обнаруженные ошибки и подготавливается отчет об ошибках,
который пересылается в печатающее устройство.
На рис. 9.4 показана одна карта DD, которая ранее явно
не упоминалась, —карта STEPLIB; этой картой определяется
библиотека, содержащая программу. На рис. 9.3 представлена
блок-схема нашего примера многошагового задания. Операторы
JCL показаны на рис. 9.4. Тщательно изучите этот пример; если
вы можете понять смысл всех параметров, то вы достаточно
хорошо освоили материал последних двух глав.
174 Глава 9
Между прочим, возвращаясь к вопросу о библиотеках, все
карты //STEPLIB на рис. 9.4 можно было бы заменить
единственной картой
/ДОБЫВ DD DSN=MU.USERPGM.SAN,DISP=:SHR
записанной сразу после карты JOB. За исключением этой карты
JOBLIB, ни одна из карт DD не может располагаться перед
первой картой EXEC. Вы, может быть, также обратили
внимание на отсутствие карт, идентифицирующих библиотеку наших
каталогизированных процедуру механизм доступа к библиотекам
катализированных процедур и некоторым другим системным
библиотекам является частью операционной системы.
Краткие выводы
В этой главе мы рассмотрели параметры карты DD для
единичных записей, ленты, устройств прямого доступа и системных
наборов данных. Подобный перечень этих параметров в удобной
для ссылок форме составляет приложение Б. Управляющие
карты, показанные на рис. 9.4, являются хорошей иллюстрацией
к материалу гл. 8 и 9.
УПРАЖНЕНИЯ
1. Поясните, каким образом в операционной Системе IBM/360
программа связывается физическим устройством ввода
—вывода.
2. Поясните связь между программным DCB и параметром
DCB в карте DD.
3. Запишите коды для параметра UNIT, резервирующие три
лентопротяжных устройства семейства 2400 с плотностью записи
800 бит/дюйм. Отнесите действия по установке лент к моменту
открытия файлов.
4. Запишите параметр DCB карты DD для файла на
магнитной ленте, состоящего из блокированных записей фиксированной
длины при длине логических записей, равной 50 символам, и 50
записей в блоке. Эта лента характеризуется плотностью 1600 бит/
/дюйм.
5. Запишите коды параметра SPACE, резервирующего 20
смежных цилиндров. Включите дополнительные цилиндры,
запрашиваемые по 2 в каждом повторном распределении.
Обеспечьте возврат неиспользованных цилиндров в конце шага задания.
6. Запишите карту DD для создания файла на ленте с
плотностью записи 1600 бит/дюйм, с серийным номером MYTAPE.
Карта определения данных 175
Каталогизируйте данные, хранящиеся на ленте, в случае
нормального завершения задания; в противном случае сохраните их для
последующего анализа. Для простоты используйте серийный
номер ленты в качестве каталогизируемого имени. Записи имеют
длину 35 символов и блокируются в группы по 25 записей; все
записи имеют одну и ту же длину. Используйте стандартные
метки.
7. Составьте карты DD для временного рабочего набора
данных на системном устройстве прямого доступа SYSDA. Закажите
10 дорожек. Запросите дополнительные дорожки группами по две.
Не обязательно, чтобы они были смежными, однако обеспечьте
возврат в систему неиспользованных по завершении шага
задания дорожек. Каждая логическая запись состоит из ста байт,
и они объединены в блоки по 30 записей. Набор данных следует
переслать в другой шаг задания.
Ваш руководитель может предложить дополнительные
упражнения по JCL.
Часть IV
КОНЦЕПЦИИ ОПЕРАЦИОННЫХ СИСТЕМ
Глава 10
ФУНКЦИИ И НАЗНАЧЕНИЕ ОПЕРАЦИОННОЙ СИСТЕМЫ
N
Введение
Эта глава, по существу, представляет собой обзор содержания
оставшейся части книги. Здесь мй обсудим те функции, которые
должны обеспечиваться современной операционной системой.
Будет рассмотрено несколько способов определения эффективности
системы обработки данных и проанализирован противоречивый
характер соответствующих критериев. Ниже также обсуждается
зависимость структуры операционной системы от ограничений,
связанных с внешними факторами технологического,
экономического, политического и конъюнктурного характера. Глава
заканчивается кратким предварительным обзором различных типов
операционных систем, рассматриваемых в гл. 11—18.
В этой главе выделяется одно ключевое положение —
«лучшая» система является относительным понятием. Структура
операционной системы, подходящая для одних целей, может
оказаться совершенно неприемлемой для других. В этой главе мы
исследуем проблему противоречивости критериев.
Системные ресурсы
Назначение операционной системы состоит в обеспечении более
высокой эффективности использования системных ресурсов.
Математическое обеспечение систем мультипрограммирования
может служить идеальной иллюстрацией этого положения; как мы
уже видели, мультипрограммированием достигается значительно
более высокая степень занятости CPU за счет использования
времени, которое прежде тратилось впустую. К другим системным
ресурсам относится основная память машины, регистры,
устройства ввода и вывода, вторичная память, различные
информационные ресурсы (в том числе библиотечные программы) и, в
меньшей степени, людские ресурсы, т.е. программисты, операторы
и пользователи окончательных результатов процедур обработки
данных; в хорошо спроектированной операционной системе
должны учитываться, если не все перечисленные выше факторы, то
большинство из них. В области науки и техники широко при-
Функции и назначение операционной системы 177
меняется термин «оптимизация». Слово «оптимальный» (во всяком
случае, по Вебстеру) означает «наилучшие или наиболее
предпочтительные уровни, условия, количества и т. д.». Оптимизировать
означает достичь наилучшего результата. Короче говоря,
назначение операционной системы состоит в том, чтобы
оптимизировать использование всех системных ресурсов.
Критерии эффективности
Приведенное выше определение оптимальности кажется довольно
простым, однако на самом деле это не так. Приведем одну
аналогию. Какой двигатель автомобиля считать оптимальным? Что,
по-вашему, следует отнести к характеристикам эффективности?
Имеет ли для вас определяющее значение скорость? Или
безопасность? Или расход топлива? Или емкость салона и багажного
отделения? Или удобство передвижения? Или стоимость? Или
престиж? А может быть, некоторое их сочетание? Другими
словами, что вы считаете критериями эффективности и как вы
оцениваете их относительную значимость? Разные люди по-разному
отвечают на эти вопросы, если судить по числу различных
моделей автомобилей, находящих сбыт в США. Назовите те
характеристики, которые вы считаете в автомобиле важными, и лишь
тогда мы сможем приступить к анализу точного смысла слова
«оптимальный» в применении к автомобилю ийи автомобильному
двигателю. Понятие «лучший» весьма относительно.
При оценке качества вычислительной системы могут
использоваться различные факторы, в том числе:
1. Пропускная способность —мера объема работы,
выполняемой машиной в единицу времени. Пропускная способность часто
выражается в процентах фактического времени занятости CPU
к полному рабочему времени системы.
2. Бремя обращения — время обработки задания, начиная
с момента его запуска в счет до завершения.
3. Время ответа —важная характеристика в системах
разделения времени; оно определяется как промежуток времени
между моментом выдачи запроса на ресурсы системы и моментом
представления фактического ответа на этот запрос.
4. Доступность —мера возможности использования системы.
5. Безопасность, этот фактор приобретает все большее
значение.
6. Надежность.
7. Стоимость.
Совершенная операционная система должна обеспечивать
максимум пропускной способности при минимуме как времени
обращения, так и времени ответа. Такая система должна быть
доступной по первому требованию любого программиста. Конечно,
178
Глава 10
она должна характеризоваться абсолютной безопасностью и
стопроцентной надежностью. И все это —при очень низкой
стоимости. Счастливое сочетание!
Противоречивость критериев
Во многих случаях используемые нами способы оценки
эффективности машины оказываются противоречивыми. Пропускная
способность может быть увеличена за счет перегрузки системы,
что, по-видимому, объясняется приобретением машины
недостаточной производительности —подобно универсаму,
работающему с единственным кассиром-контролером. Но как сказывается
перегрузка системы на времени обращения и времени ответа?
С другой стороны, время обращения и время ответа могут быть
уменьшены за счет недогрузки системы, для чего покупают
машину, значительно более мощную, чем необходимо, что, конечно,
приводит к снижению пропускной способности машины,
поскольку недогруженная система вынуждена время от времени
простаивать.
Означает ли это, что время обращения и время ответа всегда
изменяются согласованно? В действительности это не так.
Рассмотрим систему разделения времени, минимизирующую время
ответа. Для достижения этой цели каждой программе
предоставляется небольшой квант процессорного времени, после чего она
помещается в конец очереди заданий, если длительности кванта
оказалось недостаточно для того, чтобы выполнение программы
завершилось естественным прерыванием. На выполнение десяти-
секундной программы, получающей из каждой секунды
процессорного времени лишь одну десятую часть, потребовалось бы
ото секунд суммарного времени обработки. Минимизация
времени ответа может отрицательно влиять на время обращения.
Доступность системы и ее пропускная способность, очевидно,
оказываются в конфликте. Когда можно считать работающую
систему доступной?
Безопасность является еще одним фактором, определяющим
эффективность системы и находящимся в противоречии с многими
другими факторми. На осуществление необходимых проверок
и управления, связанных с обеспечением защиты, расходуется
как машинное время, так и время оператора. Время, затраченное
на обеспечение защиты, является непроизводительно
израсходованным временем. Многие защитные меры приводят скорее к
снижению чем к повышению доступности системы. Контроль
защиты может увеличить время обработки, а тем самым и время
обращения. Защитные мероприятия могут привести также к
увеличению времени ответа.
Функции, и назначение операционной системы 179
Оборудование, использованное в нашей1 космической
программе, относится к наиболее надежным из когда-либо созданных
аппаратных средств. В этой программе надежность часто
достигалась дублированием всех или части специальных подсистем. Все
функции обеспечивались дважды, что стоило очень дорого.
Критерии надежности системы и стоимости оказываются в
противоречии.
В сфере коммерческих приложений критерий стоимости часто
оказывается определяющим — архитектура системы должна
обеспечивать решение задачи при минимально возможной стоимости.
Система, обладающая высокой производительностью,
по-видимому, приемлема исходя из соображений стоимости оборудования,
однако существуют и другие составляющие стоимости, которые
также необходимо принимать во внимание. Например, большое
время ожидания в системе резервирования билетов некоторой
авиалинии может быть причиной уменьшения числа пассажиров г
что существенно, если учитывать фактор стоимости.
Ограничения
Мало того, что критериям эффективности свойственна внутренняя
противоречивость, — разработчику операционной системы
приходится сталкиваться с рядом дополнительных факторов, сильно
ограничивающих его возможности в выборе решений.
По-видимому, наиболее очевидными являются ограничения технического
характера; например, мгновенный ответ физически
неосуществим. Предельные возможности электронных средств,
используемых в данной машине, определяют границы ее применимости;
математическое обеспечение системы мультипрограммирования
вряд ли необходимо в машинах на электронных лампах, однако
с внедрением полупроводниковых схем становится почти
обязательным.
Другая трудность технического характера связана с тем
обстоятельством, что вычислительные машины редко проектируются для
конкретной операционной системы; обычно именно операционные
системы разрабатываются и проектируются в расчете на
существующую систему аппаратных средств. Производительность системы
может быть существенно повышена, если в основной памяти
хранить одновременно 25 или 30 программ, исполняемых в режиме
мультипрограммирования; однако, если аппаратная реализация
машины допускает около миллиона адресуемых элементов
основной памяти, то может случиться, что для хранения всех
программ не хватит места.
Экономические факторы определяют еще одно естественное
ограничение, которое должен учитывать проектировщик системы.
1 Имеется в виду американской. — Прим. перев.
180 Глава 10
Как ни странно, факторы политического характера
составляют еще одну распространенную причину ограничений. Многие
фирмы, например, настаивают на реализации самых
незначительных компонентов аппаратных средств ЭВМ и операционной
системы только потому, что «они есть у конкурента»; наглядной
иллюстрацией могут служить информационные системы
управления. Такие решения, вероятно, можно назвать политическими
лишь номинально, но к какому еще разряду их можно было бы
отнести?
Другие организационные решения носят более откровенный
политический характер. Лишь благодаря влиянию руководителя
некоторого отдела операционная система может быть
спроектирована таким образом, чтобы программы, обычно используемые
этим отделом, получали более высокий приоритет; другие отделы
или службы, не пользующиеся столь высокой политической
протекцией, могли бы обнаружить, что из-за менее высокого
приоритета их задания обычно выполняются дольше. Энергичные
программисты могут попытаться «протолкнуть» в третью смену
проклинаемые ими задания с лентами и сменными пакетами дисков,
используя механизм назначения приоритетов. В каждой системе
будет проявляться стремление создать благоприятные условия
для разработки проекта, отмеченного высшим руководством.
Эти обстоятельства часто не замечают или игнорируют, однако
они имеют важное значение.
Определение требований к системе
Разные цели практических применений операционных систем
определяют и предъявляемые к ним разные требования. В явной
формулировке требования к вычислительной и операционной
системам часто выражают в количественной форме, например:
обеспечить пропускную способность на уровне не ниже 70% при
времени обращения, не превышающем одного часа. Другими
критериальными оценками может накладываться трехминутное
ограничение на максимальное время ответа по меньшей мере в 95%
обращений к системе либо требование обеспечить среднее время
ожидания, не превышающее двух минут. Критерий доступности
часто определяется как доля рабочего времени системы
(безотносительно к ее пропускной способности), которую
программисты или инженеры могут использовать по потребности.
Требование относительно защиты часто задают в письменной форме,
и его реализация проверяется заранее планируемым
аттестационным испытанием. Ограничение по стоимости является наиболее
распространенным типом требований — израсходовать не более
X долл.
Функции и назначение операционной системы 181
Чтобы планирование было наиболее эффективным,
необходимо рассматривать всю систему в целом, а не одно
математическое обеспечение операционной системы. В идеальном случае
проектирование аппаратных средств и математического
обеспечения должно осуществляться совместно. Обычно они проектируют-
ся порознь. Как правило, операционная система проектируется
и реализуется после того, как разработана вычислительная
машина; разрабатываемые программные средства предназначаются
для обеспечения оптимального использования системных ресурсов
при заданных ограничениях аппаратных средств.
О нескольких следующих главах
В следующих главах мы рассмотрим некоторые реальные и
действующие операционные системы. В соответствии с нашим общим
подходом мы
1) попытаемся определить требования к рассматриваемой
системе,
2) обсудим все ограничения или условия, касающиеся
возможных вариантов математического обеспечения операционной
системы и особенностей рассматриваемой системы в целом,
3) опишем операционную систему как попытку удовлетворить
требованиям к системе при заданных ограничениях.
Содержание части IV посвящается описанию ряда
операционных систем общего назначения. Гл. 11—13 взаимосвязаны. В них
делается попытка описать достаточно подробно функциональные
характеристики конкретной машины и затем — возможные пути
проектирования двух различных операционных систем, которые
могли бы работать при заданной конфигурации аппаратных
средств. Для этой цели используются системы фирмы IBM. По
мнению автора, «живые» системы намного поучительнее «модельных»
или «воображаемых» систем, поскольку обучающиеся могут
связывать учебные занятия с внеклассной практикой. Большая часть
обучающихся, по всей вероятности, знакома с продукцией IBM
намного лучше, чем с продукцией других изготовителей. Гл. 11
содержит описание принципов функционирования Системы
IBM/360. Гл. 12 посвящена описанию дисковой операционной
системы (DOS) фирмы IBM, специально предназначенной для
возможностей малых и среднего масштаба вычислительных
установок, использующих Систему IBM/360. Проблемы большого
вычислительного центра освещаются в гл. 13, где будет обсуждена
операционная Система IBM/360, обеспечивающая
мультипрограммирование с фиксированным числом задач (MFT).
Основное назначение вышеупомянутых трех глав не в том,
чтобы показать особенности работы конкретных операционных систем,
-а в том, чтобы показать, как работают некоторые типичные one-
182
Глава 10
рационные системы; фирма IBM не является единственным
изготовителем вычислительных машин или разработчиком
операционных систем. На основе общих принципов, изложенных в
гл. с 11 по 13, в гл. 14 мы исследуем некоторые подходы,
отличные от принятых в IBM, а также операционную систему
IBM, обеспечивающую мультипрограммирование с переменным
числом задач (MVT). Гл. 15 содержит описание важных понятий
виртуальной и страничной организации памяти.
В последнем разделе книги мы обсудим особенности
нескольких операционных систем для специальных применений, в
которых из-за особых требований к системам операционные системы
общего назначения оказываются неприемлемыми. Гл. 16
посвящена описанию автоматизированной системы управления
технологическим процессом, в которой высокие требования к
надежности и очень малое время ожидания приводят к тому, что многие
функции и модули традиционных операционных систем
оказываются просто ненужной обузой; здесь требуется специальная
разработка функционально упрощенной операционной системы.
В гл. 17 рассматриваются базы данных и математическое
обеспечение средств передачи данных в связи с обсуждением некоторой
информационной системы управления; для этих применений
операционную систему общего назначения необходимо оснастить
дополнительными средствами. Многомашинным системам
посвящена гл. 18, в которой в качестве примера рассматривается
система автоматического контроля универсама; в этой системе
многие функции, обычно выполняемые программными модулями
операционной системы общего назначения, реализованы аппаратно.
Все названные системы специального назначения иллюстрируют
современные применения вычислительных машин.
Остальные главы книги носят специальный характер, в связи
с чем они требуют внимательного чтения.
УПРАЖНЕНИЯ
1. Поясните возможные противоречия в требованиях к
пропускной способности и времени обращения.
2. Поясните возможные противоречия в требованиях к
времени обращения и времени ответа.
3. Поясните, каким образом требования безопасности
могут оказаться в конфликте с почти любым другим требованием
эффективности системы.
4. «Лучшая» —относительное понятие. Поясните.
5. Обсудите некоторые из ограничений, которые должен
учитывать проектировщик операционной системы.
Глава 11
ПРИНЦИПЫ ФУНКЦИОНИРОВАНИЯ СИСТЕМЫ IBM/360
Введение
Операционная система должна функционировать в определенной
среде; важнейшими составляющими этой среды являются
аппаратные средства вычислительной машины. С одной стороны,
электронные схемы вычислительной машины обеспечивают
функции создаваемой операционной системы, с другой — в какой-то
мере ограничивают ее возможности. В этой главе рассматриваются
некоторые из важнейших структурных понятий, характеризующих
ЭВМ семейства IBM/360, при этом особое внимание уделяется
тем факторам, которые в наибольшей степени повлияли на
архитектуру программного обеспечения. В гл. 12 и 13 будут изучены
две операционные системы, предназначенные для использования
в условиях этой среды. К важным понятиям, рассмотренным в
данной главе, относятся слово состояния программы, или PSW,
механизм управления операциями ввода и вывода и прерывания.
Адресация памяти в Системе IBM/360
Основная память состоит из большого числа крошечных ферри-
товых сердечников, каждый из которых может хранить один бит
информации. Как вы, вероятно, помните (см. гл. 3), эти
сердечники объединяются в группы, составляя символы, или байты
(восемь битов), полуслова, слова и двойные слова. Байт —
8-битовое поле, способное хранить один символ в коде EBCDIC,
является основным адресуемым элементом памяти на магнитных
сердечниках в машинах семейства IBM/360.
Система адресации в этих машинах действительно очень
проста. Представим себе, что все ферритовые сердечники нанизаны
на один провод наподобие бус. Первая группа из восьми
сердечников составляет байт номер 0, следующая группа — байт номер
1, третья группа— номер 2 и т. д., пока не будут перенумерованы
все байты основной памяти. Действительная картина, конечно,
не столь проста — память имеет трехмерную структуру и в многих
машинах вместо сердечников используются другие
запоминающие средства, — однако, с точки зрения программиста,
адресация в основном состоит в подсчете байтов.
184 Глава П
А что можно сказать о полусловах и словах? В некоторых
машинах слово является основным адресуемым элементом памяти
и при этом оно не обязательно состоит из четырех байтов, или
тридцати двух битов. В машинах фирмы IBM, однако, адрес
полуслова или слова попросту совпадает с адресом первого
байта этих полей.
Слово состояния программы
Передавая свое задание оператору ЭВМ, программист часто
полагает само собой разумеющимся, что отдельные команды его
программы будут выполняться последовательно, в порядке их
записи, если, конечно, не встретится команда передачи
управления. Все как будто просто, но как же в действительности
вычислительная машина, в точнее CPU, определяет команду, которая
должна выполняться следующей? И где эта команда находится?
Ответ на оба эти вопроса следует искать в слове состояния
программы, или PSW.
Слово состояния программы в действительности является
вовсе не словом; это — двойное слово, имеющее длину 64 бита.
PSW является первым двойным словом основной памяти,
занимающим байты номер 0,1, 2, 3, 4, 5, 6 и 7. Для иллюстрации
функций PSW мы будем использовать следующий короткий фрагмент
программы на языке ассемблера:
АДРЕС ПАМЯТИ
1000 GO
КОМАНДА
L
L
AR
ST
з,х
4,Y
3,4
3,Z
Еще некоторые команды
1050 В G0
< Остальная часть программы
1100 X DS F
1104 Y DS F
1108 Z DS F
и т.д.
Принципы функционирования Системы IBMI360 185
В этом фрагменте программы пара двоичных чисел, занимающих
в памяти поля X и Y, загружаются соответственно в 3-й и 4-й
регистры, затем они складываются и их сумма пересылается в
поле Z; после некоторых действий управление вновь передается
для выполнения этих команд. Показанные слева фактические
адреса элементов памяти для удобства выражены в десятичной
системе. Последние три байта PSW (рис. 11.1) содержат адрес
Маска
системы
Ключ
Флажки
Код прерывания
О 7 8' 11 12 15 16 31
ILC
СС
Маска
программы
Адрес команды
32 J4 36 39 46 63
* т—Признак результата
1 Код длины команды
Рис. 11.1. Формат слова состояния программы.
команды; это адрес того места в памяти, где хранится команда,
которая должна исполняться следующей. По мере исполнения
нашего фрагмента программы мы будем следить за изменением
содержимого данного поля PSW.
Выполнение команды центральным процессором состоит из
двух отдельных этапов: командного цикла и цикла исполнения.
В командном цикле CPU выбирает из памяти одну команду и
декодирует ее; в цикле исполнения происходит исполнение команды.
Поле PSW, хранящее адрес команды, имеет определяющее
значение в командном цикле.
Пусть наш фрагмент программы начинается с команды,
двоичный адрес которой эквивалентен десятичному числу 1000.
Центральным процессором попросту просматривается содержимое
PSW, всегда занимающее, как вы помните, в памяти одно и то
186
Глава 11
же место, и выбирает адрес команды, которая должна быть
исполнена. На этом шаге выбранной командой является первая
команда загрузки; именно она и пересылается в CPU для
декодирования. В некоторый момент времени входе выполнения
командного цикла центральный процессор увеличивает содержимое поля
адреса команды слова состояния команды на четыре (длина
команды загрузки); таким образом, в PSW появляется значение
адреса 1004, указывающее место хранения следующей по порядку
исполнения команды. После того как выполнена первая команда
загрузки и значение, хранящееся по адресу X, скопировано в
регистре 3, машина готова к выполнению следующего командного
цикла. CPU не очень-то оригинален в своих действиях — вновь
и вновь им выполняется одна и та же последовательность
операций:
1) отыскание в PSW адреса команды;
2) выборка команды, хранящейся по этому адресу;
3) увеличение адреса команды PSW на длину исполняемой
команды — теперь этим полем определяется адрес следующей
команды;
4) декодирование команды;
5) запуск цикла исполнения;
6) возврат к шагу 1.
Таким образом, вторая команда выбирается CPU,
декодируется, исполняется и на некотором этапе командного цикла адрес
команды увеличивается на 4, принимая значение, равное 1008,
в соответствии с размещением следующей по порядку исполнения
команды.
После исполнения второй команды CPU снова обращается
к PSW, выбирает из памяти по адресу 1008 команду сложения,
прибавляет в PSW к адресу команды 2, декодирует команду и в
процессе цикла исполнения складывает содержимое регистров
3 и 4. Обратите внимание на то, что адрес команды в этот раз
был увеличен не на 4, а на 2. Длины команд могут быть
различными, команда AR занимает только два байта. Каким образом
CPU может отличить двухбайтовую команду от четырехбайтовой?
Мы вернемся к этому вопросу несколькими абзацами ниже.
Теперь в PSW указывается адрес команды записи в память
(ST); таким образом, в следующем командном цикле выбирается
и декодируется команда записи в память, при этом адрес команды
в PSW увеличивается на 4. Продолжая действовать в той же
манере, машина исполняет ряд других команд программы до тех
пор, пока наконец в адресе команды не будет указан адрес
команды перехода. Как и прежде, хранящаяся по этому адресу (1050)
команда выбирается в CPU и декодируется, при этом адрес
команды увеличивается на 4. Однако цикл исполнения команды
перехода несколько отличается от циклов исполнения ранее рас-
Принципы функционирования Системы IBM/360 187
смотренных команд. При исполнении команды перехода CPU
заменяет содержимое поле адреса команды PSW адресом,
указанным в качестве операнда этой команды, — в данном случае
адресом 1000. Следующей должна исполняться команда,
имеющая метку GO.
Поле адреса команды занимает три байта, или двадцать четыре
бита. Наибольшее двоичное число, которое может храниться в
двадцатичетырехбитовом поле, эквивалентно десятичному
числу 16 777 216; такой трехбайтовый формат позволяет адресовать
в машинах Системы IBM/360 более 16 мегабайт основной памяти,
что во всяком случае значительно превышает фактическую память
большинства машин.
Команды переменной длины
Как мы установили в рассмотренном выше примере, не
обязательно, чтобы все команды имели одну и ту же длину; основным
фактором, определяющим длину команды, является схема
адресации, используемая в Системе IBM/360. Регистры могут
адресоваться четырьмя битами — 16 общих регистров нумеруются от О
до 15, что соответствует F в шестнадцатеричном представлении.
Для адресации памяти необходима большая информация. Во
времена второго поколения машин, когда в каждый момент времени
вся память была занята только одной программой, программист
мог выбрать в качестве начала отсчета некоторую точку в памяти,
обычно нулевой адрес, и адресовать все элементы программы
относительно этой точки. В системе мультипрограммирования
возможность такого выбора исчезает; при одновременном
размещении в основной памяти десяти программ программист не может
отсчитывать адреса относительно фиксированной точки загрузки.
С решением этой проблемы связано введение относительной
адресации. Программы пишутся так, как если бы их первый
элемент приходился на нулевой адрес, при этом соответствующий
действительный адрес задается в момент начала исполнения
программы. Действительный начальный адрес хранится в регистре,
называемом регистром базы; байтовые адреса ячеек
относительно этой базы называются смещением. Абсолютный адрес данного
байта памяти может быть получен сложением его смещения с
содержимым регистра базы. Смещения относительно любой базы
ограничены величиной 4095 (FFF шестнадцатеричных, или три
полубайта); более длинные программы должны пользоваться
несколькими регистрами базы.
Используя нашу модельную программу, предположим, что
адрес первой команды — адрес 1000 — содержится в регистре
12 (цифра С в шестнадцатеричном представлений"). Абсолютные и
188
Глава 11
относительные адреса команд и зон памяти в этом фрагменте
программы имеют следующие значения:
НЬМ АДРЕС
1000
1004
1008
1010
относительный адрес
БАЗА
с
с
с
с
СМЕЩЕНИЕ
000
004
008
010
КОМАНД*
L 3,Х
L 4,Y
AR 3,4
ST 3,Z
Здесь опять для простоты рассмотрения смещения выражены
в десятичном представлении.
Первая команда, как вы, наверное, помните, была снабжена
меткой GO. Значение адреса этой метки может быть определено
несколькими способами. Прежде всего это абсолютный адрес 1000.
Если этот адрес хранится в 12-м регистре, то расположение той
же самой ячейки памяти может задаваться нулевым смещением
относительно регистра базы с номером 12, т. е. суммой
содержимого регистра базы и смещения. Поскольку для определения
регистра требуется четыре бита и максимально допустимое значение
смещения от любой базы равно 4095 байт, что в двоичной форме
представляется двенадцатиразрядным числом, то для хранения
полного («регистр базы плюс смещение») адреса требуется поле
в 16 бит, или два байта.
Вернемся к вопросу о различных длинах команд. Некоторые
команды (например, AR, или команда сложения в регистрах
нашей программы) включают в качестве операндов два. регистра.
Объединением одного байта кода операции с одним байтом,
необходимым для задания значений двух различных регистров,
образуется команда длиной в два байта (одно полуслово). Другие
команды, такие, как загрузка и запись в память из нашего
примера, включают пересылку или обработку данных, хранящихся в
основной памяти и в регистре. Объединением одного байта кода
операции с полубайтом адреса регистра и двумя байтами адреса
памяти дает в сумме три с половиной байта; еще один полубайт
обычно используется для указания регистра индекса таким
образом, общая длина команды составляет четыре байта (два
полуслова). Возможны также операции типа память-память; они
включают код операции, два адреса памяти и часто полубайтовое поле
для указания длины операнда, что в сумме дает три полуслова
(шесть байтов).
Каким образом CPU различает эти случаи? Если первые два
бита кода операции равны (00)2, как в команде сложения регист4
ров, код операции которой равен (00011010)2, то команда
относится к типу регистр-регистр. Команды, включающие в качестве
операндов как регистр, так и ячейку памяти, имеют код операции,
Принципы функционирования Системы 1ВМ/360 189
начинающийся с (01)2 или (10)2; соответственно команды,
содержащие два адреса памяти, начинаются с кода операции (11)2. CPU
определяет длину команды по коду операции. PSW содержит поле,
определяющее длину исполняемой команды (поле «код длины
команды», занимающее в PSW биты 32 и 33, — см. рис 11.1).
Этот код принимает значение (01)2, (10)2 или (11)2 соответственно
для команд в одно, два и три полуслова, при этом одновременна
изменяется значение поля адреса команды PSW. Обе эти функции
в CPU реализованы аппаратно. Код длины команды используется
для возврата к адресу исполняемой команды в случае появления
ошибки — не следует забывать, что поле адреса команды слова
состояния программы определяет команду, которая должна
выполняться следующей.
Когда именно происходит обновление полей PSW? Каким
образом ЭВМ делает выбор между двумя, четырьмя или шестью
байтами приращения адреса команды, еще не получив
закодированного значения этой команды и не проверив первые два бита
кода ее операции? Ответ на эти вопросы зависит от аппаратной
реализации данной машины. В небольшой машине, как и в любой
другой, в которой информация в CPU пересылается порциями по
16 бит, командный цикл распадается на два отдельных действия:
прием первого полуслова, проверка его содержимого и затем,
если необходимо, прием остальной информации. В такой системе
время ожидания «остальной» части команды можно с успехом
использовать для обновления полей PSW. Конструкцией других
машин может предусматриваться пересылка больших порций
данных между памятью и CPU; в таких случаях представляется
разумным рассчитывать на выборку максимально длинной команды,
иногда попросту игнорируя ненужные данные. Во всяком случае,
обновление полей PSW является аппаратно реализуемой
функцией, которая может осуществляться с очень высокой скоростью
почти одновременно с выполнением любой другой функции.
Признаки результата
Задавались ли вы когда-нибудь вопросом, каким образом ЭВМ
определяет, нужно или не нужно передавать управление по
команде условного перехода? После выполнения команды
сравнения или команд арифметических действий устанавливается
значение признака результата; командой условного перехода
проверяется значение этого признака результата, и если оно
соответствует условию, используемому в команде, то происходит
передача управления (в PSW изменяется содержимое адреса команды).
Признак результата занимает 34 и 35 бит слова состояния
программы.
190 Глава 11
Ключ защиты памяти
В Системе IBM/360 память между отдельными программами
распределяется блоками по 2048 байт (2К). Одна из трудностей
мультипрограммирования, как вы, вероятно, помните по
предыдущим главам, состоит в том, что программы могут оказаться во
взаимодействии, при котором одна программа разрушает или
модифицирует другую. Для исключения такой ситуации фирмой
IBM разработано средство защиты памяти, суть которого сводится
к применению «ключа защиты», занимающего с 8 по И биты PSW.
При отведении для данной программы некоторой области
основной памяти каждый ее блок в 2К байт снабжается четырехбитовым
ключом защиты памяти с тем же значением; впоследствии в
процессе исполнения программы попытка обращения программы
к любому блоку с другим значением ключа защиты памяти
приводит к немедленному выводу программы из состояния счета.
Обратите внимание на то, что в этой схеме защиты не каждый
из 2048-байтовых блоков памяти системы имеет свое уникальное
значение ключа защиты, а все блоки, относящиеся к одной и той
же программе, характеризуются одним и тем же значением
ключа. Резидентным модулям операционной системы, например,
обычно приписывается ключ защиты (0000)2, если данной
операционной системе требуется 50К основной памяти, то все первые 25
блоков будут иметь ключ защиты (0000)2. Впоследствии
прикладной программе, требующей 100К байт памяти, могут быть
отведены следующие 50 блоков, каждый из которых будет иметь ключ
защиты (0011)2. Схему распределения полей см. еще раз на
рис. 11.1.
Другие поля PSW
Итак, мы обсудили назначения полей PSW, содержащих ключ
защиты, ILC, или код длины команды, GC, или признак
результата, и адрес команды. В PSW есть и другие поля (снова рис. 11.1).
Большая часть этих полей связана с программными
прерываниями; по этой причине мы возобновим наше обсуждение полей PSW
несколько позже.
Управление вводом — выводом
Устройства ввода — вывода работают очень медленно по
сравнению со скоростью выполнения внутренних процессов в самой
машине; как вы, вероятно, помните, внедрение
мультипрограммирования объясняется в основном именно этой причиной. Ранее,
в главе, посвященной аппаратным средствам, мы обсуждали
использование канала, что частично решало эту проблему. Канал,
Принципы функционирования Системы 1ВМ/360 191
по сути дела, является малой ЭВМ специального назначений,
помещенной между устройством ввода—вывода и основной
машиной; к его функциям относятся буферизация, подсчет байтов и
ведение счетчика адресуемой памяти. Поскольку канал является
независимым электронным устройством, то эти функции могут
выполняться одновременно с другими операциями основной
машины, например параллельно с исполнением" другой программы.
Каким образом канал определяет, что он должен делать?
Откуда берутся команды канала (ведь это вычислительная машина)?
Как каналом определяется число байтов, которое следует
переслать между устройством ввода — вывода и памятью основной
машины? В какой области памяти находятся (выводимые) данные?
Где в памяти следует размещать новые данные (при вводе)? Вся
эта информация передается в канал, который связывается с CPU
с помощью трех полей, называемых адресным словом канала
(CAW), словом состояния канала (CSW) и командой канала (GCW).
Рассмотрим сначала GGW. Как и для любой ЭВМ, для работы
канала требуются команды; канальная программа состоит из ряда
команд канала, или CGW. Команда канала фактически занимает
двойное слово; она включает код команды, аналогичный коду
операции обычной команды, адрес данных, определяющий место
в памяти, где следует искать данные (или куда они должны
записываться), поле счетчика байтов, задающего число пересылаемых
байтов, а также ряд признаков, хранящих информацию о канале
и выполняемой операции. Признаком может задаваться операция
чтения или записи, или перемотки ленты, или любая другая
операция. Канальная программа состоит из одного или большего
числа команд канала; она пишется программистом отдельно для
каждой операции ввода — вывода. Как и любая другая
программа, она хранится в основной памяти, часто в форме сегмента
программы метода доступа. По отношению к каналу функция
команды канала весьма сходна с функцией команды на языке
ассемблера по отношению к центральному процессору.
Так же, как и в основной машине, с программой связывается
слово состояния программы, В канале вводится адресное слово
канала, или GAW. Адресное слово канала занимает
фиксированное место в основной памяти, адрес начального байта — 72, и
содержит адрес команды канала, которая должна исполняться
каналом первой (рис. 11.2). Адрес начала канальной программы
посылается в адресное слово канала перед фактическим началом
операции ввода — вывода; это поле используется каналом для
нахождения его первой команды. После того как эта связь
установлена, канал может найти следующие команды самостоятельно.
ЭВМ может быть оснащена несколькими каналами и было бы
неразумным связать единственное адресное слово канала системы
с обеспечением действий только одного канала.
192
Глава 11
- Информация, касающаяся состояния канала, пересылается
в основную машину с помощью слова состояния канала, или CSW
(рис. 11.3). Так же как и команда канала, оно занимает двойное
слово; в действительности единственным словом в этой группе
полей является адресное слово канала. Кроме адреса канальной
программы, адреса данных и счетчика байтов, CSW содержит
поле состояния, в котором с помощью двоичного кода фиксиру-
CAW
CCW1
ССИ/2
CLWJ
Команда канала
Код
команды
Адрес данных
Флажки
Счетчик байтаб
Адресное слабо канала
Рис. 11.2. Адресное слово канала и канальная программа.
ется такая информация, как занятость устройства, конец работы
канала, конец работы устройства или программной проверки, —
другими словами состояние операции ввода дли вывода данных.
Как адресное слово канала, так и слово состояния канала
содержат ключ защиты памяти программы, используемый для
защиты памяти при операциях ввода или вывода.
Проследим еще раз последовательность управления вводом —
выводом. Канальная программа, заранее написанная
программистом, состоит из одного или большего числа команд канала
(CCW) и хранится в некоторой зоне основной памяти. Перед
самым началом операции ввода — вывода модулем операционной
Принципы функционирования Системы IBM/360 193
системы адрес начала этой канальной программы посылается в
адресное слово канала (CAW), которое находится в основной
памяти по байтовому адресу 72. Тем же самым модулем операционной
системы в команды канала вносятся адрес данных и значение
счетчика байтов, а в адресное слово канала — значение ключа защиты.
Спустя некоторое время ЭВМ получает информацию о состоянии
канала в слове состояния канала (GSW), находящимся в основной
памяти по байтовому адресу 64.
C5W
CAW
Слово состояния канала
К/гмч
Адрес команды
Поле состояния
Счетчик байтай
Рис. 11.3. Слово состояния канала.
Существуют два типа каналов: селекторные и
мультиплексные. Селекторный канал предназначается для работы в
импульсном режиме с передачей в импульсе непрерывного потока
данных между внешним устройством и памятью. Такие
быстродействующие устройства, как лента, диск и барабан, обычно
соединяются с селекторным каналом. Мультиплексор намного сложнее
и предназначается для работы со многими устройствами в
перекрывающиеся отрезки времени, принимая байт-другой от
устройства чтения карт, посылая несколько байтов в печатающее
устройство и т. д. Такие низкоскоростные устройства, как
устройство чтения карт, печатающее устройство, выходные перфораторы,
консольные терминалы, обычно соединяются с мультиплексным
каналом. Мультиплексирование предполагает сложную логику
операций — такой канал должен отслеживать состояние
счетчиков байтов и расположение данных в памяти одновременно для
Канал
7-821
194
Глава 11
нескольких различных устройств. В некоторых небольших или
не очень быстродействующих машинах эти логические функции
на самом деле выполняются центральным процессором, при этом
мультиплексный канал время от времени занимает CPU на
цикл-другой. Во всех случаях канал может непосредственно
обращаться в память, фактически не используя при этом CPU;
эта возможность называется «прямым доступом к памяти».
Привилегированные команды
В вычислительной системе, управляющей одновременным
исполнением многих программ и работой нескольких каналов, принцип
управления, основанный на независимом исполнении каждой
программой всех действий по вводу — выводу, может приводить
к катастрофическим результатам. Наилучший подход к решению
этой проблемы состоит в том, что все операции ввода и вывода
осуществляются одним и тем же модулем операционной системы.
Это хорошо звучит в теории, но как быть с излишне практичными
и ловкими программистами?
В Системе IBM/360 используется всего четыре команды,
реализующие фактическую связь с каналом, а именно: «Остановить
ввод — вывод» (НЮ), «Начать ввод — вывод» (SIO), «Опросить
канал» (ТСН) и «Опросить ввод — вывод» (ТЮ). Эти команды яв-
CSW
CAW * -*.j
•
_~5Л
1
2 —
(
/"'^
С
Операционная
система
CCW
Прикладная
программа
J
Рис. 11.4. Информационные связи между операционной системой и каналом
1 — прикладная программа связывается с модулем операционной системы; 2 —
составляется канальная программа; 3 — адрес канальной программы помещается в
адресное слово канала; 4 — выдается команда «Начать ввод — вывод»; 5 — сведения
о состоянии канала посылаются в слово состояния канала.
Принципы функционирования Системы IBM/360 195
ляются привилегированными, т. е. они могут использоваться
только модулем операционной системы, что обеспечивается
средствами защиты памяти. Как вы помните, операционная система
характеризуется ключом защиты (0000)2 и привилегированные
команды могут исполняться лишь в том случае, когда поле
ключа защиты PSW равно (0000)2
Для того чтобы начать операцию ввода-вывода, прикладная
программа должна передать управление или связаться с
определенным модулем операционной системы. После этого может
начать исполняться системная программа, которой
подготавливается содержимое полей CAW и команд канальной программы,
выдается привилегированная команда «Начать ввод — вывод»,
проверяется слово состояния канала (CSW) и, если не обнаружено
ошибок, запускаются физические операции (рис. 11.4). Иногда
все же встречаются программисты, настаивающие на
индивидуальном кодировании их собственных канальных программ,
однако даже в этом случае запуск операций ввода — вывода может
быть осуществлен только под контролем операционной системы.
Понятие прерывания
Как именно прикладная программа связывается с некоторым
модулем операционной системы? Метки здесь не подойдут, так как
они транслируются в относительный адрес компилятором или
ассемблирующей программой и имеют смысл лишь для
загрузочного модуля. Передача управления на фиксированный абсолютный
адрес неприемлема хотя бы потому, что программы
операционной системы характеризуются другим значением ключа
защиты памяти. Та или иная формы ссылки на внешний адрес
может рассматриваться как одно из решений, но лучшее решение
достигается использованием прерываний. Идея прерывания
основана на некоторой схеме переключения используемых слов
состояния программы. Чтобы яснее представить, как
реализуются прерывания, рассмотрим основную память типичной
вычислительной системы и выделим несколько важнейших областей
1) нашей программы;
2) модуля операционной системы, который запускает
физические операции ввода — вывода;
3) PSW (рис. 11.5);
4) двух дополнительных двойных слов, именуемых
соответственно «старое PSW» и «новое PSW» (рис. 11.5).
Прикладная программа исполняется центральным
процессором по установленной схеме — рассматривается PSW и находится
адрес следующей по порядку исполнения команды; далее эта
команда выбирается из памяти и декодируется, затем в PSW
находится адрес следующей команды и т. д. В некоторый момент
7*
196
Глава 11
i ^V
Текущее слобо состояния программы-нулебой адрес памяти
Поле нового слаба состояния программы
^\
Рис. 11.5. К понятию о прерывании.
Текущее
PSW
Старое
PSW
Новое
PSW
0010
50500
?
0000
1000
Прикладная
программа
Модула
операционной
системы
•
Текущее
PSW
Старое
PSW
Новое
PSW
0010
0010
0000
50500
Г"
50500
1000
—V
•
Л
J
Прикладная
программа
Модуль
операционной
системы
'
.
Рис. 11.6. К понятию о прерывании, пошаговое исполнение.
Принципы функционирования Системы IBM/360
197
времени прикладная программа готова к выполнению операций
ввода — вывода и в ней появляется специальная команда. В
машинах фирмы IBM такой командой является команда обращения
к супервизору (SVG). Эта команда, как и всякая другая,
находится с помощью PSW, пересылается в центральный процессор,
декодируется и исполняется. Однако после исполнения этой
команды ход событий несколько меняется.
Во время исполнения команды SVC происходит прерывание.
Прерывание в системе реализуется аппаратными средствами. Эта
операция включает два такта. Во-первых, текущее слово
состояния программы копируется в поле старого PSW. В поле адреса
команды нового PSW содержится адрес первой команды
упомянутого модуля операционной системы; вторым тактом этой схемно
реализованной операции содержимое нового PSW пересылается
в поле текущего PSW. Теперь центральный процессор, начиная
очередной командный цикл, отыскивает следующую нужную
команду по адресу, определяемому текущим словом состояния
Текущее
PSW
Старое
PSW
НоВое
PSW
0000
0010
0000
1000
i
50500
/
1000
"~Х
Л
)
S
Прикладная
программа
Модуль
операционной
системы
I
6
Текущее
PSW
Старое
PSW
Иобое
PSW
0010
0010
0000
50500
1_
50500
1000
S\
J \
Прикладная
программа
Модуль
операционной
системы
Рис. 11.6. (продолжение).
198
Глава 11
программы; эта следующая по порядку исполнения команда
принадлежит модулю операционной системы. Новое PSW, реализуя
связь с модулем операционной системы, по-видимому, содержит
значение ключа защиты памяти (0000)2, что позволяет
использовать привилегированные команды. Впоследствии управление
вновь передается прикладной программе пересылкой содержимого
старого PSW в поле текущего PSW. Эти действия
иллюстрируются рис. 11.5.
Еще раз, шаг за шагом, проследим идею прерывания,
руководствуясь при этом схемой рис. 11.6. Наша программа
загружается в память начиная с адреса 50000; модуль операционной
системы, который впоследствии будет исполнять нашу операцию
ввода-вывода, загружается с адреса 1000. Поле нового PSW,
занимающее фиксированное место в памяти, имеет нулевое
значение ключа защиты и число 1000 в качестве адреса команды
(рис. 11.6, а); старое PSW к началу этой операции содержит
какие угодно, не относящиеся к нашему анализу данные.
Текущее PSW, которое определяет работу CPU, занимает двойное
слово памяти и содержит в качестве ключа защиты число (0010)2—
ключ нашей программы; адрес команды содержит число 50500,
которое является адресом команды, следующей
непосредственно за командой обращения к супервизору (имеется в виду, что в
рассматриваемый момент исполняется команда обращения к
супервизору).
В командном цикле обращение к супервизору не отличается
от любой другой команды, но лишь до тех пор, пока не произошло
прерывание. При этом,во-первых, текущее PSW копируется в поле
старого PSW, занимающее фиксированное место в памяти
(рис. 11.6, б). По завершении данного такта новое PSW
аппаратным способом копируется в поле текущего PSW— первое
двойное слово памяти (рис. 11.6, <?), чем и завершается прерывание.
В этот момент времени центральный процессор готов к
следующему командному циклу. «Не мудрствуя лукаво», CPU
отыскивает следующую команду по адресу, определяемому последними
тремя байтами первого двойного слова памяти, где теперь
хранится число 1000, адрес начала требуемого модуля операционной
системы. Таким образом, начинается исполнение модуля
операционной системы; поскольку ключ защиты равен (0000)2, то
допускается использование привилегированных команд.
Впоследствии, после того как запущена физическая операция ввода или
вывода, последней командой рассматриваемого модуля
операционной системы содержимое старого PSW пересылается в первое
двойное слово памяти (текущее PSW, рис. 11.6, г)\ следующим
циклом CPU вновь выбирает команду прикладной программы.
Вот собственно и все; идея прерывания не содержит в себе
ничего сложного. Не пытайтесь отыскивать какие-либо усложняю-
Принципы функционирования Системы IBM/360
199
щие факторы лишь потому, что, по вашим представлениям,
прерывания «не могут быть простыми», —таких факторов нет.
Типы прерываний
В Системе IBM/360 выделяются пять различных типов
прерываний; вот эти типы:
1. Внешние.
2. При обращении к супервизору.
3. Программные.
4. От схем контроля машины.
5. Ввода —вывода.
Внешние прерывания
Внешние прерывания могут инициироваться любым из трех
следующих источников:
1) сигналом с пульта оператора,
2) другим CPU или иным управляющим устройством,
3) таймером.
0 Текущее PSW
8
16
24 Старое PSW Внешних прерыбаний
32
40
48
56
64
72
80
88 Новое PSW Внешних прерыбаний
96
104
112
120
128
4/ \
2
•
Обработчик
внешних
прерыбаний
Рис. 11.7. Внешние прерывания»
200
Глава 11
Для среднего программиста первостепенную важность имеют
прерывания от таймера; таймерный механизм используется в системе
разделения времени и принудительного вывода из процесса
решения программ, на исполнение которых не хватило заказанного
времени.
Внешние прерывания реализуются в виде электрического
сигнала, посылаемого в центральный процессор. Прием
центральным процессором сигнала прерывания вызывает аппаратно
реализованную пересылку содержимого текущего слова состояния
программы в поле старого PSW внешних прерываний (адрес
памяти 24 —четвертое двойное слово) и вскоре после этого запись
содержимого нового PSW внешних прерываний в поле текущего
PSW (рис. 11.7). Кстати, если сигнал прерывания поступает в
CPU в момент исполнения команды, то обработка прерывания
задерживается до завершения команды, т. е. внешние прерывания
распознаются между циклами выполнения команд.
Биты с 16 по 31 поля PSW содержат код прерывания. В
процессе выполнения прерывания это 16-битовое поле заполняется в
старом PSW, что позволяет модулю операционной системы,
обрабатывающему внешние прерывания, точно идентифицировать
причину прерывания.
Прерывания при обращении к супервизору (SVC)
В Системе IBM/360 программист не может непосредственно
управлять операциями ввода-вывода; это может быть сделано только
с участем операционной системы —ее резидентной частью,
называемой супервизором. Прикладная программа связывается с
нужным модулем операционной системы, используя прерывание
при обращении к супервизору (SVG).
Прерывание при обращении к супервизору несколько
отличается от других команд даже форматом. Команда SVC кодируется
весьма просто, и запись
SVC 17
например, означает запрос модуля супервизора с номером 17,
которым может быть модуль чтения, или записи, или процедуры
OPEN, или CLOSE, или любой другой модуль операционной
системы. Программа, обрабатывающая прерывания по SVG,
прежде всего обращается к таблице, которой определяется
нужный нам модуль, -^каждая подпрограмма имеет свой
собственный номер. Большинство программистов не пишут команд SVC,
входящих, как правило, в состав макрокоманд или метода доступа.
В цикле исполнения команды SVG аппаратно реализованным
механизмом прерывания содержимое текущего слова состояния
программы сохраняется в двойном слове старого SVC PSW
Принципы функционирования Системы IBM/360 201
(32-й адрес памяти), в поле текущего PSW (нулевой адрес памяти)
пересылается содержимое нового SVC PSW (96-й адрес памяти),
а значение операнда команды SVC, в рассматриваемом примере —
17, помещается в поле кода прерывания старого SVC PSW
(рис. 11.8). Если чтение разделов книги, посвященных
механизму переключения PSW, начинает вас утомлять, то не
смущайтесь — вы начинаете его постигать.
0
32
Текущее PSW «^
^ ^\
Старое SVC PSw\ \ ^**
js~
96
НоВоеSVCPSW \-~
л. _
Обработчик
SVC-прерываний
■
Рис. 11.8. Прерывания при обращении к супервизору.
Программные прерывания
»
Большинство программистов очень скоро сталкивается с
программными прерываниями, вызванными делением на нуль,
ошибочными данными, переполнением, ошибками адресации, выведением
программы из счета вследствие срабатывания механизма защиты
памяти и т. д. Программные прерывания обусловлены ошибками
программирования; возникновение таких ошибок опознается
центральным процессором, который аппаратными средствами ко-
0 Текущее PSW -—
т ^\ ^**""*"^
40 Старое PSWпрогр.прерыб{ ^ ^
J У
Ш MoePSWnpozp.npepbi6. J — ^
Обработчик
программные
прерываний
4
Рис. 11.9. Программные прерывания.
202 Глава 11
пирует содержимое текущего PSW, в поле старого PSW
программных прерываний (байтовый адрес 40), пересылает содержимое
нового PSW программных прерываний (байт 104) в первое
двойное слово памяти (текущего PSW) и вносит код источника
прерывания в старое слово состояния программы (рис. 11.9). Всего
существует 15 различных кодов программных прерываний; их
перечень представлен на рис. 11.10.
КОД
Десятичный Шестнадцатеричный Значение
1 0001 Операция — неверный код операции
2 0002 Привилегированная команда —
программист попытался исполнить
привилегированную команду в программе с
ключом защиты, отличным от 0000
3 0003 Выполнить — команда «Выполнить» с
операндом, адресующимся к другой
команде «Выполнить»
4 0004 Защита памяти
5 0005 Ошибка в адресации
6 0006 Ошибка в спецификации — неверное
употребление формата слова или регистра
7 0007 Данные — ошибочные данные
8 0008 Переполнение с фиксированной точкой
9 0009 Деление с фиксированной точкой — часто
деление на нуль
10 000А Десятичное переполнение
11 • 000В Десятичное деление
12 000G Переполнение порядка — слишком
большой порядок числа с плавающей точкой
13 000D Исчезновение порядка
14 000Е Значимость — сложение или вычитание
с плавающей точкой приводит к
нулевым значениям всех разрядов дробной
части
15 000F Деление с плавающей точкой
Рис. 11.10. Коды программных прерываний.
Прерывания от схем контроля машины
Прерывания от схем контроля машины указывают на то, что
реализованными в машине серии IBM/360 схемными средствами
автотестирования обнаружен аппаратный сбой. Если в этот
момент происходило исполнение некоторой команды, то оно
прерывается — нет смысла пытаться выполнять какие-либо вычисления
или логические операции, используя неисправную машину. В
результате прерывания от схем контроля машины текущее PSW
копируется в двойном слове, начинающимся с адреса памяти 48
(старое PSW от схем контроля машины), новое PSW прерываний
от схем контроля машины посылается в поле текущего PSW, и
Принципы функционирования Системы 1ВМ/360 203
программным модулем операционной системы внутреннее схемное
состояние воспроизводится в памяти машины. Новое PSW
прерываний от схем контроля машины находится в двойном слове,
начинающимся 112 байтом памяти; в графической форме этот тип
дрерываний представлен на рис. 11.11.
0 Текущее PSW
^-ч <-
до Старое PSW прерываний
от схем контроля машины
шуу Новое PSI/V прерываний от
11г схем контроля машины
Обработчик
прерываний от
скем контроля
машины
Рис. 11.11. Прерывания от схем контроля машины.
Прерывания ввода — вывода
Каналы и центральный процессор работают независимо; тем
фактом, что канал может освободить CPU от необходимости
непосредственного управления операциями ввода — вывода, в
основном и оправдывается его использование. Поскольку канал
работает независимо, в нем должна быть предусмотрена возможность
информировать CPU о завершении операций. Это достигается с
помощью механизма прерываний ввода — вывода.
0 Текущие PSW
^ *.
_Л Старое PSW прерываний
&ь ввода-Вывода
юп Новое PSW прерываний
'*и ввода-вывода
ч
■^N.
Л4-
Обработчик
прерываний
ввода-вывода
•
Рис. 11.12. Прерывания ввода-вывода.
204
Глава 11
Прерывание посылается в том случае, когда канал завершает
операцию ввода или вывода или требует внимания центрального
процессора по какой-нибудь другой причине. Заметьте, что
прерывание ввода — вывода исходит от канала. В результате
прерывания ввода — вывода текущее PSW копируется в двойном
слове старого PSW прерываний ввода — вывода (адрес 56),
содержимое нового PSW прерываний ввода — вывода посылается
в поле текущего PSW, а адреса канала и устройства, пославшего
прерывание, фиксируются в поле кода прерывания (биты с 16 по
31) старого слова состояния программы. Слово состояния канала
г
АДРЕС
Десятичный Шестнадцатеричный Длина Назначение
0 0 Двойное Текущее PSW
слово
8 8 То же CCW1 программы
начальной загрузки
16 10 » CGW2 программы
начальной загрузки
24 18 » Старое PSW внешних
прерываний
32 20 » Старое PSW прерываний
по обращению к
супервизору
40 28 » Старое PSW
программных прерываний
48 30 » Старое PSW прерываний
от схем контроля
машины
56 38 » Старое PSW прерываний
ввода — вывода
64 40 » Слово состояния канала
72 48 Слово Адресное слово канала
76 4С То же Не используется
80 50 » Таймер
84 54 » Не используется
88 58 Двойное Новое PSW внешних пре-
слово рываний
96 60 То же Новое PSW прерываний
по обращению к
супервизору
104 68 » Новое PSW программных
прерываний
112 70 » Новое PSW прерываний
от схем контроля
машины
120 78 » Новое PSW прерываний
ввода-вывода
128 80 Перемен- Зона диагностического
ная сканирования — анализ
схем контроля машины
Рис. 11.13. Поля памяти постоянного назначения.
Принципы функционирования Системы IBM/360 205
также заполняется аппаратно реализованными средствами
обработки прерывания. Если в момент посылки прерывания
центральный процессор занят исполнением некоторой команды, то
обработка прерывания откладывается до ее завершения.
Прерывание ввода — вывода иллюстрируется рис. 11.12.
Поля памяти постоянного назначения
При описании слова состояния программы, слова состояния
канала, адресного слова канала, а также прерываний указывалось,
что они занимают фиксированные поля памяти; эти элементы
памяти постоянного назначения представлены в сводной таблице
на рис. 11.13. Поскольку их адреса фиксированы, то получение
этой важнейшей информации не доставляет никаких трудностей
системному программисту.
Маскирование
Типичная система обработки данных включает несколько
каналов — обычно один мультиплексный и два или три селекторных
канала; эти каналы функционируют независимо друг от друга
и часто одновременно. Может случиться, что два или большее
число прерываний ввода — вывода в разных каналах возникают
с очень малым промежутком во времени или точно в один и тот же
момент времени. Рассмотрим возможную ситуацию, когда два
прерывания ввода — вывода поступают в центральный процессор
с интервалом в несколько микросекунд.
В начальном состоянии этой гипотетической ситуации
центральным процессором управляется прикладная программа
(программа А). Поступая в центральный процессор, первое из наших
прерываний ввода — вывода (рис. 11.14, а) вызывает пересылку
текущего значения слова состояния программы в поле старого
PSW прерываний ввода — вывода и запись нового PSW
прерываний ввода-вывода в двойное слово текущего PSW. Чуть позже,
когда еще происходит обработка первого прерывания, поступает
второе прерывание. Содержимое текущего PSW автоматически
посылается в старое PSW прерываний ввода — вывода, а
содержимое нового PSW прерываний ввода — вывода занимает место
текущего PSW (рис. 11.14, б). Что происходит при попытке CPU
вновь связаться с программой? После некоторых действий
операционная система отдает управление прикладной программе,
однако в результате совершенно естественных действий системы
при обработке второго прерывания значение поля PSW,
указывающего адрес возврата в программу, оказывается «затертым».
Мы утратили возможность возобновить обработку с того места, где
она была прервана. Такая ситуация должна быть исключена.
206
Глава 11
Текущее PSW
Старое PSW прерывании
ввоаа-вывода
Новее PSW прерываний
ввода-вывода
Обработчик
прерываний
ввода-вывода
Программа
А
а
•Текущее PSW
Старое PSW прерываний
ввода-вывода
Новое PSW прерываний
ввода-выввоа
i
i _^
^^z—г
"""" г^~~~*
Программа
А
Обработчик
прерываний
ввода-вывода
•
Рис. 11.14. Трудности, связанные с обработкой повторных прерываний
ввода — вывода, разделенных малым промежутком времени.
Эта проблема решается с помощью маски системы, занимающей
первые 10 битов PSW (на рис. 11.15 еще раз воспроизводится
распределение полей PSW). Первый бит связывается с нулевым, как
правило, мультиплексным каналом; двоичная единица в этом бите
означает, что центральный процессор может принять прерывания
от нулевого канала, тогда как нулевой код означает, что сигнал
прерывания не может быть принят и должен в течение некоторого
времени удерживаться в канале. Биты с первого по шестой имеют
тот же смысл соответственно для каналов с первого по шестой,
т. е. селекторных каналов; код 1 означает возможность приема
CPU сигнала прерывания и соответственно 0 — необходимость
его удержания в канале. Если первые семь битов нового PSW
прерываний ввода —вывода имеют нулевое значение (рис. 11.16),
то никакие новые прерывания ввода-вывода не могут быть
приняты, пока управление связано с этим PSW; отложенные прерывания
ввода — вывода могут быть опознаны лишь после того, как соот-
Принципы функционирования Системы IBM/360
207
Маска контроля машины-
ASCII &—^
li
Ожидание
Состояние задачи
Паска системы
П
Р
X
1
Е
X
Т
Ключ зашиты
памяти
Код прерывания
О 78
Переполнение в деся-
тачной операции —
Переполнение в
операции с сриксир. точкой
I ч чч |
11 12 15 15
■ Исчезновение порядка
-Потеря значимости
31
1|
1
8 ад'
Адрес команды
32
34
36
3940
Рис. 11.15. Слово состояния программы.
63
Текущее
PSW
Паска
0000 0000
Ключ
0000
Адрес обработчика
прерываний ббода-
быбода
Старое PSW
прерываний
ВВода-дыВода
Паска
1111 1111
Ключ
0101
Адрес
прикладной
программы
Новое PSW
прерываний
бВода-Выбода
Маска
0000 0000
Ключ
0000
Адрес обработчика
прерываний бвада-
ВыВода
Рис. 11.16. Маскирование прерываний ввода-вывода.
ветствующий модуль операционной системы, закончив обработку
одного из принятых прерываний, своим последним действием
пересылает содержимое старого PSW прерываний ввода — вывода в
поле текущего PSW.
Восьмой бит (бит с номером семь, поскольку мы отсчитываем
от нуля) используется точно так же для маскирования внешних
прерываний — с малым промежутком времени одно внешнее
прерывание может следовать за другим. Но все же возможна (хотя и
менее вероятна) ситуация, когда внешнее прерывание с
небольшим интервалом времени следует за прерыванием ввода —
вывода, которое в свою очередь чуть отстает от другого внешнего
прерывания (последовательность типа ввод — вывод — внешний
сигнал — ввод-вывод), что может привести к разрушению поля
ключа защиты старого PSW внешних прерываний даже в том слу-
208 Глава 11
чае, если исполняемое внешнее прерывание замаскировано от
всех других внешних прерываний. Чтобы этого не произошло,
обычно при обработке как внешних прерываний, так и
прерываний ввода-вывода маскируются оба типа возможных прерываний.
Что можно сказать об остальных трех типах прерываний? Что
произойдет, если сигнал прерывания от схем контроля машины,
при обращении к супервизору или программного прерывания
будет послан в момент обработки какого-нибудь другого
прерывания? Что касается однотипных прерываний, то как
программные прерывания, так и SVC-прерывания исходят от
программной команды, и, поскольку CPU в каждый момент времени
управляется только одной командой, одновременно подобные
прерывания возникнуть не могут. Если операционная система занята
обработкой прерывания какого-нибудь другого типа, то
необходимость прерывания при обращении к супервизору отпадает,
поскольку в этом случае машина уже находится в состоянии
«супервизор»; таким образом, ситуация «SVC плюс какое-то еще
прерывание» возникнуть не может. Взаимодействие с программными
прерываниями маловероятно, поскольку теоретически
прикладная программа не может контролировать работу операционной
системы. Если возникает прерывание от схем контроля машины,
то стоит ли разбираться в одновременных прерываниях? Сигнал
схемного прерывания указывает на аппаратный сбой, и
бессмысленно пытаться продолжать обработку на машине, в которой что-
то неисправимо. Иногда прерывания от схем контроля машины
маскируются (обычно в связи с обработкой другого схемного
прерывания) и для реализации этой функции используется
тринадцатый бит PSW.
Маска программы
В большинстве систем обычная реакция на программное
прерывание состоит в принудительном выводе из решения
программы, вызвавшей прерывание, и, по всей вероятности, выдачи на
печать дампа памяти. Иногда программисты хотят отказаться
от такой стандартной процедуры, предусматривая специальные
подпрограммы обработки подобных ситуаций. В качестве
примера могут служить переходы по условию (ON CONDITION) в
языке ПЛ/1 в таких ситуациях, как переполнение или
исчезновение порядка. Биты с 36 по 39 дают возможность
исключать стандартную обработку программных прерываний,
связанных с переполнением в операциях с фиксированной точкой —
в десятичных операциях,—с исчезновением порядка и потерей
значимости.
Принципы функционирования Системы 1ВМ/360 209
Состояния программы
В любой момент времени машина выполняет либо прикладную
программу, либо программу супервизора, т. е. находится либо в
состоянии «задача», либо в состоянии «супервизор». Для
указания состояния машины используется 15-й бит PSW (рис. 11.15);
код единица соответствует задаче и ноль—супервизору. Вместе
с ключом защиты памяти этим битом обеспечивается двойная
проверка исполнения привилегированных команд.
Данная программа может быть либо готовой к процессорной
обработке, либо ожидать завершения операций ввода или вывода,
т. е. возможны состояние готовности и состояние ожидания.
Готовность программы определяется значением 14-го бита PSW.
Из всех битов слова состояния программы мы не упомянули
только бит номер 12; значением этого бита определяется
используемый код — EBCDIC или ASCII-8.
Приорит еты прерываний
«Если что-то может случиться, то случится обязательно». При
каких-то условиях функционирования вычислительной системы
в центральный процессор будут посланы все пять типов
возможных прерываний. Какое из них должно обрабатываться первым?
Когда вопрос касается лишь назначения приоритетов, то годится
почти любое решение; важно предусмотреть на этот случай
какую-то процедуру — какую именно, значения не имеет. В
Системе IBM/360 сначала будут обрабатываться прерывания от схем
контроля машины — нет смысла исполнять обращения к
супервизору в неисправной машине. Если схемное прерывание
отсутствует, то происходит следующее (см. рис. 11.17):
1. Принимается программное прерывание: содержимое PSW
прикладной программы пересылается в двойное слово старого
PSW программных прерываний.
2. Принимается сигнал внешнего прерывания, при этом
содержимое текущего PSW, указывающего на начало программы
обработки программных прерываний, пересылается в старое PSW
внешних прерываний.
3. Принимаются прерывания ввода — вывода при этом слово
состояния программы, отвечающее внешним прерываниям,
пересылается в старое PSW прерываний ввода — вывода.
Поскольку больше никаких прерываний не поступило (или
благодаря маскированию они должны оставаться в канале),
начинается исполнение программы обработки прерываний ввода-
вывода в соответствии с содержимым адреса команды текущего
слова состояния программы. По завершении этой программы в
поле текущего PSW пересылается содержимое старого PSW пре-
210
Глава 11
г.
о
8
16
24
32
40
48
56
64
72
80
88
96
104
112
120
ных прерываний
PSW
программы А
Новое PSW
Внешних прерываний
Новое
PSWпрерываний noSVC
Шое PSW
программных прерываний
щ
cm мнтр.машинц
Новое РЖпреры-i
ванийШа-вывот
2.
HotoPSft'программных прерываний
Новое PSW
внешних прерываний
PSW праграм-
мы А
Новое PSW внеш-
них прерываний
Навое P5W прв
рываний по SVC
MoePSW программ
ных прерываний
Новое РвШпрерывдт
схем контржишны
Новое PSW преры-
Ъаний вбода-выбодо
3.
Новое PSW
прерываний ввода-выШ
Новое
P5Wпрограммных
PSW
программы А
Новое
P5V\/внешних прерываний
Новое PSW
внешних прерываний
Новое PSW
прерываний по SVC
ных прерываний
Oft
Hi
Шийввк
т
Рис. 11.17. Одновременные прерывания.
рываний ввода — вывода, тем самым обеспечивается передача
управления обработчику внешних прерываний. Этот модуль,
посылая в текущее PSW состояние своего старого PSW, передает
управление обработчику программных прерываний, который
таким же образом возвращает управление исходной прикладной
программе.
Кстати, в первом шаге описанной выше последовательности
можно было бы говорить либо о программном прерывании, либо
о прерывании при обращении к супервизору; они не могут
возникнуть одновременно. Почему?
Типичный пример
Чтобы представить себе механизм прерываний с несколько иной
точки зрения, рассмотрим один простой пример. Наша
программа — единственная прикладная программа, размещенная в
основной памяти, готовая выдать обращение к супервизору для начала
операции ввода; в начальный момент времени в текущем PSW
(рис. 11.18, а) содержится адрес команды SVC. В процессе ко-
Принципы функционирования Системы IBMJ360 211
мандного цикла CPU эта команда пересылается в центральный
процессор и декодируется, адрес команды увеличивается на два
(длина в байтах команды SVC). Выполнение команды SVC вызывает
аппаратно реализованное прерывание, при этом содержимое
текущего слова состояния программы пересылается в старое PSW
прерываний по SVC, а новое PSW прерываний по SVC становится
текущим PSW (рис. 11.18, б). Действуя по той же схеме,
центральный процессор начинает выполнение командного цикла, выбирая
команду, адрес которой определяется полем текущего слова
состояния программы; после прерывания эта команда принадлежит
уже подпрограмме операционной системы, реализующей
обращение к супервизору (рис. 11.18, в).
Получив управление над CPU, обработчик обращений к
супервизору выполняет следующие действия:
1. Формирует команду начала ввода-вывода (SIO).
2. Используя информацию, содержащуюся в программном
блоке управления данными, заполняет поля счетчика байтов и
адреса памяти одной или нескольких команд канальной
программы.
3. Помещает адрес первого CCW в адресное слово канала
(CAW).
4. Выдает команду SIO, запуская таким образом физическую
операцию ввода (рис. 11.18, г).
Прежде чем вернуть управление исходной программе,
указанный модуль операционной системы опрашивает содержимое
слова состояния канала (CSW) до тех пор, пока от канала не будет
получено сообщение об успешном или не состоявшемся начале ввода;
эти действия иллюстрируются рис. 11.18, д. Если начало ввода
не состоялось, то модуль операционной системы либо повторяет
запрос, либо посылает сообщение о причине неудачи; сообщение
об успешном начале ввода означает, что дальнейшие действия по
передаче данных будут выполняться каналом независимо, а
функция этого модуля операционной системы — выполненной.
Последнее действие управляющей программы состоит в перезаписи
содержимого старого PSW прерываний по SVG в поле текущего
PSW (рис. 11.18, е), при этом бит 14 принимает значение 1, что
переводит программу в состояние ожидания до завершения
физической операции ввода.
Поскольку текущее PSW указывает на то, что управляемая
программа находится в состоянии ожидания, то центральный
процессор в течение некоторого времении ничем не
занят. Спустя некоторое время канал наконец завершает
операцию ввода и посылает сигнал прерывания ввода-вывода в CPU,
при этом текущее PSW пересылается в старое PSW прерываний
ввода — вывода, а новое PSW прерываний ввода — вывода
становится текущим (рис. 1.18, ж). Теперь в текущем PSW бит
PSW
Старое PSW
Старое PSW прерываний
вВода-Вывода
CSW
CAW
Новое PSW SVC
Новое PSW прерываний
ввода-вывода
"^
CCW канальной
программы
Обработчик
прерываний
ввода-Вывода
Обработчик
прерыбаний noSVC
|
•
Прикладная
программа
а
PSW
Старое
PSW
Прикладная
'программа
Старое PSW прерываний
Ввода-вывода
CSW
CAW
Нобое PSW SVC
CCW канальной
программы
Обработчик
прерываний
ввода-вывода
Обработчик
прерываний noSVC
новое PSW прерываний
Ввода-вывода
Прикладная
программа
Рис. 11.18. Пример прерываний и сообщений от канала.
а — прикладная программа готова выдать команду SVC; б — пересылки слов
состояния программы в результате обращения к супервизору.
PSW
Старое прикладная
PSW ""**'программа
Старое PSW прерываний
Ввода-Вывода
CSW
CAW
Новое PSW SVC
Новое PSW прерываний
ввода-Вывода
■
CCW канальной
программы
-^^- -fc
Обработчик
прерываний
В Вода-вывода
Обработчик
прерыданий noSVC
i
Прикладная
программа
■
PSW
Старое Прикладная
PSW "^программа
Старое PSW прерываний
ввода-вывода
CSW
CAW
Иовов PSW SVC
Новое P3W прерываний
ввода-вывода
CCW канальной
программы
V
Обработчик
прерываний
Ввода-вывода
Обработчик
прерываний noSVC
V
■
j»
к CPU
i
Прикладная
программа
Рис. 11.18. (продолжение).
в — теперь текущее PSW отвечает начальному состоянию обработчика прерываний
Qo SVC; г — подпрограмма обработки прерываний по SVC заполняет двойные слова
CCW и посылает адрес в CAW.
L
PSW
Старое _ Прикладная
PSl/V *"программа
CCW канальной
программы
Старое PSW прерыбаний
ввода-вывода
CSW
CAW
Обработчик
прерываний
ббода-быбода
Обработчик
прерываний no SVC
Новое PSW SVC
Новое PSW прерываний
ввода-вывода
Прикладная
программа
Канад
Работает
независима
i
1.
PSW- состояние ожидания
1
Л
Старое Прикладная
PSW программа
Старое PSW прерываний
, ввода-вывода
CSW
CAW
Новое PSW SVC
Новое PSW прерыбаний
ввода-Вывода
CCW канальной
программы
1 •
Обработчик
прерыбаний
ВВода-Вывода
Обработчик
прерыбаний noSVC
■
Прикладная
программа
Рис. 11.18. (продолжение).
в — по содержимому CAW канал определяет адрес канальной программы и посылаег
сообщение о состоянии канала в CSW; e — программа находится в состоянии
ожидания, канал работает независимо.
t
*~ к CPU
Старое PSW
Старое PSW
прерываний—=
вбоаа-выВода
Прикладная
программа
CSW
CAW
Новое PSW SVC
Новое PSW прерываний
вбода-вывода
CCW канальной
программы
Обработчик
прерываний
ввода-вывода
Обработчик
прерываний noSVC
Прикладная
программа
ПМЛ
•/7V
PSW- состояние счета
Старое PSW
Старое PSW прерываний
ввода-вывода
CSW
CAW
Новое PSW SVC
ССШканальной
программы
Обработчик
прерываний
Ввода-вывода
Обработчик
прерываний noSVC
Новое PSW прерываний
ввода-вывода
Прикладная
программа
Рис. 11.18. (продолжение).
ас — в последующем происходит прерывание ввода — вывода, сообщение о состоянии
Канала пересылается через CSW; a — управление возвращается в исходную
программу.
216 Глава 11
14 установлен в нуль в соответствии с готовностью программы к
счету; поле адреса команды отвечает началу программы
обработки операций ввода — вывода; таким образом, начинается
выполнение этой подпрограммы. Проверка слова состояния канала
позволяет убедиться в том, что операция ввода завершилась
успешно, к тому же код прерывания старого PSW прерываний
ввода — вывода определяет канал и адрес устройства,
пославшего сигнал прерывания, что может быть не очень важно в нашем
простом примере с единственной программой, но, как мы
убедимся в дальнейшем, весьма существенно в связи с необходимостью
перекрестного контроля состояния каналов и программ в системе
мультипрограммирования. Получив подтверждение успешного
завершения затребованной операции ввода, обработчик
прерываний ввода — вывода присваивает четырнадцатому биту старого
PSW прерываний ввода — вывода нулевое значение (состояние
счета) и пересылает это слово состояния программы в поле
текущего PSW, возвращая, таким образом, управление исходной
программе (рис. 11.8, з). В условиях мультипрограммирования
эта задача, конечно, немного усложняется. То время, которое
в нашем примере машина простаивала в состоянии ожидания,
мультипрограммная система употребила бы на запуск другой
программы; поскольку для каждого типа прерываний отводится
лишь по одному полю для старого и нового слов состояния
программы, то при запуске другой программы необходимо
предусмотреть сохранение последнего PSW «ждущей» программы, если мы
хотим обеспечить прослеживаемость обратных действий.
Возможные способы решения этой задачи рассматриваются в следующих
двух главах.
Разные изготовители — разные подходы
Не существует каких-либо патентов, определяющих основные
принципы использования слова состояния программы,
прерываний или связи ЭВМ с каналом; однако все изготовители по
существу используют одни и те же принципы, хотя их реализации
могут сильно отличаться друг от друга. Рассмотрим, например,
слово состояния программы. Размещение основной информации
об управлении программой и ее состоянии, определяющей
действия центрального процессора, в первых 64 битах основной памяти,
вообще говоря, ничем не обусловлено; для хранения этой
информации часто отводятся один или несколько специальных
регистров. PSW или эквивалентный ему набор полей могут размещаться
в любой фиксированной части памяти, лишь бы эта информация
могла быть найдена CPU. Часто функции, связанные с
определением адреса команды, установлением признака результата,
маскированием и реализацией прерываний распределяются среди
Принципы функционирования Системы IBM/360 217
нескольких дискретных элементов, составляющих набор «слов»
состояния программы или регистров. Даже само определение
«слова» вводится разными изготовителями по-разному, изменяясь
в длину от 12 до 64 или даже большего числа битов; некоторые
машины используют также слово переменной длины.
Наиболее существенные различия в вычислительных системах,
поставляемых отдельными изготовителями, касаются способа
обработки прерываний. В некоторых машинах
предусматривается обработка только одного или двух различных типов
прерываний; в машинах фирмы IBM семейств Системы/360 и Системы/370
могут обрабатываться до пяти типов прерываний; в машинах
семейства Сигма 5/7 фирмы Xerox Data Systems могут
обрабатываться до 224 уровней прерываний. Для оценки максимального числа
возможных типов прерываний следует предположить, что
специальный тип прерываний отвечает каждому устройству ввода —
вывода, каждому обращению к супервизору для начала операций
ввода — вывода со стороны того или другого конкретного
устройства, входящего в конфигурацию системы, учесть по меньшей
мере 15 различных программных прерываний (каждое своего типа)
и т. д. Большое преимущество использования многих типов
прерываний состоит в быстродействии — в этом случае можно
непосредственно обращаться к модулю операционной системы,
предназначенному для обработки некоторого подмножества типов
прерываний, вместо того, чтобы использовать общий модуль
(включающий, вероятно, таблицу переходов), единственная
функция которого состоит в обеспечении связи с нужной
подпрограммой. Достоинство подхода, связанного с использованием многих
типов прерываний, оценивается исходя из требований,
предъявляемых к гибкости системы. Механизм прерываний обычно
реализуется аппаратными средствами, которые обеспечивают большое
быстродействие, но не так просты в модификации, как
программное обеспечение.
Число различных типов прерываний является не
единственным фактором, отличающим продукцию разных изготовителей;
подход фирмы IBM, связанный с введением старого и нового PSW
для каждого типа прерываний, не является общепринятым.
Другой распространенный подход включает использование стеков,
или очередей прерываний, ожидающих обработки, размещаемых
в специальных регистрах или в основной памяти; каждое вновь
поступившее прерывание просто добавляется к списку уже
принятых прерываний. Для обработки прерываний было опробовано
много различных подходов; рассмотрим в общих чертах два из них.
Стековая обработка прерываний в некотором смысле
аналогична стратегии учета по принципу «последним вошел — первым
вышел». Представим себе, что в нашей вычислительной системе
имеется^текущее PSW, единственное старое PS Wn некоторый объем
218
Глава 11
основной памяти, отведенной для организации стека записей о
прерываниях. В начальный момент нашего рассмотрения системы
управление CPU подчинено прикладной программе. Когда
происходит прерывание — любое прерывание, — текущее PSW
копируется в поле старого PSW и начинается обработка
прерывания. Допустим, что во время обработки этого
прерывания с малыми промежутками времени поступают еще три
прерывания (назовем их В, Си D). Обработка текущего
прерывания не приостанавливается, а три вновь пришедших
прерывания идентифицируются в качестве ожидающих, и записи о них
вносятся в основную память. Указатель адреса определяет первую
свободную ячейку стека; поступая в систему, прерывание В
фиксируется в этой свободной ячейке и значение указателя адреса
увеличивается на длину нового PSW. Прерывание С, пройдя
точно такую же процедуру, записывается в память непосредственно
за прерыванием В. После того как оказывается принятым
прерывание D, указатель адреса определяет ячейку, расположенную
как раз над этим последним «ожидающим» прерыванием. Как
только завершается обработка нашего первого прерывания,
система сканирует стек прерывания, устанавливает наличие
ожидающих обработку прерываний, уменьшает значение указателя
адреса на длину нового PSW, получая, таким образом, адрес начала
записи о прерывании D, пересылает эту информацию в текущее
PSW и приступает к обработке этого прерывания. Если за время
обработки не поступает новых прерываний, то следующим будет
обрабатываться прерывание С и лишь затем — прерывание В;
новые прерывания помещаются в стеке сверху и, следовательно,
обрабатываются прежде любых других, уже принятых
прерываний. Когда, наконец, стек прерываний освобождается, пересылкой
управляющей информации из поля старого PSW в текущем PSW
управление CPU возвращается прикладной программе; в
действительности поле старого PSW занимает элемент стека,
обрабатываемый в последнюю очередь.
Механизм поочередной обработки прерываний обычно
использует два указателя адреса, одним из которых определяется
расположение записи об очередном, подлежащем обработке
прерывании, другим — отслеживается адрес свободной ячейки для
приема новых прерываний. Такая организация в какой-то
степени напоминает систему учета, функционирующую по правилу
«первым вошел — первым вышел».
Алгоритмы поочередной и стековой обработки прерываний
могут быть очень сложными, учитывающими такие факторы, как
время пребывания в очереди или приоритет одних прерываний
по отношению к другим. Метод маскирования прерываний ввода-
вывода и внешних прерываний, используемый фирмой IBM, в
данном случае не требуется; здесь нет старых PSW, которые мож-
Принципы функционирования Системы IBM 1360 219
яо было бы затирать. Очень важное преимущество описанных
методов обработки связано с возможностью включения многих
уровней прерывания, при этом для системы с 200 уровнями
прерываний требуется не больше места в основной памяти, чем
системе с 10 уровнями прерываний, использующей подход фирмы
IBM с полями старых и новых PSW. Где возникает потребность
в новом PSW? В некоторых системах, подобных Системам IBM,
могут использоваться очереди новых PSW, в других случаях
использование нового PSW может быть связано с особенностями
самого источника прерываний — можно представить, что
каждое устройство ввода — вывода посылает сигнал прерывания,
содержащий адрес в памяти того модуля операционной системы,
которым должно обрабатываться это прерывание. Частные
алгоритмы и методы могут меняться, но основной принцип
использования прерываний остается в основном тем же самым.
Реализация связей ЭВМ с каналами может также существенно
отличаться в вычислительных системах разных изготовителей.
В машинах семейства CYBER фирмы CDC например, функции
центрального процессора совмещаются с работой ряда
периферийных процессоров, один из которых решает все задачи, связанные
с операциями ввода и вывода. Все периферийные процессоры
независимы и могут работать параллельно с центральным
процессором; подготовка полей, логически эквивалентных CCW, CAW
и GSW, и исполнение команды SIO могут осуществляться в то
время, когда центральный процессор занят другими операциями,
например той же обработкой прерываний ввода — вывода.
В этой главе мы уделяли основное внимание рассмотрению
Системы IBM/360. Наша цель состояла не в том, чтобы
пропагандировать продукцию этой фирмы. Мы хотели проиллюстрировать
с некоторыми подробностями реальные процессы обработки
прерываний, основные, реализованные программно средства
управления и методы связи ЭВМ с каналом в какой-нибудь реальной
машине — для этой цели можно было бы выбрать систему
любого изготовителя. Почему именно фирмы IBM? Для большинства
читателей Системы IBM являются наиболее доступным источником
примеров. В гл. 12 мы рассмотрим операционную систему,
написанную специально для вычислительных машин семейства
IBM/360 — DOS; гл. 13 будет посвящена обсуждению
операционной Системы OS/MFT. Читая эти главы, обратите специальное
внимание на то, как рассмотренные выше в данной главе
представления реализуются в основных структурах описываемых
операционных систем.
Краткие выводы
В данной главе рассмотрен ряд конкретных вопросов, в том
числе формат и назначение слова состояния программы, механизм
220
Глава 11
прерываний и метод управления физическими операциями
ввода и вывода, используемые фирмой IBM. По существу,
рассмотренные в этой главе представления относятся к промежуточной
области, лежащей между аппаратными средствами и
программными компонентами вычислительной системы и обеспечивающей
связь программы с каналом и (или) центральным процессором.
К важнейшим полям слова состояния программы (PSW)
относятся: маска системы для маскирования прерываний ввода —
вывода и внешних прерываний, ключ защиты памяти, код
прерывания, код длины команды, признак результата, маска программы
для маскирования некоторых программных прерываний, адрес
команды и набор отдельных битов, определяющих состояние
программы. Текущее PSW всегда занимает первое двойное слово
памяти.
Действия канала управляются канальной программой,
которая хранится в основной памяти и состоит из последовательности
команд канала (CCW). Адрес первой команды канала определяется
каналом по содержимому адресного слова канала (CAW),
которое всегда находится по адресу памяти 72; сообщения о состоянии
канала передаются в основную машину через слово состояния ка*
нала (GSW), с байтовым адресом — 64. Запуск, окончание
работы и проверка канала относятся к функциям, выполняемым с
помощью ряда привилегированных команд, которые могут
употребляться только модулями операционной системы. CPU может
отличить работу модуля операционной системы или супервизора
двумя способами: ключ защиты памяти текущего PSW
(единственное слово состояния программы, анализируемое центральным
процессором) имеет нули во всех разрядах, код состояния задачи,
15-й бит PSW, также имеет нулевое значение.
В Системе IBM/360 используются пять различных типов
прерываний: внешние, при обращении к супервизору, программные,
от схем контроля машины и прерывания ввода — вывода. При
обработке всех прерываний содержимое текущего PSW
копируется в поле старого PSW, а содержимое нового PSW посылается в
поле текущего — первое двойное слово памяти. Эта аппаратно
реализуемая процедура завершается кодированием причины
прерывания в поле старого слова состояния программы. Начиная,
работу, подпрограмма обработки прерывания может установить
его причину по коду прерывания в старом слове состояния
программы.
Заключительное замечание
Прерывание в действительности обрабатывается программными
средствами и лишь функции, связанные с переключением PSW^
реализуются аппаратно. Эти модули операционной системы весь-
Принципы функционирования Системы IBM/360 221
ма похожи на любую другую программу, за тем исключением,
что в них используется ряд привилегированных команд щ по всей
вероятности, они хорошо составлены.
УПРАЖНЕНИЯ
1. В Системе IBM/360 управление всеми операциями ввода—
вывода регулируется определенным модулем операционной
системы. Какими средствами обеспечивается этот процесс?
2. Как обрабатывается прерывание в Системе IBM/360?
3. Опишите содержание поля кода прерывания старого PSW
для каждого из пяти типов прерывания, допустимых в Системе
IBM/360.
4. Прикладная программа для начала операции ввода —
вывода выдала команду обращения к супервизору. Опишите
последовательность событий между обращением к супервизору и
возвратом управления в исходную программу.
5. Поясните принципы поочередной и стековой обработки
прерываний — подходы не используемые фирмой IBM.
6. Почему необходимо маскировать прерывания ввода —
вывода и внешние прерывания в процессе обработки прерываний
ввода — вывода?
7. Задано содержимое определенных ячеек памяти:
Адрес
0
8
16
24
32
40
48
56
64
72
80
88
96
104
112
120
Содержимое
3 шестнадцатеричном бидб
FF04000BD0013000
0000000000000720
0000000000000000
00510082 С0026400
FF510008 С0031424
FF51000BC003F340
00510000 С004А000
00510003C00422FA
00000000 00000000
00000000 00000000
0000000000000000
00040000 0001А000
FF040000 0001 7000
FF040000 0001 3000
00040000 00011000
0004000000015000
Нарисуйте схему распределения памяти, выделяя
расположение каждой подпрограммы обработки прерываний. Какого типа
прерывание только что произошло? По какому адресу находится
«плохая» команда? Может ли в этот момент произойти прерывание
ввода — вывода? Как вы это установили? Может ли в этот момент
выполняться привилегированная команда?
Глава 12
ДИСКОВАЯ ОПЕРАЦИОННАЯ СИСТЕМА IBM/360
Введение
Дисковая операционная система (DOS) фирмы IBM представляет
собой пакет системных программ, предназначенный для
управления ЭВМ серии Систем IBM/360 или IBM/370. В нее входят
модули обработки прерываний, управления процессами смены
заданий, связи с каналами, управления операциями
ввода—вывода, сопровождения ряда библиотек, программы компиляции
и редактирования связей и обеспечения функций системы
мультипрограммирования. Все эти функции реализуются только в
условиях функционирования Систем IBM/360 или IBM/370.
Операционная система должна обеспечивать непрерывное
соответствие полей PSW состоянию модуля прикладной программы,
обрабатывать прерывания и обеспечивать реализацию принципов
взаимодействия машины с каналами, отличающими ЭВМ этих
семейств. В данной главе мы рассмотрим важнейшие модули
операционной системы, обеспечивающие названные выше функции.
DOS используется для малых машин. У этой операционной
системы довольно ограниченные возможности —пользователь,
малой машины вряд ли заинтересуется математическим
обеспечением, рассчитанным «на все случая жизни», предпочитая иметь
операционную систему, способствующую эффективному
использованию имеющейся конфигурации аппаратных средств.
Благодаря ограниченному набору возможностей DOS оказывается
идеальной операционной системой для наших целей — их вполне
достаточно для первоначального рассмотрения основных
принципов. В гл. 13, опираясь на эти основные принципы, мы
расширим наши представления, перейдя к рассмотрению значительно
более сложной операционной системы — OS/MFT.
Размещение модулей в системе DOS
В условиях DOS основная память машины делится на несколько
разделов, как это показано на рис. 12.1. Первый раздел,
начинающийся с нулевой ячейки памяти, содержит программу
супервизора. В свою очередь, первый раздел разбивается на подразделы,
Дисковая операционная система IBM/360 223
Начиная с нулевого адреса памяти, мы последовательно находим
доля текущего PSW, старого и нового PSW, GAW,CSW и другие
поля памяти постоянного назначения, описанные в предыдущей
главе. Ниже этих постоянных полей размещается ядро
супервизора, ряд хранящихся в основной памяти модулей операционной
системы, выполняющих такие функции, как обработка
прерываний, планирование работы каналов, загрузка программ,
обнаружение ошибок, защита памяти и учет заданий. За этим ядром
следуют несколько управляющих таблиц, которые позволяют
Память постоянного назначения
Ядро супервизора
Улрадляющие таблицы
Транзитная область
■
• Супербизор
Фоновый раздел
Второй передний план
Первый передний план
Рис. 12.1. Размещение модулей в системе DOS
резиденту супервизора прослеживать занятость и освобождение
устройств ввода — вывода. Далее в этой же главе мы рассмотрим
подробнее содержание упомянутых выше таблиц. Остальная часть
первого раздела составляет транзитную область, в которой, как
вы, должно быть, догадываетесь, хранятся замещаемые модули,
используемые не настолько часто, чтобы храниться в составе
резидентной части операционной системы; эти модули размещаются
как правило, на диске и загружаются в оперативную память по
мере необходимости.
Остальная часть основной памяти делится на разделы
соответственно числу прикладных программ, от одной до пяти (в
последней версии DOS-1975). Первый из них называется разделом
фона или фоновым разделом. В нашем примере (рис. 12.1) за фо-
224 Глава 12
новым разделом следует раздел второго переднего плана, за
которым следует раздел первого переднего плана; номером
определяется приоритет раздела; так, первый передний план имеет
наивысший приоритет и фоновый раздел —наинизший. Если
бы наша система использовалась в условиях полного набора из
шести разделов (один —для резидентной части операционной
системы плюс пять разделов прикладных программ), то между
фоновым разделом и разделом второго переднего плана
находились, бы третий и четвертый разделы переднего плана, при этом
последовательность приоритетов выражалась бы рядом F-l, F-2,
F-3, F-4 и, наконец, фоновый раздел.
Начальная стадия — генерация системы
Операционная система и системная конфигурация, подобная
той, которая изображена на рис. 12.1, получены в результате
выполнения процедуры, известной под названием «генерация
системы» (SYSGEN).
Изготовитель (в данном случае фирма IBM) является
владельцем первого экземпляра полного набора модулей
операционной системы. Если заказчик принимает решение купить или
арендовать вычислительную систему, то его представитель вместе
с представителем фирмы IBM определяют подробный состав
операционной системы, отвечающей особенностям использования
и конфигурации предполагаемой вычислительной машины.
Анализируя типичные случаи возможного ее применения и определяя
конкретный набор устройств, включаемых в состав системы,
можно указать те модули операционной системы, которые являются
наиболее важными в конкретной установке; объединяя
важнейшие модули, можно составить ядро супервизора, т. е. ту часть
операционной системы, которая размещается в основной памяти,
тогда как менее часто используемые модули могут быть отнесены
к числу замещаемых. Для определенных заказчиком
конкретных устройств ввода — вывода и предпочтительного разбиения
памяти на разделы формируются управляющие таблицы. Затем эта
«выполненная по заказу» версия дисковой операционной системы
копируется в память резидента системы; обычно таким
устройством является пакет дисков; пакет резидента системы,
установленный на драйвер машины заказчика, и является для нее источником
операционной системы.
Загрузка начальной программы
Пока операционная система остается на диске, даже если это DOS
(дисковая операционная система), от нее мало проку. Для
выполнения полезной работы операционная система должна быть
Дисковая операционная система IBM/360 225
считана с пакета дисков, называемого резидентом Системы
(SYSRES), и размещена в основной памяти. Для этой цели
используется процедура, называемая начальной загрузкой прог-
граммы (IPL).
Первый из последовательных шагов процедуры IPL состоит
в установке пакета дисков резидента Системы на дисковый
драйвер. Затем в системное устройство чтения карт устанавливается
колода управляющих карт, содержащая специальные операторы
языка управления заданиями. Далее оператор на пульте машины
с помощью тумблеров устанавливает номер канала и адрес
устройства с резидентом Системы и нажимает на клавишу загрузки.
В результате этой последовательности действий резидентная часть
супервизора, или ядро супервизора, считывается с устройства
резидента Системы в память машины. Прежде чем передать
управление супервизору, оператор имеет возможность изменить
некоторые параметры Системы, используя для этого команды,
вводимые либо с устройства чтения карт, либо с операторского
пульта.
Коль скоро супервизор загружен, копия на диске постоянно
хранящейся в памяти части операционной системы используется
как дублирующая. Поскольку пакет дисков резидента Системы
содержит, кроме копии ядра, замещаемые модули супервизора
и системные библиотеки, во время работы Системы пакет дисков
SYSRES обычно не снимается; если по той или иной причине —
аппаратный сбой, программная ошибка или предусмотренное
отключение —машина сбивается, то процедура IPL просто
выполняется еще раз (хотя многие операторы, вероятно, сочтут, что
слово «просто» здесь неуместно).
Загрузка прикладных программ —
инициирование одиночных программ
После того как процедура IPL успешно завершена,
вычислительная система готова к приему прикладных программ. Один из
постоянно хранящихся в памяти модулей супервизора
называется программой инициирования одиночных программ (SPI,
рис. 12.2); используя свой пульт, оператор может посылать в эту
программу управляющие команды, требующие разгрузки и
исполнения отдельных прикладных программ переднего плана.
С того же пульта оператор может заказывать устройства и
запускать программы в счет точно так же, как это делается с помощью
рассмотренных нами в гл. 7 команд управления заданиями.
8—821
226
Глава 12
Организация потока заданий
За некоторыми исключениями, переход от задания к заданию или
от одного шага задания к другому выполняется довольно
тривиально — один оператор «Выполнить» и, быть может, несколько
запросов на устройства. Использование вычислительной системы
было бы очень неэффективным, §сли бы для каждого
выполняемого задания эти команды набирались оператором на пульте.
Операторский
пульт
Библиоте-
каодрозоб
памяти
Программа
SPI
*
^ "*"
Супервизор
*>
Программа
загрузки
Фонобый раздел
Второй передний план
__
Рис. 12.2. Инициирование одиночных программ.
Используя карты управления заданиями, отдельные,
предварительно отперфорированные управляющие команды могут
быть последовательно введены через устройства чтения карт, что
занимает значительно меньше времени, чем набор каждой из
них с клавишного терминала. Программист может подготовить
колоду карт его задания, включающую карту JOB как признак
начала задания и карту «/&», отмечающую конец колоды карт
с заданием, карт EXEC, отделяющих шаги задания, и карт ASSGN
описывающих запрашиваемые устройства ввода-вывода; таким
Дисковая операционная система IBM/360 227
образом, колода карт задания представляет собой законченный
комплект карт, содержащий программные команды и управляющие
операторы, что практически исключает необходимость каких-либо
действий оператора с момента запуска программы до завершения
задания (кроме, быть может, установки лент или дисков и ответов
на сообщения программы). Переход от одного шага задания к
другому управляется не командами оператора, а картами
управления заданиями, что значительно эффективнее.
Зачем ограничиваться только одним заданием? Ничто не
мешает загрузить системное устройство чтения карт любым числом
заданий и последовательно обрабатывать их одно за другим. Карты
JOB и «/&» служат разделителями заданий, а внутри заданий
отдельные его шаги определяются картами EXEC. На основе
организованного таким образом «потока заданий» переход от
одного задания к другому может эффективно и систематически
выполняться с помощью некоторой программы, интерпретирующей
операторы управления заданиями и требующей минимального
участия оператора системы.
Программа управления заданиями
Если вы внимательно прочли предыдущий абзац, то, вероятно,
отметили следующее предложение: «переход от одного задания
к другому может эффективно и систематически выполняться с
помощью некоторой программы, интерпретирующей операторы
управления заданиями»; здесь мы только выделили курсивом два
слова. Загрузка программ и их инициирование выполняются не
автоматически. В режиме инициирования одиночных программ
названные функции выполняются программой SPI. При
использовании потока заданий эти функции возлагаются на программу
управления заданиями.
Программа управления заданиями не является частью
резидентной составляющей операционной системы; иначе говоря,
в переходной точке задания (по окончании шага задания)
резидентным супервизором в только что освободившийся раздел
памяти загружается программа управления заданиями, и затем
управление передается этому модулю. Программой управления
заданиями в свою очередь считываются управляющие карты,
выполняются необходимые действия по назначению устройств,
подготавливается раздел памяти для исполнения прикладной
программы и обеспечиваются другие служебные функции. Когда
программа управления заданиями встречает карту EXEC, она
обращается к модулю резидентного супервизора загрузки
программ, вызывая тем самым считывание запрашиваемой
программы и передачу ей управления.
8*
228
Глава 12
Супервизор
Фоновый раздел
(Программа А)
t
SVC
RETURN
Второй передний план
Первый передний план
Супервизор
Фоновый раздел
(Упродление заданиями)
Второй передний план
Пербый передний план
а
Супервизор .
Фоновый раздел
(Программа С)
Второй передний план
Первый передний план
б
Рис. 12.3. Программа управления заданиями.
Проследим эту последовательность на примере,
иллюстрируемом рис. 12.3. Рис. 12.3, а соответствует моменту успешного
завершения программы, занимающей раздел фона, о чем послано
сообщение в резидентную часть операционной системы
исполнением макрокоманды RETURN. Хранящаяся на дисках SYSRES
копия программы управления заданиями загружается
операционной системой в раздел фона. Эта программа замещает в памяти
Дисковая операционная система IBM/360 229
прикладную программу (исполнение которой только что
завершилось). Оказавшись в памяти (рис. 12.3, б), программа
управления заданиями считывает карты управления заданиями
следующего шага задания, исполняя все запрашиваемые функции.
Обычно последней управляющей картой шага задания является
карта EXEC; встречая эту карту, программа управления
заданиями возвращает управление резидентной части операционной
системы, которым запрашиваемая программа, хранящаяся либо
в системной, либо в личной библиотеке образов программ в
основной памяти, загружается в раздел фона, замещая программу
управления заданиями (рис. 12.3, в).
Управление потоком заданий в DOS обычно связывается с
разделом фона; для этого могут использоваться также разделы
переднего плана, если в процессе загрузки системы задаются
соответствующие значения параметров. За исключением, быть может,
случаев выполнения программы обработки постоянно
поступающих в онлайновом режиме данных или непрерывно используемой
с утра в течение целой смены или всего дня программы хранения
и поиска информации, применение метода потока заданий,
управляемых модулем операционной системы перехода от одного
шага задания к другому, обеспечивает значительно более
эффективное использование машины в сравнении с методом
инициирования одиночных программ. Ни один оператор не сможет
набирать на клавишном устройстве управляющие команды так
быстро, как они читаются устройством чтения карт. Управляющие
карты, конечно, должны быть отперфорированы, однако
программист, перфорирующий управляющую карту на внешнем
устройстве и затрачивающий много времени на поиск, скажем,
буквы Е на клавиатуре, не вынуждает простаивать CPU
машины, стоящей сто тысяч долларов; непроизводительно
расходуемое время на внешних устройствах перфорации обходится
значительно дешевле простоев CPU, связанных с набором команд с
операторского пульта.
Спулинг
При обсуждении потоков заданий предполагалось, что
устройством ввода управляющих карт и карт самого потока заданий
является устройство чтения карт. Как нам теперь уже должно
быть известно, устройство чтения карт является одним из
низкоскоростных устройств ввода —вывода. Спулинг заключается
в пересылке потоков заданий в более быстродействующее
устройство, обычно диск, но иногда и магнитную ленту, используя для
этого либо периферийный процессор, либо свободное время
центрального процессора машины (соответствующее, например,
одновременному состоянию ожидания всех инициированных про-
230
Глава 12
грамм); после этого прикладные программы и программа
управления заданиями могут заменить обращения к низкоскоростным
устройствам непосредственного ввода операциями чтения
образов карт данных с быстродействующих устройств. Это повышает
пропускную способность машины.
Спулинг используется и на завершающем этапе процесса
обработки данных — при их выдаче. Программы, выполняемые в
системе, использующей спулинг, пересылают записи выходных
данных на диск или ленту, а не обращаются для их физической
задачи непосредственно к печатающему устройству
сравнительно малого быстродействия; впоследствии вновь либо с
использованием внешнего процессора, либо в периоды недогрузки CPU
эти данные пересылаются из быстродействующих устройств
вспомогательной памяти в печатающее устройство.
В современных системах используется ряд программно
реализованных процедур спулинга; некоторые из них (за отдельную
плату) поставляются изготовителем машины, другие
предлагаются независимыми фирмами-разработчиками математического
обеспечения. Обычно подпрограммы спулинга занимают один
из разделов переднего плана, чаще — первый раздел. Ниже
в этой же главе мы покажем, какими средствами операционная
система и программа управления заданиями могут находить
карты потоков заданий в наборах данных, сформированных
процессом спулинга; в гл. 13 мы рассмотрим функционирование
реальной системы спулинга в условиях функционирования OS/MFT —
операционной системы IBM несколько более высокого уровня.
Мультипрограммирование и система управления
физическим вводом — выводом
Теперь, когда мы узнали, как с помощью IPL загружается
программа супервизора, a SPI (инициирование одиночных
программ) или программы управления заданиями (потоком заданий)
загружаются прикладные программы, мы подготовлены к
изучению средств решения проблемы мультипрограммирования в
условиях DOS. Основной эффект мультипрограммирования, как
вы, вероятно, помните, обусловлен операциями ввода — вывода,
а точнее несоответствием между производительностью устройств
ввода — вывода и скоростью обработки данных самой
вычислительной машиной. Время, которое высокоскоростной процессор
должен был бы простаивать, ожидая завершения сравнительно
медленных операций в устройстве ввода — вывода, при
мультипрограммировании используется для переключения CPU на
управление другой программой. Одновременно выполнение
нескольких программ позволяет повысить пропускную способность
системы, а также снизить время обращения программ.
Дисковая операционная система IBM/360 231
Так как операции ввода — вывода играют основную роль в
системе мультипрограммирования, изучение способа реализации
данной операционной системой функций ввода-вывода должно
дать ясное представление о механизмах
мультипрограммирования. Изучение системы управления физическим вводом-выводом
(для краткости — PIOCS) дисковой операционной системы
фирмы IBM позволяет понять эти механизмы.
Реализация PIOCS основана на трех макрокомандах:
макрокоманде CGB, с помощью которой формируется так называемый
блок управления командами канала, EXGP, или макрокоманде
выполнения канальной программы, и макрокоманде WAIT. При
использовании PIOGS программист сначала должен составить
свою канальную программу из команд канала, или CCW,
описанных в предыдущей главе. Эта канальная программа хранится в
разделе памяти, занимаемом его программой (рис. 12.4, а). Кроме
того, программист должен написать коды макроопределения GCB,
которые также являются частью его программы и обычно
размещаются в разделе описаний, определяющих распределение
памяти. С помощью макроопределения формируется блок управления
командами канала, содержащий такую информацию, как
символическое имя физического устройства ввода — вывода, адрес
первого CCW канальной программы и различные признаки,
устанавливаемые прикладной про1раммой или операционной
системой для фиксации состояний, характеризующих операции ввода—
вывода. Блок управления GCB состоит из 24 или 16 байтов (по
усмотрению программиста).
Когда прикладная программа готова к выполнению операции
ввода — вывода, она выдает макрокоманду EXGP (рис. 12.4, б).
В результате выполнения этой макрокоманды происходит
обращение к супервизору (SVG) и управление передается
операционной системе. Причина такой передачи управления объясняется
просто — необходимая для запуска физической операции ввода
или вывода команда SIO является разрешенной только для
супервизора. Единственным операндом макрокоманды EXGP является
адрес GGB, по которому, как вы, вероятно, помните, хранятся
символический адрес устройства и адрес связанной с ним
канальной программы.
Выполнив необходимые стандартные операции,
определенные макрокомандой ЕХСР, супервизор возвращает управление
прикладной программе (рис. 12.4, в). Обычно прикладная
программа скоро оказывается не в состоянии продолжать счет, не
завершив заданных ранее операций ввода — вывода, и поэтому
она выдает макрокоманду WAIT (которая адресуется к тому же
CGB). Это — еще одно обращение к супервизору,
предназначенное для передачи операционной системе сообщения о том, что
выдавшая макрокоманду WAIT программа не может продолжать
Супервизор
ФоноВый раздел
ССВ
^
Канальная
программа
Второй передний план
ПерВый передний план
а
Супервизор
j к
ФоноВый раздел
ЕХСР ССВ7
WAIT CCB1
/
ССВ
^
Канальная
программа
Второй передний план
Первый передний план
6
Супервизор
SIO
t
ФоноВый раздел
EXCP CCB1
ССВ
=v
Канальная
программа
Второй передний план
Первый передний план
ФоноВый раздел
(состояние отдания)
СЕР
WAIT
ССВ1
ССВ1
^
Канальная
программа
Второй передний план
ПерВый передний план (управление CPU)
Рис. 12.4. Система управления физическим вводом — выводом.
Дисковая операционная система IBM/360 233
счета, пока не будет завершена операция ввода — вывода,
описанная адресуемым CGB. В таком случае супервизор может
переключить программу в состояние ожидания, вывести отвечающее
этой программе самое последнее PSW (старое PSW прерываний по
SVC) из числа прерываний ожидающих обработки, сохранить
регистры программы и попытаться передать управление другой
.программе (рис. 12.4, а). Кстати, старое PSW и регистры
программ, размещаемых в разделе переднего плана, сохраняются
в специально отведенной области этого раздела; для программ,
занимающих раздел фона, названная информация сохраняется
в разделе супервизора.
Что, если в момент перехода нашей программы в состояние
ожидания оказываются готовыми к счету две или большее число
программ? В этом случае используется механизм приоритетов.
Высший приоритет приписывается первому переднему плану,
далее следует F-2, F-3, F-4 и раздел фона; первой получит
управление программа, занимающая раздел с наивысшим приоритетом.
Система управления логическим вводом — выводом
Очень немногие прикладные программисты прибегают к
написанию своих собственных канальных программ, и фактически
большинство из них в условиях DOS непосредственно систему PIOCS
не используют. Такому подходу они предпочитают
использование ряда макрокоманд, известных под общим названием «Система
управления логическим вводом — выводом» (LIOGS). Программист,
использующий систему LIOGS, должен составить
макроопределение DTF для каждого файла, который может быть объектом
доступа его программы. Макроопределение DTF (определение
файла) обеспечивает формирование таблицы, содержащей подробную
информацию о данных, составляющих рассматриваемый файл:
длине логических записей, размере блока, формате записей
(фиксированная длина, переменная длина) — и другие описательные
характеристики, необходимые для определения метода доступа
при обработке данных. В заключительной стадии процесса
генерации, связанного с этим макроопределением, определяются
значения ряда адресных констант, которыми в конечном итоге
обеспечивается связь таблицы DTF с программным модулем
метода доступа.
Адреса этих «внешних ссылок» устанавливаются редактором
связей в шаге редактирования связей. В процессе
формирования загрузочного модуля программа объектного модуля
дополняется копией соответствующей стандартной подпрограммы
метода доступа; адресные константы, задаваемые
макроопределением DTF, заменяются действительным адресом этой стандарт-»
234 Глава 12
ной подпрограммы метода доступа. Когда загрузочный модуль
программы (или фаза в терминологии DOS) считывается в память
и запускается в счет, управление программой в макрокомандах
GET и PUT или READ и WRITE адресуется к элементам
таблицы DTF, что приводит к передаче управления модулю
метода доступа, внесенному в программу редактором связей
(рис. 12.5). Программный модуль метода доступа включает три
важнейшие составляющие. Во-первых, он содержит действи-
Объектный модуль
БЕТ RECDTF
f RECBTF Параметры DTF
( Канальная программа
ч
^ Программы PIOCS
Блокирование, деблокиробйние
и т.д.
4
• Метод доступа „Ап
Метод доступа „В"
Метод доступа „ С "
буферы
х ■"■
Рис. 12.5. Загрузочный модуль, использующий LIOGS.
тельную канальную программу. Другую важную часть метода
доступа составляют команды PIOCS (макроопределения ССВ и
макрокоманды ЕХСР и WAIT), которые необходимы для
обеспечения запрашиваемых операций,— PIOCS используется в LIOGS.
Наконец, программный модуль LIOCS включает команды,
реализующие блокирование, деблокирование и буферизацию.
Дисковая операционная система IBM/360 235
Мультипрограммирование. Краткие выводы
DOS обеспечивает режим мультипрограммирования. В этом
режиме, как вы, вероятно, помните, в память машины загружаются
одновременно несколько программ (в условиях DOS не более
пяти); CPU управляет сразу всеми программами, переключаясь с
одной программы на другую подобно шахматному гроссмейстеру в
сеансе одновременной игры. Основной технической базой
мультипрограммирования является существенное различие в
быстродействии устройств ввода - вывода и центрального процессора. Если
программа, занимающая первый раздел переднего плана, выдает
обращение к устройству ввода или вывода, то на выполнение
действий, связанных с этим обращением, требуется довольно много
времени. В большинстве случаев программа оказывается не в
состоянии продолжать счет до завершения запрашиваемых операций.
Чтобы избежать простоев вычислительной системы, обратившаяся
программа переводится в состояние ожидания и управление CPU
передается программе второго раздела переднего плана (или какого-
нибудь другого раздела, если программа раздела F-2 также
оказывается в состоянии ожидания).
Важнейшими в управлении такой системы
мультипрограммирования являются, очевидно, операции ввода — вывода. В
Системе IBM/360 команда, инициирующая физическую операцию
ввода — вывода — «Начать ввод — вывод», или SIO, — является
привилегированной, т. е. она может использоваться только модулем
операционной системы, размещенным в первом разделе памяти
(ключ защиты памяти 0000), таким образом, прикладная программа
вынуждена передавать управление операционной системе. Коль
скоро супервизор получает управление, оказывается возможной
реализация алгоритмов мультипрограммирования.
В условиях DOS система управления физическим
вводом-выводом дает возможность программисту непосредственно
использовать функции операционной системы, связанные с
мультипрограммированием. Информация о данных и признаки состояния,
необходимые для связи между исполняемой программой и модулями
PIOCS супервизора, формируются макрокомандой блока
управления командами канала, или GCB. Использование в прикладной
программе макрокоманды EXGP («Выполнить канальную
программу») вызывает обращение к супервизору (команда SVC) с
передачей управления супервизору, который выдает команду SIO и
возвращает управление в прикладную программу. Третья
макрокоманда системы PIOCS —макрокоманда WAIT— позволяет на
время ожидания передать управление операционной системе, которая
может затем передать управление CPU программе другого раздела.
В действительности большинство программистов не
пользуются макрокомандами PIOCS. Вместо этого они используют макро-
236
Глава 12
команды и макроопределения системы LIOGS — DTF, GET,
PUT, READ, WRITE, — которыми обеспечивается связь с
программным модулем метода доступа, вносимым в загрузочный
модуль редактором связей. Такой модуль метода доступа содержит
канальную программу, команды PIOCS и подпрограммы
блокирования — деблокирования, необходимые прикладной программе.
Кстати, во многих вычислительных системах, работающих в
условиях DOS, прикладные программисты сами не составляют
макроопределения DTF. Описанные как системные
макроопределения или просто составленные заранее, эти DTF включаются в
исходный модуль прикладной программы с помощью управляющей
команды COPY; таким образом, программист может уделить
основное внимание не столько деталям операций ввода — вывода,
сколько алгоритмам программы.
Распределение памяти
Теперь, когда мы уже рассмотрели способ реализации
мультипрограммирования в системе DOS, мы можем перейти к рассмотрению
некоторых проблем, связанных с мультипрограммированием. Одна
из них состоит в распределении памяти. Если в памяти могут
находиться одновременно несколько не связанных между собой
программ, то как следует делить и распределять этот важнейший
вид системных ресурсов? DOS является операционной системой,
использующей разделы фиксированной длины; в процессе
генерации системы память машины делится на ряд разделов
фиксированной длины. С помощью процедуры IPL оператор может изменить
стандартную конфигурацию, однако, после того как система
инициирована, распредедение памяти фиксируется и остается
постоянным.
С отмеченной выше проблемой связана и проблема защиты
памяти. Каким образом система предупреждает разрушение данных
или команд программы первого раздела переднего плана
действиями программы раздела фона? Эта проблема решается столь же
просто — каждому разделу сопоставлен уникальный ключ защиты
памяти и всякая попытка выполнить команду, изменяющую
содержимое любой ячейки памяти вне раздела, отвечающего ключу защиты
исполняемой программы, приводит к прерыванию по ключу
защиты и, скорее всего, к принудительному выводу программы из
процесса счета.
Управление устройствами ввода — вывода
Что произойдет, если две программы приблизительно в одно и то же
время запрашивают ввод данных с одного и того же
лентопротяжного устройства? Если в памяти могут размещаться несколько не
Дисковая операционная система IBM)'360 237
^^^___^^^_^_^^_ •
связанных между собой программ, то такая проблема может
возникнуть и операционная система должна располагать средствами
ее разрешения. Распределение устройств ввода-вывода в
дисковой операционной системе управляется с помощью трех основных
таблиц.
Первая из них — таблица, называемая таблицей блоков
физических устройств или PUB-таблицей. Каждому физическому
устройству, входящему в вычислительную систему, сопоставляется
отдельный восьмибайтовый элемент таблицы PUB; первым байтом
элемента определяется номер канала, вторым — номер устройства,
остальные шесть байтов хранят различные указатели и
признаки. Эта таблица размещается в разделе таблиц супервизора и
формируется в момент генерации системы, при этом ее организация
соответствует упорядочению каналов следующим образом:
сначала указываются элементы, отвечающие устройствам,
связанным с каналом 0 (мультиплексором), затем — связанным с
каналом 1, и т. д.
Как вы, может быть, помните из главы об управлении
заданиями в DOS, программист редко обращается к физическим
устройствам ввода — вывода, используя вместо этого символические
имена. Эти символические имена хранятся в таблице блоков
логических устройств, или таблице LUB. Такая таблица строится длякаж-
дого раздела, активизированного системой. Отдельные элементы
таблицы LUB размещаются в памяти в определенной
последовательности, как показано на рис. 12.6. Каждый элемент имеет длину
в два байта, при этом первым байтом адресуется некоторый
элемент таблицы PUB.
SYSRDR Устройство ввода команд управления заданиями
SYSIPT Устройство ввода прикладных программ
SYSPCH Устройство вывода на перфокарты
SYSLST Устройство вывода на печать
SYSLOG Устройство для обмена сообщениями с оператором
SYSLNK Память на диске для входных данных редактора связей
SYSRES Область резидента Системы
SYSCLB Личная библиотека образов памяти
SYSRLB Личная перемещаемая библиотека
SYSSLB Личная библиотека исходных программ
SYSREC Память на диске для регистрации ошибок
SYS000— Другие элементы. Точное значение этих элементов зависит от
SYSmax вычислительной системы
Рис. 12.6. Последовательность элементов таблицы LUB.
Использование этих двух таблиц, вероятно, лучше всего
проиллюстрировать на примере (рис. 12.7). Допустим, что программа
раздела фона только что обратилась к устройству ввода — вывода с
именем SYSIPT. Для определения действительного адреса этого
устройства программа супервизора прежде всего просматривает
238
Глава 12
таблицу блоков логических устройств, соответствующую разделу
фона; поскольку SYSIPT всегда является вторым элементом любой
таблицы LUB, то супервизор выделяет именно этот второй блок
(рис. 12.7, а). Первый байт этого элемента указывает на третий
элемент таблицы блока физических устройств (PUB), в котором
должна содержаться информация о физическом устройстве,
сопоставленном с именем SYSIPT для раздела фона, — в нашем случае
это устройство 14 (ОЕ в шестнадцатеричном представлении.
SYSIPT
[02 100
03100
04
06
00
00
23
25
32
*0(Г
05
02
а
00
00
Гоо"
00
00
00
01
ОА
ОЕ
OF
02
OB
00
00
00
00
00
00
00
00
00
00
00
00
01 80
00
10
11
21
со
40
00
00
00
00
00
00
00.
00
00
00
00
00
00
00
00
00
00
00
Остальная
часть таблицы
PUB канала 1
02 80 | Остальная
I часть таблицы
I PUB па нала Z
5/0 для канала и устройства
6
Рис. 12.7. Связь между таблицами управляющих блоков логических и
физических устройств.
о — таблица LUB; б — таблица FUB; в — команда SIO.
рис. 12.7, б), связанное с каналом 0. Как вы, вероятно, помните из
гл. 11, команда «Начать ввод — вывод» содержит в поле операндов
номер канала и адрес устройства. Эта информация
извлекается именно из элемента таблицы PUB (рис. 12.7, в). Если канал
свободен, то адреса канала и устройства пересылаются в поле команды
SIO, команда выполняется и управление операцией ввода —
вывода передается каналу.
А если канал оказывается занятым? Чтобы не держать систему
в состоянии ожидания, операция ввода — вывода, которая не
может быть начата вследствие занятости канала, помещается в
канальную очередь,— третья важная таблица в управлении вводом —
выводом, используемая при последующей обработке. В
дальнейшем, когда поступают сигналы прерывания, указывающие на
завершение операции ввода — вывода, супервизором проверяется
Дисковая операционная система IBM/360
239
таблица канальной очереди в поиске операций ввода — вывода,
ожидающих свободного канала; если таковые имеются, то, прежде
чем возобновить процессорную обработку программы, супервизор
выполняет запуск ожидающих исполнения команд ввода— вывода.
Элементы таблицы канальной очереди имеют длину в четыре
байта; они содержат адрес блока управления командами канала
(ССВ), закодированного в запрашивающей программе, и указатель
следующего элемента канальной очереди. Одно из полей
элементов таблицы PUB содержит указатель канальной очереди.
Использование канальных очередей позволяет системе исключить
проблему «почти одновременного» доступа к одному и тому же устройству.
F-1 LUB
SYSIPT
04
01
07
00
00
00
Общесистемная таблица PUB
F-2 LUB
SYSIPT
04
02
07
00
00
00
BG LUB
04
03
08
00
00
00
00
00
00
00
00
00
об
01
02
03
OE
OA
OB
04
00
00
00
00
00
00
00
00
00
00
00
00
00
OP
11
10
10
10
40
40
L2^
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
SYSIPT
Рис. 12.8. Три устройства чтения карт для трех разделов.
Другие поля элемента таблицы PUB дают возможность назначать
определенное устройство, например лентопротяжное, на время
исполнения задания данного раздела: такие запросы сообщаются с
помощью оператора ASSGN. Поскольку каждая операция ввода—
вывода должна быть отражена в таблице PUB, то описанная
организация обеспечивает довольно хорошее управление.
При такой организации могла бы возникнуть следующая
проблема. Ввод с перфокарт обычно используется многими
программами; допустим, что ввод с карт требуется как программе раздела
переднего плана, так и программе раздела фона. Почему бы не
оснастить систему тремя устройствами чтения карт? Необходимо
помнить, что каждый раздел имеет свою таблицу LUB;b разделе
F-1 SYSIPT мог бы ассоциироваться с первым элементом
таблицы PUB, тем самым обеспечивалась бы косвенная адресация
устройства 01 в канале 00 (рис. 12.8), тогда как в разделе F-2
SYSIPT связывается со вторым элементом таблицы PUB и
соответственно с устройством 02 в канале 00. В разделе фона SYSIPT
сопоставляется третий элемент таблицы PUB и снова физическое
устройство 03 в канале 00 (рис. 12.8).
240 Тлава 12
Спулинг в основном реализуется по той же схеме. Если
подпрограмма спулинга размещается в разделе F - 1, то SYSRDR и
SYSIPT, соответствующие этому разделу, ссылаются на адрес
реального устройства чтения карт; в таблицах LUB всех других
разделе^ SYSRDR и SYSIPT ссылаются на адрес файла,
созданного программой спулинга. Таким образом, в системе,
использующей спулинг, программист не замечает смены носителя его
исходных данных.
В наших рассуждениях о супервизоре говорилось лишь
самыми общими фразами в связи с рассмотрением логики управления
операциями ввода — вывода; реальный супервизор включает ряд
отдельных модулей. Прикладная программа обращается к помощи
супервизора, используя механизм прерываний по SVC, который
реализуется программой обработки прерываний по обращению к
супервизору. Связь между таблицами LUB и PUB, организация
канальных очередей и выдача команд SIO управляются
программным модулем, называемым планировщиком канальных
процессов. Прерывания ввода — вывода отслеживаются
программой-обработчиком прерываний ввода — вывода, связанной с
планировщиком канальных процессов, которым определяется
наличие программ, ожидающих исполнения операций ввода —
вывода с тем, чтобы занять «только что» освободившийся канал и
лишь после этого вернуть управление в исполняемую прикладную
программу. Приведенные примеры служат иллюстрацией того,
что операционная система представляет собой совокупность
программных модулей.
Библиотечные функции
DOS обеспечивает функционирование трех уровней программных
библиотек. Библиотека исходных программ, как следует из ее
названия, включает исходные программные коды (исходные
программы на языке ассемблера или на языке компилятора),
оформленные в виде модулей, называемых «книгами». Макрорасширения
обычно хранятся в одной из библиотек исходных программ; если
в исходном модуле прикладной программы встречается ссылка
на некоторую макрокоманду, то соответствующая «книга»
просто добавляется к исходному модулю и компилируется или
ассемблируется в составе этого модуля. Предварительно
закодированные структуры данных могут включаться в исходный модуль с
помощью команды COPY. Системная библиотека исходных
программ размещается в пакете дисков резидента Системы;
допускается также использование личных библиотек исходных программ;
они могут размещаться почти на любом устройстве
вспомогательной памяти.
Дисковая операционная система IBM/360 241
Перемещаемая библиотека содержит объектные модули.
Программные коды метода доступа, которые включаются редактором
связей в объектный модуль в процессе создания загрузочного
модуля, обычно хранятся в перемещаемой библиотеке.
Подпрограммы могут включаться в состав объектного модуля с помощью
команды «Включить» (INCLUDE), рассмотренной нами ранее в
гл. 7. Объектные модули перемещаемой библиотеки читаются
редактором связей и используются для построения загрузочных
модулей. Как и библиотеки исходных программ системная
перемещаемая библиотека хранится на дисках резидента Системы
(SYSRES). В DOS допускается также использование личных
перемещаемых библиотек.
Загрузочный модуль — результат работы редактора связей —
представляет собой записанный на уровне языка машины
программный модуль, готовый к загрузке и выполнению. Это
замкнутая, готовая к счету программа. Загрузочные модули хранятся в
библиотеке образов памяти. Команда EXEC ссылается на имя
элемента библиотеки образов памяти (в DOS они называются
фазами), что для супервизора означает требование загрузить
названную фазу в раздел памяти и выполнить ее. Системная
библиотека образов памяти хранится на устройстве резидента Системы;
как и в других случаях, допускается использование личных
библиотек образов памяти.
DOS включает ряд специальных программ, выполняющих
функции сопровождения, обеспечения и копирования элементов
библиотек. В частности, этими программами выполняются такие
действия, как добавление новых, стирание или переименование
существующих элементов библиотек, ведение библиотечных
руководств, распечатка или перфорация элементов библиотеки,
создание новых личных библиотек, реорганизация библиотеки
и другие.
Краткие выводы
Дисковая операционная система DOS фирмы IBM является
операционной системой общего применения и предназначена для
обеспечения режима мультипрограммирования в вычислительных
машинах IBM семейства Системы/360. В условиях DOS основная
память машины разбивается на ряд разделов фиксированной
длины (раздел супервизора операционной системы и до пяти
разделов прикладных программ), когда в процессе генерации
системы копированием модулей первичного экземпляра операционной
системы изготовителя по выбору заказчика комплектуется
конкретная конфигурация операционной системы. Специально
предназначенный для этого пакет дисков SYSRES затем монтируется
на одном из драйверов вычислительной установки заказчика и с
242 Глава 12
помощью процедуры, называемой начальная загрузка программы
(IPL), постоянно хранящейся в памяти машины, компонент
операционной системы, называемый супервизором, считывается в
память машины; при этом оператор может изменить выбранное
во время генерации системы разбиение памяти на разделы.
Супервизор занимает первый раздел памяти. Этот раздел,
кроме супервизора, содержит управляющие таблицы и
транзитные области; редко используемые модули операционной системы,
когда в них появляется необходимость, считываются в
транзитную область.
Остальная часть памяти делится на ряд разделов прикладных
программ, при этом раздел или несколько разделов переднего
плана следуют за разделом фона. Разделы переднего плана
характеризуются более высоким приоритетом. Программы загружаются
в один из разделов либо с операторского пульта с помощью
модуля инициирования одиночных программ, либо, что бывает
значительно чаще, в виде потока заданий, управляемого картами
управления заданиями. В последнем случае в раздел прикладной
программы сначала загружается программа управления
заданиями, которая считывает и исполняет карты управления
заданиями, после чего прикладная программа из библиотеки образов
памяти загружается подпрограммой загрузки супервизора.
Важнейшей системой реализации функций
мультипрограммирования в DOS является система управления физическим вводом—
выводом (PIOCS), которая реализуется с помощью трех
макрокоманд:-ССВ, которая формирует блок управления командами
канала, ЕХСР, посылающей в супервизор команду управления
канальной программой, и WAIT, обеспечивающей передачу
управления супервизору с последующим переключением CPU на
управление программой другого, раздела. Многие программисты
предпочитают фактическому использованию PIOCS применение
макрокоманд DTF, GET и PUT системы управления логическим
вводом и выводом (LIOCS). Программные модули метода доступа
системы LIOCS вносятся в загрузочный модуль прикладной
программы в процессе редактирования связей; эти модули содержат
необходимые канальные программы, коды PIOGS и программные
коды блокирования — деблокирования и буферизации.
Распределение устройств ввода — вывода управляется
несколькими системными таблицами. Таблица блоков физических
устройств, или PUB, включает по одному элементу для каждого
входящего в систему устройства ввода — вывода. Таблицей
блоков логических устройств (LUB) устанавливается соответствие
между символическими именами устройств, используемыми
прикладной программой, и физическими устройствами, отмеченными
в таблице PUB. Если запрос операции ввода или вывода
приходится на момент времени, когда канал оказывается занятым, то
Дисковая операционная система IBM/360 243
он может быть внесен в каналкную очередь и объявлен
ожидающим; впоследствии, когда происходит прерывание ввода —
вывода, обработчик прерываний отдает управление подпрограмме-
планировщику канальных процессов, которая опрашивает
канальную очередь ожидающих запросов на операцию ввода —
вывода и связывает с освободившимся каналом первый из них, лишь
после этого возвращая управление в прикладную программу.
Глава завершается рассмотрением функций библиотек. DOS
обеспечивает использование как системных, так и личных
библиотек исходных программ, перемещаемых библиотек и библиотек
образов памяти.
В следующей главе мы будем изучать более сложную
операционную систему, предназначенную для работы в условиях тех
же аппаратных средств, — OS/MFT. Мы будем опираться на
многие представления, введенные в этой главе.
УПРАЖНЕНИЯ
1. Изобразите схематически распределение памяти в системе
DOS, содержащей кроме разделов фона и супервизора четыре
активных раздела переднего плана. Выделите компоненты
раздела супервизора.
2. В чем состоит разница между процедурами SYSGEN и
IPL?
3. Опишите последовательные стадии загрузки программы,
организованной в форме потока задания и использующей
программу управления заданиями.
4. Как реализуется мультипрограммирование средствами
PIOCS?
5. Соотнесите системы LIOGS и PIOGS.
6. DOS является операционной системой с фиксированными
разделами. Что это означает?
7. Поясните схему распределения устройств ввода — вывода
в DOS. Рассмотрите при этом связь между таблицами PUB и
LUB.
Глава 13
ОПЕРАЦИОННАЯ СИСТЕМА IBM/360
МУЛЬТИПРОГРАММИРОВАНИЯ С ФИКСИРОВАННЫМ
ЧИСЛОМ ЗАДАЧ
Введение
В этой главе мы рассмотрим другую операционную систему,
предназначенную для обеспечения режима
мультипрограммирования в вычислительных системах IBM/360 или IBM/370 ; она
известна как операционная система IBM/360
мультипрограммирования с фиксированным числом задач (OS/MFT). Мы увидим,
как при одновременной загрузке в память нескольких программ
средствами математического обеспечения решаются такие задачи,
как планирование, распределение памяти, переключение PSW,
распределение устройств ввода — вывода и управление их
работой, управление данными и другие. Поскольку рассматриваемая
операционная система создана для обеспечения машин фирмы
IBM, то ограничения и условия, накладываемые на
математическое обеспечение, определяются структурой аппаратных средств,
изготавливаемых именно этой фирмой. Таким образом, в данной
операционной системе должны быть предусмотрены средства
обработки прерываний, слов состояния программ и полей связи с
каналами.
Цель этой главы состоит в том, чтобы проиллюстрировать в
общих чертах функционирование типичной операционной
системы. Для этого нам придется изучить некоторые особенности
структуры операционной системы. Однако мы не стремимся к полному
(«на уровне битов») пониманию того, что в действительности
является лишь одним из возможных решений довольно
распространенной задачи обработки данных. Поэтому не будем пытаться
детально изучать функции всех управляющих блоков
операционной системы. Мы надеемся, что описание рассматриваемых в этой
главе процессов является достаточно подробным, хотя, конечно,
и не в той степени, которая повергает в полную растерянность
впервые приступивших к изучению операционной системы MFT
и пытающихся разобраться в бесконечных блоках управления и
указателях связей ее модулей.
Читая эту главу, постарайтесь представить OS/MFT не как
самоцель, а как одно из решений проблемы
мультипрограммирования.
Операционная система OS/MFT 245
Основные структуры
Операционная система мультипрограммирования с
фиксированным числом задач для вычислительных систем IBM/360 и IBM/370,
для краткости в дальнейшем называемая просто MFT, представ:
ляет собой не что иное, как совокупность программ, таблиц и ука-
заталей, предназначенных для обеспечения режима
мультипрограммирования в условиях работы аппаратных средств
вычислительных систем IBM/360 или IBM/370. Часть этих модулей
хранится в основной памяти, другие размещаются во
вспомогательной памяти и считываются в основную, когда в этом возникает
PSW
Резидентная ооласть
Динамическая
область
Общая область
Af
Рис. 13.1. Основная структура распределения памяти в OS/MFT.
необходимость; в памяти машины под те и другие модули
отводится соответственно «резидентная область» и «общая область»
(рис. 13.1).
Остальная область памяти доступна для прикладных программ.
Оператор машины во время выполнения процедуры IPL задает
разбиение этой динамической области максимума на 15 разделов,
указывая для каждого из них объем, а также класс или классы
заданий, выполняемых в пределах данного раздела.
Характеристики и число разделов могут изменяться оператором, однако без
вмешательства человека число разделов и объем каждого из них
остаются постоянными — отсюда происхождение названия —
«фиксированное число задач».
Чтобы конкретнее проиллюстрировать описанный выше
метод распределения памяти, определим параметры той
вычислительной системы, которую мы будем использовать во многих
примерах на протяжении данной главы. Пусть объем основной памяти
равен 300К байт. Резидентная область и общая область
занимают в сумме 80К, оставляя доступными для прикладных про-
246 Глава 13
грамм 220К (кстати, тот факт, что резидентная область занимает
младшие адреса памяти, а общая область размещается в зоне
старших адресов, не имеет существенного значения; это просто
связано с первоначальным выбором, сделанным группой
проектировщиков операционной системы). В нашей системе могут
выполняться программы трех различных классов. Задания класса
А являются наиболее употребительными, требующими мало
процессорного времени и не более 90К основной памяти. Более
длительные по времени исполнения и требующие больше 90К байт
Резидентная область-ВОК
Раздел заданий класса А-90К
Раздел заданий массо§ В и С-ШК
Общая область--2DK
Рис. 13.2. Назначение трех разделов памяти (супервизор и два раздела
прикладных программ) в OS/MFT.
памяти задания относятся к классу В. Задания, требующие
установки магнитной ленты, составляют класс С. Командами с
операторского пульта оператор формирует в памяти два раздела: раздел
емкостью в 90К байт для заданий класса А и раздел емкостью в
130К для заданий классов В и С. Распределение памяти в такой
системе иллюстрируется рис. 13.2.
Для повышения эффективности системы прикладные
программы процедурой спулинга пересылаются на диск, образуя очереди
(рис. 13.3); эта функция выполняется одним из модулей
операционной системы. Считывание в основную память включенных в
очередь загрузочных программных модулей и элементов
различных библиотек выполняется другим модулем операционной
системы. Обслуживание считанной в память прикладной программы
обеспечивается некоторыми модулями операционной системы,
обрабатывающими прерывания, управляющими связью с
устройствами ввода — вывода и выполняющими другие функции. В
остальной части этой главы мы будем изучать совместную работу
прикладных программ и названных модулей операционной системы.
Операционная система OS/MFT 247
В предыдущих главах мы в общих чертах уже обсудили
назначение большинства из этих модулей; исполняемые ими функции
не будут для нас неожиданными, хотя могут встретиться новые
имена таблиц и программ. Несколько следующих страниц мы
посвятим описанию терминологии и обозначению программ,
связывая отдельные компоненты операционной системы OS/MFT
с общими функциями операционных систем, описанных в гл. 5, 6
и 10.
Общая область
Рис. 13.3. Спулинг и классы заданий.
После того как важнейшие модули будут определены и
описаны, мы рассмотрим взаимодействие составленной из них
операционной системы с двумя прикладными программами,
прослеживая длящийся в течение нескольких секунд период реального
функционирования системы.
Задания и задачи
Для программиста, проверяющего и тестирующего некоторую
программу, процедуры компиляции и редактирования связей в
составе задания не представляют большого интереса — ему
нужны только листинг задания и результаты выполнения
программы, — тогда как цикл вычислений самой вычислительной
машины для выполнения этого довольно простого задания включает
248 Глава 13
три отчетливо различимых шага: шаг компиляции,
использующий в качестве входных данных исходную колоду карт
программы и формирующий выходные данные в виде объектного модуля;
шаг редактирования связей, преобразующий колоду объектного
модуля в загрузочный модуль, и третий шаг — считывание в
память загрузочного модуля и его исполнение. Программисту
представляется целое задание, вычислительная машина имеет дело с
тремя шагами задания или задачами.
Модули операционной системы, обеспечивающие ввод задания
в машину, функции загрузки и запуск подпрограмм,
запрашиваемых отдельными шагами задания (карты EXEC), объединяются
под общим названием «управление заданиями». После загрузки
программы в память ее исполнение обеспечивается
программными модулями операционной системы, составляющими
«управление задачами» и связанными прежде всего с обработкой
прерываний. После завершения программы вновь активизируются функции
управления заданиями, обеспечивающие «стирание» следов
завершенной программы и подготовку раздела для новой программы»
Повторим эти действия еще раз шаг за шагом, следуя блок-
схеме, представленной на рис. 13.4; в нашем примере мы
используем задание, включающее компиляцию, редактирование связей
и исполнение программы. Прежде всего модулем управления
заданиями исходная колода карт считывается и записывается в
процессе спулинга в дисковый файл. Спустя некоторое время, когда
выясняется, что раздел памяти свободен, другим модулем
управления заданиями считывается первая карта EXEC потока задания
и выполняется загрузка и запуск компилирующей программы.
Если в процессе выполнения компилятору потребуется помощь
операционной системы (например, обращение к супервизору с
запросом об операции ввода — вывода), она обеспечивается
модулями управления задачами. Последнее действие, исполняемое
компилятором, состоит в записи на диск объектного модуля
(конечно, не без помощи со стороны модуля управления задачами),
после чего снова активизируются модули управления заданиями,
и происходит стирание всех следов отработавшей в данном
разделе программы. Теперь модулями управления заданиями может
быть выполнена загрузка и запуск редактора связей, который (с
помощью программ управления задачами) считывает объектный
модуль, формирует загрузочный модуль и, снова не без помощи
модулей управления задачами, записывает его на диск. Далее
модулями управления заданиями стираются следы отработавшей
программы, считывается в память загрузочный модуль и
инициируется его исполнение. В процессе выполнения прикладной
программы различные прерывания обрабатываются модулями
управления задачами. По ее завершении действиями модулей
управления заданием заканчивается выполнение задания.
Исходная
колода
4~*
библиотека
/
/
/
/
4
/
/
/
/
( Начало j
Упрабление
заданиями
/
Упрабление
заданиями
(спустя
некоторое бремя)
Компилятор
I
Упрабление
заданиями
Редактор
сбязей
I
Упрабление
заданиями
I
Прикладная
программа
I
Упрабление
заданиями
1
Исходный
модуль
Одъект-
ный
модуль
Загрузочный
модуль
—►Г Конец J
Рис. 13.4. Управление заданиями и управление задачами.
250
Глава 13
Рассмотрим подробнее модули операционной системы^
входящие в состав управления заданиями и задачами.
Управление заданиями. Главный планировщик
Какое из заданий или, точнее, какой из шагов задания получит
управление в следующий момент времени? Этот вопрос решается
подпрограммой главного планировщика (рис. 13.5).
Прохождение заданий в основном планируется в соответствии с заранее
Гладный
планиробщик
Внешнее
прерывание
Раздел программ класса А
Раздел программ классовВиС
Общая область
Рис. 13.5. Главный планировщик.
установленным правилом (типа «первый в очереди загружается
первым») или их приоритетами; иногда желательно
вмешательство оператора. Оператор может связаться с подпрограммой
главного планировщика; таким образом, он может изменить
стандартную схему действий системы, приписывая более высокий
приоритет «горящему» заданию или выводя из состояния счета
то задание, программа которого либо «зациклилась», либо выдает
неприемлемые промежуточные результаты. Как вы, наверное,
помните, в системах фирмы IBM пульт оператора связывается с
вычислительной машиной механизмом прерывания; после того
как программа обработки прерываний опознает конкретную
причину прерывания командой безусловного перехода, управление
просто передается в программу главного планировщика.
Управление заданиями. Ридер — интерпретатор
Ридер — интерпретатор в соответствии со своим названием
обеспечивает чтение потоков заданий и размещение их в очереди
заданий своего класса (рис. 13.6). После того как задание считано,
проверяется правильность написания входящих в него команд
Пульт
оператора
\
Операционная система OS/MFT 251
управления заданиями, и если в них обнаруживается ошибка,
то обработка задания завершается. Поток задания пополняется
каталогизированными процедурами. Формируется и
контролируется ряд размещаемых в памяти таблиц, содержащих перечни
программ, упорядоченных по классам, а в пределах класса — по
приоритетам. Поскольку информация о вводе данных с карт
входит в состав потока задания, то обращение к системному
устройству ввода (SYSIN) относится к функциям этого модуля
управления заданиями.
Рис. 13.6. Ридер — интерпретатор.
Управление заданиями. Инициатор — терминатор
Как только некоторый раздел памяти становится доступным,
программа-инициатор из очереди заданий, соответствующих классу
данного раздела, выбирает следующий шаг задания, который
затем считывается в память и запускается в счет. В системе
OS/MFT для каждого раздела предусматривается свой
инициатор — терминатор. Аналогично программе управления
заданиями в DOS, инициатор — терминатор является замещаемым
модулем, считываемым в раздел прикладной программы при смене
шагов задания. Компонент терминатора этого модуля, как вы,
вероятно, уже догадались, выполняет действия по стиранию
следов завершенного шага задания.
Когда оператор устанавливает параметры разделов, он
указывает класс или классы заданий, которые могут выполняться в
252
Глава 13
данном разделе; инициатор — терминатор данного раздела
работает только с очередью или очередями заданий соответствующих
классов. После того как инициатор записал в память очередной
шаг задания и запустил его в счет, функции операционной
системы на время исполнения этого шага передаются модулям
управления задачами. Терминатор активизируется в момент
завершения шага задания.
Инициатор-терминатор раздела заданий классаА+х*
«-■'
Инициатор-терминатор раздела задании классовВиС+< <*
Очередь
заданий
масса
А
'у
Очередь
заданий
класса
С
Очередь
заданий
класса
В
Функции: Загрузка и запуск шагоЬ задания.
Подеотобка раздела к приему следующего шага.
Рис. 13.7. Инициатор — терминатор.
Функции: Загрузка и запуск
шагов задания. Подготовка раздела к приему следующего шага.
Итак, модуль ридера имеет дело с целым заданием, считывая
все входящие в его состав карты и формируя очереди заданий,
тогда как для инициатора — терминатора основными
обрабатываемыми элементами являются шаги задания (карта EXEC), при
этом последовательно выбираются отдельные шаги задания из
соответствующей классу задания очереди, осуществляется их
загрузка в память и исполнение, после чего раздел очищается от
следов завершенного шага задания. Функции инициатора —
терминатора показаны на рис. 13.7.
Управление заданиями. Райтер
Помните спулинг? Прикладные программы обычно не пользуются
прямым обращением к таким медлительным выходным
устройствам, как печатающее или устройство перфорации карт; вместо
этого выходные данные пересылаются на более быстрые
запоминающие устройства типа диска или магнитной ленты, откуда не-
Операционная система OS/MFT
253
Выходные
данныена
системном
устрой
с/лбе
•
Рай/пер
~х
\
Документы
Рис. 13.8. Райтер.
сколько позже они передаются для печати или перфорации.
Райтер обеспечивает передачу данных из системных выводных
устройств на соответствующий внешний носитель (рис. 13.8).
Управление заданиями. Краткие выводы
Управление заданиями связано с начальными и конечными
операциями. Программы управления заданиями обеспечивают ввод
задания, запись его на системном устройстве, планирование его
исполнения, загрузку (последовательными шагами задания) и
запуск в счет. Как только начинается независимое исполнение
отдельного шага задания, управление заданиями прерывается;
все необходимое обеспечение со стороны операционной системы
реализуется модулями управления задачами. После завершения
исполнения прикладной программы вновь активизируются
функции управления заданиями, связанные, в частности, с
подготовкой раздела для следующего шага задания.
Управление задачами
Функция модулей управления задачами состоит в обеспечении
потребностей прикладной программы в процессе ее исполнения.
Программа управления задачами начинает работу в результате
прерывания. Прерывание по обращению к супервизору
позволяет прикладной программе с помощью команды SVC
связываться с одним из модулей операционной системы, управляющим
началом операций ввода или вывода. Прерывание ввода —
вывода позволяет активизировать канал, который может управлять
операциями ввода — вывода без помощи основной машины, ос-
254
Глава 13
вобождая ее, таким образом, для решения других задач; когда
операция завершена, канал сообщает об этом, посылая сигнал в
CPU. Программные прерывания и прерывания от таймера
обрабатываются соответственно обработчиком программных
прерываний и обработчиком внешних прерываний. Программы
защищаются от машинных сбоев модулем обработки прерываний от
схем контроля машины.
Упомянутые выше прерывания мы уже рассматривали в гл. 11.
Программы обработки всех видов прерываний обеспечивают в
совокупности управление задачами. Модули управления
задачами получают возможность контролировать действия ЭВМ в
результате прерывания; выполнив необходимые функции,
программа управления задачами возвращает управление CPU исходной
программе или — в случае программного прерывания,
прерывания от таймера или нормального окончания программы —
модулю управления заданиями.
Прерывания, если вы помните, реализуются переключением
слов состояния программы; при этом содержимое поля старого
PSW обеспечивает связь с исходной программой. Для каждого
из пяти типов прерываний существует только одно поле старого
PSW. Когда программа оказывается в состоянии ожидания, —*
например, после обращения по команде «Начать ввод — вывод»,—
эта связывающая информация должна быть возвращена из
очереди PSW и сохранена где-нибудь в другой зоне памяти; если этого
не сделать и передать управление другой программе, то
информация о связи с исходной программой может быть утрачена при
возникновении следующего прерывания того же типа. Такого рода
действия обеспечивают модули управления задачами
(соответствующий механизм будет рассмотрен несколько ниже).
Управление состоянием программы является функцией модулей
управления задачами.
Объединение в систему —
основные блоки управления OS/MFT
Для исполнения одного шага задания необходимо
координировать работу нескольких подпрограмм управления заданиями,
управления задачами и исполнение прикладной программы.
Каким образом добиться того, чтобы эти различные подпрограммы
и модули работали согласованно? Работа отдельных подпрограмм
согласуется и кооординируется с помощью ряда управляющих
блоков и указателей.
Ключом в поиске наиболее важных системных управляющих
. блоков и указателей является таблица вектора связей, или CVT
(рис. 13.9). CVT — это, по существу, таблица адресов; она
содержит адреса большей части важнейших блоков управления. Сама
Операционная система OS/MFT
255
«о1
t] (Байтовый адрес 1В)
CVT
Рис. 13.9. Таблица векторов связей.
таблица вектора связей может быть найдена по адресу, который
хранится в поле третьего двойного слова основной памяти — поле
с байтовым адресом 16; это, как вы, вероятно, помните из гл. 11,
одно из системных полей памяти постоянного назначения. Ранее
это поле отводилось под слово канала GGW 2 в связи с начальной
загрузкой программы; после выполнения начальной загрузки
программы это поле освобождается и в нем размещается адрес
CVT.
Системные функции в границах одного раздела
координируются блоком управления задачей, или ТСВ. Для каждого раздела
вводится один ТСВ (рис. 13.10). В таблице векторов связей
хранится адрес первого ТСВ, в котором содержится адрес второго
ТСВ (рис. 13.10), — такая конструкция называется очередью
ТСВ. В системе, использующей больше двух разделов, CVT
указывает на адрес первого ТСВ, снабженного указателем на адрес
&
CVT
э
Раздел заданий класса А
Т
Раздел заданий массоб ВиС
Рис. 13.10. Очередь блоков управления задачами.
256
Глава IS
Указатель CVT
(байтодый
адрес 1В)
3
Рис. 13.11. Очередь блоков запроса.
второго ТСВ, который в свою сгчередь имеет указатель на третий
ТСВ и т. д. Если две (или больше) программы оказываются
одновременно готовыми к счету, возникает вопрос: какая из них
первой должна получить управление? Ответ: та, которая
соответствует первому элементу очереди ТСВ. Так как в нашем
примере блок управления задачей раздела заданий класса А
является первым в очереди, то задания класса А имеют более высокий
приоритет процессорной обработки по сравнению с заданиями
классов В или С.
Содержание данного раздела фиксируется в ряде «блоков
запроса», связанных с блоком управления задачей (рис. 13.11),
Присутствие в памяти раздела активной программы указывается
блоком запроса программы, или PRB. Если в границах данного
раздела обрабатывается прерывание по обращению к
супервизору, то об этом свидетельствует присутствие в памяти блока
запроса супервизора, или SVRB. В случае простой программы,
включающей чтение карт, обработку данных и печать строки
выходных данных, использующей системное устройство ввода —
вывода, довольно естественно одновременное присутствие всего трех
активных блоков запроса: PRB, указывающего на присутствие
V
Операционная система OS/MFT
257
активной программы и двух SVRB, указывающих на
использование методов доступа в процессе блокирования и
деблокирования физических записей.
Блоки запроса определяют активные модули, исполняемые в
данном разделе; если очередь блоков запроса пуста, то пуст и
соответствующий раздел. Одна из специальных функций
терминатора состоит в том, чтобы после завершения задачи стереть
соответствующие ей блоки запроса. Программа управления
заданиями опознает пустой раздел по блоку управления задачей, с
которым не связано ни одного блока запроса.
Пример
Чтобы лучше понять назначение вышеупомянутых блоков
управления и указателей, проследим их использование в течение
нескольких секунд машинного времени. В нашем примере
применяется та же самая вычислительная система с двумя разделами,
которая была описана в данной главе ранее: емкостью 90К для
заданий класса А и разделом емкостью 130К для заданий классов
В и С. GVT указывает адрес блока управления задачей класса А
(рис. 13.12), присваивая заданию этого класса более высокий
приоритет процессорной обработки. В начале описания нашего
примера оба раздела пусты (отсутствуют блоки запроса), но в
процессе спулинга несколько программ уже составили (на диске)
очереди классов заданий. В начале описываемого процесса
управление CPU передано программе главного планировщика (рис.
13.12).
Программа главного планировщика пытается запустить
какой-нибудь процесс. Если нет команд от оператора, то
программа главного планировщика начинает поиск пустого раздела.
Таблица векторов связей находится по содержимому поля, зани-
Старое
JjcL
I
PSW
«о
Старое
Ext
СтароеХСтарое
SVC 1 Рот
rich
CSW
Навое
Ext
Новое
SVC
Новое
Новое
ПСН
Новое
Главный
планировщик
Ридер-
интерпретатор
Райтер
Соглашения
о регистрах
OPEN
Обработчик
прерываний от
схем контрам
машины
CLOSE
Обработчик
внешних
прерываний
Обработчик
SVC-
прерываний
Обработчик
программных
прерываний
Обработчик
прерываний
Проч.
Инициатор-терминатор раздела заданий класса А (транзитный модуль)
Рис. 13.12. Исходное состояние системы в рассматриваемом примере.
9-821
258
Глава 13
мающему шестнадцатый байтовый адрес памяти; CVT указывает
на первый блок управления задачей (в классе А). Раздел,
управляемый этим ТСВ, свободен; активные блоки запроса
отсутствуют. Таким образом, главный планировщик вызывает загрузку
модуля управления заданием — инициатора — терминатора — в
рассматриваемый раздел памяти и передает ему управление.
PSW
\
\
с
ТСВ
А
PRB
:
!
~\
J
кИнициатор-терминатор раздела заданий класса А ;
iepedu
Рис. 13.13. Управление инициатора — терминатора.
Инициатор —терминатор (рис. 13.13) формирует блок запроса
программы и связывает его с ТСВ раздела заданий класса А.
Считываемое задание выбирается из очереди класса А и
загружается в рассматриваемый раздел (для простоты мы не будем
учитывать временную задержку между процессами чтения
инициатора — терминатора и шага задания и предположим, что они
происходят мгновенно). Последней исполняемой командой программы-
инициатора является передача управления в точку входа
прикладной программы.
Рис. 13.14. Управление прикладной программы.
Операционная система OS/MFT
259
После выполнения нескольких команд прикладной программе
требуются некоторые данные, поэтому в ней встречается команда
обращения к супервизору (рис. 13.14), что вызывает прерывание
по SVC и передачу управления в модуль обработки прерываний
этого типа, входящий в состав управления задачами.
Работа этого модуля управления задачами начинается
внесением блока запроса супервизора (SVRB) в очередь блоков
запроса, что указывает на функциональное обеспечение этого
раздела активным модулем операционной системы (рис. 13.15).
Обычным образом начинается операция ввода, включающая опрос
г
PSW
\Г *
Л
Старое
SVC
""* "V •гГ" *"* **.
csw
3
V2i ^^
SVC-прерыбание
SIO
CVT
ТСб
А
>С
N^
PRB
PSW
Новое
SVC
4» X^
. l
ижиоанис ,
SVRB
. Канальные
программы
J \
\
\
\
Рис. 13.15. Активизируется обработчик SVC-прерываний.
адресного слова канала, поиск канальной программы и
исполнение команды «Начать ввод —вывод». Затем программа ожидает
сообщения о состоянии канала, посылаемого в одно из полей
слова состояния канала. Если признак состояния канала
оказывается положительным, дальнейшие действия, связанные с
физическим вводом, управляются каналом, а исходная программа
переводится в состояние ожидания; это изменение в состоянии
программы реализуется обработчиком SVC-прерываний, которым
вписывается соответствующее значение бита (бита 14) в поле старого
PSW прерываний по SVG. Содержимое старого PSW копируется в
некотором двойном слове блока запроса программы, а командой
перехода управление возвращается программе главного
планировщика.
Программа главного планировщика вновь пытается начать
какой-нибудь процесс. Если нет специальных команд от
оператора, то начинается поиск либо свободного раздела, либо
программы, находящейся в состоянии готовности к счету. Снова поиск
начинается обращением к таблице CVT, указывающей адрес
9*
и
260
Глава IS
ТСВ раздела заданий класса А. Присутствие блоков запроса
указывает на то, что этот раздел занят; быстрая проверка поля PSW
в блоке запроса программы позволяет установить, что программа
находится в состоянии ожидания (рис. 13.16). В ТСВ содержится
указатель адреса следующего блока управления задачей,
входящего в очередь ТСВ; поскольку в первом разделе делать нечего,
главный планировщик переходит к следующему.
to1
Главный
планиродщик
С
CVT
PRB
PSW
Ожидание
Рис. 13.16. Снова управление главного планировщика.
Так как со вторым ТСВ не связано никаких запросов, то
главному планировщику «известно», что рассматриваемый раздел
пуст. В память загружается программа инициатора
—терминатора этого раздела (рис. 13.17), которая в свою очередь
загружает и запускает в счет задачу, или шаг задания очереди заданий
класса В. Чтобы отметить присутствие в данном разделе активной
программы, модулем инициатора —терминатора формируется
Инициатор-терминатор раздела заданий классов В и С
Рис. 13.17. Инициатор — терминатор класса В.
Операционная система OS/MFT 261
блок запроса программы (PRB), как показано на рис. 13.18.
Соответствующее состоянию рис. 13.18 содержимое поля PSW
указывает на то, что управление CPU связано с прикладной
программой второго раздела.
Неожиданно происходит прерывание ввода —вывода,
связанное с окончанием операции ввода, запрошенной ранее
программой класса А; в результате смены PSW управление передается
обработчику прерываний ввода —вывода, входящему в состав
управления задачами (рис. 13.19). Поле старого PSW прерываний
PSW —\
Программа масса В *
/
ТСВ
в
/
PRB.
3
»
Рис. 13.18. Начало исполнения второй прикладной программы.
ввода —вывода, как мы помним, все еще указывает адрес
команды в программе класса В, и эта программа находится в состоянии
готовности к счету; тем не менее старое PSW копируется в блоке
PRB. Обработчик прерываний идентифицирует программу,
связанную с обрабатываемым прерыванием, — программу А — и,
следуя по цепочке CVT—ТСВ—PR В, находит поле слова самого
последнего состояния этой программы и изменяет значение 14-го
бита, переводя программу в состояние готовности к счету
(рис. 13.20). Управление вновь передается программе главного
планировщика, которая начинает свой обычный просмотр очереди
блоков ТСВ. Обнаружив, что самое последнее PSW программы
класса А содержит указание о ее готовности, главный
планировщик пересылает это PSW из блока запроса программы в поле
текущего PSW (снова рис. 13.20), передавая, таким образом,
управление программе класса А. Обратите внимание на то, что
названные выше действия в данном разделе все еще осуществляются
с помощью модуля обращения к супервизору (блок SVRB
находится в очереди блоков запроса). Для выполнения этой
конкретной операции ввода — вывода используется стандартный
очередной метод доступа; несколько необработанных логических
записей остается в буфере.
262
Глава 13
PSW
v.
Программа класса А
Программа класса В
Старое
I/O
CSW
Нобое
I/O
It
S v
[}реры8ание
МО
Готобность
Рис. 13.19. Возникает прерывание ввода — вывода.
f>sw
<&
Старое]
I/O 1
ЧЬ>
\
\
\я
тсв
А
ч
4-
PRB
SVRB
ТСВ
В
/
PRB
Готовность
Программа масса А
Программа масса В
Рис. 13.20. Задача класса В по-прежнему готова к счету, однако управление
получает задача класса А.
Рис. 13.21. SVC-прерывание возвращает систему к управлению задачами.
Операционная система OS/MFT 263
Спустя некоторое время, выполнив несколько команд,
программа класса А оказывается в точке, где необходимо передать данные
печатающему устройству, и, таким образом, возникает
прерывание по обращению к SVG. В результате управление передается
обработчику прерываний по SVG (рис. 13.21), который формирует
новый блок SVRB, запускает операцию вывода, посылает в
14 бит старого PSW прерываний по SVG признак состояния
ожидания, копирует поле этого PSW в блоке запроса программы
раздела класса А и передает управление главному планировщику
(рис. 13.22).
Главный планировщик вновь приступает к просмотру очереди
блоков ТСВ, пытаясь начать какой-нибудь процесс. Программа
первого раздела находится в состоянии ожидания, поэтому
главный планировщик обращается к разделу класса В. Обнаружив,
что программа этого раздела находится в состоянии готовности к
счету, главный планировщик пересылает в поле текущего PSW
слово состояния программы, хранящееся в блоке запроса
программы, передавая, таким образом, управление программе
класса В (рис. 13.23).
Через некоторое время программа класса В обращается к
супервизору для ввода данных. Модулем управления задачами —
именно обработчиком SVC-прерываний (рис. 13.24)—формируется
блок SVRB, запускается операция ввода, в старое PSW
прерываний по SVG вносится признак состояния ожидания, и, наконец,
это старое PSW пересылается в блок PR В класса В. Затем вновь
управление возвращается в программу главного планировщика
(рис. 13.25).
Прослеживая цепочку, включающую CVT, очередь блоков
ТСВ и очередь блоков RB, программа главного планировщика
выясняет, что оба раздела памяти активны и что в обоих
содержатся программы, находящиеся в состоянии ожидания. Так как
нет других готовых к счету прикладных программ, то управление
передается ридеру —интерпретатору, соответствующему уровню
управления заданиями (рис. 13.26), которым инициируются
операции спулинга с пересылкой еще одной карты с устройства
чтения карт на системный диск, после чего управление возвращается
программе главного планировщика (рис. 13.27). Оба раздела
по-прежнему заняты и находятся в состоянии ожидания. И
последнее, что можно сделать в создавшейся ситуации, — передать
управление райтеру (рис. 13.28), который запускает операцию
вывода, пересылая одну запись с системного выходного
устройства в печатающее устройство и снова возвращая управление
программе главного планировщика (рис. 13.29). Теперь все
программы находятся в состоянии ожидания, поэтому при четырех
ожидающих прерываниях ввода — вывода системе нечем
заняться (рис. 13.30).
264
Глава 13
Б
Копирование
PSW
Главный
планировщик
£_
CVT
SVRB
г
ТСВ
А
PRB #
Ожидание
SVRB
)
Л
тсв
в
/
prb | ;
Готовность
Программа масса А
Программа класса В
Рис. 13.22. Главный планировщик.
G
ТСВ
В
/
PRB
}
Программа масса В
Рис. 13.23. Вновь управление получает задача класса В.
PSW
Старое
SVC
CSW
Новое
SVC
%
V
SVC-
прерыбание
Ъс
'G&
*Ь
Ч> \
ч
ч.
ч
\
TGB
В
йС
PRB
Ожидание
SVRB
Программа масса А
Программа класса В
Рпс 13.24. Выдается обращение к супервизору SVC.
Операционная система OS/MFT
265
&
PSW
Главный
планировщик
Г
CVT
SVRB
ТСВ
А
\
PRB
Ожидание
SVRB
ТСВ
В
)
Г
PRB
Ожидание
SVRB
)
к.
У
Программа класса А
Программа класса В
Рис. 13.25. И снова программа главного планировщика.
csw:
Ридер
Рис. 13.26. Управление заданиями. Ридер — интерпретатор.
Рис. 13.27. Снова программа главного планировщика
266
Глава 13
PSW
_^^
|
С5И/
1
Райтер
Рис. 13.28. Управление заданием. Райтер.
PSW
Главный
планирабщик
С
CVT
SVRB
Ы PRB I 1
Отдание
V.
SVRB^
Рис. 13.29. Вновь управление передано главному планировщику.
щг
Отдание
Рис. 23.30. Вся система в состоянии ожидания.
Операционная система OS/MFT
267
PSW
СтараеКШ
I/O ^
Ожидание
CSW
WoefSW
I/O
ТСВ
А
PRB
Прерывание
I/O
PSW
Готовность
X
SVRB
b
Программа класса А
Программа класса В
Рис. 13.31. Возникает прерывание ввода — вывода.
Пересылка из PUB с помощью программ главного планировщика; шаг задания
не показан
Программа класса А
Программа класса В
Рис. 13.32. Возобновляется счет программы класса А.
*
PSW
1
_^^ -*
I
Программа масса А
Crapoers*
програнп
прерыбан
N
Программное
прерывание
\
\
\
\
твое PS*'
прогрет
прерыйан
.
\
\
\
\
\
^
Программа масса В
i
Рис. 13.33. Но вскоре обнаруживается программная ошибка
268
Глава 13
Наконец, происходит прерывание ввода —вывода,
вызывающее исполнение подпрограммы управления задачами (рис. 13.31);
это прерывание связано с программой А, поэтому 14-й бит поля
PSW блока запроса этой программы устанавливается в
состояние, отвечающее готовности к счету. Предположим, что в данном
случае выходные данные пересылались с фактором блокирования,
равным единице, что означает завершение всех функций,
связанных с соответствующим обращением к супервизору; блок SVRB
удаляется из очереди блоков запроса, PSW блока запроса
программы занимает место текущего PSW, и программа А вновь
получает управление (рис. 13.32).
PSW
St
ill
тсв
в
с
PRB
-н>
SVRB •
Инициатор-терминатор масса А
Рис. 13.34. Модуль терминатора подготавливает раздел для приема
следующей программы.
тсв
в
(.
PRB
SVRB
Рис. 13.35. Мы завершаем рассмотрение системы в тот момент, когда
главный планировщик готов к запуску новой программы класса А.
Операционная система OS/MFT 269
Однако не надолго — в двух командах этой программы
встречается деление на нуль; возникающее по этой причине
программное прерывание вызывает передачу управления снова в модуль
управления задачами (рис. 13.33). Обработчик программных
прерываний подготавливает некоторый массив выходных данных
и передает управление программе-терминатору данного раздела.
Терминатор стирает все блоки запроса, и вновь управление
передается программе главного планировщика (рис. 13.34). Этот
модуль управления заданиями повторяет свою извечную процедуру
поиска программы, которую следует инициировать к счету.
Следуя цепочке GVT—TGB, по отсутствию блоков запроса он
обнаруживает, что первый раздел свободен (рис. 13.35). В связи с этим
терминатор передает управление программе инициатора —
терминатора раздела класса А.
Краткие выводы к нашему примеру
В этом примере мы проследили изменение слова состояния
программы и других указателей в течение нескольких секунд
функционирования мультипрограммной системы. Попытаемся теперь
» связать некоторые из рассмотренных ситуаций с общими
функциями операционной системы, которые обсуждались в
предыдущих главах.
Планирование способствует более полному использованию
всех системных ресурсов за счет минимизации временных
задержек, связанных с необходимыми подготовительными
операциями по установке томов, перфокарт и т. д. Объединение
сходных заданий в одну группу является одним из важнейших
компонентов в реализации любой системы планирования; в OS/MFT
эта функция осуществляется модулем ридера —интерпретатора,
входящим в состав программ управления заданиями.
Указываемый программистом в карте JOB параметр класса задания
определяет многие из важнейших характеристик задания; после того
как в результате спулинга задание внесено в очередь своего
класса, оно становится объектом планирования, реализуемого
программой главного планировщика — еще одного модуля
управления заданиями.
Как было отмечено ранее, в системе мультипрограммирования
может возникнуть проблема определения приоритетов
процессорной обработки заданий, а именно: если две или большее число
программ оказываются одновременно готовыми к счету, то какая
из них должна первой получить управление? Решение этой
проблемы также относится к функциям главного планировщика, при
этом используется весьма простой алгоритм, следуя которому
эта программа просматривает цепочку GVT—TGB в заданном
порядке и отыскивает первую готовую к счету программу.
270 Глава 13
т
Защита регистров (программы, оказавшиеся в состоянии
ожидания, при возобновлении счета должны получать управление
вместе с прежними значениями регистров) реализуется в форме
стандартных соглашений о регистрах. Хотя мы не упоминали
соглашений о регистрах в нашем примере, они учитываются в
каждом модуле операционной системы. Как в блоке управления
задачей, так и в блоке запроса супервизора предусматривается место
для хранения значений регистров.
Процедуры спулинга дают по крайней мере частичное решение
проблемы, связанной с несоизмеримостью быстродействия ЭВМ
и производительности устройств ввода — вывода; в OS/MFT
процедуры спулинга управляются модулями чтения заданий (риде-
ром) и программой системного вывода (райтером). Благодаря
высокому быстродействию в машинах третьего поколения спу-
линг может осуществляться в режиме on-line, т. е. с участием
CPU; при этом обе функции спулинга инициируются центральным
процессором в те периоды, когда последний свободен от
обработки других прикладных программ.
Использование каналов значительно снижает влияние
медленных операций ввода — вывода на работу системы; по существу
канал берет на себя все управление физическими операциями«
ввода —вывода, освобождая CPU во время работы канала для
решения других задач. Управление задачами связывает канал с
основной машиной, обрабатывая запрос на начало канальной
операции, отмечаемой прерыванием по обращению к
супервизору, и отслеживая появление прерываний ввода —вывода,
сигнализирующих об окончании в канале запрошенной операции.
Модулями управления задачами обрабатываются также
программные прерывания. Функции защиты памяти не были
рассмотрены в нашем примере. Они возложены на центральный
процессор и состоят в проверке того, что адрес хранения и адрес
записи анализируемой команды (например, команды MOVE)
принадлежат одному и тому же разделу, т. е. имеют тот же самый
ключ защиты (помните поле ключа защиты в PSW?). Если они
не совпадают, то следует программное прерывание —функция,
реализуемая модулями управления задачами. Прерывание от
таймера — средство защиты от бесконечных циклов — относится
к внешним прерываниям и обрабатывается одним из модулей
управления задачами. Вмешательство оператора, посылающего
команду с операторского пульта, также вызывает внешнее
прерывание с передачей управления в программу главного
планировщика, входящего в состав управления заданиями.
Решение проблемы, возникающей вследствие одновременного
запроса двумя или большим числом программ одного итого же
устройства ввода или вывода, относится к функциям управления
заданиями; два задания, запрашивающие одно и то же лентопро-
Операционная система OS/MFT 271
тяжное устройство, попросту не загружаются в память
одновременно. Конкретная процедура, реализующая такого рода
управление, будет рассмотрена несколько ниже. Управление данными
составляет еще одну тему, к которой мы вскоре обратимся.
Выражаясь кратко, OS/MFT представляет собой не что иное, как
совокупность программ, программных модулей и стандартных
подпрограмм, предназначенных для реализации функций,
осуществляемых операционной системой мультипрограммирования
в машинах фирмы IBM семейств Системы/360 или Системы/370.
Наименования модулей и структура различных блоков
управления и указателей специфически свойственны OS/MFT, однако
реализуемые с их помощью функции являются общими для всех
операционных систем мультипрограммирования.
Управление вводом — выводом в системе OS/MFT
В системе последовательной пакетной обработки управляемая в
данный момент программа имеет доступ к любому из устройств
ввода —вывода. Как только мы переходим к системе
мультипрограммирования, конфликты становятся неизбежными. Эти
конфликты разрешаются уже рассмотренными выше программами
управления задачами и заданиями. Для реализации управляющих
функций, связанных с работой устройств ввода —вывода,
операционная система формирует несколько специальных блоков
управления и указателей; ниже будут рассмотрены важнейшие
из них.
Управление вводом — выводом.
Блок управления устройством
Если операционная система должна управлять распределением и
планированием действий устройств ввода и вывода, то вполне
естественно иметь перечень всех доступных устройств; такой
перечень составляется из блоков управления устройством (UCB),
образуя, если выражаться точнее, цепочку блоков UGB
(рис. 13.36). В системе OS/MFT каждому устройству,
подключенному к машине, сопоставлен свой блок управления устройством.
Каждый блок UGB содержит такую информацию, как адрес
канала и устройства, тип устройства (2314, 3330, 1403 и т. д.) и
другие поля различного смысла и состояния. Такая таблица
формируется во время генерации системы. Существует свой блок UCB
для каждого из устройств ввода —вывода, подключенного к
системе; устройства, не имеющего блока управления устройством,
для системы не существует.
После ввода задания, выполненного ридером
—интерпретатором, запрашиваемые с помощью карт DD устройства ввода — вы-
272 Глава IB
вода могут быть проверены по перечню блоков UCB; если
заданием запрашивается устройство, отсутствующее в системе (что
может быть связано с ошибкой в записи оператора JGL), то нет
смысла включать такое задание даже в процедуру спулинга.
Перед загрузкой задания или шага задания, готового к
исполнению, программа инициатора —терминатора может проверить
состояние блоков UCB, чтобы убедиться в доступности требуемых
устройств. Если определенному шагу задания, и только ему,.
Рис. 13.36. Блоки управления устройством.
требуется некоторое устройство, например лентопротяжное, то
недоступность этого устройства для других заданий может быть
отмечена в соответствующем блоке UCB, информируя тем самым
другие инициаторы —терминаторы (как вы помните, по одному
на каждый раздел), что шаг задания, запрашивающий «именно
это» устройство, не должен загружаться, оставаясь в течение
какого-то времени в состоянии ожидания. Управление заданиями
анализирует блок управления устройством, исключая
одновременное его использование двумя или большим числом заданий.
Управление вводом — выводом.
Таблица ввода — вывода задачи
Таблица ввода —вывода задачи (ТЮТ) формируется модулем
управления заданиями непосредственно перед загрузкой и
началом обработки шага задания или задачи; по существу это список
всех значений параметра DDNAME всех карт DD, входящих в
данный шаг задания. Кроме значений параметра DDNAME,
используется ряд указателей, позволяющих системе установить
значения всех остальных параметров, кодируемых в карте DD.
Схематически таблица ТЮТ представлена на рис. 13.37.
Операционная система OS/MFT 273
ML
GL
i
IVtA
7 <
_Имя
задания
L flm шаш
SYSfN
UCBADDR
S1SDUT
UCBADDR
TAPE
UCBADDR
Рис. 13.37. Таблица ввода — вывода задачи.
Управление вводом — выводом. DCB и DEB
Некоторые особенности блока управления данными мы уже
рассматривали. Он состоит из ряда констант, кодируемых в модуле
прикладной программы и описывающих такие факторы, как
используемый в данной операции ввода —вывода метод доступа,
длина логических записей и размер блоков, форматы записей,
параметры DDNAME карты JGL, соответствующие физическому
устройству, и другие характеристики данных. Для каждого
устройства, используемого данным шагом задания, необходим свой
блок управления данными.
Блок экстентов данных (DEB) является расширением блока
управления данными. Если блок DCB размещается в зоне памяти
прикладной программы и поэтому доступен для модификации и
управления, то блок DEB обычно прикладной программе
недоступен.
Управление вводом — выводом. Макрокоманда OPEN
Большинство программистов воспринимают макрокоманду
OPEN в негативном смысле. «Если я забуду ее написать, то моя
программа будет выведена из решения при первом же чтении».
В действительности макрокоманда OPEN выполняет куда более
полезные функции. Когда в программе встречается макрокоманда
OPEN, она указывает на готовность программы начать
выполнение операций ввода или вывода на определенном устройстве.
В прикладной программе макрокоманда OPEN принимает форму
команды обращения к супервизору, с которой связываются
некоторые константы и адреса, определяющие открываемый набор
данных (с помощью блока DGB); программист обычно отмечает
лишь слово OPEN, в особенности если он работает на языке вы-
274 Глава 13
сокого уровня, однако существуют и специальные указатели и
обращение к SVG. Командой обращения к супервизору
инициируется прерывание по обращению к SVC, и, таким образом,
операционная система уведомляется о намерениях программиста.
Из нашего обсуждения карты DD вы, вероятно, помните, что
не все параметры блока управления данными должны
кодироваться в программном блоке DGB; многие из них могут быть указаны
как значения параметра DCB в карте DD. В какой-то момент
времени эти подпараметры параметра DGB карты DD необходимо
переслать в программный блок управления данными; эти
действия выполняет макрокоманда OPEN. Вы, может быть, также
вспомните, что в карте DD можно вообще не указывать
параметров DCB, если упоминается уже описанный набор данных; это
возможно благодаря тому, что такая информация, как длина
логической записи, размер блока, формат записей и прочее, может
быть найдена по метке набора данных. Пересылка информации,
хранящейся в метке набора данных, в программный блок DGB —
еще одна функция макрокоманды OPEN.
Макрокоманда OPEN выполняется приблизительно
следующим образом. Во-первых, все нулевые параметры программного
блока управления данными (незаполненные поля кодируются как
нулевые) определяются по значению параметра DGB, связанной
с блоком карты DD. DDNAME является единственным
параметром, который должен обязательно присутствовать в программном
блоке DCB; таким образом, подпрограмма, реализующая
макрокоманду OPEN, располагает значением «ассоциированного»
DDNAME и может отыскать соответствующую карту DD в табли-
/// X DD
/// Y DD
/ПЪ DD
'
— 1
Программный
пев
/
2
У*~ (ПеткаЛ
Рис. 13.38. Программа OPEN формирует основные управляющие блоки,
необходимые для ввода —* вывода.
Операционная система OS/MFT 275
це ввода — вывода задачи, содержащей перечень всех значений
параметра DDNAME (а тем самым и всех карт DD), упоминаемых
в операторах JGL данного шага задания.
После внесения в блок DGB значений параметров, задаваемых
картой DD, программа OPEN просматривает метку набора
данных; на этот раз все поля блока DGB, имеющие нулевые значения,
могут быть доопределены по содержанию метки существующего
набора данных. (Кстати, при создании новых наборов данных их
метки формируются макрокомандой OPEN). После выполнения
макрокоманды OPEN основные блоки управления вводом
—выводом оказываются заполненными и обеспечиваю? выполнение
операции ввода или вывода (рис. 13.38).
Программа OPEN входит в состав управления задачами; она
получает управление CPU в результате прерывания по обращению
к супервизору. Программа OPEN обычно относится к числу
резидентных модулей операционной системы.
Управление вводом — выводом.
Связь прикладной и канальной программ
Реальные физические операции ввода —вывода, как мы уже
знаем, управляются каналом; необходимые команды канал
получает из канальной программы, состоящей из одного или группы
слов CCW. Отдельные канальные программы по очевидным (как
мы надеемся) причинам не относятся к тем средствам
математического обеспечения, которые может модифицировать или изменять
программист. Поэтому канальные программы хранятся либо в
области памяти, относящейся к операционной системе, либо входят
в состав подпрограмм метода доступа, включаемых в загрузочный
модуль редактором связей. Программист, конечно, должен иметь
какое-то средство управления операциями ввода —вывода; блок
управления данными хранится в разделе его программы и может
модифицироваться. Между этими объектами неообходимо
установить связь.
Мы уже упоминали, что блок экстентов данных, или DEB,
в основном представляет собой расширение блока управления
данными. Одна из функций, выполняемых блоком DEB, состоит в
обеспечении связи между блоком DGB (прикладной программы)
и управляющим блоком устройства, определяющим конкретное
устройство ввода или вывода, необходимое в данной операции
(рис. 13.39). Блок DGB и канальная программа связаны полями
другого управляющего блока —блока ввода —вывода, или IOB
(снова рис. 13.39); мы не рассматривали особенности этого блока
и не станем их рассматривать. Важно помнить то, что теперь мы
имеем полную цепочку связей между прикладной программой и
программой канала; программа, выдающая запрос на выполнение
276 Глава 13
исв
Область операционной системы;
ключ защиты-0000
L
DEB
^
Раздел прикладной программы
U
10В
4i
DCB
J
'
Канальная
программа
j
Прим&тние: канальная
программа также может
размещаться б
этом разделе.
Рис. 13.39. Блоки управления вводом — выводом.
операции ввода — вывода, и программа, с помощью которой
фактически выполняется запрашиваемая операция, оказываются
связанными.
Управление данными
Управление данными касается таких компонентов системы, как
методы доступа, библиотеки, каталоги и т. д. Все эти
концепции реализуются в системе OS/MFT.
Многие средства управления данными, в частности методы
доступа и буферизации, включаются в фактические загрузочные
модули редактором связей; тексты этих программ часто хранятся в
библиотеке устройства прямого доступа. Для упрощения доступа
к некоторым из важнейших библиотек —функция, которая в
карте DD обычно именуется идентификаторами JOBLIB (библиотека
задания) или STEPLIB (библиотека шага), — необходимая
информация запоминается в таблице векторов связи.
Идентификатором SYS1.LINKLIB (не что иное, как значение параметра
DSNAME) обозначается одна из таких библиотек, содержащая
программы, используемые редактором связей. Другая
библиотека, доступ к которой обеспечивается таблицей CVT, и
обозначаемая через SYS1.SVCLIB, содержит программу обращения к
супервизору и другие программы операционной системы, не
входящие в состав резидентных модулей.
SYSIN и SYSOUT—системные устройства ввода и вывода —
относятся к управлению данными. Два набора данных,
обозначаемые теми же идентификаторами, могут служить замечатель-
\
Операционная система OS/MFT 277
ной иллюстрацией тех трудностей, которые возникают при
определении независимых категорий функций. Данные пересылаются
в системное устройство ввода программой управления заданиями.
£1 этого устройства они считываются в память средствами
управления задачами. И в то же время системное устройство ввода
относится к управлению данными. Непосредственная связь
различных компонентов операционной системы является скорее
правилом, чем исключением.
Размещение системы
Операционная система OS/MFT имеет три различные области.
В первой из них размещается резидентная часть операционной
системы —те из ее программ, которые всегда хранятся в основной
памяти; эта часть называется ядром и занимает младшие адреса
памяти, т. е. от нулевого байта до некоторого заданного байтового
адреса. Вторая область содержит необходимые операционной
системе управляющие блоки; они составляют область очередей
системы (рис. 13.40), следующей за областью ядра. Третий
компонент операционной системы состоит из тех ее модулей, которые
хранятся не в основной памяти, а составляют файл прямого
доступа (SYSl.SYGLrB) и считываются с системного диска в память
по мере необходимости. Часть основной памяти, отведенная для
хранения такого рода транзитных модулей, называется общей
областью (снова рис. 13.40). Все остальное называется
динамической областью', эта часть основной памяти предоставляется для
размещения прикладных программ.
PSW
.
Ядра
Область очередей системы
Динамическая область
Общая область
Рис. 13.40. Размещение компонентов системы OS/MFT.
278 Глава 13
Генерация и гибкость системы
Какие модули операционной системы следует включить в ядро?
В одном из возможных ответов — «все» — придается большое
значение неизбежным временным издержкам, связанным с
пересылкой модулей из устройств прямого доступа в основную память.
К сожалению, модули операционной системы, как и любые
программы, занимают место, и, чем больше памяти отводится под
модули операционной системы, тем меньше ее остается для
использования прикладными программами. Вычислительные машины
нужны не для того, чтобы «прогонять» в них эффективные
операционные системы, а для исполнения прикладных программ;
функции же операционной системы носят вспомогательный характер.
Другое крайнее решение состоит в том, чтобы хранить
большую часть модулей операционной системы на диске или барабане,
считывая их по мере необходимости в память; при таком выборе
решения высвобождается основная память, однако временные
издержки, связанные с обращением к устройству прямого доступа
при вызове нужного модуля операционной системы, снижают ее
эффективность. В некоторых малых машинах, использующих
дисковую операционную систему, именно так и поступают, однако
в случае большой быстродействующей машины это решение
неприемлемо.
«Лучшее» следует искать где-то «между» двумя
вышеназванными крайними решениями. Для большой вычислительной машины,
с помощью которой решаются многочисленные, но небольшие по
размерам и требующие весьма ограниченного времени
прикладные программы, «лучшее» решение, вероятно, ближе к
альтернативе «все в памяти». Для машины, используемой при решении
научных задач и предназначенной для выполнения длительных и
занимающих значительный объем памяти прикладных программ,
вероятнее всего, более эффективной была бы операционная
система, ядро которой занимает минимальное место в памяти. Система
OS/MFT разрабатывалась фирмой IBM как операционная система
общего назначения, способная обеспечить потребности
приложений того и другого типа.
Гибкость системы OS/MFT объясняется модульным
характером ее структуры. Некоторые программы и управляющие блоки
должны непременно размещаться в памяти; остальные модули
могут по выбору пользователя либо храниться в памяти, либо
входить в состав системной библиотеки. Фирма IBM поставляет
основную систему и обеспечивает возможность выбора; нужную ему
структуру операционной системы пользователь определяет в
процессе ее генерации.
Обычно ядро системы хранится в памяти устройства прямого
доступа. В процессе начальной загрузки программы (IPL) ядро
Операционная система OS/MFT 279
копируется в основную память, затем происходит начальное
заполнение области очередей системы и общей области, после чего
оператор задает разбиение динамической области на разделы.
Сохраняемая на внешнем устройстве (обычно на устройстве
прямого доступа, но иногда и на магнитной ленте) копия системы
используется для дублирования. Копия ядра составляет набор
данных с именем SYS1.NUCLEUS.
Пределы возможностей
Существование систем мультипрограммирования объясняется
несоизмеримостью быстродействия вычислительной машины и
скорости работы связанных с ней устройств ввода — вывода; храня
в основной памяти несколько программ одновременно и
передавая управление CPU от одной программы к другой, можно
использовать большую часть того времени «ожидания», которое в ином
случае ушло бы впустую. Операционная система существует для
разрешения неизбежных при такой организации конфликтов.
Мы рассматривали систему с двумя программами в памяти.
В системе с двумя программами в некоторые моменты времени обе
программы окажутся в состоянии ожидания; введением третьей
программы можно было бы повысить эффективность системы. Та
же аргументация оправдывает введение четвертой программы,
пятой и т. д. По мере увеличения числа одновременно
присутствующих в памяти программ промежутки времени, в течение
которого системе «нечем заняться» (так как все программы
оказываются в ожидании того или иного события), должны уменьшаться.
Должен существовать какой-то предел — в конце концов
взаимодействие между программами станет настолько существенным,
что превысит выигрыш от введения дополнительных программ,—
однако вплоть до этого предела степень использования машины
тем выше, чем большее число программ одновременно
присутствует в памяти.
Система OS/MFT характеризуется некоторыми ограничениями
более практического характера. Первое из них касается памяти. *
Адрес последнего байта самой большой из машин фирмы IBM
семейства Системы/360 имеет в шестнадцатеричном представлении
значение (FFFFFF)i6; этог предел обусловлен использованием
трехбайтовых (или двадцатичетырехбитовых) адресов в поле
PSW и в самой машине; память почти 16 миллионов байтов хотя
и весьма велика, но все-таки имеет пределы. В реальных
ситуациях ограничение на число программ, одновременно загружаемых
в память, связано с фактически имеющимся объемом основной
памяти; в машине с памятью в один мегабайт и операционной
системой, занимающей память в 200К, можно иметь лишь восемь
разделов по 100К.
280
Глава 13
Существует еще одно ограничение. Каждый раздел
характеризуется своим собственным ключом защиты. Поле ключа защиты в
PSW занимает 4 бита. Из четырех битов можно составить лишь
шестнадцать различных сочетаний от 0000 до 1111. Операционная
система использует ключ защиты 0000, таким образом остается
15 значений ключа защиты для прикладных программ.
Краткие выводы
Операционная система IBM/360 мультипрограммирования с
фиксированным числом задач, более известная как OS/MFT,
предназначена для обеспечения режима мультипрограммирования в
вычислительных машинах фирмы IBM семейства Системы/360 (или
Системы/370). В этой системе память машины разбивается на
несколько разделов; разделы назначаются оператором и могут быть
практически любого размера, но, однажды назначенные, остаются
неизменными до следующего вмешательства оператора.
Операционная система OS/MFT состоит из ряда модулей,
предназначенных для решения различных задач, связанных с
одновременным присутствием в памяти нескольких прикладных программ.
Программы управления заданиями обеспечивают ввод программ
в память и запуск их в счет. Модулем чтения — интерпретации
(ридером — интерпретатором) реализуется функция спулинга.
Планирование исполнения отдельных шагов задания
осуществляется программой главного планировщика, обеспечивающей также
связь системы с оператором. Шаги задания загружаются в память
и запускаются в счет программой инициатора — терминатора
(для каждого раздела существует свой инициатор — терминатор).
К функциям этой программы относится также «очищение»
раздела памяти после завершения задания. Функция выходного
спулинга управляется программой вывода (райтером). После
считывания программы в память машины необходимые функции
операционной системы реализуются модулями управления задачами,
обрабатывающими прерывания. Обычные функции управления
данными также обеспечиваются системой OS/MFT.
Функционирование различных модулей операционной системы основано на
использовании ряда управляющих блоков и таблиц; к основным
управляющим блокам и таблицам относятся: таблица векторов
связей, блоки управления задачей, блоки запроса, блок
управления данными и блоки экстентов данных, управляющие блоки
устройств, блок ввода — вывода и таблица ввода — вывода задачи.
OS/MFT является операционной системой общего назначения,
созданной для обеспечения как можно более широкого диапазона
различных требований к системе, что не удивительно, если учесть
масштабы коммерческой деятельности фирмы IBM. Для
достижения такой гибкости операционная система была разработана на
Операционная система OS/MFT 28i
основе принципа модульности, при этом пользователю
предоставляется возможность выбирать те модули, которые будут
размещаться в памяти, и те, которые будут храниться в библиотеке и
считываться в память машины по мере необходимости. Таким
образом, если пользователю нужна операционная системам быстрой
реакцией, то он может разместить необходимые модули в
основной памяти; если же требуются значительные объемы памяти,
то он может обойтись минимальной резидентной составляющей
системы.
УПРАЖНЕНИЯ
1. В чем различие между заданием и задачей?
2. Какие функции относятся к управлению заданиями?
3. Какие функции относятся к управлению задачами?
4. Каким образом программа главного планировщика
отличает свободный раздел от занятого? Перечислите все указатели,
управляющие блоки и таблицы, которые при этом используются.
5. Опишите управляющие блоки, используемые для связи
прикладной программы с управляющим блоком устройства и
канальной программой. Каково назначение каждого из этих
управляющих блоков?
6. Каким образом подпараметры параметра DGB карты DD
и информация, хранящаяся в метке набора данных, вносятся в
программный блок DGB?
7. OS/MFT как операционная система
мультипрограммирования предназначается для исполнения нескольких одновременно
находящихся в памяти программ. Обсудите некоторые из
ограничений, определяющие число таких программ.
Глава 14
МУЛЬТИПРОГРАММИРОВАНИЕ С ДИНАМИЧЕСКИМ
РАСПРЕДЕЛЕНИЕМ ПАМЯТИ
Введение
Использование разделов фиксированной длины является
превосходным подходом к реализации мультипрограммирования в
тех случаях, когда известны типы выполняемых в данной системе
заданий; к сожалению, это не всегда так, и если задания
предъявляют непредвиденные требования, то в системе типа OS/MFT
обнаруживаются определенные недостатки. В этой главе мы
рассмотрим некоторые методы более эффективного использования
системных ресурсов в условиях динамически изменяющихся
требований. Основные темы включают: использование разделов
переменной длины, или областей, динамическое распределение
памяти, развертывание и свертывание, процессирование подзадач,
параллельная обработка, организации типа передний план —
фон и мультипроцессирование.
Некоторые из примеров этой главы будут основаны на
решениях, использованных в операционных системах IBM/360 и
IBM/370 мультипрограммирования с переменным числом задач
(OS/MVT); мы уже обсуждали существенные особенности
аппаратной реализации машин этого семейства и операционной
системы OS/MFT, составляющей хорошую основу для дальнейшего
изучения. В этой главе, как и в предыдущих, наша цель состоит
в том, чтобы ввести некоторые важные понятия, а не в том, чтобы
углубляться в детальное изучение какой-то одной системы.
Важно помнить, что операционные системы не являются
исключительным достижением фирмы IBM — их поставляют все изготовители
вычислительных машин. В этой главе будут упоминаться и
сравниваться («на функциональном уровне») с системой OS/MVT
фирмы IBM операционные системы и других изготовителей.
Основное назначение операционной системы состоит в обеспечении
максимального использования системных ресурсов с учетом
ограничений, обусловленных аппаратной реализацией конкретной
вычислительной системы; эта идея, как мы надеемся, иллюстрируется
в настоящей главе установлением того, что конкурирующие
операционные системы по существу обеспечивают выполнение одних
и тех же функций на основе различных конфигураций
аппаратных средств.
Динамическое распределение памяти 283
Более эффективное использование памяти
Мультипрограммированием обеспечивается более полная
загрузка центрального процессора за счет одновременного хранения в
памяти нескольких программ и передачи управления CPU от
программы к программе. Возможности этого подхода
ограничиваются объемом доступной основной памяти. Операционная система,
основанная на использовании разделов фиксированной длины,
может быть очень эффективной, если размеры программ
известны заранее и сравнительно постоянны, однако в том случае, когда
размеры программ могут существенно изменяться, операционная
система типа MFT может оказаться чрезвычайно неэффективной
в отношении использования основной памяти.
Рассмотрим, например, задание, включающее
ассемблирование, редактирование связей и счет, подготавливаемое студентами
как часть их домашней работы. Ассемблирующая программа
требует 60К основной памяти (рис. 14.1, а), редактор связей —
120К (рис. 14.1, б), а для выполнения шага GO (исполнение
программы) требуется всего 20К (рис. 14.1, в); если это задание
выполняется в системе OS/MFT, то для него необходимо выделить
раздел объемом 120К. В шаге ассемблирования 60К основной
памяти этого раздела не используются; в шаге редактирования
связей используется весь объем раздела; в течение всего времени
исполнения шага GO пропадают впустую целых 100К основной
памяти. Ни по какому критерию такое использование памяти
нельзя назвать эффективным, и эта проблема касается каждого
раздела.
Почему бы не отвести для каждой задачи в точности столько
памяти, сколько ей необходимо, т. е. ввести разделы переменной
длины. В такой системе динамической загрузки 60К памяти,
быть может, пропадавших впустую в разделе А, и 60К, не
используемых в разделе В, могут быть предоставлены другой
программе; прямым следствием более полного использования памяти
становится возможность ввести в систему
мультипрограммирования дополнительно одну-две программы, что улучшает
использование CPU без увеличения суммарного объема основной
памяти.
Большинство фирм, изготавливающих вычислительные
машины, могут предложить своим покупателям такого рода
операционные системы — динамическое распределение разделов памяти не
является исключительным достижением фирмы IBM. Вводя
эту концепцию, мы будем использовать пример операционной
системы IBM — OS/MVT (систему мультипрограммирования с
переменным числом задач) — по той простой причине, что
OS/MVT является логическим расширением системы OS/MFT, с
некоторыми особенностями которой мы уже познакомились; рас-
284
Глава 14
Операционная система
Другие поограммы
12DK
Операционная система
Другие программы
\120K
а
У//////А оо-гок~Ъ,
Операционная система
Другие программы
1Ш
6
Рис. 14.1. Неэффективное использование памяти в системе OS/MFT.
смотрев решение задачи динамического распределения памяти,
использованное IBM, мы уделим некоторое внимание разработкам
других изготовителей вычислительных машин.
OS/MVT
В операционной системе OS/MFT фирмы IBM разделы
назначаются оператором в процессе начальной загрузки программы и
остаются неизменными по размеру и своему расположению в
памяти до следующего вмешательства оператора. В системе
OS/MVT размер и расположение раздела задаются программой
инициатора — терминатора непосредственно перед загрузкой
задачи (то, что ранее называлось разделом, в OS/MVT называется
областью). В нашем примере, включающем ассемблирование,
редактирование связей и счет, программа управления заданиями
Динамическое распределение памяти
285
могла бы найти в памяти блок емкостью в 60К, начинающийся,
скажем, с адреса 250 000, и загрузить по этому адресу
ассемблирующую программу. Спустя некоторое время после того как
завершится работа ассемблера, можно было бы загрузить редактор
связей в блок длиной в 120К, начинающийся, например, с адреса
памяти 175 000.
После завершения этого шага задания занимаемый им блок в
120К передается в распоряжение системы, при этом в памяти
остается достаточно места для выполнения шага GO (рис. 14.2).
Благодаря предоставлению каждому шагу задания лишь
необходимого для его исполнения объема памяти проблема
пропадающего впустую или неиспользованного адресного пространства
памяти практически снимается. На рис. 14.2 показано
размещение различных шагов заданий, относящихся к различным
классам и занимающих в памяти смежные области, — чистый выи-
Операционная система
Программа А-Ш
Программа В-70К
'///////////////////А
wt, Ассемблер-бОК
//У////////////////////,
Программа С-50К
БОК
Операционная система
Программа D-65X
Программа C-5QK
\120K
а
Шодные-Ж
Операционная система
Программа В-85К
У///Ж Шаг GO-2UK Ш///Ш
Программа E-12DK
Сбободные-15К
Программа С-50К
}20К
б
Рис. 14.2. Переменное распределение памяти.
а — шаг ассемблирования; б — шаг редактирования связей; в — шаг GO.
286
Глава 14
грыш может составить одну-две дополнительные программы при
том же общем объеме основной памяти.
Старая поговорка «Ничто даром на дается» оправдывается и
в области проектирования операционных систем. Операционная
система, подобная OS/MVT, существенно сложнее системы
OS/MFT. Программа инициатора — терминатора не может просто
загрузить программу, запустить ее в решение и забыть о ней до
тех пор, пока терминатор не получит управление. К функциям
этого модуля управления заданиями кроме тех, которые ему
свойственны в системе OS/MFT, относятся сканирование памяти,
отыскание области достаточного объема, а также регистрация
изменений в начальных адресах, конечных адресах и размерах
областей. Отслеживание динамики изменения границ области
означает введение дополнительных и (или) более сложных
управляющих блоков. Операционная система типа OS/MVT будет
занимать в памяти больше места, чем система OS/MFT, а более
сложные модули займут больше процессорного времени на
выполнение.
В OS/MFT очередное задание обычно исполняется шаг за
шагом, прежде чем начнется исполнение следующего задания. Такая
же схема обработки считается стандартной и в OS/MVT, однако
для достижения еще более эффективного использования памяти
от этого правила можно было бы отказаться. Пусть, например,
ассемблирующая программа, занимающая 60К, только что
завершилась, и в данный момент времени нет свободной области
в 120К для загрузки редактора связей. Второй шаг этого
задания, очевидно, не может быть загружен и запущен в счет, пока
не освободится блок в 120К; таким образом, исполнение шага
редактирования связей на время откладывается, что должно
фиксироваться операционной системой и учитываться в последующих
действиях.
В то же время имеется свободная область в 60К, в которой
размещалась только что выполненная программа ассемблера. Не
лучше ли использовать эту область для выполнения шага
ассемблирования другого задания? При таком подходе не так уже
невозможна ситуация, когда четыре, пять или большее число
заданий, исполняемых в пределах одного и того же класса,
оказываются размещенными либо в основной памяти, либо в частично
завершенном состоянии образуют очередь объектных модулей,
ожидающих достаточного места в памяти для выполнения
действий по редактированию связей. Операционная система должна
обладать способностью прослеживать все эти частично
завершенные задания, что усложняет ее структуру. Рассмотренные
функции — те же самые, что и в системе OS/MFT; варьирование
распределением памяти делает их несколько более сложными.
V
Динамическое распределение памяти
287
Динамическое перемещение программ
Основное назначение операционной системы, допускающей
переменное число задач, состоит в сокращении незанятых объемов
памяти, повышающем степень использования этого вида
ресурсов. Подход, реализуемый в системе OS/MVT, весьма
способствует решению названной проблемы. Однако в любой момент
времени распределение памяти может оказаться подобным тому,
которое изображено на рис. 14.3, когда непригодные для загрузки
программ «прослойки» в 10К или меньшего объема разбросаны
Операционная система
Программа А
Программа В
Программа С
Ш//Аостто*-тУ//ЖЖ.
Программа В
Операционная система
Программа А
Программа В
Программа С
Программа В
Рис. 14.3. Неиспользуемые Рис. 14.4. Распределение па-
пространства памяти в систе- мяти в результате динамичес-
ме OS/MVT. кого перемещения программ.
по всей памяти. Если бы эти пустующие фрагменты удалось
объединить в одну связную область, то в нее можно было бы
загрузить еще одну задачу и запустить ее в счет. В этом состоит
назначение динамического перемещения программ; прикладные
программы попросту сдвигаются вверх по памяти, заполняя все
пустующие «прослойки», освобождая тем самым связную область
в нижней части памяти (рис. 14.4), — теперь этого пространства
памяти достаточно для загрузки еще одной задачи.
Реализация подобного приема в машинах фирмы IBM не столь
проста, как можно было бы заключить на основании
вышесказанного. В Системах IBM/360 или IBM/370 используемые регистры
имеют общее назначение, т. е. данный регистр в какие-то моменты
времени может использоваться для арифметических операций,
а в другие — в целях адресации. Когда программа перемещается,
то адрес каждой ячейки памяти программы изменяется на одну
288
Глава 14
и ту же константу сдвига (сдвиг программы из области с
начальным адресом 152К в область с начальным адресом 148К
предполагает вычитание величины 4К из каждого адреса, упоминаемого
в программе); содержимое каждого регистра, используемого для
адресации, должно быть изменено на эту величину, однако
содержимое арифметических регистров изменяться не должно
(представьте себе последствия решения вычесть 4096 из содержимого
какого-нибудь регистра, используемого в качестве счетчика в
программе статистического анализа). Эту трудность можно было
бы преодолеть либо введением строгих правил использования
регистров, либо использованием лишь языков высокого уровня, в
которых обычно содержимое арифметических регистров сразу
после выполнения операций записывается в память. Несомненно,
найдутся вычислительные центры, в которых именно так и
поступают, хотя динамическое перемещение программ и не. относится
к стандартным функциям системы OS/MVT.
Другие изготовители не сталкиваются с такого рода
трудностью. Многие фирмы разработали модели вычислительных
машин на основе разделения регистров на адресные и
арифметические, при этом часто вводится ограничение на доступ
прикладных программ к адресным регистрам. При такой структуре
аппаратных средств динамическое перемещение программ
достигается простым увеличением или уменьшением содержимого
адресных регистров.
Параллельная обработка
Когда программа обращается к операционной системе с запросом
о начале операции ввода или вывода, то после успешного начала
такой операции программа обычно переводится в состояние
ожидания. Хотя состояние ожидания относится к числу нормальных,
оно не всегда желательно. Иногда программисту хотелось бы в
период времени между началом операции ввода или вывода до ее
завершения выполнить какой-либо другой процесс обработки;
в таком случае какая-то из прикладных подпрограмм выполнялась
бы параллельно с операцией ввода — вывода. Логика подобной
обработки показана на рис. 14.5.
Наиболее сложную проблему параллельной обработки
составляет синхронизация событий. Используя достаточно простой для
понимания пример, допустим, что программист хочет,
обратившись к операционной системе, начать операцию ввода — вывода
и в то время, пока эта операция управляется каналом,
использовать управление CPU для выполнения команд некоторой
вычислительной подпрограммы. Если операция ввода — вывода и
указанная подпрограмма завершаются в один и тот же момент
времени, то никаких трудностей не возникает. Если сначала за-
Динамическое распределение памяти
289
Прикладная программа
Возобнобление
обработки
Операционная система
Начать
Ввод-бывод
Завершение
ввода-Вывода
*oJ [Сд к—POSP
О
Канал
Операция
б канале
Длительность-
переменная
Прерывание
ббода -
Вывода
Рис. 14.5. Параллельная обработка.
вершается операция ввода, то и здесь не возникает никаких
проблем — в обоих случаях может быть продолжено нормальное
выполнение прикладной программы. А что произойдет, если
подпрограмма завершится раньше операции ввода — вывода? Продумав
эту ситуацию, вы поймете, что для продолжения обработки
прикладной программе необходимо дождаться завершения операции
ввода — вывода (снова рис. 14.5).
Каким образом в машине устанавливается момент
завершения одного из двух параллельно исполняемых модулей? Это
важно, В Системах IBM/360 и IBM/370 проблема синхронизации
событий решается с помощью специального управляющего блока,
называемого блоком управления событием, или EGB. В нашем
примере факт завершения операции ввода — вывода был бы за-
10-821
f
I
f
' 290 Глава 14
фиксирован в некотором ЕСВ выполнением макрокоманды POST
(по всей вероятности, в одном из модулей операционной системы).
По завершении параллельно выполняемой подпрограммы
прикладная программа проверяет состояние ЕСВ. Если в нем обна-
) руживается результат выполнения макрокоманды POST, то, сле-
; довательно, выполнявшаяся параллельно операция ввода — вы-
\ вода завершена и выполнение прикладной программы может быть
1 продолжено; в противном случае прикладная программа исполь-
1зует макрокоманду WAIT и переходит в состояние ожидания.
Такого рода параллельная обработка весьма редко
встречается в современных прикладных программах; чаще она
используется в самой операционной системе. (Почему бы, например,
после выполнения команды SIO, ожидая сигнал о состоянии
канала, не заняться некоторыми внутренними операциями?) В
следующем разделе мы рассмотрим один класс применений, в котором
было бы желательно использование определенных форм
параллельной обработки.
Процессирование подзадач
Вспомните, в чем состоял метод оверлейных структур, который
мы обсуждали ранее в гл. 5, рассматривая оверлейные структуры
вычислительных систем второго поколения? Главным образом
из-за ограниченного объема доступной памяти в каждый момент
времени приходилось хранить в основной памяти только часть
программы, вызывая по мере необходимости нужные модули из
вспомогательной памяти. В современных машинах даже при
достаточно большом объеме памяти иногда целесообразно загружать
некоторые прикладные программы по частям. Рассмотрим,
например, программу обновления главного файла, в которой время
от времени (раз в месяц или около того) могут возникать
определенные условия, связанные с нестандартной обработкой.
Подпрограмма такой нестандартной обработки может занимать,
скажем, 20К байтов памяти и вряд ли было бы целесообразным в
программе ежедневной стандартной обработки сохранять эти не
используемые 20К байтов памяти в активном состоянии. Куда
разумнее хранить эту подпрограмму в библиотеке, а ее копию
считывать (конечно, не без помощи операционной системы) в память
только по запросу основной программы. Операционная система
прослеживает состояние этой новой задачи, формируя новый
блок управления задачей и связывая его (с помощью
макрокоманды ATTACH) с блоком управления главной задачи
рассматриваемой области. Откуда берется необходимая дополнительная
память в системе с переменным числом задач? Для этого
используется макрокоманда GETMAIN, и, если необходимого простран-
i
Динамическое распределение памяти 291
ства памяти не оказывается, программа переводится в состояние
ожидания до тех пор, пока не освободится память.
Описанный выше процесс специально приспособлен для
параллельной обработки. Если прикладная программа хорошо
спроектирована, то естественно полагать, что потребность в той или иной
подзадаче может быть установлена задолго до начала ее
фактического исполнения. В таком случае программист может (пользуясь
командами своей программы) передать управление CPU
операционной системе, получить необходимый для подзадачи объем
памяти, начать процесс чтения подпрограммы из библиотеки,
вновь получить управление CPU, продолжить исполнение команд
главной программы до тех пор, пока не появится действительная
необходимость обращения к подпрограмме, наконец, проверить
состояние блока управления событием и затем либо передать
управление подпрограмме, либо перейти в состояние
ожидания. Описанный выше пример является, конечно, не
единственно возможным случаем использования подпрограмм и процесси-
рования подзадач. Еще одним примером, если не ограничиваться
областью прикладных программ, может служить операционная
система, в которой постоянно используется процессирование
подзадач в форме нерезидентных модулей операционной системы,
хранящихся в библиотеке и считываемых для выполнения в
общую область.
Развертывание и свертывание
Некоторые из наиболее развитых операционных систем
оснащены процедурами развертывания и свертывания; принцип их
действия состоит примерно в следующем. Допустим, что вся
основная память занята. Неожиданно возникает экстренное задание —
в силу тех или иных причин оно должно быть обработано
немедленно. Для этого можно было бы попросту выбросить несколько
активных заданий, а впоследствии заново запустить их в счет.
Процедуры развертывания и свертывания обеспечивают иное
решение этой задачи; одна или несколько прикладных программ
просто копируются на диск (свертываются), освобождая место
для задания более высокого приоритета. Спустя некоторое цремя
свернутые программы копируются в память (развертываются) и
получают возможность продолжать счет.
Реализация этой идеи, как вы, наверное, догадываетесь,
несколько сложнее ее описания. В дополнение к функции
сопровождения программ, находящихся в основной памяти, и программ,
находящихся в очереди и ожидающих своего ввода в состояние
счета, операционная система должна по меньшей мере
отслеживать состояние еще некоторого числа незавершенных задач,
сохраняемых на диске или каком-нибудь вспомогательном запоми-
10*
292
Глава 14
нающем устройстве, для чего требуется ведение новых
управляющих блоков и таблиц. В некоторых машинах, использующих
процедуры свертывания — развертывания, развертываемые
программы должны копироваться в ту же область памяти, которую
они занимали первоначально; в других системах допускается
динамическое перемещение этих транзитных программ в другие
освобождающиеся области памяти, что еще более усложняет
операционную систему.
Очень хорошие примеры реализации и полезного применения
процедур свертывания — развертывания можно найти почти в
любой системе разделения времени, ориентированной на работу
с терминалами. Рассмотрим, например, сравнительно небольшую
систему разделения времени, способную обеспечить
одновременное обслуживание до 50 терминалов. Анализируя подобную
систему, необходимо рассмотреть две проблемы. Во-первых, мы
имеем дело с 50 различными пользователями и наша
операционная система должна обеспечивать сопровождение всех
пятидесяти программ. Представьте себе, какой объем памяти требуется
для хранения 50 независимых программ, если каждому
пользователю предоставить лишь 25К байтов (довольно небольшой
раздел). Потребовалось бы 1250К байтов основной памяти только
для программ, не говоря уже об операционной системе. Другим
важным фактором является быстродействие устройств ввода —
вывода и ожидаемая интенсивность потока сообщений от каждого
из этих пользователей. Они предпочитают работать с терминалов
клавишного типа, не отличающихся высоким быстродействием.
Если наши пользователи составляют группу, типичную во всех
отношениях, то они будут тратить много времени на «чесание в
затылке». Другими словами, мы можем полагать, что подготовка
ответа на сформированное машиной сообщение займет у
человека от 30 с до 1 мин, а то и больше; для машины, способной
выполнять около миллиона операций в секунду, это огромное
время.
В такой ситуации логика применения процедур свертывания—
развертывания вполне очевидна. Для начала примем, что с
каждым из десяти 25К-байтовых разделов связаны пять различных
пользователей (в сумме занимающих лишь 250К байтов памяти);
мы рассмотрим подробнее действия пользователей (которых
будем обозначать буквами от А до F), занимающих сообща первый
раздел. Сначала управление получает пользователь А,
обнаруживающий после короткого периода активных обменов, что
необходимо ввести дополнительные данные и поэтому выдает
команду чтения. Машине «известно», что для точного описания
требуемых данных, набора ответа на клавишном устройстве и его
отсылки в машину пользователю А потребуется не меньше
тридцати секунд; этого времени более чем достаточно для того, чтобы
Динамическое распределение памяти 293
свернуть на диск программу пользователя А и развернуть в
памяти программу пользователя В. В действительности
быстродействие машины столь велико, что, вероятно, все четыре
пользователя успеют получить управление CPU и доступ к памяти, прежде
чем будет готов ответ первого из них, — для машины не
составляет проблемы обслуживание пяти человек, работающих со
свойственной людям скоростью.
В еще более эффективном подходе используется динамическое
перемещение программ пользователей при их развертывании с
диска или барабана. Очень редко пользователи систем
разделения времени программируют на языках уровня ассемблера, —
большинство из них работают на BASIC, Фортране, АПЛ,
специальной версии ПЛ/1 или каком-нибудь другом языке высокого
уровня. В немногих языках высокого уровня регистры
используются в качестве сумматоров или счетчиков, так что одна из
главных проблем динамического перемещения программ
отпадает. При таком динамическом подходе исключалась бы
возможность выбора «неудачно занятого» раздела. Допуская, что в
среднем между операциями ввода — вывода пользователю
потребуется целая секунда машинного времени (довольно большой
промежуток), теоретически возможно обслуживание до тридцати
пользователей в одном разделе, обеспечивающее при этом
каждому пользователю нормальный тридцатисекундный цикл (здесь
мы, вероятно, переоцениваем возможности наших
пользователей) без каких-либо задержек. Конечно, ответы характеризуются
определенной нерегулярностью (данную проблему следует
рассматривать как одну из интересных задач теории очередей),
однако четырех-пяти разделов было бы вполне достаточно для нашей
системы с 50 пользователями.
Прежде чем перейти к другой теме, рассмотрим еще одну
проблему: что произойдет, если один из пользователей терминалов
запускает в решение длительную расчетную программу типа
программы статистического анализа? 49 других пользователей
могли бы сидеть у своих терминалов, ожидая завершения этой
программы. Одним из наиболее простых решений новой
проблемы является использование макрокоманды WAIT. Компилятор,
формирующий загрузочные модули, обрабатываемые в такой
системе, попросту вносит макрокоманду WAIT после каждого
фрагмента, состоящего из определенного числа команд, вынуждая,
таким образом, программу передавать управление операционной
системе достаточно регулярно и часто. В более совершенных
системах используется таймерный механизм, реализованный либо
программно, либо аппаратно и ограничивающий доступ программ
к CPU пределами одного кванта времени, длящегося доли
секунды, с последующим переводом программы в состояние ожидания
(быть может, с помощью внешнего прерывания).
294 Глава 14
Обработка в режиме «передний план —
фоновый раздел»
Вводя основные идеи развертывания и свертывания в условиях
функционирования системы разделения времени, мы обсуждали,
безусловно, крайний случай, когда пользователи терминалов
между операциями ввода — вывода могли занять CPU на целую
секунду. Пользуясь терминалом с построчным обменом, очень
трудно в одном сообщении передать такой объем информации,
который загрузил бы современную быстродействующую машину
на достаточно длительный период времени; одна десятая или даже
одна сотая секунды машинного времени на одно сообщение
значительно точнее отражает реальную ситуацию. Примем эту
длительность равной 0,1 с для примера, рассматриваемого ниже.
Наша система обслуживает 50 пользователей. Каждый
пользователь посылает одно сообщение — набор на клавиатуре
телетайпа текста одной строки и ее пересылка, ответ на один из
поставленных системой вопросов и т. д. — в среднем каждые
тридцать секунд, т. е. два сообщения в минуту. Обработка одного
сообщения в среднем занимает одну десятую секунды, таким
образом, каждому из наших 50 пользователей в течение одной минуты
физического времени требуется 0,2 с машинного времени. С
учетом всех 50 пользователей функционирование такой системы
разделения времени обеспечивает 50 х (0,2), или десятью секундами
времени CPU в минуту физического времени, а это означает, что
в течение каждой минуты целых 50 с CPU можно было бы
использовать в каких-нибудь других операциях, не снижая при этом
производительность системы. Конечно, организация такого рода
обработки не очень проста — взаимовлияние программ,
распределение запросов во времени и системные накладные расходы
снижают производительность системы, — тем не менее прикладная
система разделения времени, ориентированная на работу с
терминалами, для которой характерны длительные (в масштабе внутри-
машинных процессов) промежутки времени, разделяющие
запросы, и краткие периоды собственно вычислений, часто может
функционировать, занимая лишь некоторую долю времени CPU.
Почему бы не использовать остальное машинное время для
какой-нибудь другой цели? К этому, как вы, вероятно, помните,
сводится основное назначение систем
мультипрограммирования — загрузить в память дополнительно одну-две программы и
передавать им в освобождающиеся периоды времени управления
CPU. При этом возникает только одна проблема: если
дополнительная программа рассчитана на длительное исполнение и
требует между операциями ввода — вывода четырех-пяти минут
машинного времени, то скорость реакции системы разделения
времени в ответах на сообщения пользователей (определяющая наз-
Динамическое распределение памяти 295
начение системы разделения времени) может заметно
снизиться.
Можно считать, что подход, в соответствии с которым
используются разделы переднего плана и фон, обеспечивает решение,
лучшее во всех отношениях. Обычно программы, требующие
быстрого ответа, размещаются в разделе переднего плана, а
программы с менее жесткими требованиями относительно времени
ответа, размещаются в фоновом разделе. После любого прерывания
операционная система сначала пытается передать управление в
область переднего плана; раздел фона получает управление CPU
только в том случае, когда нет ни одной готовой к счету программы
переднего плана. В системе, ориентированной на работу с
терминалами и десятками пользователей, посылающих прерывания
ввода-вывода, разделенные во времени самым случайным и
непредсказуемым образом, захват управления CPU и длительное его
удержание программой раздела фона оказывается весьма
маловероятным. В некоторых системах реакция на запросы переднего
плана обеспечивается с помощью подпрограммы таймера или
иногда макрокоманды WAIT.
В своей основе идея режима «передний план-фон» относится к
дисциплине приоритетов. В Системах IBM/360 или IBM/370 она
реализуется простым приемом, состоящим в том, что программа
главного планировщика управления заданиями всегда начинает
опрос ожидающих программ с раздела, или области, переднего
плана, даже если программа, вызвавшая прерывание, по-прежнему
остается в состоянии готовности к счету.
Такая организация работы системы не ограничивается
применениями, связанными с разделением времени или использованием
терминалов; часто программа типично пакетной обработки
размещается в области переднего плана, а задания, рассчитанные на
длительные вычисления, — в области фона; при этом
обеспечивается нормальное исполнение заданий пакета, тогда как задания
фона считываются в промежутках между характерными для
пакетной обработки многочисленными операциями ввода — вывода. Эта
концепция была положена в основу разработки вычислительных
машин некоторых изготовителей, при этом более высокий
приоритет заданий переднего плана реализуется аппаратно. Некоторые
из них мы рассмотрим в этой главе несколько позже.
Хороший пример реализации режима «передний план — фон»
представляет система CALL-OS фирмы IBM, предназначенная для
использования совместно с операционной системой OS/MVT. Одна
из областей памяти вычислительной машины связывается с
системой CALL-OS; в пределах этой области система CALL-OS, своего
рода операционная система внутри операционной системы,
осуществляет управление машиной, распределяя память этой области
между многими пользователями, реализуя функции развертыва-
296
Глава 14
ния — свертывания, отслеживая состояние программ и т. д.
С более низким приоритетом выполняются программы ряда других
областей, составляющих фон.
Мультипроцессорная обработка
Если две или большее число программ одновременно находятся в
памяти и делят между собой функции единственного CPU, такой
способ обработки мы называем мультипрограммированием.
Обработка, в которой используются два или большее число
процессоров, называется мультипроцессорной. Первая из этих концепций —
мультипрограммирование — относится к области математического
обеспечения; понятие мультипроцессорной обработки относится к
области аппаратных средств. Операционная система представляет
собой совокупность программ, т. е. математическое обеспечение.
Почему в книге, касающейся математического обеспечения,
обсуждаются вопросы аппаратных средств? На этот вопрос ответить
просто — многие из функций, выполняемых современными
операционными системами, могут быть реализованы как
аппаратными, так и программными средствами.
Одна из очень распространенных форм применения
мультипроцессорной обработки включает сочетание главного и подчиненного
процессоров, схематически представленное на рис. 14.6. Если
функционирование системы связано с большим объемом операций
ввода — вывода, координация обмена данными и обслуживание
очередей задач возлагается на «главную» машину, а вся
высокоскоростная обработка информации — на подчиненную.
Преимущества такого подхода особенно ощутимы в системах разделения
времени, обеспечивающих одновременное обслуживание многих
весьма удаленных пользователей, связанных с системой с помощью
терминалов. В качестве главной машины часто выступает мини-
ЭВМ, или малая машина, оснащенная средствами обработки
прерываний многих уровней; подчиненная машина, как правило,
имеет значительно большую производительность и стоит дороже.
В основе построения некоторых типов вычислительных машин
лежит концепция мультипроцессорной обработки. Несколько
следующих страниц этой главы мы посвятим рассмотрению машин,
разработанных не фирмой IBM, а другими изготовителями.
Другие изготовители
IBM сегодня не единственный изготовитель вычислительных
машин; в этой области выдающиеся разработки осуществляются
многими другими фирмами. Ниже будут кратко рассмотрены
некоторые примеры такого рода разработок и при этом подчеркнуты
важнейшие особенности архитектуры аппаратных средств и
Динамическое распределение памяти 297
основные операционные системы, обеспечивающие их
функционирование. Мы ограничимся минимальным объемом детализации —
это всего лишь общий обзор.
Фирма Burroughs поставляет операционную систему под
названием «Главная управляющая программа», или MGP, обеспечивающую
функционирование машин, изготавливаемых этой фирмой, серии
6700 и 6800. Эта система предназначается для обеспечения
пакетной обработки, мультипрограммирования, разделения времени и
обработки процессов в реальном масштабе времени. В том, что
касается проектирования математического обеспечения и
аппаратных средств, фирму Burroughs всегда отличало новаторство
подходов и такие концепции, как программно и аппаратно
обрабатываемые прерывания, стековый алгоритм обработки прерываний,
динамическое распределение и иерархическая организация памяти
(которую нам предстоит обсудить в гл. 15).
Фирма Control Data Corporation (GDC) поставляет как большие,
так и малые машины и в связи с этим предлагает ряд различных
операционных систем. Главная операционная система MOS
предназначается для обеспечения работы машин, изготавливаемых
Удаленные терминалы
Рис. 14.6. Мультипроцессорная обработка с разделением на главную и
подчиненную машины
298 Глава 14
упомянутой фирмой, серий 3300/3500. Эта мультипрограммная
система обеспечивает обработку до пяти классов заданий и
спроектирована таким образом, что в каждом классе всегда может быть
активным хотя бы одно задание.
Для обеспечения работы машин серий 6400, 8500 и 6600 фирма
CDG предлагает операционную систему Scope 3, размещаемую на
дисках.Машины серии CDC 6000 представляют больший интерес
с точки зрения их аппаратных возможностей. Кроме главного
процессора (CPU) машины GDC 6000 имеют ряд периферийных
процессоров, представляющих собой по существу вспомогательные
машины, которые работают параллельно с главным процессором.
Одним из этих периферийных процессоров выполняется программа
монитора операционной системы, которая, грубо говоря,
совмещает функции модулей главного планировщика, инициатора и
терминатора операционной системы фирмы IBM. Другим периферийным
процессором управляется связь с операторским пультом, третий
используется для управления операциями ввода — вывода. Все
периферийные процессоры — независимые, т. е. могут работать
одновременно. В такой системе запрос на выполнение операции
ввода — вывода, опознаваемый средствами, подобными
обращению к супервизору, может быть просто переадресован
соответствующему периферийному процессору, а такие функции, как связь
с каналом, выполнение команд SIO, проверка слова состояния
канала, могут осуществляться в то время, когда главный
процессор занят другими операциями. Операционная система,
предназначенная для обеспечения работы машин этой серии, будет весьма
отличаться от математического обеспечения фирмы IBM, однако
выполняемые ими функции весьма сходны.
Фирма Digital Equipment Corporation (DEC) хорошо известна
как поставщик малых вычислительных машин, в особенности
потребителям систем разделения времени. Одна из малых машин этой
фирмы — PDP-8 — может использоваться под управлением
системы разделения времени (TSS/8) собственной разработки для
одновременного обслуживания от 8 до 32 пользователей. В
действительности в этой машине в каждый момент времени в памяти
размещается только одна программа, при этом задача обслуживания
многих пользователей решается средствами развертывания и
свертывания. В системе используется квантование времени как защита
от возможного захвата памяти одной программой на чрезмерно
большой промежуток времени.
Для обеспечения работы более крупных машин серий PDP-11/40
и PDP-11/45 фирма DEC предлагает расширенную систему
разделения времени и ресурсов (RSTS/E) собственной разработки. Это
весьма мощная система мультипрограммирования, способная
обрабатывать несколько одновременно размещаемых в памяти
программ. В системе используется стековый алгоритм обработки пре-
Динамическое распределение памяти 299
рываний, при этом большая часть операций, связанных с
выталкиванием из стеков, осуществляется аппаратно. В системе используются
также концепции виртуальной памяти; подробному
рассмотрению этой темы мы посвятим следующую главу. Для
математического обеспечения машин именно этой серии фирма DEC имеет
также операционные системы, ориентированные в большей степени
на пакетную обработку.
Машина PDP-15 фирмы DEC представляет собой еще один
пример разработки, в основу которой положена концепция мульти-
процессирования. В этой машине имеется пять процессоров: CPU,
процессор на интегральных схемах для выполнения операций с
плавающей точкой, процессор ввода — вывода, процессор
графической обработки и периферийный процессор; все названные
выше процессоры независимы и могут работать параллельно. Фирма
DEC имеет четыре операционные системы, предназначенные для
обеспечения работы этой машины на уровне кодовой реализации
и имеющие мало общего с какой-нибудь из операционных систем
фирмы IBM.
До приобретения отделения вычислительных машин фирмы
General Electric фирма Honeywell была известна как изготовитель
малых и средних машин; к этой продукции теперь добавляется
выпуск более крупных машин. Для обеспечения работы машин
серии Honeywell 200 фирма поставляет математическое обеспечение,
называемое операционной системой MOD 4. Эта система может
обслуживать до двадцати независимых разделов и сопровождать
многие классы заданий, аналогично тому, как это делается в
системе OS/MFT, изученной нами в предыдущей главе.
Машины серии Honeywell 600 (615/625/635) созданы на основе
элементов прежней продукции фирмы General Electric Corporation.
Работа машин этой серии обеспечивается операционной системой
General Electric Comprehensive Operating System (GECOS III),
представляющей собой операционную систему общего назначения,
оснащенную средствами обеспечения местной пакетной обработки,
пакетной обработки с удаленной периферии и режима разделения
времени. Обычный способ распределения памяти между
программами аналогичен реализованному в системе OS/MVT фирмы IBM,
при этом более высокий приоритет доступа к памяти реализуется
механизмом динамического перемещения программ и процедурой
свертывания. Системой обеспечивается обработка тридцати двух
различных типов прерываний, четыре из которых являются
прерываниями ввода — вывода. Аналоги принятых в системах IBM
старых PSW и записей прерываний представлены в форме
диспетчерской очереди, включающей до шестидесяти трех элементов;
выбираемые программы определяются содержимым составляющих этой
очереди и выполняются в соответствии с уровнями приори- •
тетов.
300
Глава 14
Деятельность фирмы RGA, как и фирмы General Electric, в
настоящее время уже не связана с производством вычислительной
техники, однако некоторые ее машины все еще используются.
Операционная система Spectra-70, ориентированная на
использование магнитных лент и дисков (TDOS), относится, вероятно,
к лучшим из известных разработок фирмы RCA в области
математического обеспечения. Эта система хранится на диске и считы-
вается в основную память в процессе загрузки, планируемой и
осуществляемой оператором, после чего она остается в памяти до
завершения обработки потока заданий. TDOS может
обеспечивать одновременную обработку шести различных программ в
разделах переменной длины.
Фирма UNIVAC имеет операционную систему, известную как
EXEC 8, которая поставляется для обеспечения работы машин
этой фирмы серии 1108. В ней предусматривается пакетная
обработка, интерактивный режим и обработка процессов в реальном
масштабе времени.
Вычислительные машины фирмы Xerox интересны
реализованным в них подходом к обработке множественных прерываний;
например, в машинах серии SIGMA 2 могут обрабатываться до
134 различных уровней прерываний! Монитор пакетной
обработки в реальном масштабе времени (RBM) — одна из
операционных систем, предназначенных для математического обеспечения
машин этой серии. Эта мультипрограммная система использует,
подобно OS/MFT, разделы переднего плана и фона
фиксированной длины. Отдельные программы связываются с прерываниями;
по существу, то, что в системе IBM называется старым PSW и
хранится в очереди блоков запросов, в машинах фирмы Xerox
называется прерыванием и хранится в диспетчерской очереди,
или стеке прерываний. Каждый уровень прерываний
характеризуется своим приоритетом, определяющим порядок выполнения
модулей. В более крупных машинах серии SIGMA 5/7
операционная система фирмы Xerox обеспечивает обработку до 224 уровней
прерываний. Монитор разделения времени и пакетной обработки
(ВТМ) в соответствии со своим названием обеспечивает работу
машин этого семейства как в режиме пакетной обработки, так и
в условиях разделения времени. В этой системе реализуется
режим «передний план —фон», при этом, как вы могли
догадаться, раздел переднего плана занимают процессы, требующие
разделения времени. Кстати, с середины 1975 г. фирма Xerox
изготовлением вычислительных машин не занимается.
Динамическое распределение памяти 301
Краткие выводы
В этой главе на функциональном уровне описания мы изучили
ряд практически реализованных концепций в области
операционных систем. Сначала мы рассмотрели систему OS/MVT фирмы
IBM, которая, как мы установили, была разработана для
обеспечения более эффективного использования памяти. Затем наше
обсуждение касалось основных понятий динамического
перераспределения памяти, параллельной обработки и синхронизации
событий, процессирования подзадач, логики свертывания и
развертывания, обработки в режиме «передний план —фон» и
мультипроцессорной обработки. Глава заканчивается обзором
деятельности основных поставщиков (за исключением фирмы IBM)
вычислительных машин: Burroughs, Control Data Corporation,
Digital Equipment Corporation, Honeywell, RCA, UNIVAC и
Xerox.
УПРАЖНЕНИЯ
1 • Почему в операционной системе с фиксированными
разделами часто остается неиспользованным адресуемое пространство
памяти? Как преодолевается эта проблема в системе с
переменными разделами (или областями)?
2. Что такое динамическое перемещение программ?
3. Что такое процессирование подзадач?
4. Каким образом может быть синхронизирована работа CPU
с параллельным выполнением операций в канале?
5. Система разделения времени часто включает
параллельную обработку, обработку в режиме «передний план —фон» и
процедуры развертывания —свертывания. Обсудите
взаимосвязи между этими концепциями.
6. Что такое мультипроцессорная обработка?
7. В машинах серии CDC 6000 кроме главного процессора
используются многочисленные периферийные процессоры. В чем
состоят некоторые преимущества такого подхода?
Глава 15
СЕГМЕНТАЦИЯ, СТРАНИЧНАЯ ОРГАНИЗАЦИЯ ПАМЯТИ
И ВИРТУАЛЬНАЯ ПАМЯТЬ
Введение
Мультипрограммирование, как нам уже, конечно, должно быть
известно, состоит в одновременном размещении в памяти
нескольких программ и совместном использовании ими функций CPU,
что способствует более полной загрузке системы.
Ограничивающим фактором в этом подходе обычно является объем доступной
памяти, а не время занятости CPU —проблема, которая
становится все более острой по мере увеличения быстродействия
вычислительных машин. В данной главе мы рассмотрим вопросы
сегментации программы и страничной организации памяти — два
метода, способствующие лучшему использованию памяти. На
основе этих двух концепций мы разовьем важнейшие идеи
виртуальной памяти.
Эффективность использования памяти
Как мы уже установили при обсуждении
мультипрограммирования, чем больше программ загружается в память, тем полнее
используется время центрального процессора. Конечно,
существует определенный предел —в конце концов, влияние
взаимодействия программ приводит к снижению эффективности, — однако
он едва ли достижим, за исключением, быть может,
функционирования небольшого числа хорошо спланированных и
отлаженных систем. В общем случае внесение в память еще одной
программы означает повышение эффективности системы.
Главная цель OS/MVT состояла4в том, чтобы повысить
степень использования памяти и, таким образом, обеспечить
возможность внесения дополнительных программ. Эта система
представляла шаг вперед по отношению к операционным системам с
фиксированными разделами, однако, как вы, вероятно, помните,
отличалась скверной привычкой оставлять небольшие «щели»
незанятого адресного пространства, разбросанные тут и там по всей
памяти, создавая так называемую проблему фрагментации. Ее
решению способствует метод динамического перемещения
программ, с которым, однако, связаны свои проблемы, в частности
Сегментация, страничная и виртуальная память 303
когда возможность его применения не учитывается при
реализации аппаратных средств. Во-первых, мы сталкиваемся с
проблемой трансляции адресов — сдвигу подлежит содержимое лишь
адресных, но не арифметических регистров. Вторая проблема,
вероятно еще более важная, связана с тем, что в процессе
перемещения программ машина должна прекратить выполнение
полезной работы. В некоторых машинах динамическое перемещение
программ реализовано аппаратно; в этих случаях данная
операция может быть выполнена быстро и с минимальными потерями
времени. Другие машины таким свойством не обладают, и в них
реализация динамического перемещения должна осуществляться
программными средствами. В лучшем случае метод переменных
разделов, или областей, даже с использованием динамического
перемещения программ время от времени будет оставлять
незанятые прослойки памяти емкостью в два, четыре или десять
Кбайтов.
С прогрессом электронной техники быстродействие
вычислительных машин становится все выше и выше, что еще более остро
ставит проблему эффективности использования памяти.
Приведем довольно простой пример: десятипрограммная система,
которая раньше могла использовать лишь 50% доступного времени
CPU, с увеличением быстродействия машины вдвое
характеризуется лишь 25-процентной загрузкой GPU. He удивительно
поэтому, что вместе с вычислительными машинами на интегральных
полупроводниковых схемах изготовители предлагают
специальные аппаратные средства и пакеты программ математического
обеспечения, предназначенные для достижения более полного
использования памяти.
Сегментация
Почему программа всегда должна занимать связную область
памяти? Почему бы не разбить ее на части и не разместить в
памяти отдельными сегментами, там где они смогут поместиться
(рис. 15.1)? Так или иначе, многие программы составляются из
отдельных модулей и подпрограмм, при этом относительная
адресация имеет существенное значение лишь в пределах данного
сегмента, но не между сегментами. Отдельные сегменты, конечно,
были бы меньше по размеру, чем вся несегментированная
программа, и их было бы легче разместить в небольших «просветах»
памяти, максимально используя преимущества динамического
перемещения программ. Лишний «просвет» (или два, или три) из
неиспользованных 10К памяти, оставляемых даже самой лучшей
системой типа OS/MVT, может быть использован для
размещения еще одной или двух программ при том же объеме суммарной
304
Глава 15
памяти, таким образом, сравнительно дешевыми средствами
повышается эффективность системы.
Некоторые затраты тем не менее необходимы — главным
образом в связи с адресацией. Если программист написал
программу одним связным текстом, то как должны решаться проблемы
адресации, возникающие при загрузке сегментированной
программы?
Программа А - Сегмент и/s 1 - 20К
Рис. 15.1. Сегментация программы.
Один подход состоит в том, что их решение просто
предоставляется самому программисту. Большинство программ
предназначается для выполнения нескольких различных и ясных
(программисту) логических функций; хороший программист или
программист, подчиняющий написание программ хорошим нормам
программирования, может распределить реализацию этих
функций в программе, разумно разбив ее на соответствующие
сегменты. Каждому сегменту может быть сопоставлен свой адресный
регистр базы, начальное значение которого задается в момент
загрузки программы. Поскольку все адреса могут отсчитываться
от значения этого базового регистра, адресация в пределах
сегмента не составляет проблемы. В языках уровня ассемблера
введение отдельного регистра базы и управляющей секции в каждом
сегменте является общепринятой практикой. В некоторых
языках высокого уровня такая возможность либо предусмотрена в
самом языке, либо может быть легко реализована средствами
Сегментация, страничная и виртуальная память 305
компилятора (хорошим примером может служить блочная
структура BEGIN в языке ПЛ/1).
Предоставление решения вопросов адресации на усмотрение
программиста не всегда является лучшим выходом. Почему бы не
отнести к функциям операционной системы если не все, то часть
действий по сегментации программы? Если программист
использует блоки BEGIN или подпрограммы, то и замечательно —для
системы они служат очевидными, логически естественными
указателями границ раздела сегментов. Даже в том случае, когда он
ими не пользуется, существуют некоторые очевидные указатели
границ раздела —рабочие зоны, буферные области операций
ввода и вывода и командные коды программы, которые
определяют три типа таких естественных границ. Другие стандарты
можно было бы реализовать средствами операционной системы или
компилятора — общепринятым средством является ограничение*
на максимальный размер сегмента.
Сегмент
Смещение |
Рис. 15.2. Адресация сегментированной программы.
Адресация в сегментированной программе отличается от
обычной. В одной схеме адресации адрес разбивается на две части
(рис. 15.2), при этом старшие двоичные разряды указывают номер
сегмента, а младшие —смещение в пределах сегмента. В
процессе загрузки программы формируются таблицы сегментов
(рис. 15.3), содержащие номера сегментов и действительные
адреса памяти, занимаемые первой ячейкой каждого сегмента.
В процессе выполнения программы происходит динамическое
преобразование адресов, при этом номер сегмента с помощью
сегментной таблицы преобразуется в адрес базы, а
действительный абсолютный адрес вычисляется путем суммирования значения
смещения с адресом базы (рис. 15.3).
Иногда легче понять, как именно все происходит, если
подробно рассмотреть какой-нибудь пример. Чтобы упростить задачу,
используем в качестве модели нашей машины шестнадцатибитовую
мини-ЭВМ — в этой машине все адреса составляются из
шестнадцати двоичных разрядов. Припишем шестнадцати двоичным
разрядам следующие значения:
1. Четыре старших разряда указывают номер сегмента.
2. Двенадцать младших разрядов определяют смещение.
Четырехбитовый номер сегмента дает нам возможность
нумеровать не более шестнадцати сегментов (от 0000 до 1111).
Двенадцать разрядов смещения позволяют адресовать 4096 ячеек,
памяти в каждом сегменте (от 0000 до 4095). Прежде чем продви-
306
Глава 15
гаться дальше, важно отметить произвольный характер принятой
схемы адресации — точно так же мы могли бы выбрать
двухбитовый номер сегмента и четырнадцатибитовое смещение, или
трехбитовый номер сегмента и тринадцатибитовое смещение, или
любую другую комбинацию, которая нам придет на ум. В
идеальном случае размер сегмента должен быть достаточно малым,
Сегмент
Смещение
Сегмент
1
2
3
Адрес начала
ааазаа
bbbbbb
сссссс
Адрес начала сегмен-
{та плюс смещение Л
равняется дейстбцтель-t"Ч
ному адресу J *
Первый сегмент
Второй сегмент
Третий сегмент
Рис. 15.3. Динамическое преобразование адресов.
чтобы его можно было разместить в случайно освобождающихся
фрагментах памяти, но достаточно большим, чтобы содержать
логически законченную часть программы и не содержать
фиксированных адресов. Размеры сегментов должны отражать
спектральный состав программ (спектр заданий), фактически
обслуживаемых данной вычислительной установкой, —это легче
сказать, чем сделать.
Во всяком случае для нашей вычислительной системы мы
выбрали схему адресации, включающую четырехбитовый номер
сегмента и двенадцатибитовое смещение; коль скоро решение
принято, то нам лишь остается неуклонно ему следовать. По
схеме рис. 15.4 мы будем прослеживать процесс сегментации в нашей
мини-ЭВМ.
Начальные адреса памяти, как вы, наверное, догадываетесь,
занимает операционная система. Это программное обеспечение
Сегментация, страничная и виртуальная память
307
0
1
2
3
4
5
6
7
Резидентная часть 05
Таблицы OS
Транзитная область OS
Программа А
Программа В
Программа А
Программа А
Программа В
а
Примечание: длина сегмента мотет
изменяться
28К
Регистр адреса
сегментной таблицы
З
Сегмент
0
1
2
Адрес
12288
17408
21504
Примечание: 1 К-1024 адресуемых единиц.
Адрес
2
500
L
Регистр адреса
сегментной таблицы
Сегмент
0
1
Адрес
12288
17 №
21504
Начальный адрес сегмента Z1504
Плюс смещение 500 •+
Действительный адрес 22004
б
Рис. 15.4. Пример сегментации программы.
а — загрузка программы; б — сегментная таблица программы А;
ние адресов.
в — преобразова-
может быть разбито на три сегмента (рис. 15.4,а), содержащих
соответственно часть системы, постоянно хранящуюся в памяти,
некоторые таблицы и указатели и область хранения транзитных
модулей, которые при необходимости будут считываться с диска.
Каждый сегмент занимает все 4096 ячеек памяти; таким образом,
сегментная таблица для этой «программы» отличается некоторыми
особенностями. Рассмотрим следующую таблицу:
АДРЕС А6С0АЮТНЫЙ ДВОИЧНЫЙ АДРЕС
СЕГМЕНТ СМЕЩЕНИЕ АДРЕС СЕГМЕНТ СМЕЩЕНИЕ
0 000 0 0000 000000000000
1 000 4096 0001 000000000000
2 000 8192 0010 000000000000
АБСОЛЮТНЫЙ ДВОИЧНЫЙ
АДРЕС
0000000000000000
0001000000000000
0010000000000000
Адреса, выраженные через номера сегментов и абсолютные
двоичные адреса, совпадают! За исключением чистых случайностей,
таким совпадением характеризуется только операционная систе-
308
Глава 15
ма. Если задуматься, то в этом есть свой смысл; лишь
операционная система требует написания машинно-ориентированных
программ и использования абсолютных адресов. При выполнении
подпрограмм операционной системы не требуется преобразование
адресов, однако все адреса остальных программ должны
преобразовываться с помощью сегментных таблиц программ.
Допустим, что в память была считана программа, состоящая
из трех сегментов, как показано на рис. 15.4, а. В сегментной
таблице содержится начальный адрес каждого сегмента нашей
программы (рис. 15.4, б); сегментная таблица размещается в
области таблиц операционной системы и находится по значению
специального регистра, называемого, скажем, регистром
размещения сегментной таблицы.
В некоторой точке программы встречается ссылка на адрес,
показанный на рис. 15.4, в. Используя четыре старших разряда
этого адреса, с помощью регистра размещения сегментной
таблицы отыскивается сегментная таблица программы, в которой
содержится начальный адрес соответствующего сегмента.
Содержимое двенадцати младших разрядов адреса складывается с адресом
базы, давая действительный адрес искомого элемента памяти.
В системе мультипрограммирования с каждой программой
будет связана своя сегментная таблица. Реализация связей с
этими таблицами с помощью регистров размещения сегментной
таблицы может быть обеспечена различными методами. Для этого
могут быть с успехом использованы стеки или очереди адресов
сегментных таблиц совместно саппаратно или программно
реализуемым указателем размещения регистра, содержащего адрес
сегментной таблицы «активной» программы. Поскольку для
операционной системы динамическое преобразование адресов не
составляет проблемы, загрузка этого специального регистра могла
бы выполняться программой главного планировщика или
программой-инициатором, подобно тому как в системах IBM OS/MFT
или OS/MVT происходит загрузка текущего PSW. Даже не
обязательно, чтобы упомянутый регистр был физически представлей
специальным регистровым устройством; для этих целей подошла
бы любая фиксированная ячейка памяти с известным адресом.
Отметьте, пожалуйста, еще раз тот факт, что наш пример с
шестнадцатиразрядным адресом является лишь примером, а не
производственным стандартом; разрядность адресов изменяется
от одного изготовителя к другому, а точный алгоритм разбиения
адресов на номер сегмента и смещение могут различаться даже в
отдельных вычислительных установках одного и того же
изготовителя.
Задача распределения памяти в такого рода системе несколько
сложнее, чем в системах OS/MFT или OS/MVT. Здесь
операционная система должна отслеживать состояние всех свободных фраг-
Сегментация, страничная и виртуальная память
309
ментов адресного пространства, как бы малы они ни были. В такой
операционной системе, вероятно, потребуется ведение таблицы
типа изображенной на рис. 15.5, в которой просто перечисляются
используемые и свободные области памяти. Содержимое этой
таблицы не имеет никакого отношения к находящимся в памяти
и выполняемым в данный момент программам; она необходима
лишь как удобное средство, используемое программой главного
планировщика или программой-инициатором операционной
системы (или какими-либо их аналогами).
Начальный адрес
О
16К
ZUK
40К
44УГ
ВВК
L-*^
Длина
1ВК
дК
1ВК
4К
Ш
Ж
Состояние
Используется
Свободно
Используется
Свободно
Используется
СВододно
Рис. 15.5. Таблица распределения памяти в системе сегментации.
Длины, конечно, были бы выражены в реальной двоичной форме, а не в указанной
здесь стенографической записи. Для указания состояния, вероятно, был бы
использован просто одноразрядный флажок.
Введение сегментов действительно обеспечивает довольно
эффективную загрузку программ по той простой причине, что
сегменты по своему размеру меньше законченных программ и
поэтому могут размещаться в небольших «просветах» памяти. Техника
сегментации до некоторой степени ориентирована на участие
программиста в том отношении, что возможность использования
сегментов различной длины позволяет учитывать особенности
логической структуры программы; используя, например, 24-разрядный
адрес, можно было бы выделить восемь старших из них под номер
сегмента, а 16 младших —под значение смещения, адресуя,
таким образом, до 256 сегментов, размеры которых могут
изменяться от нескольких ячеек до максимальной длины в 64К.
Страничная организация памяти
Путем сегментации программа разбивается на части в соответствии
с ее логической структурой, поэтому отдельные сегменты могут
весьма различаться по своей длине. Хотя максимальный размер
сегментов определяется числом разрядов, отводимых в адресе
под смещение, определяющим фактором разбиения программы
является удобство логической организации программы. Поэтому
)
310
Глава 15
Страница /-4/Г
Страница 2-4К
Страница УЧК
остается еще некоторая возможность дополнительной
фрагментации; если все сегменты окажутся слишком большими для того,
чтобы разместиться в свободном фрагменте памяти, то тем самым
какая-то часть памяти останется неиспользованной.
Страничная организация памяти состоит в разбиении
программы на части фиксированной длины, называемые страницами;
длина страницы обычно определяется особенностями аппаратных
средств и другими системными
факторами. Фирма IBM, например,
использует в своих системах страничной
организации памяти страницы двух
размеров: в 2К и в 4К. Из нашега
обсуждения механизма защиты
памяти в операционной системе OS/MFT
фирмы IBM ви, вероятно, помните,,
что память в этой системе
распределяется между программами
порциями емкостью в два К; отсюда — 2К-
байтовые страницы.
Программирующие на языке ассемблера конечно»
не могут не осознавать значения
числа 4К — оно определяет
максимальный адрес, сопоставляемый
одному регистру базы. При столь
коротких страницах и хорошо
согласованном спектре длин сегментов
с используемой системой
распределения памяти вероятность
возникновения неиспользованных областей памяти значительно
снижается.
За исключением того, что страницы имеют фиксированный
размер, реализация системы страничной организации памяти
почти идентична реализации системы сегментации. Программы
загружаются в память разрозненными страницами (рис. 15.6).
Адрес разбивается на две части (рис. 15.7) с номером страницы,
занимающим старшие разряды и смещением — в младших
разрядах; в процессе выполнения программы адреса динамически
преобразуются с помощью таблицы страниц программы (рис. 15.8).
То, что ранее называлось регистром размещения таблицы
сегментов, теперь будет называться регистром размещения таблицы
страниц.
Рис. 15.6. Загрузка
программы в системе со страничной
организацией памяти.
Номер страницы
Смещение
Рис. 15.7. Адресация в системе со страничной организацией памяти.
Сегментация, страничная и виртуальная память
311
Страница
Смещение
Страница
1
2
3
Начальный адрес
аааааа
bbbbbb
сссссс
Начальный адрес
а страницы плюс \
1 смещение равняется Г *\
^действительному '
адресу
ПерВая страница
Вторая страница
Третья страница
Четвертая страница
*
Рис. 15.8. Динамическое преобразование адресов в системе со страничной
организацией памяти.
В системе страничной организации памяти несколько легче
прослеживается распределение памяти; память просто делится
на ряд страниц фиксированной длины (рис. 15.9), при этом в
таблице описания страниц (рис. 15.10) состояние каждой страницы
(свободна или занята) задается одноразрядным флажком. При
необходимости определения адреса свободного фрагмента памяти
1
10
19
28
2
11
20
29
3
12
Ъь
30
4
13
22
31
5
14
23
32
6
15
24
33
7
16
25
34
8
17
26
35
9
18
27
36
Рис. 15.9. Память, разделенная на страницы.
312
Глава 15
программе главного планировщика или
программе-инициатору (или каким-либо их аналогам) достаточно найти в таблице
содержимого таблиц элемент с нулевым значением признака
состояния, присвоить соответствующую страницу загружаемой
программе и изменить значение признака состояния на единицу.
Следует заметить, что между этой таблицей содержимого страниц
и таблицей страниц программы, описанной выше, имеется
существенная разница. Таблица содержимого страниц используется one-
Оорядпобьш
номер страницы
1
2
3
4
5
В
7
S
3
10
11
12
Идентификатор
программы
Операционная система
Операционная система
Операционная система
Операционная система
Программа А
Программа В
Программа А
Программа С
•
Программа А
Программа С
Щ
Номер
страницы
б программе
1
2
3
4
1
1
2
1
3
2
Состояние
1
1
1
1
1
1
1
1
0
0
1
1
0
Рис. 15.10. Таблица содержания страниц.
рационной системой при распределении памяти, тогда как
таблицей страниц программ обеспечивается динамическое
преобразование адресов выполняемых программ, которые уже находятся а
памяти.
Как мы уже видели, некоторая потеря памяти неизбежна при
любой схеме ее распределения; страничная организация памяти
даже при фиксированных размерах модулей сталкивается с той
же проблемой, хотя и в несколько ином плане. Проблема
страничной организации памяти, если сформулировать ее как можно
проще, состоит в том, что любой фиксированный размер страницы
неизбежно оказывается не подходящим. Эта формулировка,
вероятно, требует небольшого пояснения. Программисты не
пишут своих программ частями фиксированной длины; почти; в
любой программе найдется по крайней мере одна страница,
используемая не полностью. Даже если в среднем это составляет 1К на
программу, то в системе мультипрограммирования, работающей с
10 программами, суммарная потеря памяти составит целых 10КГ
Сегментация, страничная и виртуальная память 313
Сегментация и страничная организация памяти
Как сегментация, так и страничная организация памяти
позволяют системе использовать небольшие разрозненные фрагменты
памяти. Мы уже отметили возможность случайной потери какого-
то объема памяти из-за того, что некоторая область оказывается
меньше минимального сегмента или вследствие того, что длина
программы в точности не равна длине страницы. Метод
сегментации, включающий разбиение программы на отдельные части,
реализующие в совокупности возложенную на нее функцию, в
большей степени рассчитан на применение программных средств.
Страничная организация памяти чаще всего основывается на
аппаратных средствах, обеспечивающих связь размера страницы с
принятой в системе схемой распределения памяти.
номер
сегмента
Номер
страницы
Смещение
Рис. 15.11. Структура адреса в системе сегментации и страничной
организации памяти.
у
Можно ожидать, что сочетание в одной и той же системе
сегментации и страничной организации памяти давало бы
наилучший эффект. В такой системе программа могла бы разбиваться на
логически законченные сегменты с последующим разбиением этих
сегментов на страницы фиксированной длины. При этом
программист мог бы планировать структурную сегментацию программы,
тогда как система обеспечивала бы ее постраничную загрузку,
В чем преимущество такого подхода по отношению к стандартной
системе сегментации? Если размещение какой-то программы в
связной области памяти не является непременным условием, то
почему это условие необходимо соблюдать и для сегмента? В
системе, включающей сегментацию и страничную организацию
памяти, упомянутое требование снимается, тем самым становится
возможным использование сравнительно небольших «просветов»
памяти для размещения наименьшего из сегментов.
Конечно, реализация подобного метода требует некоторых
затрат. Теперь в динамическом преобразовании адреса
используются две таблицы, при этом адрес составляется из трех частей:
номера сегмента, номера страницы и смещения (рис. 15.11).
Сначала, используя значение регистра размещения таблицы
сегментов, необходимо найти таблицу сегментов выполняемой
программы (рис. 15.12) и отыскать в ней строку, соответствующую номеру
сегмента. В свою очередь содержимое этой строки определяет
адрес таблицы страниц рассматриваемого сегмента, в которой
ложет быть найден адрес базы нужной страницы. Эти циклы обра-
314
Глава 15
Г
Сегмент
Страница
Смещение
Шпица сегментов
Сегмент
1
2
3
Адрес таблицы
страниц.
аааааа
bbbbbb
сссссс
d/м*
Абсолютный адрес равняется
действительному адресу
страницы плюс смещение
Таблица страниц
У
Страница
1
2
3
Действительный адрес
хххххх
УУУУУУ
ZZZZZZ
Таблица страниц
Страница
1
2
Действительный адрес
nnnnnn
mmmmmm
Таблица страниц
Страница
1
2
Действительный адрес
хххххх
SSSSSS
Рис. 15.12. Динамическое преобразование адресов в системе сегментации
и страничной организации памяти.
щения к памяти неизбежно снижают эффективность
функционирования системы.
Для минимизации затрат, вызванных реализацией
обсуждаемого метода,^многие системы, использующие принципы
сегментации и страничной организации памяти, применяют бустерные
аппаратные средства динамического преобразования адресов в
виде ряда специальных регистров, называемых регистрами
связных массивов. Прежде чем углубиться в обсуждение
реализации таких средств, вероятно, было бы полезным посвятить
несколько строк рассмотрению предпосылок к их разработке.
Еще в конце 18-го столетия итальянский экономист В. Парето,
изучив распределение капитала в Италии, пришел к выводу, что*
более 90% всех состояний приходится менее, чем на 10%
населения. Более общая форма этого результата стала известна под
названием закона Парето. Мы сталкиваемся ежедневно с примерами
проявления этого фундаментального принципа — очень большая
доля населения Земли живет на очень малой части ее территории;
очень малый процент населения использует очень большую долю»
мировой энергии; 80% фонда заработной платы компании
приходится на 20% ее служащих.
Сегментация, страничная и виртуальная память 315
Применяя этот закон к системам сегментации и страничной
организации памяти, было бы разумным полагать, что основная
доля операций по преобразованию адресов должна быть связана с
относительно небольшим числом страниц. Если задуматься, в
этом есть свой смысл. Обычно программы выполняются в
определенном порядке в соответствии с последовательным размещением
в памяти выполняемых команд, время от времени прерываемом
командами передач управления (к другой последовательности
команд); если некоторая команда выполняется в пределах данной
страницы, то весьма вероятно, что следующая команда этой
программы находится на той же самой странице.
Таким образом, мы вновь приходим к регистрам связных
массивов. Одновременно с исполнением команд в этих специальных
регистрах система может запоминать адреса базы нескольких
последних использованных страниц. Прежде чем приступить к
просмотру таблиц в стандартной процедуре динамического
преобразования адресов, можно попытаться найти нужный адрес базы
в этих регистрах; если это удается, то никакого дополнительного
преобразования адресов не требуется. Для экономии времени
просмотр содержимого этих регистров обычно выполняется
параллельно с основной обработкой.
Если требуемый адрес не может быть найден в регистрах
связных массивов, то, конечно, выполняется стандартная процедура
преобразования адресов с использованием таблиц сегментов и
страниц. Чтобы не занимать эти регистры «устаревшими»
адресами, модификация их содержимого часто выполняется в
процессе фактически осуществляемого преобразования адресов; при
этом адрес, полученный в результате только что выполненного
преобразования, становится содержимым регистра, хранившего
адрес базы самой первой «из числа текущих» страниц.Рассмотрим,
например, типичную страницу. При первой встречающейся в
программе передаче управления в эту страницу необходимо
выполнить динамическое преобразование адреса с использованием
таблиц; вслед за этой операцией адрес новой страницы
размещается в регистрах связных массивов. В процессе выполнения
последующих команд, расположенных на той же странице, адрес
базы остается в этих регистрах и очень быстрое преобразование
адресов осуществляется аппаратно. Наконец, в программе
встречается команда передачи управления в другую страницу, и тогда
вновь необходимо выполнить динамическое преобразование
адресов, при этом содержимое одного из регистров заменяется
значением нового адреса базы. Если, согласно логике программы,
управление в исходную страницу не возвращается, то к
некоторому моменту времени содержимое всех регистров связного
массива будет соответствовать более «новым» страницам по
сравнению с содержимым регистра, соответствующим данной странице;
316
Глава 15
таким образом, адрес базы данной страницы становится первым;
который будет вытолкнут из массива, освобождая место для
адреса новой страницы. Действительная реализация описанной
процедуры может, конечно, осуществляться разными изготовителями
по-разному. Некоторые используют чисто аппаратную
реализацию стеков и очередей. Другие вместо специальных регистров
используют ячейки основной памяти и вводят особые команды
для обращения к такого рода «регистрам». Третьи применяют
алгоритмы и соглашения, ограничивающие максимальное число
адресов базы, используемых в одной программе в качестве
«текущих». Однако основной принцип реализованного аппаратно
преобразования адресов «наиболее часто используемых» страниц
является общепринятым.
Распределение памяти реализуется в основном так же, как в
страничной системе организации памяти, при этом организация
таблицы содержимого страниц является функцией операционной
системы. Напомним еще раз, что таблица содержимого страниц
используется операционной системой в процессе распределения
памяти и не имеет никакого отношения к фактическому
выполнению загруженных в память программ.
Системы сегментации и системы страничной
организации памяти
Выводы
Основная цель сегментации и страничной организации памяти,
используемых порознь или в сочетании друг с другом, состоит в
том,* чтобы разбить программу на сравнительно небольшие части,
которыми можно заполнить случайно распределенные несвязные
фрагменты памяти. Несвязное размещение программ в памяти,
характерное для таких систем, предполагает ту или иную форму
динамического преобразования адресов, так как нельзя
рассчитывать на то, что программисты смогут точно учесть расположение
страниц и сегментов их программ. Конечным результатом этих
усилий является увеличение числа программ, получающих
доступ к CPU при том же объеме суммарной памяти; это повышает
эффективность системы.
Некоторые языки, например ПЛ/1 и язык ассемблера,
обладают структурами, позволяющими программисту самостоятельно
определять границы сегментов, и в будущем средства,
аналогичные блоку BEGIN языка ПЛ/1, вероятно, будут содержаться и
в других языках. Однако, если внедрение сегментации и/или
системы страничной организации памяти связывать с их
влиянием на стоимость всей системы, то операции, связанные с
разбиением программ, следует отнести к функциям операционной
системы, осуществляемым практически без участия программиста;.
Сегментация, страничная и виртуальная память 317
в противном случае, какое бы то ни было возрастание
эффективности системы, вероятно, оказалось бы невозможным из-за
увеличения времени программирования и отладки.
Мы уже отмечали возможность появления неиспользованное
адресного пространства, включающего «просветы» памяти, в
которых нельзя разместить даже наименьший из сегментов, или
связанного .с прогоном всего объема страницы. Другой источник
потенциальных потерь памяти связан с довольно
распространенным мнением, заключающимся в том, что выполнение программы
не может быть начато прежде, чем будут размещены в памяти все
ее команды. Для хранения нескольких лишних страниц или
законченного сегмента вполне достаточно блока памяти в 10К, но
если нет таких программ, полная длина которых меньше или
равна 10К, то нет смысла загружать и часть программы, коль скоро
ее выполнение осуществимо только при наличии в памяти всей
программы. Ниже будет доказано, что такое представление
совершенно неверно.
Виртуальная память
Мы уже видели, что загрузка программ в связные области
памяти является обязательным условием их правильного
выполнения. Кроме того, нам известно, что CPU может выполнять в
каждый момент времени только одну команду. В этом разделе
мы попытаемся разобраться в следующем вопросе: необходимо
ли присутствие в памяти всех команд данной программы для ее
правильного выполнения?
Нам уже встречались случаи, когда не требовалось
выполнения обсуждаемого условия. Помните оверлейные структуры,
которые мы рассматривали, анализируя основные представления
второго поколения вычислительных систем? А что можно сказать а
связи с процессированием подзадач, предусматривающим по мере
необходимости развертывание законченных программных модулей?
Принципы сегментации и/или страничной организации памяти
представляют собой почти идеальную основу для реализации
системы, обеспечивающей то, что в любой момент времени в
основной памяти присутствует лишь часть программы. Используя уже
рассмотренные идеи развертывания и свертывания, почему бы не
ограничиться одновременной загрузкой лишь одной-двух
страниц программы, храня остальную ее часть на каком-нибудь
устройстве прямого доступа? В этом и состоит суть системы
виртуальной памяти (рис. 15.13).
Эта идея не новая. Еще в начале 60-х годов (доисторическая
эра, если говорить о вычислительных машинах) для
математического обеспечения вычислительных машин серии 5000 фирма
Burroughs разработала вполне законченную систему виртуальной
318
Глава 15
памяти (тогда ее еще не называли виртуальной). В 60-х годах
виртуальная память использовалась в машинах UNIVAC и
GE/Honeywell. Впервые термин «виртуальная память» был
введен в употребление в 1970 г. компанией RCA. Однако важнейшей
датой в истории развития концепции виртуальной памяти
оказалось 2 августа 1972 г., когда фирма IBM заявила о создании своих
Рис. 15.13. Концентрация виртуальной памяти.
вычислительных машин серии Система/370. Впервые основно
изготовитель вычислительных машин на Западе принял решени
использовать-концепцию виртуальной памяти в качестве важней
шего элемента в целом семействе машин.
Слово «виртуальный» означает «отличный от реального»;
таким образом, виртуальная память — память, существующая
наряду с реальной. Принцип использования системы виртуальной
памяти состоит приблизительно в следующем. Программы
пишутся так, как если бы для них отводилось практически
неограниченное адресное пространство основной памяти, но хранятся на диске
или барабане. Как и в основной памяти, в устройствах прямого
доступа элементы памяти адресуются последовательно, так что
адрес данной программы или модуля на диске или барабане ана-
Сегментация, страничная и виртуальная память
319
логичен адресу, определяющему их реальное размещение в
основной памяти. Адресуемое пространство такого рода устройства
«виртуальной памяти» делится на сегменты и/или страницы, и
небольшое число страниц каждой из нескольких выполняемых
программ считывается в «реальную память», при этом средствами
динамического преобразования адресов, которые мы уже
обсуждали ранее, обеспечивается соответствие между виртуальными
На диске
Сег. 0
1
2
J
4
5
6
> Операционная систем
W2K
Программа А
128К
Программа б
128К
7 ' Программа C-6W
8
9
10
11
12
4
• Программа D
192К
Программа В
96К
Страница 0
Страница 1
Страница 2
Страница 3
Страница 4
Страница §•
Страница 6
Страница 7
Рис. 15.14. Использование виртуальной памяти в нашем примере,
адресами и реальными. Когда все команды, составляющие неко
торую страницу, оказываются выполненными, эта страница может
быть процедурой свертывания возвращена в виртуальную память,
а процедурой развертывания заменена в основной памяти новой
страницей. Таким образом, основную память занимает лишь та
часть программы, которая фактически находится в процессе
выполнения, вследствие чего меньшая доля основной памяти
оказывается в пассивном ожидании каких-либо действий с участием
хранящихся в ней команд или данных.
Пусть в нашей системе виртуальной памяти хранятся
программы, изображенные на рис. 15.14, — операционная система и
пять прикладных программ. Именно в такой последовательности
составляющие нашей системы памяти хранятся и на диске.
Отметим схему адресации, используемую в данной системе виртуальной
памяти (рис. 15.15); она очень напоминает схему адресации в
системе сегментирования и страничной организации памяти, рассмот-
320
Глава 15
ренной нами несколько выше. Адресное пространство нашей
виртуальной памяти занимает на диске около 800К адресуемых
элементов; программа D, к примеру, в действительности требует
лишь 150К, однако для упрощения адресации сегментов ей
отведена область в 192К, — в конце концов, ведь речь идет только о
виртуальной памяти.
Номер
сегмента
Номер
страницы
Смещение
Рис. 15.15. Адрес в системе с виртуальной памятью.
Операционная система может использовать размещенные в
занимаемой ею области реальной памяти таблицу содержания
страниц реальной памяти (рис. 15.16) и ряд таблиц сегментов и
страниц, определяющих все доступные страницы виртуальной памяти
(рис. 15.17). Приступая к операции пересылки некоторой
страницы из виртуальной памяти в реальную, система прежде всего
просматривает таблицу содержания страниц для определения
адреса доступных страниц; после того как страница найдена, соот-
Страница
о
1
2
3
4
5
6
7
8
9
10
11
Программа
OS
OS
OS
OS
OS
OS
OS
A
в
X
в
D
Сегменты и страницы программы
о
о
о
о
о
о
о
3
2
1
2
5
0
1
2
3
4
5
6
5
9
1
1
12
Состояние
1
1
1
1
1
1
1
'1Ч
о
1
Свободная
страница
Рис. 15.16. Реальная память — таблица содержания страниц.
ветствующий признак состояния в таблице содержания страниц
принимает значение «занято», и затем выполняется фактическая
операция считывания страницы. С завершением этой операции
выбранная страница программы занимает соответствующую
страницу реальной памяти, а адрес этой страницы вносится в
таблицы сегментов и страниц.
В процессе выполнения команд, соответствующих данной
странице, адреса, выраженные в терминах виртуальной памяти,
преобразуются в реальные адреса согласно следующей
последовательности действий:
Сегментация, страничная и виртуальная память
321
1. Обращение к таблице сегментов по ключу, в качестве
которого используются старшие двоичные разряды адреса.
2. Определение адреса соответствующей таблицы страниц с
помощью хранящегося в таблице указателя.
3. Обращение к этой таблице страниц с помощью ключа,
составленного из средних двоичных разрядов адреса.
Регистры размещения
таблиц сегментоб
Операционная система
Программа А
Программа В
Программа С
Программа В
Программа К
Сегмент
О
1
Адрес табл.
страниц
aaaaaa
ЪЬЬЪЬЬ
Сегмент
О
1
Адрес табл.
страниц
тттттт
пппппп
Сегмент
О
Адрес табл.
страниц
ГГТГГГ
Сегмент
Адрес табл.
страниц
Сегмент
Адрес табл.
страниц
Сегмент
Адрес табл.
страниц
Страница
Адрес
Рис. 15,17. Реальная память — таблицы сегментов и страниц.
4. Сложение смещения, занимающего младшие двоичные
разряды виртуального адреса, с адресом базы, найденным в таблице
страниц.
В большинстве систем этот довольно утомительный процесс
преобразования адресов упрощается благодаря использованию
регистров связного массива.
Что происходит, когда значению виртуального адреса
отвечает страница, отсутствующая в реальной памяти? Каким образом
система «узнает», находится ли данная страница в реальной или
виртуальной памяти? В таблицах сегментов и страниц вводится
одноразрядный флажок, называемый (по крайней мере в систе-
11-821
322 Глава 15
мах IBM) «битом запрета». Если флажок «убран» (нулевое
значение разряда), то страница принадлежит реальной памяти; если
он «установлен» (единичное значение разряда), страница
находится в виртуальной памяти. Когда средствами динамического
преобразования адресов нашей машины в конце процедуры
преобразования обнаруживается единичное значение этого
двоичного разряда, констатируется ситуация «страничной
недостаточности» и инициируется прерывание (может быть, в форме
специального обращения к супервизору или какого-либо особого типа),
обеспечивающая связь с модулем операционной системы,
выполняющим операцию ввода страниц.
Что, если в результате просмотра таблицы содержания
страниц, устанавливается отсутствие доступной реальной памяти
для размещения новой страницы? Это означает, что какая-то
страница должна быть выведена из реальной памяти. Известны
реализации многих различных схем и алгоритмов выбора
освобождаемых страниц (в предыдущих главах в подобном случае мы бы
воспользовались термином «свертываемых» — это то же самое
понятие), от простых правил LIFO («последним вошел — первым
вышел») и FIFO («первым вошел — первым вышел») до более
сложных процедур выявляющих наименее часто используемые
страницы.
Внесение в реальную память страниц, инициируемое лишь в
момент фактического обращения по их виртуальному адресу в
кодах программы, уже находящейся на странице реальной
памяти, известно как страничный обмен по запросу. В альтернативном
подходе используются некоторые методы прогнозирования
потребности в новой странице и считывание ее в реальную память
до фактического обращения к ней; этот подход, известный как
«опережающий обмен страницами», представляется идеальным и,
очевидно, довольно трудным в реализации. Здесь могли бы
оказаться полезными строгие нормы программирования,
реализованные, быть может, в форме специальной компилирующей
программы. Если сегменты программы действительно определяются на
основе логических связей между ее составляющими, то специально
разработанным супервизором процесса введения страниц в
реальную память можно было бы обеспечить выполнение команд
программы, расположенных на «очередной» странице, с помощью
упреждающего считывания нескольких следующих страниц из
того же самого сегмента.
В системах виртуальной памяти программисту часто
предоставляется также возможность назначения важнейших
подпрограмм (соответствующие им страницы определяются системой),
которые должны оставаться в реальной памяти в течение всего
времени жизни данного шага задания. Если подпрограмма
действительно является часто используемой, то та же цель, вероятнол
Сегментация, страничная и виртуальная память 323
могла бы быть достигнута с помощью любого правила выведения
«наименее часто используемых» страниц, но хорошо
осведомленным программистам хотелось бы иметь возможность получения
«проверяемых гарантий».
Вы, может быть, отметили, что в схемах, изображенных на
рис. 15.14, 15.16 и 15.17, операционной системе отводятся в
виртуальной и реальной памяти одни и те же разделы.
Подпрограммами операционной системы решаются такие задачи, как
динамическая модификация канальных программ, при этом в ссылках
часто используются абсолютные адреса (например, указатель
адреса CVT находится в памяти по байтовому адресу 16); так как
предъявляются особые требования к моделям операционной
системы, весьма важно, чтобы операционная система загружалась
в связную область реальной памяти. В большинстве систем
виртуальной памяти принято правило «виртуальный = реальный»,
согласно которому определенные модули или страницы
размещаются в реальной памяти таким образом, чтобы значения их
виртуальных и реальных адресов совпадали. Как вы, может
быть, заметили, мы никогда не утверждали, что операционная
система должна размещаться в основной памяти, начиная с
нулевого адреса; часто так и делается, но, вообще говоря, не
обязательно. Это обстоятельство приобретает важное значение, когда
мы обращаемся к рассмотрению составной виртуальной памяти.
Составная виртуальная память
В гл. 14 упоминались системы разделения времени с удаленными
терминалами, при этом к функциям одной из программ раздела
переднего плана относилось отслеживание состояния активных
программ многочисленных пользователей одного и того же
раздела; мы назвали системы такого типа аналогами операционных
систем, управляемых другими операционными системами. По
существу подобные взаимосвязи, но в более широких масштабах
реализуются в системе обеспечения составной виртуальной
памяти; здесь подразумевается мультипрограммирование на уровне
операционных систем.
Допустим, что в системе, изображенной на схеме рис. 15.18,
выделены три раздела. Раздел 1 отводится для хранения главной
операционной системы, обеспечивающей в конечном итоге
функционирование всех остальных систем. Раздел 1 имеет свою
собственную систему виртуальной памяти, управляемую
операционной системой типа OS/MFT; к функциям данной виртуальной
операционной системы относится управление всеми событиями,
происходящими в реальной памяти раздела 1, которая (для этой
операционной системы) начинается с нулевого адреса. Раздел 2
также имеет свою собственную систему виртуальной памяти, уп-
11*
32<
Глава 15
равляемую какой-то другой операционной системой. В такой
системе существует два набора таблиц сегментов и страниц, а также
таблиц содержания страниц; одна из основных функций главной
операционной системы состоит в обеспечении соответствия
значений различных регистров размещения таблиц истинным адресам
этих таблиц. За исключением несколько более усложненной
процедуры преобразования адресов, управление составной
виртуальной памятью не многим сложнее управления одиночной
виртуальной памятью.
Виртуальная память
раздела О
Раздел О
Главная операционная
система
Раздел 1
под управлением
QS/MFT
Раздел 2
под управлением
Ж
Виртуальная память
раздела 1
Виртуальная память
раздела!
Рис. 15.18. Составная виртуальная память.
Тем не менее возникает новая проблема — управление
операциями ввода — вывода. Каждая индивидуальная операционная
система, занимающая в памяти не только область, отводимую
первичной управляющей программе, содержит список виртуальных
устройств ввода и вывода; в нашем примере, соответствующем
рис. 15.18, вполне возможно одновременное обращение обеих
виртуальных операционных систем к устройству 01 в канале 00.
Окончательное разрешение подобных конфликтов остается за
главной управляющей программой, преобразующей виртуальные
адреса каналов и устройств, используемых вторичными
операционными системами, в реальные адреса каналов и устройств.
Подход, использующий составную виртуальную память,
характеризуется одним очень важным преимуществом.
Представьте себе, сколько различных программ могут при этом
обрабатываться одновременно!
Сегментация, страничная и виртуальная память 325
Многие уровни реальной памяти
Системы виртуальной памяти включают по крайней мере два
уровня памяти — хорошо известную нам память на сердечниках
и то или иное устройство прямого доступа типа барабана или
диска. По мере развития электронной техники начинают находить
применение новые типы памяти на основе монолитных
интегральных схем. Они отличаются сверхвысоким быстродействием —
много большим, чем быстродействие стандартной памяти на
сердечниках, — что вполне соответствует современным типам СРИ,
использующим столь же быстродействующие электронные
элементы.
В некоторых из наиболее современных и мощных
вычислительных машин для повышения их быстродействия и эффективности
обработки данных используются три уровня памяти. Один из
крайних уровней составляет виртуальная память на
каком-нибудь устройстве прямого доступа — для этой цели часто
используется диск, однако весьма привлекательна с этой точки зрения
быстродействующая память на барабане. Следующий уровень
составляет стандартная память на сердечниках — с более высоким
быстродействием, чем память на барабане, однако значительно
уступающая в скорости более современным типам памяти.
Наконец, третий уровень составляет высокоскоростная память, с
которой оперирует СРИ. Система реализована таким образом, что
страница начинается в области виртуальной памяти малого
быстродействия. Монитор, управляющий процедурой введения
страниц, обеспечивает считывание этой страницы в память на
сердечниках. Оказавшись в основной памяти, непосредственно перед
исполнением, страница переписывается в высокоскоростную
память.
В настоящее время память на интегральных схемах несколько
дороже памяти на сердечниках — не будь это так, память на
сердечниках вообще уже вышла бы из употребления. Применение
иерархически организованной памяти позволяет за умеренную
плату пользоваться преимуществами быстрой памяти на
интегральных схемах. Благодаря тому что сначала происходит
обращение к стандартной памяти на сердечниках, исключается
возможный «простой» высокоскоростной памяти, вызванный
ожиданием завершения операций ввода — вывода при использовании
«медлительного» барабана. Наблюдается, однако, тенденция к
снижению стоимости элементов на интегральных схемах; хорошим
примером этому может служить изменение цен на карманные
калькуляторы, в которых используются те же самые электронные
схемы. С течением времени, если эта тенденция сохранится,
память на интегральных схемах всюду заменит память на
магнитных сердечниках.
326 Глава 15
Методы доступа к виртуальной памяти
Страничная организация памяти обусловливает необычную форму
прямого доступа. Предположим, например, что виртуальная
память физически размещается на диске. Необходимо выполнить
преобразование адреса сегмента или страницы (пользуясь
таблицами или некоторым методом рандомизации) в относительный
адрес, который затем может быть использован для вычисления
абсолютного адреса на диске; в последующем страница как запись
фиксированной длины пересылается из устройства прямого
доступа в основную память. Аналогичные задачи преобразования
адреса сегмента или страницы в адрес физического устройства
возникают при любом другом выборе устройства прямого доступа
в качестве физического носителя страниц. И все же независимо
от выбора физического устройства программист пользуется
простым представлением последовательных виртуальных адресов,
весьма похожих на старые добрые адреса в реальной
памяти.
Задачу преобразования адресов можно было бы решить
средствами какого-либо стандартного метода доступа, например с
помощью метода базисного прямого доступа, однако следует
учитывать, что здесь мы имеем дело с пересылкой программных
команд. И хотя обмен станицами является всего лишь некоторой
операцией ввода — вывода, последняя имеет определяющее
значение, и очень важно, чтобы она выполнялась с максимальной
эффективностью. Медленные операции ввода — вывода данных,
используемые одиночной программой, оказывают влияние только
на выполнение данной программы, но медленный ввод — вывод
в операциях обмена страницами, обеспечивающих пересылку
команд прикладной программы, оказывает влияние на
эффективность всей вычислительной системы. Поэтому не удивительно,
что большинство систем виртуальной памяти обеспечивается
некоторым методом доступа специального назначения, реализующим
процедуры обмена страницами с максимально возможной
эффективностью.
Часто наряду с такого рода методами доступа используются
специальные бустерные аппаратные средства; не исключается даже
возможность преимущественно аппаратной реализации. В наше
время виртуальные методы доступа (подобные VSAM)
применяются как для обеспечения обычных прикладных операций
хранения и поиска информации, так и для обмена страницами.
Рассмотрим вкратце виртуальный метод доступа. В нем
предусматривается обработка данных порциями фиксированного
объема — страницами. Это ограничивает гибкость виртуального
метода доступа, однако названный недостаток не является
критическим.
Сегментация, страничная и виртуальная память 327
Положительной стороной виртуального метода доступа
является преобразование виртуальных адресов в любой тип адреса
памяти прямого доступа, обеспечивающий поиск страницы в
физическом устройстве виртуальной памяти, будь то диск, барабан
или какое-либо иное устройство прямого доступа, которое, быть
может, еще и не разработано. Другими словами, виртуальный
метод доступа является аппаратно независимым. Это очень важно!
Используя VSAM, программист по существу может рассчитывать
на то, что его данные хранятся в какой-то виртуальной памяти,
и адресовать данную запись просто указанием относительного
номера начального байта точно так же, как адресуются элементы
памяти на магнитных сердечниках. Метод VSAM обеспечит
фактическое преобразование в физические адреса. Допустим, что
стоимость памяти на интегральных схемах продолжает снижаться,
оказываясь в какой-то момент времени дешевле памяти на диске
или барабане. Для применения метода VSAM это не вызывает
каких-либо проблем — мы попросту используем старые
виртуальные адреса данных как реальные адреса данных в новом
устройстве и продолжаем прежнюю обработку. Что можно сказать
о методе ISAM? Стоит ли и дальше использовать адреса цилиндров
и дорожек, когда у нас уже нет ни цилиндров, ни дорожек?
Примеры из истории вычислительной техники подтверждают большую
целесообразность применения аппаратно независимых методов
доступа.
Еще одно, последнее, замечание относительно использования
VSAM. Изготовитель вычислительной машины с виртуальной
памятью почти неизбежно вынужден разрабатывать более
эффективные средства обмена страницами. Это означает, что, вероятно,
будут созданы новые бустерные аппаратные средства обеспечения
функций обмена страницами в форме либо новых возможностей
СРИ, либо новых средств микропрограммирования, либо новых
устройств ввода — вывода. В методе доступа, подобном VSAM,
любые из этих бустерных аппаратных средств могут
использоваться с целью достижения более высокой эффективности
операций ввода — вывода данных.
В наше время метод VSAM предлагается как средство
обеспечения операций ввода — вывода в прикладных программах. Его
применение расширяется, по мере того как все большее число
пользователей начинает понимать его преимущества. Если
представляется целесообразным адресовать память машины с помощью
последовательно нумеруемых наборов байтов или символов и
делить программы на страницы, которые могут храниться в
устройстве виртуальной памяти и пересылаться (считываться) в
реальную память по мере необходимости, и если при такой
организации основной памяти по-прежнему обеспечивается наиболее
эффективная работа машины! то не естественно ли использовать
328 Глава 15
точно такую же организацию и для обработки данных? Метод
VSAM, так же как и виртуальная память, требуется не каждому,
хотя развитие виртуальных методов доступа обещает
действительно существенное повышение эффективности
программирования операций ввода — вывода для многих практических
применений.
Преимущества сегментации, страничной организации памяти
и виртуальной памяти
Важнейшим с практической и экономической точек зрения
преимуществом сегментации, страничной организации памяти и
виртуальной памяти является лучшее использование доступной
реальной памяти, означающее, что потенциально большее число
программ может получить доступ к CPU, обеспечивая тем самым
более высокую загрузку последнего. Это особенно ясно
проявляется в отношении рассмотренных выше систем составной
виртуальной памяти; значение отмеченного фактора будет постоянно
расти по мере развития электронно-вычислительной техники и
появления процессоров все большего и большего быстродействия.
Вопрос, который, вероятно, у вас возникает, касается защиты
памяти. В предыдущих главах мы видели, что поле ключа
защиты PSW в машинах фирмы IBM имеет всего четыре двоичных
разряда; каким образом при этом может быть реализована защита
памяти для более чем 16 программ? Это делается довольно просто.
Все процедуры преобразования адресов используют ряд таблиц
сегментов и страниц; дополнительный уровень защиты памяти —
скорее всего в виде еще нескольких двоичных разрядов защиты
памяти — может быть обеспечен именно здесь. Другие
преимущества касаются интересов программиста. В системе виртуальной
памяти практически отсутствует ограничение на размер
программы. Программист освобождается от тягот, связанных с
планированием оверлейных структур и подгонки программы к
ограниченному размеру раздела; эти функции обеспечиваются системой.
Определенные преимущества имеет и сама вычислительная
система — программы занимают лишь ту память, в которой они
действительно нуждаются.
Однако важнейшими являются выгоды экономического
характера. Обеспечение доступа к вычислительным ресурсам большему
числу программ означает, что основная память, представлявшая
собой основной лимитирующий фактор при
мультипрограммировании, перестает быть таковой. С использованием виртуальной
памяти оперативная память становится практически
неограниченной.
Сегментация, страничная и виртуальная память 329
Проблемы сегментации, страничной организации памяти
и виртуальной памяти
Вспомним еще раз, что даром ничего не дается; применение новых
методов связано с новыми расходами вычислительных ресурсов
и новыми проблемами. Вероятно, наиболее очевидными являются
возросшие дополнительные расходы во время функционирования
системы, так как реализация возможностей страничной
организации памяти требует дополнительного времени, а таблицы
сегментов и страниц занимают определенное место в памяти.
Динамическое преобразование адресов также выполняется не мгновенно;
благодаря использованию регистров связного массива расходы
вычислительных ресурсов уменьшаются, но полностью не
исключаются. Весьма значительные размеры новых операционных
систем виртуальной памяти с расширенными функциями требуют
еще больших затрат.
Несомненно, что быстродействие центральных процессоров
постоянно возрастает. По мере того как в том же темпе возрастает
быстродействие элементов памяти, а длительность циклов
снижается до наносекундного уровня и ниже, потери времени,
связанные с выполнением модулей операционной системы, окажутся
пренебрежимо малыми, приближаясь к типичным временным
параметрам, характерным для аппаратно реализованных
процессов, при значительно большей гибкости. Это не означает, что
накладные денежные расходы исчезают, просто их выявление станет
несколько более сложным.
Качественно новую проблему в системах виртуальной памяти
составляет «пробуксовывание». Если реальная память занята
полностью (или почти полностью), то запрос новой страницы
означает, что, прежде чем она может быть записана в память,
необходимо вывести какую-то другую страницу. Если в течение
заданного промежутка времени такое случается часто, система
оказывается настолько занятой этими операциями ввода и вывода
страниц, что на выполнение полезной работы остается лишь малая
часть времени. Подобное явление называется пробуксовыванием.
Некоторые системы оснащены средствами распознавания такого
рода ситуаций и принятия необходимых корректирующих
действий, быть может выводя из реальной памяти на время
перегруженности системы одну или несколько программ, хотя и в этом случае
пробуксовывание сказывается отрицательно на
производительности системы.
Отрицательное влияние на производительность системы может
оказывать также организация программы. Рассмотрим например
следующий простой фрагмент Фортран-программы:
10 X = Х+ 1
15 AGCUM = AGCUM+Y
330 Глава 15
20 IFOt-25) 10, 10, 30
30 AVG = ACCUM/X
и предположим, что по чистой случайности страница 0
оканчивается командой 15 и страница 1 начинается командой 20. Программа,
очевидно, будет перескакивать со страницы на страницу, что не
вызывает каких-либо трудностей, если обе страницы находятся в
реальной памяти. Но вдруг это не так? Имея в виду это замечание,
попытайтесь представить себе программу, в которой управление
передается от модуля к модулю, перескакивая при этом через
тысячи ячеек памяти; для системы виртуальной памяти такая плохо
спроектированная программа была бы настоящим стихийным
бедствием. Бывают ли такие программы? Спросите любого программиста.
Как можно этого избежать? Здесь могут быть полезны
специальные компиляторы, однако всей проблемы они не решают — ни
один системный программист, вероятно, не сможет предвидеть все
возможные ошибочные ситуации, возникающие в результате
некорректно составленных прикладных программ. Представляется,
что ответ на этот вопрос следует связывать с дисциплиной
программирования, накладывающей определенные ограничения на
многие «программистские вольности», так настойчиво
проповедуемой поставщиками виртуальной памяти. В этом отношении
наиболее полезными могли бы оказаться концепции нисходящего и
структурного программирования.
Значение виртуальной памяти. Если для данной
вычислительной системы эффективное использование машин третьего
поколения оказывается практически невозможным из-за ограниченного
объема основной памяти, то применение виртуальной памяти
может явиться идеальным решением проблемы. Если в какой-либо
другой вычислительной системе постоянно ощущается
возрастающая потребность в памяти, то она может быть удовлетворена
благодаря использованию виртуальной памяти. Если необходим
центральный процессор более высокого быстродействия, то может быть
целесообразным использование современной вычислительной
машины, оснащенной средствами обеспечения виртуальной памяти,
однако без использования всех виртуальных возможностей.
Виртуальная память не повышает быстродействия машины,
она просто обеспечивает более высокую степень
мультипрограммирования за счет лучшего использования доступной реальной
памяти. Пользователь может перейти от машин серии IBM/360 к
машинам серии IBM/370 и обнаружить заметное уменьшение времени
обращения. И это не удивительно, так как машины серии IBM/370
обладают большим быстродействием, определяемым не
использованием виртуальной памяти, а современными техническими
решениями. Стоит ли виртуальная память связанных с нею затрат?
Для многих пользователей стоит, но не для всех.
Сегментация, страничная и виртуальная память 331
Краткие выводы
В этой главе мы рассмотрели многие из основных понятий,
касающихся систем сегментации, страничной организации памяти и
виртуальной памяти. Процессом сегментации программа разбивается
на сегменты различной длины, которые могут загружаться в
память, занимая несвязные области и обеспечивая, таким
образом, использование разрозненных фрагментов свободной
памяти. Динамическое преобразование адресов реализуется с помощью
ряда таблиц сегментов. Страничная организация памяти
аналогична сегментации, за тем исключением, что страницы имеют
фиксированную длину, выбор которой в большей степени обусловлен
особенностями машины, чем логической структурой программы.
В системах сегментации и страничной организации памяти
несколько усложняется распределение памяти; в условиях страничной
организации памяти оно реализуется с помощью так называемых
таблиц содержания страниц.
В системах, включающих как сегментацию, так и страничную
организацию памяти, стремятся совместить лучшие свойства обоих
подходов. При этом программы разбиваются на логически
законченные сегменты, которые, однако, загружаются постранично,
обеспечивая тем самым использование малых областей основной
памяти.
Основная идея виртуальной памяти лучше всего может быть
выражена в форме вопроса: зачем загружать в основную память всю
программу, если в каждый момент времени CPU может выполнять
только одну команду? В такого рода системе программа,
разделенная на сегменты и/или страницы, хранится в запоминающем
устройстве прямого доступа и по мере необходимости отдельными
страницами считывается в память. Существующие
вычислительные машины допускают также реализацию составной виртуальной
памяти.
Большое достоинство этих методов состоит в том, что они
обеспечивают лучшее использование основной памяти, означающее
увеличение числа программ, одновременно получающих доступ к
ресурсам CPU, что в свою очередь означает лучшее использование
центрального процессора. Существенным недостатком применения
названных методов является возросшая стоимость накладных
расходов.
УПРАЖНЕНИЯ
1. Что означает фрагментация памяти?
2. Поясните процедуру динамического преобразования адресов
в системе сегментации.
3. Поясните процедуру динамического преобразования
адресов в условиях страничной организации памяти.
332 Глава 15
4. Поясните разницу между таблицей страниц программы и
таблицей содержания страниц. Соотнесите эти два понятия с
управлением заданиями и управлением задачами.
5. Поясните функции регистров связного массива.
6. Поясните связь между концепцией развертывания —
свертывания и виртуальной памятью.
7 • В чем разница между введением страниц по запросу и
опережающим введением страниц?
8. Что такое пробуксовывание?
ф
\
Часть V
СИСТЕМЫ СПЕЦИАЛЬНОГО НАЗНАЧЕНИЯ
И ИХ ПРИМЕНЕНИЕ
Введение к части V
В предыдущих главах книги мы рассмотрели ряд операционных
систем общего назначения, поставляемых изготовителями
вычислительных машин и предназначенных для использования в широком
спектре прикладных задач. Не трудно понять, почему эти
операционные системы создаются как системы общего назначения —
разработка такого рода пакетов программного обеспечения стоит
дорого, и затраты окупаются только продажей многих
экземпляров, а чтобы продать много экземпляров, необходимо обеспечить
достаточно широкий спектр применения. В определенных пределах
такие операционные системы допускают изменение
индивидуальных характеристик — могут быть* назначены те или другие
хранящиеся в основной памяти и транзитные модули, заново
определены приоритеты, распределена память и т. д. Однако
проектирование математического обеспечения для применения в широком
спектре прикладных задач и различных наборов заданий означает, что
во многих случаях в условиях работы конкретного пользователя
определенные функции такой операционной системы используются
весьма редко.
Некоторые практические применения не укладываются в
рамки типичных случаев, предусматриваемых стандартной
операционной системой. В гл. 16 мы рассмотрим одно из таких применений—
управление процессом промышленного производства. В этом
случае ущерб от производственных простоев, связанный с
неадекватностью функций, выполняемых вычислительной машиной,
может значительно превысить стоимость самой машины, и,таким
образом, надежность, время ответа и доступность оказываются куда
более важными критериями по сравнению с обычными для систем
общего назначения показателями эффективности — пропускной
способностью и временем обращения. Функция управления
производственным процессом не требует выполнения длинных заданий
вычислительного характера или заданий, характерных для
режима пакетной обработки; таким образом, некоторые возможности
операционной системы общего назначения здесь оказываются
ненужными. Многие функции стандартной операционной системы
при ее практических применениях, отличающихся столь ограни-
334 Глава 15
ченным спектром заданий, по существу оказываются лишней
обузой—чистыми накладными расходами. В подобных случаях
требуется функционально упрощенный вариант операционной системы,
содержащей лишь те средства, которые абсолютно необходимы.
В гл. 17 обсуждаются информационные системы управления.
В этих системах высокие требования к сохранности и точности
данных в сочетании с требованиями по обеспечению гибкого и в то же
время контролируемого доступа к базам данных предполагают
наличие функций операционной системы, выходящих за пределы
возможностей систем общего назначения. Мы рассмотрим два типа
средств программного обеспечения, пользующихся в последние
годы возрастающей популярностью — управление базами
данных и управление передачей данных.
В гл. 18 мы кратко рассмотрим один, очень специальный класс
применения вычислительных машин, предполагающий наличие
многомашинного комплекса, используя при этом в качестве
конкретного примера работу автоматизированной системы контроля
современного универсама. В данной главе не будут вводиться
какие-либо новые понятия, характеризующие операционные
системы; представленный здесь материал скорее служит иллюстрацией
того, что многие функции, реализуемые средствами
операционных систем, могут быть обеспечены и другими способами.
Последняя, гл. 19 содержит краткие выводы, относящиеся ко
всей книге.
Тема излагаемого ниже раздела проста. Назначение
операционной системы состоит в том, чтобы максимизировать использование
системных аппаратных средств, математического обеспечения и:
данных. Термин «максимизировать» означает «обеспечить
возможно лучше»; но «лучшее», как известно, является относительный
понятием. Если критерии эффективности, принятые в данном
вычислительном центре, согласуются с критериями,
характеризующими работу операционной системы общего назначения, а именно с
пропускной способностью и временем обращения, то и прекрасно —
в такой вычислительной установке следует внедрить ту
операционную систему, которая поставляется изготовителем
используемой вычислительной машины. В противном случае, следует
изменить выбор операционной системы, но не требования к
вычислительной системе. Это означает, необходимость расширения или
модификации существующей операционной системы или разработки
новых средств программного обеспечения. Условия не могут
диктоваться операционной системой, функции которой как пакета
математического обеспечения носят вспомогательный характер.
Рассмотренные в этом разделе примеры операционных систем и
вычислительных машин служат иллюстрацией программных
средств, предназначенных для обеспечения потребностей,
определяемых условиями конкретного применения.
Глава 16
СИСТЕМА УПРАВЛЕНИЯ ПРОИЗВОДСТВЕННЫМ
ПРОЦЕССОМ
Введение
В этой главе мы рассмотрим специальные требования,
характеризующие одну из типичных систем управления производственным
процессом. К числу основных характеристик операционных систем
общего назначения, рассмотренных в предыдущем разделе, была
отнесена стоимость самой вычислительной машины, и многие
концепции операционных систем возникли из стремления выполнить
больший объем полезной работы с помощью одной и той же
системы аппаратных средств. Мультипрограммирование, динамическое
распределение памяти и виртуальная память предназначены
максимизировать использование CPU за счет размещения в основной
памяти большего числа программ и передачи управления CPU
от одной программы к другой, уменьшая таким образом
непроизводительные затраты времени. Управление производственным
процессом имеет свои особенности: потери из-за простоев
технологической линии значительно превышают стоимость вычислительной
машины, поэтому в этом случае важнейшими критериями
эффективности вычислительной машины оказываются надежность,
доступность и время ответа.
В качестве примера типичного технологического процесса,
управляемого с помощью ЭВМ, будет рассмотрен процесс
изготовления печатных плат электронных схем для вычислительных машин
{вполне уместный пример в книге по вычислительной технике).
Мы не станем углубляться в подробности реального
технологического процесса. Наша цель состоит в том, чтобы рассмотреть
некоторые типы применений ЭВМ; поэтому описание
технологического процесса будет упрощенным (приносим наши извинения тем
читателям, которые профессионально связаны с этим
производством). В качестве приложений к этому описанию будут
рассмотрены: непосредственное управление технологической операцией,
обеспечение данными и числовое управление, тестирование и
управление качеством, а также сбор производственных данных.
\
336
Глава 16
Травление -
Производство
заготовок плат
г
т
•^Сверление
р* Вставка
|_ штырей
С
У
Монтаж
С
^
Заключительное
тестирование'
=}
Технологический цикл изготовления печатных плат
для ЭВМ
г
Изготовление печатных плат включает четыре основных этапа
(рис. 16.1). Сначала полосы медной фольги и тканеподобного стек-
ловолокнистого эпоксидного материала скрепляются вместе,
образуя основу платы (рис. 16.2). На следующем этапе (состоящем в
действительности из ряда взаимосвязанных операций) травлением
на плате фиксируется одна или несколько печатных схем, далее
просверливаются отверстия и вставляются контактные штыри,
используемые как монтажная
основа добавляемых
электронных элементов или для
соединения компонентов
схемы (рис. 16.3). Затем на эту
основу напаиваются
отдельные элементы — логические
блоки И, ИЛИ и НЕ (рис.
16.4). Наконец, законченная
монтажная схема
тестируется. Конечно, в
рассматриваемом технологическом цикле
не учитываются многие
детали, но для наших целей
этого достаточно.
Прежде чем приступить к
рассмотрению методов
использования ЭВМ в
управлении каждым из названных
выше основных этапов процесса, было бы полезно провести
небольшой анализ особенностей этого делового предприятия. В
отличие от автомобилей, игрушек и готовой одежды, большие
вычислительные машины редко изготавливаются впрок в расчете
на то, что кто-нибудь их в конце концов купит. Вместо этога
вычислительные машины изготавливаются на заказ, так что
изготовитель производит лишь то, что поставщиками уже
запродано (и это обстоятельство отражается в том, чта
оформление заказа на многие машины опережает их
поставку на шесть и более месяцев). Дополнительные трудности в
области производства связаны с тем, что вычислительные машины
часто создаются по индивидуальным заказам, при этом объем
основной памяти может быть различным, а такие элементы
аппаратных средств, как таймеры, встроенные адаптеры линий связи и
файлов, аппаратные реализации действий с плавающей точкой и
другие модули предоставляются на выбор в качестве стандартных
возможностей.
Рис. 16.1. Важнейшие стадии
процесса изготовления плат
электронных схем для ЭВМ.
Система управления производственным процессом 337
У
Рис. 16.2. Типичная плата печатной схемы в самом начале процесса
изготовления (фото любезно предоставлено фирмой Cincinnati Milacron).
Вследствие такого индивидуального характера заказов
изготовление ЭВМ является своего рода индивидуальным
производством. На предприятии индивидуального производства заказ (в
данном случае заказывается одна или несколько ЭВМ) разбивается на
ряд легко различимых компонентов (16 единиц элементов
электронных схем образца 1234, десять — образца 7612, пятьдесят —
образца 9982 и т. д.), называемых деталями или партиями деталей.
Эти партии деталей распределяются в соответствии с этапами
технологического цикла, при этом номера партий служат удобным
средством контроля расхода деталей и эволюции процесса.
Вообще говоря, все элементы данной партии деталей
идентичны. Однако при сравнении двух различных партий деталей
оказывается, что это не так: шаблон печатной схемы, входящий в партию
номер 548, может весьма отличаться от шаблона плат,
относящихся к партии номер 349. Чтобы работа выполнялась правильно,
производственный персонал должен отчетливо представлять себе
эти различия. Как мы увидим ниже, задача дифференциации
338
Глава 16
:\ <&
%?*
'."■■ %^$*.-
Рис. 16.3а. Специалист проверяет фиксированный на стекло оригинал
шаблона печатной схемы, используемый для воспроизведения в схемах печатной
платы (перепечатано с разрешения фирмы IBM).
Система управления производственным процессом 339
Рис. 16.36. Крошечные контактные штыри вставляются в просверливаемые
отверстия, образуя основу для крепления электронных элементов
(перепечатано с разрешения фирмы IBM).
340
Глава 16
Рис. 16.4. Электронные компоненты крепятся на картах печатных схем.
Темные, напоминающие штепсель коннекторы в основании карт позволяют
объединять их в более крупные монтажные схемы — печатные платы; карты своими
гнездами насаживаются на штыри, описанные на рис. 16.36 (перепечатано с разрешения
фирмы IBM).
элементов различных партий деталей в рассматриваемой здесь
системе управления производством является одной из
важнейших.
Первый этап — поточное производство заготовок плат
Первый этап рассматриваемого технологического процесса, если
вы помните, заключается в производстве заготовок плат. Внешне
эта операция выглядит довольно простой. Вращением барабана
стекловолокнистая ткань подается в «пропиточные» машины, где
происходит насыщение ткани эпоксидной смолой в очень точно
контролируемых пропорциях (рис. 16.5а). На завершающей
стадии данного этапа пропитанная ткань сматывается на барабан,
Система управления производственным процессом 341
а затем разрезается на полосы по размеру плат. В некоторых
случаях эти стекловолокнистые эпоксидные полосы соединяются
полосами медной фольги, образуя структуру, напоминающую
сэндвич.
Рассмотрим теперь некоторые проблемы, возникающие на
обсуждаемом этапе технологического процесса. Эпоксидная смола
обладает очень интенсивными клеящими свойствами. Во время
пропитки стекловолокнистой ткани она должна находиться в жидком
состоянии, так как, застывая, приобретает консистенцию мягкого
пластика и плохо проникает в переплетения ткани. Чтобы
обеспечить жидкое состояние эпоксидной смолы, процесс пропитки
осуществляется в тепловой камере (рис. 16.56). Пройдя обработку,
пропитанная эпоксидной смолой ткань должна сматываться на
приемный барабан. Что, если в это время эпоксидная смола
окажется все еще вязкой и клейкой? Поскольку эпоксидная смола
является очень сильным клеем, то слои пропитанной ею ткани,
очевидно, будут склеиваться. В результате — весьма
дорогостоящий брак. Чтобы исключить возможность таких потерь, ткань
перед сматыванием на приемный барабан пропускается через
башенный охладитель (снова рис. 16.56).
Температура нагревания, температура охлаждения и
длительности обеих фаз этого процесса необходимо точно регулировать.
Измерительные приборы, позволяющие определить температуру и
скорость движения материала, конечно, существуют, однако
недостаточно знать, что температура в нагревателе превышает на
двенадцать градусов номинальную. Необходимо иметь некоторый
механизм, поддерживающий на требуемом уровне значения
основных параметров, наподобие механизма термостатирования,
обеспечивающего постоянство температуры внутри здания (рис. 16.6).
Такого типа управление называется контуром обратной связи.
Для решения этой задачи часто используется специально
выделенная мини-ЭВМ, которая постоянно регулирует значения
температур, скоростей движения и любых других определяющих
параметров, автоматически обеспечивая расчетные условия, то
повышая температуру нагревателя, то ускоряя движение ткани, то
включая дополнительные кондиционеры. Предположим, что в
нашей системе задача непрерывного управления решается
программой одного из разделов нашей централизованной
вычислительной машины, а не средствами специально выделенной мини-
ЭВМ (рис. 16.7). Время ответа здесь, очевидно, является
критическим фактором — мы просто не можем себе позволить такую
ситуацию, когда в течение тридцати секунд, пока обрабатываются
какие-нибудь несколько десятков строк платежной ведомости,
линия производства заготовок оказалась бы неуправляемой, так
как нескольких секунд неуправляемого технологического
процесса может быть достаточно, чтобы бракованный рулон стекловолок-
\
342
Глава 16
Рис. 16.5а. На первом шаге процесса изготовления печатных плат стекло-
волокнистая ткань пропитывается эпоксидной смолой (перепечатано с
разрешения фирмы IBM).
нистого материала стоимостью в тысячу долларов оказался на
свалке. Если операционная система не обеспечивает мгновенной
реакции вычислительной машины на прерывания от этих устройств,
то от такой операционной системы следует отказаться.
Управление с обратной связью очень широко используется в
промышленности, и наиболее известными примерами могут
служить сталепрокатное производство и химические заводы. Исполь-
Система управления производственным процессом
343
^О
I
башенный
охладитель
i
!
I
Нагреватель
Рис. 16.56. Поточное производство заготовок плат.
Измерить
отклонение
температуры
v^O^/7/^V
Мет
Измерить
температуру
Рис. 16.6. Способ управления температурой в термостате является хорошим
примером контура обратной связи.
зование специальной мини-ЭВМ практикуется чаще всего по
довольно ясным причинам — специально выделенная машина
никогда не окажется занятой выполнением каких-либо иных действий.
Использование централизованных средств, как, например, в
нашем случае, обладает преимуществами централизованного
управления и оценки, и у такого подхода есть свои сторонники.
344
Глава 16
Лодочное
произбодстбо
заготовок
о
i
I
i
8
Контроллер
Рис. 16.7. Непрерывное регулирование с помощью центральной ЭВМ.
Второй этап — вытравливание печатной схемы
и сверление
Поточное производство заготовок характеризуется прежде всего
непрерывностью действия, при этом одна заготовка платы
выглядит точно так же, как и любая другая. Дифференциация
производственной продукции обнаруживается на втором шаге
технологического цикла. На этом шаге в процессе фототравления заготовки
плат превращаются в печатные платы, соответствующие одному из
тысяч шаблонов электронных схем. Партия деталей номер 346
может включать семь элементов с номером 812945, построенных
по шаблону печатной схемы 4110, тогда как партия деталей номер
347 состоит из сорока пяти элементов с номером 877352,
смонтированных по шаблону печатной схемы 2250; таким образом,
складывается специализация производства.
Сам по себе шаблон печатной схемы является лишь основой
для печатной платы вычислительной машины; она должна быть
дополнена микросхемными элементами. Для крепления этих эле-
Система управления производственным процессом 345
ментов в основании платы просверливаются отверстия и
вставляются контактные штыри. Эти штыри выполняют три функции:
упрощают крепление элементов, осуществляемое либо напайкой,
либо путем тугой посадки; облегчают соединение фрагментов
монтажной схемы и являются частью электрической цепи схемы.
Расположение отверстий должно тщательно выверяться для
обеспечения точного соответствия шаблону печатной схемы.
Не полагаясь на ручное управление такой операцией
прецизионного сверления, в нашем технологическом процессе используется
перфоратор с числовым программным управлением,
позволяющий просверливать различные конфигурации отверстий по
заданному образцу. В простейшем случае числовое управление
осуществляется с помощью перфоленты. Оператор по номеру детали или
номеру шаблона выбирает и устанавливает на лентопротяжное
устройство перфоленту с соответствующим номером. Основное
содержание этой ленты составляют наборы цифр, определяющих
Х- и Y-координаты тех точек, в которых должны быть
просверлены отверстия. Механизм числового управления считывает первый
набор значений координат, перемещает сверло в определяемую
ими точку и начинает сверление. После того как просверлено
первое отверстие, происходит считывание второго набора значений
координат, новое перемещение сверла и просверливание второго
отверстия в соответствии с выбранными значениями координат
точки. Если печатная плата правильно установлена в перфораторе
и выбрана соответствующая перфолента, то все отверстия будут
просверлены в нужных точках.
При таком подходе в рассматриваемом поточном производстве
плат возникают две проблемы. Одна из них касается времени
установки — пока оператор устанавливает новую ленту N/G
(числового управления), перфоратор оказывается не занятым. Это не
составляло бы проблемы, если бы в нашем производстве
изготавливалось несколько тысяч экземпляров одной и той же детали,
однако в индивидуальном производстве циклы могут включать
последовательности из двадцати экземпляров детали «А», семи
экземпляров детали «В», сменяемых дюжиной экземпляров детали «С»,
и каждая смена перфоленты означает потерю нескольких минут
производственного времени. Вторая проблема связана с
возможностью ошибки оператора — он может случайно выбрать не ту
ленту, задавая, таким образом, перфоратору программу
ошибочной конфигурации отверстий, что приводит к браку.
Решение обеих проблем достигается централизованным
снабжением данными. При таком подходе каждому механизму
числового управления предоставляется объем памяти (оперативная
память, «гибкие диски», магнитная лента), достаточный для
хранения всего набора,данных, определяющих конфигурацию
просверливаемых отверстий. Возвращаясь к операции фототравления,
346
Глава 16
обусловливающей специфику изделия, добавим, что именно здесь
партия деталей снабжается перфокартой, идентифицирующей
номер детали и шаблон печатной схемы. Работающий на
перфораторе оператор просто берет эту карту и закладывает ее в
устройство чтения карт механизма числового управления; в результате
содержимое карты пересылается в центральную ЭВМ (рис. 16.8),
в которой соответствующая программа (N/C) считывается с диска
и пересылается в память механизма числового управления. Теперь
Перфо-)
ратор
Механизм
с числодым
управлением
Карта
партии
деталей
Файл
данных
числового уп-
жвлениЯ;
Канал
Рис. 16.8. Централизованное обеспечение данными.
перфорация отверстий может происходить, как и прежде, при этом
необходимые для числового управления данные поступают из
запоминающего устройства, а не с перфоленты.
Снова отметим, что реакция ЭВМ на такие запросы должна
быть весьма быстрой; замедленность ответов вызывает простои
перфоратора, исключение которых и составляет цель наших
усилий. Вероятно, было бы целесообразным предусмотреть такую
последовательность действий оператора, в соответствии с которой
сначала в устройство чтения карт закладывалась перфокарта
партии деталей и лишь затем на перфораторе устанавливалась
заготовка первой печатной платы, на что потребовалось бы несколько
секунд, вполне достаточных для получения ответа центральной
ЭВМ. Как бы то ни было, быстрая отработка ответа на каждое
сообщение составляет важное условие использования ЭВМ в этой
операции.
Система управления производственным процессом 347
Заключительная операция рассматриваемого этапа
технологического цикла — вставка контактных штырей — выполняется в
основном вручную.
Третий этап — крепление микросхемных элементов
Если плата готова, то к контактным штырям можно крепить
микросхемные элементы — логические вентильные элементы И, ИЛИ
и НЕ, триггерные элементы памяти и т. д.; электрическая связь
между этими элементами обеспечивается цепями печатной схемы,
Хотя одни и те же элементы могут употребляться в разных
деталях, каждой партии деталей будет скорее всего отвечать свой
набор элементов. Поскольку в этой операции необходима высокая
степень приспосабливаемости, она выполняется в основном
вручную; таким образом, прямое использование ЭВМ в управлении
этим процессом отсутствует.
Нельзя сказать, однако, что управление вообще отсутствует,
или что ЭВМ не используется косвенно. Каким образом,
например, рабочий, занятый на сборке, выбирает элементы, которые
должны крепиться к данной печатной плате? Эта информация
обычно содержится в двух документах: спецификации и маршрутной
карте. Спецификация представляет собой перечень элементов,
которые используются в монтаже; маршрутная карта содержит
упорядоченный перечень шагов, или отдельных операций, которые
необходимы для изготовления изделия. Ранее мы упоминали
карту партии деталей, используемую в операции просверливания
отверстий. В индивидуальном производстве довольно
распространена практика комплектования для каждого заказа, поступающего в
производственный отдел, пакета документации, содержащего эту
карту, копию маршрутной карты, вероятно, спецификацию и ряд
технических чертежей, а также другую важную информацию о
данной работе. Этот пакет документации сопровождает движение
партии деталей на всех этапах технологического цикла
производства. В нашем производстве большая часть содержимого этого
пакета печатается (и обеспечивается соответствующими данными)
с помощью ЭВМ.
В этом применении естественно использование пакетного
режима обработки. Оно существенно отличается от непрерывного
управления физическими процессами и централизованного
обеспечения данными.
Контроль трудозатрат и расхода материалов
Обсудив особенности выполняемых вручную операций нашего
технологического процесса, обратимся к рассмотрению вопросов
контроля трудозатрат и расхода материалов, которые имеют важное
348
Глава 16
значение в любом производственном процессе. В нашей системе
необходимые для осуществления контроля трудозатрат и расхода
материалов исходные данные посылаются непосредственно в ЭВМ
с нескольких внешних устройств ввода данных. Выполнив в
соответствии с маршрутной картой очередную операцию, рабочий или
работница вводит с терминала карту партии деталей и свой
собственный регистрационный номер, снабжая, таким образом, ЭВМ
довольно важной информацией. Во-первых, система «узнает», какую
именно операцию только что выполнил рабочий, и, сравнивая
промежуток времени между этим и предыдущим сообщениями с
нормативной длительностью данной операции, получает часто
используемые в практике контроля и измерения трудозатрат
статистические данные о соответствии реальных времен нормативным.
Кроме такого контроля трудозатрат, система также «узнает» об
использовании партии деталей № XXX в определенной операции
процесса сборки; таким образом, регистрация последовательных
фаз движения партии деталей обеспечивает точный контроль
расходования материалов.
Помимо карты партии деталей и личного регистрационного
номера, рабочий с помощью ручного клавишного устройства может
также ввести номер только что законченной операции. Каждая
операция характеризуется определенной номинальной стоимостью.
Получение системой сигнала о завершении данной операции
означает, что стоимость этой операции может быть учтена как
составляющая общей стоимости работ, связанных с данной партией
деталей; таким образом, осуществляется непрерывное
отслеживание изменения номинальной стоимости изделия в процессе его
изготовления.
Сбор данных о трудозатратах и расходе материалов не
ограничивается, конечно, только этапами ручного монтажа; аналогичные
данные принимаются от каждого рабочего. В результате
формируется некоторая база данных, дающая очень полную и точную
картину состояния всех работ, выполняемых на данном
производственном участке вместе с не менее полезной информацией о
деятельности всех рабочих. Сама по себе такая база данных является
очень ценным инструментом; в следующей главе мы рассмотрим
использование данных, организованных подобным образом, в
информационных системах управления.
В рассмотренном здесь применении ЭВМ вновь оказывается
важным время ответа, при этом интервал в пять или десять секунд,
вероятно, был бы приемлемым. Основную проблему составляют
пиковые нагрузки -— рабочие (впрочем как и люди других
профессий) имеют привычку откладывать сообщение о выполненной
работе на самый конец рабочего дня, что приводит к повышенной
плотности сообщений в последние двадцать— тридцать минут
перед концом смены. В этот период использование ЭВМ для непре-
Система управления производственным процессом 349
рывного сбора данных характеризуется совершенно иными
требованиями по сравнению с условиями, имеющими место в остальной
части рабочего дня, когда время от времени поступают случайные
сообщения. Наша ЭВМ должна обеспечивать обработку и в
условиях таких пиковых нагрузок.
Четвертый этап — окончательная проверка
Схемы вычислительной машины проверяются электронными
приборами; на вход подается сигнал известной двоичной
конфигурации, а выходной сигнал схемы сравнивается с ожидаемым. Если
они совпадают, то схема считается корректной. В этом применении
выполняемая ЭВМ функция вполне аналогична рассмотренной
выше функции централизованного обеспечения данными с тем
отличием, что на запрос, определяемый содержанием карты партии
деталей, данные посылаются не в механизм цифрового управления,
а в память некоторого устройства, реализующего электронную
проверку.
Требования к системе управления процессом
Наша производственная система целиком зависит от работы ЭВМ;
если ЭВМ выходит из строя, то производство останавливается.
Допустим, что персонал нашего предприятия составляет тысячу
человек. Простой в течение одного полного дня означает, что
тысяче человек должно быть выплачено жалованье за полный рабочий
день, даже если они ничего не делали. Это может составить не
меньше 50 тыс. долларов! Добавьте сюда стоимость необходимых
для восстановления производства сверхурочныхработ, стоимость
ущерба, связанного с нарушением плана выпуска продукции
(потеря потенциальных заказчиков), возможные потери, связанные с
нарушением ритма материально-технического снабжения и
другие выплаты — слишком многочисленные, чтобы их перечислять,—
и вы получите действительную картину того, что означает
выход из строя ЭВМ в таких производственных условиях. Надежность
является самым важным показателем эффективности системы, и
деньги, потраченные на повышение надежности системы, следует
считать не зря потраченными деньгами.
При обсуждении различных применений ЭВМ в управлении
нашим процессом индивидуального производства в качестве
одного из важных факторов упоминалось время ответа ЭВМ; таким
образом, время ответа системы оказывается еще одним существенным
критерием ее эффективности.
Наконец, мы должны коснуться фактора доступности: этот
критерий эффективности в значительной степени перекрывается
двумя первыми. Надежность и время ответа, однако, не характе-
350
Глава 16
ризуют таких функций вычислительной системы, как
формирование и обработка в пакетном режиме комплектов документации,
сопровождающей движение партии деталей, или отладка и
ассемблирование прикладных программ. Такого рода применения
должны быть обеспечены. Требования, предъявляемые системе этим
критерием эффективности, мы будем связывать с определенными
модулями операционной системы и такой организацией ее работы,
благодаря которой обеспечивается необходимая обработка
подобных программ, не допуская, однако, таких ситуаций, когда в
загрузке ЭВМ они становятся доминирующими.
Какая роль отводится пропускной способности? Пропускной
способностью измеряется объем работы, выполняемой
вычислительной машиной; высокий уровень пропускной способности
указывает на то, что машина используется эффективно. С
эффективностью мы обычно связываем минимизацию стоимости
вычислительной машины; т. е. задача состоит в том, чтобы выбрать самую
малую или самую дешевую вычислительную машину, которая
обеспечила бы выполнение нужной работы. В сфере производства
минимизация стоимости вычислительной машины может оказать
катастрофическое влияние на общую стоимость всей системы. Это
особый случай применения ЭВМ.
Надежность
Надежность имеет существенное значение в управлении
производственными процессами; каким образом она может быть обеспечена?
Обычно применяемый подход связан с дублированием важнейших
элементов аппаратных средств и математического обеспечения.
Сама вычислительная машина, конечно, относится к важнейшим
аппаратным средствам; вычислительные машины многих систем
управления производством дублируются (рис. 16.9), при этом в
случае сбоя работающей машины либо вручную, либо
программно управляемыми средствами к системе подключается
дублирующая машина. Часто дублируется весь комплекс аппаратных средств
ЭВМ, как это показано на рис. 16.9: используются два
комплекта каналов, два комплекта устройств ввода — вывода, два
комплекта контроллеров и две базы данных. Такая структура
называется дуальной; под этим подразумевается, что вся система
может выйти из строя лишь в том случае, если одновременно
выходят из строя две ЭВМ, два канала или два контроллера.
Вероятность отказа одновременно двух машин намного меньше, чем
вероятность отказа лишь одной из них.
Тем не менее это может произойти. Даже при использовании
дуальной системы управления возможны простои всей системы;
вероятность такого события может быть вычислена по формулам
теории надежности, содержащихся в любом хорошем учебнике по
Система управления производственным процессом
351
Переключатель
Внешнее бмешательстбо
Рис. 16.9. Дуальность аппаратных средств.
статистике или исследованию операций. Чтобы предупредить
подобного рода случайные простои, можно реализовать (и часто
реализуется) еще один уровень защиты. В поточном производстве
заготовок плат управление температурой и скоростью подачи
может осуществляться вручную, при этом, правда, не исключается
брак, но стоимость дополнительного брака намного ниже
стоимости всего производства. В качестве экстренных мер обеспечения
могут быть предусмотрены устройства загрузки данных в память
механизма числового управления перфоратором и устройства
электронного контроля схем с бумажной или полиэфирной перфо-
352
Глава 16
лентой; хотя из-за частых установочных операций общая
эффективность снижается, загрузка данных с перфоленты дает
возможность продолжать работу. Формирование пакетов документации,
сопровождающей партию деталей, связано с пакетной обработкой
и значительно менее чувствительно в отношении отказов ЭВМ;
здесь проблем не возникает. Средства оперативного сбора данных,
„Гибкий
диск
ЭВМ
Кана/7
Контроллер
Ьаъа
данных
Рис. 16.10. Запасной «гибкий» диск в системе оперативного сбора данных.
однако, дублировать необходимо. Во многих системах
оперативного сбора данных эта задача решается с помощью специального
«гибкого» диска, встроенного в контроллер, на котором в случае
выхода из строя ЭВМ записываются сообщения, посылаемые с
терминалов (рис. 16.10); хотя это и не так удобно, как
редактирование в реальном масштабе времени, но по крайней мере
удается сохранить важнейшие данные. Как последнее средство
защиты разработчик любой системы оперативного сбора данных
должен предусмотреть в своем проекте процедуры записи данных
вручную с последующим их вводом в систему.
Надежность базы данных также имеет определяющее значение.
Хорошим методом является частое использование контрольных
точек, например с ежедневной записью на ленту содержимого фай-
Система управления производственным процессом 353
лов оперативного сбора данных. Более подробно мы коснемся
этого вопроса в гл. 17.
Возможны также случаи ошибок в программах. Поэтому
весьма важно их тщательно документировать, — в момент отказа
программы ответственный за ее разработку программист может
оказаться в отпуску или, еще того хуже, вообще уже не работать в
компании. При сдаче новых программ необходимо обеспечить их
тщательную проверку на основе жестких стандартов тестирования
и подробЬого анализа. Хорошим средством является также
ведение запасной библиотеки программ.
Время ответа
Лучший способ достижения времени ответа, требуемого для
рассматриваемой прикладной системы управления технологическим
процессом, связан с использованием ЭВМ, реализующей многие
уровни прерываний. В такой машине прерывания, посылаемые
устройствами управления поточным производством заготовок плат,
можно было бы использовать для непосредственного
инициирования программ, обрабатывающих передаваемую информацию; при
этом следует применять непосредственную аппаратно
реализованную связь, которая намного быстрее, чем связь, обеспечиваемая
программными средствами. В Системе IBM/360, например,
прерывание управления сначала передается некоторой подпрограмме
обработки прерываний, которая в последующем передает его
в требуемую программу.
Для обеспечения поточного производства заготовок плат или
в аналогичных применениях, требующих очень быстрой реакции
ЭВМ, соответствующая управляющая программа может
размещаться в оперативной памяти. Если время ожидания может быть
относительно большим, то в оперативной памяти можно хранить
только небольшой модуль, который загружает требуемую программу.
Корректно разработанное математическое обеспечение, конечно,
может компенсировать недостатки, свойственные вычислительным
системам, использующим небольшое количество различных
прерываний общего типа; ЭВМ Системы IBM/360 могут быть
использованы для управления производственным процессом, подобным
рассмотренному нами в этой главе. Однако машины этой серии по
своему замыслу не предназначены для такого рода специальных
прийе нений.
Для каждой системы, от которой требуется быстрая ответная
реакция, характерна еще одна очень важная особенность — такая
система должна быть недозагруженной. Если используется 70
или 75 % доступного времени CPU, то часто будут возникать
ситуации, когда в течение некоторого промежутка времени все
доступные ресурсы оперативной памяти и процессорного времени оказы-
V» 13—821
354
Глава 16
ваются занятыми; это не может не сказаться на времени ответа.
С другой стороны, если в среднем используется лишь 20 или 25%
времени CPU, то ресурсы системы в любой момент времени обычно
бывают доступными.
В рассмотренном выше примере использования ЭВМ для
оперативного сбора данных, если вы помните, возникает проблема
обработки при пиковых нагрузках. В течение рабочего дня вполне
реализуема процедура, в соответствии с которой обработка
данных непосредственно следует за их приемом, однако в конце смены
вследствие резкого возрастания потока сообщений большой объем
дополнительных затрат вычислительных ресурсов (в частности,
временных), характерных для подобной процедуры (обращение к
диску при каждом сообщении), может значительно увеличить
время ожидания. Поэтому в периоды пиковой нагрузки программа,
обрабатывающая сообщения, должна размещаться в оперативной
памяти, исключая тем самым основную долю затрат ресурсов. Либо
посредством вмешательства оператора, либо автоматически такие
смены режимов обработки должны обеспечиваться операционной
системой.
Доступность
Одного проявления доступности системы мы уже коснулись —
система должна быть недозагруженной. Это означает, что
стоимость машины будет выше по сравнению с оценкой, определяемой
критерием пропускной способности, но стоимость вычислительной
машины не является определяющей в случае системы
автоматизированного управления производственным процессом.
Что можно сказать о режиме пакетной обработки в связи с
такими применениями, как подготовка пакетов документации партий
деталей, тестирование новых программ, добавление новых или
изменение существующих программ числового управления или
тестовых данных и т. д.? Для выполнения некоторых из
перечисленных задач можно было бы использовать дублирующую машину,
однако этим задача решается лишь частично. Почему бы не
разделить оперативную память машины на раздел переднего плана и
раздел фона? Программы, требующие быстрой ответной реакции
машины, могли бы выполняться в разделах переднего плана, тогда
как задания пакетной обработки можно было бы размещать в
разделе фона. Раздел фона характеризуется низким уровнем
приоритета, тем самым любым прерыванием, поступающим из раздела
переднего плана, задание, выполняемое в режиме пакетной
обработки, автоматически переводится в состояние ожидания до
полного завершения процедуры обработки прерывания.
Ограничиваясь единственным разделом фона, можно было бы по-прежнему
обеспечивать доступ к основным ресурсам ЭВМ тем прикладным
Система управления производственным процессом 355
программам, для которых временной фактор является
определяющим; при тщательном планировании разделом фона
обеспечивались бы все потребности программ раздела фона, необходимых для
функционирования такого рода системы. Если требования,
связанные с пакетной обработкой, оказываются слишком жесткими,
то в действительности мы имеем дело с прикладной системой,
отличной от системы управления производством, обсуждаемой в
настоящей главе.
Необходимо еще одно средство, гарантирующее доступность
системы — квантование времени. В простейшем случае его
реализация сводится к тому, что момент передачи управления CPU
в данный программный модуль фиксируется пуском таймера.
Если в течение заданного кванта времени выполнение программы не
будет прервано ни программным запросом на операцию ввод —
вывод, ни макрокомандой WAIT, ни нормальным завершением
программы, то ее выполнение прерывается таймером. Таким
образом, реализуется защита системы от бесконечных циклов и других
программных ошибок, а также исключается возможность захвата
ресурсов системы большими программами.
Почему нельзя обойтись операционной системой
общего назначения?
Операционная система общего назначения в соответствии со своим
названием рассчитана на использование в очень широком
диапазоне прикладных задач «общего» характера. Универсальное
математическое обеспечение характеризуется большей сложностью
и не столь эффективно, как математическое обеспечение,
разработанное по индивидуальному заказу. Управление технологическим
процессом, рассмотренное в этой главе, не относится к разряду
общих приложений с широким спектром задач, — напротив,
его особенности тесно связаны с характером производственного
процесса. Короче говоря, дополнительные затраты
вычислительных ресурсов, обусловленные универсальностью операционной
системы общего назначения, оказываются помехой в условиях,
подобных описанным в этой главе. Нам необходимо специально
разработанное математическое обеспечение.
Управление производством. Заключительные замечания
Не на всех производственных предприятиях используется
непрерывное управление производственным процессом, или
централизованное обеспечение данными, или оперативный сбор данных; в
действительности тип производственной организации, описанный
в нашем примере, является скорее исключением, чем правилом.
Традиционные методы управления производством включают про-
V* 13*
356 Глава 16
слеживание этапов выполнения заказа (партий деталей),
определение объемов партий деталей, учет брака, контроль стоимости и
соответствия фактических трудозатрат нормативным; большая
часть из названных выше процедур (если не все эти процедуры),
могут быть реализованы с помощью стандартной операционной
системы общего назначения. Цель обсуждения, имевшего место в этой
главе, состояла не в том, чтобы ввести новое определение
процесса производства, а в рассмотрении необычного примера
использования ЭВМ, лежащего за пределами стандартных представлений.
Даже в тех случаях, когда используется непрерывное
управление технологическими процессами и числовое программное
управление, применение для этих целей одной центральной ЭВМ
наблюдается крайне редко. Такие задачи решаются в основном с
помощью мини- и микро-ЭВМ.
Наконец, несколько слов по поводу оперативного сбора
данных. Характерные для систем оперативного сбора данных времена
ответа оказываются в пределах возможностей стандартной ЭВМ
и могут быть обеспечены средствами операционной системы общего
назначения в условиях умеренной загрузки машины.
Действительно, важным фактором рассмотренного в данной главе
применения ЭВМ, является состав выполняемых программ. Из числа
этих программ исключаются чисто вычислительные и многие
другие типы заданий, выполнение которых относится к обычным
функциям вычислительных систем общего назначения. Обусловленная
высокой стоимостью производственного времени и конкретными
особенностями производственного процесса прикладная система
управления предполагает использование специальной
комплектации аппаратных средств и математического обеспечения, которая,
быть может, применима лишь в этом конкретном случае. А разве
не так мы понимаем «специальное назначение»?
Краткие выводы
В этой главе мы рассмотрели одно из специальных применений
ЭВМ — автоматизированное упраэление технологическим
процессом. В системе управления можно выделить три основных типа
применения ЭВМ: непосредственное непрерывное управление
технологическим процессом, централизованное обеспечение данными
средств числового программного управления и контроля качества
готовой продукции и оперативный сбор данных. Во всех трех
применениях требуется быстрая ответная реакция машины. Кроме
решения этих необычных прикладных задач в системе
предусматривается выполнение заданий, требующих режима пакетной
обработки и составляющих раздел фона.
Надежность системы — важное требование, предъявляемое
к функционированию системы, — обусловлено высокой
стоимостью производственного времени. Надежность обеспечивалась
Система управления производственным процессом 357
дублированием основных компонентов аппаратных средств, а
также терминальных устройств на рабочих местах (типа устройств
ввода с перфоленты, обеспечивающих в случае необходимости
загрузку оборудования с числовым управлением), частым
использованием контрольных точек с проверкой наиболее важных файлов
и тщательно организованной процедурой приема новых программ.
Основной экономический фактор функционирования системы
в этих условиях связан с простоями. Так как технологический
процесс целиком зависел от работы ЭВМ, выход из строя ЭВМ
означал, что все производство останавливалось; таким образом
пропускная способность — традиционный критерий эффективности
вычислительных систем — в данном случае не имеет
существенного значения. ЭВМ (и ее операционная система) по-прежнему
используется как средство минимизации стоимости производства,
однако стоимость в рассмотренном случае определялась иначе.
Другим важным критерием эффективности вычислительной
системы являлось время ответа. В этом отношении
вычислительная машина, оснащенная средствами обработки многих уровней
прерываний, обычно оказывается эффективнее машины с
небольшим числом уровней прерываний.
И наконец, к числу критериев эффективности системы была
отнесена ее доступность, т. е. предоставление ресурсов машины по
первому требованию. Частично это условие обеспечивается
удовлетворением требований, касающихся надежности и времени
ответа; дополнительно использовались такие средства, как
эксплуатация ЭВМ с неполной нагрузкой, присвоение низкого уровня
приоритета фоновым программам, выполняемым в режиме пакетной
обработки, и квантование времени.
Операционные системы общего назначения рассчитаны на
решение широкого спектра прикладных задач «общего» характера.
Поскольку прикладные задачи в нашем примере отличаются
особыми свойствами, то операционная система общего назначения
для их решения не годится.
УПРАЖНЕНИЯ
1. Как соотносятся загруженность системы и время ответа?
2. Каким образом можно повысить надежность системы?
3. Почему операционная система общего назначения не
отвечает условиям применения ЭВМ, описанным в этой главе?
4- Прочтите что-нибудъ о системах резервирования авиалиний.
Сопоставьте анализ с исследованием, проведенным в этой главе.
5- Проанализируйте особенности национальной системы
противовоздушной обороны!> (SAGE) и свяжите их с материалом
данной главы.
О Имеется в виду система противовоздушной обороны США. — Прим,
перев.
12—821
Глава 17
СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ
И СИСТЕМЫ ПЕРЕДАЧИ ДАННЫХ
Введение
В гл. 16 мы рассмотрели один класс применений ЭВМ, для
которого часть функций, обеспечиваемых стандартной операционной
системой машин третьего поколения, оказывается излишней.
Поэтому в таких применениях, как управление производственным
процессом, операционные системы часто представляют собой либо
значительно упрощенный вариант конфигурации операционной
системы общего назначения, либо пакет программ, специальна
разработанный для данной прикладной системы или установки.
В этой главе мы рассмотрим другой тип автоматизированных
систем специального назначения, для которых возможности
операционных систем общего назначения оказываются далеко
недостаточными, что требует введения дополнительных средств
программного обеспечения.
Конкретным предметом нашего рассмотрения будет
информационная система управления. Основное внимание будет уделено
следующим вопросам: сбору, контролю, хранению и поиску данных
и обеспечению быстрого составления и выдачи ответов по запросам
(часто однократным) пользователей. К числу дополнительных
средств математического обеспечения относится пакет программ
управления базой данных и программные средства управления
передачей данных.
Ранние опыты применения ЭВМ.
Экономическое обоснование
Для многих фирм одно из самых ранних применений ЭВМ связано
с автоматизацией процесса начисления заработной платы.
Причину использования ЭВМ для составления платежных ведомостей
понять нетрудно. Для составления платежной ведомости на десять
человек может понадобиться час вычислительных работ,
выполняемых вручную; для составления платежной ведомости на сто
человек, вероятно, понадобится израсходовать десять часов;
расчет платежной ведомости на тысячу человек потребует не менее
ста часов рабочего времени, или полной рабочей недели двух с
Системы управления базами данных и передачи данных 359
половиной штатных единиц1). С ростом фирмы необходимое
рабочее время (а следовательно, и стоимость), затрачиваемое на
начисление заработной платы, возрастает, и не нужно обладать
слишком богатым воображением, чтобы понять, каким образом,
автоматизируя эти постоянно повторяющиеся операции и используя
вычислительную машину, можно ограничить связанные с ними
расходы. Автоматизация процесса начисления заработной платы
легко поддается экономическому обоснованию: если мы не
воспользуемся ЭВМ, то через два года начислением заработной платы будут
заняты полное рабочее время двадцать пять сдужащих. Если учесть
также такие достоинства, как быстродействие и точность, то
автоматизация процесса начисления заработной платы с
использованием ЭВМ в любой крупной фирме становится неизбежной.
Другие ранние примеры применения ЭВМ — в
счетно-бухгалтерских операциях, обработке счетов расхода и прихода, складских
операциях, обработке спецификаций, составлении отчетов —
также легко поддаются экономическому обоснованию в соответствии
с назначением автоматизируемых процессов. В каждом случае
основным доводом использования ЭВМ является снижение
стоимости — выполнение соответствующей работы на машине
дешевле, чем ее выполнение вручную.
Многие фирмы определяют свое отношение к любой новой
разработке на основе экономического обоснования; если ожидаемые
прибыли меньше затрат, то не стоит на такую разработку
расходовать денежные или людские ресурсы. Вышеприведенные
примеры, в которых применение ЭВМ для решения каждой прикладной
задачи можно было оценивать независимо, вполне соответствуют
идеологии, основанной на критерии стоимости. Программистам
скоро стало ясно, что рациональное использование оперативной
памяти и время CPU являются важными измеряемыми
характеристиками хорошей программы. Такого рода подход, однако,
привел к использованию метода организации данных, который для
многих фирм явился, как мы увидим, причиной новых трудностей.
Важно отметить, что структура файлов данных выбиралась
исходя из особенностей прикладной задачи. Таким образом,
домашний адрес сотрудника, например, можно было найти в нескольких
различных файлах — в файле личных данных, в файле
начисления заработной платы и в файле подготовки кадров, если
ограничиться лишь некоторыми из них. На первый взгляд кажется,
что такого рода избыточность данных означает определенную
неэффективность использования ресурсов. Однако рассмотрим,
например, последствия требования, состоящего в том, что в
программе начисления заработной платы должен использоваться адрес
служащего, извлекаемый из файла личных данных. Для каждой
О Речь идет о еженедельном начислении зарплаты. — Прим. перев.
12*
360 Глава 17
записи, обрабатываемой программой начисления заработной
платы, это означало бы лишнюю операцию ввода — вывода, а также
необходимость выделять в этой программе дополнительное
адресуемое пространство для хранения записей файла личных данных.
В системе, каждая программа которой рассматривается
изолированно, оба отмеченных выше фактора, очевидно, снижают
эффективность программы начисления заработной платы.
По этим соображениям программисты, составляя программы,
использовали (и продолжают использовать) специальные
структуры файлов данных, обеспечивая высокую эффективность данной
программы, не придавая какого-либо значения суммарной
эффективности всей системы обработки данных. При описании такого
подхода системный аналитик или специалист в области
управления употребил бы, вероятно, термин «субоптимизация».
Понятие системы MIS
Впервые трудности, связанные с подходом, основанным на
«независимых файлах», стали осознаваться в середине 60-х годов в
области организационного управления, когда в журналах,
посвященных техническим вопросам и методам управления, начали
появляться статьи о системах информационного управления
(MIS). В своей основе идея системы MIS включает два важнейших
положения: во-первых, данные, или информация, относятся к
важнейшим ресурсам любой организации, деятельность которой
связана с обоснованным (с учетом многих факторов) принятием
решений, и, во-вторых вычислительные машины являются настоящим
кладезем информации, которая в сфере управления должна быть
легкодоступной.
В подходе, основанном на «независимых файлах», информация
не является легкодоступной. Рассмотрим один пример.
Производственной организации требуется новый экспедитор, и руководство
вполне искренне полагает, что сложившаяся ситуация — удобный
случай для выдвижения на эту должность кого-либо из женского
персонала фирмы. Поскольку, вследствие применявшихся ранее
принципов продвижения по службе сведения о квалификации
женского персонала руководству фирмы недостаточно хорошо
известны, то за помощью обращаются в отдел обработки данных,
требуя в течение ближайших двух недель отыскать, подготовить
и представить информацию, которая определенно должна
храниться в ЭВМ, а именно список всех сотрудниц, работающих в
компании не менее пяти лет, имеющих диплом об окончании
колледжа, некоторый опыт работы в сфере производства
и определенную подготовку в области управления. Разумный
запрос, не так-ли? Но отдел обработки данных отвечает иначе —
шесть месяцев и тридцать тысяч долларов.
Системы управления багами данных и передачи данных 361
Откуда? Каким образом на составление простого списка
существующих данных может потребоваться шесть месяцев работы
программистов? Очень просто. Большая часть важнейшей информации
хранится в файле личных данных, однако производственная
хронология («некоторый опыт в сфере производства») составляет
содержание специального файла, доступ к записям которого строго
конфиденциален и санкционируется отделом кадров. Для
получения необходимых данных потребуется по крайней мере три недели
переговоров. Можно ожидать дополнительных осложнений,
связанных с недостатками службы ведения файла производственной
хронологии фирмы. Если сотрудник имел диплом об окончании
колледжа в момент его приема на работу, то соответствующая
запись вносится в файл личных данных; если же диплом получен
после приема на работу, то соответствующая информация может
быть найдена только в файле заочного обучения отдела подготовки
кадров. Это было бы еще полбеды, но информация в файле личных
данных организована в соответствии с личными номерами системы
социального страхования, тогда как в отделе подготовки кадров
для упорядочения записей в файлах пользуются своим ключом;
таким образом, слияние записей этих двух файлов может быть
осуществлено только по совпадению фамилий (что вполне возможно,
если в том и в другом файле учтены изменения фамилий, связанные
с вступлением в брак, однако это обстоятельство не учитывается).
С подготовкой в области управления дело обстоит еще хуже.
Фирмой организовано обучение по некоторой специальной программе,,
при этом регистрация слушателей ведется в форме простого
списка, составленного в хронологическом порядке. Еще одним
источником данных о такой подготовке могла бы служить система
факультативного обучения, но в отделе факультативного обучения
пользуются своей собственной (странной) системой кодирования
курсов и регистрация обучающихся носит в лучшем случае
несистематический характер. Кроме того, данные о заочном обучении в
местном колледже или университете можно было бы найти в
записях файла заочного обучения отдела подготовки кадров.
Перед отделом программирования встает задача объединения
информации, содержащейся в нескольких различных файлах, в
один новый файл, и составления программы, позволяющей
извлекать записи из этого нового файла. Чтение записей каждого
исходного файла должно выполняться отдельной новой программой,
формирующей новые частичные записи; эти частичные записи с
помощью еще одной, новой программы должны быть объединены в
виде специальных форматов нового файла, лишь после этого
становится возможным выполнение программы, обрабатывающей
записи нового файла в соответствии с исходной задачей. Итак, шесть
месяцев и тридцать тысяч долларов на составление списка,
содержащего, быть может, всего пятьдесят фамилий. И при этом из-за
362
Глава 17
изменений в фамилиях и плохого ведения файлов точность
обработки не может быть гарантирована.
Осуществление благих намерений откладывается, руководство
решает назначить молодого инженера из планового отдела, который
часто проявлял способности и, во всяком случае, входит в список
сотрудников, подлежащих повышению; женскому персоналу опять
нанесен моральный урон, а в редакцию технического журнала
отправлено письмо, упрекающее в публикации научной фантастики
под видом MIS.
ч
Метод централизованной базы данных
Тот факт, что данные находятся в ЭВМ, не всегда означает, что они
доступны для использования; в действительности информация
может быть использована лишь в том случае, если она должным
образом индексируется, каталогизируется и хранится. Другими
словами, если вы не можете найти информацию, то вы не можете
ею воспользоваться. Небольшая история, изложенная выше,
могла бы иметь совсем иной финал, если бы за несколько лет до
этого случая руководство осознало такую возможность и стало
относиться к данным, как к важнейшему ресурсу компании, чем
они в действительности и являются.
В этом суть метода централизованной базы данных. Вместо
того чтобы позволять каждому прикладному программисту
создавать файлы, структурированные соответственно особенностям
того или иного специального приложения, все данные собраны в
единой, интегрированной и централизованной базе данных, и из этого
централизованного источника отдельные программисты могут
получать элементы данных, необходимые для их программ.
Метод централизованной базы данных чаще всего реализуется
с помощью некоторого программного модуля, монитора базы
данных или управляющей программы базы данных (рис. 17.1),
которая постоянно размещается в оперативной памяти и служит
посредником между прикладной программой и операционной
системой. Все запросы операций ввода — вывода, включающие
обращение к базе данных, должны контролироваться управляющей
программой базы данных. Во многих системах использование
программистом макрокоманды CALL или специальной макрокоманды
обращения к базе данных обеспечивает передачу управления
управляющей программе базы данных, в которой затем реализуется
необходимое обращение к супервизору. Обычно программист
ничего не знает о структуре файла, организации и физическом
размещении запрашиваемых им данных — учет всех этих особенностей
относится к функциям управляющей программы базы данных.
Рассмотрим следующий простой пример. В качестве составной
части личных данных, характеризующих каждого сотрудника ор-
Системы управления базами данных и передачи данных
363
ганизации, в базе данных обязательно будут содержаться имя
сотрудника, его адрес и номер отдела. Допустим, что у нас есть две
прикладные программы, одной из которых по номеру отдела
составляется список всех его сотрудников, а другой — список почтовых
адресов сотрудников-подписчиков информационного бюллетеня
компании. В первой программе используются только имя
сотрудника и номер отдела; во второй — номер отдела не используется.
В подходе, основанном на традиционной файловой организации,
в той и другой программах пришлось бы выделять адресное
пространство для названных данных; в методе централизованной
базы данных в этом нет необходимости.
с
Операционная система
510 3
Управляющая
С программа
ж
Прикладная программа 1
CALL
ч
Ваза
данных
Рис. 17.1. Управляющая программа базы данных в составе математического
обеспечения.
В первой программе можно было бы употребить следующий
оператор CALL DBMGR (ИМЯ, ОТДЕЛ), которым обеспечивается
связь с управляющей программой базы данных (DBMGR).
Управляющая программа в свою очередь выдает необходимые команды
ввода — вывода и формирует запись, содержащую только имя
сотрудника и номер отдела, пересылая эту запись в прикладную
программу. Позднее второй программой выполняются команды,
составляющие расширение макрокоманды вида CALL DBMGR
(ИМЯ, УЛИЦА, ГОРОД, ШТАТ, ПОЧТОВЫЙ ИНДЕКС).
В результате управляющая программа базы данных адресуется к
соответствующему файлу или файлам, формирует запись,
включающую только запрашиваемые поля, и пересылает эту запись в
запрашивающую прикладную программу. Все данные могли бы
храниться в единственном физическом файле или распределяться
среди нескольких различных файлов; для организации этих файлов
могли бы использоваться методы последовательного, прямого или
индексно-последовательного доступа; знание всех особенностей
доступа к файлам прикладному программисту не обязательно.
364
Глава 17
Достоинства метода централизованной базы данных
Такая централизация данных характеризуется рядом
преимуществ. Во-первых, исключается или по крайней мере становится
контролируемой избыточность данных. Зачем, например, хранить
домашний адрес сотрудника в двух или трех различных файлах?
Естественнее записать его однажды, обеспечив для каждой
программы, использующей этот адрес, вызов необходимой информации
из одного и того же источника. С проблемой избыточности данных
тесно связана проблема обновления и ведения файлов. В
университете адрес места жительства часто встречается в нескольких
различных файлах — в файле казначея, чтобы адресовать счета, в
регистрационном файле для информации об оценках, в файле
выпускников на случай будущих просьб о пожертвованиях, в файле
данных о помощи студентам и в других. Если студент переезжает
— а студенты переезжают часто, — разумно ли было бы
полагать, что соответствующее изменение в адресе будет вноситься в
каждый из этих файлов? С централизованной базой данных такая
избыточность исключается; изменение адреса (или другого
элемента информации) необходимо внести только один раз, после чего
любая прикладная программа пользуется исправленными данными.
Даже важнее, чем устранение избыточности данных и
повышение надежности коррекции данных, оказывается то обстоятельство,
что отдельные прикладные программы, составленные в расчете на
обращение к централизованной базе данных, не зависят от
фактических значений данных. Для лучшей иллюстрации этой идеи
можно снова обратиться к примеру. Несколько лет назад почтовое
ведомство (из лучших побуждений) пришло к решению, что все
адреса должны обязательно включать почтовый индекс. Во многих
вычислительных центрах это, казалось бы, незначительное
изменение привело к ужасным последствиям. Добавление к адресу
нового поля, содержащего пять символов, означало необходимость
внесения изменений в каждую программу, использующую данные
этой задачи в соответствии с изменившейся суммарной длиной
полей. Модернизация записей оказалась особенно затруднительной в
организациях, практикующих программирование на языке
ассемблера, а программисты имеют привычку пользоваться весьма
эффективной (как они полагают) относительной адресацией. Тот факт,
что данной программе для выполнения ее функций не требуется
знания почтового индекса, во внимание не принимался: если в
некоторой программе содержалось обращение к новой, более
длинной записи, то в такую программу вносились изменения,
обеспечивающие дополнительное место в памяти. В условиях
автоматизированного управления централизованной базой данных все
такие изменения связаны с функциями управляющей программы
базы данных. Программы, не использующие значение почтового
Системы управления базами данных и передачи данных 365
•и^шия^ш^мишяии^^^^ям^ииш^р^^^ш^мишм"
индекса, не нуждаются в модификации — в них, как и прежде, в
соответствии с запросами посылаются те же элементы данных. В
таких случаях внесенное изменение неощутимо. Модифицировать
необходимо только те программы, которые пользуются новым
элементом данных.
Централизованное управление базой данных не только
упрощает процесс модификации программ, но и упрощает задачу
программиста. Избавившись от необходимости тщательного
программирования физических процессов ввода — вывода, он может уделить
больше времени самому существу прикладной задачи. Что в конце
концов важнее для программиста, занятого в управлении
производственными процессами, — знание производства или знание
методов ввода — вывода данных для ЭВМ?
Некоторые недостатки и издержки
Напомним еще раз, что даром ничего не дается. Существуют
определенные издержки и недостатки, связанные с методом
централизованной базы данных.
Наибольшие и, вероятно, самые очевидные издержки связаны с
тем, что формирование базы данных должно опережать все
остальное. Представьте себе вычислительный центр с тысячами программ
и тысячами файлов, созданных без использования
централизованной базы данных. Необходимо переписать все существующие
программы прежде чем станет возможной реализация соответствующей
базы данных, и связанные с этим издержки могут быть огромными.
В значительно лучшей ситуации в отношении базы данных
оказывается вновь организованная компания, закупающая свою первую
вычислительную машину. Именно по этой причине концепция
централизованной базы данных часто реализуется лишь в
отношении нескольких, «важнейших» применений, тогда как многие
другие программы, предназначенные для обслуживания
производства, используются по-прежнему в системе «независимых»
избыточных файлов. Большая трудность здесь состоит в том, что не
удается назвать каких-либо существенных преимуществ, являющихся
прямым следствием создания централизованной базы данных и
переписывания существующих программ; преимущества будут
сказываться при написании новых прикладных программ,
пользующихся централизованной базой данных. В условиях
традиционного подхода, когда «в каждом отдельном процессе обработки
данных должна достигаться наивысшая в соответствии с его
индивидуальным назначением эффективность», этот начальный
критический этап очень трудно обосновать.
С чисто технической точки зрения не вызывает никаких
сомнений, что хороший программист, используя специально
организованные файлы и оптимальный метод доступа, может написать про-
366 Глава 17
грамму, которая, исходя из необходимых для ее выполнения
чистого времени CPU и минимальной оперативной памяти, намного
эффективнее программы, использующей самую лучшую базу данных.
Ясно, что речь идет об оптимизации одиночной программы,
однако эти критерии по-прежнему широко используются как принятая
мера эффективности программы (и работы программиста). Хорошо
спроектированная управляющая программа базы данных может
генерировать программы обмена лучше, чем плохой или средний
программист, но вряд ли хороший программист не сумеет
организовать управление используемыми им операциями ввода —
вывода и выбрать структуры данных лучше любой общеупотребительной
системы математического обеспечения. Что, однако,
представляется более важным — эффективность отдельной программы или
гибкость, обеспечиваемая централизованной базой данных?
Однозначного ответа быть не может; в каждом отдельном случае этот
вопрос должен рассматриваться исходя из потребностей и целей,
характеризующих конкретный центр обработки данных.
Наконец, существуют издержки, связанные с работой самой
управляющей программы базы данных. Так как все прикладные
программы могут обращаться к базе данных только при помощи этого
модуля, последний должен быть написан очень тщательно.
Другими словами, управляющая программа базы данных — весьма
сложная и дорогостоящая. Многие фирмы, использующие метод
централизованной базы данных, предпочли собственной
разработке такой программы приобретение или аренду готового пакета,
поставляемого либо изготовителем ЭВМ, либо независимой
компанией, разрабатывающей математическое обеспечение. В широком
ассортименте предлагаются превосходные пакеты такого
математического обеспечения.
Реализация базы данных. Типичная структура данных
Вместо того чтобы продолжить это общее обсуждение,
рассмотрим, каким образом наша задача «Перечислить всех сотрудниц,
имеющих...» могла бы быть решена в вычислительной системе,
использующей управляемую базу данных. Рассмотрение,
вероятно, удобно начать с анализа фактической структуры данных.
В рассматриваемой прикладной задаче используются
несколько различных типов данных. С одной стороны, имеются такие
данные, как имя, адрес, социально-страховой номер, текущий номер
отдела и т. д., которые требуются довольно часто, по крайней
мере раз в неделю при начислении заработной платы. С другой
стороны, есть данные об образовании, которые если и требуются, то
редко. Подход, основанный на принципе «одна всеобъемлющая
огромная запись», очевидно, был бы не экономичным, и тем не менее
элементы данных каким-то образом должны быть связаны.
Системы управления базами данных и передачи данных
367
В системе управления базой данных эта задача решается с
помощью указателей, размещаемых в полях «ключевой» записи
и обеспечивающих связь с менее важными записями (рис. 17.2).
Предположим, например, что основная запись личных данных
каждого сотрудника содержит социально-страховой номер, имя,
адрес, отдел, данные о зарплате, сведения о подоходном налоге
и другие элементы данных, используемых периодически. В этой
основной записи содержится также указатель, определяющий
Оснобная запись
Соцстрах.
Л/5
Имя
Адрес
Отдел
Заработок
Данные о налогах
Qggg
7
•о
I
а
I
$5
IS
it
*5
G
Запись произбвдстбенной хронологии
Соцстрах. Н?\0тдел , Дата \ Отдел, Дата
ъ
С
Запись заочного обучения
Соц.строхЩ Шкала , Курс , Дата \ Шкала , Кире \Дата\
l
G
Запись праизбодстВенного обучения
Соцстрах. №\ Курс ^ama\ Курс ^Дата\ Курс хДата\
\
Рис. 17.2. Структура записей в типичной базе данных.
номер тома и относительный адрес (имеется в виду устройство
прямого доступа) файла производственной хронологии данного
сотрудника. Другими указателями обеспечивается связь
основной записи с файлами, касающимися образования данного
сотрудника; сам факт существования централизованной базы
данных показывает неэффективность использования уникальных
(«только для этого отдела») кодов и систем организации файлов,
приводящих, скажем, к тому, что ключом при отыскании данных
отдела обучения оказывается социально-страховой номер.
Для обычных, ежедневно выполняемых операций обработки
данных основные сведения о персонале составили бы содержание
единственного физического файла. На выполнении прикладных
программ это обстоятельство, правда, никак не сказалось бы,
поскольку все физические операции ввода — вывода полностью
обеспечиваются управляющей программой базы данных. Тем не
к
368
Глава 17
менее физические операции ввода —вывода должны
выполняться, и тот факт, что для обработки большинства запросов
управляющей программе базы данных достаточно выполнить лишь
одну процедуру поиска и одну операцию считывания, указывает
на хорошую организацию базы данных.
Требование руководства составить список всех сотрудников,
имеющих определенную квалификацию, относится к применениям
специального характера. Пользуясь описанной выше базой
данных и обращением описанной выше макрокоманды GALL к
управляющей программе базы данных, прикладной программист
мог бы написать простую программу, считывающую в
последовательно-одномерном цикле записи файла личных данных. В начале
цикла с помощью макрокоманды GALL запрашиваются имя
сотрудника, адрес, пол, отдел, в котором сотрудник работает в
настоящее время, список отделов, в которых сотрудник работал
раньше, наиболее высокое свидетельство об образовании, а также
производственные курсы при любом учебном заведении, которые
можно было бы расценивать как подготовку в области
управления. Управляющей программой базы данных, имеющей доступ к
форматам данных всех файлов, выясняется, что указатели большей
части запрашиваемых данньщг находятся в основной записи
личных данных; таким образом, отыскивается необходимая запись,
из которой извлекается содержимое соответствующих полей,
используемых для формирования новой записи в соответствии с
запросом прикладной программы. Входящие в состав основной
записи указатели используются для отыскания вторичных
записей, касающихся образования и производственной хронологии
данного сотрудника. После считывания этих вторичных записей
в оперативную память управляющей программой базы данных
извлекается содержимое упоминаемых в запросе полей записи,
включаемое в состав новой, специально организованной по
запросу прикладной программы записи. Когда наконец собраны все
необходимые данные, затребованная запись пересылается в
прикладную программу, которая приступает к проверке ряда
условий — является ли сотрудник женщиной, есть ли у него диплом
об окончании колледжа, встречается ли в списке прежних мест
работы производственный отдел, —после чего управление вновь
передается макрокоманде GALL для считывания и обработки
следующей записи; таким образом, формируется перечень данных
о всех сотрудниках, удовлетворяющих исходным требованиям
(путем исключения тех, которые не удовлетворяют хотя бы
одному из них). Неэффективно? Возможно, но не забывайте, что это —
специальная программа одноразового применения. Тут важна
не эффективность программы, а возможность получить ответ на
разумный запрос.
Системы управления базами данных и передачи данных 369
Конечно, не все базы данных организованы именно таким
образом; существуют разные подходы, и детальное обсуждение
альтернативных структур не относится к теме настоящей книги. Тем
не менее некоторые из важнейших понятий здесь
проиллюстрированы. Во-первых, вторичные данные могут быть найдены с
помощью указателей, включаемых в состав первичной записи
(основной записи в рассмотренном примере). Эта идея
использования указателей позволяет связывать данные в любых сочетаниях,
например личные данные с данными, используемыми при
начислении зарплаты, производственной хронологией, данными,
касающимися образования, профессиональной квалификацией и
другими сведениями, относящимися к одному и тому же человеку.
Чтобы обеспечить возможность начала обработки с учетом разных
данных, вторичные записи и другие первичные записи (подобные
данным, связанным с начислением заработной платы) могут
содержать указатели, отсылающие к соответствующей записи
личных данных. Большинство коммерческих систем управления
базой данных отличаются реализацией этой концепции связи
данных с помощью указателей, но почти неизбежно используют ту
или иную схему связи данных, по существу аналогичную
описанной выше.
Другая важная идея, которая, к сожалению, часто
недооценивается поставщиками систем управления базами данных,
выражается просто: структура базы данных должна отражать
особенности рассматриваемой системы обработки данных. Примером
тому может служить рассмотренная выше база данных
—первичная, или основная, запись личных данных содержала (в
форме одной физической записи) наиболее часто используемые
элементы данных, обеспечивая, таким образом, в большинстве
случаев достаточно эффективное выполнение операций ввода и
вывода. Эффективность выполнения операций ввода — вывода
должна учитываться в управляющей программе базы данных, и тот
факт, что прикладные программисты не интересуются
конкретной реализацией физических операций ввода —вывода, не
может служить оправданием их неэффективного выполнения.
Хорошо структурированная база данных в сочетании с корректно
спроектированной управляющей программой базы данных могут
обеспечить как гибкость, так и эффективность обработки
информации.
Запросы
Изредка используемая руководством специальная информация
требует обработки весьма обширных массивов данных; часто
руководителю нужно узнать лишь текущее состояние того или иного
специального вида запасов, последнюю стоимостную оценку но-
370 Глава 17
вых образцов продукции, личные данные о сотруднике в связи с
его повышением и т. п., аналогичные этому. Обработка подобных
«запросов» лучше всего обеспечивается использованием
терминала, при этом руководитель формулирует свои запросы на
специальном языке, напоминающем естественный; нет смысла
использовать профессионального программиста для кодирования
таких частных одноразовых запросов. Существуют и
предлагаются готовые пакеты математического обеспечения, специально
предназначенные для приема и интерпретации запросов руководства,
С запросными системами, однако, связаны некоторые новые
проблемы. Первая из них касается обеспечения секретности; если
важнейшая для компании оперативная информация оказывается
доступной пользователю терминала, то как исключить возможность
доступа какого-нибудь сотрудника к данным о жалованье его
начальника или использование конкурентом удаленного
терминала для получения данных, касающихся затрат и производства?
В условиях использования базы данных эта проблема
обеспечения секретности может частично решаться средствами
управляющей программы базы данных; поскольку все операции с
обращением к базе данных должны проходить под контролем этого
модуля, управляющая программа базы данных представляется
идеальным местом для реализации таких предупредительных мер,
как проверка специальных номеров пользователей, или паролей,
ограничивающих доступ к секретным данным. Другой, широко
распространенной особенностью систем управления базами
данных являются средства ведения протокола —все сообщения,
принимаемые управляющей программой базы данных,
идентифицируются и записываются, благодаря чему любое событие
истолковывается вполне однозначно. Лучшим, однако, является подход,
который прежде всего обеспечивает невозможность
несанкционированного доступа. Другая проблема, характерная для
запросных систем, связана с тем обстоятельством, что в них часто
используются одновременно многие терминалы. Как следует из
анализа нескольких операционных систем, содержащегося в части IV
этой книги, обслуживание большого числа независимых
терминалов, посылающих в систему запросы, случайно распределенные
во времени, является слабым местом многих вычислительных
систем третьего поколения. И в этом случае требуются некоторые
дополнительные средства.
Управление передачей данных
Эти «некоторые дополнительные средства» часто реализуются в
форме модуля математического обеспечения процессов передачи
данных. В типичной конфигурации один из разделов памяти ЭВМ
отводится под управляющую программу передачи данных, и это-
Системы управления базами данных и передачи данных 371
му модулю математического обеспечения операционная система
передает обеспечение всех операций ввода —вывода, связанных
с терминалами. В этом разделе управляющей программой
передачи данных реализуются такие функции, как идентификация
(пароли и т.д.) пользователя, разрешающая начало сессии,
контроль соответствия терминала прикладной программе, обеспечение
терминальных операций ввода —вывода, распределение памяти,
обеспечение процедур развертывания —свертывания и другие.
Если вам кажется, что это напоминает операционную
мини-систему, то вы очень проницательны.
Как и математическое обеспечение баз данных, управляющий
монитор передачи данных представляет собой очень сложную
и очень дорогую в разработке программу. Существуют и
предлагаются готовые пакеты программ. В состав таких пакетов часто
входят языки вопросно-ответных процедур. В других прикладных
задачах предполагается оперативный прием данных и
оперативное сопровождение файлов; мониторы передачи данных,
обеспечивающие такие функции, часто проектируются в сочетании с
определенными средствами математического обеспечения управле-
дия базы данных; так, например, разработанный фирмой IBM
монитор передачи данных CICS хорошо работает совместно с
математическим обеспечением базы данных IMS той же фирмы, а
математическое обеспечение передачей данных ENVIRON/1 фирмы
CINCOM рассчитано на использование совместно с системой
TOTAL.
Объединение частей в целое — система MIS
Не полагаясь на простое предположение о том, что каждому
хорошо знакомо понятие информационной системы управления
(такое предположение не безопасно, так как среди специалистов
вряд ли найдутся многие, исходящие из одного и того же
определения), сформулируем некоторые положения, определяющие те
применения и процедуры, которые в нашей модели фирмы
связываются с функциями используемой системы MIS. Во-первых,
у нас имеется общая база данных. Предполагается, что
содержимое этой базы данных отражает с максимально возможной
точностью последнее (до минут) состояние доступной информации;
таким образом, важными элементами являются средства
оперативного ввода и сопровождения файлов данных (с
использованием экранного терминала). Доступ к информации, содержащейся
в базе данных, через систему терминалов разрешен лишь
определенным лицам из состава руководства; вторым важным
элементом нашей системы оказывается язык запросов, позволяющий
руководству формулировать краткие, одноразового характера
запросы, не прибегая к помощи отдела программирования. Си-
372
Глава 17
стема должна обеспечивать обработку данных по запросам более
сложного характера, выполняемую в вечернее время с
привлечением отдела программирования или программистов
«полупрофессиональной» квалификации (например, расчетчика, знакомого
с основами языка RPG), подключенных к работе отдела, не
имеющего программистов; таким образом, должны быть обеспечены
средства непланируемой пакетной обработки программ, вводимых
Операционная система
Пакет программ сщлша
Терминальный ббод
задании
Упрабляющая программа базы данных
Монитор передачи данных
Прикладные программы переднего плана
Прикладные программы сронобого раздела
Рис. 17.3. Назначение основных разделов памяти типичной
информационной системы управления.
непосредственно или с удаленных терминалов. Наконец, к
функциям системы относится обеспечение регулярной, планируемой
пакетной обработки заданий — составление стандартных
отчетов, платежных ведомостей и других.
Схематическое изображение программных средств,
необходимых для обеспечения такой системы, представлено на рис. 17.3.
Операционная система — стандартная, поставляемая
разработчиком ЭВМ,— занимает младшие ячейки памяти. Далее следуют
программные средства процедур спулинга; в этой системе нам
предстоит выполнять большой объем пакетных операций ввода —
вывода, так что процедуры спулинга имеют важное значение.
Одна из функций, обеспечиваемых большинством систем
спулинга, состоит в формировании очередей заданий —чтение потока
Системы управления базами данных и передачи данных 373
заданий и запись их для последующего выполнения в память
устройства прямого доступа или на ленту. Дополнительным
средством этого математического обеспечения процедур спулинга
является модуль терминального ввода заданий, который позволяет
вводить задания с удаленных терминалов и включать их в поток
заданий, пересылаемых во вспомогательную память.
В следующем разделе памяти содержится управляющая
программа базы данных. Управление базой данных с помощью про-
Обштный модуль
Стандартные методы доступа
Модуль доступа к базе данных
буферы
Рис. 17.4. Управляющие модули базы данных в разделе прикладной
программы.
граммных средств может быть реализовано одним из двух
способов: либо в форме постоянно хранящегося в памяти модуля,
занимающего отдельный раздел, либо в форме подпрограммы,
аналогичной подпрограмме метода доступа, помещаемой в раздел
прикладной программы (рис. 17.4). Основной недостаток
размещения средств математического обеспечения базы данных в
каждом из разделов, занимаемых прикладными программами,
связан с трудностью передачи данных между разделами; выделение
общих для всех программ областей памяти может упростить
решение проблемы передачи данных, но, однако, эти области
оказываются зависящими от действий программиста. Использование
единого монитора базы данных, занимающего отдельный раздел,
означает, что все программы, требующие доступа к базе данных,
обеспечиваются одним и тем же набором программных средств,
тем самым облегчая решение проблемы одновременного доступа;
однако если доступ к базе данных в действительности необходим
лишь программам одного или двух разделов, то тогда приобретает
значение тот факт, что в системе прикладным программам
отводится в памяти на один раздел меньше.
374
Глава 17
В следующем разделе (рис. 17.3) хранится монитор передачи
данных. Этими средствами программного обеспечения
реализуется определение разделов и распределение памяти между
небольшими и ориентированными на использование терминалов
прикладными программами и обращение, в случае необходимости,
к операционной системе и управляющей программе базы данных.
В данном разделе осуществляется обработка всех прикладных
заданий, введенных через терминалы. Остальные два раздела
отводятся для пакетной обработки заданий. Первый из них
предназначается главным образом для выполнения специальных
коротких программ, отладочных операций и ассемблирования;
если такие задания отсутствуют (очередь заданий во
вспомогательной памяти —спулинг), то раздел используется для
выполнения плановых расчетных работ. Последний раздел памяти
отводится исключительно для плановых расчетных работ.
Уровни приоритетов разделов памяти соответствуют тому
порядку, в каком они были рассмотрены. Наивысшим приоритетом,
как обычно, пользуется операционная система —хотя бы по той
причине, что в ней должны обрабатываться прерывания.
Связанное с операциями ввода — вывода интенсивное использование
процедур спулинга вполне оправдывает присваивание последним
приоритетов второго уровня. Аналогичные доводы применимы и
в отношении управляющей программы базы данных; ее
существование оправдывается только необходимостью выполнения
операций ввода — вывода. Прикладные задачи, вводимые через
терминалы, обычно характеризуются большим числом операций
ввода — вывода, хотя иногда могут вводиться и длинные расчетные
задачи (например, задачи статистической обработки некоторой
совокупности данных); программы этого раздела должны иметь
достаточно высокий уровень приоритета, но не столь высокий,
как уровень приоритета «наиболее охраняемых» подпрограмм
спулинга и управления базой данных. Два раздела фона отводятся
для заданий, требующих пакетной обработки, при этом более
высокий уровень приоритета присваивается заданиям
специального и отладочного характера, а менее высокий —расчетным
работам. Эта схема приоритетов не является попыткой установить
относительную важность тех или иных заданий (расчетные
работы, конечно, важнее, чем задания, связанные с компиляцией
программы); выбранная схема приоритетов скорее отражает
влияние каждого типа выполняемых программ на функционирование
вычислительной системы. Так, например, если бы некоторому
расчетному заданию был присвоен высший приоритет, то,
захватив на десять минут центральный процессор, расчетная
программа могла бы на это время лишить остальных пользователей всех
ресурсов системы; присвоив этому заданию более низкий уровень
приоритета и допустив возможность прерывания его обработки
Системы управления базами данных и передачи данных 375
другими, менее важными заданиями, можно растянуть суммарное
время его счета до одиннадцати или даже двенадцати минут,
однако доступность ресурсов системы для программ других типов
более чем оправдывает это незначительное неудобство в обработке
данного планового задания.
Точка зрения прикладного программиста
8аймемся на минуту рассмотрением нашей системы с несколько
иной точки зрения, а именно с точки зрения составителя данной
прикладной программы. Представим себе, что программа
написана на Коболе и должна выполняться, используя управляющие
функции монитора передачи данных. Прикладная программа и
внешний мир разделены несколькими уровнями системного
математического обеспечения (рис. 17.5). Прежде всего, конечно,
мы сталкиваемся с вездесущей операционной системой; но в
нашем случае прикладная программа даже не имеет возможности
непосредственно обращаться к операционной системе. Все
операции ввода —вывода, передаваемые с терминалов,
контролируются монитором передачи данных, и все обмены с файлами данных
контролируются управляющей программой базы данных; запрос
на данную операцию ввода — вывода поступает в операционную
Операционная система
Управляющая программа
базы данных
Кобол-
программа
Монитор передачи
банных
!
Операционная система
Рис. 17.5. Уровни системного математического обеспечения.
376 Глава 17
систему лишь после того, как он санкционирован этими модулями
программного обеспечения. Программисту оставлено слишком
мало возможностей для случайного или преднамеренного
разрушения системы, в особенности когда речь идет о тщательном анализе
программы, составленной на языке высокого уровня. Это
обстоятельство является еще одним важным доводом в пользу систем
управления базами данных и систем передачи данных по крайней
мере с точки зрения руководства компании.
i
Перспективы
В наше время предлагаемые разработчиками готовых пакетов
математического обеспечения системы управления базами данных
и мониторы процессов передачи данных пользуются очень
высоким спросом. Обеспечиваемые ими функции следует
рассматривать как неотъемлемую составную часть любой вычислительной
системы будущего, при этом средствами их реализации могут быть
либо поставляемые вместе с ЭВМ требуемой конфигурации
модули операционной системы, либо, что более вероятно, некоторое
сочетание аппаратных средств и математического обеспечения.
Краткие выводы *
В этой главе, используя в качестве иллюстрации
информационную систему управления, мы ввели важные понятия управления
базами данных и управления передачей данных. Возникновение
этих программных средств обусловлено стремлением расширить
доступ сотрудникам рассматриваемой организации и, в частности, i
ее руководства к информации, хранящейся в ЭВМ, а также к 1
средствам автоматизированной обработки данных. Гибкость и ^
быстрота реакции относятся к основным требованиям, предъяв- *
ляемым к таким средствам математического обеспечения.
Деступ к данным более широкому кругу сотрудников
организации может быть обеспечен в том случае, когда к данным отно- |
сятся как к одной из ценных разновидностей ресурсов органи- ■
зации, что требует надлежащего их распределения и контроля.
В исторически сложившейся практике программисты для каждой
прикладной задачи проектировали независимые файлы, стремясь
обеспечить наиболее эффективное решение данной прикладной ^
задачи. Такой подход часто приводил к избыточности и, как
следствие, некорректности данных, что создавало в свою очередь
проблемы их обновления и программного сопровождения.
Подход, основанный на применении централизованной базы
данных, исключает избыточность данных и обеспечивает их
тщательное структурирование, при этом взаимосвязь между запися-
Системы управления базами данных и передачи данных 377
ми реализуется с помощью указателей. Для доступа к
информации, хранящейся в базе данных, прикладная программа должна
сначала передать управлецие управляющей программе базы
данных, непосредственно выполняющей операции ввода —вывода;
осуществление такого рода операций единым модулем
математического обеспечения значительно повышает контролируемость
доступа к данным. Часто запрашиваемые прикладной программой
(с помощью макрокоманды CALL или специальной макрокоманды
обращения к управляющей программе базы данных) данные
могут включать те или иные специальные элементы. В этих случаях
управляющая программа базы данных, выполняя физические
операции ввода или вывода, формирует запись требуемого
состава; таким образом, индивидуальные программы могут
составляться независимо от конкретных особенностей физических операций
ввода — вывода, что является важным фактором в такой
зависящей от постоянных технических усовершенствований области,
какой является обработка данных. Дополнительное
преимущество состоит в том, что прикладной программист избавлен от забот,
связанных с программированием операций ввода —вывода, и
может уделить больше внимания существу прикладной задачи.
Программные средства управления передачей данных
необходимы для обеспечения прикладных операций, выполняемых с
терминала. По существу, управляющая программа передачи данных
выполняет свои функции в пределах одного из разделов памяти
во многих отношениях, так же как операционная система
обеспечивает работу всей вычислительной машины.
Общеупотребительным средством математического обеспечения систем передачи
данных является язык запросов, который позволяет пользователю,
не искушенному в программировании, обращаться к базе данных
и осуществлять поиск требуемой информации.
Еще одно, последнее преимущество использования
программных средств передачи данных и управления базами данных
связано с обеспечением безопасности хранения информации. Все
прикладные программы должны выполняться в рамках
ограничений, накладываемых системными средствами математического
обеспечения, тем самым реализуется еще один уровень контроля.
Автоматизированное протоколирование всех операций — весьма
широко используемая функция этих средств математического
обеспечения —также способствует решению проблемы
несанкционированного доступа к данным.
УПРАЖНЕНИЯ
1. Почему программисты пользуются независимыми файлами,
организуя их соответственно особенностям конкретной
прикладной задачи?
14-821
378
Глава 17
2. Обсудите преимущества автоматизированного управления
базой данных.
3. Обсудите недостатки автоматизированного управления
базой данных.
4. Поясните использование указателей для отыскания
логически связанных записей.
5. Какие функции выполняются средствами математического*
обеспечения передачи данных?
6. Средства управления базой данных могут быть реализованы
либо в форме программного модуля, занимающего отдельный
раздел, либо как своего рода метод квазидоступа. Поясните разницу
между этими возможностями.
7. Обсудите уровни системного математического обеспечения,,
играющие роль посредника между прикладной программой и
аппаратными средствами, в том случае, когда прикладная
программа составлена на языке высокого уровня, а система включает
программные средства управления базой данных, управления
передачей данных и процедуры спулинга.
Глава 18
ПРИМЕНЕНИЕ МНОГОМАШИННЫХ СИСТЕМ
Введение
Последние годы в литературе по вычислительной технике ведется
острая дискуссия, отражающая столкновение точек зрения в
отношении распределенных мини-ЭВМ и централизованного
применения больших ЭВМ. Позиция сторонников мини-ЭВМ по
существу сводится к тому, что стоимость этих машин постоянно
падает, и поэтому представляется весьма целесообразным для
выполнения каждой существенной функции организации
использовать отдельную машину, составляя для нее независимые
программы. Сторонники больших ЭВМ утверждают, что при
современных возможностях операционных систем, наличии виртуальной
памяти и терминалов все виды обработки данных могут быть
сосредоточены в одном или нескольких больших
вычислительных центрах, что позволит использовать общие базы данных и
общее математическое обеспечение для реализации различных
функций организации. Этот, по существу, старый вопрос:
«Следует ли осуществлять управленческие функции централизованно
или децентрализованно» — вновь стал актуальным в условиях
технического прогресса. Обе точки зрения имеют своих
сторонников.
Не все специалисты считают, что возможно лишь
альтернативное решение проблемы «макси или мини?». Большие и малые
машины имеют свои преимущества; почему бы не использовать
лучшие свойства тех и других? Ниже будет рассмотрено одно из
применений, иллюстрирующее такую возможность —
автоматизированную систему контроля универсама. В названной системе
-ежедневные торговые операции контролируются с помощью
мини-ЭВМ, установленной в магазине, которая пересылает данные
в центральную машину торгового объединения, обеспечивающую
-составление различных сводок и решение других традиционных
задач обработки данных (предполагается наличие связи между
центральными процессорами главной машины и мини-ЭВМ
магазина). В данной главе не рассматриваются какие-либо новые
•средства математического обеспечения или возможности
операционных систем. Однако в приведенном примере многомашинной
14*
380
Глава 18
системы используются почти все методы, рассмотренные в
предыдущих главах, и его анализ служит естественным завершением
основного содержания всей книги.
Некоторые тенденции разработки новых
аппаратных средств
Каждый, кому приходилось покупать карманные калькуляторы,
наверное заметил, что в последние годы стоимость этих устройств
резко падала, и в отличие от многих других товаров, удешевление
которых обычно сопровождается снижением качества и сужением
спектра выполняемых ими функций, заметное падение стоимости
карманных калькуляторов сопровождалось их улучшением во
всех отношениях. В чем причина? Одной из причин является
конкуренция, но не все объясняется только этим. Основная причина
заключается в существенном расширении возможностей
промышленного производства интегральных полупроводниковых схем.
Технические усовершенствования производственных процессов
привели к снижению стоимости изготавливаемых электронных
схем, а более низкая стоимость электронных схем, в свою очередь,
означает, что даже при более низкой продажной цене
производство оказывается по-прежнему прибыльным.
Электронные схемы, используемые в карманных
калькуляторах, весьма напоминают электронные схемы, входящие в состав
современных вычислительных машин; не удивительно поэтому,
что стоимость вычислительных машин также падает. Это
особенно справедливо в отношении мини- и микро-ЭВМ. В наше время:
покупатель, уплатив сумму, не намного превышающую стоимость
хорошего терминального устройства, предназначенного для
удаленного от ЭВМ ввода заданий в пакетном режиме, может
приобрести мини-ЭВМ и использовать ее для независимого выполнения
программ; эти современные малые машины по своей
производительности часто не уступают хорошим машинам второго
поколения. Если они не так дороги (и при этом продолжают дешеветь),
то почему бы не предоставить к услугам каждого,
нуждающегося в ЭВМ, отдельную мини-машину? Это явилось бы решением
проблемы доступа к ЭВМ. Кроме того, опыт последних лет
показывает, что использование большой централизованной
вычислительной машины означает очень серьезные проблемы обеспечения
надежности и безопасности хранения информации: путем
децентрализации и распределения процедур обработки данных среди
многих мини-ЭВМ исключается опасность концентрации данных
в одном хранилище.
Прогресс электронной техники оказал также благоприятное
влияние и на возможности больших ЭВМ. Исходя из
экономических критериев, обычно применяемых для оценки больших ма-
Применение многомашинных систем 381
шин и основывающихся на стоимости «единицы вычисления»
одна машина следующего поколения, по-видимому, заменит две
машины предыдущего поколения при увеличении стоимости
машины всего на 25%. Высокое быстродействие оперативной памяти
и главного процессора, а также возможности операционных
систем (в том числе средств виртуальной памяти) позволяют
использовать все преимущества этих значительно более мощных,
чем мини-ЭВМ, машин. Возможность выполнения в одной машине
огромных объемов вычислительных работ служит существенным
стимулом к централизации вычислительных операций, реализуя,
таким образом, преимущества использования общего
математического обеспечения и общих данных.
В каждом из описанных выше подходов есть свои слабые
стороны. Большая централизованная машина действительно
представляет собой удобный объект для возможных диверсий, и
обусловленный действиями людей или чисто техническими причинами
выход из строя единого центра обработки данных, от которого
зависит вся деятельность организации, может привести к
катастрофическим последствиям. Использование централизованной
вычислительной системы означает, что деятельность периферийных
центров обеспечивается связью с главной машиной с помощью
телефонных линий или каких-нибудь других средств связи;
средства телеобработки не могут контролироваться данной
организацией и обычно оказываются источником проблем. Наконец,
централизация процессов обработки данных характеризуется
тенденцией к возникновению некоторого круга специалистов, которые
благодаря возможности управлять доступом к информационным
ресурсам фирмы приобретают вполне реальную (и часто не
контролируемую) власть.
Наиболее слабым местом большинства мини-ЭВМ является
их математическое обеспечение. К примеру, в библиотеках
большинства мини-ЭВМ недостаточно полны пакеты хорошо
отлаженных программ статистической обработки. Многие машины, в
особенности из числа самых малых, оснащены компиляторами только
с одного языка программирования; в некоторых случаях
приходится писать программы на языке ассемблера очень низкого
уровня и с ограниченными возможностями. Составляет проблему
недостаточный объем оперативной памяти, ограничивающий
возможные размеры программы или требующий от программистов
использования изощренных методов применения оверлейных
структур. Вновь возникает старая проблема, связанная с тем, что
прикладной программист должен предусматривать мельчайшие
подробности процесса обработки. В дополнение к этому под-»
ход, основанный на применении «децентрализованных мини-
ЭВМ», исключает всякую возможность централизации базы
данных.
382
Глава 18
Почему бы не воспользоваться лучшими свойствами машин
обоих классов? В данной главе мы будем рассматривать один из
примеров, в котором использован именно такой подход —
систему автоматизированного контроля в универсаме. Упомянутая
система осуществляет контроль входных и выходных потоков,
сопровождающих каждодневные торговые операции, с помощью
отдельной мини-ЭВМ, установленной в каждом магазине
объединения. Ежедневно мини-ЭВМ пересылают информацию в
центральную ЭВМ объединения, реализующую традиционные функции
обработки данных и управление централизованной базой данных.
Как мы увидим, мини-ЭВМ предназначаются для обеспечения
отдельных прикладных функций, тогда как большая
централизованная вычислительная система «перелопачивает» массу
числовых данных и обеспечивает оперативную гибкость. Так как
важнейшие торговые операции в универсаме выполняются с помощью
местной ЭВМ, то выход из строя центральной машины не
сказывается существенно на его работе; по этой же причине
использование телекоммуникационной сети не связано ни с какими
трудностями.
В дальнейшем обсуждении мы будем предполагать, что
рассматриваемая система автоматизированного контроля уже
внедрена и в течение некоторого времени находится в эксплуатации.
Поскольку наиболее интересные составляющие этой системы
связаны с работой универсама, мы начнем наше рассмотрение с
функций мини-ЭВМ.
В универсаме. Функции мини-ЭВМ
Вы не обратили внимание на то, что теперь почти все фасованные
товары, находящиеся на полках универсама, снабжаются
товарными кодами (рис. 18.1)? Эти коды необходимы для
автоматизированных контрольных операций; они служат для идентификации
объема, типа, вкуса и других характеристик продуктов. При
следующем посещении универсама сравните коды какого-нибудь
популярного сорта пудинга или желе; вы установите, что
вкусовые качества и вес расфасованного товара кодируются своими
числами.
В универсаме с автоматизированной системой контроля
кассир-контролер не проверяет стоимость каждой покупки, набирая
ее величину в цифровом выражении на кассовой клавиатуре, а
просто экспонирует каждую покупку перед читающим
устройством. Товарный код, определяемый последним, пересылается в
мини-ЭВМ (рис. 18.2), где из таблицы или файла извлекается
текущая цена товара. Затем вычисляется соответствующая
пошлина, которая вместе с ценой товара добавляется к сумме счета
покупателя. Для сведения покупателей список всех купленных то-
Применение многомашинных систем
383
■.■<,.*.• ■ -4х
.# ;i*f.
ш ■■
I
:*Ч
.'■"f^
^*
r*-^.
i^^i-S&^si^
^^i^ij&<:-.- .T.v. vt^-4
Рис. 18.1. Товарные коды (фото любезно предоставлено фирмой Rroger
Company).
Линия контрольного
Шкода
Г
Касса
А
1
1
ч
/*~\
1 Рабочее \
V место J
—[
Камера
хранения
Устройство
чтения тобар-
1 ных кадоб
>
• Ншш-ЭбМ
\
А.
Местная
база
банных
Рис. 18.2. Автоматизированная система контроля.
384
Глава 18
варов печатается на контрольном пункте. Пока все это
происходит, ЭВМ вычитает единицу из имеющегося в магазине
количества данного вида товара, обеспечивая, таким образом,
«ежесекундный» контроль учетных данных. Наконец, когда в счете
учтены данные о всех покупках, кассир-контролер набирает
сумму, получаемую от покупателя, а ЭВМ вычисляет и печатает
требуемую сумму сдачи. Если покупатель изменит свое решение,
то контролер нажимает клавишу отказа и с помощью читающего
устройства посылает данные о возвращаемом товаре, при этом
в графе учетных данных прибавляется единица к количеству
соответствующего вида товара, а из суммы счета вычитается сумма
стоимости товара (и пошлина,, если она предусматривается).
Что могло бы служить обоснованием необходимости внедрения
в универсаме автоматизированной системы контроля? Прежде
всего, как часто указывают, выигрывает покупатель —
контрольные операции должны выполняться быстрее, что вполне очевидно
каждому, кому доводилось простаивать в очереди, ожидая, пока
младший клерк сбегает в плановый отдел, чтобы уточнить цену
пучка сельдерея. Хранение информации о ценах в памяти ЭВМ
экономит время, расходуемое на кассовый набор цен, и исключает
возможное раздражение покупателей по поводу отсутствия цен
на товары. Таким образом, внедрение системы положительно
влияет на экономический баланс магазина, так как позволяет
пропустить большее число покупателей, пользуясь меньшим числом
контрольных линий и снизить расходы, связанные с наймом
обслуживающего персонала. Другое важное преимущество
системы автоматизированного контроля состоит в уменьшении
количества ошибок при определении цен. Когда кассир, ошибаясь,
получает с вас больше, чем нужно, то, возможно, заметив это,
вы можете ему указать на ошибку, однако, что, если он
ошибается в. вашу пользу? Вопреки распространенному убеждению,
большинство магазинов розничной торговли из-за ошибок
сотрудников больше теряют, чем получают. Вычислительные машины
ошибаются реже, чем люди.
Обучение персонала для работы в универсаме, не имеющем
автоматизированной системы, имеет свои трудности — на
обучение продавца-контролера требуется время. Автоматизация
контрольных операций позволяет свести время обучения к минимуму.
Перечисленные преимущества представляются не существенными
в сравнении с тем влиянием, какое система автоматизированного
контроля оказывает на процессы маркировки товаров и их
учета. Во что обходится универсаму необходимость указания цены
на каждой единице предназначенных для продажи товаров?
Сколько здесь требуется одного только труда — многие часы в течение
каждой недели! В системе автоматизированного контроля цены
вводятся в машину только один раз; в последующем правильная
Применение многомашинных систем 385
цена просто отыскивается в памяти машины в соответствии со
значением товарного кода, установленным устройством чтения.
Непрерывное ведение учетной информации средствами
вычислительной машины представляет еще одно очень важное
преимущество. До применения системы автоматизированного контроля
состояние запасов важнейших видов товаров учитывалось
вручную и соответствующие данные направлялись с курьером в центр
обработки данных объединения, где с помощью программ
анализа и управления запасами определялись объемы заказов и
маршруты поставок, обеспечивающие оптимальную загрузку
транспортных средств. Такой порядок составления учетной
информации требует много времени, обходится дорого, ограничивается
сравнительно небольшим числом важнейших видов товаров и
отличается очень большой вероятностью ошибок. В новых
условиях сведения о наличии запасов товаров каждого вида просто
пересылаются из памяти мини-ЭВМ в центральную машину в
конце каждого рабочего дня. Контрольные чеки и контрольные
выборки учитываемых товаров используются для проверки
точности автоматизированной системы, а также в качестве исходных
данных для оценки убытков магазина, связанных с хищениями.
Реальная картина, однако, не столь благополучна во всех
отношениях. Профсоюз, конечно, не может приветствовать потерю
и/или снижение требуемой квалификации нескольких рабочих
мест в каждом универсаме. Профсоюзные деятели чаще всего
указывают на недостаточную гибкость автоматизированной системы,
ссылаясь на излюбленный пример ситуации, когда в одном из
магазинов вычислительная машина вышла из строя. Так как
указатели цен на товарах отсутствовали и магазин не' располагал
обученными продавцами-контролерами, то приходилось либо
закрыть магазин, либо доверить самим покупателям указание цен
маркировочным пером. (Кстати, в упомянутом магазине выбрали
вторую из этих возможностей и поздно вечером с
удовлетворением установили, что убытки, которые можно отнести за счет
воровства, оказались на пять процентов меньше по сравнению с
обычным режимом работы.) Еще один серьезный вопрос, который
ждет своего решения, касается влияния автоматизированной
системы контроля на психологию и привычки покупателя. Какие*
либо суждения по этому поводу пока отсутствуют.
Центральная машина
Подобно многим крупным продовольственным торговым
объединениям, наша фирма не упускает возможностей, связанных с
широким ассортиментом продаваемых товаров и использованием
эффективных систем учета и распределения, с тем чтобы
обеспечить определенные экономические преимущества по отношению
386
Глава 18
к менее крупным конкурирующим фирмам. Эксплуатация систем
учета и распределения требует большой загрузки вычислительной
машины. Помимо функции непрерывного отслеживания объемов
наличных товаров и их размещения, ЭВМ рассчитывает
оптимальные в меняющихся условиях объемы заказов на каждый вид
входящих в ассортимент товаров и печатает готовые формы заказов
тех товаров, фактические запасы которых оказываются ниже
допустимого уровня. Учетные ведомости дают возможность
руководству определять, какие виды товаров пользуются более
высоким или более низким спросом, что является важной
информацией в розничной торговле.
Распределение тесно связано с учетом; к этой функции
относится транспортировка товаров с центрального склада в отдель-
, ные магазины объединения. Пользуясь вычислительной машиной,
стремятся найти такое распределение грузов, чтобы каждый
грузовик был полным и чтобы маршрут каждого из них между
отдельными магазинами оказался кратчайшим. Эта задача
решается методами линейного программирования.
В нашей компании все процессы обработки данных выполня-
,ются в одной большой вычислительной машине. Кроме двух
важнейших применений, описанных выше, она выполняет все
традиционные процессы обработки данных, такие, как
составление платежных ведомостей и ведение записей. До внедрения
централизованной обработки в конторах центрального склада и
каждого филиала использовались свои вычислительные машины;
теперь там установлены и терминалы дистанционного ввода в
пакетном режиме, и их связь с центральной машиной
осуществляется по телефонным линиям. Пользуясь языком запросов,
руководство и персонал филиалов могут получать данные о состоянии
запасов различных товаров с помощью телетайпного терминала.
Работа центральной машины обеспечивается операционной
системой, основные возможности которой теперь не так трудно
предугадать. Это — система с виртуальной памятью, включающая
программные средства управления процедурами спулинга,
средства дистанционного ввода заданий, систему управления базой
данных и процессом передачи данных. Кроме возможностей
дистанционного ввода заданий предусматриваются средства обмена
между центральными процессорами главной машины и мини-ЭВМ,
установленными в каждом магазине. Эти обмены осуществляются
с определенными интервалами и управляются операционной
системой центральной ЭВМ. Учетная информация, поставляемая
мини-ЭВМ отдельных магазинов, используется центральной
машиной в программах распределения и учета. Данные о ценах и
отправляемых партиях товаров посылаются в память местных
мини-ЭВМ в начале каждого рабочего дня, обеспечивая, таким
образом, каждый магазин самой точной текущей информацией.
Применение многомашинных систем 387
Для чего нужны мини-ЭВМ?
Мы, конечно, могли бы контрольные терминалы каждого
универсама просто связать телефонными линиями непосредственно с
центральной машиной. При таком подходе стоимость
вычислительной машины в каждом универсаме можно было бы снизить,
хотя весьма вероятно, что такая экономия окажется
недостаточной для покрытия расходов по эксплуатации телефонной линии,
в особенности если какой-нибудь новый магазин находится на
большом расстоянии от центра. Имея в виду эту весьма
проблематичную возможность снижения расходов, учтите тот риск,
который связан с выполнением всех операций с помощью
единственной центральной машины — если по какой-либо причине машина
выходит из строя, то на время оказывается невозможной работа
всех магазинов объединения. В системе, предусматривающей свои
мини-ЭВМ в каждом магазине, выход из строя центральной
машины не сказывается на работе ни одного из них, а выход из строя
отдельной мини-ЭВМ нарушает режим работы только одного
магазина. Существует еще один аргумент против использования
прямой телеобработки в системах контроля всех магазинов —
наша система телефонной связи может быть самой лучшей в мире,
однако в очень длительных процедурах обмена информацией
между центральной машиной и терминалом линия телефонной
связи оказывается самым ненадежным элементом.
Характерные для универсама операции естественно
реализуются средствами мини-ЭВМ. Такие установки сравнительно
недороги, что имеет определяющее значение при необходимости
закупки большого числа м-ини-ЭВМ. Большинство схемных
ошибок в машине на полупроводниковых элементах обнаруживается
в течение нескольких первых часов ее эксплуатации, и после их
устранения вычислительная система обычно работает с
минимальными сбоями. Рассматриваемый пример использования
многомашинной системы сам по себе сравнительно не сложен — принять
данные из центральной машины, записать их на диск, принять
данные из устройства чтения товарных кодов, просмотреть данные,
соответствующие номеру партии, составить счет, увеличить или
уменьшить значение элемента учетных данных и по запросу
переслать информацию в центральную машину.
Почему нельзя обойтись только мини-машинами?
Если мини-ЭВМ настолько хороши, то зачем вообще центральная
машина? Главная причина использования больших машин
состоит в том, что возможности мини-ЭВМ оказываются
недостаточными для прогона программ, необходимых нашей фирме для
обеспечения сложных систем учета и распределения. Короче говоря,.
388
Глава 18
малая машина не может обрабатывать большие программы так
же хорошо, как большая.
Есть еще одна причина, заставляющая отказаться от всяких
попыток использовать мини-ЭВМ для решения большого
количества задач. Как только эти машины становятся
многоцелевыми, возникает необходимость в соответствующих специалистах.
Если каждому магазину придется иметь своих программистов и
операторов, то экономический эффект от внедрения
автоматизированной системы контроля значительно снижается. К этой
проблеме близко примыкает вопрос о надежности — в современных
вычислительных машинах большая часть ошибок связана не с
аппаратными средствами, а с программированием и определением
данных. Использование мини-ЭВМ для решения только одной
прикладной задачи на основе хорошо отлаженной программы,
эксплуатируемой во многих других вычислительных системах,
исключает ошибки, связанные с модификацией программ.
Персонал универсама должен видеть в мини-ЭВМ некий «магический
ящик» и не пытаться изменить его возможности. Такой подход,
вероятно, не понравится программистам, однако, по существу,
опломбирование машины может быть очень эффективным
средством повышения надежности.
Краткие выводы
В этой главе мы рассмотрели один пример специального
применения вычислительных машин — автоматизированную систему
контроля операций в универсаме. Мини-ЭВМ, установленная в самом
универсаме, используется для чтения товарных кодов,
указываемых на упаковке, поиска в заранее составленном списке цен
товаров запрашиваемого вида, составление предъявляемого
покупателю счета, определение суммы сдачи и ведение учетной
информации. По запросу информация пересылается в центральную
машину, обеспечивающую ведение базы данных всей компании,
где получаемые данные используются для решения сложных
задач учета и распределения. Кроме того, центральная машина
обеспечивает традиционные формы обработки данных, операции
дистанционного ввода заданий с местных терминалов, установленных
в филиалах компании и режим диалога терминальных вопросно-
ответных систем. В ней реализовано большинство концепций
операционных систем, рассмотренных нами в предыдущих
семнадцати главах книги, в том числе виртуальная память, спулинг,
дистанционный ввод заданий, управление базами данных и
управление процессами передачи данных.
В этой главе описано одно важное представление, связанное
с двойственным характером рассматриваемого примера, —
локальное, одноцелевое применение, требующее высокой надежное-
Применение многомашинных систем 389
ти и быстрой реакции в сочетании с решением сложных
многомерных задач линейного программирования. В этой ситуации
было решено использовать вычислительные машины двух весьма
отличающихся друг от друга классов, макси- и мини-ЭВМ
сочетая при этом преимущества тех и других. В этом примере'вновь
нашла свое подтверждение мысль, согласно которой не существует
общего ответа на вопрос: какое решение является лучшим?
Прежде чем станет возможной осмысленная постановка этого вопроса,
необходимо добиться полного понимания существа применения
ЭВМ и точно определить критерий эффективности. Если
необходимо найти точное решение задачи линейного программирования
с 500 переменными, то использование мини-ЭВМ
нецелесообразно. Если решающим является требование высокой надежности и
доступность всех ресурсов машины в течение длительных
периодов времени ежедневно, то не рассчитывайте на использование
терминалов и телефонных линий. Эмпирические правила и модные
теории не освобождают от необходимости изучения системы.
Несколько следующих страниц мы, вопреки нашему обычному
правилу завершать главу изложением кратких выводов, посвятим
беглому рассмотрению нескольких многомашинных систем,
подобных выше описанной.
Автоматическая круглосуточная касса
К последним нововведениям в банковом деле относится
автоматическая круглосуточная касса (рис. 18.3) — устройство,
позволяющее вкладчикам в любое время суток выполнять банковские
операции без помощи кассира. С внешней стороны касса имеет вид
тяжелой стальной двери, открываемой с помощью специальной
карты и служащей защитой клавишного пульта, как правило,
небольшого дисплея. Прежде чем начать банковские операции,
клиент должен ввести четырех- или пятизначное число,
идентифицирующее пользователя; введя соответствующий
идентифицирующий код, можно с помощью терминала получить деньги по
чеку, сделать вклад, снять деньги с депозита, получить по карте
долгового обязательства ссуду наличными деньгами и
проделать ряд других банковских операций.
Внутри автоматической кассы содержится сейф, а также
механические и электронные элементы, обеспечивающие чтение карт и
работу дисплея, наличные деньги и мини-ЭВМ. Мини-ЭВМ
управляет выполнением всех банковских операций, а также ведет
список всех деловых операций, фиксируемых на бумажной ленте,
магнитной ленте или диске; в определенное время эта информация
курьером или по линиям телеобработки передается в
центральную машину банка, которая обеспечивает подготовку отчетов,
390
Глава 18
■$у* #ф ■''' * s.: >&m ■■■:
Рис. 18.3. Терминал автоматической круглосуточной кассы (фото любезно»
предоставлено фирмой Mosler Safe Company, отделение фирмы American
Standard Corporation).
обновление файлов и другие типичные для банковских операций
процессы обработки данных.
Основное преимущество использования автоматических касс
состоит в тех удобствах, которое они представляют для
клиентов, — банковские услуги в любое время суток без каких-либо
затруднений и необходимости общаться с кассиром-клерком (что
означает дополнительные расходы для банка и отсутствие полной
гарантии тайны вкладов). В конкурентной борьбе банков в
условиях ограниченного местного спроса чуть большие удобства,
предоставляемые клиенту, часто могут вызывать заметное
увеличение доли вкладов, поскольку клиенты могут отказываться от
услуг одного банка в пользу другого, находя формы обслуживания
последнего более приемлемыми для себя.
Весьма широкие возможности использования автоматических
касс связаны с работой филиалов банка. Каждый раз с открытием
нового торгового центра открывается новый филиал банка, на
что тратятся сотни тысяч долларов. Причиной тому служит
постоянно развивающаяся тенденция к обеспечению максимального
Применение многомашинных систем 391
удобства банковских услуг — можно надеяться, что большие
удобства обеспечат большую долю вкладов.
Автоматическая касса при меньшей стоимости может
выполнять многие функции филиала банка. Почему бы просто не
установить в углу универсама автоматическую круглосуточную кас-
юу? Преимущества, получаемые банком, очевидны — новый
филиал (или его аналог) менее чем за 50 тыс. долл. Владельцам
универсама такой подход также нравится — наличие местного
источника банковских услуг и оплата чеков клиентов наличными
деньгами позволяют магазину извлекать свою выгоду.
Во многих штатах в связи с таким подходом встал ряд
вопросов юридического характера, остающихся до сих пор
нерешенными. Как и в случае систем автоматизированного контроля,
многие еще сомневаются относительно того, насколько
приемлема для клиента автоматизация таких деловых операций, которые
традиционно предполагали человеческое общение. Однако с
технической и экономической точек зрения системы автоматических
касс, использующие местные мини-ЭВМ для выполнения простых
деловых операций и большую централизованную машину,
обеспечивающую управление базой данных и подготовку и выдачу
сводных отчетов, представляются весьма целесообразными.
Автоматизация сбора исходных данных
При выполнении любой производственной операции приходится
иметь дело с проблемой сбора данных о затратах труда и
управления технологическим процессом. Традиционные методы,
использующие карты распределения рабочего времени и
заполняемые от руки таблицы рабочих операций, не исключают ошибок
и приписок. Многие фирмы, решая эту задачу, установили ряд
терминалов сбора данных, обязав рабочих вводить данные о всех
выполненных операциях (время начала, время окончания, факт
завершения операции и т. д.), используя для этого пакет
технологических карт, код личного маркера и простой клавишный набор.
Часто такие терминалы непосредственно связаны с мини-ЭВМ,
которая обеспечивает проверку точности входных сообщений,
посылает запросы руководству предприятия относительно
корректности данных или, при необходимости, хронометрирует операции
и запоминает принимаемые данные. В определенное время эти
данные пересылаются в центральную машину, обеспечивающую
ведение базы данных и выполнение программ анализа
информации.
392
Глава 18
« Интеллектуальные » терминалы
Интеллектуальными называют терминалы, которые могут
выполнять некоторые логические функции. В типичной конфигурации
аппаратных средств интеллектуальный терминал используется
в качестве станции дистанционного ввода заданий, посылающей
программы и потоки заданий в центральную машину.
Последняя с помощью процедур спулинга вносит их в очереди заданий
для последующего выполнения; результаты обработки
посылаются обратно в терминал.
Такие терминалы широко используются для сжатия данных.
Обычно в комплектацию терминала входят устройство чтения
дарт, печатающее устройство, вероятно, телетайп консольного
типа и устройство перфорации карт. С помощью этих устройств
часто обрабатываются записи, включающие большое число
пробелов. При выдаче результатов на печатающее устройство, как
правило, используется специальная организация данных, в
соответствии с которой с помощью заголовков выделяются колонки
данных. Интеллектуальный терминал обеспечивает обмен между
удаленной станцией и центральной машиной только существенными
данными, исключая пробелы в исходных данных и внося
необходимые пробелы, заголовки разделов и номера страниц в
распечатываемые выходные данные. Это означает, что по линиям
телеобработки пересылается лишь минимальный объем данных, а линия
связи часто оказывается наиболее узким местом в работе системы.
Нельзя ли назвать терминал телеобработки мини-машиной?
Можно говорить лишь о приблизительной границе, разделяющей
терминалы и мини-ЭВМ. При максимальных логических
возможностях терминала периферийный пользователь может
выполнять свои несложные каждодневные процедуры обработки данных,
не обращаясь к помощи центральной машины и не пользуясь
дорогостоящими линиями телеобработки. В тех случаях, когда
для решения прикладной задачи необходимы возможности
центральной машины, удаленная мини-ЭВМ может просто «сменить
название» и стать терминалом дистанционного ввода заданий.
Конфигурации вычислительных систем, включающие мини- и
макси-ЭВМ, имеют будущее и в широкоиспользуемых системах
обработки данных.
Краткие выводы
При решении далеко не всех практических задач требуются
возможности большой вычислительной машины, но в то же время
для некоторых применений ресурсы мини-ЭВМ оказываются
недостаточными. При решении ряда прикладных задач обработки
Применение многомашинных систем 393
данных применяются комплексы вычислительных машин обоих
типов, сочетающие, таким образом, в себе лучшие свойства тех и
других.
УПРАЖНЕНИЯ
1. Стоимость аппаратных средств постоянно падает, чего
нельзя сказать о стоимости рабочей силы. Разработка программ
осуществляется в основном вручную. Каких изменений в области
программирования можно ожидать в будущем исходя из этих
немногих простых фактов?
2. Почему в прикладной системе нашего примера мини-ЭВМ
устанавливаются в отдельных универсамах торгового
объединения?
3. Почему с помощью мини-ЭВМ нельзя решить все задачи
автоматического контроля в универсаме?
4. Нет ли у вас каких-либо соображений относительно
возможной связи между мини-ЭВМ универсама и автоматической
круглосуточной кассой, в один прекрасный день установленной
в магазине?
5. Обсуждая использование местных мини-ЭВМ для
выполнения всех процессов обработки данных, в числе одной из проблем
мы упомянули возникающую при этом необходимость в
специалистах в области вычислительной техники и программирования.
Какие трудности связаны с этой проблемой?
6. Ознакомьтесь лично в экскурсионном порядке или по
описанию из литературы с какой-либо системой автоматизированного
контроля или круглосуточной вопросно-ответной системой,
используемой в вашей сфере деятельности. Подготовьте краткое
описание аппаратных средств и архитектуры системы.
Глава 19
ОБЗОР ЭТАПОВ РАЗВИТИЯ ОПЕРАЦИОННЫХ СИСТЕМ
Введение
Эта глава представляет собой обзор концепций операционных
систем, рассмотренных в настоящей книге. Чтобы придать
материалу связный характер, этапы развития операционных систем
излагаются в контексте не слишком подробного очерка истории
развития вычислительных машин; точность хронологии в данном
случае не имеет существенного значения, но у читателя должно
быть (или появится) представление об эволюционизирующем
характере развития важнейших понятий в области математического
обеспечения. Если какие-то сведения в этой главе для вас
окажутся незнакомыми, то, значит, читая книгу, вы что-то
пропустили. Вернитесь назад и прочтите еще раз нужный раздел.
Ранние разработки. Первое поколение
Во времена первого поколения вычислительных машин
потребность в каком-либо математическом обеспечении операционных
систем была незначительной. Вычислительные машины были
новыми и мало известными устройствами; их использование в
основном ограничивалось решением сложных математических
задач чисто научного, военного или исследовательского характера,
при этом программирование непосредственно за пультом машины
было широко распространенным, если не общепринятым
стандартом. Ассемблеры и компиляторы или по крайней мере
принципиальные идеи программного обеспечения такого рода были
разработаны в период первого поколения вычислительных машин.
К другим средствам системного программного обеспечения этого
периода относятся использование макрокоманд, библиотечных
программ, стандартных подпрограмм и служебных подпрограмм
типа процедур сортировки — слияния.
Второе поколение
Рождение вычислительных машин второго поколения отмечено
внедрением полупроводниковых элементов, пришедшим на смену
электронным лампам, этим важнейшим компонентам ЭВМ.
Обзор этапов развития операционных систем 395
С использованием полупроводниковых элементов уменьшились
размеры, возросло быстродействие и повысилась надежность. Что
еще важнее (по крайней мере с нашей точки зрения), второе
поколение ЭВМ отмечено началом заметного использования
вычислительных машин в задачах из области экономики. Влияние
делового мира сказалось в существенно возросшем значении
стоимостных факторов использования ЭВМ. Поскольку (по сравнению с
другим оборудованием) ЭВМ были весьма дороги, максимальная
загрузка аппаратных средств стала важнейшим требованием их
использования и, таким образом, возникло понятие пропускной
способности как меры эффективности использования
вычислительной машины.
С самого начала стало ясно, что планирование работы ЭВМ
может служить средством повышения пропускной способности.
Объединяя задания на основе сходства требуемых устройств,
вычислительный центр мог сэкономить время при выполнении
общих установочных операций. Организацией и планированием
работ можно было минимизировать потери даже в случае
различных установочных операций, устанавливая, к примеру,
магнитные ленты во время исполнения задания, их не запрашивающего.
Реализация планирования предполагает использование
оператором некоторых средств классификации заданий; наиболее
распространенным решением этой задачи было введение карты JOB,
как правило, в сочетании с некоторой формой параметра JOB
CLASS.
В период второго поколения ЭВМ рабочие программы обычно
хранились в библиотеке загрузочных модулей и непосредственно
считывались для исполнения в оперативную память, сокращая
таким образом потерю времени на чтение карт и компиляцию.
Приобретают значение программные библиотеки и автоматические
средства их сопровождения.
Компилирующие программы были созданы для многих
различных* входных языков. В процессе компиляции с помощью
оператора COPY или макрокоманды к исходному модулю можно было
добавлять хранящиеся в библиотеке команды, предварительно
написанные на входном языке. Скомпилированная в форме объектного
модуля программа задания могла быть пополнена действиями
редактора связей или программы загрузчика готовыми
программными кодами объектного уровня описания, хранящимися в
библиотеке объектных программ. Сформированный таким образом
загрузочный модуль можно было вносить в библиотеку загрузочных
модулей.
Для реализации этих функций требовались специальные про"
граммные средства. Мы уже упомянули необходимые средства
автоматического сопровождения библиотек; разработка различных
компиляторов, редакторов связей или программ-загрузчиков так-
396 Глава 19
же имела большое значение. Многие возможности языка
управления заданиями сформировались как средство связи программиста
с этими специальными модулями математического обеспечения.
С ростом быстродействия ЭВМ несоответствие
производительности CPU и скорости выполнения операций в устройствах
ввода — вывода становилось все более и более очевидным. В период
второго поколения ЭВМ это несоответствие в быстродействии
привело к необходимости использования таких быстродействующих
устройств ввода — вывода, как магнитная лента, диск и барабан;
при этом отдельные физические записи должны были разделяться
специальными промежутками, а для повышения эффективности
использования названных выше устройств применялось
блокирование записей. Блокирование означает, что программист должен
оперировать с физическими записями, состоящими из нескольких
логических, — при чтении данных физические записи подлежат
операции деблокирования, тогда как при записи физические
блоки должны формироваться из отдельных логических записей.
Методы доступа были созданы как вспомогательное средство,
облегчающее программисту решение этих задач блокирования и
деблокирования. Программы метода доступа вносились и по-прежнему
вносятся в объектный модуль редактором связей.
Еще одним средством повышения пропускной способности
явились методы полибуферизации. Вместо простого ввода (или
вывода) одной записи при одном обращении можно использовать чтение
в буферы оперативной пемяти нескольких физических записей.
Затем обрабатывались одна за другой логические записи, пока не
исчерпается содержимое всей физической записи (буфера); после
этого выполняется обработка логических записей, хранящихся в
следующем буфере, при этом параллельно вновь заполняется
первый буфер, что составляет еще одну функцию метода доступа.
В период второго поколения ЭВМ началось развитие методов
управления данными на основе разработки программных модулей,
предназначенных для создания и сопровождения файлов данных,
формирования и ведения таблиц указателей, обеспечения функций
библиотек, формирования и проверки меток и рандомизации
адресов прямого доступа. Организация файлов последовательного, ин-
дексно-последовательного и прямого доступа в полной мере
обеспечивалась применением макрокоманд OPEN и CLOSE и
различных известных методов доступа.
В период второго поколения ЭВМ возникли также и другие
важные концепции операционных систем. В некоторых
вычислительных центрах медленные операции чтения карт, перфорации и
печати стали выполнять без участия центрального процессора,
реализуя тем самым ранние формы спулинга. Многие программы
включали автоматические средства контроля и возобновления
счета. Как форма защиты от бесконечных программных циклов были
Обзор этапов развития операционных систем 397
внедрены прерывания от таймера. Некоторые квалифицированные
программисты уже пользовались оверлейными структурами,
представляющими собой начальную форму виртуальной памяти.
Еще одно, последнее замечание, касающееся второго поколения
ЭВМ, — в большинстве центров автоматизированной обработки
данных использовался последовательный пакетный режим
обработки программ, когда, выполнив одну программу, приступают к
следующей.
Первые машины третьего поколения
Начало третьего поколения ЭВМ отмечено внедрением
интегральных полупроводниковых схем. Быстродействие вычислительных
машин все возрастало и несоответствие между быстродействием
собственно ЭВМ и устройств ввода — вывода становилось все более
ощутимым. Увеличение быстродействия оказывается бесполезным,
^сли потребители не в состоянии воспользоваться его
преимуществами, — зачем нужен поезд, который может развивать скорость в
150 миль в час, если железнодорожные пути допускают его
движение со скоростью, не превышающей 30 миль в час? Проблема
согласования быстродействия ЭВМ и устройств ввода — вывода
была решена с помощью мультипрограммирования.
В условиях мультипрограммирования несколько одновременно
размещаемых в оперативной памяти программ совместно
используют ресурсы CPU. Подобно гроссмейстеру, дающему сеанс
одновременной игры с несколькими шахматистами, центральный
процессор поочередно обслуживает запросы нескольких программ,
переключаясь с одной программы на другую. Наиболее
распространенный способ реализации мультипрограммирования связан с
понятием прерывания и включает некоторый механизм
оповещения CPU о ситуациях, требующих участия операционной системы.
Обычно управление всеми операциями ввода — вывода относится
к функциям операционной системы, которая переключением или
формированием цепочки слов состояния программы передает
управление CPU другой программе. Полезно также применение
каналов, освобождающих CPU от функций управления
физическими операциями ввода — вывода; по завершении такой операции
ввода — вывода канал просто посылает в CPU сигнал прерывания.
Такого рода мультипрограммирование носит в основном
пассивный характер, когда операционная система может передавать
управление CPU другой программе лишь по запросу операций
ввода — вывода выполняемой программы или сигналу внешнего
прерывания о завершении операции в канале. В некоторых
системах используется таймер, ограничивающий доступ к CPU каждой
программы заданным квантом времени; если программой выдается
запрос на операцию ввода — вывода до истечения этого кванта
398 Глава 19
времени, то и прекрасно, однако если к концу этого
предписанного промежутка все еще продолжается исполнение программы,
то по прерыванию от таймера управление CPU передается
операционной системе, с помощью которой может быть реализована
некоторая логика управления мультипрограммированием.
Квантование времени является общепринятым в системах разделения
времени.
С мультипрограммированием, конечно, связаны определенные
издержки. Для реализации системы мультипрограммирования
необходима размещаемая в основной памяти операционная система,
использующая не только основную память и время CPU, но и
дополнительный объем вспомогательной памяти.
Поскольку основная память используется совместно
несколькими программами, то ее распределение представляется еще одной
проблемой, которая должна решаться средствами операционной
системы. Многие операционные системы, подобно системам DOS и
OS/MFT фирмы IBM, используют разбиение основной памяти на
ряд разделов фиксированной длины. В других, типа OS/MVT
фирмы IBM, блоки памяти переменной длины выделяются в
процессе загрузки программы. В некоторых системах используются
средства, позволяющие расширять или сокращать область памяти,
предоставляемой программе уже в процессе исполнения (процес-
сирование подзадач, макрокоманды GETMAIN и FREEMAIN).
Довольно часто возникает проблема, связанная с фрагментацией
основной памяти, — узкие «просветы» основной памяти не
удается использовать, поскольку они разрознены и слишком малы;
выполнение программы редактирования связей, занимающей 90К,
вслед за программой компиляции, занимающей 96К, приводит к
появлению между программами промежутка памяти в 6К —
пространства слишком малого для размещения какой-либо полной
программы. Одно из решений этой проблемы состоит в
динамическом перераспределении памяти — сдвигая и перестраивая в
памяти программы, можно объединить все неиспользованные
«просветы» памяти, и, таким образом, появляется надежда получить
связный раздел памяти, достаточно большой, чтобы разместить в
нем целую программу.
Другим решением является сегментация программы. Нужно ли
загружать всю программу в связную область памяти до начала ее
выполнения? Сегментация программы представляет собой метод
разбиения программы на логически законченные сегменты,
каждый из которых адресуется относительно начала сегмента. При
заданной сегментации нет необходимости загружать программу в
связную область памяти, так что можно использовать малые
«просветы» памяти, не прибегая к динамическому перемещению
программ. Введение простой страничной организации приводит к
тому же результату благодаря разбиению программы на некоторое
Обзор этапов развития операционных систем 399
число страниц фиксированной длины с использованием
относительной адресации.
Планирование обработки программ было важным
преимуществом систем второго и третьего поколений, однако то обстоятельство,
что в основной памяти одновременно размещается много
программ, вносит дополнительные трудности. Эта проблема часто
решается с помощью процедур спулинга, распределяющих задания
среди нескольких очередей работ (обычно размещаемых на диске)
в соответствии с классами заданий (все та же карта JOB); к
функциям операционной системы относится ввод и внесение задания в
очередь, а в последующем загрузка его в память. Для каждого
класса заданий может быть определен отдельный раздел основной
памяти, и загрузка операционной системой очередного задания
класса осуществляется, по мере того как данный раздел
освобождается. В пределах данного класса заданий часто используются
разные уровни приоритетов, при этом задания более высокого
уровня приоритета размещаются в начале очереди своего класса.
Здесь было бы уместно ввести различие между заданием и
шагом задания. Задание может состоять из ряда различных
программ — компиляторов, редактора связей, программ сортировки,
утилит, прикладных программ, — которые должны выполняться в
заданной последовательности; каждая отдельная программа
составляет шаг задания. Программист сдает задание, вычислительная
машина загружает и выполняет шаги задания.
В операционных системах фирмы IBM функции чтения,
внесения в очереди и загрузки шагов заданий обеспечиваются рядом
модулей операционной системы, именуемых в совокупности
«управление заданиями». Обычно при достаточном объеме доступной
памяти все шаги данного задания выполняются прежде, чем раздел
будет предоставлен следующему заданию. Не все операционные
системы работают по такому принципу. В некоторых случаях
программа более высокого уровня приоритета может вызвать
свертывание во вспомогательную память других программ,
освобождающих, таким образом, необходимое пространство основной памяти;
по завершении высокоприоритетного задания возобновляется
прерванная обработка первоначальной программы.
Важной составляющей любой операционной системы является
набор таблиц, обеспечивающих автоматическое отслеживание
программными средствами операционной системы согласованного
распределения основной памяти. Введение таких таблиц
необходимо во избежание перекрытий, разрушающих данные.
Коль скоро шаг задания загружен в память и готов к
выполнению, обеспечение его потребностей, по крайней мере в машинах
IBM, становится функцией управления задачами. Основная
функция, осуществляемая операционной системой в отношении
активных программ, состоит в обработке прерываний. Обработкой пре-
400
Глава 19
рываний предусматривается возможность «прервать»
выполняемую программу и передать управление CPU резидентной
составляющей операционной системы. В машинах IBM такая передача
управления реализуется переключением слов состояния
программы, при этом в машинах серии Система/360 и Система/370
используются поля нового и старого PS W для каждого из пяти различных
типов прерываний. Методы, применяемые другими
изготовителями, включают стековую организацию и очереди прерываний.
Другая важная функция, реализуемая средствами управления
задачами (или аналогичными средствами в машинах других
изготовителей), состоит в разрешении конфликтов, связанных с
одновременной готовностью двух или большего числа программ
использовать CPU. В простейшем случае разделы фиксированной
(и даже переменной) длины основной памяти упорядочиваются в
определенной последовательности, — например, раздел
переднего плана перед разделом фона, — которой определяются
уровни внутренних приоритетов. В операционной системе OS/MFT
фирмы IBM упорядочение разделов задается последовательностью
блоков управления задачами; пытаясь передать управление CPU
другой программе, операционная система просто просматривает
эту последовательность, передавая управление «первой встречной»
программе, находящейся в состоянии готовности.
Не все операционные системы, однако, используют такую
схему фиксированных уровней приоритета. В некоторых случаях
программисту разрешается указывать уровень приоритета
программы в управляющей карте, при этом операционная система
всегда реализует передачу управления находящемуся в памяти
шагу задания наивысшего приоритета, используя в случае
равенства приоритетов некоторое фиксированное правило выбора.
Другие системы работают в соответствии с правилами «первым вошел—
первым вышел», «последним вошел — первым вышел»,
«наибольшая программа выводится первой» или «наименьшая программа
выводится первой». Существуют хорошие и плохие схемы
приоритетов, и понятие «лучшего» правила зависит от фактического
состава заданий, выполняемых в данном вычислительном центре;
тем не менее при использовании современных высокоскоростных
машин любое запрограммированное правило лучше, чем участие
оператора.
Помимо планирования заданий, их загрузки, обработки
прерываний и разрешения внутренних конфликтов приоритетного
характера операционная система должна обеспечивать разрешение
конфликтных ситуаций, связанных с распределением устройств
ввода — вывода при обработке нескольких программ. К чему
могут привести одновременные запросы нескольких программ
одного и того же лентопротяжного устройства? Вероятно, к хаосу,
если в описанную ситуацию не вмешается операционная система*
Обзор этапов развития операционных систем 401
Частично решение этой проблемы возложено на средства
управления заданиями, откладывающего загрузку шага задания до
момента освобождения всех требуемых устройств ввода — вывода
(лучше удерживать такой шаг задания в очереди на диске, чем
позволить ему занимать основную память в ожидании
запрашиваемого лентопротяжного устройства, блокируя тем самым загрузку
другого задания). Чтобы управление заданиями могло обеспечить
выполнение указанной функции, необходимо иметь всю
информацию о потребностях в устройствах ввода — вывода; на языке
управления заданиями фирмы IBM эта информация передается с
помощью карт DD. В конце концов модули управления
заданиями формируют ряд таблиц, связывая назначенные для каждого
активного шага задания устройства ввода — вывода с набором
основных таблиц системы, что позволяет управлению задачами
контролировать всю систему назначений устройств ввода —
вывода.
Коль скоро шаг задания (с помощью модулей управления
заданиями) загружен в память, он становится задачей, и его запросы,
таким образом, обеспечиваются управлением задачами. Вновь
имея в виду в качестве примера систему IBM, решение проблемы
ввода — вывода в условиях мультипрограммирования
достигается такой жесткой организацией, при которой все операции
ввода — вывода контролируются супервизором, или резидентной
составляющей операционной системы. Команды, управляющие
операциями ввода — вывода, относятся к числу
привилегированных (т. е. они могут выполняться только операционной системой);
чтобы начать любую операцию ввода — вывода, прикладная
программа должна передать управление операционной системе,
используя для этого прерывание по обращению к супервизору.
Коль скоро управление принадлежит супервизору, то могут быть
проверены таблицы, сформированные управлением заданиями, и
установлены признаки занятости устройств; таким образом,
обеспечивается некоторый механизм управления доступом к данным.
Что, если некоторая программа выдает запрос на операцию
ввода — вывода, но из-за наличия других запросов
операционная система не может начать эту операцию в тот же самый момент
времени? И как быть, если в момент завершения операции в канале
происходит обработка другого прерывания ввода — вывода?
В обоих случаях прерывание должно быть внесено в очередь или
переведено в состояние ожидания. В машинах, использующих
очереди или стеки прерываний, это не создает каких-либо трудностей,
однако в машинах IBM, управляемых на основе переключаемых
PSW, могут возникнуть некоторые проблемы. В машине IBM
необходимо вести специальную таблицу, содержащую записи о
запрошенных, но еще не начатых операциях ввода — вывода; вторая
проблема, касающаяся завершенных, но еще не подтвержденных
402 Глава 19
прерываний, решается аппаратными средствами, при этом
прерывание удерживается в канале.
Один из вопросов, который мы еще не затрагивали главным
образом потому, что он имеет отношение к решению всех
рассмотренных выше проблем, касается защиты памяти. В серии машин
фирмы IBM защита памяти реализуется с помощью четырехбитового
поля слова состояния программы. Вся память, отводимая
операционной системе, имеет ключ защиты (0000)2, а каждый раздел
памяти, содержащий любую другую программу, характеризуется
своим собственным уникальным значением четырехбитового ключа.
Любая команда выполняемой программы, которая может привести
к разрушению (а в некоторых случаях просто к выборке)
содержимого памяти вне области, соответствующей ключу защиты
программы, вызывает прерывание по защите памяти и, как правило,
вывод программы из решения. Этот принцип защиты положен
также в основу реализации идеи привилегированных команд, столь
важных в управлении операциями ввода — вывода;
привилегированная команда может выполняться только программой с
ключом защиты (0000)2.
Для многих машин третьего поколения процедуры спулинга
обычно выполняются в режиме онлайн; при этом более медленные
операции, связанные с перфокартами и печатью, выполняются
центральным процессором в свободное от других действий время,
т. е. тогда, когда все размещенные в памяти машины прикладные
программы оказываются в состоянии ожидания. Специальные
процедуры спулинга, часто включающие функции учета, относятся к
числу наиболее распространенных средств, дополняющих
стандартные, поставляемые разработчиком ЭВМ операционные
системы.
Этот период не отмечен существенным прогрессом в области
управления данными. Методы доступа и библиотечные функции
остаются практически теми же, что и для второго поколения машин,
за исключением одной действительно новой функции — ведения
библиотеки размещения системы, необходимой для обеспечения ее
функций. Однако в 70-х годах, как мы вскоре увидим,
управление данными становится одним из наиболее актуальных
вопросов.
Физически операционные системы третьего поколения ЭВМ
состоят как из резидентных, так и транзитных модулей.
Пользователю часто предоставляются определенные возможности выбора,
и до некоторой степени операционная система может быть наделена
индивидуальными особенностями, при этом важнейшие модули
определяются как резидентные, а используемые менее часто
размещаются на диске и вызываются в оперативную память по мере
необходимости. Помимо этих программных средств
математического обеспечения большинство операционных систем включает
Обзор этапов развития операционных систем 403
ряд управляющих блоков и таблиц, которые позволяют системе
отслеживать все действия ЭВМ.
Конечно, не каждый изготовитель пользуется подходом,
принятым фирмой IBM. Например, фирма Xerox использует метод
многих уровней прерываний, когда программе сопоставляется свой
уровень прерывания; другие, например фирма CDG, опирались на
применение многих процессоров, используя для обеспечения
функций операционной системы и прикладных программ разные
аппаратные средства. Хотя функции операционных систем всюду
одни и те же, средства их реализации могут быть самыми различными.
Картина усложняется еще одним обстоятельством, связанным с
самой природой функций операционной системы. По существу,
это математическое обеспечение играет роль посредника между
аппаратными средствами и прикладной программой. Многие из
функций операционной системы могут выполняться или аппаратно,
или программно, и разными изготовителями были выбраны
различные пути их реализации. Математическое обеспечение касается
деятельности людей — программы пишет человек; а стоимость
рабочей силы в последние годы неуклонно растет. В то же время
стоимость электронных компонентов аппаратных средств
обнаруживает тенденцию к снижению. Если эти тенденции сохранятся,
то в будущем с экономической точки зрения окажется более
привлекательной аппаратная реализация все большего и большего
числа функций операционных систем.
70-е годы
С развитием электронной техники быстродействие
вычислительных машин еще более возросло, усугубляя проблему
несоответствия быстродействия собственно ЭВМ и связанных с ней устройств
ввода — вывода; многие пользователи обнаруживали, что даже
при одновременном размещении в памяти десяти или пятнадцати
программ степень загруженности CPU оказывается недопустимо
низкой. Поскольку раньше выход из этой ситуации был связан с
внедрением мультипрограммирования, то расширение его
масштабов представлялось очевидным решением проблемы. Однако
объем доступной памяти на магнитных сердечниках (или монолитной
памяти на интегральных микросхемах) накладывал определенные
ограничения на число одновременно выполняемых программ, а
стоимость основной памяти была слишком высока, чтобы
рассчитывать на ее безграничное расширение.
Решение было найдено введением виртуальной памяти. Если
CPU в каждый момент времени может выполнять лишь одну
команду, то нужно ли размещать в основной памяти всю программу,
прежде чем начнется выполнение входящих в ее состав каких-либо
команд? В системе с виртуальной памятью программа разбивается
404
Глава 19
на сегменты или страницы и хранится в устройстве прямого
доступа; в оперативной, или основной, памяти необходимо присутствие
только активных частей программы, в то время как пассивные
страницы или сегменты удерживаются в виртуальной памяти, ожидая
вызова в оперативную память. Логика такой организации не
нова — процедуры развертывания — свертывания и программные
оверлейные структуры использовались еще в начале периода
второго поколения ЭВМ. Новизна состоит в том, что благодаря
возросшему быстродействию ЭВМ, концепции страничной
организации и виртуальной памяти стали столь популярными.
Другая, весьма заметная тенденция 70-х годов связана с
возросшим пониманием важности данных как одного из видов
ресурсов; в результате постоянным спросом стали пользоваться
программные средства управления базами данных. В подходе, использу-
' юЩем программное управление базой данных, организация данных
носит централизованный характер в отличие от метода
«индивидуальной подгонки к практическому применению», столь
популярного в прошлом. Таким образом, минимизируется избыточность
данных, упрощается обновление файлов и облегчается доступ к
данным.
Многие пакеты математического обеспечения управления
базами данных имеют непосредственное отношение к ряду вопросно-
ответных систем, обеспечивающих доступ к базе данных
руководству и другим непрограммирующим пользователям. Поскольку
запросы в таких системах чаще всего вводятся с терминалов, то
возникла возросшая потребность в программных средствах
обеспечения терминалов, а вместе с ними и в математическом обеспечении
процессов передачи данных. Сочетание программных средств
управления базой данных и управления передачей данных
используется также в системах оперативного сбора данных, обновляемых
с терминалов.
Вероятно, не столь очевидно то влияние, которое подобные
средства математического обеспечения начинают оказывать на
характер работы программиста. Операционная система
безусловно не позволяет последнему непосредственно управлять
операциями ввода — вывода; с введением виртуальной памяти он теряет
возможность управлять и адресацией. С появлением
дополнительного уровня системного математического обеспечения —
управления базой данных и управления передачей данных —
возможности его влияния на судьбу программы становятся еще меньшими.
Если используется язык программирования высокого уровня, то
программисту остается лишь кодировать прикладную задачу,
тогда как весьма сложные, связанные с особенностями ЭВМ задачи
программирования относятся к функциям операционной системы,
компиляторов и математического обеспечения управления базой
данных и управления передачей данных.
Обзор этапов развития операционных систем 405
С точки зрения руководства разработок прикладных задач
отмеченные выше тенденции весьма позитивны. Слишком много
компаний столкнулось с большими затруднениями, оказавшись в
полной зависимости от нескольких программистов. Относя
программирование наиболее сложных логических задач к функциям
системного математического обеспечения, прикладным программистам
предоставляется возможность уделять внимание не столько
особенностям операций ввода — вывода или синхронизации
внутренних процессов в конкретной ЭВМ, сколько существу
прикладной задачи. Задачи системного характера весьма интересны, и
программистов, которые с ними успешно справляются, в
профессиональных кругах издавна относят к числу
высококвалифицированных специалистов. Однако программы, написанные с учетом
требования максимальной эффективности внутренних операций
ЭВМ, слишком часто оказываются плохо документированными и
трудными в отладке и сопровождении. Сведение роли программиста
к функциям кодировщика благодаря использованию наиболее
развитых систем математического обеспечения может оказаться
причиной снижения его интереса к работе. Однако если учесть
все факторы, определяющие стоимость программы, то суммарный
экономический эффект для компании в целом часто оказывается
весьма значительным. С этим, конечно, связаны определенные
издержки — программы оказываются менее эффективными, —
но с ростом быстродействия ЭВМ выигрыш от удаления двух-трех
команд становится все менее заметным.
Еще одна очевидная тенденция 70-х годов, которая также
объясняется постоянным снижением стоимости электронных
элементов, — все возрастающий спрос на мини- и микро-ЭВМ. Помимо
того что эти малые и дешевые машины широко распространены как
средства обеспечения процессов обработки данных, они находят
все более широкое применение в многомашинных системах,
при этом периферийные мини-ЭВМ обеспечивают решение текущих
задач единственного специализированного назначения,
пересылая собранные данные в высокопроизводительную машину,
обеспечивающую традиционные виды обработки данных.
Взгляд в будущее
Электронная техника постоянно совершенствуется и благодаря
этому относительный показатель стоимость — эффективность
использования элементов вычислительных машин постоянно
понижается; весьма наглядным примером этой тенденции служит
непрерывное падение цен на карманные калькуляторы.
Определенный предел возможностей этого направления, конечно, существует;
распространение электрических сигналов ограничено скоростью
света, составляющей приблизительно 30 см в одну наносекунду,
406 Глава 19
а плотность монтажа электронных схем машины также ограничена
сверху определенной величиной. Однако, чтобы приблизиться к
этим предельным возможностям, необходимо приложить еще много
усилий в направлении усовершенствования аппаратной части ЭВМ.
Для мини-ЭВМ проявление упомянутой тенденции вполне
очевидно — снижение их стоимости сопровождается повышением
мощности и надежности. Использование мини-ЭВМ будет
расширяться, особенно среди менее крупных потребителей, а также в
связи с применением многомашинных систем. В изготовлении
более крупных машин эффект технологического прогресса
сказывается не столь заметно. Совершенствование математического
обеспечения операционных систем достигнуто главным образом за счет
аппаратных средств; многие из функций, обеспечиваемых
операционной системой, могли бы выполняться аппаратно, однако
стоимость изготовления функционально гибких аппаратных средств
оказывалась выше стоимости разработки гибких средств
программного обеспечения. Поскольку стоимость аппаратных средств
постоянно падает, а стоимость рабочей силы неизменно возрастает,
то мы приближаемся к их равенству. Функциональная гибкость
аппаратных средств также постоянно повышается благодаря
использованию монолитных, легко заменяемых печатных карт,
реализующих логические функции. Можно ожидать, что все большее
и большее число функций операционной системы будет
выполняться аппаратными средствами, в том числе большинство функций
управления базами данных и управления передачей данных.
С развитием системного математического обеспечения станут
придавать меньше значения тому, что сейчас принято называть
«хорошим» программированием. Сокращение программы на десять
команд принято оценивать экономией в несколько миллисекунд
на каждой итерации; с ростом быстродействия машины эти десять
команд, вероятно, будут означать десять наносекунд. Имея в
виду, что реально мы можем загрузить CPU менее чем на 50%, такое
«эффективное» программирование дает весьма малую или совсем
неощутимую экономию.
В прошлом большинство программистов высокой квалификации
кроме умения писать колЛсактные программы досконально знали
средства обмена данными и могли писать очень эффективные
подпрограммы ввода — вывода. С использованием для этой цели
автоматического управления базами данных, управления передачей
данных и функций операционной системы такое непосредственное
управление операциями ввода — вывода становится
невозможным. Следствие названных выше тенденций — изменение
характера самой работы программиста. Небольшому числу
«суперпрограммистов» будет поручена разработка операционных систем и
других видов программного обеспечения (или аппаратных средств,
или гибридных средств аппаратного и математического обеспече-
Обзор этапов развития операционных систем 407
ния), тогда как прикладные программы будут составляться в
основном на языках программирования высокого уровня менее
искусными кодировщиками или специалистами-прикладниками,
едва освоившими основы программирования. Из того, что мы сейчас
называем программированием, к функциям системного
математического обеспечения будет отнесено столь многое, что знание этого
математического обеспечения (или по крайней мере выполняемых
им функций) будет необходимо любому специалисту будущего,
профессионально занятому в области обработки данных. Вот
почему знание операционных систем так важно.
Краткие выводы
Вся эта глава представляет собой обзор этапов развития
операционных систем и краткое исследование возможных будущих
тенденций в области обработки данных. Если вы поняли все темы
данной главы, то вы имеете достаточно хорошее представление о
содержании книги в целом; если что-то здесь оказалось для вас
новым, вернитесь назад и прочтите еще раз соответствующий
раздел.
Приложение А
КРАТКИЙ ПЕРЕЧЕНЬ ОПЕРАТОРОВ ЯЗЫКА УПРАВЛЕНИЯ
ЗАДАНИЯМИ В СИСТЕМЕ DOS
Первоисточники
Издание фирмы IBM № GC24-5036, DOS System Control and
Service. Некоторые из приводимых ниже форматов операторов
воспроизводятся с разрешения фирмы IBM в соответствии с текстом
упомянутого выше издания.
Отдельные фрагменты описания расширенных операторов
языка управления заданиями целиком заимствованы из этого издания
и перепечатываются с разрешения фирмы International Business
Machines Corporation.
Операторы:
ASSGN сопоставляет логическому устройству ввода —
вывода некоторое физическое устройство:
// ASSGN SYSxxx^pec TLX'ss'Y]
LI .ALT/J
где
SYSxxx
адрес
X'ss'
ALT
CLOSE
символическое имя устройства;
адрес физического устройства, выраженный в
форме X'cuu', где с — номер канала и uu — номер
устройства, или
UA, означающий, что выбор устройства не
определен, или
IGN, означающий, что адрес физического
устройства не используется (т. е. устройство не
потребуется);
факультативный параметр, используемый для
описания способа установки магнитной ленты;
указывает на то, что настоящим назначением
(ASSGN) определяется запасное лентопротяжное
устройство.
освобождает логическое устройство:
Перечень операторов языка управления заданиями в DOS 409
// CLOSE SYSxxx
,X'cuu' [,X'ss']
,UA
,ICN
,ALT
здесь параметры имеют тот же смысл, что и в операторе ASSGN.
DATE помещает данные в коммуникационный регион:
// DATE mm/dd/yy
// DATE dd/mm/yy
DLAB содержит информацию к метке файла, используемую при
создании файлов прямого доступа и проверке меток:
// DLAB '1 —3 поля метки' С
xxxx,yyddd,yyddd, 'системный код' [,тип]
где
'1—3 поля метки' — цепочка символов длиной в 51 байт,
содержащая:
44-байтовое алфавитно-цифровое имя
файла, однобайтовый числовой
идентификатор формата, шестибайтовый алфавитно-
цифровой порядковый номер файла;
С — любой, отличный от пробела символ в колонке 72;
хххх — порядковый номер тома;
yyddd — дата создания файла;
второй элемент yyddd определяет дату конца жизни файла;
'системный код', — цепочка из 13 символов, заключенная в
апострофы (выбор форматов, оглавлений);
тип-SD для файлов последовательного доступа, DA — для
прямого, ISC —для индексно-последовательного,
использующего загрузку процедурой Greate, и ISE — для индексно-
последовательного метода доступа.
DLBL заменяет операторы DLAB и VOL в более поздних
версиях DOS:
// DLBL имя файла, ['file— ID'l
[,дата] [,коды] ['секретность данных]
где
имя файла — содержащее от 1 до 7 символов
(алфавитно-цифровых элементов) имени файла; первый символ должен быть
буквенным;
'file— ID' —44-байтовое поле алфавитно-цифрового
имени файла, описанное в операторе DLAB (подпараметр
факультативный, по умолчанию — имя файла);
15—821
410 Приложение А
дата —либо время жизни, либо дата конца жизни;
коды —того же смысла, что и параметр 'тип' в операторе
DLAB;
секретность данных — DSF для файла секретных данных.
EXEC отмечает конец управляющей информации для шага
задания и определяет ту программу из библиотеки загрузочных
модулей (фазу), которую следует загрузить и выполнить:
// EXEC [имя программы]
где
имя программы —имя той программы, которую следует
загрузить и выполнить. Если оно отсутствует, то
подразумевается загрузочный модуль, только что сформированный
редактором связей.
EXTENT определяет область или экстент файла прямого
доступа
// EXTENT [символическое устройство]
[,серийный номер], [,тип]
^последовательный номер]
^относительная дорожка]
[,число дорожек]
[,верхняя дорожка цилиндра]
[,B=bins]
где
символическое устройство — символическое имя требуемого
тома в форме SYSxxx (если этот параметр опущен, то
используется устройство, описанное в последнем операторе EXTENT;
если данный оператор является первым или единственным, то
используется устройство, определенное макрокомандой DTF);
серийный номер — номер тома по порядку (если этот
параметр опущен, то используется устройство, описанное в самом
последнем операторе EXTENT; если данный оператор
является первым или единственным и в нем код серийного номера
тома опущен, то серийный номер тома не проверяется);
тип принимает значение 1 для области данных, 2 —для
области переполнений, 4 — для области таблиц и 8 — для
области данных, организованных в виде цилиндров с
разбиением;
последовательный номер — относительный номер данного
экстента в файле, состоящем из нескольких экстентов;
относительная дорожка — относительный адрес дорожки, в
которой помещается начало экстента данных (в составе ин-
дексно-последовательного файла экстентов);
число дорожек — указывает число дорожек, отводимых для
данного файла;
Перечень операторов языка управления заданиями в DOS 411
дорожка цилиндра — номер верхней дорожки цилиндра с
разбиением, отводимым для последовательного файла;
bins —признак устройства на магнитных картах серии 2321.
JOB указывает начало задания:
// JOB имя задания 1учетная информация]
где
имя задания — содержащее от 1 до 8 символов
алфавитно-цифрового имени задания;
учетная информация — определяется в разных
вычислительных центрах по-разному (если параметр задан, то он
отделяется от имени задания пробелом).
LBLTYP определяет объем основной памяти, отводимой для
обработки меток в процессе редактирования связей и выполнения
программы:
// LBLTYP
(ТАРЕ [(пп)]
(NSD (nn)
)
где
ТАРЕ(пп) указывает на то, что предполагается обработка
только меток магнитных лент, исключая метки файлов
непоследовательного прямого доступа;
NSD(nn) указывает на то, что требуется обработка меток
файла на диске непоследовательного доступа (этим
параметром могут задаваться и другие типы обработки; значением пп
определяется максимальное число обрабатываемых экстентов,
связанных с одним файлом).
OPTION уточняет варианты управления заданием:
// OPTION опция1 1,опция2, ...]
где
в качестве типичных опций могут быть LOG или NOLOG,
DUMP
DECK
LISTX
XREF
CATAL,
или NODUMP,
или NODECK,
или NOLISTX,
или NOXREF,
STDLABEL,
LINK или
LIST или
SYM или
ERRS или
USRLABEL,
NOLINK,
NOLIST,
NOSYM,
NOERRS,
PARSTD,
48C, 60C (60-символьный набор данных) и SYSPARM.
RESET позволяет отказаться от некоторых специальных
назначений устройств ввода — вывода, перейдя в данном разделе к
стандартным назначениям:
15*
412 Приложение А
II RESET
SYS
PROG
ALL
SYSxxx
где
SYS восстанавливает стандартное назначение всех системных
логических устройств;
PROG восстанавливает стандартное назначение логических
устройств, выбранных программистом;
ALL означает восстановление стандартных назначений всех
логических устройств;
SYSxxx восстанавливает стандартное назначение указанного
устройства.
RSTRT позволяет программисту возобновить обработку
программы, прерванную в контрольной точке.
// RSTRT SYSxxx, nnnn [,имя файла]
где
SYSxxx —символическое имя устройства, хранящего записи
контрольной точки;
nnnn идентифицирует запись контрольной точки, которая
должна быть использована при возобновлении счета;
имя файла — символическое имя файла на диске,
используемое в контрольной точке (тома на дисках хранят много
файлов).
TLBL содержит информацию, используемую в метке файла для
контроля и записи меток магнитных лент. Заменяет команды
TPLAB и VOL.
// TLBL имя файла [/file-ID'] [,дата]
серийный номер файла)]
идентификатор набора J J
Г (последовательный номер тома)!
[/(номер раздела файла JJ
^относительный номер файла!
[, поколение]
[,версия]
где
имя файла — алфавитно-цифровое имя файла, состоящее не
более чем из семи символов и соответствующее символическому
имени, определенному в программном DTF;
'file—ID' —алфавитно-цифровое имя, состоящее не более
чем из 17 символов и идентифицирующее файл на томе (если
опускается в описании выходного файла, то используется имя
и
Перечень операторов языка управления заданиями в DOS 413
файла; если опущено в описании входного файла, то file — ID
не проверяется);
дата —время жизни файла;
серийный номер файла — порядковый номер первого тома
многотомного файла (идентификатор набора отмечает файлы
в коде ASSCII);
последовательный номер тома — относительный номер тома
в многотомном файле (номер раздела файла используется для
файлов в коде ASSCII);
последовательный номер файла — порядковый номер файла
на многофайловом томе;
поколение — номер поколения набора данных (используется
для модификации идентификатора файла);
версия — номер версии (используется для модификации
номера поколения).
TPLAB содержит информацию для метки файла, используемую
при создании и проверке меток на магнитной ленте. Применяется
совместно с оператором VOL; заменен оператором TLBL:
// TPLAB ('поля метки 3—10']
{'поля метки 3—13'J
где
поля операндов содержат цепочки длиной либо в 49, либо
69 байтов, заключенные в апострофы; представляют
фактическое содержимое либо 5—53 позиций, либо 5—73
позиций метки ленты.
UPSI позволяет программисту устанавливать значения
программных переключателей в коммуникационном регионе:
// UPSI nnnnnnnn
где
nnnnnnnn представляет требуемое значение восьми битов
программного переключателя: 0 — устанавливает
соответствующий бит в нуль, 1 — в единицу и X — сохраняет
прежнее значение бита.
VOL используется совместно с операторами DLAB или TLAB в
процедурах проверки меток.
// VOL SYSxxx, имя файла
где
SYSxxx —символическое имя устройства;
имя файла —содержащее не более семи символов
алфавитно-цифрового имени файла, которое должно соответствовать
символическому имени, идентифицирующему файл согласно
программной макрокоманде DTF.
414 Приложение А
XTENT определяет область экстентов в файле на устройстве
прямого доступа. Вместо него часто используется оператор
EXTENT.
// XTENT тип, порядок, нижний, верхний,
серийный номер', SYSxxx [B2J
где:
тип определяет тип области, при этом значение 1 соответствует
области данных, 2 —области переполнений, 4 —области
таблиц и 8 —области данных, организованных в форме
цилиндров с разбиением;
порядок определяет относительное положение данного
экстента в файле экстентов;
нижний — начальный адрес данного экстента на диске;
верхний — конечный адрес данного экстента на диске;
серийный номер — номер тома по порядку;
SYSxxx —символическое имя устройства;
В2— номер магнитной ячейки самого последнего назначения,
если используется запоминающее устройство на магнитных
картах.
Управляющие команды редактирования связей
PHASE определяет имя фазы и адрес ее загрузки в основной
памяти.
INCLUDE указывает на то, что предполагается включение в
программу готового объектного модуля. Если поля операндов
пусты, то модуль вводится с устройства системного ввода, т. е. в виде
объектной колоды перфокарт.
ENTRY позволяет по выбору назначать точку входа фазы.
ACTION уточняет выборы, обеспечиваемые редактором связей.
Приложение Б
КРАТКИЙ ПЕРЕЧЕНЬ ОПЕРАТОРОВ ЯЗЫКА УПРАВЛЕНИЯ
ЗАДАНИЯМИ ОПЕРАЦИОННЫХ СИСТЕМ
IBM/360 И IBM/370
Первоисточники
Brown G. D., System/360 Job Control Language, Wiley, 1970.
IBM № GC28-6703, Job Control Language User's Guide.
IBM № GC28-6704, Job Control Language Reference.
Форматы записи отдельных операторов языка управления
заданиями (JCL), представленные на рис. П.Б.1—П.Б.З, целиком
заимствованы из публикации IBM № GC28-6539, Job Control
Language.
Общие правила
Формат карты JCL:
//имя операция операнды комментарий
Поля разделяются одним или несколькими пробелами.
Допустимые имена: имя задания, имя шага задания или имя
оператора DD могут содержать от одного до восьми
алфавитно-цифровых символов, первый из которых должен быть буквой.
Продолжение записи карты JCL:
1. Прервать запись после любой запятой, включая эту запятую
в запись этой карты.
2. Записать два слэша // в первых двух колонках карты
продолжения.
3. В карте продолжения возобновить кодирование параметров
с любого места в промежутке от четвертой до шестнадцатой
колонки.
Правила пользования скобками: если кодируется только
первый подпараметр, то скобки не требуются. Если кодируются
больше одного подпараметра или позиционный подпараметр, не
являющийся первым, то использование скобок обязательно.
Карта JOB
Назначение: разделение заданий. Кроме того, позволяет
программисту посылать в систему учетную информацию и значения
других параметров (рис. П.Б.1).
416
Приложение Б
Параметры
учетная информация
Состав этого позиционного параметра может зависеть от
особенностей работы вычислительного центра; обычно он включает учетный
номер, сопровождаемый другой учетной информацией.Относится
к числу факультативных, но может в соответствии с требованиями
данного вычислительного центра быть объявлен обязательным.
имя программиста
Этот второй позиционный параметр определяет имя, включающее
от одного до двадцати четырех символов, которое может быть
составлено из букв, цифр и промежутков-разделителей. Если в этом
поле используются другие символы (например, пробелы), то оно
должно заключаться в апострофы.
MSGLEVEL=(JCL, распределения)
//Имя
Операция
Операнд
П/К
имя задания
JOB
. »
О
1
)]
]
(уч. № ] [, учетн. информация])]
имя программиста]
~MSGLEVEL = (rO
Ь
COND = ((условие)
RD = запрос]
RESTART = ( имя шага
<имя шага, имя
шага процедуры
[PRTY=nn]
[MSGCLASS=x]
[TYPRUN = HOLD]
[TIME = (минуты, секунды)]
[GLASS = класс задания]
[REGION -({SSSbeK}b значение* КМ
[ROLL = (х, у)]
[, контр,
идент.]
Обозначения:
П — позиционный параметр.
К — ключевой параметр.
{ } — выбрать одну из возможностей.
\-
П
П
К
к
к
к
к
к
к
к
к
к
к
[ ]—факультативно; если включено несколько строк, то выбрать одну
или не выбирать ни одной.
Рис. П.Б.1. Оператор JOB — общая форма записи.
Перечень операторов языка управления заданиями в OS 417
Параметром задается печать управляющих карт и сообщения о
распределении устройств. Два позиционных параметра
интерпретируются следующим образом:
JCL Значение
0 Печатать только карту JOB
1 Печатать все карты JCL в том числе сформированные
каталогизированными процедурами
2 Печатать только карты JCL, входящие в поток задания
Распределения Значение
0 Печать сообщений только в случае непредусмотренного
завершения задания
1 Печать всех сообщений
COND =(условие,...)
Этот параметр обычно кодируется в карте EXEC. Если его
значение задается картой JOB, то в последующих картах EXEC
параметр условий отменяется.
RD=3anpoc
Дает возможность автоматически повторять запуск и отказываться
от выбранных контрольных точек.
RESTART =имя шага
Запрашивает повторный запуск шага задания.
PRTY =пп
Приоритет в своем классе заданий, низкий — ноль, высокий — 13.
MSGGLASS =х
Позволяет программисту выбирать устройства для приема
пересылаемых в спулинге сообщений планировщика заданий.
TYPRUN=HOLD
Удерживает задание во входной очереди, пока оператор не выдаст
команду RELEASE.
TIME =(минуты, секунды)
Обычно параметр TIME кодируется в карте EXEC. Заданный в
карте JOB этот параметр определяет предельное время обработки
всего задания.
CLASS =класс задания
Определяет класс задания.
REGION =nnnnnK
418 Приложение Б
Еще один параметр, который чаще кодируется в карте EXEC.
Если этот параметр назначается в карте JOB, то он устанавливает
верхний предел для всех программ задания; следовательно, вам
необходимо задаться достаточно большой областью, чтобы в ней
уместился наибольший из шагов задания.
ROLL=(x, у)
Позволяет реализовать возможности развертывания —
свертывания.
Первым подпараметром определяется возможность свертывания
данной программы; соответствующими значениями являются
«YES» или «NO». Второй подпараметр определяет, может ли
данная программа вызвать свертывание другой программы;
значениями также являются «YES» или «NO».
Карта EXEC
Назначение: определяет конкретную программу (непосредственно
или с помощью каталогизированной процедуры), которая
должна выполняться (см. рис. П.Б. 2)
Параметры
PGM=hmh программы или РБОС=имя процедуры или просто
имя процедуры
Первый позиционный параметр, и им исчерпывается функция
карты EXEC. Если ключевое слово отсутствует, то
подразумевается PR ОС.
COND =(условие1 ,условие2,...)
Позволяет программисту назначать условия обхода данного шага
задания.
PARM =значение
Позволяет программисту пересылать значения параметров в
программу.
АССТ =(учетная информация)
Этот редко используемый параметр позволяет программисту
снабжать шаг задания учетной информацией. Обычно учетная
информация кодируется в карте JOB.
RD=3anpoc
Как и в случае карты JOB, этот параметр дает возможность
автоматически повторять запуск и отказываться от выбранных
контрольных точек.
Перечень операторов языка управления заданиями в OS
419
//Имя
Операция
Операнд
П/К
//имя
шага
EXEC
I
процедуры.
PGM == имя программы
PGM = *•• имя шага. имясШ
PGM = *. имя шага.имя шага
имяс1с1
[PROG =] имя процедуры
COND ) ((условие)]
СОШ.имя шага | = (JEVEN \ [, условие, ...])
процедуры] (ONLY J
(PARM = значение
\РARM.имя шага процедуры = значение
"AGGT = (учетная информация)
АССТ.имя шага процедуры = (учетная информация)
RD = запрос
RD-имя шага процедуры = запрос
DPRTY = (значение 1, значение 2)
DPRTY.hma шага процедуры = (значение 1,
значение 2)
ТЩЕ= (минуты, секунды)
TIME, имя шага процедуры (минуты, секунды)
nnnnn К ]
\ [,значение! К])
,значение0 К)
(nnnnnK ]
REGION.HMHmara=(| [ [.значениехК])
процедуры 1значение0К]
ROLL=(x, у)
ROLL.имя шага процедуры = (х, у)
REGION=(
П
К
К
К
К
К
Обозначения:
П — позиционный параметр.
К — ключевой параметр.
{ } — выбрать одну из возможностей
[ ] — факультативно; если включено несколько строк, то выбрать одну
или не выбирать ни одной.
Рис. П.Б.2. Оператор EXEG — общая форма записи.
D P R TY =(значение1, значение2)
Сообщение о приоритетах, определяющее, какая из нескольких
одновременно занимающих основную память программ в случае
конфликтной ситуации получает управление CPU первой.
TIME =(минуты, секунды)
Устанавливает предельное время обработки данного шага задания.
REGION==nnnnnK
420
Приложение Б
Устанавливает максимальный объем основной памяти, доступный
данному шагу задания.
ROLL=(x, У)
Как и в карте JOB, параметр ROLL позволяет программисту
уточнить, может ли данный шаг задания быть развернут или свернут
(х) и может ли он вызывать свертывание и развертывание другой
программы (у).
Карта DD
Назначение? конкретизирует особенности — физическое
размещение, логическую структуру— наборов данных (см. рис. П.Б.З.)
Параметры:
DSNAME, или DSN
Идентифицирует набор данных по имени:
имя
имя (имя области)
имя (имя члена)
имя (номер поколения)
&& имя
&& имя (имя члена)
&& имя (имя области)
*.имяс1с1
*.имя шага.имя dd
DSNAME =
*.имя шага.имя шага npon,eflypu.HMHdd ;
UNIT
Определяет запрос конкретного типа физических устройств ввода
— вывода:
(
UNIT =
,Р 1 [,DEFER] [,SEP = (список HMeHdd)])
адрес
тип
_ группа
Устройства могут запрашиваться указанием фактических адресов
типа канал — устройство, номеров моделей в классификации
IBM (2400 — конкретный тип лентопротяжного устройства,
соответствующий опции «тип» или группового имени устройств в
соответствии с определением данного вычислительного центра.
Другая форма
UNIT = AFF = HMHdd
Перечень операторов языка управления заданиями в OS 421
позволяет размещать набор данных на том же самом физическом
устройстве, которое уже использовалось в данном задании для
хранения другого набора данных (определяемого идентификатором •
DDNAME).
//Имя
//гимясЫ 1
имя шага
процеду-
_ры. имяс1с1_
i
•
i
1
.
,
•
Операция
DD
Операнд
DSNAME = идентификатор]
DSN — идентификатор J
UNIT = (информация об устройстве)]
UCS = (информация UCS)]
"VOLUME = (информация о томе)]
[VOL = (информация о томе) ]
DCB = (атрибуты)
[имя набора данных
DCB — (!#-имя niara.HMfldd
Ч*. имя шага.имя шага
процедуры, moid d
[,атрибуты])
'
LABEL = (информация о метке)]
DISP = ([состояние] [, диспозиция]) Л
SYSOUT = х 1
SYSOUT =(х Г, имя программы][номер формата]) 1
"SPACE = (память прямого доступа) 1
SPLIT = (память прямого доступа)
SUB ALL ОС = (память прямого доступа) J
~SEP = (HMeHadd) ]
AFF = HMfldd J
[* } [,DCB=([BLKSIZE=6flOK] [,BUFNO =
{ } = номер])]
[data)
DUMMY, ...
DDNAME =HMfldd[, DCB = ([BLKSIZE = блок]
[,BUFNO = номер])]
Обозначения:
{ } — выбрать одну из возможностей.
[ ] — факультативно; если включено несколько строк, то выбрать одну
или не выбирать ни одной.
Рис. П.Б.З. Оператор DD — общая форма записи.
422 Приложение В
Обратимся вновь к первой форме этого параметра. Второй
позиционный параметр здесь позволяет программисту указанием
действительных номеров запросить одновременную установку всех
томов многотомного файла; если число томов задается
подпараметром VOL, то программист просто кодирует «Р». Подпараметр
DEFER — третий позиционный подпараметр — позволяет
отложить выдачу сообщения об установке тома до фактического
выполнения макрокоманды OPEN. Подпараметр SEP —
ключевой, он позволяет сообщить системе тот факт, что наборы
данных, перечисленные в подпараметре, должны
помещаться на различных физических устройствах. Если, например, в
программе предполагается доступ к наборам входных и выходных
данных на диске, то с помощью подпараметра SEP можно было бы
предусмотреть хранение этих наборов на различных томах,
минимизируя, таким образом, движение головки чтения — записи.
UCS
Этот параметр позволяет использовать специальные цепи или
передачи для печати нестандартных символов на печатающем
устройстве типа 1403.
UCS = (код набора символов Г ,FOLD I [,VERIFYj)
VOLUME или VOL
Позволяет назначать тома, т. е. конкретизирует необходимые тома
на лентах и дисках.
(список серийных ~~
номеров)
имя набора
данных
*.имя(1(1
*.имя
шага имяаМ
*.имя шага.имя
шага
процедуры, имяйа _
Важнейшими опциями являются параметры SER и REF,
позволяющие программисту указывать конкретный том или группу томов
непосредственно — их серийными номерами — либо косвенно,
ссылкой на один из предыдущих шагов задания. Подпараметром
PRIVATE фиксируется исключительное право пользования
набором данных на томе только запрашивающей программой.
Использованием подпараметра RETAIN обеспечивается сохранение
тома на устройстве между шагами задания. Третий позиционный
подпараметр позволяет программисту сообщить системе о том,
что обработка должна начаться не с первого тома многотомного
VOLUME
= ([PRIVATE] [.RETAIN"! Г ,послед1 "| riK0_Jpn?e_CT"l I ♦ J — SER =*
REP=:
[.RETAIN! Г .послед. 1 Г, количест-1 [,
номер тома I во томов
I
REP
REP
REF
Перечень операторов языка управления заданиями в OS
423
файла. Четвертым подпараметром программист может сообщить
число томов, составляющих многотомный файл.
DCB
Определяет особенности форматов реальных данных.
LABEL
Определяет тип метки, а также относительный номер файла на
многофайловом ленточном томе; указывает на характер доступа —
считывание или запись.
LABEL =*
(["относит, номер
[набора данных
,SL
,SUL
,NSL
,NL
,BLP
t:
PASSWORD
J L .out J
[jfEXPDT^yyddd])
I
RETPD-nnnn
Первый подпараметр, который является позиционным,
определяет относительный номер файла на многофайловом томе; по
умолчанию предполагается файл с относительным номером 1. Вторым
позиционным подпараметром задается тип метки. Используя
значения IN или OUT в качестве третьего позиционного подпараметра,
программист может отменить спецификации доступа INOUT
программной макрокоманды OPEN для файлов последовательного
базисного метода доступа (BSAM); для программирующих на
Фортране это очень важно. Последним подпараметром назначается дата
конца или время жизни набора данных.
DISP
Определяет состояние и диспозицию набора данных. Первый
подпараметр указывает состояние набора данных перед началом
выполнения шага задания. Второй подпараметр определяет характер
действий, которые следует произвести с набором данных по
завершении шага задания, тогда как третьим подпараметром
назначается диспозиция набора данных на случай непредусмотренного
окончания шага задания.
DISP = (
SHR
NEW
OLD
MOD
,DELETE
,KEEP
,PASS
,CATLG
UNCATLG
,UNCATLG
,CATLG
,DELETE
,KEEP
)
424 Приложение В
SYSOUT
Констатирует использование системного устройства вывода.
Поскольку диспозиция системного устройства вывода определяется
системой, кодирование параметра DISP не требуется.
SPACE
Определяет объем необходимого для рассматриваемого набора
данных пространства памяти прямого доступа. Первая форма
SPACE =(ABSTR, (количество,адрес[,справочник]))
позволяет программисту указывать действительные абсолютные
адреса дорожек его наборов данных; второй и третий позиционные
подпараметры определяют число дорожек и абсолютный адрес
первой из назначаемых дорожек. Последний подпараметр
позволяет выделять пространство для справочника в индексно-последова-
тельных и библиотечных наборах данных.
Задание абсолютных адресов дорожек редко используется в
условиях OS; более общеупотребительной является вторая форма
параметра SPACE:
- (
SPACE «
'TRK
CYL
размер
блока
,/коли- [".приращение 1Г,справочник ] |\RLSE ]
Ячество [, J[.индекс J [, J
,CONTIG"l[ ,ROUND]>
,MXTG
,ALX
Пользуясь этой формой, программист может запросить дорожки
(TRK), цилиндры (CYL) или блоки заданного размера. После того
как определен характер распределения требуемого пространства
памяти, программист указывает требуемый объем пространства,
назначая сначала (с помощью ряда позиционных параметров)
первичное распределение, затем — на случай, если выделенный при
первичном распределении объем окажется недостаточным, —
вторичное распределение, и, наконец, пространство для
справочника или таблицы индекса. Заметим, что синтаксически суммарный
запрос «количества» рассматривается как один позиционный
подпараметр, при этом подподпараметры количества, приращения и
индекса выделяются рядом скобок.
Подпараметр RLSE позволяет возвращать системе в момент
завершения шага задания все не использованное им пространство
памяти. CONTIG позволяет заказывать связные области памяти,
MXIG — для выделения наибольшей на томе связной области
(если она больше запрашиваемого объема памяти) и ALX — для
выделения пяти самых больших связных областей памяти на тома
(с той же оговоркой относительно запрашиваемого объема памяти).
Подпараметром ROUND обеспечивается принадлежность
выделяемой памяти одному цилиндру.
Перечень операторов языка управления заданиями в OS
425
SPLIT
Позволяет «расщепить» выделяемое пространство памяти,
распределяя его среди различных физических томов и, таким образом,
минимизируя движения головок при обработке набора данных.
SPLIT =
п
(n, GYL, (количество [,приращение]))
%
(%, размер блока, (количество [,приращение]))
Значение этого параметра может задаваться либо числом дорожек
на цилиндр, либо процентом дорожек в цилиндре, отводимых
рассматриваемому набору данных. Обычно ряд параметров SPLIT
кодируется на нескольких отдельных картах DD, которыми по
существу определяется способ разбиения первоначально
запрошенного пространства памяти.
SUBALLOC
Позволяет задавать подразбиение пространства памяти на одном и
том же томе, выделяемом для нескольких различных наборов
данных.
SUBALLOC =(
fTRK
CYL
размер
.блока
,(коли- Г.прира- *] Г.спра-
Г
чество | щение | [вочник
]
]
) Симябй
,имя шага.имябб
, имя шага имя шага
процедуры. имяс1с1
)
SEP и AFF
Параметр SEP позволяет программисту отметить необходимость
использования различных каналов для двух наборов данных.
Параметр AFF позволяет копировать значение параметра SEP,
использованное в другой карте DD.
— вывода, определяемых данной
DUMMY
Требует обхода операций ввода
картой DD.
* или DATA
Звездочка (*) в разделе операндов карты DD указывает на то, что
далее следуют данные, входящие в состав потока задания; этот
параметр обычно используется как указание на то, что карты данных
должны считываться с системного устройства ввода. Параметр
DATA означает то же самое, но позволяет включать в колоду
задания карты данных, которые при этом должны иметь в первых
двух колонках символы //.
426 Приложение В
DDNAME
Откладывает назначение параметров набора данных до следующей
карты DD с указанным именем DDNAME.
Специальные карты
Карта JOBLIB
//JOBLIB DD DSN=имя библиотеки,013Р=ЗН11
позволяет загружать и выполнять программы, содержащиеся в
личной библиотеке. Карта JOBLIB следует за картой JOB, и,
таким образом, библиотека становится доступной всем
последующим шагам задания: карта JOBLIB и карта SYSCHK являются
единственными картами DD, которые могут в потоке задания
предшествовать первой карте EXEC.
//STEPLIB DD DSN=HMfl библиотеки,018Р=8Н1{
подобно карте JOBLIB, позволяет загружать и запускать в
решение программы, составляющие личную библиотеку. Карта
STEPLIB следует за картой EXEC и ее действие распространяется
только на один шаг задания.
Карта SYSABEND
//SYSABEND DD SYSOUT =класс
обеспечивает печать состояния ядра системы в случае
непредусмотренного завершения задания.
Карта SYSCHK
//eYSCHK DD DISP=OLD, DSN=hmh библиотеки
в контрольной точке
описывает набор данных библиотеки в контрольной точке. Следует
яа картой JOb и картой JOBLIB, если таковая используется.
Карта SYSUDUMP
//SYSUDUMP DD SYSOUT =класс
^обеспечивает печать состояния области программы пользователя,
включая значения регистров, размещение наборов данных и
содержимое трассировочных таблиц в случае непредусмотренного
«окончания задания.
Карта PROC
//процедура PROG ключевые параметры
Перечень операторов языка управления заданиями в OS 427
определяет значения обычно назначаемых по умолчании
символических параметров каталогизированной процедуры.
Карта-ограничитель
/*
используется в качестве признака конца карточного файла.
Карта команд оператора
// команда операнды
позволяет вносить в поток задания команды оператора.
Нуль-карта
//
в некоторых системах используется как признак конца задания.
Карта комментариев
//* комментарий
используется для включения в поток задания комментариев.
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
Адресация данных 59
— — методом деления с остатком
59
— рандомизации 60
— — — свертывания 59
— памяти 36, 183
Адресное слово канала (GAW) 193
Байт 36
Библиотеки 99—107
Бит 36
Блокирование 78
Блоки управления данными (DCB)
144—145, 148
задачами (ТСВ) 255
— запросов 256
— — устройством (UCB) 271
Бод 49
Буферизация 78, 79
Генерация системы 278
Динамическое распределение
памяти 282—300
Диск 45, 55
— параметры карты DD 162—163
Дорожки 45
— абсолютный адрес 56, 57
— относительный адрес 56
Задание 97, 111, 127, 247
— инициализация 99
— планирование 97
Задача 247
Записи 44
— логические 44
— — переменной длины 53
— — — блокированные 53
— — фиксированной длины 52
— блокированные 53
— относительный номер 56
Индекс дорожки 62
— цилиндра 62
Каналы 41
— мультиплексные 41
— селекторные 41
Каталогизированные процедуры
в DOS 117
OS 130-131
Код ASCII-8 25, 40
— BCD 23
— EBCDIC 24—26, 40, 41
Команды канальные (CCW) 191
— машинные 187—189
Компиляторы 73
Контроллеры 40
Критерии эффективности
вычислительной системы 177
Магнитная лента 42, 152
— — параметры карты DD 152—
162
Маскирование 205
Межблочные промежутки 53
Метки 66
Метод доступа 78
ISAM 64
VSAM 64, 65
Многомашинные системы 379
Модуль загрузочный 30, 31
— исходный 31
— объектный 30, 31, 73
Мультипрограммирование 12, 90—
96
— и разделение времени 87, 92—94
Начальная загрузка программы
(IPL) 225
^ерационная система 11, 69, 107,
108, 176, 394
DOS 12, 110, 202—243
OS/MFT 13, 126, 244—281
OS/MVT 282—301
Память 35
— виртуальная 46, 64, 302, 317,
326-330
Предметный указатель
429
— — составная 323
— оперативная 35
— распределение 97, 282—300
— сегментация 303—309
— страничная организация 309—
312
Параллельная обработка 288—290
Прерывания 195
— ввода—вывода 203
— внешние 199
— от схем контроля ЭВМ 202
— при обращении к супервизору
200
— приоритеты 209
— программные 201
Программа канальная 192
Пропускная способность ЭВМ 87,
177
Регистры 37, 101
— общего назначения 37
Управление вводом—выводом 190—
191, 272—276
— данными 51, 85, 104, 276—277
— заданиями 110, 250
в DOS 111—125
OS/360 и OS/370 126
— — главный планировщик 250,
260
— — инициатор-терминатор 251 —
252, 258
— — райтер 252
— — ридер-интерпретатор 250—
251
— задачами 253
Устройство прямого доступа 46, 47,
62
— ввода—вывода 76—80
— — производительность 88—90
— — распределение 103
— системного ввода и вывода 168—
169
Системы
— операционные. См. также
Операционные системы
— специального назначения 333
— счисления 15
— — восьмеричные 18
— — двоичные 15
— — десятичные 16
— телеобработки 47—49
— управления производственным
процессом 335—357
— — базами данных 358—370
передачей данных 370—376
Слово состояния программы (PSW)
184—187, 190
канала (CSW) 191
Спулинг 80, 103
— онлайновый 103, 104
— офлайновый 103
Структуры модулей
— — оверлейные 83—85
— — простые 83
Таблица вектора связей (CVT) 254
— ввода—вывода задачи (ТЮТ)
272
— VTOC 67
Таймер 83
Том 66
Файл 51
— индексно-последовательной
организации 62
— последовательной организации 54
— прямого доступа 57, 59
— — — параметры карты DD 163—
167
Форматы логических записей 52.
См. также Записи
Центральный процессор (CPU) 33
Цилиндр 62
Числа 15^22
— в упакованном десятичном
формате 26
— двоично-кодированные
десятичные 23
— с плавающей точкой 22
Шаг задания 81, 127
Язык ассемблера 27
— высокого уровня 28, 29, 14В
— машинный 26—27
I
I
ОГЛА ВЛЕНИБ
Предисловие к русскому переводу 5
Предисловие 7
Глава 1. Введение и общий обзор • . 11
ЧАСТЬ I. ОСНОВНЫЕ СИСТЕМНЫЕ РЕСУРСЫ
Глава 2. Биты, числа, коды и математическое обеспечение ... 15
Введение 15
Двоичная система счисления 15
Кодирование в ЭВМ 23
Языки программирования '. . , 26
Краткие выводы 31
Глава 3. Аппаратные средства 33
Введение 33
Центральный процессор 33
Хранилище, или память 35
Регистры 37
Устройства для обработки единичных записей 37
Контроллеры 40
Каналы 41
Магнитная лента 42
Диск 45
Другие виды устройств памяти прямого доступа 46
Аппаратные средства телеобработки 47
Краткие выводы 49
Глава 4. Управление данными и структуры файлов 51
Введение 51
Исходные определения. Поле, запись и файл 51
Форматы записей 52
Последовательные файлы 54
Прямой доступ 57
Простой прямой доступ 58
Косвенная адресация 59
Список перекрестных ссылок 60
Индексно-последовательные файлы 62
Сцепление записей 63
Файлы, использующие виртуальную память 64
Какая организация лучше? 65
Тома, метки и прочее 66
Краткие выводы 67
Оглавление 431
ЧАСТЬ II. ЭВОЛЮЦИЯ ОПЕРАЦИОННЫХ СИСТЕМ
Глава 5. Системы обработки одиночных программ: второе поколение 69
Введение 69
Минимизация объема подготовительных операций 70
Время компиляции и объектные модули 73
Несоответствие быстродействия ЭВМ и скорости работы устройств
ввода — вывода . ! . . 76
Блокирование, буферизация и методы доступа 78
Спулинг 80
Контрольные точки и возобновление счета 82
Таймеры 83
Минимизация времени счета. Краткие выводы 83
Использование основной памяти — оверлейные структуры . . 83
Управление данными , 85
Краткие выводы 86
Глава 6. Мультипрограммирование и разделение времени 87
Введение 87
Производительность устройств ввода — вывода и скорость
обработки данных в ЭВМ третьего поколения 88
Одно из решений — мультипрограммирование 90
Разделение времени 92
Математическое обеспечение систем мультипрограммирования и
разделения времени 93
Распределение времени CPU 94
Распределение памяти 97
Распределение памяти. Планирование заданий 97
Регистры 101
Распределение устройств ввода — вывода 101
Распределение устройств ввода — вывода. Спулинг .... 103
Устройства ввода — вывода и разделение времени .... 104
Управление данными 104
Библиотеки 105
Операционная система 107
Краткие выводы 108
ЧАСТЬ III. ЯЗЫК УПРАВЛЕНИЯ ЗАДАНИЯМИ В СИСТЕМАХ
IBM/360 И IBM/370'
Глава 7. Управление заданиями в дисковой операционной системе
фирмы IBM 110
Введение 110
Карта JOB в DOS Ill
Карта EXEC в DOS 112
Компиляция и редактирование связей 115
Каталогизирование программ 117
Управление вводом — выводом в DOS 119
Изменение стандартных присвоений — оператор ASSGN . . . 122
Другие функции управления заданиями в DOS 123
Краткие выводы 124
432 Оглавление
Глава 8. Язык управления заданиями в операционных системах
OS/360 и OS/370 — карты JOB и EXEC 126
Введение 126
Карты JCL 127
Задания и шаги заданий 127
Каталогизированные процедуры 130
Язык управления заданиями. Основные параметры .... 131
Карта JOB 132
Карта JOB. Учетная информация 133
Карта JOB. Имя программиста 133
Карта JOB. Параметр GLASS 134
Карта JOB. Параметр TIME 134
Параметр REGION 135
Параметр MSGLEVEL 135
Выбор по умолчанию 136
Другие параметры карты JOB 136
Некоторые карты JOB 137
Перенос записи оператора JCL на вторую карту 137
Карта EXEC 137
Параметр COND, или условие выполнения шага задания . . 139
Другие параметры EXEC 141
Краткие выводы 142
Глава 9. Карта определения данных 143
Введение 143
Карты DD и блоки управления данными 144
Устройства для единичных записей 1^9
Устройства для единичных записей. Параметр UNIT . . . 150
Единичная запись. Параметр DCB 151
Магнитная лента 152
Лента. Параметр UNIT 153
Лента. Параметр VOLUME 155
Лента. Параметр LABEL 156
Лента. Параметр DGB 157
Лента. Параметр диспозиции 158
Лента. Параметр имени набора данных 160
Примеры создания набора данных на ленте с помощью карт DD. 160
Лента. Параметр DUMMY 161
Поиск существующего набора данных на ленте 162
Запоминающие устройства прямого доступа 162
Файлы прямого доступа. Параметр UNIT 163
Файлы прямого доступа. Параметр VOLUME 164
Файлы прямого доступа. Параметр LABEL 164
Файлы прямого доступа. Параметр DCB 164
Файлы прямого доступа. Параметр диспозиции 164
Файлы прямого доступа. Параметр имени набора данных. . . 165
Файлы прямого доступа. Параметр SPACE 165
Устройства системного ввода и системного вывода 168
Классификаторы шагов задания в картах DD 169
Оператор PROC 170
Законченный пример 171
Краткие выводы 174
ЧАСТЬ IV. КОНЦЕПЦИИ ОПЕРАЦИОННЫХ СИСТЕМ
Глава 10. Функции и назначение операционной системы. . • • 176
Оглавление 433
Введение 176
Системные ресурсы 176
Критерии эффективности 177
Противоречивость критериев 178
Ограничения 179
Определение требований к системе 180
О нескольких следующих главах 181
Глава 11. Принципы функционирования Системы IBM/360. . . 183
Введение 183
Адресация памяти в Системе IBM/360 183
Слово состояния программы 184
Команды переменной длины 187
Признаки результата 189
Ключ защиты памяти 190
Другие поля PSW 190
Управление вводом — выводом 190
Привилегированные команды 194
Понятие прерывания 195
Типы прерываний 199
Внешние прерывания 199
Прерывания при обращении к супервизеру (SVC) 200
Программные прерывания 201
Прерывания от схем контроля машины 202
Прерывания ввода — вывода 203
Поля памяти постоянного назначения 205
Маскирование 205
Маска программы 208
Состояния программы 209
Приоритеты прерываний 209
Типичный пример 210
Разные изготовители — разные подходы 216
Краткие выводы 220
Заключительное замечание 221
Глава 12. Дисковая операционная система IBM/360 222
Введение 222
Размещение модулей в системе DOS 222
Начальная стадия — генерация системы 224
Загрузка начальной программы 224
Загрузка прикладных программ — инициирование одиночных
программ 225
Организация потока заданий 226
Программа управления заданиями 227
Спулинг 229
Мультипрограммирование и система управления физическим
вводом — выводом 230
Система управления логическим вводом — выводом .... 233
Мультипрограммирование. Краткие выводы 235
Распределепие памяти 236
Управление устройствами ввода — вывода 236
Библиотечные фнункции 240
Краткие выводы 241
Глава 13. Операционная система IBM/360 мультипрограммирования
с фиксированным числом задач 244
434 Оглавление
Введение 244
Основные структуры 245
Задания и задачи 247
Управление заданиями. Главный планировщик 250
Управление заданиями. Ридер — интерпретатор 250
Управление заданиями. Инициатор — терминатор 251
Управление заданиями. Райтер 252
Управление заданиями. Краткие выводы 253
Управление задачами 253
Объединение в систему — основные блоки управления OS/MFT. 254
Пример 257
Краткие выводы к нашему примеру 269
Управление вводом — выводом в системе OS/MFT 271
Управление вводом — выводом. Блок управления устройством. 271
Управление вводом — выводом. Таблица ввода — вывода задачи 272
Управление вводом — выводом. DCB и DEB 273
Управление вводом — выводом. Макрокоманда OPEN .... 273
Управление вводом — выводом. Связь прикладной и канальной
программ * 275
Управление данными 276
Размещение системы 277
Генерация и гибкость системы 278
Пределы возможностей 279
Краткие выводы 280
Глава 14. Мультипрограммирование с динамическим распределением
памяти 282
Введение 282
Более эффективное использование памяти 283
OS/MVT 284
Динамическое перемещение программ 287
Параллельная обработка 288
Процессирование подзадач 290
Развертывание и свертывание 291
Обработка в режиме «передний план — фоновый раздел». . . 294
Мультипроцессорная обработка 296
Другие изготовители 29в
Краткие выводы 301
Глава 15. Сегментация, страничная организация памяти и
виртуальная память 302
Введение 302
Эффективность использования памяти 302
Сегментация 303
Страничная организация памяти 309
Сегментация и страничная организация памяти 313
Системы сегментации и системы страничной организации памяти316
Выводы 31&
Виртуальная память 317
Составная виртуальная память 323
Многие уровни реальной памяти 325
Методы доступа к виртуальной памяти 326
Преимущества сегментации, страничной организации памяти и
виртуальной памяти 328-
Оглавление 435
Проблемы сегментации, страничной организации памяти и
виртуальной памяти 329
Краткие выводы 331
ЧАСТЬ V. СИСТЕМЫ СПЕЦИАЛЬНОГО НАЗНАЧЕНИЯ И ИХ
ПРИМЕНЕНИЕ 333
Введение к части V 333
Глава 16. Система управления производственным процессом . . 335
Введение 335
Технологический цикл изготовления печатных плат для ЭВМ. 336
Первый этап — поточное производство заготовок плат. . . 340
Второй этап — вытравливание печатной схемы и сверление. . 344
Третий этап — крепление микросхемных элементов 347
Контроль трудозатрат и расхода материалов 347
Четвертый этап — окончательная проверка 349
Требования к системе управления процессом 349
Надежность 350
Время ответа 353
Доступность 354
Почему нельзя обойтись операционной системой общего назначения?355
Управление производством. Заключительные замечания . . . 355
Краткие выводы 356
Глава 17. Системы управления базами данных и системы передачи
данных 358
Введение 358
Ранние опыты применения ЭВМ. Экономическое обоснование. 358
Понятие системы MIS 360
Метод централизованной базы данных 362
Достоинства метода централизованной базы данных 364
Некоторые недостатки и издержки 365
Реализация базы данных. Типичная структура данных. . . . 366
Запросы 369
Управление передачей данных 370
Объединение частей в целое — система MIS 371
Точка зрения прикладного программиста 375
Перспективы 376
Краткие выводы 376
Глава 18. Применение многомашинных систем 379
Введение , 379
Некоторые тенденции разработки новых аппаратных средств 380
В универсаме. Функции мини-ЭВМ 382
Центральная машина 385
Для чего нужны мини-ЭВМ?. » 387
Почему нельзя обойтись только мини-машинами? 387
Краткие выводы 388
Автоматическая круглосуточная касса 389
Автоматизация сбора исходных данных 391
«Интеллектуальные» терминалы 392
Краткие выводы 392
436 Оглавление
Глава 19. Обзор этапов развития операционных систем. . . . 394
Введение 394
Ранние разработки. Первое поколение 394
Второе поколение , 394
Первые машины третьего поколения 397
70-е годы 403
Взгляд в будущее 405
Краткие выводы 407
Приложение А. Краткий перечень операторов языка управления
заданиями в системе DOS 408
Приложение Б. Краткий перечень операторов языка управления
заданиями операционных систем IBM/360 и IBM/370 415
Предметный указатель , 428
У. ДевиС
ОПЕРАЦИОННЫЕ СИСТЕМЫ
функциональный подход
Старший научный редактор А. А. Харитонов
Младший научный редактор М. В. Архипова
Художник С. Томилин
Художественный редактор Л. Е. Безрученков
Технический редактор Н. Д. Толстякова
Корректор Е. Г. Литвак
ИБ № 1717
Сдано в набор 30.11.79. Подписано к печати
7.04.80. Формат 60x907ie. Бумага типографская
№1. Гарнитура обыкновенная. Печать высокая.
Объем 13,75. бум. л. Усл. печ. л. 27,50. Уч.-изд.
л. 26,75. Изд. № 20/0235 Тираж 40 000 экз.
Зак. 821. Цена 2 р. 20 к.
ИЗДАТЕЛЬСТВО «МИР»
Москва, 1-й Рижский пер., 2.
Ярославский полиграфкомбинат Союзполиграфпрома
при Государственном комитете СССР по делам
издательств, полиграфии и книжной торговли
150014. Ярославль, ул, Свободы, 97.
ИЗДАТЕЛЬСТВО «МИР»
в 1981 году выпускает следующие книги:
Гантер Р. Методы управления разработкой
программного обеспечения. Пер. с англ., 24 л., цена 2 р.
Рассматриваются вопросы планирования работы
программистов, документирования, обслуживания, сопровождения,
тестирования и другие организационные проблемы, возникающие
на различных этапах «жизненного цикла» программного
обеспечения.
Книга будет полезна разработчикам и пользователям
программного обеспечения, руководителям коллективов
программистов и вычислительных центров.
Сипсер Р. Архитектура связи в распределительных
системах. Пер. с англ., 47 л., цена 3 р. 80 к.
Монография специалиста фирмы IBM (США), посвященная
разработке архитектуры связи в распределенных системах
обработки данных, выпускается в русском переводе в двух книгах.
В книге 1 приведен обзор современных систем
телеобработки и используемых в них средств связи, освещены методы
увеличения эффективности использования линий связи в
вычислительных сетях, изложены принципы многоуровневого подхода
к проектированию программных и аппаратных средств
взаимодействия ЭВМ в вычислительных сетях. Изложение этих
принципов ведется на примере «сетевой архитектуры систем» —
SNA (Systems Network Architecture), разрабатываемой
фирмой IBM.
В книге 2 рассмотрено функционирование программного
обеспечения и аппаратных средств, построенных в соответствии
с архитектурой SNA, демонстрируется применение аппарата
конечных автоматов для строгого описания протоколов связи,
приведен обзор методов повышения надежности системы
телеобработки и мер обеспечения секретности, обсуждаются
развитие архитектуры для систем с децентрализованным
управлением сетью, методы выбора маршрута и интерфейсы с новыми
сетями передачи данных.
Монография представляет интерес для специалистов по
вычислительной технике, системному программированию и
передаче данных.
Липьят А. Архитектура малых вычислительных
систем. Пер, с англ., 12 л., цена 90 к.
Книга английского специалиста знакомит читателя с
системными характеристиками наиболее распространенных видов
структур мини-ЭВМ, основными функциями центрального
процессора (ЦП) и оперативного запоминающего устройства,
командами и способами их реализации. Подробно
рассматривается организация обмена данными как внутри ЦП, так и
между ЦП и внешними устройствами.
Предназначена для специалистов, занятых разработкой и
эксплуатацией мини-ЭВМ, а также для студентов,
специализирующихся в области вычислительной техники.