- •Часть I. Операционные системы и среды
- •Глава 1. Основные понятия .22
- •Глава 2. Управление задачами и памятью в операционных системах. . 51
- •Глава 3. Особенности архитектуры микропроцессоров 180x86 100
- •Глава 4. Управление вводом/выводом и файловые системы 129
- •Глава 5. Архитектура операционных систем и интерфейсы
- •Глава 6. Проектирование параллельных взаимодействующих
- •Глава 7. Проблема тупиков и методы борьбы с ними 269
- •Глава 8. Современные операционные системы 301
- •Часть II. Трансляторы, формальные языки и грамматики
- •Глава 9. Формальные языки и грамматики 347
- •Глава 10. Регулярные языки 387
- •Глава 11. Контекстно-свободные языки 418
- •Глава 12. Классы кс-языков и грамматик . . . 463
- •Глава 13. Основные принципы построения трансляторов 529
- •Глава 14. Генерация и оптимизация кода 588
- •Глава 15. Современные системы программирования 655
- •Часть I Операционные
- •Глава 1 Основные понятия
Глава 14. Генерация и оптимизация кода 588
Семантический анализ и подготовка к генерации кода 588
Назначение семантического анализа 588
Этапы семантического анализа 589
Идентификация лексических единиц языков программирования 594
Распределение памяти. Принципы распределения памяти 597
Дисплей памяти процедуры (функции). Стековая организация
дисплея памяти 603
Память для типов данных (RTTI-информация) 610
Генерация кода. Методы генерации кода 612
Общие принципы генерации кода.
Синтаксически управляемый перевод 612
Способы внутреннего представления программ 615
Обратная польская запись операций 619
Схемы СУ-перевода 622
Оптимизация кода. Основные методы оптимизации 630
Общие принципы оптимизации кода 630
Оптимизация линейных участков программы 634
Другие методы оптимизации программ 641
Машинно-зависимые методы оптимизации 648
Контрольные вопросы и задачи . 650
Вопросы 650
Задачи 652
Глава 15. Современные системы программирования 655
Понятие и структура системы программирования 655
История возникновения систем программирования 655
Структура современной системы программирования 658
Принципы функционирования систем программирования 660
Функции текстовых редакторов в системах программирования ....... 660
Компилятор как составная часть системы программирования 661
Компоновщик. Назначение и функции компоновщика 662
Загрузчики и отладчики. Функции загрузчика 663
Библиотеки подпрограмм как составная часть
систем программирования
Дополнительные возможности систем программирования 668
Лексический анализ «на лету». Система подсказок и справок ...... .668
Разработка программ в архитектуре «клиент—сервер» 669
Разработка программ в трехуровневой архитектуре.
Серверы приложений g7Q
Примеры современных систем программирования 672
Системы программирования компании Borland/Inprise .... 672
Системы программирования фирмы Microsoft 677
Системы программирования под ОС Linux и UNIX .682
Разработка программного обеспечения для сети Интернет 687
Контрольные вопросы и задачи 696
Вопросы
Задачи ' ' • • '..'.'. '.'•'. '.'. '.'. '.'.'. '.'.'.'.'.'. 698
Приложение А. Тексты программы параллельных
взаимодействующих задач 700
Приложение Б. Тексты программ комплекса параллельных
взаимодействующих приложений ! .... 709
Список литературы 719
Алфавитный указатель 725
Предисловие
Настоящий учебник предназначается в первую очередь студентам технических вузов, хотя может быть востребован и обычными подготовленными пользователями, желающими углубить свои познания в области системного программного обеспечения.
Согласно Государственному образовательному стандарту, по которому ведется обучение студентов, поступивших в вузы до 2000 г., в рамках дисциплины «Системное программное обеспечение», относящейся к обязательным специальным дисциплинам учебного плана по направлению «Информатика и вычислительная техника», студент должен изучить следующие обязательные разделы: «...назначение, функции и структура операционной системы (ОС); понятие процесса; управление процессами, способы диспетчеризации процессов; понятие ресурса, виды ресурсов, управление ресурсами; управление памятью; устройства, виды устройств, драйверы устройств, устройства в MS-DOS; файловая система на диске, структура логического диска в MS-DOS; синхронизация процессов, семафоры, сообщения, использование семафоров для решения задач взаимоисключения и синхронизации; тупики, способы борьбы с тупиками; загрузка и настройка ОС, файлы конфигурирования MS-DOS, основные команды MS-DOS; обзор современных ОС; трансляторы; формальные языки и грамматики, типы грамматик; вывод цепочек; конечный и магазинный автоматы, распознаватели и преобразователи, построение автомата по заданной грамматике; структура компиляторов и интерпретаторов, лексический, синтаксический и семантический анализаторы, генератор кода;распределение памяти, виды переменных; статическое и динамическое связывание; загрузчики; функции загрузчика; настраивающий и динамический загрузчики; подключение библиотек».
В новой редакции Государственного образовательного стандарта, который вступил в силу в 2000 г. и относится к поколению студентов, поступивших в вузы осенью 2000 г. и позже, несколько изменено основное содержание этой дисциплины. В частности, в стандарте записано, что в рамках дисциплины «Системное программное обеспечение» должны изучаться следующие обязательные разделы: «...пользовательский интерфейс операционной среды; управление задачами; управление памятью; управление вводом/выводом; управление файлами; пример современной операционной системы; программирование в операционной среде; ассемблеры; мобильность программного обеспечения; макроязыки; трансляторы;
формальные языки и грамматики, типы грамматик; вывод цепочек; конечный и магазинный автоматы, распознаватели и преобразователи, построение автомата по заданной грамматике; структура компиляторов и интерпретаторов, лексический, синтаксический и семантический анализаторы, генератор кода;распределение памяти, виды переменных; статическое и динамическое связывание; загрузчики; функции загрузчика; настраивающий и динамический загрузчики; подключение библиотек».
Таким образом, мы можем констатировать, что в основном в дисциплине «Системное программное обеспечение» должно уделяться внимание операционным системам, средам и системам программирования. Именно в таком ключе в основном и строится настоящий учебник, поскольку предполагается, что его читателями, прежде всего, будут студенты, обучающиеся по специальностям, относящимся к направлению «Информатика и вычислительная техника». Учебный материал, ставший основой для настоящего учебника, уже в течение нескольких лет изучается студентами специальности 22.01.00 в Санкт-Петербургском государств^н-ном университете аэрокосмического приборостроения. Другими словами, по существу, в основу учебника лег расширенный конспект лекций по дисциплине «Системное программное обеспечение». Эта дисциплина изучается в течение двух семестров. В первом семестре рассматриваются операционные системы (принципы их построения и функционирования, вопросы создания параллельных взаимодействующих задач, выполняющихся в мультизадачных операционных системах), а во втором - формальные грамматики, трансляторы и системы программирования. Поэтому книга разбита на две крупные части. Эти две части связаны между собой не потому, что так построен план изучения дисциплины. Материал, рассматриваемый в каждой из частей учебника, тесно связан с вопросами, изучаемыми в другой ее части. Таким образом, детальное изучение материала любой части книги требует по крайней мере знакомства с основными понятиями всего учебника. Так, например, изучение структуры и технических аспектов работы компиляторов невозможно без знания принципов распределения памяти, которые относятся к вопросам построения операционных систем. Именно поэтому эти два крупных раздела объединены авторами в одну книгу и совместно представляются вниманию читателей.
Помимо общетеоретических вопросов в учебнике рассмотрены и отдельные практические вопросы, описаны конкретные реализации различных системных программ.
В первой части учебника, прежде всего, излагаются основные понятия ОС, принципы их построения и функционирования. В последние годы практически повсеместно ПК работают под управлением современных 32-битовых ОС, использующих аппаратные возможности микропроцессоров для создания и организации эффективных и защищенных вычислений. Мы посчитали необходимым рассмотреть в первой части учебника эти вопросы.
Наиболее популярными ОС являются системы Windows 95/98, Windows NT 4.0, начинается переход к Windows ME и семейству ОС Windows 2000 компании Microsoft. По этим ОС имеется огромное количество самых разнообразных публикаций, в том числе и учебных материалов, объем которых порой очень велик. В то же время по остальным ОС публикаций существенно меньше. Поэтому
в первой части настоящего учебного пособия мы в качестве примеров операционных систем и сред кратко рассматриваем такие ОС, как OS/2 Warp, UNIX и Linux, QNX. Естественно, что отдельные вопросы иллюстрируются и на примере популярных ОС Windows 95/98 и Windows NT 4.0.
Во второй части учебника рассматриваются как общие вопросы, связанные с по-строением трансляторов, так и методы их практической реализации от примитивных распознавателей текста до законченных систем программирования. Практическая реализация компиляторов и интерпретаторов рассматривается с точки зрения современных широко распространенных языков программирования высокого уровня, таких как Pascal, С и C++.
Кратко рассматриваются также практические вопросы построения прикладных программ на основе архитектуры «клиент—сервер» и трехзвенной архитектуры, ориентированной на работу с серверами баз данных и серверами приложений. Эти вопросы затрагиваются не с точки зрения технологии их реализации (такие сведения можно найти в появившейся сейчас специализированной литературе) в той или иной ОС, а со стороны методов разработки соответствующих прикладных программ с помощью той или иной системы программирования. Для более детального знакомства с конкретными реализациями читатели могут воспользоваться приводимыми авторами ссылками на литературные источники или на соответствующие технические публикации в глобальной сети Интернет. Таким образом, данный учебник должен быть полезен не только тем, кто хочет детально изучить системное программное обеспечение, но и тем, кто собирается сам разработать отдельные компоненты, в том числе отдельные системные утилиты, распознаватели и интерпретаторы команд, компоновщик или транслятор с некоторого языка, создать комплекс параллельно исполняющихся взаимодействующих программ. В учебнике рассматриваются вопросы, которые полезно знать в любом случае, если разработчик прикладной программы имеет дело с некоторым входным языком (которым может быть далеко не только язык программирования, но и любой другой язык команд, в том числе заданный пользователем или определенный в некоторой прикладной области). Примеры систем программирования, которые рассматриваются в этом учебнике, предназначены для работы в среде перечисленных выше операционных систем. Фрагменты программ, приведенные в книге, написаны на языках программирования высокого уровня Pascal и С.
В этом коротком предисловии мы, как авторы этой книги, хотим еще высказать самые теплые слова благодарности своим родным и близким за их долгое терпение, доброжелательность и сердечную заботу в течение всего времени подборки материалов, написания книга и ее «бесконечного» улучшения, благодаря которым только и мог появиться на свет этот труд, вынужденно оторвавший нас на некоторое время от домашних забот и хлопот. Хочется поблагодарить и Горде-ева В. А. за конструктивную критику и помощь в подготовке отдельных программ. Авторы признательны также сотрудникам издательства «Питер» Васильеву А. В. и Ваулиной Е. Ю. за их терпеливое и внимательное отношение в процессе подготовки текста книги, его обработки и корректуры. Наше взаимное уважение и сотрудничество позволили довести учебный материал книги «до ума», хотя это и не всегда удавалось сделать в заранее оговоренные сроки.
От издательства
Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты comp@piter.com (издательство «Питер», компьютерная редакция). Мы будем рады узнать ваше мнение!
Подробную информацию о наших книгах вы найдете на Web-сайте издательства http://www.piter.com.
А
