కంప్యూటర్ సిస్టమ్ సిమ్యులేటర్ల గురించిన కథనం యొక్క రెండవ భాగంలో, నేను కంప్యూటర్ సిమ్యులేటర్ల గురించి సాధారణ పరిచయ రూపంలో మాట్లాడటం కొనసాగిస్తాను, అవి పూర్తి-ప్లాట్ఫారమ్ అనుకరణ గురించి, సగటు వినియోగదారు తరచుగా ఎదుర్కొనే, అలాగే క్లాక్-బై గురించి -గడియార నమూనా మరియు జాడలు, ఇవి డెవలపర్ సర్కిల్లలో సర్వసాధారణం.
В
పూర్తి ప్లాట్ఫారమ్ సిమ్యులేటర్, లేదా "ఒంటరిగా ఫీల్డ్ ఒక యోధుడు కాదు"
మీరు ఒక నిర్దిష్ట పరికరం యొక్క ఆపరేషన్ను అధ్యయనం చేయాలనుకుంటే, ఉదాహరణకు, నెట్వర్క్ కార్డ్, లేదా ఈ పరికరం కోసం ఫర్మ్వేర్ లేదా డ్రైవర్ను వ్రాయండి, అటువంటి పరికరాన్ని విడిగా అనుకరించవచ్చు. అయినప్పటికీ, మిగిలిన అవస్థాపన నుండి ఒంటరిగా ఉపయోగించడం చాలా సౌకర్యవంతంగా లేదు. సంబంధిత డ్రైవర్ను అమలు చేయడానికి, మీకు సెంట్రల్ ప్రాసెసర్, మెమరీ, డేటా బస్కు యాక్సెస్ మొదలైనవి అవసరం. అదనంగా, డ్రైవర్కు పనిచేయడానికి ఆపరేటింగ్ సిస్టమ్ (OS) మరియు నెట్వర్క్ స్టాక్ అవసరం. అదనంగా, ప్రత్యేక ప్యాకెట్ జనరేటర్ మరియు ప్రతిస్పందన సర్వర్ అవసరం కావచ్చు.
పూర్తి-ప్లాట్ఫారమ్ సిమ్యులేటర్ పూర్తి సాఫ్ట్వేర్ స్టాక్ను అమలు చేయడానికి వాతావరణాన్ని సృష్టిస్తుంది, ఇందులో BIOS మరియు బూట్లోడర్ నుండి OS వరకు మరియు అదే నెట్వర్క్ స్టాక్, డ్రైవర్లు మరియు వినియోగదారు-స్థాయి అప్లికేషన్ల వంటి వివిధ సబ్సిస్టమ్లు ఉంటాయి. దీన్ని చేయడానికి, ఇది చాలా కంప్యూటర్ పరికరాల సాఫ్ట్వేర్ నమూనాలను అమలు చేస్తుంది: ప్రాసెసర్ మరియు మెమరీ, డిస్క్, ఇన్పుట్/అవుట్పుట్ పరికరాలు (కీబోర్డ్, మౌస్, డిస్ప్లే), అలాగే అదే నెట్వర్క్ కార్డ్.
ఇంటెల్ నుండి x58 చిప్సెట్ యొక్క బ్లాక్ రేఖాచిత్రం క్రింద ఉంది. ఈ చిప్సెట్లోని పూర్తి-ప్లాట్ఫారమ్ కంప్యూటర్ సిమ్యులేటర్కు IOH (ఇన్పుట్/అవుట్పుట్ హబ్) మరియు ICH (ఇన్పుట్/అవుట్పుట్ కంట్రోలర్ హబ్) లోపల ఉన్న వాటితో సహా జాబితా చేయబడిన చాలా పరికరాలను అమలు చేయడం అవసరం, ఇవి బ్లాక్ రేఖాచిత్రంలో వివరంగా వర్ణించబడలేదు. . అయినప్పటికీ, ఆచరణలో చూపినట్లుగా, మేము అమలు చేయబోయే సాఫ్ట్వేర్ ఉపయోగించని అనేక పరికరాలు లేవు. అటువంటి పరికరాల నమూనాలు సృష్టించాల్సిన అవసరం లేదు.
చాలా తరచుగా, పూర్తి-ప్లాట్ఫారమ్ అనుకరణ యంత్రాలు ప్రాసెసర్ సూచన స్థాయిలో అమలు చేయబడతాయి (ISA, క్రింద చూడండి).
సిమ్యులేటర్ పనితీరు
పైన పేర్కొన్నట్లుగా, మొత్తం వ్యవస్థను అనుకరించే ప్రక్రియ, అంటే, దాని అన్ని పరికరాలను, నెమ్మదిగా పని చేస్తుంది. మీరు ఇవన్నీ చాలా వివరణాత్మక స్థాయిలో అమలు చేస్తే, ఉదాహరణకు, మైక్రోఆర్కిటెక్చరల్ లేదా లాజికల్, అప్పుడు అమలు చాలా నెమ్మదిగా ఉంటుంది. కానీ సూచన స్థాయి సరైన ఎంపిక మరియు OS మరియు ప్రోగ్రామ్లను వినియోగదారు వారితో సౌకర్యవంతంగా పరస్పరం వ్యవహరించడానికి తగినంత వేగంతో అమలు చేయడానికి అనుమతిస్తుంది.
ఇక్కడ సిమ్యులేటర్ పనితీరు అనే అంశంపై తాకడం సముచితంగా ఉంటుంది. ఇది సాధారణంగా IPS (సెకనుకు సూచనలు), మరింత ఖచ్చితంగా MIPS (మిలియన్ల IPS)లో కొలుస్తారు, అంటే, ఒక సెకనులో సిమ్యులేటర్ ద్వారా అమలు చేయబడిన ప్రాసెసర్ సూచనల సంఖ్య. అదే సమయంలో, అనుకరణ వేగం కూడా అనుకరణ నడిచే సిస్టమ్ పనితీరుపై ఆధారపడి ఉంటుంది. అందువల్ల, అసలు సిస్టమ్తో పోలిస్తే సిమ్యులేటర్ యొక్క "స్లోడౌన్" గురించి మాట్లాడటం మరింత సరైనది కావచ్చు.
QEMU, VirtualBox లేదా VmWare వర్క్స్టేషన్ వంటి మార్కెట్లోని అత్యంత సాధారణ పూర్తి-ప్లాట్ఫారమ్ సిమ్యులేటర్లు మంచి పనితీరును కలిగి ఉన్నాయి. సిమ్యులేటర్లో పని జరుగుతోందని వినియోగదారుకు కూడా గమనించకపోవచ్చు. ప్రాసెసర్లు, బైనరీ ట్రాన్స్లేషన్ అల్గోరిథంలు మరియు ఇతర ఆసక్తికరమైన విషయాలలో అమలు చేయబడిన ప్రత్యేక వర్చువలైజేషన్ సామర్థ్యాల కారణంగా ఇది జరుగుతుంది. ఇదంతా ఒక ప్రత్యేక కథనం కోసం ఒక అంశం, కానీ సంక్షిప్తంగా, వర్చువలైజేషన్ అనేది ఆధునిక ప్రాసెసర్ల యొక్క హార్డ్వేర్ లక్షణం, ఇది సిమ్యులేటర్లను సూచనలను అనుకరించకుండా అనుమతిస్తుంది, అయితే వాటిని నేరుగా నిజమైన ప్రాసెసర్కి అమలు చేయడానికి పంపుతుంది, అయితే, ఆర్కిటెక్చర్లు సిమ్యులేటర్ మరియు ప్రాసెసర్ ఒకేలా ఉంటాయి. బైనరీ అనువాదం అనేది అతిథి యంత్రం కోడ్ను హోస్ట్ కోడ్లోకి అనువదించడం మరియు నిజమైన ప్రాసెసర్లో తదుపరి అమలు. ఫలితంగా, అనుకరణ కొద్దిగా నెమ్మదిగా, 5-10 సార్లు మాత్రమే ఉంటుంది మరియు తరచుగా నిజమైన సిస్టమ్ వలె అదే వేగంతో నడుస్తుంది. ఇది అనేక కారకాలచే ప్రభావితమైనప్పటికీ. ఉదాహరణకు, మేము అనేక డజన్ల ప్రాసెసర్లతో సిస్టమ్ను అనుకరించాలనుకుంటే, వేగం వెంటనే ఈ అనేక డజన్ల రెట్లు పడిపోతుంది. మరోవైపు, తాజా సంస్కరణల్లోని సిమిక్స్ వంటి సిమ్యులేటర్లు మల్టీప్రాసెసర్ హోస్ట్ హార్డ్వేర్కు మద్దతు ఇస్తాయి మరియు అనుకరణ కోర్లను నిజమైన ప్రాసెసర్ కోర్లకు సమర్ధవంతంగా సమాంతరంగా చేస్తాయి.
మేము మైక్రోఆర్కిటెక్చరల్ సిమ్యులేషన్ యొక్క వేగం గురించి మాట్లాడినట్లయితే, అది సాధారణంగా అనేక ఆర్డర్లు, సాధారణ కంప్యూటర్లో అమలు చేయడం కంటే 1000-10000 రెట్లు నెమ్మదిగా, అనుకరణ లేకుండా ఉంటుంది. మరియు తార్కిక మూలకాల స్థాయిలో అమలులు మాగ్నిట్యూడ్ యొక్క అనేక ఆర్డర్ల ద్వారా నెమ్మదిగా ఉంటాయి. అందువల్ల, FPGA ఈ స్థాయిలో ఎమ్యులేటర్గా ఉపయోగించబడుతుంది, ఇది పనితీరును గణనీయంగా పెంచుతుంది.
దిగువ గ్రాఫ్ మోడల్ వివరాలపై అనుకరణ వేగం యొక్క సుమారు ఆధారపడటాన్ని చూపుతుంది.
బీట్-బై-బీట్ అనుకరణ
వాటి అమలు వేగం తక్కువగా ఉన్నప్పటికీ, మైక్రోఆర్కిటెక్చరల్ సిమ్యులేటర్లు చాలా సాధారణం. ప్రతి సూచన యొక్క అమలు సమయాన్ని ఖచ్చితంగా అనుకరించడానికి ప్రాసెసర్ యొక్క అంతర్గత బ్లాక్ల అనుకరణ అవసరం. ఇక్కడ అపార్థం తలెత్తవచ్చు - అన్నింటికంటే, ప్రతి సూచన కోసం అమలు సమయాన్ని ఎందుకు ప్రోగ్రామ్ చేయకూడదని అనిపిస్తుంది. కానీ అలాంటి సిమ్యులేటర్ చాలా సరికాదు, ఎందుకంటే అదే సూచనల అమలు సమయం కాల్ నుండి కాల్కు భిన్నంగా ఉండవచ్చు.
సరళమైన ఉదాహరణ మెమరీ యాక్సెస్ సూచన. అభ్యర్థించిన మెమరీ స్థానం కాష్లో అందుబాటులో ఉంటే, అప్పుడు అమలు సమయం తక్కువగా ఉంటుంది. ఈ సమాచారం కాష్లో లేకుంటే ("కాష్ మిస్"), అప్పుడు ఇది సూచనల అమలు సమయాన్ని బాగా పెంచుతుంది. అందువల్ల, ఖచ్చితమైన అనుకరణ కోసం కాష్ మోడల్ అవసరం. అయితే, విషయం కాష్ మోడల్కే పరిమితం కాదు. ప్రాసెసర్ కాష్లో లేనప్పుడు మెమరీ నుండి డేటాను తిరిగి పొందడం కోసం వేచి ఉండదు. బదులుగా, ఇది తదుపరి సూచనలను అమలు చేయడం ప్రారంభిస్తుంది, మెమరీ నుండి చదివిన ఫలితంపై ఆధారపడని వాటిని ఎంచుకుంటుంది. ఇది ప్రాసెసర్ నిష్క్రియ సమయాన్ని తగ్గించడానికి అవసరమైన "అవుట్ ఆఫ్ ఆర్డర్" ఎగ్జిక్యూషన్ (OOO, అవుట్ ఆఫ్ ఆర్డర్ ఎగ్జిక్యూషన్) అని పిలవబడుతుంది. సంబంధిత ప్రాసెసర్ బ్లాక్లను మోడలింగ్ చేయడం సూచనల అమలు సమయాన్ని లెక్కించేటప్పుడు ఇవన్నీ పరిగణనలోకి తీసుకోవడానికి సహాయపడుతుంది. ఈ సూచనలలో, మెమరీ నుండి రీడింగ్ ఫలితం కోసం వేచి ఉన్నప్పుడు అమలు చేయబడినప్పుడు, షరతులతో కూడిన జంప్ ఆపరేషన్ సంభవించవచ్చు. పరిస్థితి యొక్క ఫలితం ప్రస్తుతానికి తెలియకపోతే, మళ్లీ ప్రాసెసర్ అమలును ఆపదు, కానీ "అంచనా" చేస్తుంది, తగిన శాఖను నిర్వహిస్తుంది మరియు పరివర్తన స్థానం నుండి సూచనలను ముందస్తుగా అమలు చేయడం కొనసాగిస్తుంది. బ్రాంచ్ ప్రిడిక్టర్ అని పిలువబడే అటువంటి బ్లాక్ మైక్రోఆర్కిటెక్చరల్ సిమ్యులేటర్లో కూడా అమలు చేయబడాలి.
క్రింద ఉన్న చిత్రం ప్రాసెసర్ యొక్క ప్రధాన బ్లాక్లను చూపుతుంది, దానిని తెలుసుకోవడం అవసరం లేదు, ఇది మైక్రోఆర్కిటెక్చరల్ అమలు యొక్క సంక్లిష్టతను చూపించడానికి మాత్రమే చూపబడుతుంది.
నిజమైన ప్రాసెసర్లో ఈ అన్ని బ్లాక్ల ఆపరేషన్ ప్రత్యేక క్లాక్ సిగ్నల్ల ద్వారా సమకాలీకరించబడుతుంది మరియు మోడల్లో కూడా అదే జరుగుతుంది. ఇటువంటి మైక్రోఆర్కిటెక్చరల్ సిమ్యులేటర్ను సైకిల్ కచ్చితత్వం అంటారు. దీని ముఖ్య ఉద్దేశ్యం డెవలప్ చేయబడే ప్రాసెసర్ పనితీరును ఖచ్చితంగా అంచనా వేయడం మరియు/లేదా నిర్దిష్ట ప్రోగ్రామ్ యొక్క ఎగ్జిక్యూషన్ సమయాన్ని లెక్కించడం, ఉదాహరణకు, ఒక బెంచ్మార్క్. విలువలు అవసరమైన దానికంటే తక్కువగా ఉంటే, అల్గోరిథంలు మరియు ప్రాసెసర్ బ్లాక్లను సవరించడం లేదా ప్రోగ్రామ్ను ఆప్టిమైజ్ చేయడం అవసరం.
పైన చూపినట్లుగా, క్లాక్-బై-క్లాక్ సిమ్యులేషన్ చాలా నెమ్మదిగా ఉంటుంది, కాబట్టి ఇది ప్రోగ్రామ్ యొక్క ఆపరేషన్ యొక్క నిర్దిష్ట క్షణాలను అధ్యయనం చేసేటప్పుడు మాత్రమే ఉపయోగించబడుతుంది, ఇక్కడ ప్రోగ్రామ్ అమలు యొక్క నిజమైన వేగాన్ని కనుగొనడం మరియు పరికరం యొక్క భవిష్యత్తు పనితీరును అంచనా వేయడం అవసరం. ప్రోటోటైప్ అనుకరించబడుతోంది.
ఈ సందర్భంలో, ప్రోగ్రామ్ యొక్క మిగిలిన రన్నింగ్ సమయాన్ని అనుకరించడానికి ఫంక్షనల్ సిమ్యులేటర్ ఉపయోగించబడుతుంది. ఈ ఉపయోగం యొక్క కలయిక వాస్తవానికి ఎలా జరుగుతుంది? మొదట, ఫంక్షనల్ సిమ్యులేటర్ ప్రారంభించబడింది, దానిపై OS మరియు అధ్యయనంలో ప్రోగ్రామ్ను అమలు చేయడానికి అవసరమైన ప్రతిదీ లోడ్ చేయబడుతుంది. అన్నింటికంటే, మేము OS పైనే లేదా ప్రోగ్రామ్ను ప్రారంభించే ప్రారంభ దశలలో, దాని కాన్ఫిగరేషన్ మొదలైన వాటిపై ఆసక్తి చూపలేదు. అయినప్పటికీ, మేము ఈ భాగాలను కూడా దాటవేయలేము మరియు వెంటనే మధ్య నుండి ప్రోగ్రామ్ను అమలు చేయడానికి ముందుకు వెళ్లలేము. అందువల్ల, ఈ ప్రాథమిక దశలన్నీ ఫంక్షనల్ సిమ్యులేటర్పై అమలు చేయబడతాయి. ప్రోగ్రామ్ మాకు ఆసక్తి ఉన్న క్షణం వరకు అమలు చేయబడిన తర్వాత, రెండు ఎంపికలు సాధ్యమే. మీరు మోడల్ను క్లాక్-బై-సైకిల్ మోడల్తో భర్తీ చేయవచ్చు మరియు అమలును కొనసాగించవచ్చు. ఎక్జిక్యూటబుల్ కోడ్ని ఉపయోగించే అనుకరణ మోడ్ను (అంటే, సాధారణ కంపైల్డ్ ప్రోగ్రామ్ ఫైల్లు) ఎగ్జిక్యూషన్ డ్రైవెన్ సిమ్యులేషన్ అంటారు. ఇది అత్యంత సాధారణ అనుకరణ ఎంపిక. మరొక విధానం కూడా సాధ్యమే - ట్రేస్ నడిచే అనుకరణ.
ట్రేస్-ఆధారిత అనుకరణ
ఇది రెండు దశలను కలిగి ఉంటుంది. ఫంక్షనల్ సిమ్యులేటర్ ఉపయోగించి లేదా నిజమైన సిస్టమ్లో, ప్రోగ్రామ్ చర్యల లాగ్ సేకరించబడుతుంది మరియు ఫైల్కి వ్రాయబడుతుంది. ఈ లాగ్ను ట్రేస్ అంటారు. పరిశీలించబడుతున్నదానిపై ఆధారపడి, ట్రేస్లో ఎక్జిక్యూటబుల్ సూచనలు, మెమరీ చిరునామాలు, పోర్ట్ నంబర్లు మరియు అంతరాయ సమాచారం ఉండవచ్చు.
క్లాక్-బై-క్లాక్ సిమ్యులేటర్ ట్రేస్ను చదివి, దానిలో వ్రాసిన అన్ని సూచనలను అమలు చేసినప్పుడు, ట్రేస్ను "ప్లే" చేయడం తదుపరి దశ. ముగింపులో, మేము ప్రోగ్రామ్ యొక్క ఈ భాగాన్ని అమలు చేసే సమయాన్ని, అలాగే ఈ ప్రక్రియ యొక్క వివిధ లక్షణాలను పొందుతాము, ఉదాహరణకు, కాష్లోని హిట్ల శాతం.
జాడలతో పని చేసే ముఖ్యమైన లక్షణం డిటర్మినిజం, అంటే, పైన వివరించిన పద్ధతిలో అనుకరణను అమలు చేయడం ద్వారా, మేము అదే చర్యల క్రమాన్ని మళ్లీ మళ్లీ పునరుత్పత్తి చేస్తాము. ఇది మోడల్ పారామితులను (కాష్, బఫర్ మరియు క్యూ పరిమాణాలు) మార్చడం ద్వారా మరియు విభిన్న అంతర్గత అల్గారిథమ్లను ఉపయోగించడం ద్వారా లేదా వాటిని ట్యూన్ చేయడం ద్వారా, నిర్దిష్ట పరామితి సిస్టమ్ పనితీరును ఎలా ప్రభావితం చేస్తుందో మరియు ఏ ఎంపిక ఉత్తమ ఫలితాలను ఇస్తుందో అధ్యయనం చేయడం సాధ్యపడుతుంది. అసలు హార్డ్వేర్ ప్రోటోటైప్ని సృష్టించే ముందు ఇవన్నీ ప్రోటోటైప్ పరికర నమూనాతో చేయవచ్చు.
ఈ విధానం యొక్క సంక్లిష్టత ఏమిటంటే, మొదట అప్లికేషన్ను అమలు చేయడం మరియు ట్రేస్ను సేకరించడం, అలాగే ట్రేస్ ఫైల్ యొక్క భారీ పరిమాణం. ప్రయోజనాలు ఏమిటంటే, పరికరం లేదా ఆసక్తి ఉన్న ప్లాట్ఫారమ్లోని భాగాన్ని మాత్రమే అనుకరించడం సరిపోతుంది, అయితే అమలు ద్వారా అనుకరణకు సాధారణంగా పూర్తి నమూనా అవసరం.
కాబట్టి, ఈ వ్యాసంలో మేము పూర్తి-ప్లాట్ఫారమ్ అనుకరణ యొక్క లక్షణాలను చూశాము, వివిధ స్థాయిలలో అమలుల వేగం, క్లాక్-బై-సైకిల్ అనుకరణ మరియు జాడల గురించి మాట్లాడాము. తదుపరి వ్యాసంలో నేను వ్యక్తిగత ప్రయోజనాల కోసం మరియు పెద్ద కంపెనీలలో అభివృద్ధి కోణం నుండి అనుకరణ యంత్రాలను ఉపయోగించడం కోసం ప్రధాన దృశ్యాలను వివరిస్తాను.
మూలం: www.habr.com