Sistemas Operacionais


Aqui eu disponibilizo material para capacitar o aluno a identificar os princípios básicos de funcionamento de um sistema operacional, analisando seus principais requisitos,recursos e comparar as várias implementações disponíveis.



Códigos

O Simulador de Algoritmos de Escalonamento é um objeto de aprendizagem que auxilia o professor no ensino de algoritmos de escalonamento. Também pode ser usado por alunos em simulação e testes de exercícios. Acesse aqui o manual, slides sobre escalonamento e um arquivo de exemplo.

Threads sem Sincronismo é um programa em C que ilustra a concorrência de Threads sem o uso de sincronização. Os problemas de concorrência podem ser apresentados através de uma simulação de preempção forçada ao utilizar o Sleep().

Uma solução ao problema apresentado está em Threads com Semáforos, resolvendo um problema clássico de produtores e consumidores, utilizando threads e semáforos para sincronização.

Um programa que demonstra as prioridades de processos e threads no Windows encontra-se em Threads com Prioridades.

Para maior entendimento de concorrência e técnicas de sincronização de processos e threads, os seguintes programas demonstram a execução simultânea de threads ao manipular uma fila para inserção e remoção de dados:

1. Fila sem Sincronismo demonstra a execução simultânea de threads sem sincronização;

2. Fila com Sincronismo via Variáveis de Travamento e Fila com Sincronismo via Sleep e Wakeup apresentam propostas de solução falhas.

3. Fila com Sincronismo via Semáforos apresenta uma solução de sincrnização que realmente funciona.

Para demonstrar os conceitos supracitados em Java, Threads sem Sincronismo (Java) demonstra a execução concorrente de Threads, enquanto Threads com Sincronismo (Java) apresenta o uso de Monitores.

 

Desafio

Qual dos dois códigos a seguir executa mais rapidamente? Por que?

int vet[1000] [4096];

 

void testeMemo1() {

    int i, j;

    for(i = 0; i < 1000; i++)

        for(j = 0; j < 4096; j++)

             vet[i][j]  = 0;

}

 

void testeMemo2() {

    int i, j;

    for (i = 0; i < 4096; i++)

        for(j = 0; j < 1000; j++)

            vet[j][i] = 0;      

}

A resposta está no esquema de paginação multinível, usando a TLB e caches e pode ser requerida a edeyson at gmail

Ambiente

Você encontrará códigos escritos com o Microsoft Visal Studio, Java e em Dev-C/C++. Portar do MVS para o Dev-C/C++ é simples e alguns exemplos mostram isso.

Bibliografia

SILBERSCHATZ, GALVIN & GAGNE. Sistemas operacionais: Conceitos e aplicações. São Paulo: Campus.

MACHADO, Francis & MAIA, Luiz. Arquitetura de Sistemas Operacionais. Rio de Janeiro: Livros Técnicos e Científicos.

TANENBAUM, Andrew. Sistemas Operacionais Modernos. Ed. Prentice-Hall do Brasil.

DEITEL, Harvey M. Introduction to Operating Systems. Ed. Addison Wesley

SILBERSCHATZ & GALVIN. Operating System Concepts. Ed. Addinon Wesley.

STALLINGS, Willam, Operating Systems, Prentice Hall.

TANENBAUM, Andrew. Sistemas Operacionais - Projeto e Implementação. Ed. Prentice-Hall do Brasil.

Slides

Meus slides apresentam uma Introdução aos Sistemas Operacionais com alguns Conceitos de Arquitetura e a descrição de Tipos de SO e Estruturas de SO.

Como conceitos fundamentais são descritos Processos e as políticas de Escalonamento de Processos e Threads, bem como a Sincronização de Processos e Threads e como ela pode produzir Deadlock.

O material é concluído com a Gerência de Memória seguida pela Gerência de Arquivos.

Sistemas de Arquivos

Algumas implementações de sistemas de arquivos são descritas para aumentar seu entendimento. São elas: EXT3, FAT32 e NTFS.

Para o entendimento de segurança e desempenho explica-se o funcionamento de RAID, bem como princípios básicos de Entrada e Saída.

Testes

Suponha um sistema com Páginas de 4 KB, Registro de Endereço de Memória com 64 BITS.

Pergunta-se:

1. Quantos bits possui o deslocamento dentro da página?
2. Quantos bits possui o endereço de Página Virtual?
3. Quantas linhas terá a Tabela de Páginas?