Mapowanie pamięci i mapa pamięci, OS programming na szerszą skalę




neodemon23.11.2006 20:26:05
#
Dołączył: 23.11.2006

Witam, to mój pierwszy post na tym forum. Programowaniem zajmuję się już od kilku lat, lecz nie w assemblerze i nie programowaniem systemów operacyjnych, co nie znaczy że nie mogę się nauczyć i w związku z tym mam kilka pytań odnośnie programowania OS'ów:

  1. Chciałbym się dowiedzieć czym jest mapowanie pamięci (np. dla hardwaru). Czytałem o tym dużo i z tego co przeczytałem to jest w uproszczeniu dodanie deskryptora GDT takiego, który żądany adres wirtualny przekształca na dany adres fizyczny.

  2. Co to znaczy zmapować pamięć urządzenia do przestrzeni adresowej procesu?

  3. Kolejna rzecz która nie daje mi spokoju to mapa pamięci, a mianowicie w jaki sposób można uzyskać informacje na temat wszystkich zarezerwowanych obszarów pamięci.

  4. Jeśli chciałbym napisać sterownik do np. karty graficznej to musiałbym mieć jej dokładną specyfikację, problem w tym że nigdzie na stronie nVidii nie ma czegoś takiego, ale w takim razie jakim cudem inne systemy operacyjne mają sterowniki do tych kart graficznych?

  5. Jeśli ustawie procesor w tryb chroniony to mam tak jakby pamięć o 2 przeznaczeniach, do przechowywania danych i do przechowywania kodu, ale przecież program jako taki zawsze operuje na danych, w jaki więc sposób ładowane są programy wykonywalne w trybie chronionym, przecież w skompilowanym pliku są i dane i kod wykonywalny?

neodemon23.11.2006 20:27:53
#
Dołączył: 23.11.2006

Nie wiem czemu temat pojawił się 2 razy, może dlatego że dałem odśwież stronę po dodaniu, w każdym razie prosiłbym o pisanie tylko w 1, a usunięcie drugiego.

Kajoj24.11.2006 11:35:55
#
Dołączył: 05.01.2005

Witamy na forum :)

Jak widze kolega postawil sobie bardzo ambitne zadanie. Zbudowac wielozadaniowe jadro.

Ja nie jestem ekspertem w tym temacie ale moge podzielic sie jakas tam moja skromna wiedza.

Ad.3. W trakcie stronnicowania pamieci os tworzy katalogi i tablice stron pamieci

Ad.4 Dokumentacja jest dostepna tylko do bardzo niewielu urzadzen. Panujacy BLOB zjada wszystkich producentow OS. W przypadku braku wstarcia od producenta pod dany OS programisci siegaja po stare sprawdzone metody reverse engineeringu. Zawsze mozesz zajrzec do zrodel BSD czy linuxa zeby zobaczyc sobie jak to tam jest zrobione.

Ad.5 W plikach wykonywalnych typu EXE, ELF itp. Dane od kodu wykonywalnego sa zawsze rozdzielone. Laduje sie ja do roznych segmentow. Kod dostaje prawa tylko do odczytu, a dane rowniez do zapisu. W implementacjach ochrony pamieci jak np. W^X czy PAX, implementuje sie bit zezwolenia do wykonania dla x86 aby dane nie moglu byc wykonywane, w celu zabezpieczenia przed atakami typu buffer-overflow.

neodemon24.11.2006 12:05:05
#
Dołączył: 23.11.2006

Odnośnie 3-go punktu chodziło mi o obszary typu pamięć video karty graficznej, pamięć ekranu, tablica przerwań, obszary innych urządzeń hardwarowych itp.

A co do tych exeków, to w jaki sposób plik wykonywalny wie gdzie są dane na których ma operować, skoro dane trafiają w inne miejsce pamięci niż kod wykonywalny? Przecież exek nie wie nawet w jaki obszar pamięci sam trafi.

Kajoj28.11.2006 15:38:55
#
Dołączył: 05.01.2005

Ad 3 wystarczy troche pogooglowac: http://4programmers.net/Z_pogranicza/FAQ/Pami%C4%99%C4%87_w_komputerach_PC_32BIT

neodemon28.11.2006 21:08:30
#
Dołączył: 23.11.2006

Chodziło mi o programowy sposób na wyznaczenie i rozpoznanie zarezerwowanych obszarów bo wiadomo że w zależności od tego jaki kto ma sprzęt to może mieć więcej lub mniej takich obszarów i w innych miejscach. Dużo informacji można uzyskać od interfejsu ACPI, ale wiadomo że nie każda płyta główna nim dysponuje.

Nieznany13.12.2006 17:42:24
#
neodemon napisa≥:
Chodziło mi o programowy sposób na wyznaczenie i rozpoznanie zarezerwowanych obszarów bo wiadomo że w zależności od tego jaki kto ma sprzęt to może mieć więcej lub mniej takich obszarów i w innych miejscach. Dużo informacji można uzyskać od interfejsu ACPI, ale wiadomo że nie każda płyta główna nim dysponuje.

Masz 2 wyjścia: 1. Z RMode wykonujesz int 15h (z niepamiętam jakimi parametrami) i dostajesz mape RAM'u 2. Korzystasz z bootloadera zgodnego z multiboot (np. GRUB, dużo OS'ów z niego korzysta)

Fr3m3n14.12.2006 19:27:45
#
Dołączył: 03.12.2006

Jedyna metoda to albo acpi, ale tzw. direct probe - po prostu lecisz po calej pamieci, zapisujac po dwordzie - pozniej sprawdzasz czy on tam jest. Jak nie ma, to znaczy ze koniec pamieci :)

Jest to jednak dosc niebezpieczne, mozna trafic na zmapowana pamiec jakiejs karty czy cos...

Nieznany15.12.2006 20:13:44
#

Looknij na to: http://osnau.freehostia.com/index.php?option=com_smf&Itemid=2&topic=25.0




Kontakt

Jeśli chcesz się z nami skontaktować napisz na adres: info(at)binboy.org lub odwiedź nasz profil na Facebooku!

O Nas

Serwis binboy.org to kopalnia wiedzy dla wszystkich z branży IT, w szczególności dla programistów i webmasterów. To duży zbiór kursów programowania, tutoriali, darmowych ebooków, setki kodów źródłowych itp.

Bądź w kontakcie

Panel użytkownika

Zaloguj się do panelu użytkownika.
Nie masz konta? Zarejestruj się!
Zapomniałeś hasła?