Материал: 6262

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

66

1.9.6 Неименованные каналы ядра ОС

Неименованные каналы ядра ОС, исторически имеющие название «Полудуплексные каналы UNIX», предназначенны для однонаправленного взаимодействия «родственно связанных» процессов, порождаемых системным вызовом fork(...).

Ядро ОС создает такой канал посредством системного вызова pipe(...), предоставляя процессам два номера дескриптора канала: один на чтение; другой на запись. Изучив теорию подраздела 1.5 (1.5.1), студенту следует выполнить два примера работы с каналами.

Первый пример, представленный листингом 1.7, не имеет прикладной практической ценности. Он демонстрирует только основную идею использования неименованных каналов с помощью системного вызова pipe(...). Соответственно, проект lab7.6 обеспечивает запуск этого примера.

Второй пример, представленный листингом 1.8, собственно и демонстрирует простейший вариант взаимодействия двух процессов посредством одного канала, направленного от родительского процесса к дочернему. Соответственно, проект lab7.7 обеспечивает запуск этого примера.

Замечание

Программные результаты проектов lab7.6 и lab7.7 следует запускать и исследовать в окне терминала, поскольку консоль Eclipse плохо поддерживает системный ввод-вывод.

1.9.7 Именованные каналы FIFO

Именованные каналы FIFO призваны устранить недостатки, присущие каналам pipe(...). Для этого используются специальные файлы типа FIFO.

Теоретические основы создания и использования этих каналов изложены в подразделе 1.5 (1.5.2) данного пособия.

Листинг 1.9 демострирует пример создания канала с именем /home/upk/cfifo и взаимодействие двух родственных процессов через этот канал.

Этот пример реализуется в виде проекта lab7.8. Обратите внимание, что после запуска приложения проекта создается файл, который:

сохраняется после перезапуска компьютера (при условии, что студент сохранил изменения в личном архиве);

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

Студенту следует исследовать работу с этим каналом, например:

с помощью команды echo, в командной строке терминала, направить в канал сообщение;

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

67

1.9.8 Монтирование flashUSB

Проблематика монтирования блочных устройств описана в подразделе 1.6 данного пособия. В целом, она порождается:

наличием большого количества типов файловых систем различных ОС;

необходимости привязки всего многообразия архитектур ФС к единой архитектуре VFS ядра ОС.

Вкачестве задачи, демострирующей простейшие возможности системного вызова mount(...), используется пример монтирования личного flashUSB студента к директории mnt, созданной в домашней директории пользователя upk.

Простейшая программа, реализующая эту задачу, представлена на листинге 1.10,

предполагая, что имя устройства flashUSB равно /dev/sdc1.

Листинг 1.10 — Программа монтирования личного flashUSB

#include <stdio.h> #include <stdlib.h> #include <sys/mount.h>

int main(void) {

//Результат запуска int res = 0;

res = mount ("/dev/sdc1", "/home/upk/mnt", "vfat", 0, "uid=1000,gid=1000,utf8=1");

if (res < 0) { perror("sdc1"); return 1;

}else{

puts("\nУспешное монтирование /dev/sdc1 на ~mnt\n"); return EXIT_SUCCESS;

}

}

Исследование данного примера можно провести на основе проекта lab7.9, реализованного в среде Eclipse. Для этого, студенту следует:

подключить к ЭВМ личную flashUSB и определить используемое для нее имя устройства;

провести изменения в программе, указав реальное имя устройства;

провести компиляцию проекта;

запустить программу в терминале командой sudo ./lab7.9;

исследовать содержимое директории /home/upk/mnt и зафиксировать проделанную работу в отчете.

Замечание

Данный пример ориентирован на применение в среде ОС УПК АСУ или аналогичной ей ОС Linux.

68

1.9.9 Работа с именами файлов

Теоретические основы работы с именами файлов изложены в подразделе 1.8 данного руководства.

На листинге 1.11 приведен исходный текст программы, которая, в рабочей директории пользователя upk создает обычный файл, затем делает на него «жесткую» и символьную ссылки. Результат этих действий выводится на терминал.

Листинг 1.11 — Программа создания ссылок на файл

#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sys/types.h> #include <errno.h> #include <unistd.h>

int main(void) {

char f1[] = "/home/upk/test_file"; char f2[] = "/home/upk/link_file"; char f3[] = "/home/upk/symlink_file"; int fd;

printf("Создаем файл: %s\n", f1); unlink(f1);

fd = open(f1, O_RDWR | O_CREAT); if (fd < 0) {

perror(f1); exit(EXIT_FAILURE);

}

close(fd);

printf("Создаем жесткую ссылку: %s\n", f2); unlink(f2);

fd = link(f1, f2); if (fd < 0) {

perror(f2); exit(EXIT_FAILURE);

}

printf("Создаем Символьную ссылку: %s\n", f3); unlink(f3);

fd = symlink(f1, f3); if (fd < 0) {

perror(f3); exit(EXIT_FAILURE);

}

puts("Выводим результат на терминал:");

system("ls -il /home/upk/test_file /home/upk/link_file /home/upk/symlink_file"); puts("Конец программы...");

return EXIT_SUCCESS;

}

Реализация этой программы проводится в проекте lab7.10. Студенту следует:

69

изучить теоретический материал, изложенный в подразделе 1.8;

изучить исходный текст программы листинга 1.11;

исследовать работу программы, на основе проекта lab7.10;

сравнить работу данной программы с работой утилиты ln;

отразить результаты исследования в личном отчете.

Замечание

Следует обратить внимание, что i-узлы файлов test_file и link_file — совпадают.

Данное задание является последним в лабораторной работе №7.

Студенту следует проверить содержимое всего отчета по данной работе, а также

обозначить основные подразделы в его содержании.

70

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

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

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

Рисунок 2.1 - Обобщенный вид памяти ЭВМ

Замечание

Характеристики, приведенные на рисунке 2.1, соответствуют определенному историческому периоду и уровню технологий, доступных на этот период.

Тем не менее, легко заметить, что разные виды памяти, расположенные с лева на право, обладают следующими свойствами:

уменьшается скорость обмена данными;

увеличивается доступная емкость памяти;

уменьшается стоимость памяти, на каждый байт записанной информации.

Очевидно, что ЭВМ управляет всеми видами памяти, хотя подходы к управлению ими — различны.

В данной теме мы будем рассматривать основную память (ОП), поскольку она занимает центральное место в ЭВМ и выполняет важные функции, влияющие на архитектуру ядра ОС:

Источник: https://studfile.net/preview/16438530/