Файл: А. В. Гордеев А. Ю. Молчанов системное программное обеспечение электронный вариант книги издательства Питер СанктПетербург Челябинск юургу каф. Автоматика и управление 2002 2 Предисловие Настоящий учебник.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.01.2024

Просмотров: 1064

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

413
Очереди сообщений
Для обеспечения возможности обмена сообщениями между процессами этот механизм поддерживается следующими системными вызовами:
♦ msgget для образования новой очереди сообщений или получения дескрип- тора существующей очереди;
♦ msgsnd для посылки сообщения (вернее, для его постановки в указанную очередь сообщений);
♦ msgrcv для приёма сообщения (вернее, для выборки сообщения из очереди сообщений);
♦ msgctl для выполнения ряда управляющих действий.
Ядро хранит сообщения в виде связного списка (очереди), а дескриптор оче- реди сообщений является индексом в массиве заголовков очередей сообщений.
Системный вызов msgget обладает стандартным для семейства «
get
» систем- ных вызовов синтаксисом:
msgqid = msgget (key, flag);
При выполнении системного вызова msgget ядро ОС UNIX либо создает но- вую очередь сообщений, помещая её заголовок в таблицу очередей сообщений и возвращая пользователю дескриптор вновь созданной очереди, либо находит эле- мент таблицы очередей сообщений, содержащий указанный ключ, и возвращает соответствующий дескриптор очереди.
Для посылки сообщения используется системный вызов msgsnd
:
msgsnd(msgqid, msg, count, flag);
где msg
– это указатель на структуру, содержащую определяемый пользовате- лем целочисленный тип сообщения и символьный массив – собственно сообщение;
count задает размер сообщения в байтах, a flag определяет действия ядра при выходе за пределы допустимых размеров внутренней буферной памяти.
Для приёма сообщения используется системный вызов msgrcv
:
count = msgrcv(id, msg, maxcount, type, flag);
Здесь msg
– это указатель на структуру данных в адресном пространстве поль- зователя, предназначенную для размещения принятого сообщения; maxcount задаёт размер области данных (массива байтов) в структуре msg
; значение type специфи-

414
цирует тип сообщения, которое желательно принять; значение параметра flag ука- зывает ядру, что следует предпринять, если в указанной очереди сообщений отсут- ствует сообщение с указанным типом. Возвращаемое значение системного вызова задаёт реальное число байтов, переданных пользователю.
Системный вызов
Msgctl(id, cmd, mstatbuf);
служит для опроса состояния описателя очереди сообщений, изменения его состояния (например, изменения прав доступа к очереди) и для уничтожения ука- занной очереди сообщений.
Разделяемая память
Для работы с разделяемой памятью используются четыре системных вызова:
♦ shmget
– создаёт новый сегмент разделяемой памяти или находит сущест- вующий сегмент с тем же ключом;
♦ shmat
– подключает сегмент с указанным дескриптором к виртуальной па- мяти обращающегося процесса;
♦ shmdt
– отключает от виртуальной памяти ранее подключенный к ней сег- мент с указанным виртуальным адресом начала;
♦ shmctl
– служит для управления разнообразными параметрами, связанными с существующим сегментом.
После того как сегмент разделяемой памяти подключен к виртуальной памяти процесса, этот процесс может обращаться к соответствующим элементам памяти с использованием обычных машинных команд чтения и записи, не прибегая к ис- пользованию дополнительных системных вызовов.
Синтаксис системного вызова shmget выглядит следующим образом:
shmid = shmget (key, size, flag);
Параметр size определяет желаемый размер сегмента в байтах. Далее работа происходит по общим правилам. Если в таблице разделяемой памяти находится элемент, содержащий заданный ключ, и права доступа не противоречат текущим характеристикам обращающегося процесса, то значением системного вызова явля- ется дескриптор существующего сегмента (и обратившийся процесс так и не узнает


415
реального размера сегмента, хотя впоследствии его все-таки можно узнать с помо- щью системного вызова shmctl
). В противном случае создаётся новый сегмент с размером не меньше установленного в системе минимального размера сегмента разделяемой памяти и не больше установленного максимального размера. Созда- ние сегмента не означает немедленного выделения под него основной памяти. Это действие откладывается до выполнения первого системного вызова подключения сегмента к виртуальной памяти некоторого процесса. Аналогично, при выполнении последнего системного вызова отключения сегмента от виртуальной памяти соот- ветствующая основная память освобождается.
Подключение сегмента к виртуальной памяти выполняется путем обращения к системному вызову shmat
:
virtaddr = shmat(id, addr, flags);
Здесь id
– это ранее полученный дескриптор сегмента, а addr
– желаемый про- цессом виртуальный адрес, который должен соответствовать началу сегмента в виртуальной памяти. Значением системного вызова является реальный виртуаль- ный адрес начала сегмента (его значение не обязательно совпадает со значением прямого параметра addr
). Если значением addr является нуль, ядро выбирает подхо- дящий виртуальный адрес начала сегмента.
Для отключения сегмента от виртуальной памяти используется системный вы- зов shmdt
:
shmdt(addr);
где addr
– это виртуальный адрес начала сегмента в виртуальной памяти, ранее полученный от системного вызова shmat
. При этом система гарантирует (на основе использования таблицы сегментов процесса), что указанный виртуальный адрес действительно является адресом начала разделяемого сегмента в виртуальной па- мяти данного процесса.
Для управления памятью служит системный вызов shmctl
:
shmctl(id, cmd, shsstatbuf);
Он содержит прямой параметр cmd
, идентифицирующий требуемое конкрет- ное действие, и предназначен для выполнения различных функций. Наиболее важ- ной является функция уничтожения сегмента разделяемой памяти, которое произ-

416
водится следующим образом. Если к моменту выполнения системного вызова ни один процесс не подключил сегмент к своей виртуальной памяти, то основная па- мять, занимаемая сегментом, освобождается, а соответствующий элемент таблицы разделяемых сегментов объявляется свободным. В противном случае в элементе таблицы сегментов выставляется флаг, запрещающий выполнение системного вы- зова shmget по отношению к этому сегменту, но процессам, успевшим получить дескриптор сегмента, по-прежнему разрешается подключать сегмент к своей вир- туальной памяти. При выполнении последнего системного вызова отключения сегмента от виртуальной памяти операция уничтожения сегмента завершается.
Вызовы удаленных процедур (RPC)
Во многих случаях взаимодействие процессов носит характер «клиент–сер- вер». Один из процессов («клиент») запрашивает у другого процесса («сервера»)
некоторую услугу (сервис) и не продолжает свое выполнение до тех пор, пока эта услуга не будет выполнена (и пока процесс-клиент не получит соответствующие результаты). Видно, что семантически такой режим взаимодействия эквивалентен вызову процедуры. Отсюда и соответствующее название. Кроме этого, ОС UNIX
по своей идеологии идеально подходит для того, чтобы быть сетевой операцион- ной системой. И на её основе можно создавать распределённые системы и органи- зовывать распределённые вычисления. Свойства переносимости позволяют созда- вать «операционно однородные» сети, включающие разнородные компьютеры.
Однако остаётся проблема разного представления данных в компьютерах разной архитектуры. Поэтому одной из основных идей RPC является автоматическое обеспечение преобразования форматов данных при взаимодействии процессов,
выполняющихся на разнородных компьютерах.
Реализация технологии вызовов удаленных процедур (remote procedure call –
RPC) достаточно сложна, поскольку этот механизм должен обеспечить работу взаимодействующих процессов, которые находятся на разных компьютерах. Если в случае обращения к процедуре, расположенной на том же компьютере, процесс общается с ней через стек или общие области памяти, то в случае удаленного вызо- ва передача параметров процедуре превращается в передачу запроса по сети. Соот-


417
ветственно, и получение результата так же осуществляется посредством использо- вания сетевых механизмов.
Удаленный вызов процедур включает следующие шаги [70]:
♦ процесс-клиент осуществляет локальный вызов процедуры, которую назы- вают «заглушкой» (stub). Задача этого модуля-заглушки – принять аргументы, пре- образовать их в стандартную форму и сформировать сетевой запрос. Упаковка ар- гументов и создание сетевого запроса называется сборкой (marshalling);
♦ сетевой запрос пересылается на удалённую систему, где соответствующий модуль ожидает такой запрос и при его получении извлекает параметры вызова процедуры (unmarshalling), а затем передаёт их серверу удаленной процедуры. По- сле выполнения осуществляется обратная передача.
1   ...   29   30   31   32   33   34   35   36   37

Операционная система Linux
Linux – это современная POSIX-совместимая и UNIX-подобная операционная система для персональных компьютеров и рабочих станций.
Как известно, Linux – это свободно распространяемая версия UNIX, которая первоначально была разработана Линусом Торвальдсом (Linus Torvalds) (torvalds@
kruuna.helsinki.fi) в университете Хельсинки (Финляндия). Все компоненты систе- мы, включая исходные тексты, распространяются с лицензией на свободное копи- рование и установку для неограниченного числа пользователей.
Linux был создан с помощью многих UNIX-программистов и энтузиастов из
Интернета. К данному проекту добровольно подключились те, кто имеет достаточ- но навыков и способностей развивать систему. Большинство программ Linux раз- работано в рамках проекта GNU из Free Software Foundation в Кэмбридже, Масса- чусетс. Но в него внесли лепту также программисты всего мира.
Изначально Linux создавался как «самодельная» UNIX-подобная реализация для ПК типа IBM PC с процессором i80386. Однако Linux стал настолько популя- рен и его нынче поддерживает такое большое число компаний, что в настоящее время имеется реализация этой ОС практически для всех типов процессоров и компьютеров на их основе. На базе ОС Linux создаются и встроенные системы, и

418
суперкомпьютеры. Система поддерживает кластеризацию и большинство совре- менных интерфейсов и технологий.
Linux поддерживает большинство свойств, присущих другим реализациям
UNIX, плюс ряд тех, которых больше нигде нет. Поэтому этот раздел можно счи- тать лишь поверхностным обзором характеристик ядра Linux.
Linux – это полноценная многозадачная многопользовательская операционная система (точно так же, как и все другие версии UNIX). Это означает, что одновре- менно много пользователей могут работать на одной машине, одновременно вы- полняя много программ. Linux достаточно хорошо совместим с рядом стандартов для UNIX (насколько можно говорить о стандартизации UNIX) на уровне исход- ных текстов, включая IEEE POSIX.l, System V и BSD. Такая совместимость учиты- валась при его создании. Большинство свободно распространяемых по сети Интер- нет программ для UNIX может быть откомпилировано для LINUX практически без особых изменений. Кроме того, все исходные тексты для Linux, включая ядро,
драйверы устройств, библиотеки, пользовательские программы и инструменталь- ные средства распространяются свободно. Другие специфические внутренние чер- ты Linux включают контроль работ по стандарту POSIX (используемый оболочка- ми, такими как csh и bash
), псевдотерминалы (
pty
), поддержку национальных и стандартных клавиатур динамически загружаемыми драйверами клавиатур.
Linux поддерживает различные типы файловых систем для хранения данных.
Некоторые файловые системы, такие как файловая система ext2fs, были созданы специально для Linux. Поддерживаются также другие типы файловых систем, на- пример Minix-1 и Xenix. Реализована также система управления файлами на основе
FAT, позволяющая непосредственно обращаться к файлам, находящимся в разде- лах с этой файловой системой. Поддерживается и файловая система ISO 9660 CD–
ROM для работы с дисками CD-ROM. Имеются системы управления файлами и на томах с HPFS и NTFS, правда, они работают только на чтение файлов. Созданы ва- рианты системы управления файлами и для доступа к FAT32.
Linux, как и все UNIX-системы, обеспечивает полный набор протоколов стека
TCP/IP для сетевой работы. Это включает драйверы устройств для многих попу-


419
лярных сетевых адаптеров технологии Ethernet, протоколы SLIP (serial line Internet protocol, обеспечивающий доступ по TCP/IP при последовательном соединении),
PLIP (parallel line Internet protocol), PPP (point-to-point protocol), NFS (network file system) и т. д. Поддерживается весь спектр клиентов и услуг TCP/IP, таких как
FTP, telnet, NNTP и SMTP. Очень часто на компьютерах, работающих под управ- лением Linux, реализуют DNS-сервер, WWW-серверы (Apache), файерволы для защиты локальных сетей при работе в Интернете, почтовые серверы, сервер DHCP.
Ядро Linux сразу было создано с учётом возможностей защищённого режима процессоров Intel 80386 и 80486. В частности, Linux использует парадигму описа- ния памяти в защищённом режиме и другие новые свойства процессоров. В отли- чие от старых версий UNIX, в которых задачи выгружались во внешнюю память на магнитных дисках целиком, ядро Linux поддерживает загрузку только нужных страниц. То есть с диска в память загружаются те сегменты программы, которые действительно используются. Возможно использование одной страницы, физиче- ски один раз загруженной в память, несколькими выполняемыми программами, то есть реентерабельность кода, присущая всем UNIX-системам, сохранилась. В на- стоящее время имеются ядра для этой системы, оптимизированные для работы с процессорами Intel и AMD последнего поколения, хотя основные архитектурные особенности защищенного режима работы изменились мало.
Ядро также поддерживает универсальный пул памяти для пользовательских программ и дискового кэша. При этом для кэширования может использоваться вся свободная память, и наоборот, кэш уменьшается при работе больших программ.
Этот механизм агрессивного кэширования позволяет увеличить производитель- ность системы.
Выполняемые программы используют динамически связываемые библиотеки,
то есть выполняемые программы могут совместно использовать библиотечную программу, представленную одним физическим файлом на диске. Это позволяет выполняемым файлам занимать меньше места на диске, особенно тем, которые многократно используют библиотечные функции. Есть также статические связы- ваемые библиотеки для тех, кто желает пользоваться отладкой на уровне объект-

420
ных кодов или иметь «полные» выполняемые программы, которые не нуждаются в разделяемых библиотеках. В Linux разделяемые библиотеки динамически связы- ваются во время выполнения, позволяя программисту заменять библиотечные мо- дули своими собственными.
Семейство операционных систем OS/2 Warp
компании IBM
История появления, расцвета и практического ухода со сцены операционных систем под общим названием OS/2 и странна, и поучительна. Будучи одной из са- мых лучших ОС для ПК по очень большому числу параметров и появившись раньше своих основных конкурентных систем, она тем не менее не смогла стать самой распространенной, хотя могла бы, и с легкостью. Основная причина тому –
законы бизнеса (умение рекламировать свой товар, всячески поддерживать его продвижение, вкладывать деньги в завоевание рынка), а не качество самой ОС. Во–
первых, компания IBM не сочла необходимым продвигать свою ОС на рынок про- граммного обеспечения, ориентированного на конечного пользователя, а решила продолжить свою практику работы исключительно с корпоративными клиентами.
А этот рынок (корпоративного ПО) оказался существенно уже для ПК, чем рынок
ПО для конечного пользователя, ибо компьютеры типа IBM PC прежде всего яв- ляются персональными. Во–вторых, основные доходы компания IBM получала не от продажи системного ПО для ПК, а за счёт продаж дорогостоящих серверов и другого оборудования. Доходы от продажи своей ОС не представлялись руково- дству компании IBM значимыми. Для успеха на рынке ОС для ПК необходимо бы- ло обеспечить всестороннюю поддержку своей системы соответствующей учебной литературой, широкой рекламой, заинтересовать разработчиков программного обеспечения. Увы, этого не произошло, и сегодня уже практически мало кто знает о системах OS/2. В то же время следует отметить, что те, кто в свое время освоил эту систему и создал для неё соответствующее ПО, до сих пор не переходят на ны- не чрезвычайно популярные ОС Windows NT, поскольку последние требуют суще- ственно больше системных ресурсов и при этом функционируют медленнее.