Salve a tutti,
sto lavorando al progetto membox (qui il kit con la descrizione) e vorrei confrontarmi con qualcuno sul sistema che è opportuno usare per la mutua esclusione della hashtable dove si memorizzano i file.
Per fare un breve riassunto, bisogna realizzare un server che con più thread accede contemporaneamente in una hash table inserendo/eliminando/modificando i suoi elementi. Per cui ovviamente l'accesso alla hash table deve essere in mutua esclusione; però in una lezione di laboratorio il Torquati disse esplicitamente che mettere solo un mutex per proteggere l'accesso a tutta la hash table non è una soluzione accettabile (= ti boccia), perché è troppo inefficiente (blocchi tutta la hashtable quando invece basterebbe bloccare solo l'elemento sui cui agisce quel thread, in modo da lasciare liberi gli altri di leggere/scrivere altrove). D'altra parte disse che non è accettabile nemmeno dichiarare un mutex per ogni elemento memorizzato nella hash table: in questo modo ci sarebbe il massimo del parallelismo, ma gli elementi possono essere anche migliaia e quindi supererebbero il numero massimo di mutex dichiarabili, con il rischio che la memoria del programma esploda. Insomma ci ha fatto capire che bisogna trovare una via di mezzo tra bloccare tutti gli elementi e bloccarne uno alla volta.
Io al momento ho ignorato il problema e provvisoriamente ho un mutex unico, ma molto presto dovrò metterci mano. Voi come avete risolto? Da quello che ho capito bisogna trovare un modo per decidere una specie di partizione degli elementi della tabella hash, e poi affidare ogni parte ad un mutex diverso. Ma in che modo di può essere sicuri di stabilire una partizione che non abbia sovrapposizioni?
Ad esempio può essere una accettabile l'idea di decidere un numero X e poi partizionare gli elementi in base al resto della divisione per X, cioè se elemento.chiave mod X = 0 fa parte del gruppo 0, se elemento.chiave mod X = 1 fa parte del gruppo 1, ecc, con un mutex per ogni gruppo) oppure c'è il rischio che ci siano comunque sovrapposizioni? Il punto è che l'implementazione della hash table è fornita dal prof e non so come lavori al suo interno.
[membox] Mutua esclusione efficiente per la hash table
Torna a “[SOL] Sistemi operativi e laboratorio”
Vai a
- Generale
- ↳ Discussioni
- ↳ Discussions (in english)
- ↳ I rappresentanti rispondono
- ↳ Parliamone
- ↳ Mercatino
- ↳ Tirocini
- ↳ Annunci
- ↳ Announcements (in english)
- ↳ Eventi
- I anno
- ↳ Algebra Lineare
- ↳ Analisi Matematica
- ↳ Fondamenti dell'Informatica
- ↳ Laboratorio I
- ↳ Programmazione e Algoritmica
- II anno
- ↳ Architetture e Sistemi Operativi
- ↳ Calcolo Numerico
- ↳ Calcolo Numerico - Vecchio Ordinamento
- ↳ Laboratorio II
- ↳ Paradigmi di Programmazione
- ↳ Ricerca Operativa
- ↳ Ricerca Operativa - Vecchio Ordinamento
- ↳ Statistica
- ↳ Statistica - Vecchio Ordinamento
- III anno
- ↳ Basi di Dati
- ↳ Basi di Dati - Vecchio Ordinamento
- ↳ Introduzione all'Intelligenza Artificiale
- ↳ Introduzione all'Intelligenza Artificiale - Vecchio Ordinamento
- ↳ Ingegneria del Software
- ↳ Ingegneria del Software - Vecchio Ordinamento
- ↳ Reti e Laboratorio III
- Complementari
- ↳ Algebra
- ↳ Cloud Computing
- ↳ Cloud e Green Computing
- ↳ Computer Grafica
- ↳ Crittografia
- ↳ Elementi di Calcolabilità e Complessità
- ↳ Elementi di Calcolabilità e Complessità - Vecchio Ordinamento
- ↳ Esperienze di programmazione
- ↳ Fisica
- ↳ Fisica - Vecchio Ordinamento
- ↳ Gestione di Reti
- ↳ Green Computing
- ↳ Interazione Uomo-Macchina
- ↳ Laboratorio di Basi di Dati
- ↳ Laboratorio di Web Scraping
- ↳ Sicurezza di Sistemi ICT
- ↳ Sviluppo di Applicazioni Mobili
- ↳ Sviluppo di Applicazioni Web
- ↳ Teoria dell'Informazione
- Vecchio Ordinamento
- ↳ I anno
- ↳ [ALL] Algoritmica e Laboratorio
- ↳ [AM] Analisi matematica
- ↳ [FIS] Fisica
- ↳ [LPP] Logica per la programmazione
- ↳ [MDAL] Matematica discreta e algebra lineare
- ↳ [PRL] Programmazione I e laboratorio
- ↳ II anno
- ↳ [AE] Architettura degli elaboratori
- ↳ [BD] Basi di dati
- ↳ [CPS] Calcolo delle probabilità e statistica
- ↳ [CN] Calcolo numerico
- ↳ [IS] Ingegneria del software
- ↳ [PR2] Programmazione II
- ↳ [RO] Ricerca Operativa
- ↳ [SOL] Sistemi operativi e laboratorio
- ↳ III anno
- ↳ [ECC] Elementi di calcolabili e complessità
- ↳ [PI] Programmazione di interfacce
- ↳ [IIA] Introduzione all'intelligenza artificiale
- ↳ [RCL] Reti di calcolatori e laboratorio
- ↳ Advanced databases
- ↳ Advanced programming
- ↳ Advanced software engineering
- ↳ Algorithm design
- ↳ Algorithm engineering
- ↳ Artificial intelligence fundamentals
- ↳ Bioinformatics
- ↳ Competitive programming and contests
- ↳ Computational mathematics for learning and data analysis
- ↳ Data mining
- ↳ Human language technologies
- ↳ ICT infrastructures
- ↳ ICT risk assessment
- ↳ Information Retrieval
- ↳ Intelligent Systems for pattern recognition
- ↳ Laboratory for innovative software
- ↳ Languages, compilers and interpreters
- ↳ Machine learning
- ↳ Mobile and cyber-physical systems
- ↳ Parallel and distributed systems: paradigms and models
- ↳ Peer to peer systems and blockchains
- ↳ Principles for software composition
- ↳ Smart applications
- ↳ Software validation and verification
- Links
- ↳ HomePage Dipartimento
- ↳ Portale Esami