2 основных компьютерных вопроса - PullRequest
3 голосов
/ 22 августа 2010

Вопрос 1:

Где именно существует внутренний регистр и внутренний кэш?Я понимаю, что когда программа загружается в основную память, она содержит текстовый раздел, стек, кучу и так далее.Однако расположен ли регистр в фиксированной области основной памяти или физически находится на процессоре и не находится в основной памяти?Это относится и к кешу?

Вопросы 2:

Как именно контроллер устройства использует прямой доступ к памяти без использования ЦП для планирования / перемещения данных между локальным буферома основная память?

Ответы [ 2 ]

2 голосов
/ 22 августа 2010

Базовый ответ:

  1. Регистры ЦП находятся непосредственно на ЦП.Кэши L1, L2 и L3 часто находятся на кристалле;однако они могут быть разделены между несколькими ядрами или процессорами, поэтому они не всегда «физически находятся на процессоре».Тем не менее, они никогда не являются частью основной памяти.Общий принцип заключается в том, что чем ближе память к процессору, тем она быстрее и дороже (и, следовательно, меньше).Каждый элемент в кэше имеет определенный адрес основной памяти, связанный с ним (однако один и тот же слот может быть связан с разными адресами в разное время).Однако нет прямой связи между регистрами и основной памятью.Вот почему, если вы используете ключевое слово register в C (не то, что это часто необходимо, поскольку компилятор обычно является лучшим оптимизатором), вы не можете использовать оператор &.
  2. Контроллер DMA выполняетпередача напрямую.Процессор следит за шиной, чтобы он знал, когда вносятся изменения «за ее спиной», что делает недействительными ее кэш (ы).
0 голосов
/ 22 августа 2010

Несмотря на то, что центральным процессором является центральный процессор, он не является единственным «двигателем и шейкером». Устройства живут на шинах вместе с процессорами, а также оперативной памятью. Современные шины позволяют устройствам обмениваться данными с оперативной памятью без использования процессора. Некоторые устройства программируются просто путем внесения изменений в части оперативной памяти, которые опрашивают устройства. Драйверы устройств могут опрашивать фрагменты ОЗУ, в которое записывает устройство, но обычно ЦП получает прерывание от устройства, сообщая ему, что в фрагменте ОЗУ есть что-то готовое для чтения.

Итак, отвечая на ваш вопрос 2, ЦП не участвует в передаче памяти через шину, за исключением случаев, когда задействованы сообщения когерентности кэша о недействительности строк кэша. Имейте в виду, что сценарии сложны. Процессор, возможно, изменил байт 1 в строке кэша, когда устройство решает изменить байт 40. Извлечение этой грязной строки кэша из ЦП должно произойти до того, как устройство сможет изменить данные, но в любом случае на x86 эта деятельность инициируется шина, а не процессор.

...