You are on page 1of 42

TempOS: Um SO voltado para o ensino de Sistemas Operacionais

Ren de Souza Pinto e


Laboratrio de Sistemas Distribu o dos e Programao Concorrente ca LaSDPC / ICMC - USP rene@icmc.usp.br http://renesp.com.br

7 de Setembro de 2010

Sumrio a
Introduo ca TempOS Multiboot Drivers Gerenciamento de Memria o Build System Prximos Passos o Referncias e

2 of 42

Motivao ca
Curiosidade em desvendar o funcionamento do PC Engenharia de computao: O curso abrange desde o mais baixo ca n do hardware (construo de transistores) at o mais alto n vel ca e vel de software com a abstrao das linguagens de alto n ca vel Sistema Operacional (SO): Elo entre Hardware e Software Falta de uma disciplina prtica que abordasse a implementao de a ca um SO

3 of 42

Projeto TempOS
2009: In do desenvolvimento do Sistema Operacional TempOS cio 2010: TempOS torna-se um projeto de mestrado:
Elaborar uma plataforma para ensino e treinamento em desenvolvimento de Sistemas Operacionais Material didtico, forte documentao do cdigo, exerc a ca o cios prticos e a o prprio TempOS como plataforma de estudo e desenvolvimento o

4 of 42

Necessidades
Grande quantidade de hardware embarcado atual que roda Sistemas Operacionais sosticados (como Linux) Projetos abertos, como o Linux, necessitam de programadores novos - http://fprudente.blogspot.com/2010/04/ por-que-o-linux-nao-esta-atraindo.html Necessidade de mercado: Programadores de ncleo esto sendo u a cada vez mais requisitados (muitas empresas investem, desenvolvem, customizam e patrocinam sistemas como o Linux) Prover uma ferramenta de estudo fact aos alunos (sistemas vel muito complexos so dif a ceis de se estudar) Qualicar os alunos dos cursos de computao com tecnologias de ca ponta
5 of 42

Trabalhos Relacionados
Nachos[Christopher, Procter e Anderson 1993] http://www.cs.washington.edu/homes/tom/nachos/ System/161[Holland, Lim e Seltzer 2002] http://www.eecs.harvard.edu/~syrah/os161/ GeekOS - http://code.google.com/p/geekos/ Minix[Tanenbaum 1987] - http://www.minix3.org/ Outros

6 of 42

Nachos
Desenvolvido pela Universidade de Berkeley, CA O ncleo do Nachos roda em cima de outro Sistema Operacional, u simulando uma arquitetura MIPS R2000/3000. Caso esteja executando em uma arquitetura IA-32, necessrio um compilador e a cross para compilar os aplicativos que iro rodar no simulador do a Nachos Na utilizao descrita, os estudantes recebem apenas um esqueleto ca do cdigo, e durante as prticas vo desenvolvendo as o a a funcionalidades no implementadas a

7 of 42

System/161, OS/161
Desenvolvido pela Universidade de Harvard Simula uma arquitetura de hardware (MIPS) podendo-se rodar um Sistema Operacional em cima (OS/161)

8 of 42

GeekOS
Desenvolvido pela Universidade Marryland, College Park Suporta arquitetura IA-32 (x86), podendo rodar tanto no hardware real quanto em emuladores (bochs) E basicamente um esqueleto de SO, nas disciplinas de laboratrio o os alunos desenvolvem funcionalidades atravs de prticas e a individuais durante o per odo de um semestre

9 of 42

Minix
Escrito por Andrew S. Tanenbaum entre 1984 e 1987 Projeto mais notvel na rea a a Clssico livro texto Operating Systems Design and a Implementation que aborda o Minix Verso 3 do Minix deixou de ter intuito educacional a

10 of 42

Outros
Xinu[Carissimo 1995]: Desenvolvido na dcada de 1980 pela e Purdue University, originalmente rodava em um microcomputador LSI-11, da Digital Equipament, sendo portado posteriormente para o MS-DOS. No mais utilizado. a e Topsy[Fankhauser et al. 1996]: Desenvolvido pelo Swiss Federal Institute of Technology in the Computer Engineering and Networks Laboratory (TIK)
Roda em hardware real (arquitetura MIPS R3000) e em emuladores. Possui um manual (70 pginas) escrito em ingls a e Utilizado em apenas alguns campi europeus[Anderson e Nguyen 2005]

11 of 42

Escrevendo um SO: Um desao poss vel


Escrever um SO necessita de um vasto conhecimento prvio: e
Organizao de computadores ca Arquitetura de computadores Programao de computadores (C, Assembly) ca Sistemas Operacionais (teoria) Conhecimento espec co de determinados tipos de hardware

Curiosidade (desvendar mistrios antes obscuros) e Pacincia (seja carinhoso com seu hardware ;) e

12 of 42

Sistema Operacional: Segundo Tanenbaum[Tanenbaum 2000], pode ser visto como um gerenciador de recursos ou como uma mquina estendida. a Comunica-se e controla o hardware da mquina, abstraindo-o a atravs de uma interface (chamadas de sistema) e Ncleo (kernel): u
Monol tico Microncleo u H brido Exoncleo u

13 of 42

Monol tico:
Aplicativos

Microncleo: u
Aplicativos

14 of 42

TempOS
TempOS: TempOS is an educational and multi purpose Operating System Site do projeto: http://tempos-project.org Escrito exclusivamente em Linguagem C e Assembly (sintaxe AT&T) Desenvolvido totalmente no GNU/Linux e com ferramentas livres Possui um sosticado sistema de compilao, pode ser compilado e ca emulado sem a necessidade de permisses de super-usurio (root) o a Roda em um PC comum e em emuladores (qemu) Licenciado sob a GNU GPLv2 - GNU General Public License, verso 2 a

15 of 42

TempOS
Segue a especicao de Multiboot (bootvel pelo GRUB) ca a Funes da Biblioteca C implementadas (strcat, memcpy, printf, co etc) Tipos de dados padronizados (uint32 t, ulong t, etc) Paginamento de memria permitindo implementao de swap o ca Realocao dinmica do Kernel (0-3GB para usurio / 3-4GB para ca a a Kernel) Sistema de compartilhamento de IRQs Drivers para Video (modo texto), Teclado, Temporizador (PIT) e Controlador de Interrupes (PIC) co Chamadas de sistema (systemcalls) Port para arquitetura IA-64 (x86 64 bits) iniciado
16 of 42

TempOS - Multiboot
http://www.gnu.org/software/grub/manual/multiboot/ multiboot.html Especicao criada pela GNU e implementada atravs do GRUB ca e (GRand Unied Bootloader), permite que vrios Sistemas a Operacionais convivam na mesma mquina, permitindo ao a usurio escolher qual iniciar na inicializao da mquina a ca a Magic number deve estar nos primeiros 8192 bytes do ncleo u (executvel) a ser iniciado a GRUB facilita a vida dos projetistas de SO: Entra em modo protegido, efetua operaes necessrias com a BIOS, etc... co a O TempOS segue a especicao de multiboot, o ncleo do ca u TempOS compilado em um arquivo ELF que pode ser carregado e pelo GRUB
17 of 42

boot.S - Estgio de boot a


multiboot_header: .long MULTIBOOT_HEADER_MAGIC .long MULTIBOOT_HEADER_FLAGS /* Checksum */ .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) ... /* Initialize the stack pointer */ movl $(stack + STACK_SIZE), %esp /* Reset EFLAGS */ pushl $0 popf /* Push multiboot structure and magic value */ pushl %ebx pushl %ecx /* Go to kernel, should never return from here call EXT_C(karch) hlt 18 of 42 */

karch.c - Primeiro estgio a


/** * First Stage: Called from Boot Stage. */ void karch(unsigned long magic, unsigned long addr) { ... /* Init the Memory Manager */ init_mm(); /* Setup interrupts */ setup_IDT(); init_PIC(); init_PIT(); init_IRQ(); set_picmask(0x00, PIC_MASTER); set_picmask(0x00, PIC_SLAVE); sti(); ... kprintf(">> First stage done.\n"); /* Call the TempOS kernel */ tempos_main(kinf); } 19 of 42

kernel.c - Segundo estgio a


void tempos_main(karch_t kinf) { /* Start the second stage */ memcpy(&kinfo, &kinf, sizeof(karch_t)); /* keep init_timer() in first place because drivers use timer functions */ init_timer(); calibrate_delay(); /* Keyboard */ init_8042(); /* ATA controller */ init_ata_generic(); /* Init scheduler */ init_scheduler(); /* Test */ kprintf("We are in TempOS kernel!\n"); kprintf("Command line passed: %s\n", kinfo.cmdline); ...

20 of 42

Drivers bsicos a
PIT: Temporizador PIC: Controlador de Interrupes co i8024: Controlador de Teclado V deo: Modo texto ATA: Ler/Escrever em HDs PATA (IDE)

21 of 42

Componentes da placa me a
PIT - Programmable Interval Timer
Conhecido como 8253/8254 E um oscilador/divisor de freq. programvel a Pode ser utilizado para implementar relgio, gerador de ondas, etc o

PIC - Programmable Interrupt Controller


E um gerenciador de interrupes co Possui 8 entradas Arq. PC: Possui 2 PICs ligados em cascata Controle de at 15 interrupes (1 entrada para a cascata) e co e Cada entrada uma IRQ (Interrupt ReQuest) e Um PIC atua como Mestre e outro como Escravo:

22 of 42

PIC
IRQ0 IRQ1 IRQ2 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 IRQ8 IRQ9 IRQ10 IRQ11 IRQ12 IRQ13 IRQ14 IRQ15
23 of 42

CPU

PIC - Mestre
IRQs no Mestre:
IRQ IRQ IRQ IRQ IRQ IRQ IRQ IRQ 0: 1: 2: 3: 4: 5: 6: 7: Reservada para o PIT (temporizador) Teclado Para ligao em cascata com o escravo ca Porta serial COM2 (Padro) ou COM4 a Porta serial COM1 (Padro) ou COM3 a Porta paralela LPT2 ou placa de som Controlador de disquete Porta paralela LPT1 ou placa de som

24 of 42

PIC - Escravo
IRQs no Escravo:
IRQ IRQ IRQ IRQ IRQ IRQ IRQ IRQ 8: RTC (Real Time Clock) 9: Mapeada para IRQ2 (cascata) 10: Dispon vel 11: Dispon vel 12: PS/2 mouse 13: ISA / Co-processador matemtico a 14: Canal IDE primrio a 15: Canal IDE secundrio a

25 of 42

Arquitetura PC

26 of 42

Figura: Arquitetura PC

Componentes da placa me a
Ponte Norte:
Comunica-se diretamente com o processador e com a Ponte Sul, prov: e Controlador de memria (RAM) o Controle de barramentos de v deo (AGP, PCIe x16)

Ponte Sul:
Geralmente implementa controladores para:
PCI / PCIe SATA / PATA (antigo IDE) USB Ethernet, Audio, Modem (onboard)

27 of 42

Controle de interrupes co
Drivers registram sua IRQ:
int request_irq(uint16_t irq, void (*handler)(int, pt_regs *), uint16_t flags, const char *name) Na interrupo: Cada rotina registrada para a IRQ em que a interrupo ca ca ocorreu executada, permitindo o compartilhamento de IRQs e

28 of 42

Alarmes
Novos alarmes podem ser criados com:
int new_alarm(uint32_t expires, void (*handler)(int), uint32_t arg) Exemplo de uso (escalonador do TempOS): void init_scheduler(void) { /* Register alarm to do task switch */ if(!new_alarm((jiffies + scheduler_quantum), schedule, 0)){ panic("Could not install scheduler alarm."); } }

29 of 42

Driver de V deo - Modo Texto


Trabalha diretamente com a memria de v o deo (mapeada para 0xB8000)

30 of 42

Gerenciamento de Memria o
Arquitetura IA-32 (x86): Modelos de Memria: o
Modelo plano: A memria vista como um espao de endereo o e c c cont nuo, pode enderear at 232 1 bytes (4GB) c e Modelo Segmentado: A memria dividida em segmentos. At o e e 16383 segmentos so suportados, cada um podendo enderear at 236 a c e bytes Modelo Modo de Endereo Real: Memria dividia em segmentos c o de 64KB

Os segmentos so descritos em uma Tabela Global de a Descritores (GDT) Nota: Os segmentos podem se sobrepor!

31 of 42

Arquitetura IA-32 (x86)


Proteo de Memria: ca o
Pode ser feita por segmentao (obsoleto) ca Paginamento (atual):

32 of 42

TempOS - Gerenciamento de Memria o


Alocao de pginas f ca a sicas: Pilha de pginas, basta empilhar ou a desempilhar Alocao do espao virtual de memria: Feita por mapa de bits. ca c o Cada bloco alocado contm um meta dado, indicando posio e ca inicial/nal e tamanho do bloco

Figura: Estruturas de alocao de memria no TempOS ca o


33 of 42

TempOS - Gerenciamento de Memria o

Figura: Imagem do ncleo do TempOS na memria u o


34 of 42

TempOS - Build System


Fcil de utilizar: a
make: Compila o ncleo do TempOS u make install: Gera uma imagem de disco com o TempOS que pode ser iniciada em uma mquina real ou em um emulador a make test: Testa a imagem gerada com o emulador QEMU

35 of 42

TempOS - Screenshot

36 of 42

Figura: TempOS rodando no QEMU

Prximos Passos o
Unicar a API do TempOS e denir todos os subsistemas do ncleo u Desenvolver Sistema de Arquivos Virtual e suporte a EXT2 (em progresso) Drivers para SATA, chaveamento de processos Melhorar o gerenciador de memria o Desenvolver mais chamadas de sistema Portar biblioteca C (newlib) para o TempOS Portar gcc para o TempOS e fazer o TempOS compilar a si mesmo! Desenvolver o material didtico a

37 of 42

Para saber mais...


Projeto TempOS: http://www.tempos-project.org USP osdev: http://code.google.com/p/usp-osdev/ Bona de OS developer: http://www.osdever.net/ OS Dev wiki: http://wiki.osdev.org/Main_Page

38 of 42

Dvidas? u

39 of 42

At Logo! e

40 of 42

Referncias (1) e
ANDERSON, C. L.; NGUYEN, M. A survey of contemporary instructional operating systems for use in undergraduate courses. J. Comput. Small Coll., Consortium for Computing Sciences in Colleges, , USA, v. 21, n. 1, p. 183190, 2005. ISSN 1937-4771. CARISSIMO, J. XINUan easy to use prototype for an operating system course. ACM SIGCSE Bulletin, ACM, v. 27, n. 4, p. 56, 1995. CHRISTOPHER, W.; PROCTER, S.; ANDERSON, T. The Nachos instructional operating system. In: USENIX ASSOCIATION. Proceedings of the USENIX Winter 1993 Conference Proceedings on USENIX Winter 1993 Conference Proceedings. [S.l.], 1993. p. 4.
41 of 42

Referncias (2) e
FANKHAUSER, G. et al. Topsya teachable operating system. Computer Engineering and Networks Laboratory, ETH Zurich, v. 2001, 1996. HOLLAND, D.; LIM, A.; SELTZER, M. A new instructional operating system. In: ACM. Proceedings of the 33rd SIGCSE technical symposium on Computer science education. [S.l.], 2002. p. 111115. TANENBAUM, A. A UNIX clone with source code for operating systems courses. ACM SIGOPS Operating Systems Review, ACM, v. 21, n. 1, p. 29, 1987. TANENBAUM, A. S. Sistemas Operacionais: projeto e implementao. [S.l.]: Bookman, 2000. ca
42 of 42

You might also like