Užtikrintos karjeros grafiko paaiškinimas

Neseniai pateikiau vieną tokį faktą, kurį pastebiu kiekvieną kartą, kai tik baigiasi studijų semestras. Ir kas kart, tas pastebėjimas vis paaštrėja. Taip kilo priklausomybės idėja.

Įžanga

Grafikas, kurį matote aukščiau, yra subtilus geek’ų humoras, kurį turbūt supras nedaug žmonių. Noriu iškarto pasakyti, kad sekanti iliustracija nėra kažkokia pašaipa ar kažkoks nusiskundimas kaip blogai yra universitete. Viskas visiškai ne taip. Ir viskas netgi atvirkščiai. Šiame įraše pabandysiu paaiškinti grafiko idėja ir galutinai apiforminti ką jis reiškia, kad neliktų nesupratusių.

Idėjos paaiškinimui pabandysiu iliustruoti paprastu uždaviniu, dviejų skaitmenų sudėtimi, sudėties operacija. Tarkim, kad ir 2+2. Kas gali būti paprasčiau, pasakysite Jūs. Tačiau, kai tik palysi giliau, viskas tampa ne taip ir paprasta.

Paskalis

Savo aiškinimą pradėsiu nuo mokyklos. Nuo žinių židinio, nuo pačios-pačios pradžios – paskalio. Tai iki istorinė programavimo kalba, kurią programavimo tik todėl, kad kitas pasirinkimas buvo tik asembleris ar fortranas ( nors aš turbūt geriau programuočiau asembleriu ).

Mūsų nagrinėjamos problemos sprendimas paskalio atveju atrodo taip:

program sudėtis;
  var suma : integer
begin
  suma := 2 + 2;
end;

Viskas kaip ir paprasta – apsibrėžėme kintamąjį, į kurį saugosime savo operacijos atsakymą. Kintamasis, šiuo atveju, yra fundamentalus dydis, su kuriuo programoje galime operuoti. Sumos operacija irgi yra fundamentalus operatorius, kadangi realiai procesorius ( o tiksliau jo ALĮ ( aritmetinis-loginis-įrenginys ) ) visiškai “nemoka” mums įprastas matematines operacijas.

Judėkime toliau, o tiksliau – giliau.

Asembleris

Kiekvienas programinis kodas, nesvarbu kokia programavimo kalba jis būtų parašytas – yra transliuojamas į mašininį kodą ir jo asemblerinį analogą ( *.lst ). Pabandykime dabar parašyti analogišką Paskaliui dviejų kintamųjų sudėties operacijos programą Intel’io 8051 mikro-kontroleriui. Tai senas, geras 4 KB kodo atminties turintis ir 128 B duomenų atminties turintis įrenginys, kurį kai kurie, vis dar naudoja. Kaip atrodys kodas:

	.ORG 0H		; programos pradzios adresas

	MOV A, #2D	; perkeliam 2 i ACC
	ADDC A, #2D	; prie ACC pridedam 2

	.END		; susirenkam zaislus ir einam namo

Šiuo atveju, mes jau operuojame su konkrečiu įrenginiu – ACC registru, akumuliatoriumi, tik su kuriuo iki-istoriniai procesoriai galėjo atlikti aritmetines operacijas ( tik nežinau kaip dabar su daugyba/dalyba ). Tačiau čia dar lieka viena fundamentali operacija – sudėtis, ADDC ( add with carry ). Mažą užuominą tam gali duoti transliacijos byla:

0000 7402                3             MOV A, #2D      ; perkeliam 2 i ACC
0002 3402                4             ADDC A, #2D     ; prie ACC pridedam 2

Pirmas stulpelis yra adresas ( kuris prasideda nuo 0000, kaip ir buvo nurodyta .org operatoriumi ). Mus labiau domina antras stulpelis, kuriame yra nurodytas mašininis kodas. Pirmi 8b yra operacijos kodas, kur prie sumatoriaus jis yra 0x34, o toliau jau seka pats kintamasis 0x02. Vadinasi, pirmiausiai procesorius sužino ko iš jo nori programuotojas, o paskui jau paima tą skaičių, su kuriuo bus atliekama operacija.

Judam tolyn, į aparatinį lygmenį!

Aparatinis lygmuo

Aparatiniame lygmenyje mes pasiaiškinsime paprastą aparatinį įrenginį – sumatorių. Projektuoti savo sumatorių pradėsime nuo paprasčiausio jo varianto – dviejų 1b dydžių sumavimo. Štai kaip atrodo paprastas 1b sumatorius schematiškai:

Realiai, rezultatą duoda XOR loginis įtaisas, o kuomet mums nepakanka 1b atsakymui – pasijungia AND loginis įtaisas. Taigi, kai mes turime 0b1 + 0b0, tai atsakymą mes turime:

Ir atsakymas yra 0b1, o kuomet mes turime 0b1 + 0b1, tai atsakymas yra:

Teisingai, dabar mes jau turime persipildymą, kadangi 0b1 + 0b1 = 0b10 ( 1b neužtenka atsakymui išsaugoti ). Taigi, mūsų sumavimo įrenginys, turi turėti persipildymą apdorojančią grandinės dalį, todėl mums reikia papildyti duotą schemą. Galutinė schema atrodytų taip:

O taip atrodys 2b sumatorius:

Vedant iš vieno grandinės bloko į kitą grandinės bloką persipildymo išėjimą, galima sudaryti n bitų sudėjimo grandinę. Tačiau mūsų nagrinėjamai problemai užtenka ir 2b, su persipildymo kontrole, kadangi 2 yra 0b10, o 0b10 + 0b10 = 0b100, pažiūrėkime kaip tai atrodo loginėje grandinėje:

Ir štai – sudėjome du skaičius nesiremiant jokiais fundamentaliais operatoriais – kintamaisiais, aritmetiniais ženklais.

AND loginiai vartai

Aritmetines operacijas atlikome su loginiais įtaisais, tačiau ir juos juk reikia suprojektuoti. Pateiksiu vieną tokio projekto pavyzdį, panaudojus n ir p tipo MOSFET’us.

Schema nėra iškarto lengvai suprantama, tačiau ji puikiausiai veikia. Pabandykime schemoje pakelti vieną įėjimą:

O dabar pakelkime abu įėjimus:

Kaip matote, savo loginę užduotį AND grandinė atlieka kuo puikiausiai.

Nuo paprastos paskalio programos mes nusileidome iki pat aparatinio lygmens su loginėmis grandinėmis. Žemiau jau tik yra puslaidininkių teoriją, kurią bent kiek panagrinėti reiktų dar dviejų tokio pat ilgio įrašų.

Išvados

Elektronikoje nėra žmogui įprastu matematinių operacijų, kaip sudėtis, atimtis, daugyba, dalyba. Nekalbu net apie integravimą. Elektronika siekia kiekvieną žmogui įprastą operaciją aproksimuoti. Sumavimą galima pavadinti idealizuotu uždaviniu. Mes turime tik du skaičius ( arba du objektus ) ir natūraliai išplaukia išvada, kad jeigu prie dviejų kiaušinių pridėsime dar du kiaušinius, tai jau turėsime keturis kiaušinius. Tuo galime įsitikinti net skaičiuodami ant pirštų. Elektronikoje toks idealizuotas uždavinys yra aproksimuojamas naudojant puslaidininkius, iš jų sudarant logines grandis, iš loginių grandžių sudarant aparatinius įrenginius ir t.t..

Kiekvienas iš išvardintų lygmenų turi savo iššūkius ir kylančias problemas. Kiekvienas lygmuo yra įdomus ir reikalauja specifinių žinių. Problema – o kurį pasirinkti? Kokiam lygmeniui atiduoti visą savo inžinerinę esmę? Kurioje specializacijoje būčiau geresnis specialistas?

Dar taip pat į nugarą kvėpuoja tokia, labai neapibrėžta ir sunkiai kur taikoma, dirbtinio intelekto patologija..

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s