Основы операционных систем. Практикум

       

Основы операционных систем. Практикум

Введение в курс практических занятий
Краткая история операционной системы UNIX, ее структура
Системные вызовы и библиотека libc
Понятия login и password
Вход в систему и смена пароля

Упрощенное понятие об устройстве файловой системы в UNIX. Полные и относительные имена файлов
Понятие о текущей директории. Команда pwd. Относительные имена файлов
Домашняя директория пользователя и ее определение
Команда man – универсальный справочник
Команды cd – для смены текущей директории и ls – для просмотра состава директории
Путешествие по структуре файловой системы
Команда cat и создание файла. Перенаправление ввода и вывода
Создание файла с помощью команды cat
Простейшие команды работы с файлами – cp, rm, mkdir, mv

История редактирования файлов – ed, vi
Система Midnight Commander – mc. Встроенный mc редактор и редактор joe
Пользователь и группа. Команды chown и chgrp. Права доступа к файлу
Команда ls с опциями -al. Использование команд chmod и umask
Системные вызовы getuid и getgid
Компиляция программ на языке C в UNIX и запуск их на счет

Написание, компиляция и запуск программы c использованием системных вызовов getuid() и getgid()
Понятие процесса в UNIX. Его контекст

Идентификация процесса
Состояния процесса. Краткая диаграмма состояний
Иерархия процессов
Системные вызовы getppid() и getpid()
Написание программы с использованием getpid() и getppid()
Создание процесса в UNIX. Системный вызов fork()
Прогон программы с fork() с одинаковой работой родителя и ребенка
Системный вызов fork() (продолжение)
Написание, компиляция и запуск
Завершение процесса. Функция exit()

Параметры функции main() в языке C. Переменные среды и аргументы командной строки
Изменение пользовательского контекста процесса. Семейство функций для системного вызова exec()
Прогон программы с использованием системного вызова exec()
Example.3.1
Понятие о потоке ввода-вывода
Понятие о работе с файлами через системные вызовы и стандартную библиотеку ввода-вывода для языка C
Файловый дескриптор
Открытие файла. Системный вызов open()
Системные вызовы read(), write(), close()
Прогон программы для записи информации в файл

Понятие о pipe. Системный вызов pipe()
Прогон программы для pipe в одном процессе
Организация связи через pipe между
Прогон программы для организации однонаправленной связи между родственными процессами через pipe
Написание, компиляция и запуск
Особенности поведения вызовов read() и write() для pip'а
Понятие FIFO. Использование системного вызова mknod() для создания FIFO. Функция mkfifo()

Особенности поведения вызова open() при открытии FIFO
Прогон программы c FIFO в родственных процессах
Написание, компиляция и запуск программы с FIFO в неродственных процессах
Неработающий пример для связи процессов на различных компьютерах
Example.5.1

Основы операционных систем. Практикум

Преимущества и недостатки потокового обмена данными.
Понятие о System V IPC
Пространство имен. Адресация в System V IPC. Функция ftok()
Дескрипторы System V IPC

Разделяемая память в UNIX. Системные вызовы shmget(), shmat(), shmdt()
Прогон программ с использованием разделяемой памяти
Команды ipcs и ipcrm
Использование системного вызова shmctl() для освобождения ресурса
Разделяемая память и системные вызовы fork(), exec() и функция exit()
Самостоятельное написание, компиляция

Понятие о нити исполнения (thread) в UNIX. Идентификатор нити исполнения. Функция pthread_self()
Создание и завершение thread'а. Функции pthread_create(), pthread_exit(), pthread_join()
Прогон программы с использованием двух нитей исполнения
Написание, компиляция и прогон программы с использованием трех нитей исполнения.
Необходимость синхронизации процессов и нитей исполнения, использующих общую память
Example.6.1a
Семафоры в UNIX. Отличие операций над UNIX-семафорами от классических операций
Создание массива семафоров или доступ к уже существующему. Системный вызов semget()
Выполнение операций над семафорами. Системный вызов semop()

Прогон примера с использованием семафора
Изменение предыдущего примера
Удаление набора семафоров из системы с помощью команды ipcrm или системного вызова semctl()
Написание, компиляция и прогон
Понятие о POSIX-семафорах
Example.8.1

Основы операционных систем. Практикум

Сообщения как средства связи и средства синхронизации процессов
Очереди сообщений в UNIX как составная часть System V IPC
Создание очереди сообщений или доступ к уже существующей. Системный вызов msgget()
Реализация примитивов send и receive. Системные вызовы msgsnd() и msgrcv()
Удаление очереди сообщений из системы с помощью команды ipcrm или системного вызова msgctl()
Прогон примера с однонаправленной передачей текстовой информации
Модификация предыдущего примера для передачи числовой информации

Понятие мультиплексирования. Мультиплексирование
Написание, компиляция и прогон программ клиента и сервера
Использование очередей сообщений для синхронизации работы процессов
Example.9.1a

Основы операционных систем. Практикум


Введение
Разделы носителя информации (partitions) в UNIX
Логическая структура файловой системы и типы файлов в UNIX
Понятие о файлах, отображаемых в память (memory mapped файлах). Системные вызовы mmap(), munmap()
Анализ, компиляция и прогон программы для создания memory mapped файла и записи его содержимого
Изменение предыдущей программы для чтения из файла, используя его отображение в память
Организация файла на диске в UNIX на примере файловой системы s5fs. Понятие индексного узла (inode)

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

Написание, прогон и компиляция программы, анализирующей содержимое директории
Example.11.1
Понятие виртуальной файловой системы
Операции над файловыми системами. Монтирование файловых систем

Блочные, символьные устройства
Аппаратные прерывания (interrupt)
Понятие сигнала. Способы возникновения сигналов и виды их обработки
Понятия группы процессов, сеанса

Системный вызов kill() и команда kill()
Изучение особенностей получения терминальных сигналов текущей и фоновой группой процессов
Изучение получения сигнала SIGHUP процессами при завершении лидера сеанса
Системный вызов signal(). Установка собственного обработчика сигнала
Прогон программы, игнорирующей сигнал SIGINT
Модификация предыдущей программы для игнорирования сигналов SIGINT и SIGQUIT
Прогон программы с пользовательской обработкой сигнала SIGINT

Восстановление предыдущей реакции на сигнал
Сигналы SIGUSR1 и SIGUSR2. Использование сигналов для синхронизации процессов
Завершение порожденного процесса. Системный вызов waitpid(). Сигнал SIGCHLD
Прогон программы для иллюстрации обработки сигнала SIGCHLD
Возникновение сигнала SIGPIPE при попытке записи в pipe или FIFO, который никто не собирается читать
Понятие о надежности сигналов. POSIX функции для работы с сигналами
Example.13-14.1

Основы операционных систем. Практикум


Краткая история семейства протоколов TCP/IP
Общие сведения об архитектуре семейства протоколов TCP/IP
Уровень сетевого интерфейса
Системный вызов listen()
Системный вызов accept()
Пример простого TCP-сервера
Создание программы с параллельной обработкой запросов клиентов
Применение интерфейса сетевых
Создание потоковых клиента и сервера для стека UNIX Domain протоколов

Уровень Internet. Протоколы IP, ICMP, ARP, RARP. Internet–адреса
Транспортный уровень. Протоколы
Уровень приложений/процессов
Использование модели клиент-сервер для взаимодействия удаленных процессов
Организация связи между удаленными процессами с помощью датаграмм

Сетевой порядок байт. Функции htons(), htonl(), ntohs(), ntohl()
Функции преобразования IP-адресов inet_ntoa(), inet_aton()
Функция bzero()
Создание сокета. Системный вызов socket()
Адреса сокетов. Настройка адреса сокета. Системный вызов bind()
Системные вызовы sendto() и recvfrom()

Определение IP-адресов для вычислительного комплекса
Пример программы UDP-клиента
Пример программы UDP-сервера
Организация связи между процессами с помощью установки логического соединения
Установление логического соединения. Системный вызов connect()
Пример программы TCP-клиента
Как происходит установление виртуального соединения
Example.15-16.0