Шпаргалка по "Системное програмное обеспечение"

Автор: Пользователь скрыл имя, 11 Марта 2012 в 17:48, шпаргалка

Краткое описание

Работа содержит ответы на 38 экзаменационных вопросов по дисциплине "Системное програмное обеспечение"

Оглавление

1. Виды программного обеспечения. Классификации.
2. Компоненты операционной системы.
3. Обзор операционных систем. Краткая история ОС UNIX.
4. Стандарт POSIX. Объекты стандартизации.
5. Ядро ОС. Назначение, функции.
6. Работа с файлами и директориями. Права пользователей.
7. Компиляторы. Назначение. Принципы работы.
8. Понятие процесса в UNIX. Контекст процесса.
9. Диаграмма состояний процесса.
10. Взаимодействующие процессы. Причины кооперации.
11. Параметры функции main() в языке C. Переменные среды окружения и аргументы командной строки.
12. Средства связи между процессами. Характеристики. Критерии надежности средств связи.
13. Способы адресации при использовании средств связи.
14. Буферизация.
15. Модели передачи данных по каналам связи. Организация взаимодействия процессов через pipe.
16. Модели передачи данных по каналам связи. Организация взаимодействия процессов через FIFO.
17. Организация работы с разделяемой памятью в UNIX.
18. Понятие нитей исполнения.
19. Преимущества и недостатки потокового обмена данными.
20. Дескрипторы System V IPC.
21. Синхронизация процессов и нитей исполнения.
22. Семафоры в UNIX.
23. Создание массива семафоров или доступ к уже существующему.
24. Сообщения, как средства связи и средства синхронизации.
25. Операции над очередями сообщений.
26. Мультиплексирование сообщений.
27. Организация файловой системы в UNIX.
28. Разделы носителя информации в UNIX.
29. Логическая структура файловой системы и типы файлов в UNIX.
30. Понятие индексного узла.
31. Организация директорий в UNIX.
32. Системные вызовы для работы с файлами.
33. Понятие о файлах, отображаемых в память.
34. Организация ввода-вывода в UNIX.
35. Файлы устройств.
36. Монтирование файловых систем.
37. Сигналы в UNIX.
38. Понятие о надежности сигналов.

Файлы: 1 файл

ответы СПО.doc

— 368.50 Кб (Скачать)

При успешном завершении системного вызова msgrcv() результат равен числу принятых байт; в случае неудачи возвращается -1. В качестве аргумента msqid должен выступать идентификатор очереди сообщений, предварительно полученный при помощи системного вызова msgget. Аргумент msgp является указателем на структуру в области памяти пользователя, содержащую тип принимаемого сообщения и его текст. Аргумент msgsz специфицирует длину принимаемого сообщения. Можно указать, что в случае, если значение данного аргумента меньше, чем длина сообщения в массиве, должна возникать ошибка (см. описание аргумента msgflg).

Аргумент msgtyp используется для выбора из очереди первого сообщения определенного типа. Если значение аргумента равно нулю, запрашивается первое сообщение в очереди, если больше нуля - первое сообщение типа msgtyp, а если меньше нуля - первое сообщение наименьшего из типов, которые не превосходят абсолютной величины аргумента msgtyp.

Аргумент msgflg позволяет специфицировать выполнение над сообщением ``операции с блокировкой''; для этого должен быть сброшен флаг IPC_NOWAIT (msgflg & IPC_NOWAIT = 0). Блокировка имеет место, если в очереди сообщений нет сообщения с запрашиваемым типом (msgtyp). Если флаг IPC_NOWAIT установлен и в очереди нет сообщения требуемого типа, системный вызов немедленно завершается неудачей. Аргумент msgflg может также специфицировать, что системный вызов должен заканчиваться неудачей, если размер сообщения в очереди больше значения msgsz; для этого в данном аргументе должен быть сброшен флаг MSG_NOERROR (msgflg & MSG_NOERROR = 0). Если флаг MSG_NOERROR установлен, сообщение обрезается до длины, указанной аргументом msgsz.

В приведенном ниже примере (рис. 19) используются следующие переменные:

sndbuf - Используется в качестве буфера, содержащего посылаемое сообщение; шаблон при описании этой переменной - структура данных msgbufl. Структура msgbufl является почти точной копией структуры msgbuf, описание которой находится во включаемом файле <sys/msg.h>. Единственное различие состоит в том, что длина символьного массива в msgbufl равна максимально допустимому размеру сообщения для данной конфигурации (MSGMAX), в то время как в msgbuf она устанавливается равной единице, чтобы отвечать требованиям компилятора. По этой причине нельзя использовать в пользовательской программе описание msgbuf непосредственно, то есть пользователь должен сам определять поля данной структуры.

rcvbuf - Используется в качестве буфера, содержащего принимаемое сообщение; шаблон при описании этой переменной - структура данных msgbufl.

i - Используется как счетчик символов при вводе с клавиатуры и занесении в массив, а также отслеживает длину сообщения при выполнении системного вызова msgsnd(); кроме того, используется как счетчик при выводе принятого сообщения после выполнения системного вызова msgrcv().

c - Содержит символ, возвращаемый функцией getchar().

flag - При выполнении системного вызова msgsnd() содержит значение, определяющее,

нужен ли флаг IPC_NOWAIT.

flags - При выполнении системного вызова msgrcv() содержит значение, определяющее

комбинацию флагов IPC_NOWAIT и MSG_NOERROR.

choice - Содержит признак, определяющий выбранную операцию - посылка или прием сообщения.

Структура данных msqid_ds снабжается указателем на нее, который инициализируется соответствующим образом; это позволяет следить за полями ассоциированной структуры данных, которые могут измениться в результате операций над сообщениями. При помощи системного вызова msgctl() (действие IPC_STAT) программа получает значения полей ассоциированной структуры данных и выводит их. Прежде всего программа запрашивает, какую операцию нужно выполнить - послать или принять сообщение. Должно быть введено число, соответствующее требуемой операции; это число заносится в переменную choice.

Если выбрана операция посылки сообщения, указатель msgp инициализируется адресом структуры данных sndbuf. После этого запрашивается идентификатор очереди сообщений, в которую должно быть послано сообщение; идентификатор заносится в переменную msqid. Затем должен быть введен тип сообщения; он заносится в поле mtype структуры данных, указываемой значением msgp.

После этого программа приглашает ввести с клавиатуры текст посылаемого сообщения и выполняет цикл, в котором символы читаются и заносятся в массив mtext структуры данных. Ввод продолжается до тех пор, пока не будет обнаружен признак конца файла; для функции getchar() таким признаком является символ CTRL+D, непосредственно следующий за символом возврата каретки. После того как признак конца обнаружен, определяется размер сообщения - он на единицу больше значения счетчика i, поскольку элементы массива, в который заносится сообщение, нумеруются с нуля. Следует помнить, что сообщение будет содержать заключительные символы и, следовательно, будет казаться, что сообщение на три символа короче, чем указывает аргумент msgsz.

Чтобы обеспечить пользователю обратную связь, текст сообщения, содержащийся в массиве mtext структуры sndbuf, немедленно выводится на экран.

Следующее, и последнее, действие заключается в определении, должен ли быть установлен флаг IPC_NOWAIT. Чтобы выяснить это, программа предлагает ввести 1, если флаг нужно установить, или любое другое число, если он не нужен. Введенное значение заносится в переменную flag. Если введена единица, аргумент msgflg полагается равным IPC_NOWAIT, в противном случае msgflg устанавливается равным нулю.

После этого выполняется системный вызов msgsnd(). Если вызов завершается неудачей, выводится сообщение об ошибке, а также ее код. Если вызов завершается успешно, печатается возвращенное им значение, которое должно быть равно нулю.

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

msg_qnum - Определяет общее число сообщений в очереди; в результате выполнения операции увеличивается на единицу.

msg_lspid - Содержит идентификатор процесса, который последним послал сообщение; полю присваивается соответствующий идентификатор.

msg_stime - Содержит время последней посылки сообщения, время измеряется в секундах, начиная с 00:00:00 1 января 1970 года (по Гринвичу).

После каждой успешной операции посылки сообщения значения этих полей выводятся на экран.

Если указано, что требуется принять сообщение, начальное значение указателя msgp устанавливается равным адресу структуры данных rcvbuf. Запрашивается код требуемой комбинации флагов, который заносится в переменную flags. Переменная msgflg устанавливается в сответствии с выбранной комбинацией. В заключение запрашивается, сколько байт нужно принять; указанное значение заносится в переменную msgsz. После этого выполняется системный вызов msgrcv().

Если вызов завершается неудачей, выводится сообщение об ошибке, а также ее код. Если вызов завершается успешно, программа сообщает об этом, а также выводит размер и текст сообщения. При каждом успешном приеме сообщения обновляются три поля ассоциированной структуры данных. Изменения можно описать следующим образом:

msg_qnum - Определяет общее число сообщений в очереди; в результате выполнения операции уменьшается на единицу.

msg_lrpid - Содержит идентификатор процесса, который последним получил сообщение; полю присваивается соответствующий идентификатор.

msg_rtime - Содержит время последнего получения сообщения, время измеряется в секундах, начиная с 00:00:00 1 января 1970 года (по Гринвичу).

 

 

 

26. Мультиплексирование сообщений

Как уже было сказано, прежде чем выполнить переброску данных на определенные для них интерфейсы, коммутатор должен понять, к какому потоку они относятся. Эта задача должна решаться независимо от того, поступает ли на вход коммутатора только один поток в "чистом" виде, или "смешанный" поток, который объединяет в себе несколько потоков. В последнем случае к задаче распознавания добавляется задача демультиплексирования.

Задача демультиплексирования (demultiplexing) — разделение суммарного агрегированного потока, поступающего на один интерфейс, на несколько составляющих потоков.

Как правило, операцию коммутации сопровождает также обратная операция — мультиплексирование.

Задача мультиплексирования (multiplexing) — образование из нескольких отдельных потоков общего агрегированного потока, который можно передавать по одному физическому каналу связи.

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

На рис. 5.4 показан фрагмент сети, состоящий из трех коммутаторов. Коммутатор 1 имеет пять сетевых интерфейсов. Рассмотрим, что происходит на интерфейсе 1. Сюда поступают данные с трех интерфейсов — int 3, int.4 и int.5. Все их надо передать в общий физический канал, то есть выполнить операцию мультиплексирования. Мультиплексирование представляет собой способ обеспечения доступности имеющихся физических каналов одновременно для нескольких сеансов связи между абонентами сети.

Рис. 5.4.  Операции мультиплексирования и демультиплексирования потоков при коммутации.

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

Технология мультиплексирования должна позволять получателю такого суммарного потока выполнять обратную операцию — разделение (демультиплексирование) данных на составляющие потоки. На интерфейсе int.3 коммутатор выполняет демультиплексирование потока на три составляющих подпотока. Один из них он передает на интерфейс int. 1, другой на int.2, а третий на int.5. А вот на интерфейсе int.2 нет необходимости выполнять мультиплексирование или демультиплексирование — этот интерфейс выделен одному потоку в монопольное пользование. В общем случае на каждом интерфейсе могут одновременно выполняться обе задачи — мультиплексирование и демультиплексирование.

Частный случай коммутатора (рис. 5.5а), у которого все входящие информационные потоки коммутируются на один выходной интерфейс, где мультиплексируются в один агрегированный поток и направляются в один физический канал, называется мультиплексором (multiplexer, mux). Коммутатор (рис.5.5б), который имеет один входной интерфейс и несколько выходных, называется демультиплексором.

Рис. 5.5.  Мультиплексор (а) и демультиплексор (б).

 

27. Организация файловой системы в UNIX

Организация файловой системы UNIX имеет древовидную структуру, вершина которой называется корнем, а сама структура называется файловым деревом. Каждая вершина в файловом дереве, за исключением листьев, является каталогом, листья же в свою очередь являются либо обычными файлами, либо файлами устройств.

Для того чтобы добраться до файла необходимо указать его имя, которому предшествует указание пути поиска, который описывает местоположение файла в файловом дереве. Путь поиска состоит из компонент, разделенных между собой наклонной чертой (``/''), которые представляют из себя последовательность вершин в файловом дереве, которые необходимо посетить, чтобы достигнуть требуемый файл. Путь поиска может начинаться в корне, в этом случае первая компонента пути записывается как ``/'' (например ``/usr/src/cmd/date.c''). Такой путь называется полным. Также путь может отсчитываться относительно текущей директории (например если текущей директорией является ``cmd'', то путь ``date.c'' соответствует пути ``/usr/src/cmd/date.c'').

В файловой системе UNIX также существует понятие прав доступа к файлу. Права доступа к файлу регулируются установкой специальных битов разрешения доступа, связанных с файлом. Устанавливая биты разрешения доступа, можно независимо управлять выдачей разрешений на чтение, запись и выполнение для трех категорий пользователей: владельца файла, группового пользователя и прочих. Пользователи также могут создавать файлы, если разрешен доступ к каталогу. Вновь созданные файлы становятся листьями в древовидной структуре файловой системы.

Устройства в системе UNIX трактуются так, как если бы они были файлами. Обращение программ к устройствам имеет тот же самый синтаксис, что и обращение к обычным файлам; семантика операций чтения и записи по отношению к устройствам в большой степени совпадает с семантикой операций чтения и записи обычных файлов. Способ защиты устройств совпадает со способом защиты обычных файлов: путем соответствующей установки битов разрешения доступа к ним. Поскольку имена устройств выглядят так же, как и имена обычных файлов, и поскольку над устройствами и над обычными файлами выполняются одни и те же операции, большинству программ нет необходимости различать внутри себя типы обрабатываемых файлов.

Итак, файловая система UNIX характеризуется:

иерархической структурой;

возможностью создания и удаления файлов;

защитой информации в файлах;

трактовкой периферийных устройств как файлов и так далее.

 

28. Разделы носителя информации (partitions) в UNIX

Физические носители информации – магнитные или оптические диски, ленты и т.д., использующиеся как физическая основа для хранения файлов, в операционных системах принято логически делить на разделы (partitions) или логические диски. Причем слово "делить" не следует понимать буквально, в некоторых системах несколько физических дисков могут быть объединены в один раздел. Об этом подробнее рассказывается в лекции 12 в разделе "Общая структура файловой системы".

Информация о работе Шпаргалка по "Системное програмное обеспечение"