[#1] Jak startuje AmigaOS?
Potrzebuje informacji o starcie systemu Amigi. Mam zamiar napisać na ten temat pracę do szkoły.

W Linuxie, bodajze w zrodlowym pliku asemblerowym bootsect.s mozna znaleźć skok do pierwszego kawalka kodu napisanego w C (jmp kernel_start()).

Chodzi mi przede wszystkim o odpowiednik wyzej opisanej sytuacji w AmigaOS. Tzn. kiedy nastepuje moment, ze system zaladowal sie juz na takim poziomie, ze moze byc wykonany przez niego skompilowany program?

Druga rzecz to uruchomienie programu z twardego dysku. Jak to sie dzieje, ze system po odczytaniu parametrow dysku i filesystemu szuka programu do uruchomienia. Szuka pliku startup-sequence. Ale gdzie to jest zapisywane iż wie ze wlasnie ten a nie inny?

Pozwole wkleić kilkanaście wierszy struktur ExecBase i RigidDiskBlock:

struct ExecBase {
struct Library LibNode; /* Standard library node */

/******** Static System Variables ********/

UWORD SoftVer; /* kickstart release number (obs.) */
WORD LowMemChkSum; /* checksum of 68000 trap vectors */
ULONG ChkBase; /* system base pointer complement */
APTR ColdCapture; /* coldstart soft capture vector */
APTR CoolCapture; /* coolstart soft capture vector */
APTR WarmCapture; /* warmstart soft capture vector */
APTR SysStkUpper; /* system stack base (upper bound) */
APTR SysStkLower; /* top of system stack (lower bound) */
ULONG MaxLocMem; /* top of chip memory */
APTR DebugEntry; /* global debugger entry point */
APTR DebugData; /* global debugger data segment */
APTR AlertData; /* alert data segment */
APTR MaxExtMem; /* top of extended mem, or null if none */






struct RigidDiskBlock {
ULONG rdb_ID; /* 4 character identifier */
ULONG rdb_SummedLongs; /* size of this checksummed structure */
LONG rdb_ChkSum; /* block checksum (longword sum to zero) */
ULONG rdb_HostID; /* SCSI Target ID of host */
ULONG rdb_BlockBytes; /* size of disk blocks */
ULONG rdb_Flags; /* see below for defines */
/* block list heads */
ULONG rdb_BadBlockList; /* optional bad block list */
ULONG rdb_PartitionList; /* optional first partition block */
ULONG rdb_FileSysHeaderList; /* optional file system header block */


Bede bardzo wdzieczny za wskazowki.
[#2] Re: Jak startuje AmigaOS?

@rjack, post #1

Proponuję też napisać do Kamila Iskry :)
A sam z chęcią poczytam mądrych odpowiedzi w tym wątku. mam nadzieję, że takie będą. :)
[#3] Re: Jak startuje AmigaOS?

@rjack, post #1

Szuka pliku startup-sequence. Ale gdzie to jest zapisywane iż wie ze wlasnie ten a nie inny?

w romie


Chodzi mi przede wszystkim o odpowiednik wyzej opisanej sytuacji w AmigaOS. Tzn. kiedy nastepuje moment, ze system zaladowal sie juz na takim poziomie, ze moze byc wykonany przez niego skompilowany program?


hmm, procesor zaczyna czytac rozkazy z pamięci od pewnego adresu (np. 0) i jak je czyta to je zaczyna wykonywac. Skoro amigaos to mikrokernel to tworzenie procesów powinno się odbywać zaraz po "wczytaniu" exec.library, ale pewny nie jestem.

[#4] Re: Jak startuje AmigaOS?

@rjack, post #1

Na tej stronie jest to opisane:

http://wandel.ca/homepage/execdis/index.html

[#5] Re: Jak startuje AmigaOS?

@rjack, post #1

System Amigi znajduje się w romie. W czasie inicjalizacji następuje odczyt danych z adresu 0 wzwyż (lub w rejestrze VBR) i wykonanie kodu. W Amidze jest to biblioteka exec. Ona jest sercem systemu. Zaś sterowniki (też w romie) decydują jakie pliki uruchamiać lub sektory. Najlepiej na dzień dobry poczytaj źródła biblioteki exec (w wersji 1.2, ale zawsze) dostępnej na dyskach fisha. Niestety assembler M68K wysoce polecany.
[#6] Re: Jak startuje AmigaOS?

@cholok, post #5

Dzieki z szybka reakcje z Waszej strony. Sprobuje przeanalizowac podany link. Czytalem swego czasu kurs C K. Iskry. Udziela sie na forum PPA?

Piszą tam m.in. że wskaznik na strukture ExecBase znajduje sie pod adresem 0x00000004. Wskaznik ten dolacza podczas linkowania modul startowy. Jednak chodzi tu o uruchamianie programow.

Jednak w sumie chyba podobnie jest z uruchamianiem funkcji z Exec Library podczas startu systemu? Jak uważacie? Pytanie ktore sobie zadaje ktora funkcja jako pierwsza jest uruchamiana?

Bibliotega Exec jest otwierana podczas inicjalizacji systemu, ale dlaczego akurat w komorce 0x00000004 jest do niej wskaznik? Czy to nie jest ograniczenie procesora 68000?

Poza tym po wlaczeniu komputera (chyba w komorce 0) zapisywana jest wartosc i to nie przypadkoaw. Jestem pewien ze gdzies o tym czytalem ale nie pamietam niestety gdzie.
[#7] Re: Jak startuje AmigaOS?

@rjack, post #6

Jeśli chodzi ci o normalną funkcjć z exec.library pomijając kod inicjujący to jest nią Permit();

Jest to związane z tym że licznik programu procesora podczas inicjacji jest ładowany tą wartością. adres 0 jest traktowany jako adres tablicy wektorów przerwań i dlatego procesor musi startować od 4 taka jest jego konstrukcja.
[#8] Re: Jak startuje AmigaOS?

@rjack, post #6

@ rjack
Czytalem swego czasu kurs C K. Iskry. Udziela sie na forum PPA?

Może pod jakimś dziwnym pseudo, bez avatara i z małym licznikiem postów - samych konkretnych i na temat? :)

Poza tym po wlaczeniu komputera (chyba w komorce 0) zapisywana jest wartosc i to nie przypadkoaw. Jestem pewien ze gdzies o tym czytalem ale nie pamietam niestety gdzie.

Może w C&A? Nie wiem na ile to by było pomocne, ale w C&A był taki cykl opisujący poszczególne biblioteki. Exec była w pierwszym artykule. To były czasy asemblera, intr czy inter i demek, więc mogło tam być coś ciekawego. Sprawdzę w domu i dam znać.
[#9] Re: Jak startuje AmigaOS?

@rjack, post #6

Pierwszy 1 KB pamięci jest zarezerwowany dla obsługi wyjątków i przerwań procesora. Adres 0 zawiera wskaźnik stosu, 4 wskaźnika dla rejestru Program Counter, czyli adres wykonującego się zadania. Nowsze procesory (od 010) posiadają rejestr VBR zawierący adres tej tablicy i wtedy może być to adres inny niż 0, ale po zimnym restarcie zawsze będzie to 0.

Nie istotne jest, która instrukcja jest uruchamiana jako pierwsza. To i tak są tylko porcedury jednego programu. Pierwsze zadania uruchamiane w systemie to będą taski powstałe w wyniku procedur OpenDevice. Dopiero te zaczną szukać urządeń bootujących i wczytają krótki programik inicjujący z boot sectorów (blocków). Ten zaś nie musi być zgodny z systemem i może przejąć cały komputer i sterować nim po swojemu. Tylko programik zgodny z Amiga DOS otworzy shella i zacznie szukać pliku startup-sequence.
[#10] Re: Jak startuje AmigaOS?

@R-Tea, post #8

Bardzo ciekawy materiał o RDB, bootbloku i strukturach:

http://lclevy.club.fr/adflib/adf_info.html#p41

Ogólnie start widze tak:

Procesor -> tablica vektorów skoków -> biblioteka exec -> reszta kickstartu -> bootblock -> dopiero tutaj zwykly uzytkownik moze uruchomic pierwszy program

Poukladam wiadomosci, na ktore mnie naprowadziliscie i sformuluje jakies sensowne pytania, dalej liczac na Wasza pomoc :)
[#11] Re: Jak startuje AmigaOS?

@rjack, post #1

rjack napisał(a):

> W Linuxie, bodajze w zrodlowym pliku asemblerowym bootsect.s
> mozna znaleźć skok do pierwszego kawalka kodu napisanego w C
> (jmp kernel_start()).

Eeeeee. tak dobrze to nie ma szeroki uśmiech skok do kernela w C jest "troszke" dalej niz w bootsect.s ;)

> Chodzi mi przede wszystkim o odpowiednik wyzej opisanej
> sytuacji w AmigaOS. Tzn. kiedy nastepuje moment, ze system
> zaladowal sie juz na takim poziomie, ze moze byc wykonany przez
> niego skompilowany program?

Odpowiednika wyzej opisanej sytuacji w AmigaOS nie ma, jako ze amigowy kernel jest hybryda mikro- i egzokernela (nie pasuje w pelni do obu definicji, laczac zarazem cechy obu).

System jest w stanie uruchomic program uzytkownika jak tylko biblioteka exec.library zostanie zainicjalizowana.

Chcialbys jeszcze cos wiedziec w tej kwestii?

[#12] Re: Jak startuje AmigaOS?

@szuler, post #11

Który schemat jest bliższy, jak go byś zmodyfikował dla nietypowego amigowego microkernela? Mam na mysli klasyczny system np. AmigaOS 3

http://en.wikipedia.org/wiki/Microkernel


http://en.wikipedia.org/wiki/Exokernel (o ile ten miałeś na myśli)



Przy okazji podaję link do opisu biblitecznych funkcji, urządzeń, autodocs... Może komuś się przyda.

http://gega.homelinux.net/AmigaDevDocs/
[#13] Re: Jak startuje AmigaOS?

@rjack, post #12

rjack napisał(a):

> Który schemat jest bliższy, jak go byś zmodyfikował dla
> nietypowego amigowego microkernela?

W zasadzie żaden. Idea mikrokerlena aż ciśnie się na usta (rom to zbiór niezależnych od siebie modułów, inicjalizowanych w trakcie systemu jeden za drugim), jednak AmigaOS nie spełnia wszystkich warunków.

Definicja egzokernela nie pasuje do AmigaOS w pełni choćby z tego powodu, że narodziła się dużo później niż sam amigowy system.

> http://en.wikipedia.org/wiki/Exokernel (o ile ten
> miałeś na myśli)

tak, ten miałem na myśli.

Amigowy kernel (innymi słowy fragment exec.library) nie zapewnia żadnej abstrakcji ani zarządzania zasobami sprzętowymi. Brak jest ochrony pamięci, a wszystkie procesy pracują na tych samych prawach we wspólnej przestrzeni adresowej (z tego powodu można by je raczej nazwac wątkami). Jeśli jakikolwiek program chce się odwołać bezpośrednio do sprzętu, nie musi o nic prosić kernela. exec.library zapewnia tylko podstawową funkcjonalność (zarządzanie pamięcią, przerwania, multitasking, dostęp do dodatkowych modułów, IPC). Dostęp do urządzeń i dodatkowa funkcjonalność zapewnione są nie przez serwisy (odrębne procesy każdy we własnej przestrzeni adresowej, jak ma to miejsce w przypadku mikrokernela), tylko przez biblioteki (*.library, *.device, *.resource) zachowujące się jak naturalne przedłużenie programu z nich korzystającego.

Którą z definicji (exokernel, microkernel) ty bys uznał za bliższą AmigaOS?

[#14] Re: Jak startuje AmigaOS?

@szuler, post #13

Bliżej do mikrokernela, ale w ogóle to nie jest ani ten ani tamten.
Teraz kilka luźnych uwag.

Teoretycznie można sobie wyborazić mikrokernel bez ochrony pamięci. Jego brak chyba nie jest argumentem. Brak ochrony pamięci zapewnia szybkość z powodu braku potrzeby kopiowania komunikatów.

Device mogą być wykorzystywane jako biblioteki, ale tak naprawdę to są odrębne zadania, tyle, że przestrzeń adresowa jest wspólna. Znowu w teorii można sobie wyobrazić wszystkie serwisy wykonane za pomocą device'ów. Podobnie jest z handlerami czy filesystemami z tym, że te nie mają struktury bibliotek.

Ważna sprawa: inaczej niż gdzie indziej exec nie jest wykonywany w trybie nadzorcy, ale w trybie użytkownika.
[#15] Re: Jak startuje AmigaOS?

@cholok, post #14

cholok napisał(a):

> Device mogą być wykorzystywane jako biblioteki, ale tak
> naprawdę to są odrębne zadania,

Nie do konca. To moga, ale nie musza byc odrebne zadania. Czesc z nich nie tworzy wlasnych taskow, tylko wykonuje komendy wyslane za pomoca DoIO natychmiast (i ustawiaja zawsze flage IOF_QUICK)

> Podobnie jest z
> handlerami czy filesystemami z tym, że te nie mają struktury
> bibliotek.

Handlery i filesystemy sa procesami, ale wynika to ze sposobu w jaki dziala dos.library.



Ostatnia modyfikacja: 08.11.06 23:31
[#16] Re: Jak startuje AmigaOS?

@szuler, post #15

Mnie odpowiada bardziej schemat exokernela w stosunku do AmigaOS, przynajmnie na moim poziomie wiedzy :)

Interesuje mnie jakie zadanie jako pierwsze tworzy sie. Czym różni się zadanie (task) od procesu? Jak ogólnie podobny jest procesu z unixow?
[#17] Re: Jak startuje AmigaOS?

@rjack, post #16

Co do exokernela to doczytaj na wiki jeszcze o AmigaOS oraz kernel, no i nie sugeruj się rysunkiem, który fajnie pasuje do AOSa, ale tylko z wyglądu.
Jakie zadanie tworzy się jako pierwsze? To wynika z podanego listingu, zbytnio nie analizując wychodzi, że "exec.library".
Process to rozszerzony task. Różni powiązaniami z dosem. Porównaj exec/tasks.i z dos/dosextens.i.
[#18] Re: Jak startuje AmigaOS?

@rjack, post #16

process to ot samo co task przy czym process moze odczytywac dane poprzez dos.library.na tasku tego nie polecam:).

caly knif w aosie polega na czyms takim jak dos.library.dopiero po jej inicjalizacji mozna uzywac programow w sensie ogolniepojetym. Przed tym sa magiczne rzeczy.exec sprawdza sprzet,dodaje peryferia. adres 0 afaik jest uzyty tylko po warm reset,jest tam adres przechowywany od ktorego system zacznie uruchomienie.tak bylo w a500,gra ssi np "death knight of Krynn" tak robi ale juz "champions of Krynn" nie.

ogolnie duzo pisania jest co robi na poczatku exec,ja juz nie pamietam ale jest tez na aminecie zdeasemblowana exec.library z kick 1.3 bodajze.

Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem