Projeto SOS ( Simple Operating System ) | HOWTO !!!

1. Projeto SOS ( Simple Operating System ) | HOWTO !!!

???
gokernel

(usa Linux Mint)

Enviado em 16/06/2019 - 12:08h


Olá pessoal !

Hoje ( 16/06/2019 ) criei um projeto de um Sistema Operacional Simples com propósito educacional aqui:
https://github.com/gokernel2017/SOS

A primeira pasta ( 01_simpleOS_Hello_World ) disponibilizada é apenas um "Hello World" ... com o tempo vou fazendo mais uploads de mais implementação:
02_simpleOS_Keyboard ... 03_simpleOS_Interrupts ... etc.

E vai servir como base ... até para mim mesmo !!!



  


2. Re: Projeto SOS ( Simple Operating System ) | HOWTO !!!

Lima Júnior
lmJR

(usa Debian)

Enviado em 16/06/2019 - 22:45h

Curti muito a ideia!
Meu sonho desenvolver um SO próprio, nem que seja pra brincar haha
Salvei o link já!


3. Re: Projeto SOS ( Simple Operating System ) | HOWTO !!!

???
gokernel

(usa Linux Mint)

Enviado em 17/06/2019 - 06:55h


Olá "lmJR", fico feliz por você ter gostado !!!

Na verdade esse projeto é um "HOWTO" do meu OS gardenOS ( https://github.com/gokernel2017/gardenOS ) ... começando pelo básico .

Hoje ( 17/06/2019 ) atualizei e modifiquei o ( Makefile ) , pois compilando no Linux mostrava mensagens indesejadas ...

O próximo passo será implementar Interrupção ( GDT, IDT, TIMER ).

Qualquer sugestão é bem-vinda ... o objetivo desse projeto é de compartilhar conhecimento mesmo ...

O sistema é "simples" mas pode ser bem eficiente principalmente executando em modo privilegiado ( in KERNEL SPACE ) ...

Valeu !!!



4. Re: Projeto SOS ( Simple Operating System ) | HOWTO !!!

???
gokernel

(usa Linux Mint)

Enviado em 17/06/2019 - 20:01h

Olá pessoal !

Atualizei o projeto e implementei Interrupção ...

Para simples exemplo a cada segundo aparece um nome ( verde claro ) no topo da tela ... esse interrupção é o timer ( System Timer ).

OBS: Fiz nas pressas aqui ... depois vou mudar o teclado para trabalhar com interrupção ( IRQ_KEYBOARD := 1 ) ...

Falta implementar algumas coisitas, arquivos ( asm.S e interrupt.c ).

01: Testei em Linux e Windows e funcionou .
02: Testei também em Máquina Real e funcionou !!!

OBS: não demonstrei exibindo o tempo/hora pois ainda não está implementado ( printk, sprintk, itoa )...



5. Re: Projeto SOS ( Simple Operating System ) | HOWTO !!!

???
gokernel

(usa Linux Mint)

Enviado em 18/06/2019 - 12:04h

Pronto atualizei com printk :

https://github.com/gokernel2017/SOS/blob/master/simpleOS_TIMER.png

E esqueci de informar as referências ... "honrar a quem tem honra merecidas":


//-------------------------------------------------------------------
//
// THIS FILE IS PART OF SIMPLE OPERATING SYSTEM:
//
// The Interrupt API.
//
// FILE:
// interrupt.c
//
// This API is based in this:
//
// REFERENCE:
// http://www.osdever.net/bkerndev/index.php
// https://sourceforge.net/projects/flick/
// https://github.com/ketanhwr/exylus
//
// START DATE: 16/06/2019 - 10:40
//
//-------------------------------------------------------------------
//



//-------------------------------------------------------------------
//
// THIS FILE IS PART OF SIMPLE OPERATING SYSTEM:
//
// The Interrupt API.
//
// FILE:
// asm.S
//
// This API is based in this:
//
// REFERENCE:
// http://www.osdever.net/bkerndev/index.php
// https://sourceforge.net/projects/flick/
// https://github.com/ketanhwr/exylus
//
// START DATE: 16/06/2019 - 10:40
//
//-------------------------------------------------------------------
//




6. Re: Projeto SOS ( Simple Operating System ) | HOWTO !!!

Lima Júnior
lmJR

(usa Debian)

Enviado em 18/06/2019 - 18:18h

Continuarei acompanhando o projeto, ainda mais porque nos próximos anos pretendo conseguir entrar numa graduação na área de Computação.
Desejo sucesso aí!


7. Re: Projeto SOS ( Simple Operating System ) | HOWTO !!!

???
gokernel

(usa Linux Mint)

Enviado em 19/06/2019 - 12:15h

Olá pessoal !

Atualizei o projeto com o teclado usando Interrupção .

OBS: Na próxima atualização vou substituir a API INTERRUPT ( asm.S, interrupt.c ) por essa ( https://github.com/scanlime/metalkit ), motivo:
01: A API MetalKit se mostrou mais precisa em uns testes ...
02: A MetalKit se mostrou mais performática em um teste de performance :
--------------------------------------------------------------------------
a: Usando um "FPS" com a atual api ( interrupt ) exibiu o máximo: 187.322.705
b: Usando um "FPS" com ( MetalKIT interrupt) exibiu o máximo: 554.245.590
OBS: "sem esperar pela proxima interrupcao" ... ou seja um loop vazio de performance.


quit = 0;

while (!quit) {

fps++;

if (timer_ticks % CLOCKS_PER_SEC == 0) {
display_time (fps);
fps = 0;
}

}// while (!quit)



OBS2: ao tentar compilar esse teste em Linux não vai funcionar corretamente... só funciona compilando em Windows 32 bits ... digo: compila mas não funciona ...
--------------------------------------------------------------------------




8. Re: Projeto SOS ( Simple Operating System ) | HOWTO !!!

???
gokernel

(usa Linux Mint)

Enviado em 20/06/2019 - 12:51h

Olá pessoal !

O sistema foi atualizado com ( General Protection Fault ) ... para testar basta tentar executar um teste simples ( call_hello ) no shell que o OS faz a "proteção", ou seja "paralisa" ...

Usando o comando ( call_hello ), estou tentando executar um ( JIT ) ... o sistema identifica e "protege" ... BETA AINDA.

Quem não quiser usar essa "protecao", basta comentar no arquivo ( interrupt.c ) as linhas com:


idt_set_gate(0, (uint)isr0, 0x08, 0x8E); // linha 179
...
idt_set_gate(31, (uint)isr0, 0x08, 0x8E); // linha 210





9. Re: Projeto SOS ( Simple Operating System ) | HOWTO !!!

???
gokernel

(usa Linux Mint)

Enviado em 21/06/2019 - 11:40h


Olá pessoal !

Neste momento estou esperando o almoço ficar pronto ... então corri para postar esse:

Talvez alguém esteja se perguntando sobre o último comentário meu ... Porque ao chamar no shell o comando ( call_hello ) logo em seguida acontece a "proteção" ???

Explicando:
De propósito eu executo um ( JIT ) com bug:

// JIT COM BUG DE PROPÓSITO ...
#define LONG_TO_BYTE(l) l, (l >> 8), (l >> 16), (l >> 24)
void call_hello (void) {
long l = &hello;

unsigned char code[] = {
0x55, // push %ebp
0x89, 0xe5, // mov %esp,%ebp
// ... no setup %esp stack ...
// BUG AQUI DE PROP[OSITO... pois precisa setar a PILHA:

// PASS ARGUMENT ... QUEBRA ...
//
// c7 04 24 dc 05 00 00 movl $0x5dc,(%esp)
0xc7, 0x04, 0x24, 0xdc, 0x05, 0x00, 0x00,

// call hello()
//-----------------------------
0xb8, LONG_TO_BYTE(l),
0xff, 0xd0,
//-----------------------------

0xc9, // leave
0xc3 // ret
};

( (void(*)()) code ) ();

}



// JIT SEM BUG: arquivo ( src/kernel.c )

#define LONG_TO_BYTE(l) l, (l >> 8), (l >> 16), (l >> 24)
void call_hello (void) {
long l = &hello;

unsigned char code[] = {
0x55, // push %ebp
0x89, 0xe5, // mov %esp,%ebp
// BUG RESOLVIDO AGORA ...
//---------------------------------
// sub $0x8,%esp
0x83, 0xec, 0x08,
//---------------------------------

// PASS ARGUMENT ... 1500
//
// c7 04 24 dc 05 00 00 movl $0x5dc,(%esp)
0xc7, 0x04, 0x24, 0xdc, 0x05, 0x00, 0x00,

// call hello()
//-----------------------------
0xb8, LONG_TO_BYTE(l),
0xff, 0xd0,
//-----------------------------

0xc9, // leave
0xc3 // ret
};

( (void(*)()) code ) ();

}


Alguma dúvida ???

O meu objetivo agora é fazer um ( Segment Fault ) e continuar com a execução do OS sem "paralisar" ...

Como vou fazer isso ?
rassrsasr ... sei lá ;)








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts