Różnica między mapowaniem portów a dostępem do pamięci?

19

Czy ktoś może wyjaśnić, jaka jest różnica między mapowaniem portów a mapowaniem pamięci i co się z nimi dzieje? Dlaczego jest mapowany port, czym różni się budową od map pamięci i czy istnieje jakikolwiek powód, dla którego wiele architektur korzysta z obu? Co to jest „port” w tym sensie, ponieważ port może oznaczać różne rzeczy w różnych kontekstach?

Przykład: przekierowanie portów, port jako punkt końcowy komunikacji, „mapowanie portów”.

Powiedzmy, że piszę OUT na porcie 400h (fikcyjny; tylko na przykład) (jak w x86-64 itd.).

Do czego lub gdzie piszę, jeśli nie ma tego w pamięci? Jak mapowany jest „port” i co to znaczy w tym sensie?

Varaquilex
źródło

Odpowiedzi:

24

We / wy mapowane w pamięci i we / wy mapowane na port to dwie uzupełniające się metody we / wy.

We / wy mapowane w pamięci

W systemach odwzorowanych w pamięci dostęp do urządzenia we / wy można uzyskać tak, jakby był on częścią pamięci. Loada Storepolecenia są wykonywane do odczytu i zapisu na urządzeniach I / O, tak jak są one używane dla pamięci (mapowane porty mają specjalne polecenia dla I / O). Oznacza to, że urządzenia we / wy używają tej samej magistrali adresowej co pamięć, co oznacza, że ​​procesor może odwoływać się do pamięci lub urządzenia we / wy na podstawie wartości adresu. To podejście wymaga izolacji w przestrzeni adresowej: tzn. Adresy zarezerwowane dla operacji we / wy nie powinny być dostępne dla pamięci fizycznej.

Poniżej znajduje się obraz prostego, podstawowego systemu komputerowego . Sprawa jest znacznie bardziej skomplikowana we współczesnych systemach.

wprowadź opis zdjęcia tutaj


We / wy mapowane na port

Według Wikipedii

Mapowane we / wy portów często używa specjalnej klasy instrukcji procesora specjalnie do wykonywania operacji we / wy. Znajduje się to w mikroprocesorach Intel z instrukcjami IN i OUT. Te instrukcje mogą odczytywać i zapisywać od jednego do czterech bajtów (outb, outw, outl) w urządzeniu I / O. Urządzenia I / O mają oddzielną przestrzeń adresową od pamięci ogólnej, albo przez dodatkowy pin „I / O” na fizycznym interfejsie procesora, albo całą magistralę dedykowaną do I / O. Ponieważ przestrzeń adresowa we / wy jest odizolowana od przestrzeni pamięci głównej, jest to czasami określane jako izolowane we / wy.


Co do zalet i wad: ponieważ urządzenia peryferyjne są wolniejsze niż pamięć, współdzielenie danych i magistrali adresowych może spowolnić dostęp do pamięci. Z drugiej strony, dzięki prostocie I / O, systemy mapowane w pamięci zapewniają, procesor wymaga mniejszej logiki wewnętrznej, co pomaga wdrożyć szybsze, tańsze i zużywające mniej energii procesory. Logika jest podobna do tej w systemach RISC: zmniejsz złożoność, uzyskaj bardziej dedykowany i solidny system, który jest przydatny na przykład w przypadku systemów wbudowanych.

Wręcz przeciwnie (ponownie z Wiki):

Instrukcje we / wy mapowane na port są często bardzo ograniczone, często zapewniając jedynie proste operacje ładowania i przechowywania między rejestrami procesora a portami we / wy, tak że na przykład dodanie stałej do rejestru urządzenia zamapowanego na port wymagałoby trzech instrukcje: przeczytaj port do rejestru procesora, dodaj stałą do rejestru procesora i zapisz wynik z powrotem do portu.

Zdecydowanie zalecamy przeczytanie tego artykułu wiki w celu uzyskania dalszych informacji.


Aby odpowiedzieć na jedno z twoich pytań:

Do czego lub gdzie piszę, jeśli nie ma tego w pamięci?

Piszesz do rejestrów interfejsu I / O poprzez magistralę danych, która później (gdy jest gotowa) wysyła dane do faktycznego urządzenia I / O. Poniżej znajduje się przykładowy interfejs urządzenia we / wy.

wprowadź opis zdjęcia tutaj

Varaquilex
źródło
Co to znaczy, że piszesz dla mapowanej pamięci „To podejście wymaga izolacji w przestrzeni adresowej: to znaczy, że adresy zarezerwowane dla I / O nie powinny być dostępne dla pamięci fizycznej”. Czy masz na myśli, że adresy zarezerwowane dla I / O znajdują się w pamięci głównej i nie są dostępne dla innych niż I / O? Oczywiście adresy IO i adresy inne niż IO są pamięcią fizyczną. Nie ma czegoś takiego jak pamięć, która nie byłaby fizyczna. (chyba że jesteś zwolennikiem argumentów Williama Lane'a Craiga, tzn. że rzecz może mieć niefizyczny mózg i pamięć!).
barlop
1
a kiedy piszesz „Zapisujesz do rejestrów interfejsu I / O poprzez magistralę danych, która później (gdy jest gotowa) wysyła dane do faktycznego urządzenia I / O. Poniżej znajduje się przykładowe zdjęcie I / O urządzenie." Nie jest jasne, czy „rejestracja” we / wy znajduje się w urządzeniu, przypuszczam, że jeśli nazwiemy go rejestrem, brzmi to tak, jakby znajdowało się w urządzeniu. Ale potem piszesz „… który później (gdy jest gotowy) wysyła dane do faktycznego urządzenia I / O”. Nie jest więc jasne, gdzie mówisz, gdzie są te lokalizacje pamięci. Niezależnie od tego, czy znajdują się w urządzeniu, czy na zewnątrz urządzenia ... lub kiedykolwiek poza urządzeniem.
barlop
1
Heads up: skompilowałem je z tego, czego nauczyłem się podczas wykładu Mikroprocesory i niektóre z Wiki. Powiedziawszy to, rozumiem przez to, że pytałeś w swoim pierwszym komentarzu: „Adresy IO i adresy inne niż IO są pamięcią fizyczną” , jak myślisz, nie jest jasne . W rzeczywistości (o ile mi wiadomo, o ile mnie nauczono) dekoder kodu adresu aktywuje interfejs IO, gdy określony jest adres IO, co oznacza, że ​​gdy podasz adres, nie powinien on znajdować się w zakresie adresu fizycznego, np. , 0000 USD - 00FF USD za fizyczne i 0100 USD - 01FF za IO (zignoruj ​​kwotę, po prostu zachowaj granice).
Varaquilex,
@barlop W przypadku drugiego pytania mam na myśli to, co miałem na myśli: „Poniżej znajduje się przykładowy interfejs urządzenia we / wy ”. Poprawiłem to w dokonanej właśnie edycji. Mam nadzieję, że ta edycja wyeliminowała zamieszanie. Jeśli nie, poproś o więcej. Postaram się odpowiedzieć najlepiej jak potrafię.
Varaquilex,
1
@barlop Punkt lokalizacji pamięci jest niejednoznaczny w większości postów i literatury, na które natknąłem się. Albo zakładają, że już wiesz, albo tak naprawdę nie wiedzą. Wierzę, że odpowiedź brzmi w tych słowach z LDD3 ch. 9: „Pamięć I / O to po prostu region lokalizacji przypominających pamięć RAM, które urządzenie udostępnia procesorowi przez magistralę”. (kursywa dodana) Czyli pamięć i / lub rejestry znajdują się w urządzeniu. Port I / O i pamięć I / O to tylko 2 sposoby, w jakie system udostępnia te lokalizacje oprogramowaniu.
orodbhen
2

W We / Wy z mapowaniem pamięci (po prostu MMIO) do urządzeń można uzyskać dostęp za pośrednictwem instrukcji, które w rzeczywistości mają na celu dostęp do pamięci. Każde urządzenie otrzymuje określone adresy pamięci. Jednak podczas próby odczytu lub zapisu w tej części pamięci określone urządzenie (prawdopodobnie mostek północny) po prostu wysyła je do odpowiedniego urządzenia. Nawet jeśli komputer nie ma wystarczającej ilości pamięci na taki adres (ponieważ adresy MMIO są zwykle bardzo wysokie), nie ma to znaczenia jako pamięć fizyczna (to ta, którą widzisz, gdy patrzysz na płytę główną, tę znaną jako RAM ) nie jest nawet powiązany. Jeśli masz wystarczającą ilość pamięci RAM dla adresu, jest on albo mapowany na wyższą pamięć inną niż We / Wy, albo po prostu utracony, co oznacza, że ​​nie możesz tam czytać ani pisać.

Port-Mapped I / O (po prostu PMIO) jest bardzo różne. Masz różne instrukcje używane do odczytu i zapisu na portach. Istnieje przestrzeń adresowa portu, podobnie jak przestrzeń adresowa pamięci, w której adresy są albo adresami we / wy, które faktycznie komunikują się z urządzeniami, albo są po prostu nieprawidłowe. PMIO można zasadniczo traktować jako MMIO z oddzielną przestrzenią adresową pamięci tylko dla I / O.

Ahmet Zahit Can
źródło
„PMIO można zasadniczo traktować jako MMIO z oddzielną przestrzenią adresową pamięci tylko dla I / O.” - Przestrzeń adresowa jest tak prostą i podstawową koncepcją, dlaczego wybierasz mylącą analogię do swojej skądinąd rozsądnej odpowiedzi? Ta wprowadzająca w błąd analogia nie zmienia faktów: np. Mogą istnieć inne przestrzenie adresowe oprócz „przestrzeni adresowej pamięci”.
trociny
1

Przy nazwach takich jak „sygnał we / wy” i „mapowanie pamięci” wszystko jest znacznie bardziej skomplikowane niż jest w rzeczywistości, a zatem sprawia wrażenie, że jest o wiele więcej i obejmuje on zaawansowany temat. Obecnie ludzie postrzegają to jako coś nowego. Ale to bardzo dalekie od przypadku. Nawet Babbage w latach trzydziestych XIX wieku napędzał drukarkę, wymagało to sygnału we / wy, aczkolwiek wykonanego przez oś i koło zębate. Np. W maszynach Bohatera Aleksandrii 2000 lat temu lub w kinach od czasów greckich zawsze wyciągali linę z zestawu różnych lin do sterowania oświetleniem lub scenerią, każda lina jest jak linia wejściowa i wyjściowa, jest jak proste jest to, że adresem jest „która linia”, tj. którą rzecz, pamięć lub urządzenie wybieramy,

Chociaż duże komputery mainframe, które wypełniały budynki szafami, w latach 40-tych używały 64 bitów, a zatem dawno temu zajmowały się mapowaniem we / wy tak samo, jak dawno temu, np. Konrad Zuse i jego komputer wielkości pokoju punkt, który miał około 20 cyfr dziesiętnych w latach trzydziestych i musiał napędzać takie rzeczy, jak jego drukarka i różne wskaźniki żarówki i przełączniki. Ale na małych mikroprocesorach historia jest inna, której nie wyobrażano sobie do lat 60. i zbudowano do 1971 r. Wszystkie te techniki wykorzystujące logikę 8-bitową w latach 80-tych były używane w mikroprocesorach w 4 bitach w latach 70-tych, 2-bitowe w latach 60-tych i były używane w 16bit w latach 90 ' s kiedy wszyscy zaczęli kupować komputer i dlatego po raz pierwszy zaczęli omawiać ten temat operacji we / wy i mapowania pamięci po raz pierwszy, a wraz z pojawieniem się Internetu okazało się, że jest to coś nowego; potem mieliśmy komputery 32-bitowe w latach 00-tych i komputery 64-bitowe w latach 10-tych, co spowodowało niekończące się dyskusje na temat pamięci w dół linii danych. Aby odpowiedzieć na twoje pytanie, będę mówić o układach, które hobbystycy elektroniki kupili 30-40 lat temu, tak jak wtedy, ponieważ później rzeczy stały się tak zaawansowane, że nie byłem w stanie zbudować z późniejszymi układami, ale zasady są teraz takie same, bramy są po prostu ukryte w większych czarnych pudełkach, które zawierają inne szpilki, które radzą sobie z tymi operacjami, które toczą się o wiele więcej równolegle (np. umożliwiając wiele oktawowych zatrzasków,

Cóż, nie wiem nic o wszystkich nowych językach ani o tym, jak to jest teraz na nowoczesnych komputerach PC, ale mogę powiedzieć, jak to było w dawnych czasach, kiedy budowałem komputery z układami scalonymi.

Wszystkie mapowanie we / wy i mapowanie pamięci w prostych słowach ma miejsce, jeśli podciągnąłeś na przykład mnóstwo żarówek na jakieś święto i miałeś przewody do każdej z nich i nazwałeś lokalizacje pamięci (tzn. Żarówki reprezentują pamięć w pamięci RAM albo wł. lub wył., a jeśli wybierzesz lokalizację 0, otrzymasz drut 0, lokalizację 1, drut 1, lok 2 drut 2 itd.), jeśli dodasz kilka dodatkowych przewodów, np. jeden przewód jest dzwonkiem, ta konkretna lokalizacja nie jest pamięcią to urządzenie, na które wysyłasz sygnał wyjściowy za pomocą polecenia OUT, aby zadzwonił. Ale z punktu widzenia komputera jest on postrzegany jako miejsce pamięci, ponieważ jest tak samo podłączony do MPU. Jeśli dodano inny przewód, którym był przełącznik obsługiwany zewnętrznie, jest to urządzenie we / wy, które byłoby instrukcją IN dla komputera. Nazywa się to I / O mapowane I / O.

Teraz na komputerach przewody w magistralach reprezentują linie adresowe lub linie danych, ALE są binarne, tj. Za pomocą 2 przewodów można mieć 00 01 10 11, tj. 4 kombinacje 2 ^ 2, więc przy 8 liniach 2 ^ 8 = 256 możliwości, z 20 linii 2 ^ 20 = 1048576 z 30 liniami 2 ^ 30 = 1073741824 (1 koncert) możliwości z 30 liniami. Dlatego nazywa się to MAPPED, a nie tylko I / O i pamięć. Mówią one o mapowaniu I / O i pamięci, ponieważ mapujesz przewody JAKO POŁĄCZENIE y kodując je binarnie. Więc jeśli powiesz, że masz 2 przewody, 4 kombinacje, nie można ich po prostu podłączyć do żarówek (nie wspominając o wymaganym wzmocnieniu prądu z niewielkich napięć z MPU i zapobieganiu prądowi zwrotnemu), ale 2 przewody mają aby przejść przez dekoder (używaliśmy 138 do dekodowania 3 linii na 8 linii, 164 do dekodowania 4 linii binarnych na 16 linii. ) Po przejściu przez dekoder te 2 linie, np. A0 i A1 (adres 0 i adres 1 (LINIE)), stają się 4 liniami (włączonymi lub wyłączonymi) dla konkretnej żarówki, którą jeździsz (w przypadku na komputerze, PAMIĘĆ), ale w niektórych przypadkach lokalizacja ta zamiast tego wybiera urządzenie wejściowe / wyjściowe i mówi „użyj mnie”, tj. jak pamięć, po zlokalizowaniu dane są następnie przekazywane w jedną lub drugą stronę (używając sprytnej logiki tri-state do odcięcia napięć po drodze za każdym razem) na liniach magistrali danych D0..7 lub D0..31 lub niezależnie od rozmiaru danych na komputerze (masz 2-bitowy, 4-bitowy, 8-bitowy, 16-bitowy, 32-bitowy, 64-bitowy, 128-bitowy, 256-bitowy, komputer, cokolwiek komputer, który budujesz). Tak więc dane naturalnie przechodzą lub wychodzą z linii danych do pamięci lub do urządzenia I / O (JEŻELI są mapowane w pamięci), ale NIE POWINNY BYĆ USZKODZONE Z instrukcjami IN / OUT, TO I WYJŚCIE oznacza z jakiegoś INNEGO bloku pamięci I / O, specjalnego bloku pamięci I / O wewnątrz MPU przypisanego specjalnie tylko dla I / O, tj. (Nie zamapowanego w pamięci), tej przestrzeni I / O nie zawsze otrzymujesz na niektórych mikroprocesorach, np. nie sądzę, że mieliśmy go na 6502, ale mieliśmy na Z80. Więcej artystycznych układów wykorzystuje tylko mapowanie pamięci, np. W konsolach do gier itp., Bardziej rozsądne, ale nieciekawe (pozostające w książce) układy również zajmują miejsce we / wy. Mapowane we / wy pamięci jest szybsze, ponieważ obejmuje adresowanie pamięci (co jest super szybkie dla pamięci RAM), dlatego komputer typu graficznego używa tylko mapowania pamięci dla we / wy, aby uzyskać szybkość. Odwzorowane operacje we / wy są przypisywane do wolnych portów, np. Rs232 lub portu równoległego i używają poleceń IN OUT. mi. (bez mapowania pamięci), ta przestrzeń we / wy nie zawsze jest dostępna na niektórych mikroprocesorach, np. nie sądzę, że mieliśmy ją na 6502, ale mieliśmy ją na Z80. Więcej artystycznych układów wykorzystuje tylko mapowanie pamięci, np. W konsolach do gier itp., Bardziej rozsądne, ale nieciekawe (pozostające w książce) układy również zajmują miejsce we / wy. Mapowane we / wy pamięci jest szybsze, ponieważ obejmuje adresowanie pamięci (co jest super szybkie dla pamięci RAM), dlatego komputer typu graficznego używa tylko mapowania pamięci dla we / wy, aby uzyskać szybkość. Odwzorowane operacje we / wy są przypisywane do wolnych portów, np. Rs232 lub portu równoległego i używają poleceń IN OUT. mi. (bez mapowania pamięci), ta przestrzeń we / wy nie zawsze jest dostępna na niektórych mikroprocesorach, np. nie sądzę, że mieliśmy ją na 6502, ale mieliśmy ją na Z80. Więcej artystycznych układów wykorzystuje tylko mapowanie pamięci, np. W konsolach do gier itp., Bardziej rozsądne, ale nieciekawe (pozostające w książce) układy również zajmują miejsce we / wy. Mapowane we / wy pamięci jest szybsze, ponieważ obejmuje adresowanie pamięci (co jest super szybkie dla pamięci RAM), dlatego komputer typu graficznego używa tylko mapowania pamięci dla we / wy, aby uzyskać szybkość. Odwzorowane operacje we / wy są przypisywane do wolnych portów, np. Rs232 lub portu równoległego i używają poleceń IN OUT. bardziej rozsądne, ale nieciekawe (pozostające w książce) układy również zajmują miejsce we / wy. Mapowane we / wy pamięci jest szybsze, ponieważ obejmuje adresowanie pamięci (co jest super szybkie dla pamięci RAM), dlatego komputer typu graficznego używa tylko mapowania pamięci dla we / wy, aby uzyskać szybkość. Odwzorowane operacje we / wy są przypisywane do wolnych portów, np. Rs232 lub portu równoległego i używają poleceń IN OUT. bardziej rozsądne, ale nieciekawe (pozostające w książce) układy również zajmują miejsce we / wy. Mapowane we / wy pamięci jest szybsze, ponieważ obejmuje adresowanie pamięci (co jest super szybkie dla pamięci RAM), dlatego komputer typu graficznego używa tylko mapowania pamięci dla we / wy, aby uzyskać szybkość. Odwzorowane operacje we / wy są przypisywane do wolnych portów, np. Rs232 lub portu równoległego i używają poleceń IN OUT.

Teraz, jeśli zamiast dodawać dwa przewody, jeśli faktycznie zastąpiłeś dwa przewody, które pierwotnie poszły do ​​żarówek i wziąłeś niektóre z tych żarówek i zastąpiłeś je innymi rzeczami, np. Dzwonkiem na jednym i przełącznikiem na drugim, teraz nie ma do nich odniesienia (wybrane ), odpowiednio za pomocą instrukcji IN i OUT, można się do nich odwoływać, uzyskując dostęp do tej konkretnej lokalizacji w pamięci, która wybiera te przewody (które pierwotnie były żarówkami). To jest I / O mapowane na pamięć.

Mapowane we / wy pamięci oznacza, że ​​rzeczywista szyna adresowa, która zwykle trafia do pamięci (RAM), jest również podłączona do INNYCH dekoderów (dekoderów logicznych), a gdy wyczuje konkretną binarną kombinację sygnałów adresowych, generuje wysoki poziom wyjściowy , (np. jeśli miałeś ładunek bramek, a nie bramek, a powiedziałeś, że jeśli to i nie to i tak dalej, za pomocą pinów A0..A20 lub jakiejkolwiek innej wielkości twojej magistrali adresowej), to ten wysoki sygnał WŁĄCZA zatrzask, (dla konkretnego urządzenia, takiego jak port szeregowy, port równoległy), zatrzask ten PRZESUWA dane na magistrali danych, aż do urządzenia I / O. Służy to do zapisu na urządzeniu I / O. Odczytywanie działa odwrotnie, urządzenie we / wy przekazuje dane z powrotem, a jeśli dobrze pamiętam, wysyła dokładnie taką samą kombinację kodów adresowych na linie adresowe.

Przypuszczam, że dzisiaj musi działać w ten sam sposób, tyle że będą to po prostu o wiele więcej danych i linii adresowych.

Dosłownie PRZESYŁASZ we / wy do linii adresu. Stąd I / O jest skutecznie MAPOWANE w przestrzeń pamięci, tak jakby to była pamięć. Ale inny zatrzask uniemożliwia pinom adresu dostęp do pamięci RAM w tym samym czasie, dzięki czemu nie dostajesz napięć dwóch adresów lub źródeł danych na tej samej linii, co mogłoby uszkodzić układy.

Z instrukcją IN i OUT mieliśmy to 40 lat temu na chipie Z80. Dotyczy to szczególnych przypadków, w których układ faktycznie zajmuje się samym wejściem / wyjściem w inny sposób, tzn. Nie jest mapowany w pamięci. (tj. z mapowaną pamięcią, po prostu czytasz lub zapisujesz w miejscu pamięci, ale przy IN i OUT już mówisz CPU, że jest to sygnał I / O, a nie pamięć). Tak więc z instrukcją IN / OUT ma ona swoją własną przestrzeń adresową we / wy (która jest dodatkowa dla pamięci RAM), ten ramka we / wy, jak się wydaje, ma zestaw adresów taki sam, z wyjątkiem tego, że bezpośrednio uzyskujesz dostęp do urządzenia za pośrednictwem dekodera podłączonego do tych adresów we / wy i nie masz dostępu do urządzenia we / wy ze standardowych pinów adresowych, dotyczy to instrukcji IN / OUT.

które w tym przypadku najlepiej przekazać jako ciągi kodów ASCII dla liter i cyfr. Te polecenia są dokładnie takie same, jakbyś używał instrukcji IN i OUT w pętli, w której liczba jest długością łańcucha.

Jeśli uzyskujesz dostęp np. Do głośnika komputerowego, po prostu przesyłasz po jednym kawałku danych za pomocą OUT.

Jeśli czytasz z portu równoległego, robisz IN i używasz kodu adresu I / O portu. Pisząc do niego, np. Do sterowania starymi drukarkami lub robotyką za pomocą sygnałów elektronicznych, można użyć polecenia OUT. Port równoległy i port szeregowy (stary RS232) są typowymi portami, które były używane. RS232 to dane szeregowe, tylko jeden bit jest dozwolony na wejściu lub wyjściu, więc jeśli czytałeś z rs232, miałbyś tylko 1 bit odpowiedniego bajtu, to samo z wyjściem. Szybkość transmisji wynosi maksymalnie 17 kHz dla rs232, ale te często napędzały elektronikę, w przeszłości budowałem obwody rs232, np. Do odczytu napięć lub sterowania mikrokontrolerami PIC. Każdy port ma nazwę np. COM1 COM2 COM3 COM4 i mają adresy I / O. Nie jestem tutaj pewien, ale są one podobne do np. 3F8h 378h (h = adres szesnastkowy)

Nie jestem pewien co do nowoczesnych portów, ale jeśli pisałeś na USB, najprawdopodobniej będzie to We / Wy odwzorowane w pamięci dla większej prędkości.

Port klawiatury PS / 2, myślę, że używa instrukcji IN do odczytu danych z klawiatury. Zastępuje to stary RS232, ale wierzę, że ma nieco inną specyfikację.

Napęd dyskowy był zwykle zamapowany w pamięci, prawdopodobnie tak jest teraz, tzn. Nie jeździsz dyskiem z instrukcjami wejścia / wyjścia, byłyby one zbyt wolne. Ale porty są i tak wolne, więc nie ma to znaczenia, np. Drukarka jest wolna, jeśli chodzi o wymaganą szybkość danych w porównaniu ze wspaniałymi, np. 200 megabajtami na sekundę wymaganymi od dysku twardego. Głośnik, potrzebuje tylko częstotliwości czasów dźwięku około 10 lub 20, powiedzmy, że 20 kHz byłoby wystarczające dla brzęczyka, stąd jest to I / O. Powolne rzeczy używają We / Wy, instrukcji WE / WY. Dlatego USB jest prawdopodobnie teraz zmapowane w pamięci, musisz to sprawdzić.

Lepszym sposobem na zrozumienie tego jest to. Na starych komputerach w latach 80. czasami chciałeś kontrolować niektóre urządzenia, które zbudowałeś, i nie miałeś specyfikacji dla portów wyjściowych (ponieważ w tamtych czasach producent ukrywał to, aby niektóre firmy, np. Joystick i kartridże) mogły uzyskać przewagę w rynek przez jakąś ofertę biznesową). To, co musiałeś zrobić, to otworzyć komputer i dosłownie wlutować przewody do niektórych punktów na magistrali adresowej, np. Przylutowałeś trzy przewody do niektórych punktów w obwodzie w bezpiecznej odległości (aby nie uszkodzić układu pod wpływem ciepła), te punkty połączone przewodem obwodu drukowanego z np. pinami A15 A7 i A1 na mikroprocesorze. I zwykle trzeba by również podłączyć linię MREQ (linię żądania pamięci i / lub linię RD / WR, aby uzyskać bardziej uporządkowany sygnał i dodać go do logiki i nie, ale gdybyście byli sprytni, moglibyście to po prostu zrobić z liniami adresowymi) A następnie podłączyliście te trzy przewody + ten dodatkowy sygnał typu Ready (np. linia MREQ RD lub WR, aby dać jakieś aktywne niskie lub wysokie (które wymagałyby dodatkowego NIE) brama tutaj), aby powiedzieć, że DANE są gotowe na linii TERAZ) przez bramę 4-wejściową ORAZ, która dała wyjście do diody LED przez rezystor 200 omów, masz własną mapę zmapowanych szybkich I / O do światła led , który można zatrzasnąć przez zatrzask SR lub zatrzask typu D, aby przechowywać go w 1-bitowej pamięci zewnętrznie na niektórych płytkach drukowanych. Tutaj 15 to linia 32K, 7 to linia 64, 1 to linia 2 (binarnie działa na potęgach 2, więc A1 to 2 ^ 1, A7 to 2 ^ 7, a A15 to 2 ^ 15), więc jeśli zaadresowana lokalizacja 32768 + 64 + 2 = 32834 = F041 w trybie szesnastkowym, używając LDA lub STA lub LD na starych MPU w asemblerze, wypisujesz to na ten led, świeciłby jasno, gdyby rezystor miał około 100 omów. Więc zrobiłeś I / O z mapowaniem pamięci, że tak proste, jak to jest możliwe, możesz to zrobić dzisiaj, lutując do linii adresu mpu tak samo. Ale nie zrobiłbyś tego teraz ze względu na delikatność obwodów. Ale możesz również dołączyć do linii danych D0..7 (w dawnych czasach) lub powiedzieć d0..31 teraz dla 32-bitów na starym komputerze 486. Następnie, jeśli zaadresowałeś to miejsce w kodzie maszynowym, wykonując ładowanie akumulatora o wartości 8 (mov ax, obecnie 8) lub zapisz tę wartość akumulatora w lokalizacji adresowej (mov F041h, akumulator ax, NAWET dzisiaj dostaniesz to, co doprowadziło do nadejścia Uwaga: 8, w tym przykładzie jest na szynie danych, w tym konkretnym przypadku nie przekazujemy danych, po prostu włączamy określone urządzenie (dioda LED świeci, jeśli wybraliśmy TO urządzenie we / wy, tutaj tylko dioda LED), więc w tym przykładzie nie ma znaczenia, jaki numer mamy z tą instrukcją MOV ax, 8, może to być np. mov ax, 243 i nadal włączamy diodę LED na linii F041h, kiedy wykonamy mov F041h, ponieważ ponieważ używamy tego samego adresu. Widzisz, są linie adresowe i są linie danych. Więc kiedy adresujesz 3F8 w COM1 lub cokolwiek to jest, mapa pamięci I / O po prostu wysyła sygnał do portu, np. Ps / 2, a brama sprawdza, czy masz 1110000100 na liniach, tj. 11 jest 3 1000 to F, a 0100 to 8, patrz konwersja dwójkowa na szesnastkową. Jeśli wysokie napięcia pojawiają się w pozycjach bitów, w których występuje 1, to port, np. Rs232 lub ps / 2, jest ustawiony na aktywny, tj. Jest włączony, umożliwia to zatrzaski przez sygnał aktywacji układu CE lub układ CS wybierz prosty. 8 instrukcji, może to być np. Mov ax, 243 i nadal włączamy diodę LED na linii F041h, kiedy wykonujemy ruch F041h, ponieważ ponieważ używamy tego samego adresu. Widzisz, są linie adresowe i są linie danych. Więc kiedy adresujesz 3F8 w COM1 lub cokolwiek to jest, mapa pamięci I / O po prostu wysyła sygnał do portu, np. Ps / 2, a brama sprawdza, czy masz 1110000100 na liniach, tj. 11 jest 3 1000 to F, a 0100 to 8, patrz konwersja dwójkowa na szesnastkową. Jeśli wysokie napięcia pojawią się w pozycjach bitów, w których występuje 1, oznacza to, że port, np. Rs232 lub ps / 2, jest ustawiony na aktywny, tj. Jest włączony, umożliwia to zatrzaski przez sygnał włączenia chipa CE lub chip CS wybierz prosty. 8 instrukcji, może to być np. Mov ax, 243 i nadal włączamy diodę LED na linii F041h, kiedy wykonujemy ruch F041h, ponieważ ponieważ używamy tego samego adresu. Widzisz, są linie adresowe i są linie danych. Więc kiedy adresujesz 3F8 w COM1 lub cokolwiek to jest, mapa pamięci I / O po prostu wysyła sygnał do portu, np. Ps / 2, a brama sprawdza, czy masz 1110000100 na liniach, tj. 11 jest 3 1000 to F, a 0100 to 8, patrz konwersja dwójkowa na szesnastkową. Jeśli wysokie napięcia pojawiają się w pozycjach bitów, w których występuje 1, to port, np. Rs232 lub ps / 2, jest ustawiony na aktywny, tj. Jest włączony, umożliwia to zatrzaski przez sygnał aktywacji układu CE lub układ CS wybierz prosty. ponieważ ponieważ używamy tego samego adresu. Widzisz, są linie adresowe i są linie danych. Więc kiedy adresujesz 3F8 w COM1 lub cokolwiek to jest, mapa pamięci I / O po prostu wysyła sygnał do portu, np. Ps / 2, a brama sprawdza, czy masz 1110000100 na liniach, tj. 11 jest 3 1000 to F, a 0100 to 8, patrz konwersja dwójkowa na szesnastkową. Jeśli wysokie napięcia pojawiają się w pozycjach bitów, w których występuje 1, to port, np. Rs232 lub ps / 2, jest ustawiony na aktywny, tj. Jest włączony, umożliwia to zatrzaski przez sygnał aktywacji układu CE lub układ CS wybierz prosty. ponieważ ponieważ używamy tego samego adresu. Widzisz, są linie adresowe i są linie danych. Więc kiedy adresujesz 3F8 w COM1 lub cokolwiek to jest, mapa pamięci I / O po prostu wysyła sygnał do portu, np. Ps / 2, a brama sprawdza, czy masz 1110000100 na liniach, tj. 11 jest 3 1000 to F, a 0100 to 8, patrz konwersja dwójkowa na szesnastkową. Jeśli wysokie napięcia pojawiają się w pozycjach bitów, w których występuje 1, to port, np. Rs232 lub ps / 2, jest ustawiony na aktywny, tj. Jest włączony, umożliwia to zatrzaski przez sygnał aktywacji układu CE lub układ CS wybierz prosty. 11 to 3 1000 to F, a 0100 to 8, patrz konwersja dwójkowa na szesnastkową. Jeśli wysokie napięcia pojawiają się w pozycjach bitów, w których występuje 1, to port, np. Rs232 lub ps / 2, jest ustawiony na aktywny, tj. Jest włączony, umożliwia to zatrzaski przez sygnał aktywacji układu CE lub układ CS wybierz prosty. 11 to 3 1000 to F, a 0100 to 8, patrz konwersja dwójkowa na szesnastkową. Jeśli wysokie napięcia pojawiają się w pozycjach bitów, w których występuje 1, to port, np. Rs232 lub ps / 2, jest ustawiony na aktywny, tj. Jest włączony, umożliwia to zatrzaski przez sygnał aktywacji układu CE lub układ CS wybierz prosty.

W zatrzasku jest to pin włącznika E Enable lub aktywne włączenie niskiej mocy wyjściowej OE. Tj. W powyższym przykładzie używamy adresów, aby wybrać (dekodując), Z którego urządzenia I / O chcemy skorzystać (tzn. W tym przykładzie dioda LED zapala się, jeśli to urządzenie I / O jest wybrane. To jest linia aktywacji NASTĘPNIE, po wybraniu urządzenia I / O, NASTĘPNIE dane są przesyłane z magistrali danych (D0..7 w dawnych czasach lub przykład D0..63 w przypadku komputera 64-bitowego), za pomocą ośmiokrotnych zatrzasków 373 w starym dni, są to układy klap typu D, które przechowują dane wewnątrz klapek. Przy aktywnym wysokim zboczu zegara dane przechodzą i są przechowywane. Ta krawędź zegara będzie pochodzić z sygnału „DATA RDY” na sygnale danych , to ma różne nazwy, nie wiem, jak się teraz nazywa. Więc dla wersji 64-bitowej mamy 8 oktalnych zatrzasków. I używają dwukierunkowych zatrzasków do sterowania danymi w obu kierunkach lub w trzech stanach, tak że gdy urządzenie I / O nie jest używane, linie danych są w stanie wysokiej impedancji. Dlatego wybieracie urządzenie I / O z kombinacją na liniach adresowych, jest to liczba, np. 3f8h w OUT 3F8h, 7, a dane, tutaj w przykładzie 7, są przekazywane przez linie danych, w polecenie OUT dane przekazuje OUT do zatrzasku danych i do urządzenia we / wy. Gdybyś miał IN, wykonywałbyś komendę np. IN 3f8h, 800h (spodziewam się, ale nie znam składni asemblera x86), co mam na myśli to, że dla IN wprowadzasz dane z linie danych (po wybraniu adresu, np. tutaj 3f7h, który wybiera TAKIE urządzenie I / O), dane te pochodzą z urządzenia I / O, poprzez przerzutniki typu D w zatrzasku danych (po jednym dla każdego bitu linii magistrali danych) i są wprowadzane do styków D0..7 lub (D0..63 na nowoczesnych komputerach) w mikroprocesorze MPU ). W tym przykładzie wstawiłem IN 3f8h, 800h, aby pokazać, że po wejściu dane są następnie przechowywane pod adresem 800h. Wydaje mi się, że składnia x86 jest inna, prawdopodobnie musiałbyś zrobić IN 3f8h, ah lub coś podobnego, tj. Najpierw do rejestru z nadchodzącymi danymi, potem MOV 800h, ah, tj. Przenieść dane do pamięci lokalizacja w pamięci RAM, (jeśli chcesz ją zapisać), lub zrób coś innego z ah itp. ah to przykładowy rejestr, może to być dowolny, al, bh, bl itd. cokolwiek, ale sprawdź składnię, każdy system asemblera jest nieco inaczej, nie jestem ekspertem od x86. Ponownie używam 3f8h jako przykładowego adresu we / wy, są setki,

Podczas gdy podczas uzyskiwania dostępu do pamięci (RAM, np. 64-bajtowe pamięci RAM i dynamiczne pamięci RAM w latach 70-tych, 8K SRAM i DRAM w latach 80-tych, rzędy SIMMS mają po kilka megabajtów (moduł pamięci pojedynczej w linii) w latach 90-tych i teraz jest w formie modułów DDR zawierających moduły DIMM, podwójnych modułów pamięci, nie sprawdziłem, ale najnowsze prawdopodobnie bez wątpienia mają po kilka gigabajtów na każdym małym chipie), jeśli nie jest to adres I / O (bardzo kilka adresów to adresy We / Wy, pamięć jest obecnie miliony razy większa lub więcej w przestrzeni adresowej niż We / Wy na nowoczesnym komputerze), nadal używasz tych samych instrukcji odczytu i zapisu danych do pamięci, ale nie jesteś napędzając niektóre zewnętrzne układy logiczne, które szukają tych bitów, zamiast tego te styki adresowe i danych są podłączone bezpośrednio do układów pamięci RAM.

W kodzie maszynowym adresowanie we / wy i pamięci wygląda tak samo, jakby obie były dostępami do pamięci, ale to, co dzieje się fizycznie, jest zupełnie inne w rzeczywistym obwodzie elektronicznym.

Christine
źródło