2010-05-27 9 views
8

Ho un sacco di codice in una libreria condivisa ELF che viene utilizzata solo durante l'inizializzazione della libreria (viene chiamata da inizializzatori statici). Se metto questo codice nella sua sezione (o forse può andare nella sezione .init), cosa che posso fare usando __attribute__((section(".mysection"))), c'è un modo per forzare questa pagina a essere sfogliata dopo che la libreria è stata caricata?Sezione ELF flush dalla RAM dopo l'inizializzazione della libreria

This question è correlato, ma la conclusione è che il kernel eseguirà il page out delle pagine non utilizzate quando è a corto di memoria, quindi non è necessario farlo esplicitamente. Tuttavia, sto lavorando in un ambiente embedded in cui la memoria è un vantaggio e il costo del paging nel codice dal disco (una chiavetta USB lenta) è alto. Perciò preferirei svuotare esplicitamente questo codice, che so non verrà mai più utilizzato, piuttosto che decidere se il kernel debba decidere di svuotare qualche altro codice che potrebbe eventualmente essere richiamato.

I'm di sicuro ricordo di aver letto su un syscall per chiedere al kernel di entrare o uscire da certe regioni della memoria, anche se non riesco a trovare alcun riferimento a questo ovunque, quindi forse l'ho immaginato. Esiste una cosa del genere?

+0

Il 'syscall' madvise', in particolare con il parametro MADV_WILLNEED/MADV_DONTNEED, è ciò a cui stavo pensando. Tuttavia, sono ancora interessato a sapere se c'è un modo semplice per forzare una particolare sezione ELF per essere sfogliata. – jchl

risposta

2

Cerca documentazione sugli overlay elfo. Disporre il codice in modo da disporre di una sovrapposizione per l'inizializzazione e un'altra per l'elaborazione. Potresti anche voler guardare un overlay per l'arresto. Il codice negli overlay deve essere sostituito, quando viene chiamato il successivo overlay.

+2

In modo divertente, questa pagina è ora il principale risultato di ricerca di Google per "overlay elfo". – jchl

+0

Non riesco a trovare molte informazioni sugli overlay ELF. Il meglio che ho potuto trovare era http://sourceware.org/binutils/docs-2.20/ld/Overlay-Description.html, che non è particolarmente utile fuori dal contesto. Potresti elaborare o fornire alcuni collegamenti alla documentazione pertinente, in particolare relativamente all'uso di sovrapposizioni con librerie condivise? Inoltre, non sono sicuro che gli overlay funzionino per me, dal momento che il codice di inizializzazione ha bisogno di accedere a tutti gli altri codici nella libreria. – jchl

+0

Nel peggiore dei casi potresti avere una micro sovrapposizione per il primo codice post-init? –

Problemi correlati