Skip to content

anhmtkxtb1998/labs_for_OS

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Labs for OS

Лабораторные работы по дисциплине "Операционные системы" в ЛЭТИ

Лаба 1: Создание и уничтожение потоков

Написать программу, содержащую два потока (в дополнение к основному потоку). Каждый из потоков должен выводить определенное число на экран


Лаба 2: Cинхронизация потоков с помощью мьютексов и неименованных семафоров

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

Необходимо убедиться, что в случае отсутствия мьютекса (семафора) потоки выводят символы в произвольном порядке, например: 121212121212121212121212121212121212121212121212121212121212121.

В случае использования мьютекса (семафора) потоки выводят символы в определенном порядке, например: 111111111122222222221111111111222222222211111111112222222222.

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

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

В обоих случаях студент реализует три варианта программы:

  1. С блокирующей операцией захвата мьютекса (семафора) pthread_mutex_lock() (sem_wait());
  2. С операцией проверки захвата мьютекса (семафора) без блокировки pthread_mutex_trylock() (sem_trywait());
  3. С блокировкой на время операции захвата мьютекса (семафора) pthread_mutex_timedlock() (sem_timedwait()).

Лаба 3: Взаимодействие потоков через неименованные каналы

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

Устранить блокировки потоков для случая чтения из пустого канала двумя способами (pipe2() и fcntl()).


Лаба 4: Cоздание и уничтожение процессов

  1. Написать программу 1, которая при запуске принимает несколько (3 – 5) аргументов в командной строке, а затем в цикле выводит каждый аргумент на экран с задержкой в несколько секунд.

Программа 1 должна выводить на экран свой идентификатор и идентификатор процесса-родителя.

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

  1. Написать программу 2, которая запускает программу 1 в качестве дочернего процесса с помощью вызовов fork() и exec().

Программа 2 должна вывести на экран идентификатор процесса-родителя, свой идентификатор и идентификатор дочернего процесса.

Программа 2 должна сформировать набор параметров для передачи в дочерний процесс аргументов командной строки.

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

  1. Написать программу 3, которая запускает программу 1 в качестве дочернего процесса с помощью вызовов clone() и exec().

Программа 3 должна вывести на экран идентификатор процесса-родителя, свой идентификатор и идентификатор дочернего процесса.

Программа 3 должна сформировать набор параметров для передачи в дочерний процесс аргументов командной строки.

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


Лаба 5: Cинхронизация процессов с помощью именованных семафоров

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

Обе программы должны создать (или открыть, если создан) один и тот же именованный семафор, должны создать (или открыть, если создан) один и тот же файл, но записывать в файл разные символы.

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

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

Использовать функции входа в критический участок с блокировкой и без блокировки.


Лаба 6: Взаимодействие процессов через разделяемую память

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


Лаба 7: Взаимодействие процессов через именованные каналы

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


Лаба 8: Взаимодействие процессов через очереди сообщений

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


Лаба 9: Сетевое взаимодействие процессов через сокеты

Написать комплект из двух программ, одна из которых выполняет функции сервера, а вторая выполняет функции клиента.

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

Сервер принимает запросы, обрабатывает их и отправляет ответы клиенту. Функцию обработки следует выбрать из таблицы.

Клиент принимает ответы и выводит их на экран.

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

В качестве очередей запросов на обработку и передачу использовать типы данных std::vector или std::queue.

Необходимо учесть, что очереди запросов на обработку и передачу являются критическими ресурсами, с которыми работают несколько потоков одновременно. Поэтому работа с очередями должна производиться в режиме взаимного исключения.

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

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

About

ETU labs for OS in C/C++

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 67.8%
  • C++ 32.2%