52 lines
3.0 KiB
TeX
52 lines
3.0 KiB
TeX
\documentclass[10pt]{article}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage{amsmath,amsthm,amssymb}
|
|
\usepackage{fullpage}
|
|
\usepackage{url}
|
|
\pagenumbering{gobble}
|
|
\usepackage{hyperref}
|
|
\usepackage{graphicx}
|
|
\input{statement/preamble.tex}
|
|
|
|
\title{ Tutorial: Caching Offline}
|
|
\author{}
|
|
\date{}
|
|
\begin{document}
|
|
\maketitle
|
|
O problema consiste em simular um gerenciador de cache e determinar o número mínimo de falhas de página. Como a sequência completa de requisições é conhecida previamente, podemos utilizar uma estratégia gulosa para resolver o problema.
|
|
|
|
\subsection*{Representação do estado}
|
|
|
|
\begin{itemize}
|
|
\item A memória principal (cache) é representada por um conjunto (\textit{hash set}), que armazena os identificadores das páginas atualmente carregadas, permitindo consultas em tempo constante.
|
|
\item O histórico futuro de cada página é mapeado em vetores, registrando todos os índices (momentos no tempo) em que cada página será requisitada.
|
|
\item Um vetor de ponteiros auxiliares acompanha qual a próxima ocorrência futura correspondente para cada página.
|
|
\end{itemize}
|
|
|
|
\subsection*{Estratégia de solução usando Algoritmo Guloso}
|
|
|
|
A estratégia ótima dita que, quando a cache estiver cheia e ocorrer uma falha, a página a ser substituída deve ser aquela que demorará mais tempo para ser referenciada novamente no futuro.
|
|
|
|
\begin{enumerate}
|
|
\item Leia a capacidade da cache ($k$) e o tamanho da sequência de requisições ($v$).
|
|
\item Faça um pré-processamento da sequência de páginas:
|
|
\begin{itemize}
|
|
\item Armazene a sequência original em um vetor.
|
|
\item Para cada página lida, adicione o índice atual à sua respectiva lista de referências futuras.
|
|
\end{itemize}
|
|
\item Inicialize a cache vazia, o controle de progresso das referências futuras e o contador de falhas (\textit{misses}).
|
|
\item Percorra a sequência de requisições passo a passo:
|
|
\begin{itemize}
|
|
\item Se a página atual \textbf{não} estiver na cache, ocorreu uma falha de página. Incremente o contador de \textit{misses}.
|
|
\item Se a cache já estiver cheia (tamanho igual a $k$) no momento da falha, é necessário eleger uma página residente para remoção:
|
|
\begin{itemize}
|
|
\item Inspecione todas as páginas atualmente na cache.
|
|
\item Se alguma página não possuir mais requisições futuras, ela é a candidata ideal e deve ser escolhida para remoção imediata.
|
|
\item Caso contrário, compare a próxima requisição de todas e encontre aquela que vai demorar mais tempo para aparecer de novo (índice mais distante no futuro), removendo-a.
|
|
\end{itemize}
|
|
\item Insira a nova página na cache.
|
|
\item Ao final de cada iteração, independentemente de ter ocorrido acerto ou falha, avance o ponteiro de ocorrências da página que acabou de ser processada.
|
|
\end{itemize}
|
|
\item Ao término da simulação, imprima o total de falhas contabilizadas.
|
|
\end{enumerate}\end{document}
|