Se puede guardar datos en la memoria fisica del pc programando en c?

Iniciado por sito68, 4 Noviembre 2014, 20:33 PM

0 Miembros y 2 Visitantes están viendo este tema.

sito68

Buenas, estoy en primero de ingenieria informatica y en las practicas de programacion en c nos han hecho diseñar un juego sencillo. En dicho juego guardamos una clasificacion mediante un array de 5 posiciones, cada una de las cuales contiene un struct:

typedef struct{
char nom[15];
int puntuacio;
int nivell;
}TipusJugador;
TipusJugador TMillorsJugadors[MAX_MILLORSJUGADORS];

Dicho esto, mi duda viene a que me ha gustado programar y me gustaria saber si puedo, de alguna manera, profundizar para guardar esas puntuaciones en la memoria fisica del pc, de forma que cada vez que abra el juego recupere esas puntuaciones.

Es mi primer post en un foro asi que perdonar si he hecho algo mal y muchas gracias si podeis resolver mi duda.

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

sito68

Cita de: Eternal Idol en  4 Noviembre 2014, 21:54 PM
La memoria RAM es volatil, la manera mas sencilla y comun de hacer lo que queres es trabajar con archivos.

http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos
Se que la ram es volátil, por eso mi pregunta. Gracias por el enlace, estudiare el tema a ver si con eso de los archivos consigo mi cometido  ;D

plataplomo2948

Yo no sabia que es volatil... ; )

Generalmente, eso no es posible desde el espacio del usuario (sin IOCTL). Hay bastantes maneras de hacerlo desde el kernel, deberia impesar estudiando la diferencia entre Paged y NonPaged memoria pools con llamada a ExAllocPoolWithTag(). (NonPaged pool = memoria fisica)

Eternal Idol

#4
Cita de: plataplomo2948 en  9 Noviembre 2014, 00:46 AM
Yo no sabia que es volatil... ; )

¿Creias que conservaba su estado al perder la energia?  :rolleyes:

Cita de: plataplomo2948 en  9 Noviembre 2014, 00:46 AMGeneralmente, eso no es posible desde el espacio del usuario (sin IOCTL). Hay bastantes maneras de hacerlo desde el kernel, deberia impesar estudiando la diferencia entre Paged y NonPaged memoria pools con llamada a ExAllocPoolWithTag(). (NonPaged pool = memoria fisica)

Eso no es correcto, en ambos casos estas trabajando con memoria virtual, NonPagedPool como su nombre lo indica se refiere a que cuando reservas este tipo de memoria te aseguras que no sera paginada, esto es necesario cuando se accede a esta memoria en IRQL >= DISPATCH_LEVEL.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

plataplomo2948

esos direciones de memoria "virtual" estan mapeados directamente a la memoria fisica.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa965226%28v=vs.85%29.aspx

" The nonpaged pool consists of virtual memory addresses that are guaranteed to reside in physical memory as long as the corresponding kernel objects are allocated. The paged pool consists of virtual memory that can be paged in and out of the system. "

Aun que dice que si, el PagedPool tampoco no es tan "virtual" por que es mas parecido al archivo.

No entiendo a que refiere con "IRQL >= DISPATCH_LEVEL" por que el IRQL no tiene nada que ver con la memoria fisica.

Solo sito68 dice 'memoria fisica' y hay varias tipos de memoria fisica. Esto no es la unica manera, hay bastantes otras.

Eternal Idol

#6
Notese que no tenes ni la mas minima idea de lo que estas hablando, te recomiendo leer Windows Internals entero y solo despues volver a contestar.

Cita de: plataplomo2948 en  9 Noviembre 2014, 01:33 AM
esos direciones de memoria "virtual" estan mapeados directamente a la memoria fisica

Esas (entiendo que tu idioma nativo sera otro) siguen siendo direcciones virtuales (en negrita y subrayado en la cita, por si acaso), asumo que no sabes cual es la diferencia entre unas y otras (en Windows Internals esta explicado). Y no necesariamente estan mappeadas a la memoria fisica, justamente lo explica en lo que citas sin comprender:

"The nonpaged pool consists of virtual memory addresses that are guaranteed to reside in physical memory as long as the corresponding kernel objects are allocated. The paged pool consists of virtual memory that can be paged in and out of the system. "

Cita de: plataplomo2948 en  9 Noviembre 2014, 01:33 AMAun que dice que si, el PagedPool tampoco no es tan "virtual" por que es mas parecido al archivo.

No, no dice eso para nada, dice que PagedPool puede ser paginada - simplificando pasada a disco e invalidada en RAM - y justamente en ese caso no apunta a la RAM la direccion.

Cita de: plataplomo2948 en  9 Noviembre 2014, 01:33 AMNo entiendo a que refiere con "IRQL >= DISPATCH_LEVEL" por que el IRQL no tiene nada que ver con la memoria fisica.

Es logico que no entiendas, esto no hace mas que demostrar que jamas trabajaste con codigo en modo Kernel para Windows ya que es algo fundamental, para empezar no estas hablando de memoria fisica en ninguna momento. El IRQL al que se ejecutan las rutinas que acceden a la memoria que reservamos es fundamental para elegir entre NonPagedPool y PagedPool ... salvo que querramos generar excepciones no controladas (acceder a memoria paginada en IRQL >= DISPATCH_LEVEL) y que los usuarios de nuestros binarios disfruten de BSOD.

NonPagedPool
Nonpaged pool, which is nonpageable system memory. Nonpaged pool can be accessed from any IRQL, but it is a scarce resource and drivers should allocate it only when necessary.

PagedPool
Paged pool, which is pageable system memory. Paged pool can only be allocated and accessed at IRQL < DISPATCH_LEVEL.

Cita de: plataplomo2948 en  9 Noviembre 2014, 01:33 AMSolo sito68 dice 'memoria fisica' y hay varias tipos de memoria fisica. Esto no es la unica manera, hay bastantes otras.

Antes de responder a un hilo hay que leer con mucha atencion (maxime si uno no domina el idioma), lo que quiere hacer el usuario es guardar/cargar en varias ejecuciones ciertos datos, pretender solucionar eso con la memoria RAM es ridiculo.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

plataplomo2948

Usted tiene razon, nunca mas usamos la memoria fisica! muy volatil esa memoria! siempre usa archivos! nunca puede usar memoria fisica! (sarcasmo). Y soy ruso, eso le molesta?

Ya vas a ver que he escribido mas drivers que usted tiene anos. Posteare eso en mi cuenta en el osr list (donde los expertos de verdad viven:) ). Vamos a reir mucho de ti, tendras verguenza.

he ayudado en un dia mas gente que usted ha ayudado en una semana en ese foro , pero me salgo! llena de mujeres zelosas como usted, buscando discutir.

"La mano invisible del mercado me robo la billetera"

mano invisible? es una polla muy visible que despues de tomar toda su pinche plata - va directemente en su culo y no hace nada, llora por su blog (pasioncris) waaa como la mujer que es.

jajjaja picnhe p**a adios

Eternal Idol

#8
Cita de: plataplomo2948 en  9 Noviembre 2014, 02:53 AM
Usted tiene razon, nunca mas usamos la memoria fisica! muy volatil esa memoria! siempre usa archivos! nunca puede usar memoria fisica! (sarcasmo). Y soy ruso, eso le molesta?

No me molesta, tus problemas para expresarte en otro idioma no son mios. La memoria fisica directamente veo que vos no la usas jamas (si lees un poco sobre modo protegido te haces un favor), la memoria RAM es volatil, sin duda, creo que es practicamente lo primero que dice en la Wikipedia al respecto (notese que volatil no quiere decir que vuele por los aires eh, tal vez con el enlace en ingles lo entiendas mejor http://en.wikipedia.org/wiki/Volatile_memory)  ... si, normalmente se usan archivos para guardar datos ... parece que el sarcasmo se te da peor incluso que el español.

Cita de: plataplomo2948 en  9 Noviembre 2014, 02:53 AMYa vas a ver que he escribido mas drivers que usted tiene anos. Posteare eso en mi cuenta en el osr list (donde los expertos de verdad viven:) ). Vamos a reir mucho de ti, tendras verguenza.

Tal vez conozcas este refran: "Dime de que presumes y te dire de que careces". Yo no pienso ponerme a tu altura, con haberte dejado en evidencia me conformo. Y adelante, en NTDEV por favor, me siento a esperar, haceme ese favor asi podran reirse, es cierto, pero de la ignorancia que demuestra quien cree que las direcciones devueltas por ExAllocPool* pueden ser fisicas o no dependiendo del tipo de POOL que se le pase como parametro  :silbar: Ni hablar de la falta absoluta de profesionalidad con la que te manejas ...

Cita de: plataplomo2948 en  9 Noviembre 2014, 02:53 AM
he ayudado en un dia mas gente que usted ha ayudado en una semana en ese foro , pero me salgo! llena de mujeres zelosas como usted, buscando discutir.

Dos ejemplos, este hilo que estaba resuelto, donde un usuario quiere guardar datos de su programa y se te ocurre recomendar reservar memoria en modo Kernel para solucionarlo, es realmente hilarante mas alla del error en si mismo (si fuera correcto igual seria una solucion ridicula)  ;D Castear al mismo tipo de la variable para llamar a free  ;-) En fin, no vamos a extrañar tu "ayuda", buscador de fama.

A tus insultos de infante no pienso responder, no tenes conocimientos sobre el tema en cuestion ni tampoco educacion.

Ahora si, anda a leer y presta atencion (basado en las ediciones 5ta y 6ta): En el capitulo 1 de Windows Internals - "Concepts and Tools" -, bajo el encabezado "Virtual Memory" tenes la primera aproximacion a la memoria virtual, en el capitulo 3 - "System Mechanisms" -, en el cuerpo del "EXPERIMENT: Viewing the IRQL" te explica la razon por la cual no podes acceder en IRQL >= DISPATCH_LEVEL a memoria paginada y finalmente existe un capitulo entero titulado "Memory Management", que te podria ayudar a entender como se implementa todo esto de lo que hablas sin saber.




Ya pasaron un par de dias y que sorpresa no hay nada en OSR  :silbar:
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón