Спонсор: Microsoft
Санкт-Петербургский государственный университет
Опубликован: 13.11.2010 | Доступ: свободный | Студентов: 6696 / 1522 | Оценка: 4.64 / 4.23 | Длительность: 45:08:00
ISBN: 978-5-9963-0495-0
Лекция 6:

Обзор функций ОС: управление памятью, файлами, процессами, сетями, командными интерпретаторами, сервисы ОС, системные вызовы. Уровни абстракции ОС. Архитектура UNIX и MS-DOS

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >

Системные вызовы (system calls) являются интерфейсом между выполняемой программой и операционной системой

Обычно системные вызовы доступны как специальные ассемблерные команды, например, в IBM 360 ассемблерная команда svc 10 выполняет вызов супервизора (управляющей программы ОС) с номером системной функции 10.

Некоторые языки (C, C++, Java и др.) позволяют выполнять системные вызовы непосредственно, не "опускаясь" до ассемблерного уровня, с помощью вызовов специальных библиотечных функций (методов) типа System("cd my_dir").

При системном вызове ОС из программы пользователя возникает проблема передачи параметров. Используются три основных способа передачи параметров исполняемой программой операционной системе:

  • Передача параметров в регистрах ; например, в IBM 360 системная макрокоманда GETMAIN выделения области основной памяти ожидает, что ей в регистре номер 1 передана длина требуемой области памяти, а сама макрокоманда в результате своего выполнения записывает также в первый регистр адрес выделенной области основной памяти. Очевидно, что подобный интерфейс не вполне надежен – слишком много не очевидных умолчаний. А вдруг программист по ошибке запишет длину области памяти не в первый, а во второй регистр? Об этой ошибке никто ему не подскажет, и результат будет бессмысленным.
  • Запись параметров в таблицу, расположенную в памяти, и передача адреса этой таблицы в регистре. Этот способ немного лучше, но все равно он зависит от джентльменского соглашения между автором программы и авторами ОС относительно передачи через регистр, соблюдение которого фактически никем не проверяется.
  • Запись (проталкивание) параметров в стек программой и чтение (выталкивание) их из стека операционной системой. Такой способ гораздо лучше, так как он является стандартным способом передачи параметров при любом вызове процедуры или метода.

На рис. 6.1 изображен способ передачи параметров при системном вызове через таблицу, адрес которой передается в регистре.

Передача параметров системного вызова в таблице.

увеличить изображение
Рис. 6.1. Передача параметров системного вызова в таблице.

Различаются следующие основные виды системных вызовов:

  • Управление процессами ; например, в UNIX системный вызов fork создает новый параллельный процесс с новым пространством виртуальных адресов.
  • Управление файлами ; например, в UNIX системный вызов open (f, "rw") осуществляет открытие заданного файла для чтения и записи.
  • Управление устройствами ; например, системный вызов rewind осуществляет перемотку (позиционирование) магнитной ленты на начало.
  • Сопровождающая информация ; например, системный вызов env выдает в стандартный вывод информацию о значениях переменных окружения – переменных с символьными значениями, например, PATH, задающими окружение исполняемого процесса;
  • Коммуникации ; например, системный вызов CreateSocket создает новый сокет – системную структуру для обмена информацией клиента с сервером через TCP/IP – сеть.

Из примеров нетрудно видеть, что многие из этих возможностей ОС доступны также в виде выполняемых команд.

Исполнение программ в MS DOS

Как уже упоминалось, операционная система MS DOS была разработана в конце 1970-х гг. для 16-разрядных процессоров фирмы Intel (x86). Эта система, по сравнению с предшествующими ей по времени операционными системами для mainframe-компьютеров MULTICS, ОS IBM 360 и др., была значительно проще по возможностям, в частности, она была однозадачной. Это сознательное упрощение было вызвано жесткими ограничениями по памяти: объем основной памяти, предоставляемый задаче для выполнения, был равен всего 640 килобайт. Схема распределения памяти при выполнении программ в системе MS DOS изображена на рис. 6.2.

Выполнение программ в MS DOS.

Рис. 6.2. Выполнение программ в MS DOS.

Автор со своей командой в конце 1980-х – начале 1990-х гг. выполнял большие программные разработки для MS DOS в интегрированной среде Турбо Паскаль. Если размер программы или одного ее модуля превышал 640 K, приходилось организовывать оверлейную структуру (overlay) разбиение программы на группы взаимосвязанных модулей, таких, что различные группы одновременно в памяти не нужны, и поочередно загружать в выделенную для задачи область памяти необходимые группы модулей, к которым происходило обращение. Такой метод был вынужденным и типичным для многих программистов при разработке больших программ в среде MS DOS.

Исполнение нескольких программ в UNIX

Система UNIX, первоначально, как уже говорилось, разработанная в 1970 г. для миникомпьютеров PDP 10, была многозадачной (т .е. поддерживала режим мультипрограммирования) – несмотря на ограниченный объем памяти, система могла одновременно обрабатывать несколько заданий пользователей. Система поддерживала также и режим разделения времени, а впоследствии – и сетевое взаимодействие. В UNIX работали компиляторы с нескольких языков, в том числе – Паскаль. Использовались инструментальные средства, ставшие классическими, - утилита make – для сборки проектов, утилита lexгенератор лексических анализаторов в компиляторах; yaccгенератор синтаксических анализаторов в компиляторах; grepутилита текстового поиска и фильтрации с помощью регулярных выражений; awk – язык для обработки табличной информации; sedпотоковый редактор текстов. Была реализована, с одной стороны, развитая, с другой - унифицированная файловая система, лишенная надуманных сложностей IBM 360 и "Эльбруса". Схема размещения в памяти одновременно нескольких заданий пользователя и их обработки в режиме мультипрограммирования изображена на рис. 6.3.

Выполнение нескольких пользовательских программ в системе UNIX.

Рис. 6.3. Выполнение нескольких пользовательских программ в системе UNIX.

Коммуникационные модели

Одновременно обрабатываемые операционной системой пользовательские процессы должны иметь возможность коммуникации друг с другом. Такая коммуникация реализуется в операционных системах двумя способами – с помощью общей памяти и с помощью передачи сообщений. Обе схемы коммуникации процессов изображены на рис. 6.4.

Коммуникация процессов с помощью передачи сообщений и с помощью общей области памяти.

увеличить изображение
Рис. 6.4. Коммуникация процессов с помощью передачи сообщений и с помощью общей области памяти.

При первом способе, процесс A для передачи сообщения M процессу B выполняет системный вызов - например, send (B, M),- т.е. фактически передает это сообщение ядру ОС. Процесс B, в свою очередь, выполняет системный вызов для получения сообщения – например, M = receive (B) – т.е. фактически получает сообщение M от ядра ОС, подобно какому-либо ресурсу системы.

При втором способе, оба процесса взаимодействуют через общую область памяти, адрес которой известен им обоим. Такой способ может оказаться более быстрым, но необходимо учесть, что в данном случае процессы должны позаботиться о синхронизации (см. "Архитектура ОС. Управление процессами: Основные понятия. Семафоры и мониторы" ), так как общая область памяти – это общий ресурс, при обращении к которому может возникнуть race condition.

Системные программы – разновидность сервисов операционной системы

Системные программы обеспечивают удобное окружение для разработки и исполнения программ. Они подразделяются на программы:

Управления файлами ; например, файл-менеджеры типа Norton Commander и Far в MS DOS и Windows Commander – в Windows;

Получения информации о состоянии; например, Task Managerпрограмма в системе Windows для управления процессами и получения информации об их состоянии, загрузке процессора и используемой памяти. Вызывается комбинацией клавиш Ctrl – Alt – Del.

Создания и изменения файлов ; например, текстовые редакторы notepad и wordpad и программа paint для создания и редактирования рисунков, поставляемые с ОС Windows.

Поддержки языков программирования ; например, компиляторы с языков Си ( cc ) и Java ( javac ), поставляемые с большинством операционных систем;

Загрузки и исполнения программ ; например, ld загрузчик и редактор связей UNIX;

Коммуникации ; например, Windows Messenger – программа обмена мгновенными сообщениями, часть ОС Windows.

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

Структура системы MS DOS

После краткого обзора возможностей ОС проанализируем теперь особенности их структуры и архитектуры и некоторые полезные методы их разработки. Простейшим примером с этой точки зрения является MS DOS, разработанная по принципу: обеспечить максимум функциональности, используя минимум памяти (напомним об ограничении в 640 K на объем памяти для программы в MS-DOS). В MS DOS нет явного разделения на модули. Поэтому, хотя MS-DOS и имеет некоторую архитектуру, уровни функциональности и интерфейсы в ней не отделены четко друг от друга. Уровни абстракции модулей MS DOS изображены на рис. 6.5. Подробнее о концепции уровней абстракции, полезной для разработки ОС, которую мы пока используем интуитивно, - в конце данной лекции.

Уровни абстракции модулей MS DOS.

Рис. 6.5. Уровни абстракции модулей MS DOS.

В схеме можно выделить четыре уровня абстракции. Наиболее высокий – уровень пользовательской программы. Более низкий – резидентная системная программа, компонента ядра ОС. Еще ниже – уровень драйверов устройств, являющихся частью ядра MS DOS, и самый низкий – уровень драйверов, хранящихся в ROM BIOS (Read-Only Memory of the Basic Input-Output System) – постоянной памяти BIOS, системного модуля компьютера, которому передается управление непосредственно после его включения. ROM BIOS содержит наиболее важную часть драйверов, например, драйвер материнской платы (motherboard). ОС загружает и использует драйверы других устройств, например, принтера.

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >
Гульжан Мурсакимова
Гульжан Мурсакимова
Василий Четвертаков
Василий Четвертаков