====== CI-1215 - Cronograma 2026/1 ======
* As atividades indicadas com :!: serão avaliadas.
* Os projetos são **individuais**.
* Os projetos devem ser entregues usando o [[http://moodle.c3sl.ufpr.br|Moodle]].
* Entregas em ± **2 semanas** (confira os prazos no Moodle).
* Somente projetos defendidos serão considerados.
* Leia com atenção as [[teaching:Regras das Atividades de Laboratório]].
=== Links úteis ===
* [[https://bbb.c3sl.ufpr.br/b/car-chu-evg|Sala online]] (BBB do DINF/UFPR)
* [[socm:start|Livro-texto da disciplina]]
=== Regras de avaliação ===
A média final da disciplina é calculada com as notas das provas e dos projetos solicitados (entre 0 e 100), da seguinte forma:
Mprova = (Pv1 + Pv2) / 2
Mproj = (P0 + P4 + ... + Pn) / (num_projs - 1)
Media = (Mprova + Mproj) / 2
----
=== 25/2: Aula 1 ===
Conteúdo teórico:
* Apresentação da disciplina
* Conceitos básicos
----
=== 27/2: Aula 2 ===
Conteúdo teórico:
* Estrutura de um SO
Projeto:
* Visão geral do [[ppos-v2:start|Ping-Pong OS]] (versão 2)
* [[ppos-v2:Filas genéricas]]
----
=== 4/3: Aula 3 ===
Conteúdo teórico:
* Arquiteturas de SOs
Leitura complementar:
* [[http://www.minix3.org/docs/login-2007.pdf|Minix 3 (microkernel)]]
* [[http://queue.acm.org/detail.cfm?id=2566628|Unikernels]] (exemplos: [[https://mirage.io/|MirageOS]] e [[https://osv.io/|OSv]])
----
=== 6/3: Aula 4 ===
Conteúdo teórico:
* O conceito de tarefa
Projeto:
* [[ppos-v2:Trocas de contexto]]
* :!: P1: [[ppos-v2:Tarefas cooperativas]]
----
=== 11/3: sem aula ===
----
=== 13/3: sem aula ===
----
=== 18/3: Aula 5 ===
Conteúdo teórico:
* Implementação de tarefas - processos
* Exemplos: [[Criação de processos]]
* [[unix:Gestão de processos]]
Projeto:
* P2: [[ppos-v2:Despachante de tarefas]]
----
=== 20/3: sem aula ===
:-)
----
=== 25/3: Aula 6 ===
Conteúdo teórico:
* Implementação de tarefas - threads
* Exemplos: [[Criação de threads]]
----
=== 27/3: Aula 7 ===
Conteúdo teórico:
* Escalonamento de tarefas
Projeto:
* :!: P3: [[ppos-v2:Escalonador por prioridades]]
----
=== 1º/4: Aula 8 ===
Conteúdo teórico:
* Escalonamento de tarefas (cont.)
* Tópicos em escalonamento
Leitura complementar:
* [[https://man7.org/linux/man-pages/man7/sched.7.html|Manpage de escalonamento do Linux]]
* [[https://www.trustedreviews.com/news/what-is-the-intel-thread-director-4158842|Intel Thread Director]]
----
=== 8/4: Aula 9 ===
Conteúdo teórico:
* Comunicação entre tarefas
Projeto:
* P4: [[ppos-v2:Preempção por tempo]]
----
=== 10/4: Aula 10 ===
Conteúdo teórico:
* Mecanismos de comunicação
* Exemplos: {{:so:mqrecv.c|}}, {{:so:mqsend.c|}}, {{:so:shm.c|}}
Leitura complementar:
* [[https://docs.microsoft.com/en-us/windows/win32/winmsg/messages-and-message-queues|Windows messaging]]
----
=== 15/4: Aula 11 ===
Conteúdo teórico:
* Coordenação entre tarefas
* O problema da [[exclusão mútua]]
Projeto:
* :!: P5: [[ppos-v2:Relógio e contabilização]]
----
=== 17/4: Aula 12 ===
Conteúdo teórico:
* Mecanismos de coordenação
Leitura complementar:
* [[https://docs.microsoft.com/en-us/windows/win32/sync/using-semaphore-objects|Semáforos em Windows]]
* [[https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html|Semáforos em Java]]
----
=== 22/4: Aula 13 ===
Conteúdo teórico:
* Problemas clássicos
* Exemplos: {{ :so:filosofos.c |}}
Projeto:
* P6: [[ppos-v2:Tarefas que esperam]]
Leitura complementar:
* Exercícios sobre concorrência do [[http://greenteapress.com/wp/semaphores|Pequeno Livro de Semáforos]]
* //Reader/Writer locks// em [[https://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_rwlock_init.html|POSIX]], [[https://docs.microsoft.com/en-us/windows/win32/sync/slim-reader-writer--srw--locks|Windows]] e [[https://docs.oracle.com/javase/10/docs/api/java/util/concurrent/locks/ReadWriteLock.html|Java]]
----
=== 24/4: Aula 14 ===
Laboratório:
* [[Exercícios de coordenação]] (aula prática)
----
=== 29/4: Aula 15 ===
Conteúdo teórico:
* Impasses
Projeto:
* :!: P7: [[ppos-v2:Tarefas que dormem]]
----
=== 6/5: Aula 16 ===
* :!: Prova 1 (introdução, gestão de tarefas, interação entre tarefas)
----
=== 8/5: Aula 17 ===
Conteúdo teórico:
* Hardware de entrada/saída
Projeto:
* P8: [[ppos-v2:Spinlocks e semáforos]]
Leitura complementar:
* Exemplo de I/O: [[https://wiki.osdev.org/CMOS|Leitura do RTC (Real-Time Clock) da placa-mãe]]
----
=== 13/5: Aula 18 ===
Conteúdo teórico:
* Software de entrada/saída
* Exemplo: {{:so:lp.c|}} e {{:so:lp.h|}} - //driver// básico de porta paralela (núcleo Línux 0.99.7, 1993).
----
=== 15/5: Aula 19 ===
Conteúdo teórico:
* Dispositivos de armazenamento
Projeto:
* P9: [[ppos-v2:Sistema produtor-consumidor]]
Leitura complementar:
* [[https://youtu.be/wtdnatmVdIg|How do Hard Disk Drives Work?]] (vídeo)
----
=== 20/5: Aula 20 ===
Conteúdo teórico:
* Dispositivos de armazenamento (cont.)
----
=== 22/5: Aula 21 ===
Conteúdo teórico:
* O conceito de arquivo
Projeto:
* :!: P10: [[ppos-v2:Filas de mensagens]]
----
=== 27/5: Aula 22 ===
Conteúdo teórico:
* Uso de arquivos
Leitura complementar:
* [[https://gavv.net/articles/file-locks/|File locks in Linux]]
* [[https://learn.microsoft.com/en-us/windows/win32/fileio/locking-and-unlocking-byte-ranges-in-files|File locks in Windows]]
* Exemplo: acesso a arquivo por mapeamento em memória: {{ :so:fread-mmap.zip |}}
----
=== 29/5: Aula 23 ===
Conteúdo teórico:
* Sistemas de arquivos
Projeto:
* :!: P11: [[ppos-v2:Alocador de memória]]
* :!: P12: [[ppos-v2:Acesso ao disco]]
Leitura complementar:
* [[https://opensource.com/article/17/5/introduction-ext4-filesystem|An introduction to Linux's EXT4 filesystem]]
* [[https://en.wikipedia.org/wiki/NTFS|NTFS - Wikipedia]]
----
=== 3/6: Aula 24 ===
Conteúdo teórico:
* Sistemas de arquivos (cont.)
----
=== 5/6: sem aula ===
:-)
----
=== 10/6: Aula 25 ===
Conteúdo teórico:
* Diretórios e atalhos
----
=== 12/6: Aula 26 ===
Conteúdo teórico:
* Hardware de memória
* Exemplos de localidade de referência: {{so:tlb-lin.c}}, {{so:tlb-col.c}}
----
=== 17/6: Aula 27 ===
Conteúdo teórico:
* Uso da memória
* Localização de variáveis e constantes: {{:so:variaveis.c|}}
* Alocação de memória
Leitura complementar:
* {{:so:dlmalloc-jemalloc.pdf |Funcionamento dos alocadores DLMalloc e JEMalloc}}
* [[https://www.microsoft.com/en-us/research/blog/mimalloc-a-high-performance-scalable-memory-allocator-for-the-modern-era/|Microsoft mimalloc]]
----
=== 19/6: Aula 28 ===
Conteúdo teórico:
* Paginação em disco
* Exemplo de //thrashing//: {{so:thrash.c}}
* Tópicos em gerência de memória
Leitura complementar:
* [[https://cachemon.github.io/SIEVE-website/blog/2023/12/17/sieve-is-simpler-than-lru/|O algoritmo de substituição Sieve]]
----
=== 24/6: Aula 29 ===
Conteúdo teórico:
* Paginação em disco (cont.)
----
=== 26/6: Aula 30 ===
* :!: Prova 2 (gestão de entrada/saída, gestão de arquivos, gestão da memória, PingPongOS)
----
=== 1°/7: Exame final ===
* :!: Mesmo conteúdo das provas 1 e 2
----