Mapowanie pamięci i mapa pamięci, OS programming na szerszą skalę
| neodemon | 23.11.2006 20:26:05 | |
![]() | 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:
| |
| neodemon | 23.11.2006 20:27:53 | |
![]() | 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. | |
| Kajoj | 24.11.2006 11:35:55 | |
![]() | 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. | |
| neodemon | 24.11.2006 12:05:05 | |
![]() | 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. | |
| Kajoj | 28.11.2006 15:38:55 | |
![]() | Ad 3 wystarczy troche pogooglowac: http://4programmers.net/Z_pogranicza/FAQ/Pami%C4%99%C4%87_w_komputerach_PC_32BIT | |
| neodemon | 28.11.2006 21:08:30 | |
![]() | 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. | |
| Nieznany | 13.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) | |
| Fr3m3n | 14.12.2006 19:27:45 | |
![]() | 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... | |
| Nieznany | 15.12.2006 20:13:44 | |
![]() | Looknij na to: http://osnau.freehostia.com/index.php?option=com_smf&Itemid=2&topic=25.0 | |

