2012-02-10 12 views
8

Mam nadzieję, że pytanie jest sformułowane wystarczająco dobrze, aby ktoś mógł go zrozumieć.W jaki sposób przestrzeń adresowa We/Wy jest odwzorowana na urządzenia?

Rozumiem, że pamięć główna (RAM) i we/wy sterowane przez port I/O ma własną przestrzeń adresową, która zawiera instrukcje takie jak IN, OUT.

Jeśli ktoś miałby napisać program asemblera w trybie rzeczywistym, czy to do dewelopera należeć będzie niezbędna dokumentacja wskazująca zakresy adresów na płycie głównej w jakim zakresie adresów? Powiedzmy, że gniazdo PCIe to adres X, drukarka Y.

Czy adresy to standardowy zakres adresów w zależności od typu magistrali?

Co mogę przeczytać, aby to lepiej zrozumieć? Mam nadzieję, że ktoś może pomóc. Dzięki.

~ edycja

Nawiązanie do systemów komputerowych.

+0

Czy masz żadnej konkretnej platformy na myśli? –

+1

Odpowiedź jest zupełnie inna w przypadku zwykłego komputera PC, na którym oczekuje się, że oprogramowanie będzie działać w wielu różnych konfiguracjach w porównaniu do odpowiedzi na osadzony komputer, na którym oprogramowanie musi tylko obsługiwać stałą konfigurację. Musisz zawęzić swoje pytanie. –

+0

Przepraszamy. Mam na myśli komputer. –

Odpowiedz

13

Na komputerze x86 bios zwykle zarządza przydzieleniem płaskiej/fizycznej przestrzeni adresowej, a wszystko zajmuje pewne miejsce w tej przestrzeni. Tak więc BIOS "wyliczy" urządzenia pcie, wychodząc na każde gniazdo Pcie, aby sprawdzić, czy ktoś tam jest. Istnieją standardowe rejestry konfiguracyjne, których urządzenie Pcie musi posiadać niektóre z nich, wskazując ile przestrzeni adresowej i jakiego rodzaju (oparte na I/O lub odwzorowane w pamięci). bios stara się uszczęśliwić wszystkich i dać im to, czego chcą. Windows lub Linux nie remapują tych urządzeń lub adresów, biorą to, co im dane przez bios. nie każdy system PTY działa w ten sposób, ale niestety tak działa PC.

Więc jeśli chcesz dostać się do śrub i nakrętek, dostać tę książkę http://www.mindshare.com/shop/?c=b&section=0A6B150A myślę, że jest link do pobrania dla niego, jeśli google „architekturę systemu pci”

jeśli Linuksa następnie odnaleźć źródła dla lspci, istnieją pewne biblioteki i przykłady, które można zedrzeć i zrobić własne, aby sprawdzić, jakie urządzenia są w systemie i jaki jest ich adres bazowy i zakres pamięci. Najprawdopodobniej będziesz chciał po prostu zrobić to, co robią inne systemy operacyjne i przeczytać kontrolery hosta pcie, aby zobaczyć, co zostało przydzielone gdzie, i dostarczyć te informacje do oprogramowania działającego w tym systemie. Możesz uruchomić jeden raz, a drukarka otrzyma adres 0xE0000000, a przy następnym 0xDB000000, dostarczyć mechanizm do twojego środowiska, aby przekazać te adresy, lub zeskanować je do jakiegoś stałego adresu w przestrzeni adresowej twojego środowiska i aby twój kod zarządzał tłumaczeniem do fizycznego/prawdziwy adres urządzenia.

Zakładam, że używając terminu tryb rzeczywisty mówimy o jakimś smaku systemu x86 i prawdopodobnie jest to PC o jakimś smaku. Może mac. Nie wiem dokładnie, jak robi to mac, nie wiem wystarczająco dużo o ich wyliczeniach. sprzęt prawdopodobnie nadal jest procesorem intel z mostem północnym i południowym, po którym następuje liczba mostków Pcie lub innych chipów Intel Pcie, które ostatecznie trafiają do wielu urządzeń Pcie, które są przylutowane do płyty (wideo, itp.) lub gniazda Pcie do podłączania kart. Jeśli uruchamiasz Linuksa i korzystasz z lspci i patrzysz na producenta i numery części, możesz znaleźć większość instrukcji/datasheetsów dla urządzeń wywiadowczych (ID dostawcy 8086) na stronie intels i możesz użyć programu lspci i jego programów dla rodzeństwa, aby zbadać kontrolę i rejestry statusu w tych kontrolerach Pcie, znowu, jeśli chcesz głębiej w to zagłębiać, nie jestem pewien, jaki jest twój rzeczywisty interes.

Adresy nie są standardem, ani poprawione, każdy bios jest częściowo dostosowany do tego modelu płyty głównej, zakres adresów dla przestrzeni pci wynosi zazwyczaj jeden gig lub mniej całej przestrzeni procesora, ale to okno zmienia się z przejście do wersji 64-bitowej i potrzeba więcej miejsca (powolny ruch).lokalizacja tego okna Pcie jest zależna od sprzętu (patrz arkusze danych, które wymieniłem dla tych różnych urządzeń intel, lub przez lub nvidia lub ktokolwiek, jeśli jest to system AMD), jeśli bios jest skonfigurowany do pracy w trybie 32-bitowym, to okno Pcie dla wszystkich urządzeń Pcie może być gdzieś pomiędzy 2 koncertem, ale oczywiście poniżej znaku 4 gig, ale to nie znaczy, że wszystkie te systemy używają znaku 3 gig. na 64-bitowe wydaje mi się, że również są blisko bliskie, ale od płyty głównej do płyty głównej to się zmienia. Następnie, jeśli chodzi o wyliczanie magistrali, jest to zarówno specyficzne dla płyty głównej, jak i dla poszczególnych komputerów, niektóre urządzenia są przykręcane/lutowane na płycie głównej i są wymieniane w tej samej kolejności za każdym razem, ale karty, które podłączasz do gniazd, muszą odpowiadać host i czasami są wyliczane na podstawie tego, kto pierwszy odpowiada, możesz uruchomić 20 razy i zobaczyć ten sam układ, uruchomić jeszcze raz, a dwie karty mogą zamienić lokalizacje, ponieważ zmieniana jest kolejność wyliczania. Więc nawet jeśli wydaje się, że twoja karta wideo jest zawsze w tym samym miejscu, nie ukrywaj tego numeru w dowolnym miejscu, zawsze skanuj autobusy lub stoły pty lub wykonuj wywołania biblioteki, aby dowiedzieć się, co jest gdzie. prawdopodobnie nie będzie się ruszał, gdy znajdziesz coś, dopóki nie uruchomisz ponownie i spróbujesz ponownie, więc nie będziesz musiał ponownie skanować, aby znaleźć miejsce, w którym coś jest za każdym razem, gdy chcesz uzyskać do niego dostęp.

tak, jeśli uaktualnisz lub obniżysz swój BIOS, bios to tylko oprogramowanie, czasami zmiany biosu mają związek z wyliczaniem liczby pcji (nie jest to rzadkością, np. Popularna karta wideo nie działa dobrze na płycie głównej, w której zastosowano mod w oprogramowaniu bios, aby zmienić reset lub cokolwiek, co da tej karcie większą szansę na działanie) i które może zmienić wyliczenie dla całego systemu.

+0

Dzięki! To bardzo pomaga. –

+0

Ta odpowiedź jest dobra, ale nie zawiera jednego kluczowego szczegółu: jak dokładnie BIOS przekazuje mapowanie portu I/O do procesora? –

0

Gdyby napisać program asemblera trybie rzeczywistym

ISR są tym, co może być po (przerwań Procedury Obsługi).
;

To jest lista adresów procedur obsługi przerwań przechowywanych w pierwszym segmencie pamięci. (segment 0000). Każdy numer przerwania ma 4-bajtowy adres obsługi, segment i odsunięcie, do , od którego program zostanie rozgałęziony po wywołaniu tego przerwania.

Adres można znaleźć, mnożąc liczbę przerwania przez 4, będącą przesunięciem, w którym przechowywany jest adres modułu obsługi.

Lokalizacja ISR może być zdefiniowana jako 0000: ax * 4, przerwań DOS mają ogólny numer 21h. Więc po prostu załadować siekierę z tym (lub AL)

Istnieje lista DOS przerywa tutaj ... to jest umiarkowanie duży ...

http://www.ctyme.com/intr/int-21.htm

Powiązane problemy