Material de Revisão


Atenção: conteúdos e exercícios aqui podem ir além do que foi ministrado.

Treine respostas por escrito, e para universidade: não escreva só "1+1 = dois", procure explicar a operação de soma.


E, por favor, ao encontrar erros (ex., link inválido), avise.



Chamada-retorno de subrotina

Você deve entender exatamente o que fazem as instruções CALL e RET. Essas duas instruções modificam dois registradores da CPU.

Textos sobre programação assembly e programação de microcontroladores trazem boas explicações a respeito.

Algumas referências:

link1

link2

.

Parâmetros de funções e variáveis locais

Você deve entender ao menos como é tratada uma chamada de função assim: f(123)

link1

Para conhecer mais, você pode procurar deduzir como funciona isto: f (&x).

E por fim, fique sabendo que há três tipos de passagens de parâmetros: (i) por valor (ii) por referência (iii) por cópia-atualização (copy-restore), ou valor-resultado (value-result).

.



Problemas de Revisão


(1) Explique o que é "stack frame", ou "registro de ativação de sub-rotina".

Escreva texto e troque com um colega, para verificar se está claro.

(2) Desenhe o registro de ativação para cada sub-rotina a seguir:

E/S

Conexão de Periféricos e a conversa entre eles e o restante da máquina

Basicamente três métodos que você deve conhecer:

  1. mapeamento em memória;
  2. portas de I/O e
  3. DMA (Direct Memory Access).

Você encontrará esses assuntos nos livros de S.O., em livros de Organização de Computadores e, claro, páginas Internet.

A disciplina de microcontroladores também deve mencionar esses assuntos.

.

Mapeamento em Memória

Aqui um exemplo usando assembly x86:

MOV [666], AX ; não sabemos de escreveu em memória ou em periférico
MOV AX, [666] ; não sabemos se leu da memória ou de um periférico.

A instrução MOV mostrada acima acessa posições de memória.

Ou pode acessar um periférico - você deve entender como isso funciona (= livro).

O mapeamento em memória traz um problema; exemplo dele é o PCI Hole (acesse o link).

.

Portas de E/S.

Ao empregar a segunda técnica, portas de I/O, é preciso fazer modificações na CPU:

É importante conhecer essas instruções (outra vez x86):

OUT 66, AX ; escreve na porta 66
IN AX, 66 ; lê a porta 66

.

DMA

A terceira técnica (DMA) deixa a CPU livre. Você deve entender essa história de cpu livre .

Bom saber também o que é cycle stealing.

Leia a respeito do controlador de DMA.

A Wikipedia em inglês é uma boa pedida. Uma leitura completa deste link é uma ótima revisão do assunto (embora avance para tópicos que não nos interessarão dentro da disciplina).

.

Polling

Localize essa palavra em livros e outros materiais e certifique-se de ter entendido do que se trata.

Associado a essa palavra você deverá encontrar a expressão espera ocupada
ou, em material em inglês, busy waiting .

A Wikipedia em inglês explica porque polling tem um lado negativo.

.

Dispositivos

Apenas conectar periféricos não é o bastante.

Periféricos funcionam de maneiras diferentes, afetando o diálogo com o S.O.

Você deve conhecer a diferença entre dispositivos de caracter e dispositivos de bloco.
Deve ser capaz de exemplificar cada um.

Esse assunto é clássico em livros de S.O.

Você pode encontrar em sites, mas cuidado: procure material em inglês.

Se estiver restrito à português, procure sempre três ou quatro fontes diferentes e compare.

Os livros da biblioteca são a fonte mais segura.

Descritores de Arquivo X Stream

As funções do S.O. permitem controlar diretamente um dispositivo (p.ex., abrir gaveta de CD),
alterar parâmetros como tamanho de buffers do sistema.

Ao utilizar descritores, arquivos são sempre binários. Usando streams, há uma camada adicional de abstração que oferece ao programador arquivos-texto. (Procure no Google, fopen binary file text file )

Buffers

Os buffers de dados funcionam como amortecedores, reduzindo o impacto da diferença de velocidade entre CPU e periféricos.

Considere duas situações: encher, ou esvaziar, uma piscina com uma colher, a partir de uma torneira a 50m de distância.

Traduza essa metáfora para o funcionamento do computador.

Depois disso, pesquise em fóruns de programadores à respeito de buffered I/O e unbuffered I/O.

E/S síncrona e assíncrona

Esses dois tipos de operação de E/S podem ser compreendidos graças a uma analogia.

Imagine que vc faz um pedido de comida em um restaurante que usa senhas.

Após fazer o pedido, você (i) sai para dar uma volta, até a senha ser chamada; ou (ii) fica parado estático na frente do balcão, esperando a preparação?

Agora compare essas duas situações com o que acontece quando você programa um computador. Pense nas funções gets() da linguagem C e LPRINT da linguagem GW-Basic.

Mais um exemplo, execute o código a seguir.

exemplo

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


int main(void) {

int fd = open( /dev/tty , O_NONBLOCK);
int tmp;

char buff[1];

while (1) {

tmp = read(fd, buff, sizeof buff);

if (tmp > 0)
putchar (buff[0]);
else
putchar (-);
}

if (x == buff[0]) break;

printf( \\n\\n\\n fd = %d \\n ,fd);


return 0;
}

E/S assíncrona, mais material.

Os links a seguir vão mais a fundo no problema,
afastando-se de exemplos teóricos e se aproximando do mundo real (que é o que coloca comida na mesa!)

Link 1

Link 2

Link 3 (site IBM)

Link 4 (site IBM)

.

.

Arquivos (tipos) e Pseudo-Arquivos.

Esse é um assunto que é fácil encontrar na rede.

Primeiro, tipos de arquivos; um exemplo aqui. Você precisa entender as diferenças entre text e binary .

Depois, a ideia de pseudo-arquivo. Pesquise o que é o diretório /proc  em computadores com Linux.

1) Faça uma tabela apresentando as principais características dos 3 tipos de I/O.

2) Polling tem uma desvantagem séria: diga qual é.

vc encontrará essa resposta na Wikipedia em inglês (artigo = polling).

3) DMA resolve a desvantagem de polling, mas pode provocar atrasos de acesso à CPU. São duas frases -explique ambas.

vc encontrará essa resposta na Wikipedia em inglês (artigo = polling e depois artigo = DMA).

4) Que vantagem trazem as portas de I/O, comparadas com periféricos mapeados em memória?

você já deve ter respondido isso na pergunta-1: consulte a tabela.
Caso negativo... amplie a tabela com essa informação.

5) Explique diferenças entre dispositivos de caracter e dispositivos de bloco.

livros da disciplina

6) Contraste arquivos texto e binários

sites de programação em C

7) Dê exemplo de um pseudo-arquivo em Linux, explicando sua utilidade.

livros da disciplina; em sala de aula foi mencionado um exemplo, procure mais a respeito do diretório /dev .

8) Explique como buffers de E/S são usados pelo sistema operacional e como eles afetam o funcionamento de aplicativos.

além de anotações de aula, vc pode pesquisar o que programadores discutem em fóruns a respeito de unbuffered i/o.

9) Explique a diferença entre E/S síncrona e assíncrona.

outra vez, uma excelente fonte são fóruns de discussão entre programadores. Pesquise syncronous vs asynchronous i/o

Interrupções

 Este assunto é bastante longo e está na fronteira entre hardware e sistema.

As explicações dos livros são _muito_ boas.

Recomendação = procure a biblioteca.

(1) Qual a diferença entre interrupções de software e de hardware?

Esta pergunta não está aqui apenas para responder a diferença entre as duas coisas e sim para você revisar todo o mecanismo de interrupção.

Preferencialmente, responda a essa pergunta fazendo ILUSTRAÇÕES.

(2) O que há em comum entre interrupções de sw e de hw?

Perceba que este é um complemento da questão anterior, então talvez você já tenha respondido.

Seja como for, reforço: DESENHE o mecanismo.

(3-A) O vetor de interrupção não deveria ser modificado por um aplicativo do usuário. Por que?

Para responder primeiro pense: qual o conteúdo desse vetor?

(3-B) O vetor de interrupção não deveria ser modificado por um aplicativo do usuário. Como o SO pode garantir isso?

Dica-1: Ou seja, como o SO pode garantir que um programa não altere o vetor de interrupção? Pense: onde a CPU guarda o vetor de interrupção, de maneira a impedir que um programa o modifique?

Dica-2: existem outras coisas que um SO/CPU deve guardar fora do alcance de programas? Como o SO/CPU consegue fazer isso?

Muito Importante: Perceba como as perguntas tratam de vários assuntos e não apenas interrupção . Não estude tentando decorar assuntos separados, mas sim encaixando uns nos outros.

Arquiteturas de Sistemas Operacionais

Há dois assuntos a conhecer.

Primeiro, arquiteturas:

Diferenças entre as duas e exemplos de sistemas.

Segundo ponto, nomenclatura comumente usadas para designar tipos de S.O.:

Todo esse material será encontrado facilmente nos livros da disciplina.

Felizmente como o assunto é bastante conhecido, você pode se virar bem com a Wikipedia (prefira em inglês).

Problemas

(1) Explique diferenças entre estas arquiteturas:

(2) Explique motivos que levam a preferir um determinado tipo de arquitetura de S.O. em sistemas críticos (identificando essa arquitetura).

(3) Explique cada um dos termos a seguir:

(4) Classifique o Windows usando a nomenclatura acima.

(5) Um usuário de Windows pressiona ALT+TAB. Explique o que o sistema operacional deve fazer (pense na CPU). Busque ser o mais detalhado possível.

(6) Um usuário faz clique sobre o ícone de um aplicativo. Faça uma (longa) lista com todos os passos que o sistema deve executar, desde o clique do mouse até o instante em que o aplicativo começa a rodar.

(7) Volte ao problema (6) e agora considere que existe um anti-vírus instalado na máquina.

Memória Virtual

Como sempre, material principal = Livros.

 

Visão geral do assunto

Uma explicação geral sobre memória virtual neste link.

Outra explicação boa  aqui .

Entrando em mais detalhe na coisa, as CPUs são diferentes. Se vc for curioso, alguns slides explicando ARM e esta página mostra um pouco sobre memória virtual no x86.

Outra referência, especial para quem gosta de entender mais sobre como o hardware funciona. Se for o caso só passe uma vista de olhos para ver se interessa.

Basu A, Gandhi J, Chang J, Hill MD, Swift MM. Efficient virtual memory for big memory servers.  In ACM SIGARCH Computer Architecture News 2013 Jun 23 (Vol. 41, No. 3, pp. 237-248). ACM.

---------------------------------------------------------

Outra explicação, vários diagramas, inclui um vídeo (inglês).

E ainda  esta página, que se concentra em CPUs x86. Segundo a página é possível armazenar na tabela de páginas um ponteiro para swap.



Tabela Invertida

Os melhores sites que encontrei mostram figuras retiradas de Tanembaum. Acho que a melhor fonte é o livro mesmo.

Uma hora dessas gravo uma explicação específica sobre o assunto.


Algoritmos de substituição.

Aconselho novamente livros.

Mas a página da Wikipedia (em inglês) está ok.

Em versões anteriores da disciplina, alunos tiveram como trabalho realizar gifs animados sobre esse assunto e melhorar a wikipedia em português. Vc pode consultá-la também.

Problemas


1) Re-faça os exemplos de aplicação dos algoritmos de paginação FIFO e FIFO de segunda chance vistos em sala.

(livros da disciplina).


2) Qual a utilidade da memória virtual? Qual o lado ruim da memória virtual?

(pense no que aconteceria se não existisse memória virtual no computador.
Para responder a segunda parte, vc deveria fazer um desenho do hardware e explicar o que existe de ruim no funcionamento. Esse desenho irá permitir revistar todo o funcionamento da memória virtual).


3) Explique o significado e utilidade de: (i) MMU, (ii) swap, (iii) TLB.

(vj desenho feito na resposta p. pergunta 2. Procure entender todo o funcionamento da memória e não apenas decorar o que é TLB).



4) Um computador usa memória paginada, com uma tabela de páginas de 2 níveis. Cada acesso à RAM demora 4 ns. Há uma TLB e cada acesso a ela demora 2 ns. Se há 95% de cache hit, qual a velocidade média de acesso?

(esse problema é muito semelhante aos cálculos de velocidade de acesso a memória com cache hit e com cache miss. Neste caso o resultado é de 2.5 ns).


5) Explique porque alguns processadores usam tabelas de paginação multi-nível.

(livros da disciplina)


6) Explique o que é uma falha de página, porque ela acontece e como é tratada.

(outra vez, livros da disciplina. Palavra chave aqui é Interrupção ).
.

7) Existe alguma razão para que o S.O. restrinja acesso ao arquivo de swap?
.

8) Considere a tabela a seguir.

+-------+--------------+--------------------+----+---+
|página | hora cheg.   | hora acesso | R | M |
+-------+--------------+--------------------+----+---+
| 7        | 101            | 200           | 0 | 0 |
| 3       | 151             | 299           | 0 | 1 |
| 2       | 133             | 188           | 1 | 0 |
| 0       | 176             | 192           | 1 | 1 |
+-------+--------------+--------------------+----+---+


Diga qual página será descartada para cada um destes algoritmos:
* FIFO
* NRU (not recently used)

9) Compare os algoritmos de paginação relógio e NFU.

10) Uma CPU emprega 45 bits de endereçamento. Possui instalados 4 GBytes de RAM. O tamanho das páginas é igual ao das molduras, de 4 KBytes. Nessas condições, diga o tamanho do espaço físico, o tamanho do espaço virtual e o comprimento da tabela de paginação.

A parte da questão que exige mais reflexão é o final. Comprimento da tabela = quantidade de linhas da tabela. Cada linha da tabela representa uma coisa. Você deve calcular quantas dessas coisas existem nesse computador. A conta é bem simples.

11) Para o sistema da questão 10, justifica-se o uso de uma tabela de paginação multi-nivel? Explique sua resposta.

Pela pergunta anterior você já sabe quantas linhas tem a tabela. Cada linha da tabela guarda um ponteiro. Você deve calcular qual o tamanho desse ponteiro: será um byte, dois bytes, quatro bytes? Sabendo quantas linhas tem a tabela e o tamanho de cada ponteiro, você pode calcular o tamanho da tabela, responder e explicar como solicitado.


12) Compare o sistema de tabela de páginas invertidas com uma tabela de páginas normal. Apresente vantagens e desvantagens de cada caso.

Consulte o livro.

Threads

Este assunto é curiosamente variado. Procurando na rede vc encontrará threads de núcleo, threads nativas, threads de usuário, processos leves, co-rotinas, fibras e talvez outros nomes ainda.

Importante: você saber distinguir threads de usuário e de núcleo.

Veja uma descrição aqui.  Ou ainda esta página.

Palestra de Rob Pike, material aqui.

O software Nginx é um exemplo muito interessante. Você pode ler sobre:

Exemplo

A seguir dois exemplos de código, rodam em Linux.

Observação: depois de compilar, rode várias vezes o exemplo e observe como os resultados ficam diferentes na tela.

 

Exemplo C Exemplo C++

/*-----------------------------------

para compilar
g++ threadsAB.cpp -lpthread
-------------------------------------
*/


#include <stdio.h>
#include <pthread.h>

pthread_t tid1, tid2;

void *function (void *arg) {

unsigned long k = 50000;

char x = A + (pthread_self() == tid1);

while (k--) putchar (x);

return NULL;
}

//=====================================

int main (void) {

if (pthread_create (&tid1, NULL, function, NULL)) {puts ( erro1 ); return -1;}
if (pthread_create (&tid2, NULL, function, NULL)) {puts ( erro2 ); return -1;}

pthread_join (tid1, NULL);
pthread_join (tid2, NULL);

return 0;
}

 

/*----------------------------------------
Para compilar
 g++ -std=c++11 -pthread teste.cpp /*---------------------------------------
#include <string>
#include <iostream>
#include <thread>
void f (char letra) {
   int k = 200;
   while (--k)
      std::cout << letra << "\n";
}
int main () {
    std::thread t1 (f, A);
    std::thread t2 (f, B);
    t1.join(); t2.join();
    return 0;
}

Problemas

  1. Escreva definições para os seguintes itens:
  1. Teste suas definições (questão anterior) com um colega, para verificar se são claras e não-ambíguas.
  1. Explique as diferenças entre
  1. Justifique a necessidade de um stack para cada thread.
  1. Um software tem 10 threads, numeradas de 1 até 10. Em que sequência elas são executadas? Explique sua resposta.
  1. Há dois programas multi-thread: A e B. O primeiro, A, utiliza duas threads de kernel. O segundo, B, utiliza três threads de usuário. Suponha que os programas são executados separadamente em um computador quad-core. Explique como as threads serão distribuídas nos núcleos, em cada caso.
  1. As threads de um mesmo processo podem compartilhar recursos? Quais? Explique.
  1. Uma thread de um processo A começa a ler um arquivo em disco e uma thread de outro processo B solicita acesso a outro arquivo do disco. O computador é multi-core. Se você estivesse projetando o S.O., como resolveria esse problema? As duas threads executam juntas? Explique sua resposta.
  1. Um sistema Operacional roda dois processos, A e B; o processo A possui duas threads enquanto o processo B, vinte. Existe o risco de um processo receber maior controle da CPU do que outro? Se sim: explique o motivo e mostre como tratá-lo. Se não, explique o motivo e ilustre com um desenho/diagrama.

Escalonamento de Processos

Os livros da disciplina são as melhores fontes didáticas a respeito de escalonamento.

Para entender ideias e algoritmos de escalonamento, faça uma visita à biblioteca.

Explicações gerais podem ser encontradas na Wikipedia. Os GIFs animados disponíveis lá foram feitos em turmas antigas minhas.

Linux

Um escalonador "de verdade" deve tratar vários detalhes e, normalmente, em sala de aula de graduação só vemos ideias gerais.

Um escalonador usado no Linux é o CFS. Se tiver curiosidade, neste link você encontra uma explicação a respeito. É meio complicado mas vale a pena uma olhadela.

Uma outra descrição aparece nesta página .

 

Problemas

  1. Faça uma lista de critérios de escalonamento e explique-os.
  1. Explique a relação entre PCB (Process Control Block) e escalonador.
  1. Explique o que causa starvation. Cite um algoritmo que não sofre disso e explique a razão.
  1. Um escalonador que dê mais prioridade a processos limitados por CPU faz com que todo o conjunto de hardware do computador fique mais carregado. Um escalonador que fizesse o oposto (prioridade para processos limitados por E/S) obteria o efeito inverso. Isso significa que o segundo escalonador é preferível, uma vez que o que se investiu ao comprar o computador tem mais retorno.
    Comente o texto que está em itálico, justificando ou desmentindo.
  1. Era uma vez dois processos. A estava em execução; B estava na fila de prontos. Explique o que acontece com cada registrador da lista a seguir, quando o processo A muda para o estado I/O e o processo B muda para o estado EXEC:  IP, BASE, LIMITE, AX, SP
  1. Um processo A executava um laço longo, com cálculos. Durante esses cálculos, chegou um pacote de rede que era esperado por outro processo B. Explique o que acontecerá com o processo A, dependendo do escalonador ser preemptivo ou não.
  1. Calcule turnaround, tempos de espera e de resposta para os casos a seguir

Processos =           { Pa, Pb, Pc, Pd};
Hora de Chegada = { 0, 5, 4, 6};
Duração =              { 5, 6, 3, 4};

Algoritmos = FCFS (first come, first served); SJF (shortest job first) ; RR (Round Robin) com quantum = 2 ; SRT (shortest remaining time).

FCFS
Processo Pa CPU = 5 Turnaround 5 Waited 0
Processo Pb CPU = 6 Turnaround 9 Waited 3
Processo Pc CPU = 3 Turnaround 4 Waited 1
Processo Pd CPU = 4 Turnaround 12 Waited 8

SJF
Processo Pa Turn 5 Waited 0
Processo Pb Turn 13 Waited 7
Processo Pc Turn 4 Waited 1
Processo Pd Turn 6 Waited 2

RR
AAAACCBBDDACBBDDBB
Processo Pa Turn 11 Waited 0
Processo Pb Turn 13 Waited 1
Processo Pc Turn 8 Waited 0
Processo Pd Turn 10 Waited 2

SRT
.

Sincronia de Processos

Você deve saber o que é:

Windows

Aqui neste link. você encontrará uma explicação sobre o assunto em site da Microsoft.

Seguindo este outro link , você encontra outra explicação, também da Microsoft só que aplicada (objetivo é falar sobre código).

Alguns exemplos para versões antigas de Windows: neste link um exemplo de código, e aqui mais um.

Linux

Neste link material longo sobre sincronia em Linux

Apple

Algum material nesta página.

 

Problemas

  1. Escreva uma função f() que, se disparada em paralelo várias vezes, não apresenta condição de corrida e, em seguida escreva uma função g() que apresenta o problema. Explique.
  1. No problema anterior, re-analise o código das funções f() e g() indicando onde há e onde não há região crítica.
  1. Explique o que é um deadlock.
  1. Explique as 3 condições que caracterizam uma solução correta de exclusão mútua (você as encontrará nos livros da disciplina).
    obs.: há um autor que acrescenta uma quarta condição de sincronia, mas que pode ser vista como sub-entendida nas anteriores.
  1. A instrução XCHG pode ser usada para controlar o acesso à uma região crítica por 2 processos. Mas, e se forem 4 processos?
  1. Um processo P1 tem a instrução x += x , outro processo P2 tem x -= x e um terceiro processo P3, x *= x . Sabendo que o valor inicial de x era 2, que os processos são concorrentes e não há exclusão mútua, enumere todos os resultados possíveis.
  2. Qual é a diferença entre usar um spinlock e uma primitiva como mutex ou semáforo?.

  3. (spinlock) Ana estava estudando um problema de programação paralela. Há uma região crítica que é acessada por 6 threads diferentes. Ana resolveu implementar uma solução usando um spinlock para cada processo. Diga se a solução funciona ou não e explique o motivo.


.

Deadlock de Recursos do S.O.

Atenção! Não confunda deadlock (que acontece quando um programador se equivoca ao tentar proteger uma região crítica) com deadlock de recursos.

1) Exemplo prático de deadlock neste link.

2) Um texto sobre o assunto; warning: não está a altura dos livros. Bom porque está na internet e é concluído com um exemplo em sistema distribuído.

3) Uma página com explicação e exemplo do algoritmo do banqueiro (lembrando que não é usado na prática, embora seja um queridinho em certas provas e concursos).


1) Explique o que é um deadlock de recursos.

2) Leia, depois explique com suas palavras as condições de ocorrência de um deadlock.

3) Leia em Tanembaum a definição de estado seguro e estado não seguro. Agora explique.

4) Leia a mesma seção do livro com especial atenção à explicação sobre o algoritmo de Dijkstra (bankers algorithm).

Observe esta tabela de alocação, retirada do livro:

processo A B C
possui 3 2 2
máximo 9 4 7

 O sistema possui um TOTAL de 11 unidades do recurso em questão e o processo C solicita mais 3. Se o SO atender ao pedido, o estado resultante é seguro ou não? Explique.

5) Dois ou mais processos podem entrar em deadlocks por utilizar recursos de um SO. Responda: pode haver deadlock de processos que utilizam um Banco de Dados? Explique.

Alocação de Memória

Heap

Heap: observe a figura nesta página sobre Arduino.

Aqui outra imagem; warning, o heap e stack desenhados no quadro, em aula, ocupavam posições invertidas...

Esta figura trata o caso de um program multi-thread.

Alguns slides; exemplo sobre Buddy.

.

Sistemas de alocação

Bitmap

Exemplo usando bitmap.

Outro exemplo de bitmap em um sistema de arquivos (Eventualmente visite também a página dessa figura). Foi mencionado em sala que para responder à malloc() não se empregam bitmaps.

Buddy

Slides mostrando sistema buddy (incluindo variações além do buddy binário).

Curiosidade: o sistema buddy faz parte do slab allocator. Esse alocador era usado pelo kernel do Linux, para satisfazer pedidos do próprio S.O. Foi substituido por slobs e depois por slubs ... (q tbém usam buddy).

Listas

Uma explicação sobre listas ligadas. Uma única lista é usada; cor azul representa alocado e amarelo= livre .

Outro exemplo de listas ligadas. O autor do blog implementa um engine (= um motor) de jogos em IPhone e decidiu criar seu próprio alocador. Crazy, porém um exercício excelente de programação.


1) Explique diferenças entre fragmentação interna e externa.
(é preciso memorizar esses termos)

2) Diga em que situações acontece fragmentação interna. Repita para externa.
(Esta pergunta pode levar a uma revisão de como arquivos são alocados em disco)

3) Compare a gerência de memória usando bitmaps com a gerência de memória usando listas ligadas. Aponte vantagens e desvantagens de cada caso.
(em computação, as coisas são comparadas em geral em relação a duas características: tempo e espaço. Pense nelas.)

5) Suponha que um programa chama a API do Sistema Operacional, para liberar um bloco de memória que está no endereço 666. Explique como é realizada a liberação de memória se for empregado o sistema de bitmap.


6) Um computador usa gerência de memória por listas ligadas. A lista de espaços livres tem quatro registros:

10KB -> 5 KB -> 9 KB -> 7 KB

São feitos pedidos de alocação nesta sequência: 6KB, 5 KB, 6 KB, 5 KB.

6a) Aplique BEST_FIT e desenhe a lista resultante.

6b) Diga qual o maior bloco de memória que pode ser alocado.

Vc deve terminar com 9 Kbytes de memória livre e o maior bloco terá 5 KB

7) Repita o problema anterior com FIRST_FIT.

Sobra mesma quantidade de memória livre, mas o maior bloco restante será de 4 KB.

8) Um computador possui 128 bytes livres e usa alocação c/ sistema buddy.

Represente graficamente o estado de alocação depois que as seguintes chamadas tenham sido executadas em sequência:
p1 = malloc (33)
p2 = malloc (30)
p3 = malloc (15)
p4 = malloc (3)
free (p2)
free (p3)

(como no exemplo anterior, a cada passo modifique o desenho resultante até chegar ao resultado final. Vc precisa saber como funciona o buddy system; se não lembrar, nem tente começar a responder.)

9) O sistema buddy de alocação é pouco usado para gerenciar RAM. Qual é a razão?
volte à questão 1...

Sistemas de Arquivos

Discos rígidos

Link com informações sobre HD (basta ver figuras).

Informação complementar: bad sectors.

Informação complementar: update de curiosidade científica - apenas em discos antigos seria possível ler dados depois de sobre-escritos. Texto aqui.

SSD


Informação complementar: visão geral construção interna SSD (warning, a página é meio confusa)

Informação complementar: aqui, veja figura explicando comando TRIM.

Informação complementar: problemas com Android. - sem comando TRIM antes da versão 4; e arquivos não-deletados pelo sistema.

Sistemas de arquivos.

Um link com algumas figuras resumindo FAT, inodes, NTFS.

Uma página comentando só sobre i-nodes.

Comparação curta e objetiva entre FAT e NTFS.

Journaling (basta olhar a figura desta página).

Soft link / hard link: uma página inteira com exemplos de comandos em Linux.

Informação complementar: hard/soft links no Windows (usando NTFS).

Informação complementar: lista comparando ext2, ext3, ext4 (usados no Linux).

Informação complementar: tabelas internas da FAT.

1) Explique quando acontece fragmentação (interna/externa) em disco e na memória.

Faça dois desenhos para explicar os dois tipos de fragmentação.

2) O que é o comando TRIM, entre SO e SSD?

3) O que são meta-dados? Exemplifique.

(sem dica aqui).

4) Onde os meta-dados são armazenados usando FAT? E se for usado o sistema ext* do Linux?

(outra vez sem dica; consulte livro e verifique links sugeridos aqui no Moodle).

5) Compare a principal estrutura de dados da FAT com a usada no Unix (inode).

6) O que é o mecanismo de Journaling?

7) Como é gravado um sub-diretório dentro do disco?

8) Se um diretório é um arquivo, é possível usar fopen() em um diretório? Explique.

Para responder, suponha um programa que usa fopen( dir , wb ).
9) Qual a diferença entre soft e hard link?

10)Explique o que é cluster de disco, página de memória, página deSSD, moldura de memória.

Segurança

Atributos de segurança Unix

Unix / Linux

Atributos em uma única imagem (abrirá em outra janela).

Nesta página, uma explicação bastante completa.

Atributos NTFS

Informação complementar: observe apenas a figura nesta página.

.

Métodos de implementação

Uma figura mostrando ACL (access control list) na prática.

DAC/MAC/RBAC - as explicações e comparações muitas vezes são confusas. Sugestão - leia apenas o primeiro parágrafo de cada link a seguir:

1) Há dois usuários: tiago, do grupo programadores; e denise, do grupo de testadores. Cada um deles faz login e encontra os arquivos a seguir no Linux. Explique o que cada um - tiago e denise - conseguem fazer com cada diretório e arquivo.

drwxr-x--- 3 paulo testadores 14K Jul 1 12:02 tmp
drwxr-x--- 3 jorge programadores 4.0K Jan 7 21:12 source
-rw-r----- 3 paulo programadores 115K Jul 1 15:02 testeC
-rw-r--r-- 3 paulo programadores 73K Jul 1 12:02 menuC
-rw-rw---- 3 ana programadores 9K Jul 1 12:02 calculoC
-rwxrwxr-- 3 carlos testadores 28K Jul 1 12:02 progExec

.

2) Explique o que é uma ACL.

sem dicas aqui.

3) Explique a principal diferença entre MAC e DAC.

final da primeira página deste texto.

Tópicos Complementares

Máquinas Virtuais

 Links interessantes:

-----------------------------------------------------------------

Curiosidade (não faz parte da matéria): você conhece a linguagem Java e programa nela?

Se afirmativo, teste seus conhecimentos verificando o que é novidade para você neste texto.

(1) Elabore um quadro comparativo entre execução nativa e execução em máquina virtual, tratando destes aspectos:

  1. desempenho (= capacidade de processamento)
  2. segurança (= privacidade)
  3. robustez (= tolerância a falhas)
  4. eficiência (= hardware alocado versus necessidade).

Esta pergunta faz uma revisão geral do assunto máquina virtual. Faça uma tabela com 2 colunas (nativo/virtual) e 4 linhas e procure explicar cada tópico.

(2) Explique por que JIT é importante para Java.

Sem dicas aqui - vc deve ler (a resposta é imediata).

(3) Normalmente JIT produz saída em memória e não em disco. (i) explique o impacto disso em desempenho e segurança; (ii) explique a relação entre isso e o bit NX; (iii) explique por que sua resposta à (ii) mostra uma falha de segurança.

Leia o texto sobre JIT na Wikipedia (em inglês).

Instruções Privilegiadas

Um link a respeito de Instruções Privilegiadas

Outro link, a respeito do super-usuário.

(1) Diferencie instruções privilegiadas de instruções normais .

(2) Apresente exemplos dos dois tipos de instruções.

(3) Explique onde fica o usuário-administrador dentro dessa história.