Project

General

Profile

Actions

Task #3670

closed

Генерация кода для модели MMU

Added by Alexander Kamkin over 11 years ago. Updated over 8 years ago.

Status:
Closed
Priority:
High
Assignee:
Andrei Tatarnikov
Category:
-
Target version:
Start date:
11/10/2012
Due date:
% Done:

100%

Estimated time:
Detected in build:
svn
Published in build:
2.2.15

Description

По описанию MMU (включающем [пока] только структуру буферов) сгенерировать набор классов на Java.

Часть классов является библиотечной, часть - генерируется по описанию.

Основной библиотечный класс - частично ассоциативный буфер (Buffer). Скорее всего, это generic-класс, параметризируемый классом строки. Класс строки генерируется по описанию (<ИмяБуфера>Line) и, по всей видимости, является наследником базовой строки (Line), агрегирующей объект класса RawData и объект класса (интерфейса) Policy. В библиотеке есть также несколько предопределенных (final-классов) стратегий замещения (FIFO, LRU, PLRU). Примерный интерфейс всех классов мы обсуждали.

Два этапа:

  1. Библиотека моделирования (+ unit-тесты)
  2. Трансляция описания в Java
Actions #1

Updated by Alexander Kamkin over 11 years ago

Предлагаю для разминки заняться стратегиями вытеснения данных.

Базовый класс Policy. Его наследниками являются FIFO, LRU и PLRU.

Набросок класса Policy:

public abstract class Policy
{
    /// @param size the size of the buffer (associativity).
public Policy(int size) {
this.size = size;
} /// @return the size of the buffer (associativity).
public int getSize() {
return size;
} /// The method is called every time when the i-th item is accessed.
/// @param i the item being accessed.
public abstract void onHit(int i); /// The method is called when there is a miss.
/// @return the item to be replaced.
public abstract int onMiss();
}

Набросок класса FIFO:

public final class FIFO extends Policy
{
    private LinkedList<Integer> fifo = new LinkedList<Integer>();

    public FIFO(int size)
    {
        super(size);

        for(int i = 0; i < size; i++)
            { fifo.add(i); }
    }

    @Override
    public void onHit(int i)
    {
        for(int j = 0; j < fifo.size(); j++)
        {
            if(fifo.get(j) == i)
            {
                fifo.remove(j);
                fifo.add(i);
                return;
            }
        }

        assert false;
    }

    @Override
    public int onMiss()
    {
        return fifo.peek();
    } 
}

P.S. Не забыть про комментарии и тесты.

Actions #2

Updated by Alexander Kamkin over 11 years ago

  1. Политика PLRU.
  2. Классы Address (абстрактный класс), Line (абстрактный класс), Set (набор из N лайнов), Buffer (набор из M сетов).
  3. Политика замещения должна быть в классе Set.
  4. В классе Line есть ссылка на объект RawData (спросить у Андрея) требуемого размера (параметр конструктора).
  5. У класса Buffer есть абстрактный метод int index(Address address), возвращающий номер сета в буфере.
  6. Класс Line является часным случаем буфера, поэтому наследуется от класса Buffer
  7. Класс Set является частным случаем буфера, поэтому наследуется от класса Buffer.
  8. У класса Line и Set есть метод bool match(Address address). У лайна этот метод абстрактный, у сета - реализуется через match'и входящих в него лайнов, у полноценного буфера путем getSet(index(address)).match(address).
Actions #3

Updated by Taya Sergeeva over 11 years ago

Buffer, Line, Set и Policy добавлены.
В Set добавлены вызовы методов политики.
Что должен возвращать метод getVictim?

Actions #4

Updated by Taya Sergeeva over 11 years ago

  • Assignee changed from Taya Sergeeva to Alexander Kamkin
Actions #5

Updated by Alexander Kamkin over 11 years ago

getVictim - это то же самое, что метод onMiss(). То есть он не нужен.

Actions #6

Updated by Alexander Kamkin over 11 years ago

  • Assignee changed from Alexander Kamkin to Taya Sergeeva

Нужно написать комментарии к коду (см. пример оформления кода у Андрея + TAB -> Spaces).

Actions #7

Updated by Alexander Kamkin over 11 years ago

Следующий шаг - генерация кода по описанию подсистемы управления памятью.

  1. Генерация конкретного класса <ИмяБуфера>Address - наследника Address.
  2. Генерация конкретного класса <ИмяБуфера>Line - наследника Line.
  3. Генерация конкретного класса <ИмяБуфера>Set - наследника Set.
  4. Генерация конкретного класса <ИмяБуфера>Buffer - наследника Buffer.
Actions #8

Updated by Taya Sergeeva over 11 years ago

Подкорректированы файлы классов.
Удален цикл вызова Setом Bufferа, и наоборот.
Тест-кейс на Buffer работает.
Tree walker в процессе.

Actions #9

Updated by Taya Sergeeva over 11 years ago

Сделан TreeWalker. И вся грамматика компилируется.

Actions #10

Updated by Alexander Kamkin about 11 years ago

  • Subject changed from Генерация кода для модели MMU to [mmu] Генерация кода для модели MMU
Actions #11

Updated by Alexander Kamkin about 10 years ago

  • Target version set to 2.3
Actions #12

Updated by Alexander Kamkin about 9 years ago

  • Subject changed from [mmu] Генерация кода для модели MMU to Генерация кода для модели MMU
  • Category set to 48
  • Assignee changed from Taya Sergeeva to Andrei Tatarnikov
  • Priority changed from Normal to High
Actions #13

Updated by Andrei Tatarnikov over 8 years ago

  • Status changed from New to Open
  • % Done changed from 0 to 50
Actions #14

Updated by Andrei Tatarnikov over 8 years ago

  • % Done changed from 50 to 70
Actions #15

Updated by Andrei Tatarnikov over 8 years ago

  • Status changed from Open to Resolved
  • % Done changed from 70 to 100
Actions #16

Updated by Andrei Tatarnikov over 8 years ago

  • Status changed from Resolved to Closed
  • Published in build set to 2.2.15
Actions

Also available in: Atom PDF