Apresentação
Disciplina ministrada na Faculdade Cenecista de Joinville (FCJ), campus Joinville/SC, para o curso de Bacharel em Sistemas de Informação, durante os semestres de 2009.
Objetivo
Apresentar conceitos básicos de sistemas operacionais visando proporcionar aos acadêmicos o entendimento da arquitetura de sistemas operacionais necessário quando em situações de análise e gerência de projetos.
Ementa
Princípios de Sistemas Operacionais. Gerenciamento de processos, dispositivos, arquivos e memória. Escalonamento de processos. Deadlock. Thread. Linguagem de máquina. Microinstruções. Carregadores. Ligadores. Programação concorrente. Montadores. Principais sistemas operacionais.
Horário
- Quarta-feira, 2 últimos horários.
Softwares Utilizados
Outros Materiais
Aulas
- Aula 01
- Aula 02
- Aula 03
- Aula 04
- Aula 05
- Aula 06
- Aula 07
- Aula 08
- Prática em laboratório 01
- Aula 09. Memória Virtual. Revisão de algoritmos de substituição de páginas.
- Aula 10. Memória Virtual (cont.). Segmentação. Segmentação no MULTICS e Intel Pentium.
- Aula 11. Gerência de memória no MINIX.
- Aula 12. Gerência de memória no Windows. Enunciado de trabalho sobre gerência no Linux.
- Aula 13. Gerência de memória no Linux.
- Aula 14. Gerência de E/S.
- Aula 15. Gerência de E/S (cont.). Lidando com impasses.
- Aula 16. Gerência de E/S (cont.). Software de E/S. Enunciado de Atividade Prática.
- Aula 17. Gerência/Sistema de Arquivos.
- Revisão para 4a. Prova Bimestral.
Referências
- TANENBAUM, Andrew S. and WOODHULL, Albert S. Sistemas Operacionais: Projeto e Implementação. Prentice Hall, 2001.
Proposta de um Micro Sistema Operacional para Microprocessador ATMEGA8
O Micro-SO
- Um inicializador deixaria o terreno pronto e chamaria o gerenciador de processos
- O gerenciador de processos entraria em loop, esperando a criação de novos processos (forking?!). Os processos poderiam realizar operações de cálculo (ALU), leitura/escrita (gerenciador de E/S) e afins
- O gerenciador de E/S trataria os bytes vindos de um teclado/matriz-de-botões/sensores, assim como os bytes indo para um LCD/DAC plugado
- Gerenciador de memória usaria o 1k de SRAM disponível no ATMEGA8, armazenando, por exemplo, bytes lidos pelo gerenciador de E/S em um buffer
- O gerenciador de arquivos poderia armazenar arquivos de bytes em um SD plugado
Porém, já seria interessante para uma primeira versão:
"Um inicializador que dá boot no ATMEGA8 e chama um gerenciador de processos mono-processo. O processo principal fica em loop e pode fazer operações de cálculo e leitura/escrita chamando o gerenciador de E/S. O gerenciador de E/S chama o gerenciador de memória para guardar o que for lido em um buffer na SRAM do ATMEGA8. O gerenciador de E/S também pode escrever o que está no buffer em uma saída qualquer (LCD ou DAC)."
Com isso só estaria faltando o gerenciador de arquivos:
- Inicializador (boot): rotina simples que inicializa o gerenciador de processos
- Gerenciador de Processos: rotina simples que roda um processo principal, deixando-o em loop e coordenando as chamadas à interrupções
- Gerenciador de E/S: rotinas read/write que abstraem dispositivos/sensores de E/S plugados: LCD, DAC, piezoeletros, botões, leds, ...
- Gerenciador de Memória: rotina que controla um buffer para a E/S
Metodologia
- Alunos formariam grupos e construiriam suas Arduinos na protoboard
- Aulas de programação em linguagem C diretamente no ATMEGA8
- Aulas expositivas sobre tópicos de Sistemas Operacionais com exemplos dirigidos para a programação do Micro-SO
- A avaliação seria em duas vertentes: (1) provas conceituais e (2) cada uma das partes do SO. Peso maior para (2).
Pré-Requisitos
- Algoritmos
- Linguagem de programação C
- Arquitetura de Computadores
Prós e Contras
- Como programar diretamente o ATMEGA8? Poderia ser usado o framework Arduino?
- Necessidade de programação em C
- Como acessar memória interna, ALU, registradores, interrupções do ATMEGA8?
- Integração com disciplina de Arquitetura de Computadores e Linguagem de Programação (Algoritmos)
- Pode-se introduzir temas extras como síntese sonora, computação gráfica e afins
- Desmistifica-se a eletrônica analógica e digital
- Custo baixo: protoboards, componentes eletrônicos baratos, ferramentas utilizadas em grupos. Valor mais caro concentrado na protoboard e no CI ATMEGA8 (R$ 4,60 aprox.)
- Aulas intensivamente práticas
- Pode-se utilizar práticas rápidas de programação em Assembly para provar conceitos
Agenda
Referências
- Programando direto com avr-gcc e placa arduino: http://www.symbolx.org/robotics/107-arduinoavr-command-line-dev-environment
- How to Program the AVR with avr-gcc and AVRLib: https://ccrma.stanford.edu/workshops/pid2004/lectures/programming/programming/
- Beginners Programming in AVR Assembler: http://www.avr-asm-tutorial.net/avr_en/beginner/index.html
- SOSSE - Simple Operating System for Smartcard Education: http://www.mbsks.franken.de/sosse/html/index.html
- Scheduling Operating System for AVR: http://www.jiggerjuice.net/electronics/projects/scheduling-os.html
- AvrX Real Time Kernel (VERSÃO ASM E C!!!!! MUITO BOM!!!!): http://www.barello.net/avrx/index.htm
- Femto OS: http://www.femtoos.org/index.html
- Scheme... ATMEGA8 e outras coisas interessantes (1010 project!): http://www.1010.co.uk/cpu.html
- FreeRTOS: http://www.freertos.org/
- MUITO BOM!!! VÁRIOS EXEMPLOS!!! Programando AVR sem Arduino: https://www.mainframe.cx/~ckuethe/avr-c-tutorial/#blinky1
- A Minimal TTL Processor for Architecture Exploration: http://www.bradrodriguez.com/papers/piscedu2.htm
- Arduino na protoboard (ótimas imagens!): http://www.arduino.cc/en/Main/Standalone
- HelloWorld in Assembly for Arduino: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1218921378
- Dissecando um HelloWorld em linguagem Arduino: http://www.urbanhonking.com/ideasfordozens/2009/05/an_tour_of_the_arduino_interna.html
- HelloWorld em C, Assembly com AVR-GCC e AVRASM: http://my.opera.com/CrazyTerabyte/blog/2007/11/02/first-contact-with-atmega8-microcontroller-part-3
- MARK2 FORTH Computer: http://www.holmea.demon.co.uk/Mk2/Architecture.htm
- PyxisOS http://www.skewworks.com/pyxis/