LINUX.ORG.RU

Выделение логических адресов процессу

 


1

4

Запущен процесс a.out В котором происходит бесконечный цикл с вызовом sleep(99); . Наблюдаю пространство выделенной ему памяти через pmap -x . Выделен диапазон логических адресов для всех сегментов программы (bss data code stack).
И собственно цель такая, в модуле ядра увеличить диапазон логических адресов для процесса a.out. Как выделить 2 - 3 страницы памяти в любом сегменте программы и получить присвоенный логический адрес начала нового выделенного диапазона адресов?
Пробовал вызывать do_mmap_pgoff да всё время получаю ошибку функции. (Может с аргументами у меня проблема.)


Обычно программы сами расширяют свое жизненное пространство путем вызова sbrk(). Зачем вам понадобилось делать такое извне?

Deleted
()
Ответ на: комментарий от Deleted

В целях саморазвития. Пробую на практике различные изменения в код вносить. Насчёт изменения жизненного пространства, эт конечно так, приложение само выделяет сете диапазоны памяти, однако, ничто не мешает изменить это пространство извне. Вот и интересуюсь, как это делается.

Aresss
() автор топика
Ответ на: комментарий от anonymous

Аноним - «умник», какого кода? что ты несёшь?
На всякий случай повторю вопрос темы: Как выделить 2 - 3 страницы памяти в любом сегменте программы и получить присвоенный логический адрес начала нового выделенного диапазона адресов?

Aresss
() автор топика
Ответ на: комментарий от Aresss

Ты из себя-то умника не корчи. Писал:
> Пробовал вызывать do_mmap_pgoff да всё время получаю ошибку функции
Так давай код в студию.

trex6 ★★★★★
()
Ответ на: комментарий от post-factum

do_mmap_pgoff() - вызываю из потока ядра! А пространство сегментов изменяю в другом процессе - «a.out».
do_mmap_pgoff работает с current->mm. Т.е. Если вызываю данную функцию из потока ядра, то воздействие произведено будет на рабочий поток а не на указанное мной приложение.
Также интересует меня, какой именно адрес следует указывать в параметре addr данной функции? логический? виртуальный? конец диапазона адресов? последний адрес диапазона?Или первый логический адрес после уже выделенного диапазна? или какойто другой?

unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
			unsigned long len, unsigned long prot,
			unsigned long flags, unsigned long pgoff,
			unsigned long *populate)

Да и populate что за параметр?

Aresss
() автор топика
Ответ на: комментарий от post-factum

Это конечно хорошо, и я почитаю. Но вопрос то, всё ещё открыт.

Aresss
() автор топика
Ответ на: комментарий от Aresss

do_mmap_pgoff() - вызываю из потока ядра! А пространство сегментов изменяю в другом процессе - «a.out».
do_mmap_pgoff работает с current->mm. Т.е. Если вызываю данную функцию из потока ядра, то воздействие произведено будет на рабочий поток а не на указанное мной приложение.

Т.е. ты понимаешь что юзаешь do_mmap_pgoff неправильно, но тебя это не останавливает. Завидую такому упорству!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.