Skip to content

VA-Minsk/SPO_VM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

СПОВМ (системное программное обеспечение вычислительных машин). Лабораторные работы

Build Status
Лабораторные работы 1-5 должны компилироваться как под Windows, так и под Linux.
Остальные - под Windows только.
P.S. Все авторские права на предоставленные ниже условия лабораторных работ принадлежат Белорусскому Государственному Университету Информатики и Радиоэлектроники (БГУИР, BSUIR)

Чем собирать:

Для Windows использовалось:

  • Microsoft Visual Studio 2010 SP1 Professional

Для Linux:

  • g++ v4.8.4
  • make v3.81

Как собирать:

  • linux версия:
    1. Перейдите в консоли в папку с нужной лабораторной работой
    2. Наберите в консоли make
    3. После окончания компиляции используйте make run для запуска
  • windows версия:
    1. Перейдите в папку с нужной лабораторной работой
    2. Запустите требуемый *.sln файл.
    3. Скомпилируйте нужную вам версию с помощью Visual Studio

Лабораторная работа №1

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

Лабораторная работа №2

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

Лабораторная работа №3

Каждый клиент - отдельный открытый терминал, клиенты формируют очередь на главном процессе и, как и во второй лабе, могут получить обслуживание только в порядке очереди. В это время в главном процессе на терминал должны выводиться имена клиентов в том порядке, как они подключились. Если в момент вывода создается новый клиент - вывод на главном процессе должен это обработать, если один из клиентов выключается - вывод на главном процессе должен это обработать.
Если есть 3 клиента(qwe, asd, zxc), то на главный терминал должно выводиться:
qwe asd zxc qwe asd zxc qwe asd zxc .... и так до бесконечности.
Если добавим клиента rty, то вывод должен быть такой:
qwe asd zxc rty qwe asd zxc rty ... до бесконечности.
Если закроем клиента qwe, то вывод должен быть такой:
asd zxc rty asd zxc rty asd zxc rty

Лабораторная работа №4

Cделать программу, которая будет выводить имена потоков на консоль так же, как работает у Вас сейчас с процессами (в лабораторной работе 3), но с некоторыми изменениями. При запуске параметрами командной строки передаются два параметра: 1 - интервал, с которым будут выводиться имена потоков на экран, 2 - интервал, с которым они будут автоматически создаваться. Помимо автоматического создания, потоки можно создавать/удалять руками, правила такие же, как в предыдущей лабе.

Лабораторная работа №5

Eсть папка, которая в себе содержит папки с текстовыми файлами. На каждую папку создается отдельный процесс. В каждом процессе будет два потока:

  1. Первый поток (читатель) асинхронным образом считывает содержимое одного файла;
  2. Поток-читатель уведомляет второй поток (писатель) о том, что содержимое файла прочитано и может быть передано писателю;
  3. Поток-писатель получает от первого потока содержимое файла и асинхронным образом записывает полученную строку в конец выходного файла;
  4. Поток-писатель уведомляет читателя о том, что строка записана в выходной файл и можно приступать к чтению следующего файла;
  5. Процедура повторяется с п.1, пока не закончится список файлов.

В результате должна быть произведена конкатенация (объединение) входных текстовых файлов в один результирующий. Функции чтения-записи должны быть выделены в динамическую библиотеку, подключены на этапе выполнения программы и выгружены после отработки основного цикла. Все результирующие файлы должны быть записаны в самую верхнюю папку, т.е. которая содержит в себе папки с файлами. Эти файлы должны быть названы так, как называется папка, в которой они изначально были. Также эти файлы должны быть текстовыми.
Под текстовыми файлами подразумеваются файлы типа *.txt.
Каждый процесс рекурсивно обходит вложенные в обрабатываемую им папку папки. Результаты "обходов" также пишутся в основной файл этого процесса.

Лабораторная работа №6

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

Лабораторная работа №7

Разработать собственную файловую систему. Физический носитель в данном случае эмулируется файлом фиксированного размера. Архитектура файловой системы остается на усмотрение студента. В конечном результате должны быть реализованы следующие компоненты:

  • библиотека функций по добавлению, удалению и модификации файлов;
  • простой файловый менеджер, основанный на данной библиотеке.

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