A importância da memória cache (III)

Progresso lento do trabalho

Continuando o artigo anterior no qual definimos, grosso modo, o sistema de memória de um computador, observando especialmente a memória cache, nosso próximo passo é verificar se tudo o que falamos é verdadeiro, para isso usaremos alguns programas desenvolvidos na linguagem de programação C .

Este exemplo de uso é um pouco difícil de simular, então eu recomendo fazê-lo apenas para pessoas que sabem o que estão fazendo. Por algumas razões de segurança, não colocarei o código que utilizo para desativar o bloco de endereços que contém o público em cache , não para mim, mas porque um mau uso pode desativar completamente o computador e forçá-lo a ser formatado. Além disso, o suporte a esses tipos de elementos é um pouco complicado e, provavelmente, se ocorrer uma falha, não poderá ajudar a resolvê-lo.

Com o exemplo a seguir, entenderemos a imagem do cabeçalho. Vamos assumir o seguinte código escrito em C (exemplo1.c):

#include <stdlib.h>
#include <stdio.h>

#define NVECES 50000 // Repite 50000 veces

char pagina[4096]; // 4096 bytes

int main(void) {
    int rep, i;
    for (rep = 0; rep < NVECES; rep++) {
         if (rep % 1000 == 0) {
         printf("N= %dn", rep);
         fflush(stdout);
    }
   for(i = 0; i < 4096; i++)
        pagina[i] = 'A';
    }
   exit(0);
}

Vamos executá-lo em uma distribuição Linux . Primeiro, compilamos e vinculamos o programa anterior

gcc ejemplo1.c-o ejemplo1

Em seguida, executamos com:

time ./ejemplo1

run_time_with_cache

Com isso, teremos algum tempo. Vamos comparar com o tempo que nos daria se não tivéssemos cache em nosso computador.

A primeira coisa é desativar o cache . No momento em que o desativarmos, perceberemos como todo o sistema começa a funcionar muito, muito devagar.

Desativando o cache

Consideramos que trabalhamos no Ubuntu e que conseguimos desativar nosso cache . Suponha que, como no meu caso, tenhamos uma função C que nos permita desativar nosso cache, basicamente o que fazemos é desativar alguns endereços associados à nossa memória cache e ao nosso programa para que não possamos salvar informações nele. Essa função em cache (…) funcionará da seguinte maneira: quando fazemos uma chamada, por exemplo, em cache (0x12345678); O cache está desativado para o intervalo de endereços 0x12345000-0x12345FFF.

Relacionado:  O tipo var em C #

Em seguida, com o código a seguir, verificamos os horários (exemplo2.c):

#include <stdlib.h>
#include <stdio.h>
#include <atc/lincache.h>

#define NVECES 50000 // Repite 50000 veces

char pagina[4096]; // 4096 bytes

int main(void) {
    int rep, i;

    if (cachedis((unsigned int)&rep) < 0) {
        fprintf(stderr, "Error deshabilitando la cachen");
        exit(-1);
    }

    for (rep = 0; rep < NVECES; rep++) {
    // Mensaje por pantalla cada 1000 repeticiones
    if (rep % 1000 == 0) {
        printf("N= %dn", rep);
        fflush(stdout);
    }

     // Accede a todas las posiciones de la página de datos
    for(i = 0; i < 4096; i++)
        pagina[i] = 'A';
}
    exit(0);
}

Primeiro, compilamos e vinculamos o programa anterior:

gcc ejemplo2.c-o ejemplo2 -lcache 

Em seguida, executamos com:

time ./ejemplo2

run-time_without_cache

O tempo não é muito real, uma vez que o sistema operacional executa abaixo de certas operações que podem variar, mas a ideia é clara: um sistema sem cache é despretensioso , seria necessário até o programa mais simples para levar muito mais tempo.

Esses artigos puramente teóricos são essenciais para poder continuar com nosso tutorial de programação e, assim, explicar as necessidades de certas estruturas de dados e os benefícios que obteremos e que terão impacto em todo o sistema ao usar uma ou outra estrutura.

Bibliografia utilizada:

Organização de Computadores | ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES (7º ED.) WILLIAM STALLINGS e observa a arquitetura do departamento e a tecnologia da computação da Universidade de Oviedo

Biografia recomendada:

Organização de Computadores | ORGANIZAÇÃO E ARQUITETURA DE COMPUTADOR (7º ED.) WALLIAM STALLINGS

Sistemas operativos SISTEMAS OPERACIONAIS, JESUS ​​CARRETERO PEREZ

 

Você pode estar interessado:

Deixe um comentário