Различия между версиями 1 и 2
Версия 1 от 2020-01-20 19:33:18
Размер: 6500
Редактор: Lecture_Uploads
Комментарий:
Версия 2 от 2020-06-24 20:18:48
Размер: 6540
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 1: Строка 1:
= 08.1 Conspect (ru) =
Строка 2: Строка 3:
Выполняется внешними устройствами – они передают данные и принимают.
Эти устройства должны быть контролируемы
Устройства:
o Запоминающие
o Передающие
 * Выполняется внешними устройствами – они передают данные и принимают.
 * Эти устройства должны быть контролируемы
 * Устройства:
  * Запоминающие
  * Передающие
Строка 14: Строка 15:
Управляющий (записывает команды)
Порт данных (читает результат выполненных команд)
 * Управляющий (записывает команды)
 * Порт данных (читает результат выполненных команд)
Строка 19: Строка 20:
Нет специальных инструкций для доступа и управления устройствами
Отсутствие “совместной” памяти: операции с адресами MMIO выполняются разными аппаратными средствами, они могут быть более медленными, асинхронными и т.д.
Могут использоваться в качестве “регистров устройств”, как порты:
o Регистры управляющие (где мы пишем команды для устройства)
o Регистр данных (записываем сюда или читаем отсюда информацию)
o Регистр статусов (отображает текущее состояние устройства(обычно сообщает готово ли устройство к работе)
 * Нет специальных инструкций для доступа и управления устройствами
 * Отсутствие “совместной” памяти: операции с адресами MMIO выполняются разными аппаратными средствами, они могут быть более медленными, асинхронными и т.д.
 * Могут использоваться в качестве “регистров устройств”, как порты:
  * Регистры управляющие (где мы пишем команды для устройства)
  * Регистр данных (записываем сюда или читаем отсюда информацию)
  * Регистр статусов (отображает текущее состояние устройства(обычно сообщает готово ли устройство к работе)
Строка 29: Строка 30:
Арбитраж шины, когда наше устройство прочитало данные и положило их в память и это же устройство прочитало свои данные и тоже хочет положить их в память. Адреса памяти разные => не будет конфликта, но если они захотели это одновременно, то кто-то должен принять решение о том, кто первый кладет свои байтики в память. Это и есть арбитраж, но во время использования DMA, т.к. шина данных одна и несколько устройств одновременно хотят что-то в память положить, а вообще хотят получить DMA в своё собственное пользование.


Как сигнализировать о том, что устройство готово к работе? Самый простой способ – polling. Это опрос устройства, а не готово ли оно? Недостаток: мы постоянно должны это устройство опрашивать.
 * Арбитраж шины, когда наше устройство прочитало данные и положило их в память и это же устройство прочитало свои данные и тоже хочет положить их в память. Адреса памяти разные => не будет конфликта, но если они захотели это одновременно, то кто-то должен принять решение о том, кто первый кладет свои байтики в память. Это и есть арбитраж, но во время использования DMA, т.к. шина данных одна и несколько устройств одновременно хотят что-то в память положить, а вообще хотят получить DMA в своё собственное пользование.
 * Как сигнализировать о том, что устройство готово к работе? Самый простой способ – polling. Это опрос устройства, а не готово ли оно? Недостаток: мы постоянно должны это устройство опрашивать.
Строка 37: Строка 36:
1) настраиваем устройство, чтоб оно совершало ввод/вывод
2) запускается цикл проверки того, что устройство готово

a. если устройство готово, то после I/O, мы можем им еще поуправлять
b. если нет, то do with irrelevant
3) Перезапустить, если нужно
 1. настраиваем устройство, чтоб оно совершало ввод/вывод
 1. запускается цикл проверки того, что устройство готово
  a. если устройство готово, то после I/O, мы можем им еще поуправлять
  a. если нет, то do with irrelevant
 1. Перезапустить, если нужно
Строка 46: Строка 44:
1) Световые индикаторы (16 штук)
2) Кнопки (16 штук)
 1.Световые индикаторы (16 штук)
 1.Кнопки (16 штук)
Строка 52: Строка 50:
DLS – управление регистрами: есть 4 регистра, в которые мы пишем и 1 регистр, в котором мы читаем.
FFFF0010 – левый блок (байт)
FFFF0011 – правый блок (байт), каждый бит в вашем байте, который мы записываем в регистр соответствует одной палочке на светодиоде.
 * DLS – управление регистрами: есть 4 регистра, в которые мы пишем и 1 регистр, в котором мы читаем.
 * FFFF0010 – левый блок (байт)
 * FFFF0011 – правый блок (байт), каждый бит в вашем байте, который мы записываем в регистр соответствует одной палочке на светодиоде.
Строка 69: Строка 67:
X = (offset / 4) % (DisplayWidth / UnitWidth)
Y = (offset / 4) / (DisplayWidth / UnitWidth)
 * X = (offset / 4) % (DisplayWidth / UnitWidth)
 * Y = (offset / 4) / (DisplayWidth / UnitWidth)

08.1 Conspect (ru)

Ввод/вывод – поток данных внутри и вне

  • Выполняется внешними устройствами – они передают данные и принимают.
  • Эти устройства должны быть контролируемы
  • Устройства:
    • Запоминающие
    • Передающие

Ввод: мышь, клавиатура Вывод: графики, телефоны Ввод/вывод: консоль, хранилище

Methods of device control Порт:

  • Управляющий (записывает команды)
  • Порт данных (читает результат выполненных команд)

MMIO (mind memory input and output): вся/часть памяти устройства сопоставляется с определенной областью адресного устройства.

  • Нет специальных инструкций для доступа и управления устройствами
  • Отсутствие “совместной” памяти: операции с адресами MMIO выполняются разными аппаратными средствами, они могут быть более медленными, асинхронными и т.д.
  • Могут использоваться в качестве “регистров устройств”, как порты:
    • Регистры управляющие (где мы пишем команды для устройства)
    • Регистр данных (записываем сюда или читаем отсюда информацию)
    • Регистр статусов (отображает текущее состояние устройства(обычно сообщает готово ли устройство к работе)

Direct memory access – процесс, когда программа что - то считает, а в это время внешнее устройство потихоньку считывает данные, а после завершения она заявляет о готовности в этом месте памяти появились данные (внешнее устройство внезапно само умеет обращаться к оперативной памяти без участия процессора).

Какие возникают проблемы?

  • Арбитраж шины, когда наше устройство прочитало данные и положило их в память и это же устройство прочитало свои данные и тоже хочет положить их в память. Адреса памяти разные => не будет конфликта, но если они захотели это одновременно, то кто-то должен принять решение о том, кто первый кладет свои байтики в память. Это и есть арбитраж, но во время использования DMA, т.к. шина данных одна и несколько устройств одновременно хотят что-то в память положить, а вообще хотят получить DMA в своё собственное пользование.

  • Как сигнализировать о том, что устройство готово к работе? Самый простой способ – polling. Это опрос устройства, а не готово ли оно? Недостаток: мы постоянно должны это устройство опрашивать.

Polling – это такой способ взаимодействия с внешними устройствами, когда мы их периодически опрашиваем их готовность.

Алгоритм приблизительно такой:

  1. настраиваем устройство, чтоб оно совершало ввод/вывод
  2. запускается цикл проверки того, что устройство готово
    1. если устройство готово, то после I/O, мы можем им еще поуправлять
    2. если нет, то do with irrelevant
  3. Перезапустить, если нужно

Digital Lab Sim – имитация внешнего устройства, которой можно программно управлять в Mars. Содержит два блока:

  • 1.Световые индикаторы (16 штук) 1.Кнопки (16 штук)

1.png

  • DLS – управление регистрами: есть 4 регистра, в которые мы пишем и 1 регистр, в котором мы читаем.
  • FFFF0010 – левый блок (байт)
  • FFFF0011 – правый блок (байт), каждый бит в вашем байте, который мы записываем в регистр соответствует одной палочке на светодиоде.

Во время того, как программа проверяет готовность мы используем системный вызов sleep(), тем самым перенаправляя поток выполнения обратно в ядро до истечения времени ожидания.

Bitmap Display в отличии от DLS мапит целый кусок памяти, который соответствует видео памяти на экране. 2.png

Главное в настройке это адрес привязки. Его стоит привязать к memory map.

Ширина и высота очень важны, т.к. их произведение дает размер видеопамяти, Каждый пиксель экрана соответствует одному машинному слову закодированному в RGB (red green blue).

Формулы как вычислять координаты X и Y.

-где offset это адрес привязки, UnitWidth и DisplayWidth

3.png

HSE/ArchitectureASM/08_PollingMMIO/Conspect (последним исправлял пользователь FrBrGeorge 2020-06-24 20:18:48)