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.
Compilação
Compiladores é uma disciplina do curso que aparece mais ou menos na
metade da grade de um curso de computação. Ela estuda a definição de
linguagens de programação e técnicas para construir compiladores.
O S.O. controla os programas de um computador e também fornece coisas de que eles precisam, como acesso a arquivos. Se nós entendermos como é um programa por dentro, torna-se mais fácil entender as conexões que existem com o sistema.
(1) Qual a utilidade de um arquivo de cabeçalho (header file) e qual a diferença em relação a um arquivo de biblioteca?
Uma boa fonte de informação é o livro de Kernighan & Ritchie sobre linguagem C (são os autores da linguagem).
Outra dica, pesquise GCC preprocessor .
(2) Qual a diferença entre compilação e ligação (linking)?
Esta resposta será derivada da resposta anterior. Responda a (1) e a (2) está automaticamente pronta.
(3) Explique como a CPU Pentium utiliza o registrador IP.
Esta pergunta remete à disciplina pré-requisito = Organização de Computadores .
Faça uma pesquisa Google e mate a pergunta em 30 segundos.
(4) Explique como funcionam as instruções CALL, RET. Pesquise o funcionamento da instrução assembler JMP (jump).
Mesmo comentário (pré-requisito).
(5) A instrução assembler MOV serve para movimentar dados. Por exemplo, MOV AX, 12 guarda
o número 12 dentro do registrador AX do processador Pentium. Diga o que
acontece se uma CPU x86 executasse uma instrução MOV IP, 666.
Questões 3-4-5 relacionadas.
(6) Dois computadores iguais
receberam dois SOs diferentes: Windows e Linux. Se a CPU é a mesma,
porque um mesmo programa executável não pode rodar em ambas máquinas?
Vários motivos discutidos em sala de aula.
Verifique sua resposta com colegas.
(10) Pesquise o que é um arquivo .DLL e a diferença entre ligação estática e dinâmica. Pesquise o que é um overlay.
Esta se resolve com Google.
Conselho : faça um desenho / diagrama junto com texto de resposta.
Relocação
Este assunto é importante porque tem relação direta com Segurança dentro de S.O.
Livros como Silberschatz tocam no assunto, apenas não o tratam em
baixo nível. Na verdade esse tópico pertence à uma disciplina
específica, normalmente denominada de "Montadores, Ligadores e
Carregadores". Ela trata da construção de programas a partir de
assembly, e do problema de carregar código em RAM e executá-lo. Assim, é
um excelente complemento à disciplina de Compiladores.
Aqui em S.O. vamos conhecer um pouco a respeito pois isso permite entender melhor como o sistema vê um aplicativo.
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:
void f() {;}
void f(int i) {;}
int f() {return 0;}
int f(int i) {int k = 1; return ++k;}
Segurança
Segurança é um item muito amplo dentro de S.O.: envolve programas, arquivos, usuários, conexões de rede.
Neste ponto do curso estamos preocupados com execução de um programa que recém-chegou à memória RAM.
... cada processo tem o seu próprio espaço de endereçamento = ?.
(1B) Explique como o conjunto hardware+SO implementa o espaço de endereçamento.
Importante: esta pergunta é diferente da anterior.
(2) Escreva um programa C que tenta fugir de seu espaço de endereçamento. Explique seu funcionamento.
Pergunta importante de revisão. Se você não conseguir implementar código que teste segurança, então (i) ou você não entendeu o assunto, ou (ii) você precisa estudar mais programação.
(3) As linguagens Pascal, Java, C#, Python, Go, VBasic (entre outras) não sofrem de problemas com ponteiros perdidos ou índices inválidos de arrays. Pesquise e discuta isso.
(4) Explique a utilidade do bit NX em CPUs x86.
(5) Explique a utilidade da tecnologia ASLR (address space layout randomization) implementada em CPUs x86.
(6) Explique como é realizado o ataque de buffer overflow.
(7) Mostre graficamente como é implementada a stack canary protection e explique.
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:
mapeamento em memória;
portas de I/O e
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:
o barramento de controle ganha uma linha adicional para distinguir entre periférico e RAM;
a CPU ganha instruções específicas de I/O.
É 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.
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:
monolítico
microkernel
Diferenças entre as duas e exemplos de sistemas.
Segundo ponto, nomenclatura comumente usadas para designar tipos de S.O.:
mono/multi programado
mono/multi usuário
mono/multi processado
tempo compartilhado
tempo real (hard / soft)
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:
monolítico
microkernel
(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:
mono/multi programado
mono/multi usuário
mono/multi processado
tempo compartilhado
tempo real (hard / soft)
(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.
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.
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? .
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.
Teste suas definições (questão anterior) com um colega, para verificar se são claras e não-ambíguas.
Explique as diferenças entre
chaveamento de processo
chaveamento de threads
chaveamento de contexto.
Justifique a necessidade de um stack para cada thread.
Um software tem 10 threads, numeradas de 1 até 10. Em que sequência elas são executadas? Explique sua resposta.
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.
As threads de um mesmo processo podem compartilhar recursos? Quais? Explique.
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.
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.
Faça uma lista de critérios de escalonamento e explique-os.
Explique a relação entre PCB (Process Control Block) e escalonador.
Explique o que causa starvation. Cite um algoritmo que não sofre disso e explique a razão.
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.
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
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.
Calcule turnaround, tempos de espera e de resposta para os casos a seguir
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 é:
região crítica
exclusão mútua
recurso compartilhado
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
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.
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.
Explique o que é um deadlock.
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.
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?
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.
Qual é a diferença entre usar um spinlock e uma primitiva como mutex ou semáforo?.
(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.
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.
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: update de curiosidade científica - apenas em
discos antigos seria possível ler dados depois de sobre-escritos. Texto
aqui.
Wright, Craig, and Dave Kleiman. Overwriting hard drive data: The great wiping controversy. Information systems security. Springer Berlin Heidelberg, 2008. 243-257.
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.
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.
Para responder bem à essa pergunta, desenhe um diagrama; você
deve incluir informação que foi apresentada nas aulas sobre compilação,
formato de executáveis...
2) Explique em linhas gerais o que é um vírus polimórfico/metamórfico.
A Wikipedia pode ajudar.
3) Explique como/quando aplicar cada uma das seguintes técnicas anti-vírus:
armazenar comprimento arquivo
armazenar checksum
armazenar assinatura
simular execução
Você deverá consultar suas anotações de sala de aula; difícil dar dica sem dar resposta aqui.
4) Explique diferenças entre Linux/Windows/Mac O/S que explicam número de vírus e infecções.
Dois conceitos-chave: super-usuário e repositórios. Desenvolva a resposta.
5) Como um S.O. pode impedir ou reduzir infecção por vírus?
Dica = UAC. Desenvolva a resposta. Trate de mais de um Sistema Operacional.
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:
desempenho (= capacidade de processamento)
segurança (= privacidade)
robustez (= tolerância a falhas)
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.