MO806/MC914 - Tópicos em Sistemas Operacionais MC853 - Projeto em Sistemas de Programação

Recomendações iniciais

As tarefas a serem executadas ao longo da disciplina deverão estar adequadas aos perfis e interesses dos estudantes. O material que temos disponível na Internet sobre o tema da disciplina é riquíssimo e você será protagonista do seu processo de aprendizagem. Utilize as recomendações a seguir como base e escolha vídeos/textos para analisar durantes as próximas duas semanas.

O próximo relatório será um resumo e visão crítica do material analisado, podendo ser uma entrega individual ou em grupo. O formulário estará disponível em breve no Google Classroom. Note que suas respostas serão úteis não só para documentar o seu aprendizado, mas também para o aprimoramento deste guia de referências.

Base Teórica em Sistemas Operacionais

Se você classificou sua base teórica como Fraca ou Ausente, pode ser uma boa ideia investir um tempo para o entendimento de conceitos básicos. Você pode começar

Se você considera que tem bons conhecimentos, mas precisa de uma pequena revisão, pode seguir para as próximas etapas e deixar para fazer um estudo mais aprofundado do subtema específico que será abordado no seu projeto.

Se sua base é Muito boa ou Excelente: vamos estudar as comunidades e o código!

Software Livre

Para ter sucesso em uma comunidade de desenvolvimento de software, não basta entender apenas os detalhes técnicos. É importante entender tambĂ©m a dinâmica de desenvolvimento, o poder associado aos grandes projetos, as influências das grandes empresas, as relações de hierarquia, etc. Tudo isso sem esquecer de aspectos éticos e dos direitos dos usuários.

Já conhece bem estes conceitos e está interessado em se aprofundar? Gostou do tema "Impactos sociais/políticos do uso de Software Livre"? Procure um texto/vídeo mais avançado sobre o assunto e faça a sua análise.

Kernel Linux

Se você ainda não teve nenhum ou pouquíssimo contato com o código, sugiro o experimento inicial proposto pelo LKCamp. É provável que tenhamos uma participação especial de um membro deste grupo no horário da disciplina. Aguarde!

Se você gostaria de fazer um miniexperimento mais elaborado, sugiro a escrita de um pseudo device driver, como o descrito em Linux Device Drivers.

Outra opção para guiar os experimentos iniciais é este curso gratuito da Linux Foundation Training: A Beginners Guide to Linux Kernel Development.

Já fez experimentos deste porte e gostaria de saber um pouco mais sobre o ciclo de desenvolvimento do Kernel? Veja esta palestra do Gustavo Padovan em 2016 no FISL 17. Talvez o Linus Torvalds tenha perdido um pouco do seu poder desde então... se tiver interesse pesquise um pouco mais sobre o assunto.

git

A maior parte dos alunos matriculados indicou familiaridade com os conceitos de sistemas de controle de versões, em particular com o git. Se você nunca usou, indico a princípio o git tutorial do tutorialspoint, mas pretendo colocar outras referências aqui em breve...

Você sabia que o git foi idealizado pelo Linus Torvalds em 2005 para auxiliar o desenvolvimento do Kernel Linux? E foi o próprio Linus que escreveu a primeira versão deste software? Se quiser conhecer um pouco mais sobre esta história, veja o artigo The History of Git: The Road to Domination in Software Version Control.

Linguagem C

Se o seu projeto inclui um experimento com o Kernel Linux e a declaração a seguir parece grego para você, pode ser interessante investir em aprender um pouco mais sobre esta linguagem.

struct file_operations {
	struct module *owner;
	loff_t (*llseek) (struct file *, loff_t, int);
	ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
	ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
	ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
	ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
        /* ... */
}

Você sabia que o Kernel é escrito em C mas se beneficia dos conceitos de orientação a objetos? Você acha que códigos que contenham goto são de baixa qualidade? Pesquise um pouco sobre Design Patterns no Kernel Linux. Em particular, você pode ler sobre Object-oriented design patterns in the kernel.

Escolha do tema

Já tem uma boa base para realizar o projeto, mas não tem nenhuma ideia? Veja algumas conferências da área para saber sobre problemas e propostas recentes:

Muitas pesquisas científicas são feitas utilizando o Kernel Linux. Veja, por exemplos, artigos e vídeos publicados na Usenix.

Contribuições para as indicações

Tem mais alguma referência interessante ou crítica sobre o material apresentado? Coloque no mural do Classroom que depois eu atualizo aqui...