W jakim języku pisze sie systemy operacyjne?

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
Awatar użytkownika
Kulpina
Użytkownik
Posty: 2037
Rejestracja: 28 lip 2005, 16:57
Lokalizacja: Sanok
Kontakt:

W jakim języku pisze sie systemy operacyjne?

Post autor: Kulpina » 02 mar 2009, 14:52

Jak się zapewne domyślam, to jakiś asembler albo cos podobnego, ale jak się to kompiluje i wgrywa? Są do tego kompilatory, które mozna gdzieś dostać?
W jakim języku został napisany np. dos? Bo wcześniej przd nim chyba za wiele nie było a jakoś nie wyobrażam sobie, żeby ktoś wklepywal kolejne 0 i 1 :mrgreen:

Awatar użytkownika
olo16
Użytkownik
Posty: 396
Rejestracja: 12 paź 2007, 16:37
Lokalizacja: w-wa

Post autor: olo16 » 02 mar 2009, 19:00

Kulpina pisze:Jak się zapewne domyślam, to jakiś asembler albo cos podobnego
Nie ta epoka. Teraz rządzi C++, nikomu nie chce się babrać w asssemblerze - pomyśl jakie skomplikowane są systemy operacyjne, a zrozumiesz.
Kulpina pisze:ale jak się to kompiluje i wgrywa?
Normalnie, do kodu maszynowego :razz: .

Awatar użytkownika
radzio
Użytkownik
Posty: 573
Rejestracja: 07 gru 2004, 23:06
Lokalizacja: Sosnowiec
Kontakt:

Post autor: radzio » 02 mar 2009, 19:08

olo16 pisze:Nie ta epoka. Teraz rządzi C++, nikomu nie chce się babrać w asssemblerze - pomyśl jakie skomplikowane są systemy operacyjne, a zrozumiesz.
Oj ta, ta ;p Windows jest w większości napisany w C (bez plusów).

System operacyjny to nie, jak mogłoby się wydawać na pierwszy rzut oka, Aero czy Compiz Fusion. Bez asemblera (chociażby w postaci wstawek) trudno byłoby stworzyć wydajny kernel systemu operacyjnego. Istnieją co prawda systemy pisane w C# czy też w Javie, ale to raczej taka "sztuka dla sztuki".

mathieiov
Moderator
Posty: 829
Rejestracja: 31 lip 2005, 9:04
Lokalizacja: --

Post autor: mathieiov » 02 mar 2009, 20:35

A jak wygląda proces kompilacji takiego systemu?

Awatar użytkownika
seweryn
Użytkownik
Posty: 147
Rejestracja: 08 gru 2005, 20:04
Lokalizacja: Praszka
Kontakt:

Post autor: seweryn » 02 mar 2009, 21:14

radzio pisze: Oj ta, ta ;p Windows jest w większości napisany w C (bez plusów).
Jeśli chodzi o Windows to C++
http://research.att.com/~bs/applications.html

Awatar użytkownika
radzio
Użytkownik
Posty: 573
Rejestracja: 07 gru 2004, 23:06
Lokalizacja: Sosnowiec
Kontakt:

Post autor: radzio » 02 mar 2009, 22:55

seweryn pisze:Jeśli chodzi o Windows to C++
Tylko częściowo : GDI+, MFC. Sam kernel i niskopoziomowe biblioteki w C.

Awatar użytkownika
Kulpina
Użytkownik
Posty: 2037
Rejestracja: 28 lip 2005, 16:57
Lokalizacja: Sanok
Kontakt:

Post autor: Kulpina » 03 mar 2009, 11:23

mathieiov pisze:A jak wygląda proces kompilacji takiego systemu?
No właśnie :mrgreen: Bo jak narazie wiadomo w jakim języku, ale jak to skompilować?
na innym komputzrze z windowsem? To jak w takim razie powstał ten windows na innym komputerze? :mrgreen:

Awatar użytkownika
bsw
Użytkownik
Posty: 100
Rejestracja: 14 kwie 2008, 13:13
Lokalizacja: Małopolska
Kontakt:

Post autor: bsw » 03 mar 2009, 11:39

Od pradawnych czasów w każdej dziedzinie techniki obowiązuje ta sama zasada - za pomocą prymitywnego narzędza można stworzyć bardziej dokładne. I tak kamiennym młotkiem zrobiono pierwszy metalowy. A pierwszy kompilator konsolowy assemblera pewnie "ręcznie" przygotowanona na karcie perforowanej... :-)

BTW:
Przed DOS'em było mnóstwo innych systemów operacyjnych. Jego bezpośrednim protoplastą był CP/M

Awatar użytkownika
Kulpina
Użytkownik
Posty: 2037
Rejestracja: 28 lip 2005, 16:57
Lokalizacja: Sanok
Kontakt:

Post autor: Kulpina » 03 mar 2009, 11:43

Ok, tak się też domyślałem, ale jak ktoś wnosi jakis wkład w pisanie lunuxa to w czym się to potem kompiluje?

Awatar użytkownika
bsw
Użytkownik
Posty: 100
Rejestracja: 14 kwie 2008, 13:13
Lokalizacja: Małopolska
Kontakt:

Post autor: bsw » 03 mar 2009, 11:55

Podstawowa kwestia:
Kompilator nie musi pracować na platformie na którą kompiluje.
Kompilator to program który zamienia tekstowy kod określonego języka w kod maszynowy wg. określonych reguł. Wynikiem kompilacji jest plik binarny który następnie przenosi się na docelowe urządzenie. W ten sposób tworzy się oprogramowanie dla większości urządzeń sprzętowych - chociażby dla popularnych oststnio mikrokontrolerów AVR.
I w podobny sposób przygotowuje się systemy operacyjne nowszej generacji, czy na nowsze platformy sprzętowe !
Nic nie stoi na przeszkodzie aby stworzyć kompilator który jest w stanie wyprodukuwać kod dla Windows64 na 16 bitowym komputrze 386SX :-)

Awatar użytkownika
Kulpina
Użytkownik
Posty: 2037
Rejestracja: 28 lip 2005, 16:57
Lokalizacja: Sanok
Kontakt:

Post autor: Kulpina » 03 mar 2009, 12:14

No to wiem. Ale np. w Bascom AVR mam liste z plikami potrzebnymi do kompilacji programów dla procesorów np. m8def.dat itp. a kompilator dla np linuxa? wybieram z listy:
procesor 32bity
procesor 64bity? :mrgreen:

Awatar użytkownika
bsw
Użytkownik
Posty: 100
Rejestracja: 14 kwie 2008, 13:13
Lokalizacja: Małopolska
Kontakt:

Post autor: bsw » 03 mar 2009, 12:42

procesor 32bity
procesor 64bity
Dokładnie tak!
Reguły kompilacji muszą być określone na początku. Też kiedyś tego nie kumałem :-) Dla osób przyzwyczajonych do zintegrowanych środowisk programistyczno-uruchomieniowych ciężko to zrozumieć ;-) Bo kiedyś kod programu pisało się w jakimś tam edytorku, zapisawało na... dyskietce. Następnie uruchmiało kompilator, następnie linker a dopiero poźniej uruchmiało.
Ja zaczynałem programać z początkiem lat 90-tych. Ale już były środowiska zintegrowane. Ja zaczynałem od środowiska Turbo Pascal 6. Pamiętam przesiadkę na pakiet Borland Pascal 7.0. Byłem w szoku gdy w opcjach tekstowego środowiska zintegrowanego pracującego w trybie rzeczywistym procesora w DOS odkryłem opcję "Target platform" gdzie można było ustawić: Windows. Czyli w konsolowym programie dosywym można było kompilować aplikacje pod Windows ! (Wtedy to była wersja 3.0 :-))

Uprzedzając pytanie: A co jeśli jeszcze nie ma kompilatora? A pisze się wtedy kompilator. Bo kompilator to tylko zwykły program który zamienia plik tekstowy na binarny. I kompilator dla Linuxa można napisać w turbopascalu dla dosa. Bo to tylko zwykły program ktory umie zapisywać plik binarny. Żadnych czarów tutaj nie ma. Wystarczy znać strukturę pliku docelowego... Czyli reguły tej zamiany. Nic więcej.

Awatar użytkownika
Kulpina
Użytkownik
Posty: 2037
Rejestracja: 28 lip 2005, 16:57
Lokalizacja: Sanok
Kontakt:

Post autor: Kulpina » 03 mar 2009, 12:52

Ale mi już nie chodzi o: Co wtedy gdy nie ma kompilatora, tylko o to jak kompilowane są systemy operacyjne. W normalnym kompilatorze w stylu dev c++? i potem gdzie sie to wgrywa? czy są do tego jakieś specjalne kompilatory? :mrgreen:

Awatar użytkownika
bsw
Użytkownik
Posty: 100
Rejestracja: 14 kwie 2008, 13:13
Lokalizacja: Małopolska
Kontakt:

Post autor: bsw » 03 mar 2009, 13:10

Pewnie tak. Dev C++ to środowisko - a kompilator to plik make.exe Zmieniając ten plik na inny lub sterując opcjami kompilacji uzyskuje się inne właściwości pliku wynikowego.
Podstawową umiejętnością systemu operacyjnego dla platformy PC musi być umiejątność współpracy z BIOS. Te reguły są jasno określone w specyfikacji sprzętu. Więc przygotowanie kompilatora nie stanowi problemu. Gdzie to później wgrać? A tam gdzie BIOS będzie poszukiwał systemu operacyjnego - to też jest jasno określone w specyfikacji sprzętu. Czyli w określonym sektorze napędu. Którego - a to już w biosie się ustawia. Chociaż niekoniecznie...

Po starcie PC Bios wg. ustawionej sekwencji przesukuje określone napędy i sprawdza czy to co tam znajduje posiada sygnaturę wskazującą na bycie systemem operacyjnym. Sam system może być całkiem gdzie indziej - ważne aby w tym miejscu gdzie BIOS będzie szukał systemy było coś co przekieruje BIOS w określone miejsce - tak działają tzw boot loadery.
To programy udające dla BIOS'a system operacyjny przez co ten je uruchamia tak jakby uruchamiał OS :-) Tak to mniej więcej wygląda...

Awatar użytkownika
Kulpina
Użytkownik
Posty: 2037
Rejestracja: 28 lip 2005, 16:57
Lokalizacja: Sanok
Kontakt:

Post autor: Kulpina » 03 mar 2009, 13:23

Ano to już ciekawiej :mrgreen: A jeszcze pytanie: Gdzie mozna znaleźć opis biosu? Na allegro jest troche ksiażek, ale jakoś wyglądają mi na takie, które mają służyć opisowi poszczególnych funkcji, do których mamy dostęp po wejściu do biosu :mrgreen:

I czy łatwo byłoby napisać minisystem operecyjny, który zajął by się powiedzmy zaświeceniem kilku diod jakimś starym procesorem? :mrgreen:

ODPOWIEDZ