Friday, August 30, 2013

5. కంప్యూటర్ పని చేసే విధానం


వేమూరి వేంకటేశ్వరరావు


కంప్యూటర్ సమాచారాన్ని బక్షించి, మర్దనా చేసి, రంగరించి, జీర్ణించికుని, కొత్త సమాచారాన్ని మనకి ఇస్తుందని చెప్పుకున్నాం. మచ్చుకి ఈ ప్రశ్నలు చూడండి: బయట ఎన్ని డిగ్రీలు వేడిగా ఉంది? కారు ఎంత జోరుగా పరిగెడుతోంది? ఫలానా వాడి వయస్సు ఎంత? సాధారణంగా ఈ రకం ప్రశ్నలకి నిర్దిష్టంగా సమాదానాలు చెప్పడం కుదరదు. వయస్సు ఎంత అంటే ఏ 26 అనో 33 అనో చెబుతాం. చిన్న పిల్లలని అడిగితే మూడున్నర ఏళ్లు అని చెప్పినా ఆశ్చర్యపోము. కాని నిజానికి మన వయస్సు క్షణక్షణానికీ పెరుగుతూ ఉంటుంది. కాని మనం సాధారణంగా “నా వయస్సు 33 ఏళ్ల, ఆరు నెలల, మూడు రోజుల, ఎనిమిది గంటల, మూడు నిమిషాల,…. అంటూ చెప్పం. వయస్సే కాదు. ఈ మధ్య మనవాళ్లు పేర్లని కూడ కత్తిరిస్తునారు. రంగనాధం కాస్తా క్లుప్తంగా “రేంగ్” అవుతాడు. రాయుడు ఫేషనబుల్‌గా “రే” అవుతాడు, అపరాజిత కాస్తా “జీతా” అవుతుంది. ఇలా సమాచారాన్ని కత్తిరించి కుదిమట్టంగా గుళికలలా చెయ్యడాన్ని “గుళికరించడం” (quantization) అందాం. ఇటుపైన ఉష్ణోగ్రత, వయస్సు, వేళ, మొదలైనవి కంప్యూటర్‌లోకి ఎక్కించవలసి వచ్చినప్పుడు వాటిని కత్తిరించి, గుళికరించి వాడదాం. గుళికరించగా వచ్చిన సంఖ్యలని అదే పళంగా కంప్యూటర్ వాడుకోలేదు. ఉదాహరణకి 33.14 అనే సంఖ్యనే తీసుకుందాం. దీన్ని గుళికరించి 33 చేసి ఆ పళంగా కంప్యూటరుకి ఇస్తే దానికి అర్థం కాదు. అందుకని ఆ 33 ని 100001 అని ఒకట్లు, సున్నలు ఉన్న పద్ధతిలో రాసి కంప్యూటర్‌కి ఇవ్వాలి.

మనం కంప్యూటర్‌లో దత్తాంశాలు (data), ఆదేశాలు (instructions or commands) దాచినప్పుడు వాటిని ఎక్కడ దాచేమో తెలియాలి కదా. అందుకని కొట్టు (store or memory) అనే గదిని అరల పెట్టెలా ఊహించుకుందాం. అంటే, పోస్టాఫీసులో ఉత్తరాలు బట్వాడా చేసే బీరువాలా కాని, పోపు సామానులు దాచుకునే పెట్టెలా కాని ఉంటుందని ఊహించుకుందాం. ప్రతి “అర” కి ఒక చిరునామా లేదా విలాసం (address) ఉంటుంది. ప్రతి అర ఒక అష్టా (byte) పొడవు ఉంటుంది అని కూడ ఊహించుకుందాం. అంటే, ప్రతి అర లోనూ 8 ద్వింకములు పొడుగున్న సంఖ్య పడుతుంది. ఇలాంటి అరలు 1024 ఉంటే వాటిల్లో సున్న నుండి 1023 వరకు, మొత్తం 1024 ఏకైక ద్వియాంశ సంఖ్యలని దాచవచ్చు. కనుక అష్టా పొడుగున్న అరల పెట్టేలలో 0, 1, 2, 3, 4,…, 9 వరకు అంకెలు, A, B, C, D, …, Z వరకు పెద్ద బడిలో అక్షరాలు, a, b, c, d, …, z అనుకుంటూ చిన్న బడిలో అక్షరాలు, !, @, $, ^, &, *, (, ), _ , +, -, /, <, >, ? వంటి చిహ్నాలు సునాయాసంగా దాచవచ్చు. ఈ శాల్తీ (character) లు అన్నీ కలుపుకున్నా 1024 కంటె తక్కువే ఉంటాయి కనుక ఇవి సునాయాసంగా మన కొట్లో పడతాయి. పట్టగా ఇంకా ఖాళీలు కూడ మిగిలిపోతాయి.

ఇప్పుడు మనం అంతా ఒక ఒప్పందానికి వద్దాం. ఏమిటా ఒప్పందం? : 0 ని 0000 0000 గాను, A ని 01000 0001 గాను, M ని 1101 0101 గాను అనుకుంటూ, కుంచికపలక మీద కనిపించే ప్రతి శాల్తీని ఒక ఏకైక పద్ధతిలో, ద్వియాంశ మాల (binary string) రూపంలో రాద్దాం. అలా రాసినప్పుడు కుంచిక పలక మీద ఉన్న కొన్ని శాల్తీలు ఎలా ఉంటాయో ఈ దిగువ చూపిస్తున్నాను. దీనినే ASCII code అంటారు. ఈ సున్నలని, ఒకట్లని పదే పదే రాయడం కష్టం కనుక వీటిని షోడశాంశలో ఎలా రాయవచ్చో కూడ చూపించేను.

దశాంశ ద్వియాంశ షోడశాంశ

0 0000 0000 00
1 0000 0001 01
2 0000 0010 02
A 0100 0001 41
B 0100 0010 42
M 1101 0101 D5
a 0110 0001 61
b 0110 0010 62


ఉదాహరణకి చాల చిన్న కంప్యూటర్‌లలో “ముద్రాపకి” (printer) విలాసం షోడశాంశలో 378 అయి ఉండడం రివాజుగా వస్తూన్న ఆచారం. అంటే మనం అచ్చు కొట్టవలసిన అక్షరాన్ని ఈ విలాసం ఉన్న గదిలో దాచి, “ఇప్పుడు ముద్రించు” అని ఆదేశం ఇచ్చేమంటే కంప్యూటరు తిన్నగా 378 విలాసం ఉన్న గదిలోకి వెళ్లి, అక్కడ ఏది కనిపిస్తే దాని నకలు తీసుకుని ఆ నకలుని ముద్రాపకి కి పంపుతుంది. ఇదీ టూకీగా కంప్యూటర్ పని చేసే విధానం.

ఇప్పుడు కంప్యూటరు ఎలా పని చేస్తుందో మరి కొంచెం వివరంగా చెప్పడానికి ఒక చిన్న ఉదాహరణతో కథ నడిపిస్తాను. ఈ వివరణ ఒకటికి రెండు సార్లు చదివితే కాని గభీమని అర్థం కాదు. కొంచెం ఓపిక పట్టి చదవాలి.

ఒక కథో, వ్యాసమో రాసే ఉద్దేశంతో కంప్యూటర్ ఎదురుగా కూర్చుని, కుంచికపలక (keyboard) మీద M అనే ఇంగ్లీషు అక్షరం ఉన్న కుంచిక నొక్కేమని అనుకుందాం. అప్పుడు ఆ M అనే అక్షరం తెర మీద కనిపించడానికి ఎంత తతంగం ఉందో చవి చూద్దాం.

1. కుంచికపలక మీద ఒక బొత్తాం నొక్కినప్పుడు ఈ దిగువ చెప్పిన సంఘటనలు, ఒక దాని తరువాత మరొకటి, జరుగుతాయి. సాంకేతిక పదజాలంతో కూడిన ఈ వర్ణన చదవగానే అర్థం కాకపోతే కంగారు పడవద్దు. ఈ వివరణ ఇంగ్లీషులో రాసినా గభీమని అర్థం కాదు; ఎందుకంటే భావజాలం కొత్తది కావడం వల్ల.

2. కుంచికపలక ఒక విద్యుత్ వాకేతం (signal) ని కంప్యూటర్ పెట్టెలో ఉన్న అనేకమైన విభాగాలలో ఒక విభాగానికి పంపుతుంది. వాకేతం అంటే వార్తకి సంకేతం. ఈ సందర్భంలో ఈ వాకేతాన్ని ఇంగ్లీషులో స్కేన్ కోడ్ (scan code) అంటారు. M కి బదులు 6 ఉన్న బొత్తాన్ని నొక్కితే మరొక వాకేతం (అంటే మరొక scan code) పుడుతుంది. అంటే మనం నొక్కే ప్రతి బొత్తానికి ఒక ఏకైక (unique) స్కేన్ కోడ్ కేటాయించబడి ఉంటుందన్న మాట. సర్వసాధారణంగా ఈ స్కేన్ కోడ్ ASCII కోడు అవుతుంది. (ఒక వాకేతాన్ని అంకెల రూపంలో మార్చి రాసినప్పుడు దానిని మనం “కోడు” అందాం.)

3. కంప్యుటర్ పెట్టె లోపల ఈ స్కేన్ కోడ్ ని అర్థం చేసుకో గలిగే స్థోమత గల గోరంత పరిమాణం గల చిన్న సిలికాన్ చితుకు (chip) ఉంటుంది. ఈ చితుకు చూడడానికి చితికిపోయిన చిల్లపెంకులా కాని, పలక ముక్కలా కాని ఉంటుంది. ఈ చితుకులో, కంటికి కనబడని పరిమాణంలో, వందలాది ట్రాన్‌సిస్టర్లు ఉంటాయి. ఈ ట్రాన్సిస్టర్ల సహాయంతో ఈ చితుకు కుంచికపలక కార్యకలాపాలని నియంత్రిస్తుంది కనుక ఈ చితుకుని “కుంచికపలక నియంత్రణి” (keyboard controller) అంటారు. ఈ చితుకు ఈ స్కేన్ కోడ్ ని చదివి, అర్థం చేసుకుని, M అనే అక్షరం ఉన్న మీట మనం నొక్కేమని నిర్ద్వందంగా నిర్ధారిస్తుంది.

4. అప్పుడు ఆ “స్కేన్ కోడ్” ని ఒక అర లో తాత్కాలికంగా దాచుతుంది. ఇలా తాత్కాలికంగా దాచుకుందికి వాడే అరలని ఇంగ్లీషులో “బఫ్ఫర్” (buffer) అంటారు. ఈ బఫ్ఫర్ అనే మాట అనేక రంగాల్లో వస్తూ ఉంటుంది. రెండు పెద్ద రాజ్యాల మధ్య ఉండే బడుగు దేశాలని “బఫ్ఫర్” అనొచ్చు. భారతదేశం, చైనాల మధ్య ఉన్న నేపాలు, భూటాను బఫ్ఫర్ రాజ్యాలు. అలాగే మందు తీక్షణతని అదుపులో పెట్టడానికి వాడే ఘటక ద్రవ్యాలని బఫ్ఫర్ అంటారు. నేను చిన్నప్పుడు తరగతిలో కూర్చుని విన్న పాఠాన్ని చిత్తు పుస్తకంలో రాసుకుని ఇంటికొచ్చి “మంచి పుస్తకం” లో తిరగ రాసుకునేవాడిని; చిత్తు పుస్తకం బఫ్ఫర్ లాంటిది. మన సందర్భంలో బఫ్ఫర్ అంటే “చిత్తు కొట్టు” లేదా “చిత్తు.” మనం వాడుతూన్న ఉదాహరణలో M అనే అక్షరాన్ని నొక్కేము కనుక, M యొక్క ASCII కోడు D5 కనుక, చిత్తు పలక మీద D5, అనగా 1101 0101, నమోదు అవుతుంది. (ఇక్కడ కీబోర్డ్ కంట్రోలర్ లో ఒక పెద్ద జాబితా ఉన్నట్లు ఊహించుకొండి. ఆ జాబితాలో, ఒకొక్క బొత్తాం నుండి ఒకొక్క తీగ చొప్పున వచ్చి ఆ జాబితాకి తగిలించినట్లు ఊహించుకొండి. ఈ తీగ ఒక పక్క, దానికి ఎదురుగా మనం నొక్కిన బొత్తానికి సంబంధించిన అక్షరాంకం (alphanumeric) యొక్క ASCII కోడు ఉన్నట్లు ఊహించుకొండి. అప్పుడు జాబితాలో ఏ అడ్డు వరసలో M ఉందో చూసుకుని దానికి ఎదురుగా ఉన్న అష్టా (byte) మనకి కావలసిన ASCII కోడు అనుకోవచ్చు.)

5. ఒక విషయం. చిత్తు (buffer) అనేది తాత్కాలికంగా రాసుకుందుకి వాడే పలక లాంటిదని మరిచిపోకండి. ఇక్కడ ఎక్కువ సేపు దాచుకోడానికి కుదరదు. ఎందుకంటే M తరువాత మరొక అక్షరం టైపు కొట్టవచ్చు కదా. అప్పుడు ఇదే పలక మీద మరొక అక్షరం రాయవలసి వస్తుంది. అందుకని పలక మీద ఉన్న అష్టాని త్వరగా కొట్లోకి పంపెయ్యాలి. ఈ పని చెయ్యడానికి కలనకలశం అనబడే పరికర్మరి (processor) సహాయం కావాలి.

6. అందుకని జోరుగా పని చేస్తూన్న పరికర్మరి (processor) ని ఒక్క క్షణం ఆపి “ఎవరో కుంచికపలక మీద కుంచికని నొక్కేరు. దానికి సంబంధించిన దత్తాంశాన్ని త్వరగా పంపాలి” అని అర్జీ దాఖలు చేసుకుందుకని పరికర్మరి చేస్తూన్న పనికి అంతరాయం కల్పించాలి. ఈ పని “ఇంటరప్ట్ కంట్రోలర్” అనే మరొక చితుకు (chip) చేస్తుంది. ఎలా? “అంతరాయం” అనే వాకేతాన్ని పంపి. ఎవరికి పంపుతుంది? పరికర్మరిని నడిపిస్తూన్న నిరవాకి లేదా ఉపద్రష్ట (operating system) కి. ఈ నిరవాకి ఎన్నో పనుల మీద, ఎంతో జోరుగా అజమాయిషీ చేస్తూ ఉంటుంది కదా? ఇప్పుడు మన దగ్గర ఉన్న M అందుకోమని మరొక పని పురమాయిస్తున్నాం. పాఠం చెప్పుకుంటూ పోతూన్న మేష్టారిని ప్రశ్న అడగాలంటే ఏమిటి చేస్తాం? చెయ్యి ఎత్తి ఆయన అనుమతి కోసం ఎదురు చూస్తూ వేచి ఉంటాం. మేష్టారు ఆయన చెబుతూన్న వాక్యాన్ని పూర్తి చేసి, ఆయన పాఠంలో ఎక్కడ ఉన్నారో పుస్తకంలో గుర్తు పెట్టుకుని, మన ప్రశ్న కొరకు ఎదురు చూస్తారు. అదే విధంగా తన దగ్గర దత్తాంశం ఒకటి ఉందని చెప్పడానికి అంతరాయ నియంత్రకి (interrupt controller) పరికర్మరికి ఒక “అంతరాయ వాకేతం” (interrupt signal) పంపుతుంది. ఇటువంటి వాకేతం కుంచికపలక నుండి రావచ్చు, మూషికం (mouse) నుండి రావచ్చు, మోడెం నుండి రావచ్చు, మరెక్కడనుండైనా రావచ్చు. కనుక అంతరాయ వాకేతం అందగానే పరికర్మరిని నడుపుతూన్న నిరవాకి (లేదా ఉపద్రష్ట లేదా operating system) తన పనికి అంతరాయం ఎవరివల్ల కలిగిందో అర్థం చేసుకుని, ఆ సందర్భానికి ఉచితమైన కార్యక్రమాలని నెరవేర్చాలి.

7. విద్యార్థి చెయ్యి ఎత్తిన సమయంలోనే ప్రిన్సిపాలు గారు గుమ్మం దగ్గర నిలబడి తలుపు మీద టకటక కొట్టేరనుకుందాం. అది మరొక అంతరాయం. ఇలా కంప్యూటరు ఎన్నో అంతారాయాలని ఎదుర్కుంటూనే ఉంటుంది. ఏ అంతరాయానికి ఏ పరిచర్య (service) చెయ్యాలో ఉపద్రష్టకి తెలుసు. ఒకొక్క పరిచర్యని నడపడానికి ఒకొక్క క్రమణిక (interrupt service program) ఉంటుంది. ఇప్పుడు తరువాయి కార్యక్రమం చిత్తులో ఉన్న M అనే అక్షరాన్ని కొట్లో రాసుకోవడం కనుక ఈ పని చెయ్యడానికి కావలసిన ఆదేశాలలో మొదటిది కొట్లో ఎక్కడ ఉందో అక్కడకి వెళ్లి అక్కడ నుండి కలనం కొనసాగిస్తుంది.

8. ఉదాహరణకి మనం విండోస్ (Windows) వంటి బహుళబాహు (multi-tasking) ఉపద్రష్టని వాడుతునాం అనుకుందాం. అప్పుడు మన ఉపద్రష్ట పై పనులన్నిటితోపాటు మనం M అనే అక్షరం ఏ “విండో” లో పని చేస్తున్నప్పుడు నొక్కెమో కూడ జ్ఞాపకం పెట్టుకుంటుంది. (ఇక్కడ “విండో” అంటే ఏమిటో సందర్భానుసారంగా మీరు అర్థం చేసుకున్నారనే అనుకుంటున్నాను.)

9. మనం కథో, వ్యాసమో రాస్తూ M అనే మీట నొక్కేము కనుక, అంతా సవ్యంగా జరిగితే తెర మీద M అనే అక్షరం మన “విండో” లో కనిపించాలి. ఇలా కనిపించేటట్లు చెయ్యాలంటే దృశ్యకపు కొట్టు (video store) అనే మరొక కొట్లోకి మన M ని బదిలీ చెయ్యాలి.

10. దృశ్యకపు కొట్లో ఏది ఉంటే దానిని సెకండుకి 100 సార్లు చొప్పున ఉపద్రష్ట మనకి చూపిస్తుంది.

ఒక్క చిన్న పని చెయ్యడానికి ఇంత హడావిడా? పైపెచ్చు ఇదంతా త్రుటి కాలంలో జరిగిపోయినట్లు మనకి భ్రమ కలుగుతుంది. కలనకలశం మన జ్ఞానేంద్రియాల కంటె ఎన్నో రెట్లు జోరుగా పని చెయ్యడమే ఈ భ్రమకి కారణం.

పైన రాసినది కేవలం ఒక నఖచిత్రం అని మరచ పోకండి. ఈ ఒక్క పని చెయ్యడానికి లోపల జరిగే తతంగం కూలంకషంగా వర్ణించాలంటే ఎన్నో కాగితాలు ఖరాబు చెయ్యాలి. ఇలాంటి పనులు సెకండుకి వెయ్యికి పైబడి కలశం చేస్తూ ఉంటుంది.

ఇదంతా చదివి కంప్యూటర్లని అర్థం చేసుకోవాలనే ఆశ వదలుకోకండి. ఏ ఒక్క వ్యక్తికి, అన్నీ అర్థం కావు. కంప్యూటర్లతో రోజూ పని చేసేవాళ్లకి కూడ కొద్ది భాగమే అర్థం అవుతుంది.


3 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. అయ్యా గురువుగారు
    చాలా రోజులుంచీ చూస్తున్నాను. ఇంత కష్టపడి రాసిన వ్యాసాలకి ఇంకొంచెం సహస్రాంసం కష్టపడి సబ్జెక్ట్ హెడింగ్ పెట్టలేరూ? ఎప్పుడు మీ పోస్టు చూసినా (హారం మీదో, మాలిక మీదో), సబ్జెక్ట్ ఉండదు. మొదటి లైను కాపీ చేసి పేస్ట్ చేయవచ్చు. పనిలో పని ఖతి సైజు మార్చండి. మరీ చీమల్లా కనిపిస్తున్నాయి అక్షరాలు.

    ReplyDelete
  3. Did I do what you asked me to do? Reader's feedback is important.

    ReplyDelete