ES2367605T3 - Sistema y procedimiento para la asignación de memoria en sistemas de comunicaciones embebidos o inalámbricos. - Google Patents

Sistema y procedimiento para la asignación de memoria en sistemas de comunicaciones embebidos o inalámbricos. Download PDF

Info

Publication number
ES2367605T3
ES2367605T3 ES09727041T ES09727041T ES2367605T3 ES 2367605 T3 ES2367605 T3 ES 2367605T3 ES 09727041 T ES09727041 T ES 09727041T ES 09727041 T ES09727041 T ES 09727041T ES 2367605 T3 ES2367605 T3 ES 2367605T3
Authority
ES
Spain
Prior art keywords
memory
item
size
items
payload
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES09727041T
Other languages
English (en)
Inventor
Shailesh Maheshwari
Thomas Klingenbrunn
Vanitha A. Kumar
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Application granted granted Critical
Publication of ES2367605T3 publication Critical patent/ES2367605T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9047Buffering arrangements including multiple buffers, e.g. buffer pools
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Transceivers (AREA)
  • Telephone Function (AREA)
  • Communication Control (AREA)

Abstract

Un procedimiento de gestión de memoria, el procedimiento comprende los pasos de: asignar primeros ítems de memoria, comprendiendo cada uno de los primeros ítems de memoria un primer encabezado y una carga útil, comprendiendo la carga útil fragmentos de memoria independientemente asignable, comprendiendo el primer encabezado una referencia a la memoria asignable en la carga útil; que se caracteriza porque el procedimiento comprende además los pasos de: asignar segundos ítems de memoria, comprendiendo cada segundo ítem de memoria un segundo encabezado, comprendiendo el segundo encabezado una referencia a uno o más fragmentos de memoria en la carga útil de los primeros ítems de memoria; recibir solicitudes para la asignación de memoria; y responder a las solicitudes de asignación de memoria devolviendo una referencia desde el encabezado de un primer o un segundo ítem de memoria.

Description

Referencias cruzadas a solicitudes relacionadas
La presente solicitud reivindica los beneficios de la solicitud de patente de EE.UU. núm. US-2008/041878, presentada el 2 de abril de 2008, titulada MEMORY ALLOCATION SCHEME FOR EMBEDDED OR WIRELESS COMMUNICATION SYSTEMS.
Antecedentes
Campo de la invención
El presente campo se refiere en general a la asignación de memoria y más específicamente a la asignación de memoria en sistemas de comunicaciones empotrados o inalámbricos.
Descripción de la técnica relacionada
Los servicios de asignación de memoria hacen uso de grupos de ítems de memoria. En algunos casos, los ítems de memoria se clasifican en diferentes grupos basándose en el tamaño del ítem de memoria. Por ejemplo, un grupo podría consistir en muchos ítems de memoria pequeños mientras que otro grupo podría consistir en ítems de memoria relativamente grandes. En respuesta a las solicitudes de asignación de memoria, puede seleccionarse un ítem de datos apropiado de un grupo particular y devolverse a la entidad solicitante. Este sistema da como resultado el desaprovechamiento significativo de los recursos de memoria y procesador. Por ejemplo, con ítems de memoria pequeños, la proporción del encabezado con respecto a la carga útil es alta, dando como resultado un uso ineficaz de la memoria. Además, cuando se asignan todos los ítems de memoria, partes significativas de los datos de cualquier ítem de datos particular pueden quedar sin utilizar. También, en estos servicios de asignación, no esta disponible la multiplexación estadística. También se consumen recursos del procesador debido al encadenamiento de múltiples ítems de memoria pequeños.
En los sistemas de comunicaciones inalámbricas, a menudo se segmentan los paquetes en paquetes pequeños de “enlaces de radio” de tamaño fijo, por ejemplo 40 bytes, para asegurar una radio-trasmisión fiable. Para usar la memoria de forma eficaz, un enfoque es crear un grupo grande de ítems de memoria relativamente pequeños, cada uno de los cuales mantiene un bloque de 40 bytes, que eventualmente pueden encadenarse entre sí en las capas más altas para formar bloques de datos mayores (por ejemplo, paquetes IP de 1.500 bytes). Una desventaja de este servicio es que puede malgastarse algún espacio ya que los ítems de memoria pueden tener que alinearse en filas de caché (32 o 64 bytes), que pueden no ajustarse al tamaño del paquete pequeño del enlace de radio. También, diferentes tecnologías pueden compartir el mismo grupo de ítems de memoria para reducir la memoria total, en cuyo caso puede seleccionarse el tamaño de la carga útil de los ítems de memoria para ajustarse al tamaño del paquete des enlace de radio mayor lo que puede aumentar adicionalmente el desaprovechamiento de la memoria.
Realizaciones del documento US 2004/057434 proporcionan la recepción y el procesamiento de datos múltiples mediante un protocolo de comunicación de red. La presente invención reúne múltiples paquetes de datos destinados a la misma aplicación. La presente invención aporta también la división de encabezado / carga útil. La presente invención también establece el procesamiento separado de los encabezados reunidos y de las cargas útiles reunidas. Como resultado, se reduce el coste del procesamiento por paquete y se incrementa la capacidad de asignación de los datos.
Resumen de la invención
La invención tal como aquí se describe con referencia a las reivindicaciones adjuntas se refiere a un procedimiento y a un sistema para la gestión de la memoria. En una realización, se proporciona un sistema para la gestión de la memoria. El sistema comprende un servicio de gestión del procesador y de la memoria que es ejecutable en el procesador. El servicio de gestión de la memoria puede configurarse para generar primeros ítems de memoria, en los que cada uno de los primeros ítems de memoria comprende un encabezado y una carga útil, la carga útil puede configurarse para almacenar una pluralidad de fragmentos de memoria independientemente asignables, el encabezado de los primeros ítems de memoria referencia el espacio asignable en la carga útil, para generar segundos ítems de memoria, en los que cada uno de los segundos ítems de memoria comprende un encabezado que referencia uno o más fragmentos de memoria en la carga útil de los primeros ítems de memoria, y para devolver una referencia del encabezado de un primer o un segundo ítem de memoria que responde a una solicitud de asignación de memoria.
En otra realización, se proporciona un procedimiento para la gestión de la memoria. El procedimiento comprende la asignación de primeros ítems de memoria, comprendiendo cada uno de los primeros ítems de memoria un primer encabezado y una carga útil, comprendiendo la carga útil fragmentos de memoria independientemente asignables, comprendiendo el primer encabezado una referencia a la memoria no asignada en la carga útil que asigna los segundos ítems de memoria, comprendiendo cada uno de los segundos ítems de memoria un segundo encabezado, comprendiendo el segundo encabezado una referencia a un fragmento asignado de memoria en la carga útil de un primer ítem de memoria, recibiendo solicitudes para la asignación de memoria y respondiendo a las solicitudes para la asignación de memoria devolviendo una referencia del encabezado de un primer o un segundo ítem de memoria.
En otra realización, se proporciona un sistema de la gestión de la memoria. El sistema comprende medios para asignar primeros ítems de memoria, comprendiendo cada uno de los primeros ítems de memoria un primer encabezado y una carga útil, comprendiendo la carga útil fragmentos de memoria independientemente asignables, comprendiendo el primer comprendiendo el primer encabezado una referencia a la memoria no asignada en la carga útil, medios para asignar segundos ítems de memoria, comprendiendo los segundos ítems de memoria un segundo encabezado, comprendiendo el segundo encabezado una referencia a una fragmento asignado de memoria en la carga útil de un primer ítem de memoria, medios para recibir solicitudes para la asignación de memoria y medios para responder a las solicitudes para asignación de memoria devolviendo una referencia desde el encabezado de un primer o un segundo ítem de memoria.
En otra realización, se proporciona un medio informáticamente legible codificado con instrucciones informáticas, las instrucciones, cuando se ejecutan, hacen que un procesador asigne primeros ítems de memoria, comprendiendo cada uno de los primeros ítems de memoria un primer encabezado y una carga útil, comprendiendo la carga útil fragmentos de memoria independientemente asignable, comprendiendo el primer encabezado una referencia a la memoria no asignada en la carga útil; asigne segundos ítems de memoria, comprendiendo cada uno de los segundos ítems de memoria un segundo encabezado, comprendiendo el segundo encabezado una referencia a un fragmento asignado de memoria en la carga útil en un primer ítem de memoria; reciba solicitudes para la asignación de memoria y responda a las solicitudes para la asignación de memoria devolviendo una referencia del encabezado de un primer o un segundo ítem de memoria.
Breve descripción de los dibujos
La figura 1 es un diagrama de bloques que ilustra un ejemplo de un dispositivo móvil.
La figura 2 es un diagrama de bloques que ilustra un ejemplo de ítems de memoria.
La figura 3 es un diagrama de bloques que ilustra otro ejemplo de ítems de memoria.
Las figuras 4A y 4B son un diagrama de bloques que ilustra un ejemplo de un procedimiento para asignar memoria.
La figura 5 es un diagrama de bloques que ilustra varios ejemplos de la ejecución de un servicio de asignación de memoria.
La figura 6 es un diagrama de bloques que ilustra otro ejemplo de un procedimiento para asignar memoria.
Descripción detallada de la realización preferida
La siguiente descripción detallada se dirige a ciertas realizaciones específicas de la invención. Sin embargo, la invención puede realizarse en una multitud de formas diferentes. Debe ser evidente que los aspectos aquí manifestados pueden realizarse en una amplia variedad de formas y que cualquier estructura, función o ambas que aquí se presentan son meramente representativas. Basándose en las enseñanzas aquí manifestadas una persona experta en la materia debe apreciar que un aspecto aquí presentado puede implementarse independientemente de cualquier otro aspecto y que dos o más de estos aspectos pueden combinarse de formas diferentes. Por ejemplo, puede implementarse un aparato o puede llevarse a la práctica un procedimiento usando cualquier número de aspectos aquí manifestado. Además, dicho aparato puede implementarse o dicho procedimiento puede llevarse a la práctica usando otra estructura, funcionalidad o estructura y funcionalidad además de uno o más de los aspectos aquí manifestados u otros aspectos diferentes.
Los dispositivos móviles habitualmente hacen usos de servicios de asignación de memoria para funcionar. Aquí se describen procedimientos y dispositivos para disminuir la cantidad total de memoria requerida por diferentes sistemas en un dispositivo móvil y para disminuir los recursos de procesamiento consumidos por el dispositivo móvil. A continuación se ponen de manifiesto algunas arquitecturas que pueden utilizarse en conjunción con los procedimientos y dispositivos descritos.
La figura 1 es un diagrama de bloques que ilustra un ejemplo de un dispositivo móvil 102. El dispositivo móvil 102 incluye un procesador 202 que está en comunicación con una memoria 204 y una interfaz 206 de red para comunicar a través del enlace inalámbrico 106. Opcionalmente, el dispositivo 102 también puede incluir uno o más dispositivos tales como una pantalla 210, un dispositivo 212 de entrada de usuario tal como una tecla, una pantalla táctil u otro dispositivo de entrada táctil adecuado, un altavoz 214 que comprende un transductor adaptado para suministrar salida audible basándose en una señal recibida a través del enlace inalámbrico 106 y/o un micrófono 216 que comprende un transductor adaptado para suministrar entrada audible de una señal que puede ser transmitida sobre en enlace inalámbrico 106. Por ejemplo, un teléfono puede incluir la pantalla 210 adaptada para suministrar una salida visual de una interfaz gráfica de usuario (GUI).
La interfaz 206 de red puede incluir cualquier antena adecuada (no mostrada), un receptor 220 y un transmisor 222 de manera que el dispositivo ejemplar 102 pueda comunicar con uno o más dispositivos sobre el enlace inalámbrico 106. Opcionalmente, la interfaz 206 de red también puede tener capacidad de procesamiento para reducir los requisitos de procesamiento del procesador 202.
Opcionalmente, el dispositivo 102 puede incluir una segunda interfaz 208 de red que se comunica sobre la red 110 a través de un enlace 108. Por ejemplo, el dispositivo 102 puede suministrar conectividad con la otra red 110 (por ejemplo, una red de área extendida tal como Internet) a través de un enlace de comunicación alámbrico o inalámbrico. Consecuentemente, el dispositivo 102 puede habilitar otros dispositivos 102 (por ejemplo, una estación Wi-Fi) para acceder a la otra red 110. Además, debe apreciarse que uno o más de los dispositivos 102 pueden ser portátiles o, en algunos casos, relativamente no portátiles. La segunda interfaz 108 de red puede transmitir y recibir señales de RF de acuerdo con el estándar IEEE 802.11, incluyendo el IEEE 802.11(a), (b), o (g), el estándar BLUETOOTH y/o CDMA, GSM, AMPS u otras señales conocidas que es utilizan para comunicar dentro de una red telefónica celular inalámbrica. Además, la segunda interfaz 208 de red puede comprender cualquier interfaz de red cableada adecuada tal como Ethernet (IEEE 802.3), USB, o MDDI.
El dispositivo 102 puede incluir una batería 231 para suministrar energía a uno o más componentes del dispositivo 102. El dispositivo 102 puede comprender al menos uno de los dispositivos tales como un teléfono, un teléfono inteligente, un asistente digital personal (PDS), un ordenador personal ultra-móvil (UMPC), un dispositivo de Internet móvil (MID) o cualquier otro dispositivo móvil. En particular, las enseñanzas de aquí en adelante pueden incorporarse dentro (por ejemplo implementarse dentro o realizarse mediante) una variedad de los dispositivos 102.
Los componentes aquí descritos pueden implementarse en una variedad de formas. Con referencia a la figura 1, el dispositivo o aparato 102 se representa como una serie de bloques funcionales interrelacionados que pueden representar funciones implementadas, por ejemplo, por el procesador 202, el software, alguna combinación de los mismos o de alguna otra forma tal como aquí se dice. Por ejemplo, el procesador 202 puede facilitar la entrada del usuario a través de dispositivos 212 de entrada. Además, el transmisor 222 puede comprender un procesador para transmitir que suministre diferentes funcionalidades relativas a la transmisión de información a otro dispositivo 102. El receptor 220 puede comprender un procesador para la recepción que suministre diferentes funcionalidades relativas a la recepción de información desde otro dispositivo 102 tal como aquí se dice.
El procesador 202 está también en comunicación con el servicio 203 de asignación de memoria. En una realización, el servicio 203 de asignación de memoria se ejecuta sobre el procesador 202, el servicio 203 de asignación de memoria responde a las peticiones de memoria de uno o más subsistemas que funcionan en el dispositivo 102. El procedimiento y el funcionamiento del servicio 203 de asignación de memoria se describirán con mayor detalle a continuación.
Tal como se observó anteriormente, la figura 1 ilustra que en algunos aspectos estos componentes pueden implementarse a través de componentes de procesador adecuados. Estos componentes de procesador pueden en algunos aspectos implementarse, al menos en parte, utilizando la estructura aquí descrita. En algunos aspectos, un procesador puede adaptarse para implementar una parte o toda la funcionalidad de uno o más de estos componentes. En algunos aspectos, uno o más componentes representados por cajas discontinuas son opcionales.
En una o más realizaciones ejemplares, las funciones descritas pueden incrementarse en hardware, software, firmware
o cualquiera de sus combinaciones. Si se emplea el software, las funciones pueden almacenarse o transmitirse como una o más instrucciones o código en un medio informáticamente legible. El medio informáticamente legible incluye tanto medios de almacenamiento informáticos como medios de comunicación incluyendo cualquier medio que facilite la transferencia de un programa informático desde un sitio a otro. Un medio de almacenamiento puede ser cualquier medio disponible que pueda ser accedido por un ordenador de propósito general o de propósito especial. A modo de ejemplo, y no de limitación, dichos medios informáticamente legibles pueden comprender RAM, ROM, EEPROM, CDROM u otro almacenamiento de disco óptico, almacenamiento de disco magnético u otros dispositivos de almacenamiento magnético, o cualquier otro medio que pueda ser utilizado para transportar o almacenar el código de programa deseado en forma de instrucciones o de estructura de datos y que pueda ser accedido por un ordenador de propósito general o de propósito especial, o por un procesador de propósito general o de propósito especial. También, cualquier conexión puede denominarse de forma adecuada medio informáticamente legible. Por ejemplo, si el software se transmite desde un sitio web, servidor u otra fuente remota usando cable coaxial, cable de fibra óptica, par trenzado, línea digital de abonado (DSL) o tecnologías inalámbricas tales como infrarrojos, radio y microondas, entonces el cable coaxial, cable de fibra óptica, par trenzado, la DSL o las tecnologías inalámbricas tales como infrarrojos, radio y microondas se incluyen en la definición del medio. Disco, tal como aquí se utiliza, incluye los discos compactos (CD), los discos láser, los discos ópticos, los discos versátiles digitales (DVD), los disquetes y los discos blu-ray donde unos discos habitualmente reproducen datos de forma magnética, mientras otros discos reproducen datos de forma óptica con láseres. Las combinaciones de los anteriores también deben incluirse dentro del ámbito de los medios informáticamente legibles.
De acuerdo con un aspecto del servicio de asignación de memoria, se empaquetan bloques de memoria pequeños dentro de unidades mayores de tamaño fijo (denominadas “ítems DSM”). Cada uno de los bloques más pequeños es objeto de seguimiento usando ítems “DUP” (duplicados), que apuntan hacia la carga útil dentro de un DSM. Ya que los ítems DSM son de tamaño limitado y que puede asumirse que todos los bloques dentro del DSM tienen una vida limitada similar, no es necesario tratar la fragmentación de la memoria libre dentro de cada DSM. La ventaja de ello es que la utilización de la memoria puede reducirse enormemente ya que solamente se malgasta poca memoria dentro de cada DSM, pero con una fracción de la complejidad de otras técnicas de asignación de memoria con alta eficiencia de empaquetamiento. Otra forma de enfoque es que esto es un servicio de asignación de tamaño fijo y flexible, donde la totalidad de la memoria se asigna en bloques de tamaño fijo, pero dentro de los bloques, se permiten asignaciones de tamaño flexible ya que se espera que las asignaciones flexibles tengan una vida corta.
En un aspecto, el bloque de memoria fundamental se denomina ítem DSM. Comprende una sección de encabezado y una sección de carga útil. Cuando se tiene que almacenar un bloque de datos en la memoria, se asigna un nuevo ítem DSM y los datos se copian en la sección de carga útil del DSM. Adicionalmente, los encabezados se actualizan para reflejar el inicio y la longitud de los datos. Si la longitud de los datos excede del tamaño de la sección de carga útil, pueden encadenarse múltiples ítems DSM entre si dentro de una lista enlazada.
Además, se define un tipo especial de ítem DSM, denominado como “DUP” (duplicado). Un DUP utiliza la misma estructura de encabezado que un DSM regular, pero no tiene sección de carga útil propia. En su lugar, puede apuntar hacia una sección de datos en otro lugar, por ejemplo dentro de un DSM normal. Para rastrear cuántos DUP apuntan hacia los datos del mismo ítem DSM, hay un campo de encabezado denominado “red_count”, que lleva la cuenta del número de referencias a este ítem DSM y que se pone a uno cuando el DSM original es el primero asignado. Cada vez que se crea un nuevo DUP apuntando dentro del ítem DSM, el red_count del ítem DSM se incrementa. De la misma manera, cuando se libera el DUP, el red_count del ítem DSM original disminuye. De esta forma el algoritmo de asignación puede saber cuándo el ítem DSM puede estar realmente liberado, que es solamente cuando ningún otro DUP apunta hacia la sección de carga útil de este paquete, que es cuando el red_count ha vuelto a cero.
Los DUP pueden usarse para dividir paquetes, para reordenar datos, para eliminar encabezados, etc., sin tener que tocar los datos originales. Todo esto puede conseguirse solamente manipulando los encabezados del DSM y del DUP.
De acuerdo con otro aspecto, técnicas que permiten el empaquetamiento de datos dentro del mismo ítem DSM para mejorar la eficacia de la memoria pueden afrontar algunas de las desventajas previamente observadas. De acuerdo con este aspecto, se define un grupo de ítems DSM grandes. Un gran tamaño del DSM permitiría concatenar datos de múltiples paquetes de enlace de radio dentro del mismo ítem DSM.
La figura 2 es un diagrama de bloques que ilustra ítems de memoria para un servicio de asignación de memoria. El servicio de asignación de memoria puede incluir una interfaz de programación de aplicaciones (“API”). Esta API puede estar disponible para ser accedida por subsistemas tales como los subsistemas presentes en el dispositivo 102. Este servicio de asignación de memoria puede ser ejecutado en su totalidad o en parte por el procesador 202 u otro dispositivo de procesamiento similar. Además, la API puede formar parte de un sistema operativo para un dispositivo móvil o inalámbrico tal como el dispositivo 102. Alternativamente, la API puede formar parte de una librería de software. En la figura 2 se muestra un primer tipo de ítem 610 de memoria. Este primer tipo de ítem 610 de memoria puede denominarse ítem de gestión de servicios de datos (“DSM”). Alternativamente, puede denominarse ítem contenedor. Estos ítems 610 de memoria de tipo contenedor se organizan como un grupo de ítems 605 de memoria. Aunque se ilustra un solo grupo 605, se apreciará que también pueden utilizarse múltiples grupos de ítems DSM. Cada grupo puede caracterizarse por una o más características comunes tales como el tamaño de los ítems o los subsistemas atendidos por el grupo.
En la figura 2 también se suministra una vista aumentada del ítem 610 de memoria. Tal como se ve en la vista aumentada, estos ítems 610 de tipo contenedor comprenden secciones múltiples. Una primera sección del ítem de memoria puede denominarse encabezado 615. El encabezado 615 puede contener información relativa a las partes restantes del ítem 610 de memoria así como otra información. Una segunda sección del ítem 610 de memoria puede denominarse carga útil. La carga útil en si misma puede tener varias partes o bloques asignados de memoria 620. Además, la carga útil puede tener espacio 625 no asignado o no utilizado. En una realización, la carga útil comprende
1.500 bytes, aproximadamente el tamaño necesario para almacenar un paquete IP.
El encabezado 615 del ítem 610 de memoria puede comprender información tal como una referencia al espacio 625 no asignado en el ítem 610 de memoria. En un ejemplo, esta referencia toma la forma de un puntero que indica la dirección de inicio del espacio 625 no asignado en el ítem 610 de memoria. Esta referencia a la memoria 625 no asignada en el ítem 610 de datos también puede denominarse “data_ptr.” El encabezado también puede contener un campo indicativo del tamaño de la memoria asignada 620. Esta cantidad de espacio asignado puede denominarse “usado” en la carga útil. El encabezado también puede contener un campo que indica un identificador que identifica el grupo 605 de memoria asociado con el ítem 610 de memoria. Este identificador puede denominarse “pool_id”. El encabezado también puede contener un campo que indica el número de referencias al ítem 610 de memoria. Por ejemplo, tal como se describió anteriormente, el ítem 610 de memoria puede ser referenciado por otros ítems de memoria. Por ejemplo, cada uno de los fragmentos asignados 620 de la carga útil es referenciado por un ítem de memoria diferente. Además, el encabezado 615 del ítem 610 de memoria referencia la parte no asignada 625 de la carga útil. Un recuento de estas referencias puede utilizarse, inter alia, para el propósito de determinar cuándo puede liberarse el ítem 610 de memoria y devolverse al grupo 605 para ser posteriormente reasignado. Este recuento de referencias puede denominarse “referencias”. El encabezado 615 también puede contener una o más referencias a otros ítems de memoria. Por ejemplo, si un fragmento solicitado de memoria es demasiado grande para ajustar en un solo ítem 610 de memoria, las referencias en el encabezado puede utilizarse para indicar uno o más ítems de memoria adicionales que puede encadenarse entre si para satisfacer la petición. Dependiendo del tipo de ítems de memoria que se referencian, estas referencias pueden denominarse “pkt_ptr” o “dup_ptr”. Por ejemplo, pkt_ptr puede referenciar cero o más DSM o contenedores mientras dup_ptr puede referenciar cero o más ítems DUP. Además de los campos identificados, el encabezado 615 puede comprender campos adicionales tales como un campo definido por el usuario o los campos usados para propósitos de comprobación. Además, el encabezado 615 puede omitir uno o más de los campos identificados.
La figura 2 ilustra también un segundo tipo de ítem 630 de memoria. Este segundo tipo de ítem de memoria puede denominarse ítem de memoria duplicado o “DUP”. Estos ítems DUP 630 comprenden un encabezado similar al encabezado 615 de los ítems 610 de memoria contenedores. Por ejemplo, Los ítems DUP pueden tener los mismos campos que el encabezado 615 de los ítems DSM. Alternativamente, los ítems DUP pueden tener más o menos campos. Sin embargo, estos ítems DUP no tienen su propia carga útil. En vez de ello, los encabezados 630 de los ítems DUP contienen referencias a ítems de memoria contenedores. En un ejemplo particular, un ítem DUP 630 contiene un puntero que indica el primer bloque de memoria de asignación en la parte asignada 620 de un ítem 610 de memoria. Estos ítems DUP 630 también pueden disponerse dentro de uno o más grupos 640. Al igual que los grupos 605 de ítems contenedores, pueden utilizarse múltiples grupos de ítems DUP. Por ejemplo, la figura 2 ilustra dos grupos 640 y 650 de ítems DUP. En un ejemplo, cada subsistema en un dispositivo empotrado o en un dispositivo de comunicaciones inalámbricas tiene su propio grupo de ítems DUP. En esta realización, el grupo 640 puede corresponderse con un sistema particular mientras que el grupo 650 puede corresponderse con otro subsistema. Tal como se ve en la figura 2, otra realización permite que los ítems DUP de grupos separados puedan referenciar bloques de memoria 620 en un solo ítem DSM 610.
La figura 3 muestra una realización alternativa de los ítems de memoria ilustrados en la figura 2. Como antes, puede utilizarse un solo grupo de ítems DSM 715. Sin embargo, esta vez, cada grupo de ítems 730 y 735 de ítems DUP referencian respectivamente partes asignadas de diferentes ítems DUP 725 y 720. Tal como se describió anteriormente, los ítems DSM pueden devolverse al grupo DSM 715 para su reasignación una vez que se han liberado todas las referencias de la carga útil. Sin embargo, cuando se permite que múltiples subsistemas tengan referencias DUP dentro del mismo ítem DSM puede producirse fragmentación. Por ejemplo, toda la memoria asignada para un primer subsistema en un DSM particular puede haberse liberado ya. Sin embargo, si un bloque pequeño está todavía referenciado por un DUP de otro subsistema, la memoria restante en la carga útil puede tener que esperar para ser liberada hasta que el segundo subsistema libere su bloque de memoria pequeño. Para minimizar este problema, cada subsistema puede tener sus propias referencias DUP dentro de sus DSM. De esta forma, la vida útil de las partes de memoria asignadas en un DSM particular es probable que sea la misma. La similitud de los tiempos de vida útil da como resultado una fragmentación reducida.
Las figuras 4A y 4B ilustran una realización de un procedimiento 780 para asignar memoria. Este procedimiento 780 puede ejecutarse como un servicio que se ejecuta sobre un procesador tal como el procesador 202. El procedimiento 780 facilita la recepción de solicitudes de asignación de memoria y la devolución de referencias a la memoria asignada. Tal como se describe a continuación, la referencia particular asignada puede ser una función de la situación actual de asignación de la memoria para el sistema solicitante y del tamaño del bloque de memoria solicitado. Debe observarse que alguno de los pasos puede omitirse para ajustarse a los requisitos o especificaciones de una aplicación particular. Además debe observarse que alguno de los pasos aquí descritos son optimizaciones y así, pueden utilizarse u omitirse selectivamente a discreción del diseñador del sistema.
El procedimiento 780 se inicia cuando un servicio de asignación de memoria recibe una solicitud de memoria en el paso 785. Como parte de la solicitud de memoria, el subsistema solicitante puede especificar un tamaño solicitado de memoria. El subsistema solicitante también puede suministrar una ID de subsistema de manera que el servicio de asignación de memoria pueda seleccionar un ítem DSM adecuado para ese subsistema. Después de recibir la solicitud de memoria, el servicio de asignación de memoria determina si el tamaño solicitado es menor que el tamaño de la memoria no asignada en un ítem contenedor DSM actual tal como se muestra en el paso 790 de decisión. Tal como se analizó con respecto a las figuras 2 y 3, los ítems DSM pueden tener espacio no asignado en la sección de carga útil. El paso 790 de decisión puede realizarse comparando el tamaño de la parte no asignada con el tamaño solicitado. Alternativamente, ya que se sabe el tamaño total de la carga útil, la cantidad solicitada puede compararse con el tamaño de la parte asignada de la carga útil. En otra realización, en vez de usar el tamaño solicitado de memoria para la comparación, el sistema de asignación de memoria puede aumentar el tamaño de la solicitud de manera que la solicitud aumentada se alinee con los límites del caché. Por ejemplo, una solicitud real puede incrementarse de manera que la solicitud resultante sea un múltiplo de un tamaño de fila de caché particular tal como 16, 32, 64 ó 128 bytes. A pesar de todo, si el tamaño de memoria solicitado o su versión alineada aumentada ajusta en la parte no asignada, el procedimiento se ejecuta hasta el paso 800.
Continuando hasta el paso 800 de decisión, el sistema de asignación de memoria determina si el tamaño solicitado más el tamaño de la parte previamente asignada del ítem DSM actual es mayor que un primer umbral. Por ejemplo, si una carga útil DSM tiene aproximadamente 1500 bytes de longitud, el umbral podría ser 1200 bytes. Consecuentemente, el sistema de asignación de memoria determinaría si el tamaño de la memoria ya asignada más el tamaño de la memoria solicitada excede del límite de 1200 bytes. En una realización, el umbral puede seleccionarse como un cierto porcentaje del tamaño de la carga útil de un ítem DSM. Por ejemplo, el umbral puede ser aproximadamente el 70% -80% el tamaño de la carga útil. En otra realización, el tamaño del umbral puede seleccionarse para que refleje las características de tamaño de una solicitud común tal como las solicitudes de memoria para almacenar paquetes IP. En otra realización, en vez de comparar el tamaño de la memoria asignada con un umbral, el tamaño de la memoria no asignada restante puede compararse con un umbral. En esta realización, el sistema calcularía la parte de la carga útil que permanecería sin asignar si el tamaño de memoria solicitado o ajustado se asignase. La comparación de la memoria no asignada restante con este umbral podría utilizarse entonces de forma similar a la previamente comparación analizada de la memoria asignada con un umbral.
Realizando el paso 800 de decisión, si la suma identificada es mayor que el umbral, el procedimiento sigue hasta el paso 805. Siguiendo hasta el paso 805, el sistema de asignación de memoria devuelve una referencia al subsistema solicitante. En una realización, la referencia de vuelta es data-ptr del encabezado del ítem DSM actual. De forma ventajosa, devolviendo la referencia del encabezado del ítem DSM, el sistema de asignación de memoria ahorra una mayor utilización de los recursos involucrados en la creación de un ítem DUP devolviendo la referencia desde el encabezado DUP. Además, asignando el resto de la carga útil DSM en vez de solo el tamaño solicitado se permite que el servicio de asignación de memoria evite los bloques de datos pequeños al final de las cargas útiles que de otra forma darían como resultado el encadenamiento si se utilizase.
Volviendo al paso 800 de decisión, si el tamaño de memoria solicitada más el tamaño de la memoria ya asignada no es mayor que el umbral, el procedimiento se ejecuta hasta el paso 810. En el paso 810 el servicio de asignación de memoria crea un ítem DUP, asigna la memoria solicitada y devuelve la referencia en el DUP al subsistema solicitante. De forma ventajosa, a lo largo de múltiples iteraciones, este procedimiento permite que el servicio de asignación de memoria empaquete múltiples asignaciones dentro de un solo ítem DSM. Este empaquetamiento permite el uso eficaz de los recursos de memoria y proporciona ganancias tanto en el uso de la memoria como en el uso del procesamiento.
Volviendo al paso 790, si el tamaño de la memoria solicitada es mayor que el espacio no asignado en el ítem DSM actual, el procedimiento continúa hasta el paso 845 de decisión de la figura 4B. En la decisión del paso 845, el servicio de asignación de memoria si el tamaño solicitado es mayor que un segundo umbral. Este segundo umbral, al igual que el primero, debe fijarse como un número fijo de bytes. Por ejemplo, si el tamaño de la carga útil del ítem DSM es 1600 bytes, el segundo umbral puede ser 1200 bytes. Alternativamente, el segundo umbral también puede determinarse como un porcentaje del tamaño de la carga útil. Por ejemplo, el segundo umbral puede ser el 65% -75% del tamaño de la carga útil. En otra realización, el umbral puede determinarse dinámicamente. Por ejemplo, el umbral puede fijarse igual a la cantidad total de la memoria asignada en el ítem DSM. En esta realización, el tamaño solicitado excedería del umbral cuando el tamaño solicitado excede el espacio asignado en el DSM. A pesar de cómo se determine el umbral, si el tamaño solicitado es mayor que este umbral, el servicio de asignación de memoria asigna un nuevo ítem DSM y devuelve data_ptr desde el encabezado de nuevo ítem DSM al subsistema solicitante tal como se muestra en el paso
850. De forma similar al paso 805, este proceso de devolución de una referencia desde el encabezado del nuevo ítem DSM ahorra la sobrecarga de crear un nuevo ítem DUP. El subsistema solicitante recibe más de lo que solicitó, un ítem DSM completo, y esta asignación permite que las subsecuentes solicitudes de asignación sean satisfechas con la memoria no asignada restante en el ítem DSM actual.
Volviendo al paso 845, si el tamaño solicitado es menor que este segundo umbral, el procedimiento sigue hasta el paso
855. En el paso 855 la referencia del encabezado del ítem DSM a la parte no asignada de la carga útil del DSM se elimina. En efecto, esto libera el resto del ítem DSM. Además, se crea un nuevo ítem DSM. Se asigna un bloque de memoria en el nuevo ítem DSM y se crea un DUP correspondiente. La referencia en el nuevo DUP al nuevo ítem DSM se devuelve entonces al subsistema solicitante.
En la figura 5 se ilustran ejemplos del anterior procedimiento con propósitos explicativos, En CASE 1, se ilustra el ítem DSM actual 910. El DSM actual tiene tanto una parte asignada 915 como una parte no asignada 920. Se ilustra un tamaño 925 de paquete solicitado como el primer umbral 930. Según se muestra en la figura, el tamaño de la parte asignada 915 más el tamaño de la parte solicitada 925 es menor que el primer umbral 930. Consecuentemente, según se muestra, se asigna un fragmento del ítem DSM 935 y se crea un nuevo ítem DUP y su referencia se devuelve al subsistema solicitante. El nuevo ítem DUP incluye una referencia al DSM 935 que apunta hacia el inicio de los datos nuevamente asignados.
En CASE 2 se muestra un DSM 955 actual en conjunción con otro paquete solicitado 960. Según se ilustra en la figura, el tamaño de la parte asignada del DSM 955 más el tamaño del paquete solicitado excede del primer umbral, sin embargo, la suma no excede de la longitud total de la carga útil. Consecuentemente, la referencia ala parte no asignada del ítem DSM 965 se devuelve al subsistema solicitante. El resultado es que además de conseguir el tamaño de la memoria solicitada o incluso una asignación ajustada a fila ligeramente mayor, el subsistema solicitante obtendrá todo el espacio 980 no asignado restante en el DSM 965. De nuevo, la devolución de la referencia desde el encabezado del ítem DSM ahorra la sobrecarga de crear un DUP y elimina el encadenamiento potencial creado por la fila 980 que de otra forma podría haberse perdido.
En CASE 3, se ilustra un DSM actual 985 con otro bloque 990 de memoria solicitada. Según se ilustra, el paquete solicitado es demasiado grande para ajustar en la parte no asignada del DSM actual. Además, el tamaño solicitado es menor que el segundo umbral 995. Consecuentemente, la referencia en el encabezado del DSM actual 1000 a las partes no asignadas de la carga útil se elimina. Se crea un nuevo DSM 1005. Se asigna un bloque de memoria de DSM y se crea un nuevo ítem DUP que referencia el bloque asignado en el nuevo DSM. La referencia de este nuevo ítem DUP se devuelve entonces al subsistema solicitante. De nuevo, se apreciará que aunque el segundo umbral 995 se ilustra como estático, el umbral puede determinarse dinámicamente por ejemplo haciéndolo igual al tamaño de la memoria asignada en el original.
En CASE 4, se ilustra un DSM 1010 actual junto con un bloque 1015 de memoria solicitada. Como en el CASE 3, el tamaño solicitado es demasiado grande para ajustar en la parte no asignada en el ítem DSM 1010. Además, el tamaño 1015 del bloque solicitado es mayor que el segundo umbral 995. El resultado es que el DSM 1020 actual se conserva en su estado actual. Mientras tanto, se crea un nuevo DSM 1025 y se devuelve la referencia a la parte no asignada de la carga útil en el encabezado del nuevo DSM.
La figura 6 es similar al procedimiento ilustrado en las figuras 4A y 4B. Sin embargo, la figura 6 ofrece variaciones con respecto a ciertos parámetros usados en una realización del servicio para asignar memoria. El procedimiento 1080 ilustrado en la figura 6, proporciona una API para las solicitudes de asignación de memoria. En una realización particular, el procedimiento 1080 suministra una llamada a una función para los subsistemas que puede utilizarse para solicitar asignación de memoria. Según se muestra, la función puede tomar como parámetro el tamaño solicitado de asignación de memoria. Además, la función puede tomar otros parámetros tales como una ID del subsistema que identifica el subsistema solicitante. El servicio presentado por la figura 6 puede configurarse para que se ejecute sobre un procesador tal como el procesador 202 del dispositivo 102. En respuesta a las solicitudes de asignación, el servicio, tal como se analiza a continuación, prepara un puntero hacia un bloque de memoria asignada de un tamaño mayor o igual al tamaño solicitado. Consecuentemente, los subsistemas que utilizan la API del servicio reciben un puntero hacia la memoria asignada. En una realización particular, el procedimiento ilustrado en la figura 6 usa alguno o todos los valores siguientes durante su operación:
current_dsm-item-ptr[]: esto es un conjunto de punteros hacia el ítem DSM actual para cada subsistema.
aligned_pkt_size: es el tamaño del bloque solicitado de memoria, ajustado para alinearse con las filas del caché de tamaños tales como 16, 32, 64 ó 128.
pkt_ptr: puntero hacia la memoria asignada que se va a devolver.
DSMI_MEM THRESHOLD TO_FREE_DSM: el primer umbral para determinar si se debe devolver una referencia DUP
o DSM. Si después de asignar un bloque de memoria, la memoria no asignada restante fuera menor que este umbral, se devuelve la referencia DSM, asignando de forma efectiva toda la memoria no asignada restante en el ítem DSM.
DSMI_THRESHOLD_FOR_COMPLETE_ITEM_ALLOCATION: el segundo umbral para determinar si debe devolverse una referencia DUP o DSM. Si el tamaño del paquete solicitado es mayor que este umbral, se crea un nuevo ítem DSM y se devuelve la referencia desde el encabezado del nuevo DSM. Se conserva el DSM actual.
El procedimiento ilustrado en la figura 6 se inicia con la llamada a la función mostrada en 1085. Como parámetro para la solicitud, el servicio de asignación recibe el tamaño del paquete solicitado “pkt_size”. Además, en algunas realizaciones, también podría pasarse a la llamada a la función otro parámetro tal como la ID del subsistema. Siguiendo hasta el paso 1100 el procedimiento bloquea el grupo particular de ítems DSM para evitar problemas de acceso concurrente. Después de bloquear el grupo, el procedimiento sigue hasta el paso 1105 de decisión. En el paso 1105 de decisión, el servicio determina si pkt_ptr es nulo. Si no se ha asignado memoria para la petición, el puntero puede ser nulo. Sin embargo, si el puntero tiene un valor diferente a nulo, el servicio procede a desbloquear el grupo 1140 y devuelve el puntero 1145. Sin embargo, si el puntero es nulo, el servicio sigue hasta el paso 1110 de decisión.
Continuando en el paso 1110 de decisión, el servicio determina si current_dsm_item_ptr es nulo. Si iteraciones previas han dado como resultado que no existe ítem DSM actual, el servicio procede a crear uno 1115 y sale si dicha creación falla 1120, 1140, 1145. Una vez que se ha confirmado que existe o se ha creado un DSM actual válido, el procedimiento sigue hasta el paso 1125 de decisión. En el paso 1125 de decisión el servicio determina si el tamaño solicitado alineado es menor que el tamaño del espacio no asignado en el DSM actual. Si es así, el servicio determina entonces si el espacio no asignado que había después de asignar la memoria solicitada en el DSM es menor que un primer umbral en el paso 1130. Si es así, el servicio crea un DUP y asigna la memoria solicitada alineada en el DSM 1135 actual, desbloquea el grupo 1140 y devuelve el puntero DUP 1145. Si no, el servicio crea un DSM 1150 completamente nuevo, desbloquea el grupo 1140 y devuelve el puntero del encabezado del nuevo DSM 1145.
Volviendo al paso 1125, si es tamaño solicitado es mayor que el espacio no asignado restante, el procedimiento sigue hasta el paso 1155 de decisión. En el paso 1155, el servicio determina si el tamaño solicitado es mayor o igual al segundo umbral. Si es así, el servicio crea un DSM 1165 completamente nuevo, desbloquea el grupo 1140 y devuelve el puntero desde el encabezado del nuevo DSM 1145. Si no, el servicio libera la memoria restante en el DSM actual y procede a iniciar de nuevo el procedimiento en el paso 1105. El resultado es que se crea un nuevo DSM, se crea un DUP que referencia el cuerpo del nuevo DSM y se devuelve el puntero DUP al subsistema solicitante.
De aquí en adelante se presentan también características y realizaciones adicionales del presente servicio de asignación de memoria:
Múltiples punteros DSM para diferentes usuarios
Para manejar los casos en los que se espera que el tiempo de vida de los bloques difiera substancialmente para los diferentes usuarios, el algoritmo puede mantener múltiples punteros DSM y sólo empaqueta bloques de datos con un tiempo de vida similar dentro del mismo DSM. Por ejemplo, un ID específico de un usuario podría pasarse junto con la solicitud de asignación, de forma que solamente se empaquetarían los datos de ese usuario dentro del mismo ítem DSM. Las solicitudes de otros usuarios se empaquetarían dentro de otros DSM. Aquí “usuario” podría ser un conjunto de tareas o subtareas o capas o funciones, o cualquier otra combinación de estos para diferenciar un conjunto de perfiles de usuario de los demás
Soporte para añadir datos por delante (o por detrás) de un DSM
Para manejar eficazmente la adición de datos por delante de un ítem DSM o DUP existente (es decir, la adición de encabezados de protocolo) sin tener que asignar un nuevo ítem DSM o realizar encadenamiento, se propone la asignación de un DSM con espacio libre por delante. El espacio libre se controla mediante un encabezado “desplazado”. De esta forma, un DUP o un DSM pueden asignarse con un desplazamiento dado y posteriormente si se necesita insertar más datos por delante del DSM, esto puede hacerse sin una nueva asignación de DSM seguida por un encadenamiento. Puede permitirse un servicio similar para añadir datos por detrás de un DSM.
Grupos múltiples
El servicio permite que múltiples grupos DSM efectúen reserva de un número de ítems para un cierto usuario. De esta forma ese usuario no tendrá que preocuparse de que súbitamente no haya más ítems DSM libres a causa de que otro usuario los haya asignado en su totalidad. También, esto proporciona una mayor capacidad de depuración de los problemas de desbordamiento de memoria (cuando un usuario desborda los límites de una asignación), ya que el problema se restringe solamente a la base de código de ese usuario.
Servicio de cuotas como alternativa a los grupos múltiples
Otra forma de conseguir lo mismo es tener un grupo, pero cada usuario tiene una cuota máxima de ítems DSM (bytes) que puede asignar. Una vez alcanzada su cuota, debe liberar algunos ítems para asignar nuevos ítems, para evitar ahogar a otros usuarios. Una ventaja que tiene esto sobre la aproximación de grupos múltiples es que aun se puede conseguir el uso compartido. Por ejemplo, si hay 4 usuarios con su propio grupo de X ítems, se requerirían 4X ítems de memoria. Sin embargo, ya que es muy improbable que los 4 usuarios asignaran todos los ítems al mismo tiempo, el servicio de cuotas podría permitir una reducción de la memoria total hasta 3X, asumiendo que si un usuario toma toda su memoria = X, los 3 restantes podrían ser capaces de compartir la memoria restante = 2X.
Punteros DSM múltiples para tamaños diferentes
En este aspecto, la asignación DSM puede particionarse basándose en el espacio de memoria solicitado (en oposición al uso de una ID de subsistema anteriormente mencionado). En lugar de tener la forma convencional de grupos de tamaños múltiples compartidos a través de múltiples capas / subsistemas para satisfacer las necesidades de todas las tareas / perfiles, con esta propuesta puede haber una previsión para dar soporte a múltiples punteros DSM de los cuales solamente pueden asignarse bloques de tamaños específico por cada puntero DSM. Por ejemplo, podemos tener un puntero DSM para tamaños de bloques de 128, 256, 512, 768, 1.024, 1.536 bytes, y así sucesivamente.
Siempre que cualquier capa / módulo solicite memoria de tamaño específico, un algoritmo puede determinar el puntero DSM de mejor ajuste y suministrar el DUP si el tamaño solicitado está disponible. Si es tamaño solicitado no está disponible, se libera el puntero DSM (si no es NULL) para ese tamaño y se asigna un ítem grande del grupo global de ítems grandes (por ejemplo, ítems mayores que un número determinado de bytes, en un ejemplo, ítems mayores o iguales a 768 bytes) y entonces DUP el tamaño de bloque de mejor ajuste y se devuelve el DUP al comunicanteante.
La presente asignación tiene también diferentes ventajas sobre la técnica anterior. Realizaciones del presente servicios reducen la huella en la memoria. El uso de menos grupos permite una mejor multiplexación estadística. El servicio proporciona mejor eficacia de empaquetamiento. Hay menos sobrecarga para los ítems DSM, incluso con la sobrecarga añadida de los DUP. Se reduce la sobrecarga de procesamiento de la CPU (MIPS) debido al menor encadenamiento. El servicio permite la utilización de ítems DSM de mayor tamaño evitando las largas cadenas de paquetes (especialmente con tamaños de paquetes mayores) reduciendo así el número de operaciones de asignación / liberación de DSM. Ciertas realizaciones simplifican el mantenimiento asociado con una aproximación más convencional que supone múltiples grupos de memoria. El servicio puede implementarse con una API central para la gestión, esto evita tener que implementar dicha funcionalidad para cada subsistema, duplicando así el código. Se evita la necesidad de tamaños de grupos y tamaños de ítems separados por objetivo. Sin las técnicas aquí esbozadas, sería necesario implementar el código separadamente en muchos sitios (por ejemplo, en diferentes o múltiples capas en la pila, tal como, el módulo de servicios de paquetes (PS), el módulo USB de alta velocidad (HS-USB), etc.), lo que tiende a producir más errores, etc. Es posible definir un grupo DUP en memoria de alta velocidad para obtener mejoras adicionales en el rendimiento (por ejemplo, mejoras en el caché), por ejemplo, definiendo el grupo DUP en una memoria de baja latencia (por ejemplo, memoria interna de acceso aleatoria (IRAM)). Pueden obtenerse menos comprobaciones en el DSM si solo se usa un grupo con esta interfaz de programación de aplicaciones (API). Actualmente el DSM realiza algunas comprobaciones basándose en la ID de grupo (identificación) que se pasa como parámetro.
Realizaciones adicionales
Una primera realización de la presente invención incluye un sistema de gestión de la memoria que comprende:
un procesador y
un servicio de gestión de la memoria, ejecutable sobre el ordenador, el servicio de gestión de la memoria puede configurarse para:
generar primeros ítems de memoria, en los que cada uno de los primeros ítems de memoria comprende un encabezado y una carga útil, la carga útil configurable para almacenar una pluralidad de fragmentos de memoria independientemente asignables, referenciando el encabezado de los primeros ítems de memoria el espacio asignable en la carga útil,
generar segundos ítems de memoria, en los que cada uno de los segundos ítems de memoria comprende un encabezado que referencia uno o más fragmentos de memoria en la carga útil de los primeros ítems de memoria; y
devolver una referencia desde el encabezado de un primer o un segundo ítem de memoria que responde a una solicitud de asignación de memoria.
El encabezado de los primeros ítems de memoria puede mantener un recuento de referencias para los primeros ítems de memoria. El servicio de gestión de la memoria puede configurarse además para generar primeros ítems de memoria separados para cada uno de la pluralidad de subsistemas. La solicitud de asignación de memoria puede comprender un tamaño de la memoria solicitada. El servicio de gestión de la memoria puede configurarse adicionalmente para determinar una suma de un tamaño de la memoria asignada en la carga útil de un primer ítem de memoria particular y el tamaño de la memoria solicitada y comparar la suma con un valor del umbral. El servicio de gestión de la memoria puede configurarse adicionalmente para generar y devolver una referencia desde la cabecera de un segundo ítem de memoria particular cuando la suma es menor que el valor del umbral. El servicio de gestión de la memoria puede configurarse adicionalmente para devolver una referencia desde la cabecera del primer ítem de memoria particular cuando la suma es mayor que el valor del umbral. El servicio de gestión de la memoria puede configurarse adicionalmente para determinar una suma de un tamaño de la memoria asignada en una carga útil de un primer ítem de memoria particular y el tamaño de la memoria solicitada, comparar la suma con un tamaño de la carga útil del primer ítem de memoria particular y comparar el tamaño de la memoria solicitada con un umbral.
El servicio de gestión de la memoria puede configurarse además para generar otro primer ítem de memoria particular, generar un segundo ítem de memoria particular que referencia una carga útil del otro primer ítem de memoria particular y devolver una referencia desde el encabezado del segundo ítem de memoria particular cuando la suma es mayor que el tamaño de la carga útil del primer ítem de memoria particular y el tamaño de la memoria solicitada es menor que el umbral. El servicio de gestión de la memoria puede configurarse adicionalmente para generar otro primer ítem de memoria particular y devolver una referencia desde el encabezado del otro primer ítem de memoria particular cuando la suma es mayor que el tamaño de la carga útil del primer ítem de memoria particular y el tamaño de la memoria solicitada es mayor que el umbral. El umbral puede ser el tamaño de la memoria asignada en el primer ítem de memoria particular. El servicio de gestión de la memoria puede configurarse adicionalmente para aumentar el tamaño de la memoria solicitada para alinear el tamaño de la memoria solicitada con un límite de bloque del caché.
Una realización adicional de la presente invención incluye un procedimiento de gestión de la memoria, el procedimiento comprende:
asignar primeros ítems de memoria, comprendiendo cada uno de los primeros ítems de memoria un primer encabezado y una carga útil, comprendiendo la carga útil fragmentos de memoria independientemente asignables, comprendiendo el primer encabezado una referencia a la memoria no asignada en la carga útil;
asignar segundos ítems de memoria, comprendiendo cada uno de los segundos ítems de memoria un segundo encabezado, comprendiendo el segundo encabezado una referencia a un fragmento no asignado en la carga útil de un primer ítem de memoria;
recibir solicitudes de asignación de memoria; y
responder a las solicitudes de asignación de memoria devolviendo una referencia desde el encabezado de un primer o un segundo ítem de memoria.
El primer encabezado puede comprender además un recuento de las referencias a los primeros ítems de memoria. La asignación de los primeros ítems de memoria puede comprender además la asignación de primeros ítems de memoria separados para cada uno de la pluralidad de subsistemas. La solicitud de asignación de memoria puede comprender un tamaño de la memoria solicitada.
El procedimiento puede comprender además la determinación de una suma de un tamaño de la memoria asignada en una carga útil de un primer ítem de memoria particular y el tamaño de la memoria solicitada, y la comparación de la suma con un valor del umbral. el procedimiento puede comprender además la asignación y la devolución de una referencia desde el encabezado de un segundo ítem de memoria particular cuando la suma es menor que el valor del umbral. El procedimiento puede comprender además la devolución de una referencia desde el encabezado del primer ítem de memoria particular cuando la suma es mayor que el valor del umbral.
Cuando la solicitud de asignación de memoria comprende un tamaño de memoria solicitado, el procedimiento puede comprender además la determinación de una suma de una tamaño de la memoria asignada en una carga útil de un primer ítem de memoria particular y el tamaño de la memoria solicitada, la comparación de la suma con un tamaño de la carga útil del primer ítem de memoria particular y la comparación de la memoria solicitada con un umbral. Esta realización puede comprender además la generación de otro primer ítem de memoria particular, la generación de un segundo ítem de memoria particular que referencia una carga útil de otro primer ítem de memoria particular y la devolución de una referencia desde el encabezado del segundo ítem de memoria particular cuando la suma es mayor que el tamaño de la carga útil del primer ítem de memoria particular y el tamaño de la memoria solicitada es menor que el umbral o la generación de otro primer ítem de memoria particular, y la devolución de una referencia desde el encabezado del otro primer ítem de memoria particular cuando la suma es mayor que el tamaño de la carga útil del primer ítem de memoria particular y el tamaño de la memoria solicitada es mayor que el umbral. El umbral puede ser el tamaño de la memoria asignada en el primer ítem de memoria particular. Cuando la solicitud de asignación de memoria comprende un tamaño de la memoria solicitada, el sistema de gestión de la memoria puede comprender además el aumento del tamaño de la memoria solicitada para alinear el tamaño de la memoria solicitada con un límite de bloque del caché.
Una realización adicional de la presente invención incluye un sistema de gestión de memoria, que comprende: medios para asignar primeros ítems de memoria, comprendiendo cada uno de los primeros ítems de memoria un primer encabezado y una carga útil, comprendiendo la carga útil fragmentos de memoria independientemente asignables, comprendiendo el primer encabezado una referencia a la memoria no asignada en la carga útil;
5 medios para asignar segundos ítems de memoria, comprendiendo cada uno de los segundos ítems de memoria un segundo encabezado, comprendiendo el segundo encabezado una referencia a un fragmento asignado de memoria en la carga útil de un primer ítem de memoria;
medios para recibir solicitudes de asignación de memoria; y
medios para responder a las solicitudes de asignación de memoria devolviendo una referencia desde el 10 encabezado de un primer o un segundo ítem de memoria.
Una realización adicional de la presente invención incluye un medio informáticamente legible codificado con instrucciones informáticas que, cuando se ejecuta, origina que el procesador:
asigne primeros ítems de memoria, comprendiendo cada uno de los primeros ítems de memoria un primer encabezado y una carga útil, comprendiendo la carga útil fragmentos de memoria independientemente
15 asignable, comprendiendo el primer encabezado una referencia a la memoria no asignada en la carga útil;
asigne segundos ítems de memoria, comprendiendo cada uno de los segundos ítems de memoria un segundo encabezado, comprendiendo el segundo encabezado una referencia a un fragmento asignado de memoria en la carga útil de un primer ítem de memoria;
reciba solicitudes de asignación de memoria; y
20 responda a las solicitudes de asignación de memoria devolviendo una referencia desde el encabezado de un primer o un segundo ítem de memoria.

Claims (11)

  1. REIVINDICACIONES
    1.-Un procedimiento de gestión de memoria, el procedimiento comprende los pasos de:
    asignar primeros ítems de memoria, comprendiendo cada uno de los primeros ítems de memoria un primer encabezado y una carga útil, comprendiendo la carga útil fragmentos de memoria independientemente asignable, comprendiendo el primer encabezado una referencia a la memoria asignable en la carga útil; que se caracteriza porque el procedimiento comprende además los pasos de:
    asignar segundos ítems de memoria, comprendiendo cada segundo ítem de memoria un segundo encabezado, comprendiendo el segundo encabezado una referencia a uno o más fragmentos de memoria en la carga útil de los primeros ítems de memoria;
    recibir solicitudes para la asignación de memoria; y
    responder a las solicitudes de asignación de memoria devolviendo una referencia desde el encabezado de un primer o un segundo ítem de memoria.
  2. 2.-El procedimiento de la reivindicación 1, en el que el primer encabezado comprende además un recuento de referencias a los primeros ítems de memoria.
  3. 3.-El procedimiento de la reivindicación 1 o 2, en el que la asignación de los primeros ítems de memoria comprende además la asignación separada de primeros ítems de memoria para cada uno de una pluralidad de subsistemas.
  4. 4.-El procedimiento de cualquiera de las reivindicaciones 1 a 3, en el que la solicitud de asignación de memoria comprende un tamaño de memoria solicitado.
  5. 5.-El procedimiento de la reivindicación 4, que comprende además la determinación de una suma de un tamaño de memoria asignable en una carga útil de un primer ítem de memoria particular y el tamaño de la memoria solicitada, y la comparación de la suma con un valor del umbral.
  6. 6.-El procedimiento de la reivindicación 5, que comprende además la asignación y devolución de una referencia desde el encabezado de un segundo ítem de memoria particular cuando la suma es menor que el valor del umbral.
  7. 7.-El procedimiento de la reivindicación 6, que comprende además la devolución de una referencia desde el encabezado del primer ítem de memoria particular cuando la suma es mayor que el valor del umbral.
  8. 8.-El procedimiento de la reivindicación 4, que comprende además:
    determinar una suma de un tamaño de memoria asignada en una carga útil de un primer ítem de memoria particular y el tamaño de la memoria solicitada;
    comparar la suma con un tamaño de la carga útil del primer ítem de memoria particular y
    comparar el tamaño de la memoria solicitada con un umbral.
  9. 9.-El procedimiento de la reivindicación 8, que comprende además:
    asignar otro primer ítem de memoria particular;
    asignar un segundo ítem de memoria particular que referencia una carga útil del otro primer ítem de memoria particular y
    devolver una referencia desde el encabezado del segundo ítem de memoria particular cuando la suma es mayor que el tamaño de la carga útil del primer ítem de memoria particular y el tamaño de la memoria solicitada es menor que el umbral.
  10. 10.-El procedimiento de la reivindicación 9, que comprende además:
    asignar otro primer ítem de memoria particular y
    devolver una referencia desde el encabezado del otro primer ítem de memoria particular cuando la suma es mayor que el tamaño de la carga útil del primer ítem de memoria particular y el tamaño de la memoria solicitada es mayor que el umbral.
  11. 11.-El procedimiento de la reivindicación 9, en el que el umbral es el tamaño de la memoria asignada en el primer
    ítem de memoria particular. 12.-El procedimiento de la reivindicación 4, que comprende además el aumento del tamaño de la memoria solicitada para alinear el tamaño de la memoria solicitada con el límite del bloque del caché.
    5 13.-Un sistema de gestión de la memoria, que comprende:
    un procesador (202) y
    un servicio (203) de asignación de memoria, ejecutable por el procesador (202) que implementa el
    procedimiento de cualquiera de las reivindicaciones 1 a 12. 14.-Un medio legible codificado por ordenador con instrucciones informáticas que, cuando se ejecuta, provoca que 10 un procesador implemente el procedimiento de cualquiera de las reivindicaciones 1 a 12.
ES09727041T 2008-04-02 2009-04-02 Sistema y procedimiento para la asignación de memoria en sistemas de comunicaciones embebidos o inalámbricos. Active ES2367605T3 (es)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US41878 1987-04-23
US4187808P 2008-04-02 2008-04-02
US416759 2009-04-01

Publications (1)

Publication Number Publication Date
ES2367605T3 true ES2367605T3 (es) 2011-11-04

Family

ID=41134319

Family Applications (1)

Application Number Title Priority Date Filing Date
ES09727041T Active ES2367605T3 (es) 2008-04-02 2009-04-02 Sistema y procedimiento para la asignación de memoria en sistemas de comunicaciones embebidos o inalámbricos.

Country Status (11)

Country Link
US (1) US8321651B2 (es)
EP (1) EP2266265B1 (es)
JP (1) JP5265758B2 (es)
KR (1) KR101134195B1 (es)
CN (1) CN101971581B (es)
AT (1) ATE516647T1 (es)
CA (1) CA2718291A1 (es)
ES (1) ES2367605T3 (es)
RU (1) RU2460222C2 (es)
TW (1) TW201018142A (es)
WO (1) WO2009124164A1 (es)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100182970A1 (en) * 2009-01-21 2010-07-22 Qualcomm Incorporated Multiple Subscriptions Using a Single Air-Interface Resource
US9442846B2 (en) 2009-03-17 2016-09-13 Cisco Technology, Inc. High speed memory systems and methods for designing hierarchical memory systems
US8433880B2 (en) 2009-03-17 2013-04-30 Memoir Systems, Inc. System and method for storing data in a virtualized high speed memory system
US8788782B2 (en) * 2009-08-13 2014-07-22 Qualcomm Incorporated Apparatus and method for memory management and efficient data processing
US20110041128A1 (en) * 2009-08-13 2011-02-17 Mathias Kohlenz Apparatus and Method for Distributed Data Processing
US8762532B2 (en) * 2009-08-13 2014-06-24 Qualcomm Incorporated Apparatus and method for efficient memory allocation
US9038073B2 (en) * 2009-08-13 2015-05-19 Qualcomm Incorporated Data mover moving data to accelerator for processing and returning result data based on instruction received from a processor utilizing software and hardware interrupts
US8838910B2 (en) 2010-06-07 2014-09-16 International Business Machines Corporation Multi-part aggregated variable in structured external storage
US8341368B2 (en) 2010-06-07 2012-12-25 International Business Machines Corporation Automatic reallocation of structured external storage structures
US9351196B2 (en) * 2012-08-31 2016-05-24 International Business Machines Corporation Byte caching in wireless communication networks
KR102150262B1 (ko) * 2013-09-25 2020-09-01 현대모비스 주식회사 차량 정보 시스템의 메모리 관리 방법
CN105573711B (zh) * 2014-10-14 2019-07-19 深圳市中兴微电子技术有限公司 一种数据缓存方法及装置
CN104572498B (zh) * 2014-12-26 2018-04-27 曙光信息产业(北京)有限公司 报文的缓存管理方法和装置
CN110245091B (zh) * 2018-10-29 2022-08-26 浙江大华技术股份有限公司 一种内存管理的方法、装置及计算机存储介质
CN112860423A (zh) * 2019-11-28 2021-05-28 深圳云天励飞技术有限公司 显存管理方法及相关产品
US11206222B2 (en) 2020-02-07 2021-12-21 Wipro Limited System and method of memory management in communication networks

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0574140A1 (en) * 1992-05-29 1993-12-15 Hewlett-Packard Company Network adapter which places a network header and data in separate memory buffers
JP3177047B2 (ja) * 1993-01-27 2001-06-18 大日本印刷株式会社 メモリ領域の管理方法
RU2037874C1 (ru) 1993-05-10 1995-06-19 Валерий Алексеевич Харитонов Устройство управления памятью
JP2778913B2 (ja) * 1994-04-26 1998-07-23 株式会社東芝 マルチプロセッサシステム及びメモリアロケーション方法
US7269171B2 (en) 2002-09-24 2007-09-11 Sun Microsystems, Inc. Multi-data receive processing according to a data communication protocol
US7334123B2 (en) 2003-05-02 2008-02-19 Advanced Micro Devices, Inc. Computer system including a bus bridge for connection to a security services processor
JP2005100262A (ja) * 2003-09-26 2005-04-14 Seiko Epson Corp メモリ管理装置およびメモリ管理プログラム、並びにメモリ管理方法
US20050125550A1 (en) 2003-12-09 2005-06-09 Bajikar Sundeep M. Location information via DHCP
US7930422B2 (en) 2004-07-14 2011-04-19 International Business Machines Corporation Apparatus and method for supporting memory management in an offload of network protocol processing
WO2006015513A1 (en) * 2004-08-12 2006-02-16 Intel Corporation Method and system for processing multicast packets
JP4144609B2 (ja) 2004-09-29 2008-09-03 ソニー株式会社 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム
FR2879874B1 (fr) 2004-12-16 2008-11-07 Eads Telecom Soc Par Actions S Procede de demarrage d'une station ip, systeme, serveur et station le mettant en oeuvre et procede d'etablissement d'appel telephonique
US7433673B1 (en) 2004-12-17 2008-10-07 Sprint Spectrum L.P. Method and system for providing location information for a wireless local area network (WLAN)
RU2491737C2 (ru) * 2006-03-31 2013-08-27 Квэлкомм Инкорпорейтед Управление памятью для высокоскоростного управления доступом к среде
US7685396B2 (en) * 2007-03-05 2010-03-23 Research In Motion Limited System and method for dynamic memory allocation

Also Published As

Publication number Publication date
EP2266265B1 (en) 2011-07-13
US8321651B2 (en) 2012-11-27
CN101971581A (zh) 2011-02-09
RU2460222C2 (ru) 2012-08-27
ATE516647T1 (de) 2011-07-15
CA2718291A1 (en) 2009-10-08
WO2009124164A1 (en) 2009-10-08
EP2266265A1 (en) 2010-12-29
JP5265758B2 (ja) 2013-08-14
KR20100126592A (ko) 2010-12-01
TW201018142A (en) 2010-05-01
JP2011521313A (ja) 2011-07-21
CN101971581B (zh) 2013-11-06
RU2010144764A (ru) 2012-05-10
US20090254731A1 (en) 2009-10-08
KR101134195B1 (ko) 2012-04-09

Similar Documents

Publication Publication Date Title
ES2367605T3 (es) Sistema y procedimiento para la asignación de memoria en sistemas de comunicaciones embebidos o inalámbricos.
CN101630992B (zh) 共享内存管理方法
ES2754253T3 (es) Fragmentación de datos de enlace ascendente para redes de múltiples usuarios
US9100895B2 (en) Client balancing in wireless networks
KR100597438B1 (ko) 무선 팬 매체 접근 제어 프레임 송신 장치 및 방법
JP6864783B2 (ja) データ伝送方法及び新しいアクセス層サブレイヤエンティティ
WO2016041375A1 (zh) 一种cpu与芯片之间传输消息报文的方法及装置
US9304939B2 (en) Method and multi-core communication processor for replacing data in system cache
CN106850140A (zh) 数据通信的方法、装置及系统
WO2021037069A1 (zh) 传输控制方法及装置
US20220244861A1 (en) Data Access Method and Apparatus, and First Computing Device
JP5784831B2 (ja) アドホックワイヤレスネットワークにおける管理情報の通信のためのデバイスおよび方法
KR20170126903A (ko) 무선 송신에서의 매체 액세스 제어 프로토콜 데이터 유닛들의 배열
CN114885045B (zh) 一种在高速智能网卡/dpu内节约dma通道资源方法和装置
US20130258921A1 (en) Device, system and method of scheduling communications by multiple medium-access-control (mac) modules
CN110113781A (zh) 缓冲区状态报告的上报、资源分配方法、终端及网络设备
ES2684092T3 (es) Energía verde para redes densas grandes (escala de tabla proxy)
CN109726144B (zh) 一种数据报文的处理方法和装置
JP2023540264A (ja) 分散コンピューティングを使用したeapolハンドシェイクのためのキー照合
KR20110079868A (ko) 무선 통신 시스템에서 시스템 정보 업데이트 제어 정보 송수신 방법 및 장치
CN112350957B (zh) 一种网络报文发送的方法、装置和网络处理器
KR101854377B1 (ko) 고속 패킷 처리 시스템 및 그 제어방법
KR20170092241A (ko) 사물인터넷 기반 무선 센서 네트워크의 라우팅 및 부하 균등화 방법
ES2732581T3 (es) Compresión de red de retorno asistida por terminal
KR20200030272A (ko) 셀룰러망 통신 서버 및 이의 셀룰러망에서의 자원관리 방법