Bernard
6/13/2007 7:06:00 PM
Karol "Zal" Zalewski wrote:
> Zaczne zatem od pocz?tku. Jaki? czas temu rozpocz?3em z grup? kolegów ze
> studiów prace nad rozwojem prostego 16b systemu operacyjnego - w ramach
> zajea z "Oprogramowania systemowego". System ten pisany w zupe3no?ci w
> Asemblerze, przy wykorzystaniu asemblera TASM, a uruchamiany z poziomu
> DOS (jako plik .exe) nie by3 trudny do modyfikacji. Posiada3 ju?
> segmentacje, zarz?dzanie przerwaniami, przej?cie do trybu chronionego
> itp. itd. Wszystko oprócz stronicowania. Niemniej jednak przekszta3cenie
> ca3o?ci tak, aby pracowa3a w 32b nie stanowi3o wielkiego problemu.
>
> K3opoty rozpocze3y sie tu? po tym, jak postanowili?my kontynuowaa
> projekt w celu uzyskania prostego systemu 64b. Archaiczny asembler by3 i
> nadal jest tutaj pewnym utrudnieniem, ale nie to jest najwa?niejsze.
Czemu nie u?ywacie FASMa lub najnowszego NASMa?
> Pos3uguj?c sie dokumentacj? Intela (m.in. IA-32 Intel Architecture
> Software Developer's Manual Volume 3A - sekcja 9.8.5) doszli?my ju? do
> momentu w którym to posiadamy utworzone struktury wymagane przez
> stronicowanie w trybie 64b i jeste?my w trakcie procedury, która
> umo?liwi przej?cie do trybu kompatybilno?ci z kodem 32b. Jeste?my
> ?wiadomi tego, i? u?yta w trybie 32b segmentacja nie jest ju?
> obs3ugiwana - na rzecz stronicowania. W ka?dym b?d? razie ka?da próba
?e co? Segmentacja jest zredukowana do minimum tylko w trybie
64-bitowym, w trybie zgodno?ci dzia3a jak dzia3a3a.
> implementacji piecioetapowego (wspomniana wy?ej sekcja 9.8.5) procesu
> przej?cia do trybu kompatybilno?ci konczy sie restartem tu? po wpisaniu
> do CR0.PG jedynki (aktywacja stronicowania).
No to co? namieszali?cie zdrowo.
> Po tym d3ugim opisie mam ju? tylko krótkie pytanie. Czy mo?liwym jest,
Mo?e i d3ugim, tylko ?e kompletnie nic nie napisa3e?...
> aby problemem by3o przej?cie z segmentacji w trybie 32b do stronicowania
> w trybie kompatybilno?ci? Czy wymagane jest zaimplementowanie
> stronicowania w trybie 32b tylko po to, aby móc nastepnie przej?a do
> stronicowania w trybie kompatybilno?ci?
Nie ma "przej?cia z segmentacji do stronicowania". Jest segmentacja i
jest stronicowanie, praktycznie niezale?ne od siebie.
> Bede wdzieczny za wszelkiego rodzaju sugestie. Jestem ?wiadom tego, i?
> to co napisa3em mo?e bya dla wielu zbyt d3ugie, nu??ce i niezrozumia3e.
> Niemniej jednak nadal licze na to, i? kto? (korzystaj?c ze swojego
> do?wiadczenia) bedzie w stanie mi udzielia odpowiedzi. Nawet je?eli
> odpowied? brzmia3aby mniej/wiecej w ten sposób: "nie wiem, o co ci
> chodzi, ale zabrali?cie sie od tego od z3ej strony" :D
Ja to robie tak (celem u mnie by3o napisanie najkrótszego programu typu
..COM, który prze3?cza w tryb 64-bitowy i z powrotem do rzeczywistego,
wiec to nie ca3kiem to, o co Ci chodzi):
- Przygotowuje trzy tablice stron po jednym wa?nym deskryptorze w
ka?dej, daj?ce identyczno?ciowe odwzorowanie pierwszych 2 MB i 3aduje CR3.
- Definiuje GDT z trzema deskryptorami kodu - 16-, 32- i 64-bitowym.
- W3?czam PAE i PGE w CR4.
- W3?czam LME w EFER.
- Wy3?czenie przerwan.
- Przej?cie do trybu chronionego od razu z w3?czonym stronicowaniem.
- Daleki skok do kodu 32-bitowego - jeste?my w Compatibility Mode.
- Z kodu 32-bitowego daleki skok do kodu 64-bitowego.
- Z kodu 64-bitowego daleki skok do 16-bitowego, wci?? w Compatibility.
- Wy3?czenie stronicowania.
- Wy3?czenie trybu chronionego (nie mo?na razem ze stronicowaniem!).
- Daleki skok do 16-bitowego kodu w trybie rzeczywistym.
- W3?czenie przerwan.