Різниця між картографованим портом доступу та пам’яті доступу?


17

Чи може хто-небудь пояснити, в чому різниця між картою портів і картою пам'яті і тим, що має і те, і інше? Чому існує картографічний порт, чим він відрізняється за структурою від карт пам'яті і чи є причина, що багато архітектури використовують обидва? Також, що таке "порт" у цьому сенсі, оскільки порт може означати різні речі в різних контекстах?

Приклад: переадресація портів, порт як кінцева точка зв'язку, "зіставлення портів".

Скажімо, я пишу OUT на порт 400h (вигаданий; лише для прикладу) (наприклад, у x86-64 тощо).

Що або де я пишу, якщо це не на пам'ять? Як відображається "порт" і що це в цьому сенсі?



Відповіді:


21

I / O з відображенням на пам'ять і входом / виводом з картами портів - це два взаємодоповнюючих способи вводу / виводу.

Введення / виведення з пам'яттю

У системах з картографічною пам'яттю доступ до пристрою вводу / виводу доступний так, як це частина пам'яті. Loadі Storeкоманди виконуються для читання і запису на пристрої вводу / виводу, подібно до того, як вони використовуються для пам'яті (на картографічному порту є спеціальні команди для вводу / виводу). Це означає, що пристрої вводу-виводу використовують ту саму шину адреси, що й пам’ять, тобто CPU може посилатися на пам'ять або пристрій вводу-виводу на основі значення адреси. Цей підхід вимагає ізоляції в адресному просторі: тобто адреси, відведені для вводу-виводу, не повинні бути доступними для фізичної пам'яті.

Нижче зображено просту базову комп'ютерну систему . Справа набагато складніша в сучасних системах.

введіть тут опис зображення


Порт-карту вводу / виводу

За даними Вікіпедії

Порт-відображений ввід / вивід часто використовує спеціальний клас інструкцій CPU, спеціально для виконання вводу-виводу. Це знайдено в мікропроцесорах Intel, з інструкціями IN і OUT. Ці інструкції можуть читати та записувати один-чотири байти (outb, outw, outl) на пристрій вводу / виводу. Пристрої вводу / виводу мають окремий адресний простір від загальної пам’яті, або це здійснюється додатковим штифтом «I / O» у фізичному інтерфейсі процесора, або цілою шиною, присвяченою вводу / виводу. Оскільки адресний простір для вводу / виводу ізольовано від простору для основної пам'яті, це іноді називають ізольованим введенням / виводом.


Щодо переваг та недоліків: оскільки периферійні пристрої повільніше, ніж пам'ять, обмін даними та шинами адреси може уповільнити доступ до пам'яті. З іншого боку, завдяки системам, нанесеним на карту простоти вводу / виводу, ЦП вимагає меншої внутрішньої логіки, і це допомагає швидше, дешевше і менше споживати енергоспоживання процесорів. Логіка схожа на систему RISC: зменшіть складність, отримайте більш віддану і надійну систему, яка є дуже зручною, наприклад, для вбудованих систем.

Навпаки (знову з Вікі):

Інструкції з картографічним входом / виводом, нанесені на порт, дуже обмежені, часто забезпечують лише прості операції завантаження та зберігання між регістрами процесора та портами вводу / виводу, так що, наприклад, для додавання константи до реєстру пристроїв, нанесених на порт, потрібно три інструкції: прочитайте порт до реєстру процесора, додайте константу до реєстру процесора та запишіть результат назад у порт.

Настійно рекомендую прочитати цю статтю у Вікі для отримання додаткової інформації.


Щоб відповісти на одне із запитань:

Що або де я пишу, якщо це не на пам'ять?

Ви пишете в регістри інтерфейсу вводу / виводу через шину даних, яка пізніше (коли буде готова) надсилає дані на фактичний пристрій вводу / виводу. Нижче зображено приклад інтерфейсу пристрою вводу / виводу.

введіть тут опис зображення


Що це означає, що ви пишете для відображеної в пам'яті картини "Цей підхід вимагає ізоляції в адресному просторі: тобто адреси, відведені для вводу-виводу, не повинні бути доступними для фізичної пам'яті". Ви маєте на увазі, що адреси, зарезервовані для вводу-виводу, знаходяться в основній пам'яті та недоступні для не-вводу-виводу. Очевидно, що IO адреси та non-IO адреси - це фізична пам'ять. Немає такої речі, як пам'ять, яка не є фізичною. (якщо ви не вірите в аргументи Вілліям Лейн Крейга, тобто те, що річ може мати нефізичний мозок і пам'ять!).
барлоп

1
і коли ви пишете це "Ви пишете в регістри інтерфейсу вводу / виводу через шину даних, яка пізніше (коли буде готова) надсилає дані на фактичний пристрій вводу / виводу. Нижче наведено зображення прикладу вводу / виводу. пристрій. " Вам незрозуміло, чи є "пристрій" вводу-виводу в пристрої, я думаю, якщо ви називаєте його реєструвати, це звучить як у пристрої. Але потім ви пишете ".. який пізніше (коли буде готовий) надсилає дані на фактичний пристрій вводу-виводу", тож незрозуміло, де ви кажете ці місця в пам'яті. Незалежно від того, чи вони знаходяться в межах пристрою, чи поза ним .. або коли-небудь поза пристроєм.
барлоп

1
Голова вгору: Я склав ті, з чого я дізнався на лекції про мікропроцесори, а також частину з Wiki. Якщо сказати це, то, що я маю на увазі, під яким ви запитали у своєму першому коментарі, це те, що: "IO адреси та non-IO адреси - це фізична пам'ять", не зрозуміло, як ви думаєте. Насправді (наскільки я знаю, наскільки мене навчають) декодер адресного коду активує інтерфейс IO, коли вказано адресу IO, тобто, коли ви надаєте адресу, вона не повинна знаходитися в діапазоні фізичної адреси, наприклад , $ 0000 - $ 00FF для фізичних та $ 0100 - $ 01FF за IO (ігноруйте суму, просто доглядайте межі).
Вараквілекс

@barlop Що стосується вашого другого питання, ви зараз тут, що я мав на увазі "Нижче - зображення прикладу інтерфейсу пристрою вводу / виводу ". Я виправив це в редакції, яку я тільки що зробив. Я сподіваюся, що редагування усунула плутанину. Якщо ні, запитайте більше. Я спробую відповісти якнайкраще.
Вараквілекс

1
@barlop Точка розташування пам’яті неоднозначна в більшості публікацій та літератури, з якими я стикався. Або вони припускають, що ви вже знаєте, або насправді не знають. Я вважаю, що відповідь у цих словах з LDD3 гл. 9: "Пам'ять вводу / виводу - це просто область RAM-подібних місць, яку пристрій робить доступним для процесора по шині." (курсив додано), тобто пам'ять та / або регістри є на пристрої. Порт вводу / виводу та пам'ять вводу / виводу - це лише два способи, якими система робить ці місця доступними для програмного забезпечення.
orodbhen

1

У вході / виводу з карткою пам'яті (просто MMIO) доступ до пристроїв здійснюється через інструкції, які фактично призначені для доступу до пам'яті. Кожен пристрій отримує певні адреси пам'яті. Однак, коли ви намагаєтесь прочитати чи записати в цю частину пам'яті, певний пристрій (швидше за все, північний міст) просто надішле його на відповідний пристрій. Навіть якщо на комп'ютері не вистачає пам'яті для такої адреси (оскільки MMIO адреси зазвичай дуже великі), це не має значення як фізична пам'ять (тобто та, яку ви бачите, коли ви дивитесь на материнську плату, відому як оперативна пам'ять ) навіть не пов'язані. Якщо у вас є достатня кількість оперативної пам’яті для адреси, вона або відображається на більш високому, не-вхідному / вихідному, або просто втрачає сенс, який ви не можете там читати чи писати.

Порт-карту вводу / виводу (просто PMIO) дуже відрізняється. У вас є різні інструкції, які використовуються для читання та запису до портів. Існує адресний простір порту, як і адресний простір пам’яті, де адреси є адресами вводу-виводу, які фактично спілкуються з пристроями, або просто недійсні. PMIO по суті може розглядатися як MMIO з окремим адресним простором пам'яті лише для вводу-виводу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.