Как известно, список рассеяния собирает память, физически разбросанную по памяти, но практически непрерывную. При общении с DMA он предоставляет абстрагированное представление памяти для DMA, так как это физическая память.Как работает «список рассылок» в Linux?
Как scatterlist
справиться с этим? Является ли это связанным списком, поддерживаемым в пределах scatterlist
?
например, если имеется 4000 байтов данных, которые должны быть переданы с использованием DMA, поскольку данные физически смежны, поскольку список рассеяния делает его смежным? будет ли реализация разметки распределять 4000 байтов данных с использованием Kmalloc
, чтобы убедиться, что она получает физически смежную память? или будет создать связанный список?
Примечание: здесь мой запрос не о таблице SG, но об индивидуальном scatterlist
позволяют нам день данные хранятся данные о 4000 байт физически несмежных памяти
struct scatterlist sg,
sg_init_one(&sg,data,4000)
Теперь, как это ГГ решает проблему?
BR, & Sanumala
В вашем примере, как распределяется «данные»? :) – simurg
данные могут поступать из пользовательского пространства или из других интерфейсов ядра, но гарантируется, что данные поступают в список рассылок. в отношении распределения у нас нет никакого контроля, это может быть от malloc (пользовательское пространство) или kmalloc (пространство ядра) и т. д. – sanumala