Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тип книга1.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.52 Mб
Скачать

Глава 6

Уровень операционной системы

Как уже отмечалось, современный компьютер организован в виде иерархии уровней, каждый из которых добавляет определенные функции к нижележаще­му уровню. Мы рассмотрели цифровой логический уровень, уровень микроархи­тектуры и уровень архитектуры команд. Настало время перейти к следующему уровню — уровню операционной системы.

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


Хотя и уровень операционной системы, и уровень архитектуры команд абст­рактны (в том смысле, что не являются реальными устройствами), между ними есть важное различие. Все команды уровня операционной системы доступны для прикладных программистов. Это — практически все команды более низкого уровня, а также новые команды, добавленные операционной системой. Новые команды называются системными вызовами. Они вызывают предопределенную службу операционной системы, в частности одну из ее команд. Обычный сис­темный вызов считывает какие-нибудь данные из файла.

Уровень операционной системы всегда интерпретируется. Когда пользователь­ская программа вызывает команду операционной системы, например чтение дан­ных из файла, операционная система выполняет эту команду шаг за шагом, точно так же, как микропрограмма выполняет команду ADD. Однако когда программа вы­зывает команду уровня архитектуры команд, эта команда выполняется непосред­ственно уровнем микроархитектуры без участия операционной системы.В этой книге мы можем рассказать об уровне операционной системы лишь в общих чертах. Мы сосредоточимся на трех важных особенностях. Первая осо­бенность — это виртуальная память. Виртуальная память используется многими операционными системами. Она позволяет создать впечатление, будто у маши­ны больше памяти, чем есть на самом деле. Вторая особенность — файловый ввод-вывод. Это понятие более высокого уровня, чем команды ввода-вывода, ко­торые мы рассматривали в предыдущей главе. Третья особенность — параллель­ная работа (несколько процессов могут выполняться, обмениваться информаци­ей и синхронизироваться). Понятие процесса является очень важным, и мы подробно рассмотрим его далее в этой главе. Под процессом можно понимать ра­ботающую программу и всю информацию о ее состоянии (памяти, регистрах, счетчике команд, вводе-выводе и т. д.). После обсуждения этих основных харак­теристик мы покажем, как они применяются к операционным системам двух ма­шин из трех наших примеров: Pentium 4 (Windows ХР) и UltraSPARC III (UNIX). Поскольку процессор 8051 обычно используется для встроенных сис­тем, у этой машины нет операционной системы.

Виртуальная память

В первых компьютерах память была очень мала по объему и к тому же дорого стоила. IBM-650, ведущий компьютер того времени (конец 50-х годов), содер­жал всего 2000 слов памяти. Один из первых 60 компиляторов ALGOL был на­писан для компьютера с объемом памяти всего 1024 слова. Древняя система с разделением времени прекрасно работала на компьютере PDP-1, общий объем памяти которого составлял всего 4096 18-разрядных слов для операционной сис­темы и пользовательских программ. В те времена программисты тратили очень много времени, пытаясь вместить свои программы в крошечную память. Часто приходилось использовать более медленный алгоритм только потому, что более быстрый не удавалось разместить в памяти компьютера.

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

Хотя эта технология широко использовалась на протяжении многих лет, она требовала длительной кропотливой работы, связанной с управлением оверлея­ми. В 1961 году группа исследователей из Манчестера (Англия) предложила ме­тод автоматического выполнения процесса наложения, при котором програм­мист мог вообще не знать об этом процессе [73]. Этот метод, в основе которого, как сейчас говорят, лежит использование виртуальной памяти, имел очевидное преимущество, поскольку освобождал программиста от массы нудной работы.

Впервые этот метод был применен в ряде компьютеров, выпущенных в 60-е го­ды. К началу 70-х годов виртуальная память была реализована в большинстве компьютеров. В настоящее время даже компьютеры1 на одной микросхеме, в том числе Pentium 4 pi UltraSPARC III, содержат очень сложные системы виртуаль­ной памяти. Мы рассмотрим их далее в этой главе.