GithubHelp home page GithubHelp logo

virt-mem's Introduction

Проект «Алгоритмы управления виртуальной памятью»

Описание предметной области

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

Виртуальная память — это механизм расширения оперативной (физической) памяти на внешние носители. Его идея состоит в том, что адресное пространство процесса хранится целиком на внешнем носителе, а в оперативной памяти содержится только часть, необходимая в данный момент.

В рамках этого проекта нас будут интересовать алгоритмы замещения, задача которых — определять, какие из загруженных в оперативную память страниц процесса следует замещать, то есть выгружать обратно на внешний носитель. Алгоритмы замещения позволяют освободить оперативную память, прежде чем загружать с внешнего носителя требуемые процессу страницы.

Будем считать, что размер адресного пространства процесса — N страниц, а оперативная память состоит из M кадров (один кадр вмещает одну страницу), причём М<N. Таким образом, страницы процесса нумеруются от 1 до N, а кадры оперативной памяти — от 1 до M.

Работа процесса с точки зрения системы управления памятью состоит из последовательности обращений к страницам его адресного пространства (то есть последовательность чисел из диапазона от 1 до N).

Алгоритм замещения на очередной требуемый процессу номер страницы должен отвечать одним из следующих способов:

  • страница уже загружена в оперативную память, ничего делать не требуется;
  • K — номер кадра, который следует заместить.

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

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

Известно множество алгоритмов замещения. Можно считать, что все они работают одинаково, пока в оперативной памяти имеются свободные кадры: например, выбирается свободный кадр с наименьшим номером. Отличия начинаются, когда оперативная память полностью загружена. Нас будут интересовать следующие алгоритмы замещения:

  • FIFO (first in — first out): замещается та страница, которая попала в оперативную память раньше всех остальных;
  • LRU (least recently used): замещается страница, к которой дольше всего не было обращений;
  • OPT (optimal): замещается страница, к которой дольше всего не будет обращений (понятно, что этот алгоритм нельзя реализовать на практике, поскольку он требует знания будущего, однако его результаты удобно использовать для анализа эффективности других алгоритмов).

Некоторые алгоритмы замещения учитывают не только обращения к страницам, но и различают операции на чтение и запись, поддерживая тем самым данные о модифицированности содержимого страницы в оперативной памяти относительно её содержимого на внешнем носителе. Замещать немодифицированную страницу выгоднее, поскольку её не требуется сохранять на внешний носитель. К ним, к примеру, относятся алгоритмы NRU (not recently used) и CLOCK (часовой алгоритм) — их описание нетрудно найти в открытых источниках.

Задание

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

Требования к реализации

  • Язык программирования: Kotlin (СП), Python (МААД).
  • Точка входа в программу: src/VirtualMemory.kt (СП), src/virtual_memory.py (МААД).
  • Интерфейс: чтение данных из файлов, передача имён файлов и других параметров через командную строку (консольный ввод не допускается), поддержка однократного запуска и пакетной обработки.
  • Модульное тестирование: необходимы тесты для отдельных функций.
  • Случайная генерация последовательностей обращений к страницам для подготовки тестовых данных для внешнего тестирования.

Дополнительные требования

  • Документация: описание порядка использования программы, форматов входных данных и результатов (файл DOC.md).
  • Примеры для внешнего тестирования: программа должна сопровождаться примерами входных данных (файлы в подкаталоге data).
  • Разработка должна вестись регулярно, история коммитов должна отражать процесс разработки, сообщения коммитов рекомендуется писать на английском языке (но сообщения на русском языке также допускаются).

Возможности для расширения проекта (необязательное задание)

  • Построение графика числа ответов второго типа в зависимости от числа обращений к страницам памяти.
  • Реализация алгоритмов замещения с учётом модифицированности страниц в оперативной памяти.

Самостоятельно принимаемые решения

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

Сроки выполнения и порядок оценивания

  • Мягкий дедлайн: 28 сентября, 23:55.
  • Жёсткий дедлайн: спустя 4 полных дня с момента получения результатов первого обзора кода.
  • Критерии оценивания.

virt-mem's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.