Вы здесь

ЗАНЯТИЯ март-май 2020 года

В связи с эпидемией коранвируса очные занятия 23, 30 марта и 6 апреля

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


2020.03.23

Работа с файлами

Литература: Робачевский. ОС Unix. Глава 2. "Работа с файлами"

Чтение и запись файлов вызовами read и write. Возвращаемые значения. Признак конца файла при чтении и при записи (запись в закрытый канал связи).

lseek Перемещение головки ввода/вывода вызовом lseek. Получение текущей позиции вызовом lseek.

Понятие блокировки файлов . Вызовы locf и fcntl (эквивалентны в Linux). Кооперативная работа с блокировками (отсутствие обязательных блокировок, как в Windows).

Чтение каталога библиотечными функциями opendir(3), readdir(3) и т.д.

Самостоятельно отследить цепочку структур в ядре Linux, которые используются для выделения файлового дескриптора при открытии файла; хранения позиции головки ввода/вывода; хранения блокировок и счётчиков количества "открытий" файла при совместном использовании файла. Выдержки из кода ядра.

Тестовые вопросы (ответы мне на почту):

  1. Один из процессов установил блокировку целого файла на чтение вызовом fcntl (locf). Удастся ли другому процессу открыть файл на чтение вызовом open()? Удастся ли прочитать из файла вызовом read()?
  2. Какое значение вернет вызов read(fd, buf, 1024) если в файле, на который ссылается fd всего 2 байта? Какое значение вернёт тот же вызов если его сразу же выполнить повторно?

2020.03.30

Наследование открытых файлов. Перенаправление ввода/вывода. Каналы.

Литература: Робачевский. ОС Unix. Глава 2. "Работа с файлами"; Глава 3. "Создание процесса" (первые две страницы)

Создание нового процесса и загрузка в процесс новой программы (описание fork() и exec())

Наследование открытых файлов при порождении дочерних процессов.

Дублирование файловых дескрипторов вызовами dup и dup2. Связь наследования файловых дескрипторов с перенаправлением стандартного ввода вывода в командной строке.

Неименованный канал pipe и использование его для связи с дочерним процессом.

Правила ввода/вывода для неименованных (pipe) и именованных (FIFO) каналов.

Контрольные вопросы (мне на почту):

  1. В чем преимущество последовательности fd=open("file"...); dup2(fd,0); close(fd); перед close(0); open("file"...);, что между ними общего?
  2. Можно ли файловые дескрипторы fd1 и fd2, созданные командами fd1=dup(fd); fd2=dup(fd), использовать для независимого доступа к файлу в разных потоках?
  3. Что произойдёт, если единственный процесс откроет объект FIFO (например /tmp/myfifo) на чтение и попробует прочитать один байт?

3.1 ...откроет на запись и попробует записать один байт?

3.2. ...откроет на чтение и на запись и попробует записать один байт?

3.2.1 ...после чего попробует прочитать один байт?

3.2.2...после чего попробует прочитать ещё один байт?


2020.04.06

Виртуальная файловая система

Литература:

  • Робачевский. ОС Unix. Глава 4. "Файловая подсистема. Архитектура виртуальной файловой системы"
  • Д.Бовет, М. Чезатти Ядро Linux Глава 12. "Виртуальная файловая система"

Видео: Виртуальная файловая система, Разбор имени файла в VFS

Виртуальная файловая система как абстрактный класс

Разбор имени файла в VFS. Монтирование. Символические ссылки.

Структуры данных VFS

Контрольные вопросы (мне на почту):

  1. Может ли Unix быть запущен без монтирования хотя бы одной файловой системы?
  2. Что должен делать драйвер файловой системы, если какая-то возможность в ФС не может быть реализована? Пример: вызов chown() (смена владельца) – неприменим к FAT.
  3. Обобщённый inode содержит поле i_no - уникальный номер inode в данной ФС. Предложите алгоритм генерации значения этого поля в FAT (компактное описание FAT начиная с раздела "Так зачем нужна таблица FAT?").
  4. Опишите механизм, который при разборе имени файла будет защищать от циклических символических ссылок.

2020.04.13

Процессы. Основные понятия, виртуальная память, планировщик процессов

Литература:

  • Робачевский. ОС Unix. Глава 3. "Подсистема управления процессами" Разделы: "Основы управления процессом", "Структуры данных процесса", "Состояния процесса"
  • Д.Бовет, М. Чезатти Ядро Linux Глава 7. "Планирование процессов"

Видео: Основные понятия, виртуальная память, многозадачность, Основы планирования процессов

Общие сведения о процессах. Особый процесс init..

Для ознакомления: Начальная загрузка Linux

Основы планирования процессов

Контрольные вопросы (мне на почту):

  1. Какие существуют варианты (причины) завершения процесса?
  2. Сформулируйте две основные функции процесса init (pid=1) по отношению к остальным процессам.
  3. Предположим, что в системе запущен всего один процесс (вопрос: чему равен его PID?), который выполни код:
fork();
fork();

3.1. Сколько процессов теперь запущено в сиcтеме? 3.2. Сколько дочерних процессов образовалось у первоначального процесса?


2020.04.20

Сигналы

Литература:

  • Робачевский. ОС Unix. Глава 2. "Среда программирования Unix" Раздел: "Процессы - Сигналы"
  • Д.Бовет, М. Чезатти Ядро Linux Глава 11. "Сигналы"

Дополнительно для желающих вникнуть в тонкости: Правила использования сигналов в Unix

Видео: Сигналы в Unix

Методичка: Страница "Сигналы" с подразделами, кроме "Управляющий терминал, сеанс, группы".

  1. Вы пишете процедуру в большой программе и хотите для отладки послать собственному процессу сигнал ABRT (завершение+дамп памяти). Что надо предпринять, чтобы сигнал был доставлен даже в том случае, когда программисты, пишущие другие части программы что-то настроили в доставке сигналов?
  2. Вызов alarm(nsec) заводит в ядре таймер, который вызовет посылку сигнала SIGALRM через nsec секунд. Можно ли рассчитывать, что ровно через nsec секунд будет вызван обработчик сигнала?
  3. Вызов pause() приводит к приостановке процесса до прихода какого-либо сигнала. Напишите функцию mysleep(nsec), которая приостановит процесс, но не более чем на nsec секунд.
  4. Напишите программу, которая в цикле читает строку и завершается по строке "quit". Сделайте так, чтобы по нажатию Ctrl-C выдавалась подсказка: "Для завершения введите quit". Рекомендация: не печатайте этот текст в обработчике сигнала, а используйте глобальную переменную для оповещения основного цикла.

2020.04.27

Память процесса. Страничная организация. Области памяти.

  • Робачевский ОС Unix. Глава 3. "Управления процессами" Разделы: "Принципы управления памятью-Адресное пространство процесса", "Управление памятью процесса"
  • Д.Бовет, М. Чезатти Ядро Linux Глава 9. "Адресное пространство процесса", Раздел "Адресное пространство процесса"
  • Роберт Лав Ядро Linux: описание процесса разработки. Глава 12. "Управление памятью". Раздел "Страничная организация памяти"; Глава 15 "Адресное пространство процесса" Разделы "Адресные пространства" и "Области виртуальной памяти"

Видео: Unix. Память процесса

Методички:

Вопросы:

  1. Через просмотр файлов карт памяти процессов /proc/XXX/maps (где XXX - это числовой идентификатор процесса) проверьте, отображается ли стандартная библиотека языка C (libc-NN.N.so) всегда на одни и те же виртуальные адреса или адреса варьируются.
  2. Объясните, почему исполняемый файл программы присутствует в карте памяти трижды.
  3. На основе изучения карт памяти выскажите предположение, используется ли при доступе всех процессов к стандартной библиотеке языка C одна копия отображения файла в физическую память или каждый процесс держит свою собственную копию в физической памяти.
  4. Скомпилируйте в своём Linux тестовую программу, нарисуйте в виде таблички (или от руки на бумаге) карту адресов подобную схеме с указанием начала каждой области.

2020.05.04

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

  • Робачевский ОС Unix. Глава 2. "Среда программирования Unix" Разделы: "Файлы отображаемые в память", "Ограничения", "Выделение памяти"
  • Д.Бовет, М. Чезатти Ядро Linux Глава 9. "Адресное пространство процесса", Разделы "Обработчик исключения "ошибка обращения к странице" и "Управление кучей"; Глава 19. "Взаимодействие процессов", Раздел "Совместно используемая память IPC"

Видео: Unix. Память процесса

Методичка:

Вопросы:

  1. Как в программе на Си узнать в какую сторону растёт стек? (псевдокод 3-4 строки)
  2. Что в файле с исполняемой программой находится в секции .text?
  3. Каков будет результат операции
char *ptr=(char *)sbrk(0)-1;
*ptr=1;
ptr+=2;
*ptr=1;

2020.05.11

Межпроцессное взаимодействие System V IPC

  • Робачевский ОС Unix. Глава 3. "Управления процессами" Раздел: "Взаимодействие процессов".

  • Д.Бовет, М. Чезатти Ядро Linux Глава 19. "Взаимодействие процессов", Раздел "Схема межпроцессного взаимодействия System V IPC"

Видео: System V IPC

Методичка:

Вопросы:

  1. Можно ли использовать вызовы read и write для чтения/записи очереди сообщений System V IPC?
  2. Исчезнут ли данные в общей памяти System V IPC после завершения процесса?
  3. Исчезнут ли семафоры System V IPC после завершения создавшего их процесса? Изменятся ли их значения?
  4. И ключ IPC и идентификатор IPC - это 32-битные числа. В чём между ними разница?
  5. Команда ipcs показывает несколько объектов с одинаковыми ключами 0x00000000 и разными идентификаторами. Что такое ключ 0x00000000?

2020.05.18

Межпроцессное взаимодействие - сокеты

  • Робачевский ОС Unix. Глава 3. "Управления процессами" Раздел: "Межпроцессное взаимодействие в BSD UNIX. Сокеты".

Для расширения кругозора можно взглянуть на альтернативу сокетам в классическом Unix - Робачевский ОС Unix. Глава 5 "Подсистема ввода/вывода" Раздел "Архитектура STREAMS"

Видео: Сокеты в Unix

Методичка:

Вопросы:

  1. Краткая характеристика двух основных типов сокетов
  2. Есть ли разница между сокетами клиента и сервера для сокета датаграмм? (предполагаем, что оба вызвали bind())
  3. Есть ли разница между сокетами клиента и сервера для сокета потока?
  4. Напишите псевдокод на основе select(), который ожидает ввода данных с stdin и печатает их на stdout. а если входных данных нет, то раз в полсекунды печатает в stderr - "нет данных".
Прикрепленный файлРазмер
Иконка документа Microsoft Office Билеты ОС-2020.doc52.08 КБ
Яндекс.Метрика