Newsgroup: it.comp.macintosh
Titolo: programmazione di sistema a basso livello: una domanda

Devo scrivere una funzione (C) che restituisca come risultato "quanti
byte (o KB o che) di memoria virtuale sta usando questo processo in
questo momento".  Non trovo pero` nessun modo documentato di ottenere
questa informazione in MacOSX -- getrusage e` inutile, come lo e` su
Linux, visto che mi mette sempre degli zeri nei campi (della struct
r_usage che le passo) relativi all'uso di memoria.  ps 'ste info le
trova, quindi da qualche parte saranno, ma... ho provato a fare un poco
di reverse engineering dei sorgenti di ps sul sito OpenDarwin, ma non e`
banale.  L'alternativa sporchissima di un popen su opportuna pipe
iniziante con ps e` proprio una petecchia (oltre ad essere ovviamente
lenta, e` proprio zozza).  Su Linux penso che (a malincuore) mi
accontentero` di ravanare in /proc, ma su MacOSX (10.4, se importa; con
gcc 4.0, o posso anche aggiornare a 4.1 se indispensabile) come faccio?
Grazie per qualsiasi consiglio, suggerimento, URL, ...
Alex

 questo momento". 
vmmap ?
-- 
Ve lo meritate Gil Amelio!

 questa informazione in MacOSX -- getrusage e` inutile, come lo e` su
Prova l'interfaccia kvm (vedi man kvm e /usr/include/sys/sysctl.h).
Puoi usare kvm_getprocs() per accedere alla struttura kinfo_proc pero' 
ricordati che il
programma deve appartenere al gruppo kmem.
Come alternativa puoi guardare libtop.a ma non sembra essere installata 
di default.
Altrimenti dovresti spulciare nella documentazione di Mach, ma per 
accedere a strutture
dati particolari, sempre che non siano private, temo si debba passare per MiG.
Ciao
Mirko

 vmmap ?
Mi pare che vmmap, come ps, sia un programma a se stante, non una
funzione di sistema chiamabile dal mio programma -- questo, almeno, e`
cio` che mi indica man.  Fare fork, dup2, exec (magari tutte mascherate
dentro una popen, ma il lavoro e` lo stesso), recuperare un numero che
un programma esterno emette come testo, parsare quel testo per ottenere
infine di nuovo il valore numerico, e` praticamente quel che adesso sto
facendo (come schifida pezza) con ps, e appunto quel che vorrei evitare
utilizzando invece un approccio di basso livello, cioe`, in pratica, le
stesse chiamate di sistema che oggi usano vmmap o ps, direttamente dal
mio programma.  Ho gia` provato a capire quali sono quelle chiamate con
un reverse engineering dei sorgenti di ps, ma e` un po' complesso;
magari riprovo con vmmap (se riesco a trovarlo sul cvsweb di
opendarwin).  Ma speravo che qualcuno potesse darmi un'indicazione piu`
diretta (nome delle chiamate, che poi uso man o google per i dettagli, o
magari gia` una URL...)...
Grazie comunque...
Alex

 dati particolari, sempre che non siano private, temo si debba passare per MiG.
Gia`, comunque si direbbe che anche questi approcci, a parte le
specifiche difficolta`, possano funzionare solo per processi con
privilegi molto speciali (top e` addirittura setuserid root...),
evidentemente perche` sono tutti approcci basati sull'idea di permettere
l'accesso a informazioni particolari relative ad ALTRI processi.  Che un
processo voglia solo informazioni relative a se stesso senza dover a
questo scopo godere di strani privilegi sembra completamente fuori dai
parametri di progetto del sistema.
Peccato, speravo che si potesse fare di meglio.  Grazie comunque per
l'aiuto!
Alex

 mio programma.
Hai cercato "virtual memory" qui sopra?
http://developer.apple.com/search/
-- 
Salutandovi indistintamente

 
http://developer.apple.com/search/
Si`, ma con centinaia di hit tutti mischiati fra MacOSX e OS precedenti,
comandi esterni, introduzioni concettuali, ecc ecc, non e` che abbia
trovato informazione utile -- il che non vuol dire che non ce ne sia,
anche se comincio a dubitarne.
Magari provo invece a perseguire una strada del tutto differente, basata
sulle malloc_statistics_t (documentazione pressoche` zero, ma almeno ci
si puo` sperimentare un po'...) nella speranza che questa informazione
(quanta memoria e` sinora allocata, e non ancora liberata, via varie
malloc) sia piu` accessibile e forse equivalente a quella che speravo di
trovare (totale generale della memoria virtuale usata in un dato momento
dal processo).
Alex


| |._/|_|\__/\__/\__/ | *Non e' bello cio' che e' bello,
|        /_/ /_/      |  figurarsi cio' che e' brutto.


Grazie del puntatore!  Vedo che riesce a leggere queste informazioni
(relativamente a processi arbitrari) senza dover usare ne` il gruppo
kmem ne` tanto meno l'utente root, e questo e` fondamentale per i miei
scopi.  Purtroppo questa funzione devo farla in C, non Objective-C,
quindi ci sara` da sudare per adattare le 326 righe di codice in
MCProcessMemoryStats.c, ma sicuramente e` una strada percorribile (devo
impararmi abbastanza Objective-C da riscrivere in C puro quelle parti
che nel sorgente sono Objective-C, in pratica).
Grazie!
Alex
 

 che nel sorgente sono Objective-C, in pratica).
La storia della mia vita .-D
