Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

СОДЕРЖАНИЕ

2. ОПЕРАЦИОННАЯ СИСТЕМА Linux. 2

2.1. Общая структура. 2

2.2. Первый запуск и настройка. Интерфейс с пользователем. 4

2.3. Файлы и файловая система. 6

2.4. Управление процессами. 19

2.5. Потоковое межпроцессное взаимодействие. 24

2.6. Организация работы с разделяемой памятью.. 29

2.7. Использование нити исполнения (thread) 39

2.8. Использование семафоров для синхронизации процессов. 43

2.9. Сообщения как средства связи и средства синхронизации процессов. 49

2.10. Сигналы.. 60

2. ОПЕРАЦИОННАЯ СИСТЕМА Linux

2.1. Общая структура

Операционная система Linux (как и большинство систем семейства Unix) в соответствии с режимом работы процессора может работать в режиме ядра и режиме пользователя.

Ядро непосредственно взаимодействует с аппаратной частью компьютера, изолируя прикладные программы от особенностей ее архитектуры. Ядро имеет набор услуг, предоставляемых прикладным программам. К услугам ядра относятся операции ввода/вывода (открытия, чтения, записи и управления файлами), создания и управления процессами, их синхронизации и межпроцессного взаимодействия. Все приложения запрашивают услуги ядра посредством системных вызовов.

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

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

НЕ нашли? Не то? Что вы ищете?

Ядро состоит из трех основных подсистем:

1.  Файловая подсистема

2.  Подсистема управления процессами и памятью

3.  Подсистема ввода/вывода

Файловая подсистема обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисковых накопителях, и к периферийным устройствам. Одни и те же функции ореn(2), read(2), могут использоваться как при чтении или записи данных на диск, так и при выводе текста на принтер или терминал. Она контролирует права доступа к файлу, выполняет операции размещения и удаления файла, а также выполняет запись/чтение данных файла. Поскольку большинство прикладных функций выполняется через интерфейс файловой системы (в том числе и доступ к периферийным устройствам), права доступа к файлам определяют привилегии пользователя в системе. Файловая подсистема обеспечивает перенаправление запросов, адресованных периферийным устройствам, соответствующим модулям подсистемы ввода/вывода.

Подсистема управления процессами. Запущенная на выполнение программа порождает в системе один или более процессов (или задач). Подсистема управления процессами контролирует:

1.  Создание и удаление процессов

2.  Распределение системных ресурсов (памяти, вычислительных ресурсов) между процессами

3.  Синхронизацию процессов

4.  Межпроцессное взаимодействие

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

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

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

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

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

2.2. Первый запуск и настройка. Интерфейс с пользователем.

В качестве «учебной» системы был выбран Linux PuppyRus Jeans, который может быть установлен либо на компьютере, имеющем малые аппаратные ресурсы, либо загружать систему в оперативную память, не боясь «испортить» имеющуюся на компьютере операционную систему.

Минимальные требования к оборудованию:

1)  Процессор: Пентиум-2 233МГц.

2)  Оперативная память: 64 Мб, при наличии жесткого диска или сходного по функциональности устройства для полной (full) инсталляции, или 128 Мб для запуска с компакт-диска, USB-флэш для экономной (frufal) инсталляции. Обязательное наличие SWAP-раздела виртуальной памяти (при памяти менее 256 Мб).

3)  Носитель информации размером от 128 Мб – любой из списка: CD-ROM, жесткий диск – встроенный или подключаемый через USB, USB-falsh накопитель.

Замечание: проведена проба запуска операционной системе на ноутбуке с параметрами: процессор - Пентиум-2 233 МГц, оперативная память – 98 Мб. Система работоспособна, но есть частое обращение к CD-диску.

Порядок выполнения:

1.  Для выполнения задания необходимо получить у преподавателя образ диска операционной системы в формате ISO и программу для записи CD дисков, например, SCDWriter. exe (работает в ОС Windows). Следуя инструкциям программы записи CD дисков, записать образ на CD диск.

2.  Уточнить параметры видеосистемы того компьютера, на котором будет установлена система, используя имеющуюся на этом компьютере операционную систему.

3.  Установить в BIOS первым устройством загрузки CD диск.

4.  После выполнения начальной загрузки будет предложены варианты загрузки (PuppyRus по умолчанию, PuppyRus prix=ram). Выбор этих вариантов при самой первой загрузке безразличен.

5.  Проведите настройку видеосервера.

6.  В случае отсутствия приемлемого режима работы, попробуйте другие режимы, используя сообщения и рекомендации разработчиков. Так как загрузка системы проведена в оперативную память, то нет ничего страшного в полной перезагрузке, используя кнопку «Reset».

7.  Рабочий стол после загрузки будет иметь вид, похожий на рабочий стол Windows. При работе учтите, что выбор элемента происходит при наведении указателя мыши на этот элемент, а для активизации элемента достаточно одного нажатия левой кнопки мыши.

Замечание: если будет выдано сообщение о том, что витрина не использовалась, то необходимо закрыть это сообщение, а в меню выбрать:

Выключение>Перезагрузка X-сервера.

8.  Если на вашем компьютере есть возможность загрузки с flash-диска, то создайте загрузочный flash диск (диск не должен иметь файловую систему NTFS, а также на нем должен быть только один раздел). Для этого в меню выберите:

Настройки>Универсальный инсталлятор PuppyRus.

Далее следуйте инструкциям разработчиков.

9.  Ознакомьтесь по руководству пользователя с особенностями установки операционной системы на жесткий диск.

10.  Ознакомьтесь с прикладным программами, иконки которых расположены на рабочем столе (Текст, Таблицы, Paint, Видео, Аудио, Архив).

11.  Рассмотрите файловые менеджеры Midnight Commander и Rox-Filer (вызов из меню). Менеджеры исходно отображают «домашний» каталог пользователя, которым будет директорий «root».

12.  Установка компилятора с языка Си. Использование SFS – файлов.

Компилятор с языка Си изначально отсутствует в дистрибутиве PuppyRus Jeans. Он находится в SFS-модуле (devx_301.sfs). Инструкция по подключению модуля подробно описана в руководстве пользователя.

Замечание: для подключения модуля «на один раз», то есть до перезагрузки системы, можно в менеджере файлов ROX-Filer кликнуть правой кнопкой мыши на иконке этого файла, и в всплывающем меню выбрать команду «Подключить модуль SFS».

13.  Ознакомьтесь с возможностями интегрированной среды разработки Geany.

Запуск Geany можно выполнить из меню (Текстовый редактор>Geany). Для работы с языком Си можно создать файл из шаблона. Для успешной компиляции необходимо сохранить файл под другим именем, отличным от «Без имени». Для компиляции, сборки и выполнения программы используйте меню «Сборка».

14.  Проведите настройку сети, выбрав на рабочем столе иконку «Мастера» и, далее, в окне «Настройка Puppy» – «Соединение с интернет через сетевой интерфейс…», а остальное в соответствии с подсказками, предлагаемыми разработчиками.

Отчет должен содержать:

1.  Перечень файлов загрузочного диска с указанием формата и назначения каждого файла.

2.  Параметры системы личного компьютера и параметры видеосервера, при которых была получена работоспособная система с графическим интерфейсом. Для сравнения приведите параметры видеосистемы данного компьютера в системе Windows.

Контрольные вопросы:

1.  Каково назначение файлов загрузочного диска?

2.  Какие есть отличия графического интерфейса от интерфейса Windows?

3.  Какие действия необходимо выполнить для установки системы на жесткий диск?

4.  Какое есть сходство и различия файловых менеджеров Linux с аналогичными программами Windows?

2.3. Файлы и файловая система.

В Linux файлы организованы в виде древовидной структуры, называемой файловой системой. Каждый файл имеет имя, определяющее его расположение в дереве файловой системы. Корнем этого дерева является корневой каталог (root directory), имеющий имя «/».Имена всех остальных файлов содержат путь – список каталогов (ветвей), которые необходимо пройти, чтобы достичь файла.

В корневом каталоге Linux-системы обычно находятся только подкаталоги со стандартными именами. Более того, не только имена, но и тип данных, которые могут попасть в тот или иной каталог, также регламентированы этим стандартом. Данный стандарт называется Filesystem Hierarchy Standard ("стандартная структура файловых систем").

Краткое описание того, что находится в каждом из подкаталогов корневого каталога:

/bin Название этого каталога происходит от слова "binaries" ("двоичные", "исполняемые"). В этом каталоге находятся исполняемые файлы самых необходимых утилит. Сюда попадают такие программы, которые могут понадобиться системному администратору или другим пользователям для устранения неполадок в системе или при восстановлении после сбоя.

/boot "Boot" - загрузка системы. В этом каталоге находятся файлы, необходимые для самого первого этапа - загрузки ядра - и, обычно, само ядро. Пользователю практически никогда не требуется непосредственно работать с этими файлами.

/dev В этом каталоге находятся все имеющиеся в системе файлы-дырки: файлы особого типа, предназначенные для обращения к различным системным ресурсам и устройствам (англ. "devices" - "устройства", отсюда и сокращенное название каталога). Например, файлы /dev/ttyN соответствуют виртуальным консолям, где N - номер виртуальной консоли. Данные, введенные пользователем на первой виртуальной консоли, система считывает из файла /dev/tty1; в этот же файл записываются данные, которые нужно вывести пользователю на эту консоль. В файлах-дырках в действительности не хранятся никакие данные, при их помощи данные передаются.

/etc Каталог для системных конфигурационных файлов. Здесь хранится информация о специфических настройках данной системы: информация о зарегистрированных пользователях, доступных ресурсах, настройках различных программ.

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

/lib Название этого каталога - сокращение от "libraries" (англ. "библиотеки"). Библиотеки - это собрания стандартных функций, необходимых многим программам: операций ввода/вывода, рисования элементов графического интерфейса и т. д. Чтобы не включать эти функции в текст каждой программы, используются стандартные функции библиотек - это значительно экономит место на диске и упрощает написание программ. В этом каталоге содержатся библиотеки, необходимые для работы наиболее важных системных утилит (размещенных в /bin и /sbin).

/mnt Каталог для монтирования (от англ. "mount") - временного подключения файловых систем, например, на съемных носителях.

/proc В этом каталоге все файлы "виртуальные" - они располагаются не на диске, а в оперативной памяти. В этих файлах содержится информация о программах (процессах), выполняемых в данный момент в системе.

/root Домашний каталог администратора системы - пользователя root. Смысл размещать его отдельно от домашних каталогов остальных пользователей состоит в том, что /home может располагаться на отдельном устройстве, которое не всегда доступно (например, на сетевом диске), а домашний каталог root должен присутствовать в любой ситуации.

/sbin Каталог для важнейших системных утилит (название каталога - сокращение от "system binaries"): в дополнение к утилитам /bin здесь находятся программы, необходимые для загрузки, резервного копирования, восстановления системы. Полномочия на исполнение этих программ есть только у системного администратора.

/tmp Этот каталог предназначен для временных файлов: в таких файлах программы хранят необходимые для работы промежуточные данные. После завершения работы программы временные файлы теряют смысл и должны быть удалены. Обычно каталог /tmp очищается при каждой загрузке системы.

/usr Здесь можно найти такие же подкаталоги bin, etc, lib, sbin, как и в корневом каталоге. Однако в корневой каталог попадают только утилиты, необходимые для загрузки и восстановления системы в аварийной ситуации - все остальные программы и данные располагаются в подкаталогах /usr. Прикладных программ в современных системах обычно установлено очень много, поэтому этот раздел файловой системы может быть очень большим.

/var Название этого каталога - сокращение от "variable" ("переменные" данные). Здесь размещаются те данные, которые создаются в процессе работы разными программами и предназначены для передачи другим программам и системам (очереди печати, электронной почты и др.) или для сведения системного администратора (системные журналы, содержащие протоколы работы системы). В отличие от каталога /tmp сюда попадают те данные, которые могут понадобиться после того, как создавшая их программа завершила работу.

Стандарт FHS регламентирует не только перечисленные каталоги, но и их подкаталоги, а иногда даже приводит список конкретных файлов, которые должны присутствовать в определенных каталогах. Этот стандарт последовательно соблюдается во всех Linux-системах, хотя и не без горячих споров между разработчиками при выходе каждой новой его версии.

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

В Linux все доступное пользователям файловое пространство объединено в единое дерево каталогов, корнем которого является каталог «/».Таким образом, полное имя любого файла начинается с «/» и не содержит идентификатора устройства, на котором он фактически хранится. Имя файла является атрибутом файловой системы, а не набора некоторых данных на диске, который не имеет имени как такового. Каждый файл имеет связанные с ним метаданные (хранящиеся в индексных дескрипторах – inode), содержащие все характеристики файла и позволяющие операционной системе выполнять операции, заказанные прикладной задачей: открыть файл, прочитать или записать данные, создать или удалить файл. В частности, метаданные содержат указатели на дисковые блоки хранения данных файла. Имя файла в файловой системе является указателем на его метаданные, в то время как метаданные не содержат указателя на имя файла. Такая архитектура позволяет одному файлу иметь несколько имен в файловой системе.

Имена жестко связаны с метаданными и, соответственно, с данными файла, в то время как сам файл существует независимо от того, как его называют в файловой системе. Такая связь имени файла с его данными называется жесткой связью. По определению жесткие связи указывают на один и тот же индексный дескриптор inode. Жесткая связь является естественной формой связи имени файла с его метаданными и не принадлежит к особому типу файла.

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

Если к файловой системе Linux монтируется файловая система, в которой структуры файла и его метаданных существенно отличаются от Linux, то используется виртуальная файловая система, основанная на представлении метаданных файла в виде, сходном с традиционной семантикой Linux. Интерфейсом работы с файлами является vnode (от virtual inode — виртуальный индексный дескриптор). Метаданные всех активных файлов (файлов, на которые ссылаются один или более процессов) представлены в памяти в виде in-core inode, в качестве которых в виртуальной файловой системе выступают vnode. Структура данных vnode одинакова для всех файлов, независимо от типа реальной файловой системы, где фактически располагается файл. Данные vnode содержат информацию, необходимую для работы виртуальной файловой системы, а также неизменные характеристики файла, например, такие как тип файла.

Linux поддерживает три типа прав доступа для владельца, группы и прочих пользователей: на чтение (read, обозначается символом r), запись (write, обозначается символом w) и на выполнение (execute, обозначается символом х). Права доступа могут быть изменены только владельцем файла или администратором системы. Для этого используется команда chmod (рассмотрите самостоятельно).

Замечание: проверку результата работы команды chmod можно провести только в режиме «обычного» пользователя, так как для администратора атрибуты доступа не проверяются.

К дополнительным атрибутам относятся: t – позволяет пользователю удалять только файлы, которыми он владеет или имеет права на запись (используется для каталогов), s – установить права доступа запущенного процесса. К сожалению, так как система PuppyRus Jeans исходно предназначена для работы только в режиме администратора, наблюдать особенности этих атрибутов невозможно.

Задание: ознакомьтесь по рекомендуемым литературным источникам с организацией файловой системы операционной системы Linux. Рассмотрите следующие вопросы:

1) Общая структура файловой системы.

2) Типы файлов.

3) Команды для работы с файлами и каталогами. Необходимо рассмотреть следующие команды (у некоторых команд, чтобы не было ошибок, в скобках указано полное имя, от которого получилось сокращенное): имя текущего каталога – pwd, список файлов в каталоге – ls (list), изменить текущий каталог – cd, установить связи – ln (link), копировать – cp, удалить – rm (remove), распечатать файл – cat.

Порядок выполнения работы:

1.  Изучение структуры файловой системы и команд pwd, cd и ls.

Используя менеджеры файлов и эмулятор терминала, рассмотрите структуру файловой системы. Отметьте наличие или отсутствие «стандартных» для Linux-систем каталогов (например, bin, etc, usr и т. д.), а также отметьте способы обозначения каталогов, файлов ссылок, как в менеджерах файлов, так и командной строке терминала. В эмуляторе терминала для получения справки по команде просмотра содержимого директория необходимо использовать ключ --help (обратите внимание на использование двух знаков «минус»), например,

ls --help

2.  Изучение файлов типа связь и команд для работы с файлами.

Пример использования ссылочного типа файлов приведен в режиме терминала, чтобы попутно рассмотреть команды создания нового каталога mkdir и, особенно, команды cat, дающей много возможностей по обработке текстового файла. Все действия при работе с командами записаны очень подробно, чтобы обратить внимание на особенности работы в терминальном режиме.

Для удобства рассмотрения ссылочных файлов создайте в домашнем каталоге новый подкаталог, например, с именем new и перейдите в него.

mkdir new

cd new

Создайте два текстовых файла (например, с именами txt1, txt2), используя команду cat.

cat >txt1

первый файл

Ctrl+z

Здесь устройством ввода служит клавиатура, вывод перенаправлен в файл с именем txt1. Как и для большинства команд подобного рода, стандартным устройством ввода будет служить клавиатура, а стандартным устройством вывода – монитор. Знак «>» указывает, что вывод перенаправлен в файл с именем txt1. При вводе с клавиатуры можно построчно вводить текст. Каждая строка завершается при нажатии клавиши «Enter». Завершение ввода текста – «Ctrl+z». Таким образом, в файле txt1 будет содержаться текст «первый файл». Аналогично можно создать файл txt2.

Просмотрите содержимое каталога командой ls, используя два ключа: i – для вывода inode и l – для использования широкого формата.

ls –i –l

2655 - rw-r--r-- 1 root root8:20 txt1

2656 - rw-r--r-- 1 root root8:21 txt2

Сделайте жесткую ссылку new1 на файл txt1, используя команду ln, и опять просмотрите содержимое каталога.

ln txt1 new1

ls –i –l

2655 - rw-r--r-- 2 root root8:20 txt1

2656 - rw-r--r-- 1 root root8:21 txt2

2655 - rw-r--r-- 2 root root8:20 new1

Обратите внимание на то, что у файла new1 тот же inode (2655) и совпадает время создания. В третьей колонке число 2 показывает количество ссылок на файл.

Измените содержимое файла new1 и убедитесь, что файлы txt1 и new1 – это один и тот же файл на диске, только у него два имени. Также проверьте, что жесткая ссылка не нарушается при перемещении файлов по каталогам, а также то, что нельзя делать жесткие ссылки на каталоги.

Символьную ссылку можно делать как на файлы, так и на каталоги. Например, можно сделать ссылку на файл txt2.

ln - s 2 new2

Результатом будет новый файл со своим inode и временем создания. Количество ссылок на файл txt2 не изменится. Размер файла соответствует длине имени файла, на который делается ссылка. Обращение к файлу new2 будет переадресовано на файл txt2.

2887 lrwxrwxrwx 1 root root 1 08:23 new2 -> 2

Можно даже сделать символьную связь из каталога на сам этот каталог. Рассмотрите, что произойдет при многократном переходе в этот каталог.

ln - s ../new newdir

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

3.  Монтирование файловых систем.

Видимое пользователю дерево каталогов образуется по следующей схеме. Одну из доступных файловых систем ядро считает корневой. Эта файловая система монтируется на корневой каталог «/», в результате чего ее содержимое становится доступно в виде дерева каталогов, растущего непосредственно из корневого. Любой из каталогов текущего дерева может служить точкой монтирования другой файловой системы. После выполнения команды вида mount файл-дырка каталог, например,

mount /dev/hda5 /usr

содержимое файловой системы, лежащей на разделе, которому соответствует файл-дырка, становится доступно в виде дерева, растущего из каталога. Если до монтирования, в /usr были какие-то файлы и подкаталоги, принадлежащие корневой файловой системе, они становятся недоступны до выполнения соответствующей команды umount. Все устройства, файловые системы которых могут быть смонтированы, в виде файла-дырки можно увидеть в каталоге /dev, например, для устройства CD-ROM – /dev/cdrom. Точки монтирования, то есть каталоги, в которые будут монтироваться файловые системы, расположены в каталоге /mnt, например, /mnt/cdrom. Список всех файловых систем, которые монтируются по ходу начальной загрузки, обычно лежит в файле /etc/fstab. Обратите внимание в этом файле на тип каждой из файловых систем. Например, содержимое файла fstab может выглядеть так.

none /proc proc defaults 0 0

none /sys sysfs defaults 0 0

none /dev/pts devpts gid=2,mode=

/dev/fd0 /mnt/floppy auto noauto, rw 0 0

/dev/cdrom /mnt/cdrom iso9660 noauto, ro, utf8 0 0

/dev/hda1 /mnt/hda1 vfat shortname=mixed, iocharset=utf8, codepage=

/dev/hda5 /mnt/hda5 vfat shortname=mixed, iocharset=utf8,codepage=

/dev/hda6 /mnt/hda6 ntfs defaults 0 0

/dev/sda /mnt/sda vfat shortname=mixed, iocharset=utf8,codepage=

Помимо дисковых файловых систем (hda – могут быть разделами одного и того же диска) здесь можно встретить файловые системы в памяти (временные – sys или proc – представление структуры процессов в виде дерева каталогов). Некоторые устройства (например, CD-ROM) помечены noauto в знак того, что при старте их монтировать не надо. Запись в fstab служит только напоминанием, какое именно устройство какой точке монтирования соответствует.

Задание: В командной строке проведите монтирование устройств. Найдите, куда монтируется devx_301.sfs.

4.  Системные вызовы для работы с файлами.

Из курса программирования на языке Cи известны функции работы с файлами из стандартной библиотеки ввода-вывода, такие как fopen(), fread(), fwrite() и т. д. Эти функции входят как неотъемлемая часть в стандарт ANSI на язык Cи и позволяют программисту получать информацию из файла или записывать ее в файл. С точки зрения потоковой модели операции, определяемые функциями стандартной библиотеки ввода-вывода, не являются потоковыми операциями, так как каждая из них требует наличия некоторой структуры передаваемых данных. В операционной системе Linux эти функции представляют собой надстройку (сервисный интерфейс) над системными вызовами, осуществляющими прямые потоковые операции обмена информацией между процессом и файлом и не требующими никаких знаний о том, что она содержит. В системных вызовах open(), read(), write() и close(), которые применяются для такого обмена, используется понятие файлового дескриптора. Информация о файлах, используемых процессом, входит в состав его системного контекста и хранится в его блоке управления – PCB. В операционной системе Linux можно упрощенно полагать, что информация о файлах, с которыми процесс осуществляет операции потокового обмена, наряду с информацией о потоковых линиях связи, соединяющих процесс с другими процессами и устройствами ввода-вывода, хранится в некотором массиве, получившем название таблицы открытых файлов или таблицы файловых дескрипторов. Индекс элемента этого массива, соответствующий определенному потоку ввода-вывода, получил название файлового дескриптора для этого потока. Таким образом, файловый дескриптор представляет собой небольшое целое неотрицательное число, которое для текущего процесса в данный момент времени однозначно определяет некоторый действующий канал ввода-вывода. Некоторые файловые дескрипторы на этапе старта любой программы ассоциируются со стандартными потоками ввода-вывода. Так, например, файловый дескриптор 0 соответствует стандартному потоку ввода, файловый дескриптор 1 – стандартному потоку вывода, файловый дескриптор 2 – стандартному потоку для вывода ошибок. В нормальном интерактивном режиме работы стандартный поток ввода связывает процесс с клавиатурой, а стандартные потоки вывода и вывода ошибок – с текущим терминалом.

Системный вызов open предназначен для выполнения операции открытия файла и, в случае ее удачного осуществления, возвращает файловый дескриптор открытого. Прототип системного вызова open

#include <fcntl. h>

int open(char *path, int flags);

int open(char *path, int flags, int mode);

Параметр path является указателем на строку, содержащую полное или относительное имя файла. Параметр flags может принимать одно из следующих трех значений:

·  O_RDONLY – если над файлом в дальнейшем будут совершаться только операции чтения;

·  O_WRONLY – если над файлом в дальнейшем будут осуществляться только операции записи;

·  O_RDWR – если над файлом будут осуществляться и операции чтения, и операции записи.

Каждое из этих значений может быть скомбинировано посредством операции "побитовое или ( | )" с одним или несколькими флагами:

·  O_CREAT – если файла с указанным именем не существует, он должен быть создан;

·  O_EXCL – применяется совместно с флагом O_CREAT. При совместном их использовании и существовании файла с указанным именем, открытие файла не производится и констатируется ошибочная ситуация;

·  O_NDELAY – запрещает перевод процесса в состояние ожидание при выполнении операции открытия и любых последующих операциях над этим файлом;

·  O_APPEND – при открытии файла и перед выполнением каждой операции записи (если она, конечно, разрешена) указатель текущей позиции в файле устанавливается на конец файла;

·  O_TRUNC – если файл существует, уменьшить его размер до 0, с сохранением существующих атрибутов файла, кроме, быть может, времен последнего доступа к файлу и его последней модификации.

Параметр mode устанавливает атрибуты прав доступа различных категорий пользователей к новому файлу при его создании. Он обязателен, если среди заданных флагов присутствует флаг O_CREAT, и может быть опущен в противном случае. Этот параметр задается как сумма следующих восьмеричных чисел X00+0X0+00X. Первое число определяет права доступа владельца, второе – группы, третье – других пользователей. Каждая восьмеричная цифра, обозначенная как «X», представляет собой триаду двоичных цифр, соответствующих правам доступа rwx.

Системные вызовы read и write предназначены для осуществления потоковых операций ввода (чтения) и вывода (записи) информации над каналами связи, описываемыми файловыми дескрипторами, т. е. для файлов, pipe, FIFO и socket. Прототипы системных вызовов read и write.

#include <sys/types. h>

#include <unistd. h>

size_t read(int fd, void *addr, size_t nbytes);

size_t write(int fd, void *addr, size_t nbytes);

Параметр fd является файловым дескриптором созданного ранее потокового канала связи. Параметр addr представляет собой адрес области памяти, начиная с которого будет браться информация для передачи или размещаться принятая информация. Параметр nbytes, определяет количество передаваемых (для вызова write) или принимаемых байтов (для вызова read). Возвращаемое значение – количество реально принятых (read) или переданных (write) байтов.

Системный вызов close(fd) производит действие, обратное по отношению к вызову open. Возвращаемое значение – 0, если операция прошла успешно, и -1 в случае возникновения ошибки.

Системные вызовы stat, fstat и lstat служат для получения информации об атрибутах файла. Прототипы системных вызовов:

#include <sys/stat. h>

#include <unistd. h>

int stat(char *filename, struct stat *buf);

int fstat(int fd, struct stat *buf);

int lstat(char *filename, struct stat *buf);

Системный вызов stat читает информацию об атрибутах файла, на имя которого указывает параметр filename, и заполняет ими структуру, расположенную по адресу buf. Имя файла должно быть полным, либо должно строиться относительно той директории, которая является текущей для процесса, совершившего вызов. Если имя файла относится к файлу типа "связь", то читается информация об атрибутах файла, на который указывает символическая связь.

Системный вызов lstat идентичен системному вызову stat за одним исключением: если имя файла относится к файлу типа "связь", то читается информация о самом файле типа "связь".

Системный вызов fstat идентичен системному вызову stat, только файл задается не именем, а своим файловым дескриптором (естественно, файл к этому моменту должен быть открыт).

Для системных вызовов stat и lstat процессу не нужны никакие права доступа к указанному файлу, но могут понадобиться права для поиска во всех директориях, входящих в специфицированное имя файла.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5