మెమరీ హార్డ్వేర్ ఆర్కిటెక్చర్
ఆధునిక మెమరీ హార్డ్వేర్ ఆర్కిటెక్చర్ జావా అంతర్గత మెమరీ మోడల్కు భిన్నంగా ఉంటుంది. అందువల్ల, జావా మోడల్ దానితో ఎలా పనిచేస్తుందో తెలుసుకోవడానికి మీరు హార్డ్వేర్ ఆర్కిటెక్చర్ను అర్థం చేసుకోవాలి. ఈ విభాగం సాధారణ మెమరీ హార్డ్వేర్ నిర్మాణాన్ని వివరిస్తుంది మరియు తదుపరి విభాగం జావా దానితో ఎలా పనిచేస్తుందో వివరిస్తుంది.
ఆధునిక కంప్యూటర్ యొక్క హార్డ్వేర్ ఆర్కిటెక్చర్ యొక్క సరళీకృత రేఖాచిత్రం ఇక్కడ ఉంది:
ఆధునిక ప్రపంచంలో, కంప్యూటర్లో 2 లేదా అంతకంటే ఎక్కువ ప్రాసెసర్లు ఉన్నాయి మరియు ఇది ఇప్పటికే ప్రమాణం. ఈ ప్రాసెసర్లలో కొన్ని బహుళ కోర్లను కూడా కలిగి ఉండవచ్చు. అటువంటి కంప్యూటర్లలో, ఒకే సమయంలో బహుళ థ్రెడ్లను అమలు చేయడం సాధ్యపడుతుంది. ప్రతి ప్రాసెసర్ కోర్ ఏ సమయంలోనైనా ఒక థ్రెడ్ని అమలు చేయగలదు. దీనర్థం ఏదైనా జావా అప్లికేషన్ ప్రియోరి మల్టీ-థ్రెడ్ అని మరియు మీ ప్రోగ్రామ్లో, ఒక్కో ప్రాసెసర్ కోర్కి ఒక థ్రెడ్ ఒకేసారి రన్ అవుతూ ఉంటుంది.
ప్రాసెసర్ కోర్ దాని మెమరీలో (కోర్ లోపల) నివసించే రిజిస్టర్ల సమితిని కలిగి ఉంటుంది. ఇది కంప్యూటర్ మెయిన్ మెమరీ (RAM)లో ఉండే డేటా కంటే చాలా వేగంగా రిజిస్టర్ డేటాపై కార్యకలాపాలను నిర్వహిస్తుంది. ఎందుకంటే ప్రాసెసర్ ఈ రిజిస్టర్లను చాలా వేగంగా యాక్సెస్ చేయగలదు.
ప్రతి CPU దాని స్వంత కాష్ పొరను కూడా కలిగి ఉంటుంది. చాలా ఆధునిక ప్రాసెసర్లు దీనిని కలిగి ఉన్నాయి. ప్రాసెసర్ దాని కాష్ని ప్రధాన మెమరీ కంటే చాలా వేగంగా యాక్సెస్ చేయగలదు, కానీ దాని అంతర్గత రిజిస్టర్ల వలె వేగంగా ఉండదు. కాష్ యాక్సెస్ వేగం యొక్క విలువ ప్రధాన మెమరీ మరియు అంతర్గత రిజిస్టర్ల యాక్సెస్ వేగం మధ్య ఉంటుంది.
అంతేకాకుండా, ప్రాసెసర్లు బహుళ-స్థాయి కాష్ను కలిగి ఉండే స్థలాన్ని కలిగి ఉంటాయి. కానీ జావా మెమరీ మోడల్ హార్డ్వేర్ మెమరీతో ఎలా సంకర్షణ చెందుతుందో అర్థం చేసుకోవడానికి ఇది చాలా ముఖ్యమైనది కాదు. ప్రాసెసర్లు కొంత స్థాయి కాష్ని కలిగి ఉండవచ్చని తెలుసుకోవడం ముఖ్యం.
ఏదైనా కంప్యూటర్ కూడా అదే విధంగా RAM (మెయిన్ మెమరీ ప్రాంతం) కలిగి ఉంటుంది. అన్ని కోర్లు ప్రధాన మెమరీని యాక్సెస్ చేయగలవు. ప్రధాన మెమరీ ప్రాంతం సాధారణంగా ప్రాసెసర్ కోర్ల కాష్ మెమరీ కంటే చాలా పెద్దది.
ప్రాసెసర్కు ప్రధాన మెమరీకి ప్రాప్యత అవసరమైనప్పుడు, అది దానిలోని కొంత భాగాన్ని దాని కాష్ మెమరీలోకి చదువుతుంది. ఇది కాష్ నుండి కొంత డేటాను దాని అంతర్గత రిజిస్టర్లలోకి చదివి, ఆపై వాటిపై కార్యకలాపాలను నిర్వహించగలదు. CPU ఫలితాన్ని తిరిగి ప్రధాన మెమరీకి వ్రాయవలసి వచ్చినప్పుడు, అది డేటాను దాని అంతర్గత రిజిస్టర్ నుండి కాష్కి మరియు ఒక సమయంలో ప్రధాన మెమరీకి ఫ్లష్ చేస్తుంది.
కాష్లో నిల్వ చేయబడిన డేటా సాధారణంగా ప్రాసెసర్ కాష్లో ఏదైనా నిల్వ చేయవలసి వచ్చినప్పుడు ప్రధాన మెమరీకి తిరిగి ఫ్లష్ చేయబడుతుంది. కాష్ దాని మెమరీని క్లియర్ చేయగల సామర్థ్యాన్ని కలిగి ఉంటుంది మరియు అదే సమయంలో డేటాను వ్రాయగలదు. అప్డేట్ సమయంలో ప్రతిసారీ ప్రాసెసర్ పూర్తి కాష్ని చదవడం లేదా వ్రాయడం అవసరం లేదు. సాధారణంగా కాష్ మెమరీ యొక్క చిన్న బ్లాక్లలో నవీకరించబడుతుంది, వాటిని "కాష్ లైన్" అని పిలుస్తారు. ఒకటి లేదా అంతకంటే ఎక్కువ "కాష్ లైన్లు" కాష్ మెమరీలో చదవబడవచ్చు మరియు ఒకటి లేదా అంతకంటే ఎక్కువ కాష్ లైన్లు తిరిగి ప్రధాన మెమరీకి ఫ్లష్ చేయబడవచ్చు.
జావా మెమరీ మోడల్ మరియు మెమరీ హార్డ్వేర్ ఆర్కిటెక్చర్ కలపడం
ఇప్పటికే చెప్పినట్లుగా, జావా మెమరీ మోడల్ మరియు మెమరీ హార్డ్వేర్ ఆర్కిటెక్చర్ భిన్నంగా ఉంటాయి. హార్డ్వేర్ ఆర్కిటెక్చర్ థ్రెడ్ స్టాక్లు మరియు కుప్పల మధ్య తేడాను గుర్తించదు. హార్డ్వేర్లో, థ్రెడ్ స్టాక్ మరియు HEAP (కుప్ప) ప్రధాన మెమరీలో ఉంటాయి.
స్టాక్లు మరియు థ్రెడ్ హీప్ల భాగాలు కొన్నిసార్లు CPU యొక్క కాష్లు మరియు అంతర్గత రిజిస్టర్లలో ఉండవచ్చు. ఇది రేఖాచిత్రంలో చూపబడింది:
వస్తువులు మరియు వేరియబుల్స్ కంప్యూటర్ మెమరీలోని వివిధ ప్రాంతాలలో నిల్వ చేయబడితే, కొన్ని సమస్యలు తలెత్తుతాయి. ఇక్కడ రెండు ప్రధానమైనవి:
- షేర్డ్ వేరియబుల్స్కు థ్రెడ్ చేసిన మార్పుల దృశ్యమానత.
- భాగస్వామ్య వేరియబుల్స్ చదవడం, తనిఖీ చేయడం మరియు వ్రాసేటప్పుడు జాతి పరిస్థితి.
ఈ రెండు సమస్యలు క్రింద వివరించబడతాయి.
భాగస్వామ్య వస్తువుల దృశ్యమానత
అస్థిర ప్రకటన లేదా సమకాలీకరణను సరిగ్గా ఉపయోగించకుండా రెండు లేదా అంతకంటే ఎక్కువ థ్రెడ్లు ఒక వస్తువును పంచుకుంటే, ఒక థ్రెడ్ ద్వారా చేసిన షేర్డ్ ఆబ్జెక్ట్లో మార్పులు ఇతర థ్రెడ్లకు కనిపించకపోవచ్చు.
భాగస్వామ్య వస్తువు మొదట ప్రధాన మెమరీలో నిల్వ చేయబడిందని ఊహించండి. CPUలో నడుస్తున్న థ్రెడ్ షేర్డ్ ఆబ్జెక్ట్ను అదే CPU యొక్క కాష్లోకి రీడ్ చేస్తుంది. అక్కడ వస్తువులో మార్పులు చేస్తాడు. CPU యొక్క కాష్ ప్రధాన మెమరీకి ఫ్లష్ చేయబడే వరకు, ఇతర CPUలలో అమలవుతున్న థ్రెడ్లకు భాగస్వామ్య వస్తువు యొక్క సవరించిన సంస్కరణ కనిపించదు. ఈ విధంగా, ప్రతి థ్రెడ్ భాగస్వామ్య వస్తువు యొక్క దాని స్వంత కాపీని పొందవచ్చు, ప్రతి కాపీ ప్రత్యేక CPU కాష్లో ఉంటుంది.
కింది రేఖాచిత్రం ఈ పరిస్థితి యొక్క రూపురేఖలను వివరిస్తుంది. ఎడమవైపు CPUలో నడుస్తున్న ఒక థ్రెడ్ షేర్డ్ ఆబ్జెక్ట్ని దాని కాష్లోకి కాపీ చేస్తుంది మరియు కౌంట్ విలువను 2కి మారుస్తుంది. ఈ మార్పు కుడి CPUలో నడుస్తున్న ఇతర థ్రెడ్లకు కనిపించదు ఎందుకంటే కౌంట్ చేయాల్సిన అప్డేట్ ఇంకా మెయిన్ మెమరీకి తిరిగి ఫ్లష్ చేయబడలేదు.
ఈ సమస్యను పరిష్కరించడానికి, మీరు వేరియబుల్ను ప్రకటించేటప్పుడు అస్థిర కీవర్డ్ని ఉపయోగించవచ్చు. ఇచ్చిన వేరియబుల్ మెయిన్ మెమొరీ నుండి నేరుగా రీడ్ చేయబడిందని మరియు అప్డేట్ చేయబడినప్పుడు ఎల్లప్పుడూ మెయిన్ మెమరీకి తిరిగి వ్రాయబడుతుందని ఇది నిర్ధారిస్తుంది.
జాతి పరిస్థితి
రెండు లేదా అంతకంటే ఎక్కువ థ్రెడ్లు ఒకే ఆబ్జెక్ట్ను షేర్ చేస్తే మరియు ఆ భాగస్వామ్య వస్తువులో ఒకటి కంటే ఎక్కువ థ్రెడ్ వేరియబుల్స్ అప్డేట్ చేస్తే, అప్పుడు రేస్ పరిస్థితి ఏర్పడవచ్చు.
థ్రెడ్ A దాని ప్రాసెసర్ యొక్క కాష్లో షేర్డ్ ఆబ్జెక్ట్ యొక్క కౌంట్ వేరియబుల్ను రీడ్ చేస్తుందని ఊహించండి. థ్రెడ్ B అదే పని చేస్తుందని ఊహించుకోండి, కానీ మరొక ప్రాసెసర్ యొక్క కాష్లో. ఇప్పుడు థ్రెడ్ A గణన విలువకు 1ని జోడిస్తుంది మరియు థ్రెడ్ B కూడా అదే చేస్తుంది. ఇప్పుడు వేరియబుల్ రెండుసార్లు పెంచబడింది - ప్రతి ప్రాసెసర్ యొక్క కాష్లో విడిగా +1.
ఈ ఇంక్రిమెంట్లను వరుసగా నిర్వహిస్తే, కౌంట్ వేరియబుల్ రెట్టింపు అవుతుంది మరియు ప్రధాన మెమరీకి తిరిగి వ్రాయబడుతుంది (అసలు విలువ + 2).
అయినప్పటికీ, సరైన సమకాలీకరణ లేకుండా ఒకే సమయంలో రెండు ఇంక్రిమెంట్లు జరిగాయి. ఏ థ్రెడ్ (A లేదా B) దాని అప్డేట్ చేసిన కౌంట్ వెర్షన్ను మెయిన్ మెమరీకి వ్రాసినా, రెండు ఇంక్రిమెంట్లు ఉన్నప్పటికీ, కొత్త విలువ అసలు విలువ కంటే 1 మాత్రమే ఎక్కువగా ఉంటుంది.
ఈ రేఖాచిత్రం పైన వివరించిన జాతి పరిస్థితి సమస్య సంభవించడాన్ని వివరిస్తుంది:
ఈ సమస్యను పరిష్కరించడానికి, మీరు జావా సింక్రొనైజ్డ్ బ్లాక్ని ఉపయోగించవచ్చు. సమకాలీకరించబడిన బ్లాక్ ఏ సమయంలోనైనా ఒక థ్రెడ్ మాత్రమే ఇచ్చిన క్లిష్టమైన కోడ్ విభాగంలో నమోదు చేయగలదని నిర్ధారిస్తుంది.
సమకాలీకరించబడిన బ్లాక్లు సమకాలీకరించబడిన బ్లాక్ లోపల యాక్సెస్ చేయబడిన అన్ని వేరియబుల్స్ మెయిన్ మెమరీ నుండి చదవబడతాయని హామీ ఇస్తాయి మరియు థ్రెడ్ సమకాలీకరించబడిన బ్లాక్ నుండి నిష్క్రమించినప్పుడు, వేరియబుల్ అస్థిరంగా లేదా సంఖ్యగా ప్రకటించబడిందా అనే దానితో సంబంధం లేకుండా అన్ని నవీకరించబడిన వేరియబుల్స్ తిరిగి ప్రధాన మెమరీకి ఫ్లష్ చేయబడతాయి.
GO TO FULL VERSION