![Из какой памяти процессоры на самом деле считывают данные?](https://rvso.com/image/1540085/%D0%98%D0%B7%20%D0%BA%D0%B0%D0%BA%D0%BE%D0%B9%20%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D1%8B%20%D0%BD%D0%B0%20%D1%81%D0%B0%D0%BC%D0%BE%D0%BC%20%D0%B4%D0%B5%D0%BB%D0%B5%20%D1%81%D1%87%D0%B8%D1%82%D1%8B%D0%B2%D0%B0%D1%8E%D1%82%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%3F.png)
В соответствии с моим собственным пониманием, для того, чтобы данные были обработаны ЦП, их следует поместить вБАРАН, в то же время сами процессоры имеюткэш-память, который также используется для доступа к данным. Довольно хорошо известно, что кэш ЦП «ближе» к ЦП и быстрее, чем любой другой вид памяти. Но мне немного неясно, обязательно ли, чтобы данные находились в кэше ЦП для обработки? Если да, то как кэш может хранить большой объем данных? (размер кэша, как правило, крошечный, по сравнению с ОЗУ, до нескольких МБ, чаще всего меньше 1) Если нет, то как процессор решает, какая часть данных должна храниться в его кэше?
Я тоже немного запутался в подкачке. Могут ли процессоры считать ее частью оперативной памяти и обращаться к хранящимся там данным напрямую с жесткого диска?
решение1
Кэш процессора не хранит данные, а просто ускоряет доступ.
Самое простое объяснение кэша заключается в том, что когда ЦП считывает определенный байт из ОЗУ, эти данные также копируются в кэш. В следующий раз, когда ЦП нужно прочитать этот байт, контроллер памяти видит, что он находится в кэше, и вместо того, чтобы делать медленный вызов ОЗУ, он просто передает ЦП данные из кэша.
Однако в этом объяснении есть два конкретных недостатка:
Кэш имеет конечный размер. Из-за этого, когда данные добавляются, вам в конечном итоге нужно избавиться (или «сбросить») от старых данных, чтобы освободить место для них. Есть куча способов сделать это, и точная методология не имеет значения для этого обсуждения, но важно то, что через некоторое время данные могут исчезнуть из кэша, и тогда вам в любом случае придется обратиться к основной памяти.
Когда данные записаны, вам также необходимо обновить или удалить данные из кэша, которые ранее хранились по этому адресу. Есть три основных способа справиться с этим:
- Обратная запись: При использовании метода обратной записи данные сначала записываются в кэш, а затем в конечном итоге записываются в основную память. Это имеет ряд преимуществ для производительности, но может вызывать проблемы в некоторых обстоятельствах.
- Writethrough: Используя метод writethrough, данные одновременно записываются и в кэш, и в основную память. Это более низкая производительность, чем writeback, но более безопасно.
- Write-around: Используя метод write-around, данные записываются непосредственно в основную память, а затем данные, которые были в том же месте, удаляются из кэша. Это используется редко, за исключением очень специфических случаев использования.
Итак, отвечая на ваш вопрос относительно RAM и кэша CPU, технически оба, но данные в конечном итоге берутся из RAM почти во всех случаях. Если вам интересно узнать больше об этом конкретно, я бы посоветовал прочитать следующие две статьи Википедии:
https://en.wikipedia.org/wiki/Кэш_(вычисления)
https://en.wikipedia.org/wiki/CPU_cache
Теперь, что касается вопроса пространства подкачки, это совершенно другая концепция, которая связана с виртуальной памятью и подкачкой. Попытка объяснить это здесь привела бы к тому, что мне пришлось бы написать большую часть нескольких статей Википедии, поэтому я просто укажу вам прямо на статьи, о которых идет речь: