Projekt programistyczny - System Operacyjny

0

Nazwa projektu : OS 2
Język : D, Assembler
Stan rozwoju : pre-alpha
Licencja : W całości zamknięty - Freeware
Procesor : Początkowo tylko x86

Wymagania od uczestników : D, nie koniecznie assembler

OS 2 - Operating System 2 - Taka jest nazwa nowego projektu systemu operacyjnego. Projekt zakłada stworzenie jądra systemu operacyjnego początkowo korzystającego z grub'a (później własny bootloader) i posiadającego w początkowej fazie interfejs tekstowy, pomyślimy oczywiście także nad wielowątkowością. Kernel bootuje się z gruba i potrafi wypisać (już w D) Literę "O" (To wcale nie takie proste).Czy ktoś jest zainteresowany wspólną pracą nad projektem?.

Binarka - http://www.speedyshare.com/547344617.html - wsadzamy ją sobie do grub'a albo jedziemy przez emulator

Strona domowa twórcy : http://www.dan900.site88.net ( TAK WIEM NIE MA GO TAM, BO SIE SERWER ZEPSUŁ I NIE MOGĘ NIC NA FTP UPLOADOWAĆ )

0

Z góry przepraszam ale muszę:

Dan900 napisał(a)

Kernel bootuje się z gruba i potrafi wypisać (już w D) Literę "O" (To wcale nie takie proste).

Pewnie że nie jest, ten tutaj wypisuje D: http://wiki.osdev.org/D_bare_bones

Dodatkowo chciałbym prosić o więcej informacji o projekcie.

Pozdrawiam

0
milyges napisał(a)

Z góry przepraszam ale muszę:

Dan900 napisał(a)

Kernel bootuje się z gruba i potrafi wypisać (już w D) Literę "O" (To wcale nie takie proste).

Pewnie że nie jest, ten tutaj wypisuje D: http://wiki.osdev.org/D_bare_bones

Dodatkowo chciałbym prosić o więcej informacji o projekcie.

Pozdrawiam

A to jest tutorial do tego jak zrobić kernela w D?, OMG!, ja to przerabiałem z C.

Więcej informacji - co konkretnie?

System używany do pisania - Linux x64 naturalnie z opcją -m32
Kompilator używany do pisania - gdc
Assembler użyty do pisania loadera - nasm, zastanawiam się nad przejściem do fasma
System plików, który zostanie zaimplementowany - prawdopodobnie ext4

0

Chodziło mi raczej o konkretne plany na najbliższy czas jak np. implementacja managera pamięci, jak będzie wyglądało zarządzanie pamięcią, etc.

A swoją drogą sama znajomość D bez wiedzy jak działa procesor pod który piszesz cie daleko nie zaprowadzi ;)

Pozdrawiam.

0

Ad1. Co do pamięci to zastanawiałem się nad tablicą bitową ale nie chcę wszystkiego narzucać od razu, najlepiej gdybyśmy przedyskutowali to już w kompletnej grupie i wybrali najlepsze rozwiązanie.

Ad2. Największą trudność sprawiło mi chyba przepisanie systemu z asma do D, bo był na początku w asmie. Musiałem czerpać trochę z kodu osiana.

0

W takim razie życzę owocnej pracy i szybkiego wydania wersji stabilnej i osiągnięcia co najmniej takiej funkcjonalności jaką miał OS/2, ja niestety nie mam czasu na pisanie jeszcze jednego systemu operacyjnego :-) . Ale mam nadzieję że informacje które podałeś pomogą innym w podjęciu decyzji.

Pozdrawiam.

0

Myślałem też czy nie będzie się mylił z OS/2 ale tamten ma na szczęście slasha w nazwie

0

Tak z ciekawości jeszcze postanowiłem popatrzyć na twój "kernel". Od razu się przyznaje, jestem za leniwy aby go bootować, ale skoro robi tylko tyle więc po przejechaniu go objdumpem powinno być od razu widać co i jak :)

No to zaczynamy. Na początek jak wyglądają sekcje w pliku:

milyges@colossus ~/tmp4 $ objdump -h kernel.bin

kernel.bin:     file format elf32-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000000f6  00100000  00100000  00001000  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .bss          00004000  00101000  00101000  00002000  2**2
                  ALLOC
 ...

Pierwsze co się rzucza w oczy, co tam może zajmować aż 0x4000 bajtów w sekcji .bss, objdump oraz readelf i mamy:

00100026 <start>:
  100026:	bc 00 50 10 00       	mov    $0x105000,%esp
    26: 00101000     0 NOTYPE  LOCAL  DEFAULT    2 stack

Ok czyli jest to stos kernela, ale po co aż taki duży? Normalnie przy pisaniu OSa nie udało mi się zapełnić 4kB. Patrzę w tutorial, o tutaj też 0x4000. No ale to jeszcze nie świadczy o niczym. Jedziemy dalej. Czas na analizę kodu. Po przejechaniu kernela przez objdump -S widzimy praktycznie całkowitą zgodność kodu kernel z tutorialem. Jedyną zauważalną zmianą jest zmiana nazwy głównej funkcji z main na kernel_main (fajniej brzmi, prawda? ;)). Szkoda że kernel nie został skompilowany z -g było by mniej roboty, no ale nic, czas na ostatnią częśc: kernel_main. Z racji że nie potrafię na podstawie kodu w assemblerze odbudować kodu w D, wspomnę tylko o tym co zauważyłem:
Początek kernel_main

  100058:	83 ec 10             	sub    $0x10,%esp
  10005b:	c7 45 f0 00 00 00 00 	movl   $0x0,-0x10(%ebp)
  100062:	c7 45 f4 00 00 00 00 	movl   $0x0,-0xc(%ebp)
  100069:	c7 45 f8 00 80 0b 00 	movl   $0xb8000,-0x8(%ebp)
  100070:	c7 45 ec 00 00 00 00 	movl   $0x0,-0x14(%ebp)

Widzimy tutaj alokację 16 bajtów na zmienne lokalne, 3 z nich zostają wyzerowane a jedna ma adres pamięci karty graficznej w trybie 80x25. Wygląda na to że ten fragment jest również z wyżej wymienionego tutoriala zapożyczony.
Oczywiście nie jestem w stanie jednoznacznie stwierdzić że ten kod przeklejony

Załączniki: Lista symboli, Kod kernela

Pisząc to nie chciałem ci podcinać skrzydeł, sam zaczynałem od modyfikacji kodów, ale żeby się brać za ten temat poważnie i szukać ludzi etc. trzeba IMO samemu coś pierwsze napisać ;)
A całego posta napisałem.... z nudów i chęci oderwania myśli od nadchodzącej sesji ;)

Pozdrawiam i życzę sukcesów z twoim OSem (na swój niestety ostatnio brak mi czasu).

0

Co do stosu kernela, zawsze lepiej jeśli jest większy niż gdyby miałoby go zabraknąć (4kB to nie jakaś straszna ilość)

Kody są pisane przeze mnie i porównywane wlasnie jak mi dales link z tutorialem, chcialem sprawdzic zgodnosc i wyeliminowac sporne punkty, co uznałem ze zrobiłem źle albo w tutorialu jest lepiej, to przeklejałem lepszy kod z tutoriala, nie cały kod.

0

Sam kiedyś bawiłem się w coś takiego ale okazałem się zbyt mało wytrwały i czasowo zawiesiłem moje prace. Był taki projekt kilku osób (w tym kiedyś ja) mający napisać system w asemblerze. Nie mam pojęcia jak to teraz wygląda ale na twoim miejscu skontaktował bym się z autorem tej stronki http://www.nevar.pl/ .
Jeśli projekt jeszcze się nie rozsypał to proponuję się przyłączyć, w przeciwnym wypadku zawsze możesz skorzystać na doświadczeniu innych ;P

Jako ciekawostkę dodam że skończyłem na etapie wejścia w pm (z własnym bootloaderem, ustawieniem deskryptorów a także sprawdzeniem ilości pamięci w systemie)

Powiem uczciwie że gdy powrócę do zagadnienia (jeśli powrócę) będę pisał w c++ z domieszką asm-a. Jednak do tego i tak trzeba porządnie zgłebić podstawy w czystym asmie.

Powodzenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1