IT201800002644A1 - Procedimento per gestire carte a circuito integrato, corrispondente carta e apparecchiatura - Google Patents

Procedimento per gestire carte a circuito integrato, corrispondente carta e apparecchiatura Download PDF

Info

Publication number
IT201800002644A1
IT201800002644A1 IT201800002644A IT201800002644A IT201800002644A1 IT 201800002644 A1 IT201800002644 A1 IT 201800002644A1 IT 201800002644 A IT201800002644 A IT 201800002644A IT 201800002644 A IT201800002644 A IT 201800002644A IT 201800002644 A1 IT201800002644 A1 IT 201800002644A1
Authority
IT
Italy
Prior art keywords
size
region
empty
regions
allocated
Prior art date
Application number
IT201800002644A
Other languages
English (en)
Inventor
Francesco Caserta
Original Assignee
St Microelectronics Srl
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 St Microelectronics Srl filed Critical St Microelectronics Srl
Priority to IT201800002644A priority Critical patent/IT201800002644A1/it
Priority to US16/248,538 priority patent/US11481133B2/en
Priority to EP19154441.0A priority patent/EP3525500B1/en
Publication of IT201800002644A1 publication Critical patent/IT201800002644A1/it
Priority to US17/951,665 priority patent/US20230019427A1/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W8/00Network data management
    • H04W8/18Processing of user or subscriber data, e.g. subscribed services, user preferences or user profiles; Transfer of user or subscriber data
    • H04W8/183Processing at user equipment or user record carrier
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Databases & Information Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Memory System (AREA)
  • Credit Cards Or The Like (AREA)

Description

DESCRIZIONE dell’invenzione industriale intitolata:
“Procedimento per ridurre la frammentazione della memoria non volatile in carte a circuito integrato, corrispondenti carta ed apparecchiatura”
TESTO DI DESCRIZIONE
Campo tecnico
La descrizione si riferisce a carte a circuito integrato.
Una o più forme di realizzazione si possono applicare ad es. a Carte a Circuito Integrato Universali (UICC) per l’utilizzo ad es. in un’apparecchiatura di comunicazione mobile.
Sfondo tecnologico
L’apparecchiatura di comunicazione mobile in ad es. reti GSM e UMTS può impiegare carte intelligenti o smart card del tipo a cui viene attualmente fatto riferimento come a Carta a Circuito Integrato Universale (UICC).
A tal proposito, Figura 1 mostra un’eventuale architettura di una “apparecchiatura utente” 10, quale un dispositivo mobile, ad es. uno smartphone o un tablet, o un modulo di comunicazione mobile solitamente da utilizzare in sistemi incorporati o embedded. Generalmente, il dispositivo 10 comprende uno o più processori 102 connessi ad una o più memorie 104. Il dispositivo 10 comprende inoltre almeno un’interfaccia di comunicazione mobile 106 per la comunicazione con una stazione base BS. Ad esempio, l’interfaccia di comunicazione mobile 106 può comprendere un ricetrasmettitore GSM (Sistema Globale per Comunicazioni Mobili), CDMA (Accesso Multiplo a Divisione di Codice), ricetrasmettitore W-CDMA (Accesso Multiplo a Divisione di Codice a Banda Larga), UMTS (Sistema Universale di Telecomunicazioni Mobile), HSPA (Accesso al Pacchetto ad Alta Velocità) e/o ricetrasmettitore LTE (Evoluzione di Lungo Termine). Un dispositivo mobile comprende sovente anche un’interfaccia utente 110, quale uno schermo tattile. Al contrario, un modulo di comunicazione da utilizzare, ad es., in sistemi embedded, quali sistemi di allarme, contatori del gas o altri tipi di sistemi di monitoraggio e/o controllo remoto, non comprendono sovente un’interfaccia utente 110, ma un’interfaccia di comunicazione 112 al fine di scambiare dati con un’ulteriore unità di elaborazione di un sistema embedded. Ad esempio, in questo caso, l’interfaccia 112 può essere un’interfaccia di comunicazione digitale, quale un’interfaccia di comunicazione UART (Ricevitore-Trasmettitore Universale Asincrono), SPI (Interfaccia Periferica Seriale) e/o USB (Bus Seriale Universale). Generalmente, l’unità di elaborazione 102 può anche essere direttamente il processore principale di un sistema embedded. In questo caso l’interfaccia 112 si può utilizzare per scambiare dati con uno o più sensori e/o attuatori. Ad esempio, in questo caso, l’interfaccia 112 si può implementare per mezzo di una o più interfacce analogiche e/o porte di ingresso/uscita digitali dell’unità di elaborazione 02.
Nella memoria 104 si può ad es. memorizzare un sistema operativo OS che viene eseguito dal processore 102 e che gestisce le funzioni generali del dispositivo 10, quali la gestione dell’interfaccia utente 110 e/o dell’interfaccia di comunicazione 112 e la costituzione di una connessione alla stazione base BS tramite l’interfaccia 106. La memoria 104 può anche contenere applicazioni che sono eseguite dal sistema operativo OS. Ad esempio, nel caso di un dispositivo mobile, la memoria 104 comprende sovente un’applicazione di navigazione web o web browser WB.
Per stabilire una connessione con la stazione base BS, il dispositivo 10 è accoppiato ad un’unità di elaborazione 108 configurata per gestire l’identificazione di identità dell’utente. Ad esempio, solitamente un dispositivo mobile comprende un titolare di carta per ricevere una carta comprendente un Modulo di Identità di Abbonato (SIM), che è solitamente chiamata carta SIM. Generalmente un corrispondente modulo SIM si può anche installare direttamente all’interno del dispositivo 10. Nell’esempio della Figura 1 si utilizza una UICC 108, che è una smart card sovente utilizzata in reti GSM e UMTS. La UICC assicura l’integrità e sicurezza di tutti i tipi di dati personali e contiene tipicamente alcune centinaia di kilobyte. Inoltre una UICC si può integrare direttamente nel dispositivo 10 ed è in questo caso sovente chiamata UICC embedded (eUICC).
Ad esempio, in una rete GSM, la UICC 108 contiene un’applicazione SIM e in una rete UMTS un’applicazione USIM. Una UICC può contenere varie applicazioni, rendendo possibile alla stessa smart card dare accesso ad entrambe le reti GSM e UMTS, e può anche fornire la memorizzazione di una guida telefonica ed altre applicazioni.
Di conseguenza, il riferimento ad un modulo SIM nel seguito della presente descrizione è previsto per comprendere entrambi i moduli SIM 2G e/o 3G e si applica anche al caso in cui un tale modulo SIM è fornito su una carta SIM.
Come mostrato nella Figura 2, un modulo SIM 108 comprende sovente uno o più processori 1082 e una o più memorie 1084 per eseguire applicazioni memorizzate nella memoria 1084 del modulo 108. Ad esempio, il modulo SIM 108 può comprendere in aggiunta all’applicazione del Modulo di Identità di Abbonato (segno di riferimento SIM nella Figura 2) almeno un’ulteriore applicazione APP. Ad esempio, questa applicazione APP si può configurare per comunicare (direttamente, o indirettamente tramite il processore 102 ed eventualmente il sistema operativo OS) con l’interfaccia di comunicazione mobile 106 al fine di inviare dati a e/o ricevere dati da un host remoto 30. Per questo scopo, l’host 30 può essere connesso tramite una rete 20, quale una Rete di Area Locale (LAN) o una Rete ad Estensione Geografica (WAN), quale internet, alla stazione base BS. Di conseguenza, la connessione tra l’host 30 e la UICC 108 si può stabilire per mezzo della rete 20, la stazione base BS e l’interfaccia di comunicazione 108. Generalmente, la comunicazione si può avviare tramite l’host 30 o la UICC 108. Ad esempio, l’applicazione APP può essere un’applicazione di web server, che riceve richieste dal web browser WB di un dispositivo mobile 10 e ottiene rispettivi contenuti da un host remoto 30, quale un web server. L’applicazione APP può anche essere un’applicazione di autenticazione. In questo caso, l’host 30 può inviare una richiesta di autenticazione alla UICC 108 e la UICC 108 può inviare una risposta di autenticazione all’host 30.
Come mostrato, una UICC può utilizzare un’applicazione SIM per accedere alla rete GSM e un’applicazione USIM per accedere ad una rete UMTS. Una UICC può contenere varie applicazioni, rendendo possibile per una stessa smart card dare accesso a varie reti fornendo anche risorse agli utenti.
Un operatore può specificare un insieme di applets, domini di sicurezza e file che l’emettitore della smart card memorizza nella smart card. A questo insieme di informazioni viene attualmente fatto riferimento come a “profilo”.
Un recente sviluppo delle carte UICC è rappresentato dalla UICC embedded (eUICC) che può essere incorporata ad es. in un terminale mobile, permettendo così ad un utente di cambiare operatore (e così il suo profilo) via etere per mezzo di una procedura software. Una eUICC è anche capace di gestire abbonamenti multipli dell’operatore di rete mobile, rendendo possibile per l’utente attivare/disattivare al volo un profilo attuale.
Le carte UICC e le carte eUICC possono risiedere in una memoria non-volatile (ad es. basata su flash) utilizzata per memorizzare un profilo.
Come discusso in precedenza, un profilo può comprendere:
-una gerarchia di domini di sicurezza, vale a dire applicazioni specifiche che si possono considerare come entità di autenticazione (contenitori di chiavi) per mezzo delle quali un operatore può modificare un profilo via etere;
- un insieme di pacchetti, vale a dire un insieme di classi ed interfacce correlate solitamente scritte per mezzo del linguaggio Java Card;
- un insieme di applet, vale a dire applicazioni in grado di autenticarsi ad una specifica rete (ad es. UMTS) o di interagire con l’utente; queste applet si possono scrivere per mezzo di una tecnologia Java Card e possono comprendere molti oggetti Java Card;
- una gerarchia di directory e file, che contengono informazioni di personalizzazione per le applet così come dati utili per scopi di autenticazione.
Entità di profilo quali domini di sicurezza, pacchetti, applet, file possono comprendere un insieme di oggetti da memorizzare e gestire tramite il sistema operativo dell’apparecchiatura correlata.
I domini di sicurezza e le applet possono comprendere oggetti e codice della Java Card. Questi ed altro tipo di entità persistenti (quali file e directory), sono indivisibili (in una UICC senza unità di gestione di memoria) e memorizzati in memoria. Essi possono essere, senza pregiudizio per i principi sottostanti, chiamati, “blocchi”.
Ciascun blocco memorizzato in una memoria non volatile in una UICC può attenersi ad un singolo profilo installato nella carta. In una UICC multi-profilo, il sistema operativo manterrà una corrispondenza tra ciascun blocco e suo profilo associato.
Ad esempio, i domini di sicurezza, le applet e i file caricati sulla carta si possono cancellare o modificare tramite l’operatore via etere. I file si possono anche ridimensionare. Gli oggetti pertinenti un dominio di sicurezza (ad es. un insieme di chiavi) si possono cancellare. Nella eUICC anche un intero profilo si può cancellare via etere. Ciò può eventualmente generare vari buchi, cioè sezioni di memoria non scritte con dati, che dipendono dalla politica di allocazione del sistema operativo, nella memoria non volatile.
Ogni volta che è generato un buco, aumenta la cosiddetta “frammentazione” della, memoria non volatile. Una memoria frammentata può causare problemi quando alloca blocchi grandi. Ad esempio, se la memoria disponibile totale ha una prima dimensione in byte, ma il buco più grande disponibile ha una seconda dimensione in byte, naturalmente più piccola rispetto alla prima dimensione, la dimensione massima di un blocco allocabile corrisponde a questa seconda dimensione. Sarebbe desiderabile avere la dimensione più grande per il blocco allocabile.
Verrà utilizzata nel seguito la descrizione dettagliata di vari termini tecnici a cui si applicano le seguenti definizioni.
Cumulo o heap persistente: questa è una porzione di memoria persistente della carta che è utilizzata dalla stessa carta per memorizzare applicazioni, pacchetti, domini di sicurezza e file pertinenti i diversi profili, e può comprendere un elenco di regioni vuote ed allocate.
Blocco: questa è una quantità indivisibile di dati memorizzati che contiene un oggetto Java Card o un file. Dato un riferimento di blocco B, che è un identificatore del blocco, il sistema operativo di un’apparecchiatura quale un’UE può determinare il suo indirizzo B.ind o B.addr e dimensione B.dimensione o B.size. Ad esempio, il sistema operativo può mantenere una struttura di dati chiamata tabella del blocco di allocazione che mantiene una corrispondenza tra riferimenti di blocco e loro indirizzo/dimensione.
Regione allocata: questa è un’area di memoria dove è allocato un insieme di blocchi adiacenti. Data una regione A allocata, il sistema operativo è in grado di determinare la sua dimensione A.size, ad esempio come la somma delle dimensioni dei blocchi compresi nella regione.
Regione vuota: questa è un’area di memoria che è libera, vale a dire un’area di memoria dove nessun blocco B è allocato (anche parzialmente). Data una regione vuota E, il sistema operativo è in grado di determinare il suo indirizzo E.addr e sua dimensione E.size, al fine di tenere traccia dello spazio disponibile. Il sistema operativo, ad esempio, può mantenere un elenco di regioni vuote.
Nel seguito verrà ipotizzato che una regione allocata sia sempre preceduta da una regione vuota o dall’inizio dell’heap ipotizzando anche nel contempo che essa sia seguita da una regione vuota o dalla fine dell’heap.
Viceversa, una regione vuota verrà preceduta da una regione allocata o dall’inizio dell’heap e verrà seguita da una regione allocata o dalla fine dell’heap.
Essendo E1 la regione vuota, che può essere una regione inferiore, qui indicata come E1L, o regione superiore E1U,) adiacente ad una regione allocata A1, e E2 la regione vuota adiacente ad un insieme di blocchi S nella regione allocata A2, spostare l’insieme S di dimensione S.size dalla regione allocata A2 e apporle (o anteporle) ad un’altra regione allocata A1, significa spostare l’insieme di blocchi all’inizio (la fine) della regione vuota adiacente inferiore (superiore) E1L (E1U). In questa operazione, la dimensione E1L.size (E1U.size) della regione vuota adiacente E1L (E1U), diminuisce dell’insieme della dimensione S.size, la dimensione della regione allocata A1 A1.size aumenta di S.size, A2.size diminuisce di S.size e E2 size aumenta di S.size.
Quindi, a titolo di esempio, facendo riferimento alla figura 3, un heap persistente PH nella memoria persistente 1084 si può generalizzare come una serie di regioni allocate A1, A2,… e regioni vuote E1, E2,…. Ciascuna regione allocata è composta da un insieme di blocchi. Facendo riferimento alla figura 3, A1 e A2 sono regioni allocate, E1 e E2 regioni vuote, B11..B1N blocchi nella regione allocata A1, B21...B2N blocchi nella regione allocata A2. Nella figura 3 per semplicità la regione vuota E1 è indicata come tale, non specificando se essa è una regione superiore E1L, di conseguenza la sua dimensione è semplicemente E1.size.
Un’esemplificazione di ciò è data nelle figure 4A e 4B dove è mostrato, in due scenari, un heap persistente di una memoria di memorizzazione 1084 di una smart card quale la carta 108. Nella figura 4A la memoria di memorizzazione 1084 ha una regione di memoria allocata A avente una data dimensione, ad esempio 9KB, e una regione di memoria vuota E non scritta con dati, avente la stessa dimensione. Nella figura 4B la quantità totale di memoria vuota è la stessa, tuttavia vi sono tre regioni di memoria allocata A1, A2, A3, tale che sono disponibili due regioni di memoria vuota E1, aventi una dimensione di 3KB, e E2 avente una dimensione di 6KB, cioè la massima dimensione di blocco allocabile è di 6KB, mentre nello scenario della figura 1A si può memorizzare un blocco con dimensione di 9KB.
In generale la smart card può comprendere una MCU (Unità di Microcontrollore), corrispondente ad esempio agli uno o più processori 1082. Nel caso in cui la MCU della smart card supporti un’Unità di Gestione di Memoria (MMU) i blocchi possono essere divisibili. La frammentazione non è un problema rilevante in questo tipo di MCU. Tuttavia non è molto comune avere una MMU installata su una MCU di smart card. Alcune librerie di software possono simulare una MMU. Tuttavia il loro utilizzo è abbastanza invasivo, ed esse rallentano gli accessi alla memoria.
Una semplice soluzione nota per il problema della frammentazione, definita qui deframmentazione classica, comprende scambiare tutte le regioni allocate con la loro regione vuota superiore, iniziando dalla seconda regione allocata. Ad esempio, nella figura 4B, la prima regione allocata dal limite superiore dell’heap persistente, cioè A1, non è scambiata, la successiva A2 è scambiata con E1. In questo modo tutte le regioni vuote verranno compattate, ed eventualmente si ottiene una singola regione vuota. Nell’utilizzare questo approccio, il numero di scritture non volatili, o operazioni di scrittura, sarebbe la somma delle dimensioni delle regioni allocate A1, A2…, iniziando dalla seconda. Questa somma può essere molto grande se vi sono grandi partizioni allocate e/o tante piccole partizioni vuote (buchi). In effetti ogni volta che la dimensione di una partizione vuota E1, E2… È inferiore alla dimensione di una Pagina Flash, l’ultima e la regione allocata adiacente necessitano essere scambiate in modo transazionale. Ciò raddoppia di più del doppio le operazioni di memoria necessarie. Le Figure 5A, 5B e 5C mostrano la procedura che scambia tutte le regioni allocate con la loro regione vuota superiore, iniziando dalla seconda regione allocata. Nella fase iniziale (figura 5A) vi sono tre regioni allocate A1, A2, A3, separate da tre regioni vuote E1, E2, E3. Dopo un primo scambio nella figura 5B, è eseguito un secondo scambio nella figura 2C ottenendo una dimensione di somma che è nel miglior caso A2 A3.
Tuttavia, nel mondo reale, i fornitori di smart card scelgono i prezzi delle UICC basandosi anche sulla dimensione di memoria destinata all’operatore. È probabile che l’operatore scelga la più piccola dimensione di memoria possibile. È probabile che la memoria non volatile venga quasi tutta allocata, e così anche le regioni vuote molto piccole. Per questa ragione questa soluzione solitamente conduce a grandi tempi di esecuzione.
Scopo e sintesi
Uno scopo di una o più forme di realizzazione è di contribuire ad occuparsi di un numero di problemi che sono riconosciuti come esistere in un contesto come discusso in precedenza.
Secondo una o più forme di realizzazione quello scopo si può conseguire per mezzo di un procedimento per gestire una carta a circuito integrato (ad es. una UICC o una eUICC) avente le caratteristiche esposte nelle rivendicazioni che seguono.
Una o più forme di realizzazione possono riferirsi ad una corrispondente carta a circuito integrato e ad una corrispondente apparecchiatura ad es. apparecchiatura per comunicazioni mobili.
Le rivendicazioni sono parte integrante della descrizione tecnica delle forme di realizzazione come qui fornite.
Una o più forme di realizzazione possono fornire uno o più dei seguenti vantaggi:
- l’esecuzione è molto veloce, e il procedimento è vicino ad eseguire il numero minimo di operazioni di memoria per deframmentare la memoria; l’algoritmo funziona particolarmente bene quando la maggior parte dei blocchi è piccola. Per questa ragione è ben adatto per una UICC dove solo i blocchi grandi sono solitamente il CAP dei pacchetti;
- il procedimento si può utilizzare anche in una UICC multi-profilo dove vi è qualche limitazione di memoria da far rispettare per garantire l’isolamento dei profili, ciò essendo d’altro canto molto difficile da trattare per un procedimento di deframmentazione classico;
- il procedimento si può interrompere quando si raggiunge un livello sufficientemente basso di frammentazione, ad es. quando un blocco di una certa dimensione (la cui allocazione era stata richiesta) è ora allocabile
- il procedimento descritto può garantire operazioni in “tempo reale” anche quando sono richieste temporizzazione rigide (ad es. durante uno scaricamento di profilo);
- il procedimento descritto richiede un numero molto limitato di operazioni transazionali.
Breve descrizione delle varie viste nei disegni
Una o più forme di realizzazione verranno ora descritte, solo a titolo di esempio, facendo riferimento alle figure annesse, in cui:
- le Figure 1 a 5 sono già state descritte in precedenza,
- le Figure 6A, 6B, 7A, 7B, 7C sono una rappresentazione di un principio sottostante le forme di realizzazione,
- le Figure 8A, 8B, 8C sono diagrammi di flusso esemplificativi di forme di realizzazione, e
- le Figure 9-15 rappresentano l’implementazione dei principi sottostanti le forme di realizzazione
Descrizione dettagliata
Nella seguente descrizione, sono illustrati uno o più dettagli specifici, mirati a fornire una comprensione approfondita di esempi di forme di realizzazione di questa descrizione. Le forme di realizzazione si possono ottenere senza uno o più dei dettagli specifici, o con altri procedimenti, componenti, materiali, ecc. In altri casi, strutture, materiali, o operazioni noti non sono illustrati o descritti nel dettaglio tale che certi aspetti di forme di realizzazione non verranno resi poco chiari.
Il riferimento ad “una forma di realizzazione” nel quadro della presente descrizione intende indicare che una particolare configurazione, struttura, o caratteristica descritte in relazione alla forma di realizzazione è compresa in almeno una forma di realizzazione. Di conseguenza, una frase quale “in una forma di realizzazione” che può essere presente in uno o più punti della presente descrizione non si riferisce necessariamente ad un’unica e alla stessa forma di realizzazione. Inoltre, conformazioni, strutture o caratteristiche particolari possono essere combinate in un modo adatto qualsiasi, in una o più forme di realizzazione.
I riferimenti qui utilizzati sono forniti meramente per comodità e quindi non definiscono la portata di protezione o l'ambito delle forme di realizzazione.
La soluzione qui descritta fornisce una procedura di deframmentazione, implementata dal sistema operativo della smart card al fine di “ricompattare” regioni di memoria vuote. Questo algoritmo procedura deve essere il più veloce possibile da eseguire durante l’elaborazione della APDU (Unità di Dati di Protocollo di Applicazione) senza avere un impatto significativo per l’utente finale/sistema. Il collo di bottiglia per una procedura di deframmentazione consiste nelle operazioni di memoria non volatile, così è possibile stimare grossolanamente le prestazioni di una tale procedura contando le operazioni di scrittura da eseguire.
Dato un insieme di blocchi indivisibili ed un insieme di regioni di memoria vuote, è formulato un problema quale il trovare una procedura efficiente che diminuisca la frammentazione di memoria, cioè aumenti significativamente la dimensione massima di un blocco allocabile.
Come già indicato in precedenza i blocchi sono gli oggetti tramite cui sono composti un dominio di sicurezza, pacchetto, applet, poiché essi sono memorizzati sulla memoria non-persistente tramite il sistema operativo. I blocchi adiacenti si possono raggruppare nella regione allocata per una questione di chiarezza nelle figure successive. Naturalmente i contenuti dei blocchi allocati devono essere mantenuti gli stessi alla fine dell’esecuzione della procedura di deframmentazione, ma la loro posizione in memoria può variare.
La Figura 6A e figura 6B rappresentano rispettivamente un heap persistente PH, analogamente a quello discusso con riferimento alla figura 3, in uno stato o scenario iniziale e, in uno stato dopo l’applicazione delle fasi del procedimento qui descritto. Nella figura 6A, corrispondente allo stato iniziale, la regione allocata A1 comprende i blocchi B11…B1N, mentre la regione allocata A2 comprende i blocchi B21…B2M.
Il procedimento di deframmentazione qui descritto fornisce:
- selezionare una regione vuota più grande della memoria di memorizzazione, cioè l’heap persistente PH.
Nell’esempio della figura 6A che mostra una rappresentazione di un principio sottostante le forme di realizzazione del procedimento qui descritto, essa è la seconda regione vuota E2;
- ampliare la partizione vuota selezionata, o regione, spostando i blocchi agli estremi, o limiti, della partizione vuota selezionata, cioè, E2, in altre partizioni vuote disponibili, cioè E1, E3. Quindi le altre partizioni vuote E1, E3, diventano degli zaini da riempire con i blocchi agli estremi della partizione vuota più grande, cioè i blocchi B11…B1N, i blocchi della prima regione allocata A1 adiacenti al limite superiore, o confine, della seconda regione vuota E2, che nella figura 3B sono mostrati come spostati nella prima regione vuota E1, e i blocchi B21…B2M, blocchi della terza regione allocata A3 adiacenti al limite inferiore di E2, tali blocchi nella figura 6B essendo mostrati come spostati nella regione vuota E3;
- l’operazione di ampliamento è eseguita riempiendo per prime le partizioni vuote più piccole. In questo modo è minimizzata la probabilità che in entrambi gli estremi della partizione vuota più grande vi siano blocchi troppo grandi da contenere nelle altre partizioni vuote;
- la procedura descritta funziona tramite iterazioni successive, ad ogni iterazione che seleziona un insieme di blocchi da spostare nella regione vuota più piccola attuale. Questo insieme si può selezionare da una regione allocata superiore o da una regione allocata inferiore rispetto a detta regione vuota più grande. Dipende da quali dei due insiemi di blocchi adiacenti, superiore o inferiore, sia quello più conveniente (cioè quale dei due ha una dimensione più vicina alla regione vuota più piccola). Nel caso in cui anche i due blocchi agli estremi di detta partizione più grande siano entrambi troppo grandi da adattare alla regione vuota più piccola attuale, è selezionata un’altra regione vuota (leggermente più grande, ad esempio la successiva regione vuota per dimensione nell’insieme di regioni vuote dell’heap persistente). La procedura può raggiungere una situazione in cui ai limiti della regione vuota più grande vi sono due blocchi troppo grandi da adattare a qualsiasi delle altre regioni vuote. Ciò può succedere specialmente nelle iterazioni finali della procedura, quando sono rimaste solo piccole porzioni delle partizioni di memoria originali. La procedura in questo caso può valutare che l’attuale livello di frammentazione della memoria è sufficientemente basso, ed interrompere la sua esecuzione, o può semplicemente saltare questi oggetti e continuare come se essi fossero stati spostati in un’altra partizione vuota. Tali oggetti verranno gestiti successivamente;
- infine, una classica procedura di deframmentazione di scambio, o swap defragmentation, si può eseguire in aggiunta sull’area di partizione più grande. Questa deframmentazione mira a compattare gli oggetti che sono stati saltati nella fase precedente. Qui non vi sono problemi di temporizzazione, poiché la dimensione dei singoli blocchi è irrilevante.
Le Figure 7A, 7B, 7C mostrano una situazione in cui vi sono blocchi di dimensione diversa nell’area allocata. L’heap PH nella figura 7A ha una regione vuota più grande selezionata E2, con una regione allocata adiacente superiore A2, avente blocchi superiori, B11, B12,…B1N, e una regione allocata adiacente inferiore A3, avente blocchi inferiori, B21, B22,…B1M. I blocchi B11 e B21 che sono i più adiacenti alla regione vuota più grande selezionata E2, sono anche più grandi degli altri blocchi. Nella figura 7B è mostrato come le regioni vuote E2, E3 sono per prime riempite con i blocchi superiori e inferiori più piccoli, lasciando aree vuote temporanee E* all’interno delle rispettive regioni allocate. Successivamente nella figura 7C, tramite una classica operazione di deframmentazione, il blocchi più grandi B11 e B21 sono scambiati nelle aree vuote temporanee E*, lasciando la regione vuota più grande selezionata E2 ampliata della dimensione corrispondente a tali aree vuote temporanee E*.
Ora, facendo riferimento alla figura 8A, un diagramma di flusso che rappresenta una forma di realizzazione del procedimento è qui descritto nel dettaglio, indicato interamente con il riferimento 100.
In una fase di avvio 105 l’insieme di regioni vuote E e l’insieme di regioni allocate A sono ricevuti come ingresso.
In una fase 110 una regione vuota più grande Eb è selezionata e rimossa dall’insieme di regioni vuote E che è successivamente presa in considerazione dalle seguenti fasi.
In una fase di prova 115 si verifica successivamente se l’insieme di regioni vuote E è un insieme vuoto. Nel caso negativo, cioè l’uscita della prova è FALSA, è eseguita una fase 120. In quello affermativo, cioè la prova di uscita è VERA, è eseguita una fase 117, dove i blocchi memorizzati in un elenco temporaneo M, che mantiene il blocco saltato e che verrà meglio compreso nel seguito facendo riferimento ad una procedura di salto di un blocco grande 200 e figura 8C, sono spostati nelle regioni allocate Au, Ad, adiacenti alla regione vuota più grande Eb. Successivamente è eseguita una fase 119 di fine procedura.
In una fase 120 la dimensione della regione vuota più grande nelle rimanenti partizioni memorizzate in E (cioè senza considerare Eb) è memorizzata come un valore di massima dimensione delle regioni vuote, maxEmptySize.
In una fase 125 un valore di minima dimensione of regioni vuote, minEmptySize è inizialmente impostato su zero.
In una fase 130 è scelta una regione vuota più piccola Es nell’insieme di regioni vuote E avente una dimensione più grande di tale dimensione minima minEmptySize.
In una fase 135 è scelta la regione allocata adiacente superiore Au, cioè nella posizione superiore rispetto a quella selezionata, cioè la più grande, regione vuota Eb ed è selezionato un insieme di blocchi inferiori (cioè blocchi in basso nella regione che sono direttamente adiacenti a Eb) Su appartenente a tale regione allocata adiacente superiore Au in modo che una dimensione Su.size dell’insieme di blocchi adiacenti superiori Su abbia la dimensione più grande inferiore alla dimensione Es.size della regione vuota più piccola Es.
In una fase 140 è scelta la regione allocata adiacente inferiore Ad rispetto alla regione vuota, cioè più grande, scelta Eb ed è selezionato un insieme di blocchi superiori (cioè blocchi su nella regione che sono direttamente adiacenti a Eb) Sd appartenente a tale regione allocata adiacente inferiore Ad in modo che la dimensione Sd.size dell’insieme di blocchi adiacenti inferiori Sd abbia la dimensione più grande inferiore alla dimensione Es.size della regione vuota più grande Es.
In una fase di prova 145 è successivamente verificato se l’insieme di blocchi adiacenti superiori Su e l’insieme di blocchi adiacenti inferiori Sd sono entrambi vuoti. Nel caso in cui la loro risposta sia vera, significa che le attuali regioni allocate adiacenti Au e Ad anno entrambe in corrispondenza dei loro estremi almeno un blocco la cui dimensione è più grande di Es.size, cioè non è possibile riempire la regione Es con i blocchi in Au e Ad adiacenti a Eb. Per questa ragione, deve essere scelta da riempire un’altra regione, o partizione, Es. Quindi, in una fase di prova 146 è verificato se Es.size è uguale alla dimensione massima maxEmptySize. In questo caso, la regione attuale Es scelta è la partizione vuota più grande dopo la regione Eb. Ciò significa che adiacenti alla regione vuota più grande Eb vi sono (almeno) due blocchi che sono troppo grandi per essere posti in qualsiasi delle partizioni vuote, eccetto Eb. Per questa ragione, questi due o più blocchi necessitano essere saltati in una fase 205 e la procedura continuerà al fine di riempire le rimanenti partizioni vuote.
Altrimenti se il superamento della fase 146 è falso, in una fase 147, a minEmptySize è assegnata la dimensione Es.size dell’attuale partizione Es. per questa ragione, quando la fase 130 è nuovamente eseguita, è scelta una nuova regione Es più grande di quella precedente, e nelle fasi 135, 140 Au e Ad sono nuovamente calcolate rispetto alla nuova regione Es.
Dopo una o più iterazioni delle fasi 130, 135, 140, 145, 146, 147, eventualmente la prova di uscita 145 sarà FALSA, cioè qualsiasi fra l’insieme di blocchi adiacenti superiori Su e l’insieme di blocchi adiacenti inferiori Sd non è un insieme vuoto. Ciò significa che vi è almeno un insieme di blocchi adiacenti alla regione vuota più grande Eb che si può spostare in Es, aumentando di conseguenza la dimensione della regione vuota, o partizione, Eb. Successivamente in una fase di prova 150 è verificato se la differenza tra la dimensione dell’insieme di blocchi adiacenti superiori Su, Su.size, e la dimensione Es.size, cioè (Su.size-Es.size), è maggiore rispetto alla differenza tra la dimensione dell’insieme di blocchi adiacenti inferiori Sd, Sd.size, e la dimensione Es.size della regione vuota più piccola Es, (Sd.size-Es.size). In altre parole detta selezione 150 dipende dalla valutazione di quale fra dette due regioni allocate Au, Ad comprende un rispettivo insieme Su, Sd di blocchi adiacenti avente una dimensione Su.size, Sd.size più vicina alla dimensione della regione vuota più piccola attuale Es. Specificatamente l’algoritmo sceglie l’insieme di blocchi che è più vicino per riempire completamente Es, massimizzando di conseguenza la aumento della dimensione di Eb.
Se la differenza della dimensione dell’insieme di blocchi adiacenti superiori Su, Su.size, rispetto alla dimensione Es.size della regione più piccola Es è la maggiore, si accede ad una sotto-procedura di spostamento di blocchi superiori 152, mostrata nel dettaglio nella figura 8B e che inizia con la fase 155. Altrimenti, si accede ad una sotto-procedura di spostamento di blocchi inferiori 172, anche mostrata nel dettaglio nella figura 8B e che inizia con la fase 175.
Nella fase 155 i blocchi nell’insieme di blocchi adiacenti superiori Su sono spostati dalla regione allocata superiore Au ad una delle due regioni allocate adiacenti della regione vuota più piccola Es, indicate come As.
Successivamente nella fase 160 le variabili che indicano rispettivamente la dimensione Es.size della regione vuota più piccola Es, la dimensione Au.size della regione allocata superiore adiacente a Eb e l’indirizzo Eb.addr della partizione vuota più grande Eb sono diminuite della dimensione Su.Size dell’insieme di blocchi adiacenti superiori Su. Inoltre, rispettivamente la variabile indicante la dimensione, Eb.size della partizione vuota più grande e la dimensione As.size della regione allocata adiacente alla regione vuota più piccola Es sono anche aumentate della dimensione Su.size dell’insieme di blocchi adiacenti superiori Su, cioè
Es.size=Es.size-Su.size
Au.size=Au.size-Su.size
Eb.addr=Eb.addr-Su.size
Eb.size=Eb.size+Su.size
As.size=As.size+Su.size
A seconda di quale partizione adiacente As aveva scelto l’algoritmo (cioè superiore o inferiore) anche gli indirizzi di Es e As sono allineati.
Successivamente nella fase 165 è controllato se il valore della dimensione Au.size della regione allocata superiore Au è diventato zero.
Nel caso in cui il risultato sia vero, significa che tutti i blocchi nella regione allocata Au adiacenti alla regione vuota più grande Eb sono stati completamente spostati in una o più iterazioni dell’algoritmo, e per questa ragione la regione vuota più grande Eb è ora adiacente ad un’altra partizione vuota Ebu o all’inizio dell’Heap Persistente. Quindi, in una fase 170, l’elenco di regioni vuote E è scansionato ed è trovata la partizione adiacente superiore Ebu (se vi fosse). L’Ebu è successivamente rimossa dall’elenco e la sua dimensione Ebu.size è aggiunta alla dimensione di Eb, cioè Eb.size.
Inoltre l’indirizzo della regione vuota più grande Eb è modificato per essere l’indirizzo di Ebu, cioè Eb.addr = Ebu.size.
Nel caso in cui il risultato della fase 165 sia falso, cioè Au.size è maggiore di zero, o dopo l’esecuzione della fase 170, si effettua un controllo per verificare se la dimensione dell’attuale regione vuota più piccola Es è maggiore di zero in una fase 193. Nel caso affermativo l’attuale regione vuota più piccola Es è rimossa (fase 196) dall’insieme di regioni vuote E il controllo ritorna all’ingresso della fase 115 che verifica se l’insieme di regioni vuote E è un insieme vuoto, e successivamente nella fase 120 la dimensione della regione vuota più grande Eb nel nuovo attuale insieme vuoto E è memorizzata come un valore di massima dimensione di regioni vuote, maxEmptySize.
Se la fase di prova 150 trova che la differenza tra la dimensione dell’insieme di blocchi adiacenti inferiori Sd, Sd.size, e la dimensione Es.size è la maggiore, è invece selezionata una sotto-procedura di spostamento di blocchi inferiori 172, anche mostrata nella figura 7B e che inizia con la fase 175, la sotto-procedura 172 essendo doppia rispetto ad una sotto-procedura di spostamento di blocchi superiori 152 (composta dalle fasi 155, 160, 165, 170), che considera solo che la Sd.size è maggiore della Su.Size.
Quindi, nella fase 175 i blocchi nell’insieme di blocchi adiacenti inferiori Sd sono spostati dalla regione allocata inferiore Ad ad una delle due regioni allocate adiacenti della regione vuota più piccola Es, indicate come regioni As.
Successivamente nella fase 180 le variabili indicanti rispettivamente la dimensione Es.size della regione vuota più piccola Es e la dimensione Ad.size della regione allocata inferiore adiacente a Eb, sono diminuite della dimensione Sd.size dell’insieme di blocchi adiacenti superiori Sd. Inoltre, rispettivamente la variabile indicante l’indirizzo Ad.addr della regione allocata inferiore adiacente a Eb, la dimensione Eb.size della partizione vuota più grande e la dimensione As.size della regione allocata adiacente alla regione vuota più piccola Es sono anche aumentate della dimensione Sd.size dell’insieme di blocchi adiacenti superiori Sd, cioè Es.size=Es.size-Sd.size
Ad.size=Ad.size-Sd.size
Ad.addr=Ad.addr+Sd.size
Eb.size=Eb.size+Su.size
As.size=As.size+Sd.size
A seconda di quale partizione adiacente As aveva scelto l’algoritmo (cioè superiore o inferiore) anche gli indirizzi di Es e As sono allineati.
Successivamente nella fase 185 è controllato se la dimensione Ad.size della regione allocata inferiore Ad è zero.
Nel caso in cui il risultato sia vero, significa che la regione allocata Ad adiacente alla regione vuota più grande Eb è stata completamente spostata, e per questa ragione la regione vuota più grande Eb è ora adiacente ad un’altra partizione vuota Ebd o alla fine dell’Heap Permanente. Quindi, in una fase 190, l’elenco di regioni vuote E è scansionato ed è trovata la partizione adiacente superiore Ebd (se vi fosse). L’Ebd è successivamente rimossa dall’elenco e la sua dimensione Ebd.size è aggiunta alla dimensione di Eb, cioè Eb.size.
Nel caso in cui il risultato della fase 185 sia falso, cioè Ad.size è maggiore di zero, o dopo l’esecuzione della fase 190, si controlla se la dimensione della regione vuota più piccola Es è maggiore di zero nella fase 193, nel caso affermativo la regione vuota più piccola Es è rimossa (fase 196) dall’insieme di regioni vuote E e il controllo ritorna all’ingresso della fase 115 che verifica se l’insieme di regioni vuote E è ora un insieme vuoto.
Come indicato sopra, se la fase 147 è vera, cioè che verifica se la dimensione della regione vuota Es, cioè Es.size, è uguale alla dimensione massima delle regioni vuote, maxEmptySize, questo è un particolare caso che richiede una sotto-procedura, cioè procedura di salto di blocco grande 200, che è mostrata nella figura 7C e D cui la fase 205 rappresenta la prima fase.
L’algoritmo raggiunge questo caso quando in corrispondenza dei limiti della regione vuota più grande Eb vi sono (almeno) due blocchi che sono più grandi della regione vuota più grande (eccetto Eb). Ciò succede tipicamente nelle ultime iterazioni dell’algoritmo, quando la memoria è quasi completamente deframmentata. Per gestire questo caso, l’algoritmo valuta qual’è il blocco più piccolo agli estremi della regione vuota più grande Eb e lo salta, cioè agisce poiché la partizione più grande Eb contiene un ultimo blocco. Specificatamente, nella fase 205, Bu è impostato come l’ultimo blocco della regione allocata adiacente superiore Au e Bd come il primo blocco della regione allocata adiacente inferiore Ad. Questi due blocchi sono i blocchi in corrispondenza dei limiti della regione vuota più grande Eb.
Successivamente in una fase di prova 210 è verificato se Bu.size è maggiore di Bd.size.
Se Bu.size è inferiore, successivamente in una fase 215 l’ultimo blocco superiore Bu è rimosso, cioè saltato, dalla regione allocata adiacente superiore Au e aggiunto ad un elenco temporaneo M. Inoltre, la dimensione della regione più grande Eb è ingrandita di Bu.size e il suo indirizzo diventa Bu.addr.
Successivamente, in una fase 220 è verificato se la regione allocata adiacente superiore Au è vuota. Se ciò è falso il controllo ritorna alla fase 115 per una nuova iterazione. Se ciò è vero, è eseguita una fase 225 che corrisponde alla fase 170, cioè una regione vuota Ebu, che è posizionata appena prima della regione vuota più grande Eb, è selezionata e rimossa dall’insieme di regioni vuote E, unendola alla regione vuota più grande Eb, la cui dimensione è successivamente Eb.size è Eb.size Ebu.size. Inoltre ad Eb.addr è assegnato il valore di Ebu.addr. Successivamente il controllo passa alla fase 115.
Se Bd.size è inferiore, è eseguita una doppia catena di fasi rispetto a 215-225, in cui in una fase 230 il primo blocco inferiore Bd è rimosso dalla regione allocata adiacente inferiore Ad e aggiunto alla memorizzazione temporanea M. Inoltre, la dimensione della regione più grande Eb è ingrandita di Bd.size.
Successivamente in una fase 235 è verificato se la regione allocata adiacente inferiore Ad è vuota. Se ciò è falso, il controllo ritorna alla fase 115 per una nuova iterazione. Se ciò è vero, è eseguita una fase 240 che corrisponde alla fase 190, cioè una regione vuota Ebd, che è posizionata appena dopo, o sotto, Eb, è selezionata e rimossa dall’insieme di regioni vuote E, unendola con la regione vuota più grande Eb, la cui dimensione è successivamente Eb.size è Eb.size Ebd.size. Successivamente i controlli passano alla fase 115 per una nuova iterazione.
Si deve notare che quando in corrispondenza delle fasi 115 l’insieme di regioni vuote E si trova vuoto, successivamente i blocchi Bu e Bd rispettivamente saltati nella fase 215 e 230 e memorizzati nell’elenco temporaneo M sono spostati nella fase 117 nelle regioni allocate Au, Ad, adiacenti alla regione vuota più grande Eb. Questa operazione è realizzata utilizzando una deframmentazione di scambio classica dove le regioni allocate sono effettivamente blocchi (e quindi solitamente abbastanza piccoli). Il tempo di esecuzione di questa procedura di scambio, è, quindi la somma del tempo di esecuzione necessario per spostare tutti i blocchi saltati in una delle regioni allocate adiacenti a Eb, ed è, per questa ragione, irrilevante.
Viene ora fornito un esempio delle operazioni del procedimento 100 descritto sopra facendo riferimento alle figure 9-15.
Facendo riferimento alla figura 9, si può vedere che nello scenario dell’esempio lì mostrato nell’heap PH, E1 è la regione vuota più grande, mentre E3 è la regione più piccola, o partizione. La figura 9 mostra uno stato iniziale dell’heap PH della memoria 1084.
Le dimensioni delle regioni vuote ed allocate dell’heap in un tale stato iniziale del procedimento di deframmentazione qui descritto sono:
B11.size=1 kB
B12.size=1,5 kB
B13.size=7 kB
B14.size=0,5kB
B21.size=1 kB
B22.size=2 kB
B23.size=6 kB
B24.size=0,5 kB
E1.size=10 kB
E2.size=6 kB
E3.size=4 kB
Il procedimento, come descritto, è configurato per trovare la regione vuota più grande Eb, cioè E1, e la regione vuota più piccola Es, E3, ad esempio tramite le fasi 105-130 della forma di realizzazione della figura 7A, funziona successivamente per ampliare la regione vuota più grande E1.
In particolare, il procedimento fornisce in una prima iterazione (che come mostrato, inizia, dopo la selezione della regione più grande Eb nella fase 110 con la prova 115, controllando se vi sono regioni vuote nell’heap), detto risultato è mostrato nella figura 10, per valutare la regione allocata adiacente superiore Au e la regione allocata adiacente inferiore Ad della regione vuota più grande E1 (ad esempio tramite le fasi 135-150 della forma di realizzazione della figura 7A). Per riempire la regione vuota più piccola E3, dalla regione superiore Au il miglior insieme di blocchi adiacenti superiori Su (valutato ad esempio attraverso la fase 135) è Su = {B14} di dimensione 0.5KB, poiché aggiungere anche il blocco B13 risulterebbe in una dimensione (7.5KB) più grande della regione più piccola E3. L’algoritmo, successivamente, analizza i blocchi adiacenti dalla regione inferiore Ad, (ad esempio attraverso la fase 140), e seleziona come l’insieme di blocchi adiacenti inferiori Sd, Sd = {B21, B22} di dimensione 3KB. Poiche la dimensione Sd.size di 3KB è più vicina di 0.5KB, Su.size, a E3.size (questa condizione nella forma di realizzazione della figura 7A essendo valutata nella fase 150), i blocchi nell’insieme di blocchi adiacenti inferiori Sd sono spostati (fase 175) nella regione vuota più piccola E3 nella posizione più lontana rispetto a E1 (nell’esempio). Di conseguenza, la dimensione della regione vuota più grande E1 aumenterà di 3KB, mentre la dimensione della regione vuota più piccola E3 diminuirà della stessa quantità (fase 180).
Dopo queste fasi, le dimensioni raggiunte dal procedimento di deframmentazione e descritte nella figura 10 sono:
B11.size=1kB
B12.size=1,5kB
B13.size=7kB
B14.size=0,5kB
B21.size=1 kB
B22.size=2 kB
B23.size=6 kB
B24.size=0,5 kB
E1.size=13 kB
E2.size=6 kB
E3.size=1 kB
Dalla catena di fasi 175-190, il controllo ritorna alla fase 115, che inizia una nuova iterazione. Ogni volta che inizia una nuova iterazione, è valutato se l’insieme di regioni vuote E è vuoto, e in questo caso (prova 115 vero) l’algoritmo termina spostando i blocchi saltati nelle regioni più vicine allocate vicino alla partizione vuota più grande.
Si deve notare che i blocchi B21 e B22 sono ora nella regione allocata A4, ma non sono mostrati per semplicità poiché essi non sono più rilevanti per la procedura di deframmentazione.
Nuovamente la regione E3 è la partizione vuota più piccola disponibile. Sd = {} poiché B23.size (6KB) è più grande di E3.size (1KB). Su = {B14} di dimensione 0.5KB.
Il procedimento sceglie successivamente (prova 150) di spostare i blocchi in Su nella regione vuota E3. Di conseguenza E3.size diminuirà di 0.5KB e E1.size aumenterà della stessa quantità (catena di fasi 155-170).
Di conseguenza, le dimensioni raggiunte dal procedimento di deframmentazione e descritte nella figura 11 sono:
B11.size=1kB
B12.size=1,5kB
B13.size=7kB
B14.size=0,5kB
B21.size=1 kB
B22.size=2 kB
B23.size=6,5 kB
B24.size=0,5 kB
E1.size=13,5 kB
E2.size=6 kB
E3.size=0.5 kB
Nella configurazione della figura 11, E3 è la partizione più piccola. Tuttavia l’insieme superiore Su = {} e insieme inferiore Sd = {}, cioè sono vuoti (la prova 145 è verificata) poiché entrambe B13.size e B23.size sono più grandi di E3.size. Il procedimento sceglie quindi (fase 146) la successiva regione vuota nella dimensione (E2) e cerca di riempirla (ritorno alla fase 115).
Tuttavia, anche in questo caso entrambi gli insiemi Su e Sd sono {}, cioè vuoti, poiché entrambi B13.size e B23.size sono più grandi di E2.size.
Poiché in questo esempio non vi sono altre partizioni (cioè la fase 146 è vera), il procedimento necessita saltare uno dei due blocchi grandi (B13 o B23). Nella forma di realizzazione della figura 7 ciò significa ricorrere alla sotto-procedura 200 (fig. 7C)
Poiché B23.size è inferiore a B13.size (fase 210), B23 è saltata (essa verrà spostata successivamente in una regione allocata adiacente).
Le dimensioni raggiunte dal procedimento di deframmentazione e descritte nella figura 12 sono:
B11.size=1 kB
B12.size=1,5 kB
B13.size=7kB
B14.size=0,5kB
B21.size=1 kB
B22.size=2 kB
B23.size=6,5 kB
B24.size=0,5 kB
E1.size=20 kB
E2.size=6 kB
E3.size=0,5 kB
Si deve notare che la regione E1 è mostrata per semplicità più grande, per mostrare che la procedura ha ora ai suoi estremi, cioè ai limiti superiori ed inferiori, i blocchi B13 e B24.
La partizione più piccola Es è nuovamente E3. L’insieme Su = {} mentre Sd = {B24} di dimensione 0.5KB.
Il procedimento (prova 150) sceglie l’insieme adiacente inferiore Sd e sposta i suoi blocchi in E3 riempiendolo completamente.
Le dimensioni raggiunte dal procedimento di deframmentazione e descritte nella figura 13 sono:
B11.size=1kb
B12.size=1,5 kB
B13.size=7kB
B14.size=0,5kB
B21.size=1 kB
B22.size=2 kB
B23.size=6,5 kB
B24.size=0,5 kB
E1.size=20,5 kB
E2.size=6 kB
Nella figura 13, si deve notare che la regione vuota E1 si può unire alla regione vuota E2 (Ebd nella fase 185), poiché non vi sono più regioni allocate che le separa, e, allo stesso modo, la regione allocata A3 si può unire alla regione allocata A4. Le regioni sono unite e rimane solo una partizione. Questo significa che il processo di deframmentazione è completo.
Le dimensioni raggiunte dal procedimento di deframmentazione e descritte nella figura 14 sono:
B11.size=1 kB
B12.size=1,5 kB
B13.size=7kB
B14.size=0,5kB
B21.size=1 kB
B22.size=2 kB
B23.size=6,5 kB
B24.size=0,5 kB
E1.size=26,5 kB
Il procedimento come ultima fase (fase 117) necessita solo unire i blocchi saltati nell’elenco M = {B23} ad una regione allocata adiacente.
Il risultato di ciò è mostrato nella figura 15, dove il blocco B23 appare spostato nella regione adiacente allocata A1, e la procedura di deframmentazione è ora completata, poiché esiste in memoria solo una regione vuota.
Le dimensioni nello stato raggiunte dal procedimento di deframmentazione descritte nella figura 15 sono ancora:
B11.size=1kb
B12.size=1,5kb
B13.size=7kB
B14.size=0,5kB
B21.size=1 kB
B22.size=2 kB
B23.size=6,5 kB
B24.size=0,5 kB
E1.size=26,5 kB
In questo esempio, sono utilizzate per semplicità, le dimensioni del blocco grande. Tuttavia solitamente in una UICC o nella eUICC tipiche dimensioni di blocco sono molto inferiori. In effetti, la mappa di memoria di una UICC/eUICC nel settore è solitamente molto diversa, con migliaia di blocchi e solo alcuni di essi con una dimensione significativa. Ciò risulta in prestazioni aumentate dell’algoritmo, poiché in pochissimi casi sarà necessario saltare un blocco.
Un procedimento secondo una o più forme di realizzazione può di conseguenza comprendere:
- fornire una carta a circuito integrato 10 con uno spazio di memoria PH comprendente regioni di spazio di memoria per memorizzare dati del profilo utente A
- operare una partizione di detto spazio di memoria PH in segmenti A1, A2, …, E1, E2, …. di regioni di spazio di memoria comprendenti regioni vuote A1, A2, … e regioni allocate E2, E2, ….,
detto procedimento comprendendo
- selezionare 110 fra dette regioni vuote E1, E2, … la regione vuota più grande Eb di detto spazio di memoria PH;
- ampliare detta regione vuota più grande selezionata Eb spostando blocchi di memoria posizionati nelle regioni allocate Au, Ad ai limiti di detta regione vuota più grande selezionata Eb in altre regioni vuote Es disponibili.
Una o più forme di realizzazione possono comprendere il fatto che detta operazione di ampliamento di detta regione vuota più grande selezionata Eb comprende eseguire una o più iterazioni di una procedura di deframmentazione 100, ad ogni iterazione
- selezionare inizialmente 130 una partizione vuota più piccola attuale Es in dette regioni vuote E1, E2, … in detto spazio di memoria PH;
- selezionare 150 un insieme di blocchi da spostare nella regione vuota più piccola attuale Es da una regione allocata superiore Au allocata in corrispondenza del limite superiore di detta regione vuota più grande Eb o da una regione allocata inferiore Ad allocata in corrispondenza del limite superiore di detta regione vuota più grande Eb, detta selezione 150 che dipende da quale fra dette due regioni allocate Au, Ad comprende un rispettivo insieme Su, Sd di blocchi adiacenti avente una dimensione Su.size, Sd.size più vicina alla dimensione di detta regione vuota più piccola Es.
In una o più forme di realizzazione nel caso in cui dette regioni allocate superiori ed inferiori Au, Ad comprendano gli insiemi Su, Sd di blocchi adiacenti che sono entrambi troppo grandi per adattarsi alla regione vuota più piccola attuale Es, una regione vuota più grande Ej rispetto a detta regione vuota più piccola attuale Es, in particolare la regione più grande successiva Ej, è selezionata come la regione vuota più piccola attuale Es.
In una o più forme di realizzazione se le regioni allocate in corrispondenza dei limiti della regione vuota più grande Eb comprendono blocchi adiacenti a detti limiti troppo grandi per adattarsi a qualsiasi delle altre regioni vuote E1, E2, … è previsto di valutare se un attuale livello di frammentazione della memoria è sufficientemente basso, e di interrompere l’esecuzione, o di saltare tramite la procedura di salto del blocco grande 200 detti blocchi troppo grandi da adattare ed eseguire una nuova iterazione.
Una o più forme di realizzazione possono comprendere l’esecuzione di una procedura di deframmentazione di scambio finale sull’area di partizione più grande Eb, in particolare lo scambio di tutte le regioni allocate iniziando dalla seconda regione allocata in corrispondenza del limite inferiore dell’area di partizione più grande Eb, con la loro regione vuota superiore.
Una carta a circuito integrato ad es. una UICC o eUICC secondo una o più forme di realizzazione può comprendere:
- uno spazio di memoria PH comprendente regioni di spazio di memoria per memorizzare dati,
- uno o più processori 102 configurati per operare un partizione di detto spazio di memoria PH in segmenti A1, A2, …, E1, E2,…. di regioni di spazio di memoria comprendenti regioni vuote A1, A2, … e regioni allocate E2, E2,….,
- selezionare 110 fra dette regioni vuote E1, E2, … la regione vuota più grande Eb di detto spazio di memoria PH;
- ampliare detta regione vuota più grande selezionata Eb spostando i blocchi di memoria posizionati nelle regioni allocate Au, Ad in corrispondenza dei limiti di detta regione vuota più grande selezionata Eb in altre regioni vuote disponibili Es.
In una o più forme di realizzazione per l’utilizzo secondo un profilo memorizzato in una carta a circuito integrato 108 possono comprendere una carta a circuito integrato 108 secondo una o più forme di realizzazione.
Una o più forme di realizzazione possono comprendere un sistema operativo configurato per gestire la carta a circuito integrato 108 con il procedimento secondo una o più forme di realizzazione.
Un’apparecchiatura secondo una o più forme di realizzazione può comprendere un’apparecchiatura di comunicazioni mobili quale un’apparecchiatura utente.
Senza pregiudizio per i principi sottostanti, i dettagli e le forme di realizzazione possono variare anche notevolmente, rispetto a quanto descritto in precedenza solo a titolo di esempio, senza discostarsi dall'ambito di protezione.
L’ambito di protezione è definito dalle rivendicazioni annesse.

Claims (10)

  1. RIVENDICAZIONI 1. Procedimento comprendente: - fornire una carta a circuito integrato (10) con uno spazio di memoria (PH) comprendente regioni di spazio di memoria per memorizzare dati del profilo utente, - operare una partizione di detto spazio di memoria (PH) in segmenti (A1, A2, …, E1, E2,….) di regioni di spazio di memoria comprendenti regioni allocate ((A1, A2, …) e regioni vuote (E2, E2,….), detto procedimento comprendendo - selezionare (110) fra dette regioni vuote (E1, E2, …) la regione vuota più grande (Eb) di detto spazio di memoria (PH); - ampliare detta regione vuota più grande selezionata (Eb) spostando i blocchi di memoria (B) posizionati nelle regioni allocate (Au, Ad) in corrispondenza dei limiti di detta regione vuota più grande selezionata (Eb) in altre regioni vuote disponibili (Es).
  2. 2. Procedimento secondo la rivendicazione 1, in cui detta operazione di ampliamento di detta regione vuota più grande selezionata (Eb) comprende eseguire una o più iterazioni di una procedura di deframmentazione (100), ad ogni iterazione - selezionare inizialmente (130) una partizione vuota più piccola attuale (Es) in dette regioni vuote ((E1, E2, …) in detto spazio di memoria (PH); - selezionare (150) un insieme di blocchi da spostare nella regione vuota più piccola attuale (Es) da una regione allocata superiore (Au) allocata in corrispondenza del limite superiore di detta regione vuota più grande (Eb) o da una regione allocata inferiore (Ad) allocata in corrispondenza del limite superiore di detta regione vuota più grande (Eb), detta selezione (150) che dipende dalla valutazione di quale fra dette due regioni allocate (Au, Ad) comprende un rispettivo insieme (Su, Sd) di blocchi adiacenti (B) aventi una dimensione (Su.size, Sd.size) più vicina alla dimensione di detta regione vuota più piccola (Es).
  3. 3. Procedimento secondo la rivendicazione 1 o rivendicazione 2 in cui nel caso in cui dette regioni allocate superiori ed inferiori (Au, Ad) comprendono insiemi (Su, Sd) di blocchi adiacenti (B) che sono entrambi troppo grandi per adattarsi alla regione vuota più piccola attuale (Es), una regione vuota più grande (Ej) rispetto a detta regione vuota più piccola attuale (Es), in particolare la regione più grande successiva (Ej), è selezionata come la regione vuota più piccola attuale (Es).
  4. 4. Procedimento secondo una qualsiasi delle rivendicazioni precedenti, in cui se le regioni allocate in corrispondenza dei limiti della regione vuota più grande (Eb) comprendono blocchi (B) adiacenti a detti limiti troppo grandi per adattarsi a qualsiasi delle altre regioni vuote (E1, E2, …) è previsto di valutare se un attuale livello di frammentazione della memoria è sufficientemente basso, e di interrompere l’esecuzione, o di saltare (200) detti blocchi (B) troppo grandi da adattare ed eseguire una nuova iterazione.
  5. 5. Procedimento secondo una qualsiasi delle rivendicazioni precedenti, comprendente eseguire una procedura finale di deframmentazione di scambio sull’area di partizione più grande (Eb), in particolare scambiare tutte le regioni allocate iniziando dalla seconda regione allocata in corrispondenza del limite inferiore dell’area di partizione più grande Eb, con la loro regione vuota superiore.
  6. 6. Procedimento secondo qualsiasi delle rivendicazioni precedenti, in cui detti dati del profilo utente comprendono applicazioni, domini di sicurezza e file, in particolare forniti da un operatore di rete mobile a cui si sottoscrive un terminale mobile associato alla carta (10).
  7. 7. Una carta a circuito integrato comprendente: - uno spazio di memoria (PH) comprendente regioni di spazio di memoria per memorizzare dati (A, E), - uno o più processori 102 configurati per operare una partizione di detto spazio di memoria (PH) in segmenti (A1, A2, …, E1, E2,….) di regioni di spazio di memoria comprendenti regioni vuote ((A1, A2, …) e regioni allocate (E2, E2,….), - selezionare (110) fra dette regioni vuote (E1, E2, …) la regione vuota più grande (Eb) di detto spazio di memoria (PH); - ampliare detta regione vuota più grande selezionata (Eb) spostando blocchi di memoria (B) posizionati nelle regioni allocate (Au, Ad) in corrispondenza dei limiti di detta regione vuota più grande selezionata (Eb) in altre regioni vuote disponibili (Es).
  8. 8. Apparecchiatura (10) per l’utilizzo secondo un profilo memorizzato in una carta a circuito integrato (108), l’apparecchiatura comprendendo una carta a circuito integrato (108) secondo la rivendicazione 7.
  9. 9. Apparecchiatura (10) secondo la rivendicazione 9, comprendente un sistema operativo configurato per gestire la carta a circuito integrato (108) con il procedimento secondo una delle rivendicazioni 1 a 8.
  10. 10. Apparecchiatura secondo la rivendicazione 8 o rivendicazione 9, l’apparecchiatura comprendendo un’apparecchiatura di comunicazioni mobili (10).
IT201800002644A 2018-02-13 2018-02-13 Procedimento per gestire carte a circuito integrato, corrispondente carta e apparecchiatura IT201800002644A1 (it)

Priority Applications (4)

Application Number Priority Date Filing Date Title
IT201800002644A IT201800002644A1 (it) 2018-02-13 2018-02-13 Procedimento per gestire carte a circuito integrato, corrispondente carta e apparecchiatura
US16/248,538 US11481133B2 (en) 2018-02-13 2019-01-15 Method of managing integrated circuits cards by widening the biggest empty region, corresponding card and apparatus
EP19154441.0A EP3525500B1 (en) 2018-02-13 2019-01-30 Method for reducing non-volatile memory fragmentation in integrated circuit cards, corresponding card and apparatus
US17/951,665 US20230019427A1 (en) 2018-02-13 2022-09-23 Method for reducing non-volatile memory fragmentation in integrated circuit cards, corresponding card and apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
IT201800002644A IT201800002644A1 (it) 2018-02-13 2018-02-13 Procedimento per gestire carte a circuito integrato, corrispondente carta e apparecchiatura

Publications (1)

Publication Number Publication Date
IT201800002644A1 true IT201800002644A1 (it) 2019-08-13

Family

ID=62044905

Family Applications (1)

Application Number Title Priority Date Filing Date
IT201800002644A IT201800002644A1 (it) 2018-02-13 2018-02-13 Procedimento per gestire carte a circuito integrato, corrispondente carta e apparecchiatura

Country Status (3)

Country Link
US (2) US11481133B2 (it)
EP (1) EP3525500B1 (it)
IT (1) IT201800002644A1 (it)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1046996A1 (en) * 1999-03-23 2000-10-25 International Business Machines Corporation Memory defragmentation in chipcards
EP2275915A1 (en) * 2009-06-30 2011-01-19 Incard SA Method to defrag a memory of an IC Card
EP2804368A1 (en) * 2012-01-10 2014-11-19 Kyocera Document Solutions Inc. Image processing apparatus and image forming apparatus
US20150186279A1 (en) * 2014-01-02 2015-07-02 Qualcomm Incorporated System and method to defragment a memory

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5604902A (en) * 1995-02-16 1997-02-18 Hewlett-Packard Company Hole plugging garbage collection for a data storage system
US7962707B2 (en) * 2005-07-06 2011-06-14 Honeywell International Inc. Apparatus and method for deterministic garbage collection of a heap memory

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1046996A1 (en) * 1999-03-23 2000-10-25 International Business Machines Corporation Memory defragmentation in chipcards
EP2275915A1 (en) * 2009-06-30 2011-01-19 Incard SA Method to defrag a memory of an IC Card
EP2804368A1 (en) * 2012-01-10 2014-11-19 Kyocera Document Solutions Inc. Image processing apparatus and image forming apparatus
US20150186279A1 (en) * 2014-01-02 2015-07-02 Qualcomm Incorporated System and method to defragment a memory

Also Published As

Publication number Publication date
EP3525500A1 (en) 2019-08-14
US20230019427A1 (en) 2023-01-19
US20190250842A1 (en) 2019-08-15
US11481133B2 (en) 2022-10-25
EP3525500B1 (en) 2023-07-19

Similar Documents

Publication Publication Date Title
US6865659B2 (en) Using short references to access program elements in a large address space
KR101994021B1 (ko) 파일 조작 방법 및 장치
KR102013430B1 (ko) 어레이 컨트롤러, 솔리드 스테이트 디스크, 및 데이터를 기록하기 위해 솔리드 스테이트 디스크를 제어하는 방법
JP6385468B2 (ja) ファイルアクセス方法及び関係するデバイス
KR20150095781A (ko) 메모리 리클레임 방법 및 장치
CN105335181A (zh) 一种实现ota升级的方法和终端
CN101840332B (zh) 一种java智能卡的数据处理方法、装置及系统
WO2015196621A1 (zh) 一种文件打包方法及装置
CN103714013A (zh) 一种文件系统的存储空间的配置方法及装置
CN103716346A (zh) 一种安卓手机客户端上应用的管理方法和装置
CN109558091B (zh) 查找表存储方法、装置及计算机可读存储介质
CN105718319B (zh) 一种内存池版图解析方法和内存池装置
JP2016533588A (ja) 記憶処理方法、装置及び端末
CN107391181A (zh) 一种系统分区的方法及装置
CN110058904A (zh) 数据转移方法、装置及服务器
CN106126595A (zh) 一种文件下载方法及装置
CN112965661A (zh) 数据存储方法、装置、设备及存储介质
IT201800002644A1 (it) Procedimento per gestire carte a circuito integrato, corrispondente carta e apparecchiatura
US9608930B1 (en) Allocating identifiers with minimal fragmentation
CN112199042A (zh) 存储空间管理方法、装置、芯片、设备及存储介质
IT201800004293A1 (it) Procedimento di gestione di sistemi operativi multipli in carte a circuito integrato, corrispondente sistema e prodotto informatico
US20210149588A1 (en) Information processing method, apparatus, device, and system
CN104866292A (zh) 一种扩展软件功能的方法及装置
EP3407633B1 (en) A method of managing integrated circuit cards, corresponding card and apparatus
EP3690660B1 (en) Cache address mapping method and related device