Управление ресурсами в ОС UNIX

       

Варианты заданий


1. Shell-программа подсчитывает количество и выводит список всех файлов (без каталогов) в порядке уменьшения их длин в поддереве, начиная с каталога, имя которого задано параметром Shell-программы. Форма вывода результата:


  • Разработать программу, которая просматривает текущий каталог и выводит на экран имена всех встретившихся в нем каталогов. Затем осуществляется переход в родительский каталог, который затем становится текущим, и указанные выше действия повторяются до тех пор, пока текущим каталогом не станет корневой каталог.
  • Разработать программу, которая просматривает текущий каталог и выводит на экран имена всех встретившихся в нем обычных файлов. Затем осуществляется переход в родительский каталог, который затем становится текущим, и указанные выше действия повторяются до тех пор, пока текущим каталогом не станет корневой каталог.
  • Разработать программу, которая выводит на экран содержимое текущего каталога в порядке возрастания размеров файлов. При этом имена каталогов должны выводиться первыми.
  • Разработать программу, которая выводит на экран содержимое текущего каталога, упорядоченное по времени создания файлов. При этом имена каталогов должны выводиться последними.
  • Разработать программу, которая выводит на экран содержимое текущего каталога в алфавитном порядке. Каталоги не выводить.
  • Разработать программу, которая выводит на экран в текущем каталоге имена тех каталогов, которые в себе не содержат подкаталогов.
  • Разработать программу, которая выводит на экран в текущем каталоге имена тех каталогов, которые содержат в себе подкаталоги.
  • Разработать программу, которая осуществляет просмотр текущего каталога и выводит на экран его содержимое группами в порядке возрастания числа ссылок на файлы (в том числе имена каталогов). Группа представляет собой объединение файлов с одинаковым числом ссылок на них.



  • 1. Пpоцесс откpывает N файлов, pеально существующие на диске, либо вновь созданные. Разpаботать пpогpамму, демонстpиpующую динамику фоpмиpования таблицы описателей файлов и изменения инфоpмации в ее элементах (пpи изменении инфоpмации в файлах). Например, сценарий программы может быть следующим:

  • открытие первого пользовательского файла;
  • открытие второго пользовательского файла;
  • открытие третьего пользовательского файла;


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

    2. Пусть N пpоцессов осуществляют доступ к одному и тому же файлу на диске (но с pазными pежимами доступа). Разpаботать пpогpамму, демонстpиpующую динамику фоpмиpования таблицы файлов и изменения ее элементов (пpи пеpемещении указателей чтения-записи, напpимеp). Например, сценарий программы может быть следующим:

  • открытие файла процессом 0 для чтения;
  • открытие файла процессом 1 для записи;
  • открытие файла процессом 2 для добавления;
  • чтение указанного числа байт файла процессом 0;
  • запись указанного числа байт в файл процессом 1;
  • добавление указанного числа байт в файл процессом 2.
  • После каждого из этапов печатаются таблицы файлов всех процессов.

    3. Пусть каждый из N пpоцессов осуществляет доступ к P(i), i=1,N файлам. Далее, пусть M<N пpоцессов поpодили пpоцессы-потомки (с помощью системного вызова fork()) и сpеди этих потомков K<M пpоцессов дополнительно откpыли еще S(j),j=1,K файлов. Разpаботать пpогpамму, демонстpиpующую динамику фоpмиpования таблиц откpытых файлов пpоцессов. Например, сценарий программы может быть следующим:

  • процесс 0 открывает два файла (общее число открытых файлов, включая стандартные файлы, равно пяти);
  • процесс 1 открывает два файла (общее число открытых файлов, включая стандартные файлы, равно пяти);
  • процесс 2 открывает два файла (общее число открытых файлов, включая стандартные файлы, равно пяти);
  • процесс 0 порождает процесс 3, который наследует таблицу открытых файлов процесса 0;



  • Разработать программу, вычисляющую число сочетаний C(k,n)=n!/(k!*(n-k)!). Для вычисления факториалов n!, k!, (n-k)! должны быть порождены три параллельных процесса-потомка.
  • Разработать программу, вычисляющую плотность нормального распределения в точке x по формуле f(x)=Exp(-x**2/2)/Sqrt(2*Пи). Для нахождения Пи и Exp(-x**2/2) программа должна породить два параллельных процесса, вычисляющих эти величины путем разложения в ряд по формулам вычислительной математики.
  • Разработать программу, вычисляющую плотность выпуклого распределения в точке х по формуле f(x)=(1-Cos(x))/(Пи*x**2). Для нахождения Пи и Cos(х) программа должна породить два параллельных процесса, вычисляющих эти величины путем разложения в ряд по формулам вычислительной математики.
  • Разработать программу, вычисляющую значение плотности распределения Коши в точке х=е по формуле f(x)=1/(Пи*(1+x**2)). Для нахождения Пи и е**2 программа должна породить два параллельных процесса, вычисляющих эти величины путем разложения в ряд по формулам вычислительной математики.
  • Разработать программу, вычисляющую интеграл в диапазоне от 0 до 1 от подинтегрального выражения 4*dx/(1+x**2) с помощью последовательности равномерно распределенных на отрезке [0,1] случайных чисел, параллельно генеририруемую процессом-потомком. Процесс-потомок должен завершиться после заранее заданного числа генераций N.
  • Разработать программу, вычисляющую значение f(x) как сумму ряда от k=1 до k=N от выражения (-1)**(k+1)*x**(2k-1)/(2k-1)! для значений x, равномерно распределенных на интервале [0,Пи], и выводящую полученный результат f(x) в файл в двоичном формате. В это время предварительно подготовленный процесс-потомок читает данные из файла, преобразовывает их в текстовую форму и выводит на экран до тех пор, пока процесс-предок не передаст ему через файл ключевое слово (например, "STOP"), свидетельствующее об окончании процессов.
  • Задание, аналогичное варианту 6, но для вычисления суммы ряда от k=0 до k=N для выражения x**(2k+1)/(2k+1).
  • Разработать программу, вычисляющую число размещений по r ячейкам n элементов N=n!/n(1)!*n(2)!*...*n(r)!, удовлетворяющих требованию, что в ячейку с номером i попадает ровно n(i) элементов; i=1,...,r и n(1)+n(2)+...+n(r)=n. Естественно, что на каждый факториал необходимо породить один процесс-потомок, как указано в варианте 1.



  • 1. Исходный процесс создает программный канал К1 и порождает два процесса Р1 и Р2, каждый из которых готовит данные для обработки их основным процессом. Схема взаимодействия процессов показана ниже.




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

  • who | wc -l & ps | wc -l
  • (cc pr1.c & cc pr2.c) && cat pr1.c pr2.c > prall.c
  • ls -al | grep "April" | wc -l > a.txt
  • ls -lisa | sort | wc -l > a.txt
  • tr -d "[0-9]" < a.txt | sort | uniq > b.txt
  • cat a.txt b.txt c.txt | tr -d "[a-i] | wc -w
  • tr -d "[p-z]" < a.txt |wc -c & wc -c < a.txt
  • ls -la > a.txt & ps > b.txt; cat a.txt b.txt | sort



  • Два дочерних процесса выполняют некоторые циклы работ, передавая после окончания очередного цикла через один и тот же сегмент разделяемой памяти родительскому процессу очередные четыре строки некоторого стихотворения, при этом первый процесс передает нечетные четырехстишья, второй - четные. Циклы работ процессов не сбалансированы по времени. Родительский процесс компонует из передаваемых фрагментов законченное стихотворение и выводит его по завершении работы обоих процессов. Решить задачу с использованием аппарата семафоров.
  • Четыре дочерних процесса выполняют некоторые циклы работ, передавая после окончания очередного цикла через один и тот же сегмент разделяемой памяти родительскому процессу очередную строку некоторого стихотворения, при этом первый процесс передает 1-ю, 5-ю, 9-ю и т.д. строки, второй - 2-ю, 6-ю, 10-ю и т.д. строки, третий - 3-ю, 7-ю, 11-ю и т.д. строки, четвертый - 4-ю, 8-ю, 12-ю и т.д. строки. Циклы работ процессов не сбалансированы по времени. Родительский процесс компонует из передаваемых фрагментов законченное стихотворение и выводит его по завершении работы всех процессов. Решить задачу с использованием аппарата семафоров.
  • Решить задачу из варианта 1 при условии, что передаваемые процессами тексты передаются родительскому процессу не через сегмент разделяемой памяти, а через очередь сообщений.
  • Решить задачу из варианта 2 при условии, что передаваемые процессами тексты передаются родительскому процессу не через сегмент разделяемой памяти, а через очередь сообщений.
  • Родительский процесс помещает в сегмент разделяемой памяти имена программ из предыдущих лабораторных работ, которые могут быть запущены. Выполняя некоторые циклы работ, порожденные процессы случайным образом выбирают имена программ из таблицы сегмента разделяемой памяти, запускают эти программы, и продолжают свою работу. Посредством аппарата семафоров должно быть обеспечено, чтобы не были одновременно запущены две одинаковые программы. В процессе работы через очередь сообщений родительский процесс информируется, какие программы и от имени кого запущены.



  • Организовать взаимодействие типа клиент - сервер. Клиент делает запрос серверу на выполнение какой-либо команды. Сервер выполняет эту команду и возвращает результаты клиенту.
  • Организовать взаимодействие типа клиент - сервер. Клиент делает запрос серверу о передаче файлов с определенным расширением из указанной директории. Сервер сканирует указанную директорию и отправляет клиенту список файлов, удовлетворяющих запросу.
  • Организовать взаимодействие типа клиент - сервер. Сервер при подключении к нему нового клиента высылает список IP-адресов уже подключенных клиентов. А остальным клиентам рассылается сообщение в виде IP-адреса о том, что подключился такой-то клиент.
  • Организовать взаимодействие типа клиент - сервер. Клиент при входе в связь с сервером должен ввести пароль. Разрешено сделать три попытки. Если пароль не верен, сервер должен блокировать IP-адрес клиента на 5 минут.
  • Организовать взаимодействие типа клиент - сервер. Клиенты подключается к первому серверу, и передают запрос на получение определенного файла. Если этого файла нет, сервер подключается ко второму серверу и ищет файл там. Затем либо найденный файл пересылается клиенту, либо высылается сообщение, то такого файла нет.
  • Организовать взаимодействие типа клиент - сервер. К серверу одновременно может подключиться только один клиент. Остальные клиенты заносятся в очередь, и им высылается сообщение об ожидании освобождения сервера.
  • Организовать взаимодействие типа клиент - сервер. Клиент отсылает строку серверу. Сервер отсылает данную строку на другие сервера, список которых хранится в файле, а там уже осуществляется поиск файлов содержащих данную строку. Результаты поиска отсылаются клиенту.
  • Эмуляция DNS сервера. Клиент подсоединяется к серверу, IP которого хранится в файле dns.url и делает ему запрос на подключение к серверу "Имя сервера". DNS-сервер имеет список, хранящийся в файле о соответствии имен серверов и IP-адресов. Если в списке нет "имени сервера" запрошенного клиентом, то сервер DNS подключается последовательно к другим серверам, хранящимся в файле dns.url и т.д. Если сервер не найден, клиенту возвращается соответствующее сообщение.
  • Организовать чат. К серверу подключаются клиенты. При подключении клиента сервер спрашивает имя, под которым клиент будет известен в соединении. Сервер хранит IP-адреса подключаемых клиентов и их имена. Все сообщения каждого клиента рассылаются остальным в виде ""имя клиента" - сообщение". Сообщения рассылаются сервером всем клиентам также при вхождении в связь нового клиента, и выходе какого-либо клиента


  • Содержание раздела