2014-01-29 2 views
1

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

Я понимаю, что это сомнительно и, вероятно, не что-то даже рассмотренное в дизайне Linux, и это явно легче проверить по-другому (просто передав значение для адреса), но я просто подумал, что я бы бросил это вопрос для моего собственного любопытства.

я бы что-то вроде:

char *p1 = (char *)SomeLiteral; 
*p1 = value1; 
dcache.writeback(p1); 

char *p2 = (char *)ADifferentLiteral; 
*p2 = value2; 
//may map to same set index and be brought to second way 
dcache.writeback(p2); 

Это, вероятно, работать на некоторых встраиваемых системах, но это, очевидно, будет ошибка страницы под Linux. Итак, есть ли способ выделить виртуальную страницу для p1 и p2? Или даже установить виртуальный адрес для кучи программы?

Прошу прощения, если это звучит тупо, и спасибо!

+0

Узнайте о [mmap (2)] (http://man7.org/linux/man-pages/man2/mmap.2.html) и прочитайте [Advanced Linux Programming] (http://advancedlinuxprogramming.com/) –

+0

@BasileStarynkevitch Как это ему поможет? Похоже, что он хочет избежать ошибок страницы, и способ сделать это - коснуться каждой страницы, чтобы принудительно распределить физическую память на виртуальные страницы. –

+0

См. Также [madvise (2)] (http://man7.org/linux/man-pages/man2/madvise.2.html) & [mlock (2)] (http://man7.org/linux/ man-pages/man2/mlock.2.html) –

ответ

0

Если вы хотите, чтобы он выделял физические страницы, просто пройдитесь и коснитесь каждой из страниц, вставив в нее одно значение. Предположим, вам нужно 1024 4 тыс. Страниц, предварительно назначенных, затем вызовите malloc, затем пройдите по адресам с шагом 4k и напишите одно значение по каждому из этих адресов.

Смежные вопросы