Task #3670
closedГенерация кода для модели MMU
100%
Description
По описанию MMU (включающем [пока] только структуру буферов) сгенерировать набор классов на Java.
Часть классов является библиотечной, часть - генерируется по описанию.
Основной библиотечный класс - частично ассоциативный буфер (Buffer). Скорее всего, это generic-класс, параметризируемый классом строки. Класс строки генерируется по описанию (<ИмяБуфера>Line) и, по всей видимости, является наследником базовой строки (Line), агрегирующей объект класса RawData и объект класса (интерфейса) Policy. В библиотеке есть также несколько предопределенных (final-классов) стратегий замещения (FIFO, LRU, PLRU). Примерный интерфейс всех классов мы обсуждали.
Два этапа:
- Библиотека моделирования (+ unit-тесты)
- Трансляция описания в Java
Updated by Alexander Kamkin about 12 years ago
Предлагаю для разминки заняться стратегиями вытеснения данных.
Базовый класс Policy. Его наследниками являются FIFO, LRU и PLRU.
Набросок класса Policy:
public abstract class Policy { /// @paramsize
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.
/// @parami
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. Не забыть про комментарии и тесты.
Updated by Alexander Kamkin about 12 years ago
- Политика PLRU.
- Классы Address (абстрактный класс), Line (абстрактный класс), Set (набор из N лайнов), Buffer (набор из M сетов).
- Политика замещения должна быть в классе Set.
- В классе Line есть ссылка на объект RawData (спросить у Андрея) требуемого размера (параметр конструктора).
- У класса Buffer есть абстрактный метод
int index(Address address)
, возвращающий номер сета в буфере. - Класс Line является часным случаем буфера, поэтому наследуется от класса Buffer
- Класс Set является частным случаем буфера, поэтому наследуется от класса Buffer.
- У класса Line и Set есть метод
bool match(Address address)
. У лайна этот метод абстрактный, у сета - реализуется через match'и входящих в него лайнов, у полноценного буфера путемgetSet(index(address)).match(address)
.
Updated by Taya Sergeeva about 12 years ago
Buffer, Line, Set и Policy добавлены.
В Set добавлены вызовы методов политики.
Что должен возвращать метод getVictim?
Updated by Taya Sergeeva about 12 years ago
- Assignee changed from Taya Sergeeva to Alexander Kamkin
Updated by Alexander Kamkin about 12 years ago
getVictim - это то же самое, что метод onMiss(). То есть он не нужен.
Updated by Alexander Kamkin about 12 years ago
- Assignee changed from Alexander Kamkin to Taya Sergeeva
Нужно написать комментарии к коду (см. пример оформления кода у Андрея + TAB -> Spaces).
Updated by Alexander Kamkin about 12 years ago
Следующий шаг - генерация кода по описанию подсистемы управления памятью.
- Генерация конкретного класса <ИмяБуфера>Address - наследника Address.
- Генерация конкретного класса <ИмяБуфера>Line - наследника Line.
- Генерация конкретного класса <ИмяБуфера>Set - наследника Set.
- Генерация конкретного класса <ИмяБуфера>Buffer - наследника Buffer.
Updated by Taya Sergeeva almost 12 years ago
Подкорректированы файлы классов.
Удален цикл вызова Setом Bufferа, и наоборот.
Тест-кейс на Buffer работает.
Tree walker в процессе.
Updated by Taya Sergeeva almost 12 years ago
Сделан TreeWalker. И вся грамматика компилируется.
Updated by Alexander Kamkin almost 12 years ago
- Subject changed from Генерация кода для модели MMU to [mmu] Генерация кода для модели MMU
Updated by Alexander Kamkin over 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
Updated by Andrei Tatarnikov over 9 years ago
- Status changed from New to Open
- % Done changed from 0 to 50
Updated by Andrei Tatarnikov over 9 years ago
- Status changed from Open to Resolved
- % Done changed from 70 to 100
Updated by Andrei Tatarnikov over 9 years ago
- Status changed from Resolved to Closed
- Published in build set to 2.2.15