¿Cómo funciona la plataforma iOS manejar archivos asignados en memoria durante la poca memoria de los escenarios? Por la baja de la memoria de los escenarios, me refiero a cuando el sistema operativo envía el UIApplicationDidReceiveMemoryWarningNotification de notificación para todos los observadores en la aplicación.

Nuestros archivos se asignan en la memoria usando +[NSData dataWithContentsOfMappedFile:], la documentación para que los estados:

Un archivo de asignación de los usos de la memoria virtual de técnicas para evitar la copia de las páginas del archivo en la memoria hasta que sean realmente necesarios.

¿Significa esto que el sistema operativo también desasignar las páginas cuando ya no estén en uso? Es posible marcar páginas como ya no está en uso? Este tipo de datos es de sólo lectura, si que cambia el escenario. ¿Y si fuéramos a usar mmap() directamente? Sería preferible?

  • Ya que esta es una pregunta muy interesante que me gustaría ver contestó estoy abriendo una recompensa.
InformationsquelleAutor Sedate Alien | 2011-05-30

6 Comentarios

  1. 19

    Archivos asignados en memoria de copia de datos desde el disco a la memoria una página a la vez. Las páginas no son libres de ser intercambiado, el mismo que el de cualquier otro de la memoria virtual, a menos que hayan sido transferidos a la memoria física utilizando mlock(2). La asignación de memoria deja la determinación de qué copia del disco a la memoria y cuando el SO.

    Cayendo desde el nivel de la Fundación para el BSD nivel mmap es poco probable que haga mucha diferencia, más allá de hacer que el código que tiene para interactuar con otros de la Fundación código un poco más torpe.

    • Gracias por tu respuesta, Jeremy. Entiendo que el uso de mmap archivos de hojas el sistema operativo con mayor control, pero mi pregunta se refiere a cómo iOS específicamente se encarga de esto. Es mi única opción para poner a prueba experimentalmente y el uso mincore (muy útil, gracias!) como usted sugiere en su comentario?
    • Por desgracia, iOS del código fuente no es pública. Darwin, que es la base de Mac OS X y es muy similar a la de iOS, tiene una fuente pública, de modo que usted puede mirar en eso; probablemente solo hay que mirar el xnu paquete. Aparte de eso, las únicas opciones son la experimentación y la ingeniería inversa, y la antigua es probable que sea más rápido, si no es muy divertido.
    • También, a pesar de que usted podría ser capaz de determinar cómo iOS se comporta ahora, a menos que haya alguna especie de promesa de que el comportamiento (cumplimiento de normas, la documentación de Apple), las futuras versiones de iOS estará libre para comportarse de forma diferente.
    • Ya que la pregunta no estaba completamente contestadas (aún no tenemos confirmación de si se comporta como sospecha) voy a dejar que la recompensa de expirar, que otorgará 25 puntos. También hice un +1 en la pregunta, el cual fija en 35 puntos para usted, la esperanza de que está bien con usted.
    • No hay problema. En este punto, yo espero OP llevaría a cabo la definición de los perfiles necesarios para determinar cómo iOS se comporta, y, a continuación, editar la pregunta o añadir un comentario con los resultados.
  2. 10

    (Esto no es una respuesta, pero sería útil la información.)

    De @ID_AA_Carmack tweet,

    @ID_AA_Carmack son iOS archivos asignados en memoria no asignados automáticamente en condiciones de poca memoria? (con +[NSData dataWithContentsOfMappedFile]?)

    ID_AA_Carmack respondió para esto,

    @KhrobEdmonds sí, que es uno de los grandes beneficios de la utilización de los archivos asignados en iOS. Yo uso mmap(), aunque.

    No estoy seguro de que es verdad o no…

    • +1, Si John Carmack confirma que es casi tan buena como la confirmación por parte de Apple para mí 😉 pone a prueba a las cosas, y sabe de lo que habla.
  3. 7

    De mis experimentos NSData no responde a la memoria de advertencias. He probado creando una memoria asignada NSData y el acceso a las piezas del archivo de modo que sería cargado en la memoria y, finalmente, el envío de la memoria de advertencias. No hubo una disminución en el uso de la memoria después de la advertencia memoria. Nada en la documentación dice que una memoria hará que NSData a la reducción del uso de memoria en la memoria baja situaciones, por eso me lleva a creer que no responde a la memoria de advertencias. Por ejemplo NSCache la documentación dice que va a intentar jugar bien con respecto al uso de memoria, además, me han dicho que responde a la baja de la memoria de las advertencias de que el sistema plantea.

    También en mis pruebas simples en un iPod Touch (4 ª generación) que era capaz de mapa de alrededor de 600 megas de datos de archivo en el uso de memoria virtual +[NSData dataWithContentsOfMappedFile:]. Siguiente empecé a páginas de acceso a través de los bytes de la propiedad en el NSData instancia. Como hice esta memoria real comenzó a crecer, sin embargo se dejó de crecer en alrededor de 30 megas de memoria real de uso. Así que la forma en que se implementa parece la tapa de cuánta memoria real va a ser utilizado.

    En resumen, si desea reducir el uso de memoria de NSData objetos, la mejor apuesta es para asegurarse de que están completamente en libertad y no depender de nada de lo que el sistema automáticamente hace en su nombre.

    • Sí, la memoria virtual va a ser paginado en la memoria RAM hasta que el valor calculado de RAM se alcanza el límite. Más solicitudes de datos ubicados en la memoria virtual de forzar el kernel a la página de los datos inactivos, comenzando con trozos de marcado adecuadamente. A sabiendas el uso de memoria virtual asignada de datos no es realmente confiar en el núcleo de la magia 😀
  4. 4

    Si iOS es como cualquier otro Unix, y quiero apostar dinero es en este sentido — páginas en un mmap() de la región no son «intercambia»; simplemente se dejó caer (si son limpios) o se escriben en el archivo subyacente y, a continuación, caer (si está sucio). Este proceso se llama «desalojar» a la página.

    Desde su mapa de memoria es sólo de lectura, las páginas que va a estar siempre limpio.

    El kernel va a decidir que páginas para desalojar cuando la memoria física no alcanza.

    Puede dar el kernel sugerencias acerca de qué páginas quieres mantener/desalojar el uso de posix_madvise(). En particular, POSIX_MADV_DONTNEED le indica al kernel que se sienta libre para desalojar a las páginas; o, como usted dice, «marca páginas como ya no está en uso».

    Debería ser bastante simple para escribir algunos programas de prueba para ver si iOS honores de la «no necesidad» de sugerencia. Ya que es un derivado de BSD, apuesto a que lo hará.

  5. 1

    Estándar de memoria virtual técnicas de archivo-copia de la memoria se dice que el sistema operativo es libre de tirar a la basura las páginas cada vez que quiere, porque siempre se puede obtener de nuevo más tarde. No he usado iOS, pero este ha sido el comportamiento de la memoria virtual en muchos otros sistemas operativos por un largo tiempo.

    La manera más sencilla de probar es para asignar varios archivos de gran tamaño en la memoria, leer a través de ellos, para garantizar que las páginas en memoria, y ver si se puede obligar a una situación de falta de memoria. Si usted no puede, entonces el sistema operativo debe tener localizar las páginas una vez que se decidió que ya no estaban en uso.

    • Usted puede encontrar mincore útil para comprobar si una página se intercambia o no.
    • Voy a tener que ir por ese camino y ver lo que puede determinar experimentalmente. Le pregunté a mi pregunta ya que parece que iOS no no de adherirse estrictamente a la norma de «memoria virtual técnicas» y no de la página sin utilizar la memoria en disco, etc y me preguntaba cómo podría traducir a mmap archivos.
  6. 0

    La dataWithContentsOfMappedFile: método es ahora obsoleta de iOS5.

    Uso mmap, como va a evitar estas situaciones.

    • Creo que es porque ha sido reemplazado por +[NSData dataWithContentsOfFile:options:error:], que soporta archivos asignados.
    • Bien, que estaba disponible desde iOS 2.0. Por cierto, si usted está interesado en este tema, este libro tiene un buen capítulo, así como otras núcleo de contenido. apress.com/9781430235361-4892 😀

Dejar respuesta

Please enter your comment!
Please enter your name here