Fundamentos de Sistemas Operacionais
UnB-\(\gamma\)
Table of Contents
- 1. Aulas
- 1.1. Aula 1 19_jul
- 1.2. Aula 2 21_jul processos
- 1.3. Aula 3 26_jul processos
- 1.4. Aula 4 28_jul processos
- 1.5. Aula 5 02_ago exercícios
- 1.6. Aula 6 04_ago exercicios
- 1.7. Aula 7 09_ago
- 1.8. Aula 8 11_ago
- 1.9. Aula 9 16_ago threads
- 1.10. Aula 10 18_ago exercícios
- 1.11. Aula 11 23_ago semáforos
- 1.12. Aula 12 25_ago
- 1.13. Aula 13 30_ago
- 1.14. Aula 14 01_set
- 1.15. Aula 15 06_set trabalho
- 1.16. Aula 16 08_set memória
- 1.17. Aula 17 13_set
- 1.18. Aula 18 15_set
- 1.19. Aula 19 20_set
- 1.20. Aula 20 22_set
- 1.21.
Aula 2127_set semana_academica - 1.22.
Aula 2229_set semana_academica - 1.23. Aula 23 04_out
- 1.24. Aula 24 06_out
- 1.25.
Aula 2511_out feriado - 1.26. Aula 26 13_out
- 1.27. Aula 27 18_out
- 1.28. Aula 28 20_out
- 1.29. Aula 29 25_out
- 1.30. Aula 30 27_out
- 1.31.
Aula 3101_nov feriado - 1.32. Aula 32 03_nov
- 2. Antes de Começar
- 3. Plano de Aulas
- 4. Monitor
- 5. Presença
- 6. Notas
Table of Contents
- 1. Aulas
- 1.1. Aula 1 19_jul
- 1.2. Aula 2 21_jul processos
- 1.3. Aula 3 26_jul processos
- 1.4. Aula 4 28_jul processos
- 1.5. Aula 5 02_ago exercícios
- 1.6. Aula 6 04_ago exercicios
- 1.7. Aula 7 09_ago
- 1.8. Aula 8 11_ago
- 1.9. Aula 9 16_ago threads
- 1.10. Aula 10 18_ago exercícios
- 1.11. Aula 11 23_ago semáforos
- 1.12. Aula 12 25_ago
- 1.13. Aula 13 30_ago
- 1.14. Aula 14 01_set
- 1.15. Aula 15 06_set trabalho
- 1.16. Aula 16 08_set memória
- 1.17. Aula 17 13_set
- 1.18. Aula 18 15_set
- 1.19. Aula 19 20_set
- 1.20. Aula 20 22_set
- 1.21.
Aula 2127_set semana_academica - 1.22.
Aula 2229_set semana_academica - 1.23. Aula 23 04_out
- 1.24. Aula 24 06_out
- 1.25.
Aula 2511_out feriado - 1.26. Aula 26 13_out
- 1.27. Aula 27 18_out
- 1.28. Aula 28 20_out
- 1.29. Aula 29 25_out
- 1.30. Aula 30 27_out
- 1.31.
Aula 3101_nov feriado - 1.32. Aula 32 03_nov
- 2. Antes de Começar
- 3. Plano de Aulas
- 4. Monitor
- 5. Presença
- 6. Notas
1. Aulas
1.1. Aula 1 19_jul
1.1.1. Conteúdo
- Apresentação da disciplina em live no YouTube
- Apresentação do Plano de Aulas
- Previsão de Avaliações
- Método de cálculo de presença
- Método avaliativo e gradação
- Apresentação do Plano de Aulas
1.1.2. Vídeos para aula de hoje
1.1.3. Material de apoio
Para a aula de hoje é recomendado que o aluno veja os vídeos disponibilizados na seção Antes de Começar
1.1.4. Exercícios básicos para relembrar
É possível que vários alunos tenham perdido a prática durante o período de férias, e isso faz com que a ferrugem dificulte o início da retomada de implementação de problemas. Para isso estou liberando uma lista pública com alguns problemas selecionados.
- Lista pública no CD-MOJ
- Resolva os exercícios propostos na PRIMEIRA lista pública do CD-MOJ.
Para ganhar credenciais de acesso à lista, envie uma mensagem para
@mojinho_bot
, no telegram AQUI, com o conteúdo:participar bcr-EDA2-2021_1-lista1-relembrando
1.2. Aula 2 21_jul processos
Nesta aula é discutido, o processo básico de boot do sistema operacional e como se define o conceito de processo.
1.2.1. Vídeo Complementar
1.2.2. Exercícios
- Questões para pesquisar no livro texto
- Enumere e explique resumidamente as principais responsabilidades de um sistema operacional.
- Qual é a diferença entre modo usuário e modo kernel? Por que esta distinção é feita?
- Descreva como são implementados os seguintes eventos:
- chamada de sistema,
- tratamento de interrupção, e
- tratamento de sinais.
- Quais são as semelhanças e diferenças entre estes eventos?
- chamada de sistema,
- Qual é a diferença entre um sistema monolítico e um baseado em camadas?
- Sobre Processos
- Abra um terminal e execute o comando:
pstree -c -p
. Descreva o que está vendo (dica: veja o vídeo complementar)
- Abra um terminal e execute o comando:
1.3. Aula 3 26_jul processos
1.3.1. Vídeo complementar e seus cortes
1.3.2. Tópicos e materiais
Nesta aula foi discutido o processo básico de fluxo de inicialização de processos e os elementos básicos necessários para que o kernel possa controlar o processo.
Foi disponibilizado um conjunto de vídeos (nas seções acima) que complementam a visão geral dos processos dentro dos ambientes UNIX.
Também foi discutido os estados que um processo pode assumir e também em qual circunstância acontece a migração dos estados. Abaixo segue uma imagem representando os estados e suas possíveis transições.
Figure 1: Estado que os processos podem assumir
Para complementar conteúdo passado nos vídeos faça a leitura do seguinte material do livro do prof. Mazieiro:
1.3.3. Exercícios
- Sobre Processos
- Familiarize-se com a chamada:
fork(2)
,wait(2)
,execl(3)
; - Descreva o funcionamento das funções listadas acima.
- Familiarize-se com a chamada:
- Na figura 1 são mostrados três estados de processos. Na teoria, com três estados poderia haver seis transições, duas para cada estado. Contudo, somente quatro transições são mostradas. Há alguma circunstância na qual uma delas ou ambas as transições não ilustradam possam ocorrer?
- O que é um processo Zumbi? Explique como que um processo passe para o estado de Zumbi.
- Escreva um programa que gere um processo Zumbi.
- Considere a seguinte parte de um programa: prof_Orlando
... p=fork(); a=fork(); printf("Sistemas Operacionais\n"); ...
- Quantas vezes é apresentada “Sistemas Operacionais”? Justifique.
- Quantos processos são criados pelo programa?
- Faça um programa que crie 2 processos e: prof_Orlando
- Escreve
Eu sou o pai
no processo pai; - Escreve
Eu sou o 1o filho
no primeiro filho; - Escreve
Eu sou o 2o filho
no segundo filho.
- Escreve
- Considere o seguinte pedaço de código em C: prof_Orlando
1: for(i=0;i<4;i++) 2: pid=fork(); 3: printf("FSO\n");
- Quantos processos são criados por este programa? Justifique.
- Quantas vezes é apresentado “FSO”? Justifique.
1.4. Aula 4 28_jul processos
1.4.1. Material Adicional
1.4.2. Exercícios
- Lista pública no CD-MOJ
- Resolva os exercícios propostos na lista pública do CD-MOJ.
Para ganhar credenciais de acesso à lista, envie uma mensagem para @mojinhobot, no telegram AQUI, com o conteúdo:
participar bcr-FSO-2021_1-processos-e-sinais
- Os usuários são compartilhados com as listas de EDA2
- O que é um processo Zumbi? Escreva um programa que crie processos zumbis.
- Resolva http://www.brunoribas.com.br/so/2019-1/pratica/multiplicacao-matriz.html
- Resolva http://wiki.inf.ufpr.br/maziero/doku.php?id=so:criacao_de_processos
- Resolva http://www.dei.isep.ipp.pt/~orlando/so2/processos.htm
- Familiarize-se com as chamadas:
execve(2)
,clone(2)
- Considere a seguinte parte de um programa prof_Orlando
int main() { ... pid2=0; for(i=0;i<2;i++) { pid=fork(); if(pid==0) pid2=fork(); if(pid2==0) printf("Exame de SO\n"); } ... }
- Quantas vezes é apresentada a frase
Exame de SO
? Justifique Veja a discussão deste problema no vídeo abaixo:
- Quantas vezes é apresentada a frase
- Tendo um vetor de inteiros com mil posições, crie um processo e faça o seguinte: prof_Orlando HOT
- Os dois processos (pai e filho) fazem o seguinte cálculo:
resultado[i]=dados[i]*4+20
- Cada processo é responsável pelo cálculo de \(500\) posições do
vetor
dados
, colocando o resultado no vetorresultado
- Os resultados devem ser apresentados seguindo a ordem do vetor (de \([0,499]\) e depois \([500,999]\))
- Os dois processos (pai e filho) fazem o seguinte cálculo:
- Faça um programa que crie 6 processos e: prof_Orlando HOT
- Cada processo escreve \(200\) números:
- 1o processo \([0,200]\);
- 2o processo \([201,400]\);
- 3o processo \([401,600]\);
- 4o processo \([601,800]\);
- 5o processo \([801,1000]\);
- 6o processo \([1001,1200]\);
- O processo pai tem de esperar que TODOS os processos filho terminem
- Cada processo escreve \(200\) números:
- Tendo um vetor de \(1000\) posições, faça um programa que crie 5 processos e: prof_Orlando HOT
- Dado um número, procurar esse número no vetor;
- Cada processo filho, procura \(200\) posições;
- O processo que encontrar o número, deve imprimir a posição do vetor onde se encontra. Também deve “retornar” como valor de saída o número do processo (1,2,3,4,5);
- Os processos que não encontrarem o número devem “retornar” como valor de saída o valor \(0\);
O processo pai tem de esperar que todos filhos terminem e imprimir o número do processo onde esse número foi encontrado (1,2,3,4,5)
NOTA: O vetor não possui números repetidos
1.5. Aula 5 02_ago exercícios
A aula de hoje é em carácter assíncrono, onde os alunos devem implementar os exercícios propostos tanto nas listas divuldadas nas aulas anteriores quanto os exercícios que estão disponibilizados abaixo.
O professor estará retirando dúvidas por e-mail no horário da aula.
1.5.1. Cortes de Aula com exercícios resolvidos
1.5.2. Vídeos Completos que tratam alguns exercícios
1.6. Aula 6 04_ago exercicios
1.7. Aula 7 09_ago
1.7.1. Material Adicional
- Leia o Capítulo 6 - Escalonamento de Tarefas do livro do Professor
Maziero.
- Assista o vídeo do prof. Maziero sobre Escalonamento de tarefas.
- Slides sobre Escalonamento do prof. Fabio Rocha
1.7.2. Exercícios
- Resolva os exercícios propostos no Capítulo 6 - Escalonamento de Tarefas do livro do Professor Maziero.
1.8. Aula 8 11_ago
1.9. Aula 9 16_ago threads
1.9.1. Complemente o conteúdo
- Leia a seção 5.4 (Threads) do livro (português):
- Material sobre threads (inglês)
- Material sobre threads e semáforos
- Seção 2.2 do livro texto da disciplina (Sistemas Operacionais do Tanenbaum)
1.9.2. Exercícios
- Considere que tem definido na função main duas strings em que a primeira tem o seu primeiro nome e a segunda o último. Faça uma função que receba como parâmetros uma string e escreva essa string no monitor. Implemente um programa em que cada string é apresentada por um thread diferente. prof_Orlando
- Considere que tem um array com cinco posições, sendo cada posição constituída pelo número, nome e morada. Faça uma função que recebe como parâmetros uma estrutura desse tipo e imprima o conteúdo dessa estrutura. Implemente um programa que crie 5 threads, “passando” como argumentos uma estrutura desse array (Ex: 0 primeiro thread fica com a primeira posição do array, etc.) prof_Orlando
- Tendo um array de inteiros com 1200 posições, pretende-se calcular
resultado[i] = dados[i]*4 + 20
. Crie duas threads : prof_Orlando
- o primeiro thread calcula as primeiras 400 posições;
- o segundo as seguintes 400;
- o resto é calculado na função main
- Depois dos cálculos terminarem, devem ser apresentados os valores no monitor (pode ser feito na função main).
- Dado um array de inteiros com mil posições, crie 5 threads: prof_Orlando
- Dado um número, procurar esse número no array.
- Cada thread, procura 200 posições.
- O thread que encontrar o número, deve imprimir a posição do array onde se encontra. Também deve “retornar” como valor de saída o número do thread (1, 2, 3, 4, 5).
- Os threads que não encontrarem o número devem “retornar” como valor de saída o valor 0.
- A função main tem de esperar que todos os threads terminem e imprimir o número do thread onde esse número foi encontrado (1, 2, 3, 4, 5).
- Nota: O array não tem números repetidos.
- Faça um programa que crie 5 threads. Cada thread é responsável por calcular 200 posições do array resultado (resultado[i] = dados[i]*2+10). Os threads devem imprimir os resultados segundo a ordem do array. prof_Orlando
- Lista pública no CD-MOJ
- Resolva os exercícios propostos na lista pública do CD-MOJ.
Para ganhar credenciais de acesso à lista, envie uma mensagem para @mojinhobot, no telegram AQUI, com o conteúdo:
participar bcr-FSO-2021_1-threads
- Os usuários são compartilhados com as listas de fixação de EDA2 e FSO
1.10. Aula 10 18_ago exercícios
Aula dedicada à resolução dos exercícios de Threads.
1.10.1. Cortes de exercícios resolvidos
1.11. Aula 11 23_ago semáforos
Assista o vídeo abaixo, a partir dos 8 minutos (clicando em play, vai para a posição, Os timestamps do vídeos foram feitos pelo Iuri Severo):
1.11.1. Material complementar
- Leia os capítulos e veja os vídeos da Parte III: Interação entre tarefas, do livro do prof. Maziero.
- Leia o material sobre semáforos do prof. Orlando
1.11.2. Exercícios
- Leia o panorama geral de semáforos no linux
sem_overview(7)
- Execute o comando
man 7 sem_overview
- Execute o comando
- Familiarize-se com as funções:
sem_init(3)
sem_wait(3)
sem_post(3)
sem_destroy(3)
sem_getvalue(3)
- Exercício sobre semáforo prof_WagnerZola
Faça duas funções em linguagem C, que possam ser usadas por THREADS COOPERANTES. A função
get_ticket()
retorna um número inteiro positivo ÚNICO a qualquer thread que chamá-la. Protótipo:int get_ticket();
A função
return_ticket(int)
deve receber “de volta” um ticket (número inteiro), supostamente obtido anteriormente viaget_ticket()
, de modo que esse ticket possa ser “reutilizado” porget_tickets
subsequentes.void return_ticket(int t);
Mostre (explique) brevemente porque sua
get_ticket()
retorna inteiros ÚNICOS, i.e., nunca retorna valores repetidos.OBS: Caso seja necessário, sua
get_ticket()
pode ter um número máximo de tickets (NMAX), nesse caso, ele deve retornar \(-1\) para indicar que não pode mais retornar valores novos.Veja o vídeo abaixo, para ver a discussão do exercício. Mas assista somente após de tentar resolver o exercício.
- Tente implementar o exercício de multiplicação de matrizes com Threads, conforme descrito em AQUI (há um exemplo de solução)
- Experimente com 2,4 e 8 threads.
1.12. Aula 12 25_ago
1.13. Aula 13 30_ago
1.14. Aula 14 01_set
Aula assíncrona dedicada à implementação do Trabalho 1
1.15. Aula 15 06_set trabalho
1.16. Aula 16 08_set memória
Leia o material abaixo:
1.17. Aula 17 13_set
1.17.1. Exercícios
- Considere um sistema cuja gerência de memória é feita através de partições variáveis.
- Nesse momento, existem as seguintes lacunas (áreas livres): 10K, 4K, 20K,18K, 7K, 9K, 12K e 13K, nessa ordem.
- Quais espaços serão ocupados pelas solicitações: 4K, 10K e 6K, nessa ordem, se:
- first-fit for utilizado?
- best-fit for utilizado?
- worst-fit for utilizado?
- Calcule o número de bits para página, quadro e deslocamento.
- Memória lógica = 512K, Memória física = 512K, Tamanho de página = 8K
- Tamanho de página = 4K, número de páginas = 8, número de quadros = 16
- O que é paginação?
- Qua é a diferença entre paginação e segmentação?
- Considere que os processos da tabela abaixo devem ser executados em um SO com paginação.
- A memória total é de 64K, o tamanho das páginas é de 4K e o SO ocupa 8K. Mostre como seria a alocação de quadros para cada processo.
Processo Mem. (K) T. Chegada T. Execução P1 8 0 10 P2 6 1 15 P3 15 2 10 P4 5 3 14 P5 10 15 5 - Qual a diferença entre fragmentação interna e externa da memória principal?
- Qual a principal diferença entre os sistemas que implementam paginação e segmentação?
- Para que serve o bit de validade nas tabelas de páginas e segmentos?
- Nos sistemas com paginação, a rotina para tratamento de page faults está residente na memória principal
- Esta rotina pode ser removida da memória em algum momento?
- O que aconteceria se esta rotina não estivesse na memória principal durante a ocorrência de um page fault?
- Descreva como ocorre a fragmentação interna em um sistema que implementa paginação
- Na figura abaixo está representada um esquema de paginação que utiliza 4 bits para índice da página e 12 bits para deslocamento. prof_Islene
- Considerando esta tabela, indique para cada endereço virtual o
endereço físico correspondente ou escreva page fault
0010 0000 0000 0111
0011 0000 1010 0000
0100 0000 0000 0101
1111 1111 1111 1111
0000 0000 0000 0000
- Considerando esta tabela, indique para cada endereço virtual o
endereço físico correspondente ou escreva page fault
- Seria possível e/ou viável implementar as conversões de endereços realizados pelas MMU em software, ao invés de usar um hardware dedicado? Por quê?
1.18. Aula 18 15_set
1.19. Aula 19 20_set
1.20. Aula 20 22_set
- Veja o primeiro vídeo a partir do minuto 38
1.20.1. Material Adicional
1.20.2. Exercícios
- O que é memória virtual?
- Quais das seguintes técnicas e estruturas de programação são “boas” para um ambiente de paginação por demanda? Quais delas são “más”? Explique suas respostas.
- pilha
- Busca Sequencial
- Busca Binária
- Operações em vetor
- Simulação
- Considere os seguintes algoritmos de substituição de páginas. Classifique estes algoritmos em uma escala de cinco pontos do “ruim” ao “perfeito” de acordo com a sua taxa de erros de página. Separe os algoritmos afetados pela anomalia de Belady daqueles que não o são.
- Substituição LRU
- Substituição FIFO
- Substituição Ótima
- Substituição da segunda chance
- Considere a seguinte sequência de referências de páginas:
1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6
- Quantos erros de pághinas iriam ocorrer para os seguintes
algoritmos de substituição , considerando um, dois, três,
quatro, cinco, seis ou sete quadros? Lembre-se de que todos os
quadros estão inicialmente vazios, de modo que a primeira
página de cada um implicará em um erro de página.
- Substituição LRU
- Substituição Ótima
- Substituição do Relógio
- Substituição WSClock
- Quantos erros de pághinas iriam ocorrer para os seguintes
algoritmos de substituição , considerando um, dois, três,
quatro, cinco, seis ou sete quadros? Lembre-se de que todos os
quadros estão inicialmente vazios, de modo que a primeira
página de cada um implicará em um erro de página.
- Você consegue imaginar alguma situação em que dar suporte à memória virtual seria uma má ideia e o que se ganha quando não é necessário o suporte a memória virtual? Explique
- Exercícios do capítulo 3 do Tanembaum
- Qual é a diferença entre paginação e segmentação? Qual a principal diferença entre os sistemas que implementam paginação e segmentação? Por quê alguns sistemas implementam Segmentação com Paginação?
- Observe o programa abaixo:
4: #define PAGESIZE 4096 5: #define N 500000 6: char mat[N][PAGESIZE]; 7: void funcao_A(char c) { 8: int i, j; 9: for (i = 0; i < N; i++) 10: for (j = 0; j < PAGESIZE; j++) 11: mat[i][j] = c; 12: } 13: void funcao_B(char c) { 14: int i,j; 15: for (j = 0; j < PAGESIZE; j++) 16: for (i = 0; i < N; i++) 17: mat[i][j] = c; 18: } 19: int main() { 20: funcao_A('*'); 21: funcao_B('-'); 22: return 0; 23: }
Considere que o seu sistema utiliza paginação e que o endereço
mat[i][j]
é calculado da seguinte forma:mat[i][j] = mat + (i*PAGESIZE+j)*sizeof(char)
- Qual função (
funcao_A
oufuncao_B
) irá, provavelmente, ser executada mais rápido? - Descreva duas razões relacionadas ao gerenciamento de memória que justificam a sua resposta acima.
- Qual função (
1.21. Aula 21 27_set semana_academica
- Semana acadêmina, não haverá encontro.
1.22. Aula 22 29_set semana_academica
- Semana acadêmina, não haverá encontro.
1.23. Aula 23 04_out
1.24. Aula 24 06_out
1.25. Aula 25 11_out feriado
1.26. Aula 26 13_out
1.26.1. Material de apoio
- Livro de SO do Prof. Maziero DINF | ResearchGate
- Leia e resolva os exercícios da Parte VI (Gestão de arquivos)
- Apresentações de alunos a respeito de sistema de arquivos
- Familiarize-se com as chamadas:
fopen(3)
,fclose(3)
,fprintf(3)
,fscanf(3)
fread(3)
,fwrite(3)
fclose(3)
open(2)
,read(2)
,write(2)
,close(2)
Lembre-se que o número entre parenteses significa a página do manual acessado pelo comando
man
. Logo, para ler o manual daopen(2)
a chamada correta éman 2 open
.
1.26.2. Exercícios
- A alocação contígua de arquivos leva a uma fragmentação do disco, explique como essa fragmentação ocorre
- Essa fragmentação é interna ou externa?
- Faça uma analogia com a gerência de memória
- É possível criar um link simbólico para um arquivo que não existe? E um hard link? Justifique a sua resposta
- Por que razão o sistema UNIX não permite hard links de diretórios?
- A respeito das imagens abaixo
Figure 2: Lista Ligada
Figure 3: FAT
Figure 4: INODE
- A figura 2 apresenta dois arquivos armazenados na forma de
uma lista ligada de blocos em disco. A figura 3 apresenta
estes mesmos arquivos em uma tabela de alocação em memória (tipo
FAT - File Allocation Table). A figura 4 é um exemplo
de i-node.
- Compare e explique as vantagens e desvantagens de se utilizar o armazenamento dos arquivos por lista ligada e por tabela de alocação de memória.
- Comente vantagens da utilização de i-nodes, como o representado na figura, sobre o uso das tabelas em memória
- Para arquivos menores que um bloco (ou um i-node) qual é o desperdício no disco? Como o EXT4 minimiza esse impacto?
- A figura 2 apresenta dois arquivos armazenados na forma de
uma lista ligada de blocos em disco. A figura 3 apresenta
estes mesmos arquivos em uma tabela de alocação em memória (tipo
FAT - File Allocation Table). A figura 4 é um exemplo
de i-node.
- O início de um mapa de bits do espaço livre parece-se com isto depois que a partição de disco é formatada pela primeira vez:
1000 0000 0000 0000
(o primeiro bloco é utilizado pelo diretório raiz). O sistema sempre busca blocos livres a partir do bloco com o menor número; assim, depois de escrever um arquivo A, que usa seis blocos, o mapa de bits se parece com isto:1111 1110 0000 0000
. Mostre o mapa de bits depois de cada uma das seguintes ações adicionais
- O arquivo B é escrito, usando cinco blocos
- O arquivo A é removido
- O arquivo C é escrito, usando oito blocos
- O aquivo B é removido
- O que aconteceria se o mapa de bits, ou lista de blocos livres contendo a informação sobre blocos de disco livres tivessem sido completamente perdidos em decorrência de um desastre? Há algum modo de recuperar o disco desse desastre ou adeus, disco? Discuta sua resposta, separadamente, para os sistemas de arquivos UNIX e para o FAT-12.
- Um certo sistema de arquivos usa blocos de disco de 2KB. O tamanho mediano do arquivo é de 1KB, qual a fração de espaço em disco que será desperdiçada? Você acha que o desperdício para um sistema de arquivos real será mai alto ou mais baixo que esse? Explique.
1.27. Aula 27 18_out
1.27.1. MINITAR
Esboce os conceitos básicos para implementar o exercício abaixo, e inicie uma implementação básica. Reflita sobre os desafios e estratégias.
Você deve implementar um sistema de arquivamento de arquivos, onde deverá ser criado um arquivo único capaz de agregar diversos arquivos, mantendo seus nomes e atributos, além, de claro, seu conteúdo.
O uso comum do tar
é por juntar arquivos em um único arquivão, e
extrair todos ou um subconjunto dos arquivos guardados.
Para ver o uso comum do tar veja: https://pt.wikipedia.org/wiki/TAR
O formato padrão do TAR pode ser visto em: https://www.gnu.org/software/tar/manual/html_node/Standard.html
A sua implementação, simplificada, deverá conter os seguintes comandos:
- Colocar vários arquivos (e diretórios), exemplo:
$ minitar -cf arquivao.mtar arquivo1.txt diretorio/
Listar os arquivos presentes no arquivo e seus tamanhos, veja um exemplo:
$ minitar -tf arquivao.mtar arquivo1.txt 20MB diretorio/ (5 arquivos) foto.jpg 5MB notas.txt 4KB tcc1.tex 4KB tcc1.odt 1MB chat.c 200KB
- Extrair os arquivos do arquivo. Neste comando os arquivos presentes no arquivao.mtar deverá ser extraído para o diretório corrente de execução, exemplo:
$ minitar -xf arquivao.mtar $ ls foto.jpg diretorio/ $ ls diretorio/ foto.jpg notas.txt tcc1.tex tcc1.odt chat.c
- Como você faria para armazenar os arquivos em sua estrutura de dados?
- A estratégia de armazenamento mudaria se o seu programa manipulasse somente arquivos TEXTO? E arquivos Binários?
- Qual a relação deste problema para o exercício String Dicionário?
1.28. Aula 28 20_out
- Incício do trabalho final da disciplina
1.29. Aula 29 25_out
- Aula de dúvidas sob demanda.
1.30. Aula 30 27_out
- Tempo para desenvolver as atividades do Trabalho 2 e dúvidas por e-mail no período da aula.
1.31. Aula 31 01_nov feriado
1.32. Aula 32 03_nov
- Finalização da disciplina e notas disponibilizadas
2. Antes de Começar
Nesta disciplina é esperado que o aluno tenha conhecimento básico da
linguagem C
tais como:
- Ponteiros
- Strings
Leitura da Entrada padrão
As subseções abaixo elencam alguns vídeos que recaptulam o conhecimento necessário.
2.1. Material no Youtube
Vídeos com material relacionado ao conteúdo esperado para uso na disciplina.
Tenho disponibilizado vários materiais em meu canal no YouTube, por favor, considere assinar o canal e deixar o joinha :)
2.1.1. Revisão de Ponteiros
Segue abaixo a playlist da revisão de ponteiros no Youtube. Por ora são 5 vídeos que exploram o que é necessário saber para a disciplina de EDA-2.
2.1.2. Strings em C
Aqui um apanhando geral em como se manipula strings na linguagem C. Em uma série que chamei de “Umas Palavras sobre String”
2.1.3. SCANF
O SCANF
é uma poderosa função capaz de ler dados da entrada padrão
(e de outros arquivos com suas aliases como fscanf(3)
.
Na série Detonando o SCANF temos, além do uso básico da função abordo algumas curiosidades sobre as funções.
3. Plano de Aulas
O plano de ensino e plano de aulas é um PLANO e pode sofrer modificações ao longo do semestre de acordo com o rendimento da turma.
Curso: | Engenharia de Software | Período Letivo | 2021/1 |
Disciplina: | F. Sistemas Operacionais | Código | |
Carga Horária: | 60 horas | Créditos | 04 |
3.1. Ementa
- Princípios e características dos sistemas operacionais
- Conceitos
- Estrutura
- Chamadas de sistema
- Gerencia de processos e threads, gerencia de memória
- escalonamento
- concorrência
- deadlock
- Gerencia de dispositivos de entrada e saída
- princípios de hardware e software de E/S
- discos
- relógios
- Sistemas de arquivos
- arquivos
- diretórios
- gerenciamento de espaço em disco
- consistência do sistema de arquivos
- Segurança e proteção
- criptografia
- autenticação de usuário
- ataques
- Virtualização.
3.2. Horários das aulas e atendimento
- Aulas:
- {segunda,quarta}-feira, das 16:00 às 17:50
- Atendimento:
- por e-mail nos dias e horário das aulas
- caso necessário será aberto uma CALL para sanar as dúvidas
- por e-mail nos dias e horário das aulas
- E-mail:
- bruno.ribas EM unb.br
- Página:
3.3. Método
Aula expositiva por meio de vídeos no Youtube (gravados ou em live stream), conversas periódicas em vídeo conferências com os alunos nos horários das aulas, quadro branco (representado pelo tablet), listas de exercícios.
3.4. Critérios de Avaliação
- A avaliação será feita por um conjunto de trabalhos com peso variável, ou seja, o primeiro trabalho tem peso 1, o segundo peso 2, e assim por diante.
- As notas serão compostas por um número inteiro no intervalo \([0,100]\);
- As avaliações serão compostas por questões, podendo ser, a
critério do professor, teóricas e/ou práticas
- O método de entrega será combina previamente com os alunos, podendo ser realizada por meio: do corretor automático MOJ; questionários no sistema SIGAA e/ou; submissão por e-mail para o professor;
- Qualquer tentativa de fraude nas provas implicará em média ZERO no semestre para todos os envolvidos.
3.4.1. Presença
A presença na disciplina se dará pela entrega das avaliações, listadas acima.
A entrega DENTRO do prazo é obrigatória para todos os alunos.
3.4.2. Menção Final
As notas serão calculadas conforme a equação abaixo:
\begin{align} M_F = \frac{ \sum_{i=1}^{N}{i \cdot A_i}}{\sum_{i=1}^{N}{i}} \end{align}3.4.3. Critérios de aprovação
Obterá aprovação no curso o aluno que cumprir todas as exigências listadas abaixo:
- \(M_F >= 50\); e
- Presença em \(75\%\) ou mais das aulas.
Por fim, a menção final do curso é dada de acordo com a tabela abaixo:
\(M_F\) | Menção | Descrição |
\(0\) | SR | Sem rendimento |
\([1,29]\) | II | Inferior |
\([30,49]\) | MI | Médio Inferior |
\([50,69]\) | MM | Médio |
\([70,89]\) | MS | Médio Superior |
\([90,100]\) | SS | Superior |
3.5. Cronograma
Data | Atividade |
Semana 1 | Introdução ao conceito de sistemas operacionais |
Semanas {2,3} | Gerência de Processos |
Semanas {4,5,6} | Processos e Threads |
Semanas {7,8,9,10} | Gerenciamento de memória |
Semanas {11,12,13,14} | Sistema de Arquivos |
Semanas {15,16} | Virtualização, Segurança e Proteção |
3.6. Bibliografia
- SILBERSCHATZ, A.; GAGNE, G.; GALVIN, P.B. Obra: Operating System Concepts Editor: Wiley Edição 8, Ano: 2008
- TANENBAUM, A.S. Obra: Sistemas Operacionais Modernos Editor: Pearson Edição 3, Ano: 2010
- DEITEL, H.M., DEITEL, P.J. e CHOFFNES,D.R. Obra: Sistemas Operacionais. Editor: Prentice Hall Edição 3, Ano: 2005
- SILBERCHATZ, A.; GAGNE, G.; GALVIN, P.B. Obra: Sistemas operacionais com Java Editor: Campus. Edição: 7, Ano: 2008
- Tanenbaum, Andrew S., and Albert S. Woodhull. Operating Systems Design and Implementation. Pearson, 3, edition, 2006.
- Mitchell, Mark, Jerey Oldham, and Alex Samuel. Advanced linux programming. New Riders, 2001.
- SILBERCHATZ, A.; GAGNE, G.; GALVIN, P.B., Sistemas operacionais com Java, Campus, 7 a Ed, 2008.
- MACHADO, F.B., MAIA, L.P. ”Arquitetura de Sistemas Operacionais”, 4a edição, LTC, 2007.ISBN: 8521615485,
ISBN-13: 9788521615484.
- SHAY, W., Sistemas Operacionais, Makron Books, 1996
- DAVIS, W. Sistemas Operacionais,: uma visão sistemática, Campus, 1991
4. Monitor
- Eduardo Vieira Lima
- Contato: @edvlima
- Horário de atendimento: Sexta 18h-19h
- Combine com o monitor antes.
5. Presença
- Vazio
6. Notas
AVx
são as avaliaçõesPP
é a porcentagem de presença (consolidada nesta tabela no fim do semestre)- Na seção anterior você pode ver o acompanhamento das presenças
situação
é a situação final na disciplina, gerada após todas avaliações- As penalidades nas avaliações são relativas às chamadas ao
getlog
do MojinhoBot
matricula | PP | AV1 | AV2 | MM | situacao | nome |
190041871 | 100= 100 | 058= 058 | 72 | MS | ** | |
160000572 | 100= 100 | 100= 100 | 100 | SS | ** | |
180012002 | 100= 100 | 058= 058 | 72 | MS | ** | |
202028211 | 100= 100 | 058= 058 | 72 | MS | ** | |
190044799 | 100= 100 | 058= 058 | 72 | MS | ** | |
180030272 | 100= 100 | 100= 100 | 100 | SS | ** | |
190024950 | 100= 100 | 058= 058 | 72 | MS | ** | |
180030345 | 100= 100 | 058= 058 | 72 | MS | ** | |
190025379 | 100= 100 | 100= 100 | 100 | SS | ** | |
180074741 | 100= 100 | 100= 100 | 100 | SS | ** | |
170085023 | 100= 100 | 058= 058 | 72 | MS | ** | |
190056843 | 100= 100 | 100= 100 | 100 | SS | ** | |
160025834 | ** | ** | 0 | SR | ** | |
190026243 | 100= 100 | 100= 100 | 100 | SS | ** | |
180149687 | 100= 100 | 058= 058 | 72 | MS | ** | |
150058462 | 100= 100 | 100= 100 | 100 | SS | ** | |
190042419 | 100= 100 | 058= 058 | 72 | MS | ** | |
190026758 | 100= 100 | 058= 058 | 72 | MS | ** | |
180041592 | 100= 100 | 058= 058 | 72 | MS | ** | |
190012307 | 100= 100 | 086= 086 | 90 | SS | ** | |
170032591 | 100= 100 | 058= 058 | 72 | MS | ** | |
190027088 | 100= 100 | 058= 058 | 72 | MS | ** | |
120116928 | 100= 100 | 058= 058 | 72 | MS | ** | |
180113259 | 100= 100 | 058= 058 | 72 | MS | ** | |
180145088 | 100= 100 | 058= 058 | 72 | MS | ** | |
170010341 | 100= 100 | 058= 058 | 72 | MS | ** | |
180017870 | 100= 100 | 100= 100 | 100 | SS | ** | |
190014032 | 100= 100 | 040= 040 | 60 | MM | ** | |
190046091 | 100= 100 | 058= 058 | 72 | MS | ** | |
180042041 | 100= 100 | 043= 043 | 62 | MM | ** | |
170011925 | 100= 100 | 100= 100 | 100 | SS | ** | |
180113585 | 100= 100 | 100= 100 | 100 | SS | ** | |
180102087 | 100= 100 | 100= 100 | 100 | SS | ** | |
180122258 | 100= 100 | 058= 058 | 72 | MS | ** | |
170105342 | ** | ** | 0 | SR | ** | |
180122606 | 100= 100 | 058= 058 | 72 | MS | ** | |
180102656 | 100= 100 | 100= 100 | 100 | SS | ** | |
170145514 | 100= 100 | 100= 100 | 100 | SS | ** | |
190030291 | 100= 100 | 058= 058 | 72 | MS | ** | |
180102711 | 100= 100 | 100= 100 | 100 | SS | ** | |
180042238 | 100= 100 | 100= 100 | 100 | SS | ** | |
180123203 | 100= 100 | 100= 100 | 100 | SS | ** | |
170013910 | 100= 100 | 100= 100 | 100 | SS | ** | |
190030879 | 100= 100 | 100= 100 | 100 | SS | ** | |
180103431 | 100= 100 | 058= 058 | 72 | MS | ** | |
180103580 | 100= 100 | 100= 100 | 100 | SS | ** | |
180022237 | 100= 100 | 100= 100 | 100 | SS | ** | |
190033088 | 100= 100 | 040= 040 | 60 | MM | ** | |
180105256 | 100= 100 | 100= 100 | 100 | SS | ** | |
170050939 | 100= 100 | 040= 040 | 60 | MM | ** | |
170080102 | 100= 100 | 100= 100 | 100 | SS | ** | |
180125885 | 100= 100 | 058= 058 | 72 | MS | ** | |
180022962 | 100= 100 | 058= 058 | 72 | MS | ** | |
180105604 | 100= 100 | 058= 058 | 72 | MS | ** | |
180145231 | ** | ** | 0 | SR | ** | |
180127535 | 100= 100 | 058= 058 | 72 | MS | ** | |
180024868 | 100= 100 | 058= 058 | 72 | MS | ** | |
190055201 | 100= 100 | 100= 100 | 100 | SS | ** | |
170111288 | 100= 100 | 100= 100 | 100 | SS | ** | |
190047968 | 100= 100 | 058= 058 | 72 | MS | ** | |
170153975 | ** | ** | 0 | SR | ** | |
180011308 | 100= 100 | 058= 058 | 72 | MS | ** | |
180108344 | 100= 100 | 058= 058 | 72 | MS | ** | |
190019085 | 100= 100 | 086= 086 | 90 | SS | ** | |
190019158 | 100= 100 | 058= 058 | 72 | MS | ** | |
190048221 | 100= 100 | 058= 058 | 72 | MS | ** | |
170114333 | 100= 100 | 100= 100 | 100 | SS | ** | |
170114929 | 100= 100 | 100= 100 | 100 | SS | ** | |
180138545 | 100= 100 | 040= 040 | 60 | MM | ** | |
190020377 | 100= 100 | 100= 100 | 100 | SS | ** | |
190020601 | 100= 100 | 100= 100 | 100 | SS | ** | |
190038969 | 100= 100 | 058= 058 | 72 | MS | ** | |
190044403 | 100= 100 | 100= 100 | 100 | SS | ** | |
180068229 | 100= 100 | 100= 100 | 100 | SS | ** | |
190020903 | 100= 100 | 100= 100 | 100 | SS | ** | |
180029240 | 100= 100 | 100= 100 | 100 | SS | ** | |
160149410 | 100= 100 | 100= 100 | 100 | SS | ** | |
180078640 | 100= 100 | 100= 100 | 100 | SS | ** | |
média | ** | 100 | 76 | ** | ** | Média da turma |