Kako procesor zna gde da uputi instrukciju?
Prikazujem rezultate 1 do 6 od 6

Tema: Kako procesor zna gde da uputi instrukciju?

  1. #1
    Domaćin
    Učlanjen
    23.10.2011.
    Pol
    muški
    Lokacija
    Beograd
    Poruke
    4.798
    Tekstova u blogu
    3
    Reputaciona moć
    0

    Podrazumevano Kako procesor zna gde da uputi instrukciju?

    Skapirao sam dosta oko samog hardvera kompjutera i kako on radi, samo mi nesto nije jasno...

    Kada kod stigne do procesora, recimo da je Console.WriteLine("Nesto") ili printf("nesto") naravno pretvoreno u masinski kod, kako procesor zna gde da uputi tu liniju koda, po pravilu to bi trebalo da ide ka grafickoj, kako on zna gde da rasporedi procese?

    Da li je CPU i ALU programiran?

    tipa

    if(proces zahteva graficku)
    {
    PosaljiKaGrafickoj();
    }


    i da zanima me kako funkcionisu naredbe i petlje? Da li se uslov ostvaruje preko tranzistora, a u slucaju petlji kruznog kola ?



  2. #2
    Zainteresovan član Agni.l33t (avatar)
    Učlanjen
    06.05.2012.
    Pol
    muški
    Lokacija
    Basel
    Poruke
    412
    Reputaciona moć
    226

    Podrazumevano Re: Kako procesor zna gde da uputi instrukciju?

    Mislim da sam ovo već jednom napisao, ali evo ponoviću.. Procesor ništa NE ZNA, on samo izvršava instrukciju po instrukciju, koje dekoduje po unapred određenim pravila, u zavisnosti od arhitekture.

    Kada se radi o ispisu nekakvog sadržaja na nekakav izlazni uređaj, posebnim instrukcijama se taj uređaj startuje upisom određenog sadržaj u kontrolne registre kontrolera periferije i prosleđuje mu se određeni podatak ili blok podataka u slučaju DMA.

    Ove instrukcije su naravno prevedene u mašinski kod, i kao takve ih procesor izvršava, bez imalo "znanja" o tome šta i kako treba dalje da se izvrši.

    Evo jedan mali primer za jednoadresni procesor:

    Kod:
    // startuješ kontroler
    LOAD #1h
    OUT AA00h
    
    // proveravaš da li je periferije spremna da primi podatak
    loop: NOP
    IN AA01h
    AND #1h
    JZ loop
    
    // ako jeste šalješ podatak, npr. neki karakter na adresi 1000h
    LOAD (1000h)
    OUT AA02h
    
    
    AA00h - adr kontrolnog registra
    AA01h - adr statusnog registra
    AA02h - adr data registra

    Naravno, ovo je banalan primer, ali poslužiće mi da objasnim i kako rade petlje.
    Kao što vidiš postoje labele u kodu koje su vezane za određene adrese (onih instrukcija ispred koji se nalaze), kada procesor naiđe na instrukciju skoka, kao u ovom slučaju instrukciju JZ (Jump Zero) on proverava Z flag u PSW (Program Status Word) registru koji mu govori da li je rezultat prethodne instrukcije, koja postavlja ovaj flag bio jednak nuli. Ukoliko utvrdi da je uslov skoka ispunjen procesor u IP (Instruction Pointer) registar upisuje adresu na koju ukazuje labela, i nastavlja dalje da izvršava instrukciju po instrukciju onako kako mu diktira IP registar.

    U prethodnom primeru uslov skoka neće biti ispunjen dok god izlazni uredjaj ne bude spreman da primi podatak, odnosno dok ne postavi najniži bit u statusnom registru na vrednost 1. Značenja bita u kontrolnim i statusnim registrima se naravno razlikuju od uređaja do uređaja, i dobijaju se u specifikaciji za svaki.

    Naravno programer ne treba da brine o tome jer je to posao drajvera... Osim ukoliko sam ne pišeš drajvere
    Poslednji put ažurirao/la Agni.l33t : 22.06.2013. u 12:06
    http://www.nowykurier.com/toys/gravity/gravity.html

  3. #3
    Domaćin
    Učlanjen
    23.10.2011.
    Pol
    muški
    Lokacija
    Beograd
    Poruke
    4.798
    Tekstova u blogu
    3
    Reputaciona moć
    0

    Podrazumevano Re: Kako procesor zna gde da uputi instrukciju?

    Citat Original postavio Agni.l33t Pogledaj poruku
    Mislim da sam ovo već jednom napisao, ali evo ponoviću.. Procesor ništa NE ZNA, on samo izvršava instrukciju po instrukciju, koje dekoduje po unapred određenim pravila, u zavisnosti od arhitekture.

    Kada se radi o ispisu nekakvog sadržaja na nekakav izlazni uređaj, posebnim instrukcijama se taj uređaj startuje upisom određenog sadržaj u kontrolne registre kontrolera periferije i prosleđuje mu se određeni podatak ili blok podataka u slučaju DMA.

    Ove instrukcije su naravno prevedene u mašinski kod, i kao takve ih procesor izvršava, bez imalo "znanja" o tome šta i kako treba dalje da se izvrši.

    Evo jedan mali primer za jednoadresni procesor:

    Kod:
    // startuješ kontroler
    LOAD #1h
    OUT AA00h
    
    // proveravaš da li je periferije spremna da primi podatak
    loop: NOP
    IN AA01h
    AND #1h
    JZ loop
    
    // ako jeste šalješ podatak, npr. neki karakter na adresi 1000h
    LOAD (1000h)
    OUT AA02h
    
    
    AA00h - adr kontrolnog registra
    AA01h - adr statusnog registra
    AA02h - adr data registra

    Naravno, ovo je banalan primer, ali poslužiće mi da objasnim i kako rade petlje.
    Kao što vidiš postoje labele u kodu koje su vezane za određene adrese (onih instrukcija ispred koji se nalaze), kada procesor naiđe na instrukciju skoka, kao u ovom slučaju instrukciju JZ (Jump Zero) on proverava Z flag u PSW (Program Status Word) registru koji mu govori da li je rezultat prethodne instrukcije, koja postavlja ovaj flag bio jednak nuli. Ukoliko utvrdi da je uslov skoka ispunjen procesor u IP (Instruction Pointer) registar upisuje adresu na koju ukazuje labela, i nastavlja dalje da izvršava instrukciju po instrukciju onako kako mu diktira IP registar.

    U prethodnom primeru uslov skoka neće biti ispunjen dok god izlazni uredjaj ne bude spreman da primi podatak, odnosno dok ne postavi najniži bit u statusnom registru na vrednost 1. Značenja bita u kontrolnim i statusnim registrima se naravno razlikuju od uređaja do uređaja, i dobijaju se u specifikaciji za svaki.

    Naravno programer ne treba da brine o tome jer je to posao drajvera... Osim ukoliko sam ne pišeš drajvere
    Hoćeš da kažeš da procesor nije programiran?
    Ne ide mi u glavu na koji način mašinski kod (Console.WriteLine) recimo dolazi do grafičke ili (Console.ReadLine) do tastature? Složićeš se da mora postojati nešto što ih račva, e šta je to, ja sam mislio da je CPU zadužen za put procesa?
    Registri su zaduženi za trenutno skladištenje procesa koji su u gužvi zar ne? ili se i to baca ka ram-u?
    Izvini zbog dosadnih pitanja, zanima me sve "ispod haube".

    Hvala za petlju razumeo sam ))

  4. #4
    Zainteresovan član Agni.l33t (avatar)
    Učlanjen
    06.05.2012.
    Pol
    muški
    Lokacija
    Basel
    Poruke
    412
    Reputaciona moć
    226

    Podrazumevano Re: Kako procesor zna gde da uputi instrukciju?

    Citat Original postavio Wrong Turn Pogledaj poruku
    Hoćeš da kažeš da procesor nije programiran?
    Naravno da ne, postoji više tipova realizacije upravljačke jedinice procesora, između ostalog i mikroprogramska gde se pomoću mikronaredbi generišu upravljački signali. Ali to nema nikakve veze sa samim procesom i njegovim tokom, već samo sa fazom izvršavanja pojedinih instrukcija.

    Citat Original postavio Wrong Turn Pogledaj poruku
    Ne ide mi u glavu na koji način mašinski kod (Console.WriteLine) recimo dolazi do grafičke ili (Console.ReadLine) do tastature?
    Pogledaj primer iznad još jednom

    Citat Original postavio Wrong Turn Pogledaj poruku
    Registri su zaduženi za trenutno skladištenje procesa koji su u gužvi zar ne?
    Ne, oni predstavljaju trenutni kontekst procesa koji se izvršava, odnosno sve ono što karakteriše izvršavanje jednog procesa, kao npr. Instruction Pointer, Stack Pointer, Base Pointer, Program Status Word itd...
    U slučaju da se u procesoru desi prekid, ovi registri čuvaju se na steku, a po povratku iz prekida se restauriraju njihove vrednosti, da bi proces regularno nastavio svoj tok. U multithreaded sistemima, svaki proces ima pridruženu određenu strukturu koja ga identifikuje i u kojoj se čuva njegov kontekst.
    http://www.nowykurier.com/toys/gravity/gravity.html

  5. #5
    Domaćin
    Učlanjen
    23.10.2011.
    Pol
    muški
    Lokacija
    Beograd
    Poruke
    4.798
    Tekstova u blogu
    3
    Reputaciona moć
    0

    Podrazumevano Re: Kako procesor zna gde da uputi instrukciju?

    Citat Original postavio Agni.l33t Pogledaj poruku
    Naravno da ne, postoji više tipova realizacije upravljačke jedinice procesora, između ostalog i mikroprogramska gde se pomoću mikronaredbi generišu upravljački signali. Ali to nema nikakve veze sa samim procesom i njegovim tokom, već samo sa fazom izvršavanja pojedinih instrukcija.



    Pogledaj primer iznad još jednom



    Ne, oni predstavljaju trenutni kontekst procesa koji se izvršava, odnosno sve ono što karakteriše izvršavanje jednog procesa, kao npr. Instruction Pointer, Stack Pointer, Base Pointer, Program Status Word itd...
    U slučaju da se u procesoru desi prekid, ovi registri čuvaju se na steku, a po povratku iz prekida se restauriraju njihove vrednosti, da bi proces regularno nastavio svoj tok. U multithreaded sistemima, svaki proces ima pridruženu određenu strukturu koja ga identifikuje i u kojoj se čuva njegov kontekst.
    Hvala

  6. #6
    Domaćin aleksazr (avatar)
    Učlanjen
    09.10.2009.
    Pol
    muški
    Lokacija
    zrenjanin
    Poruke
    3.081
    Reputaciona moć
    95

    Podrazumevano Re: Kako procesor zna gde da uputi instrukciju?

    Evo ja ću o prijemu sa tastature.

    1. Kad pritisneš taster, mikrokontroler na tastaturi pošalje ka PCu scan code tastera.

    2. Hardver na matičnoj ploči primi taj scancode i postavi IRQ (interrupt request) kao signal procesoru da je scancode primljen.

    3. CPU pre početka izvršavanja svake instrukcije gleda da li je neki IRQ aktivan.

    4. Kada detektuje postavljeni IRQ, zabrani detekciju novih IRQa, sačuva sve registre i flags na stack i skoči na adresu za taj IRQ.

    5. Program napisan za taj IRQ tačno zna šta treba da radi, šta da očekuje - treba da uzme scancode od hardvera sa matične.
    To se obično radi sa IN/OUT instrukcijama.

    IN/OUT je vrlo sličan memory access instrukcijama, samo je chip select drugi.
    Na primer, kad CPU čita memoriju, postavi adresu i kaže MEMORY READ.
    Memorija na matičnoj (dok je memory read aktivan), daje na svom izlazu podatak sa tražene adrese.
    Kod IN/OUT je slično, dakle CPU postavi adresu i kaže IO READ.
    Ovoga puta, memorija neće davati ništa na izlazu jer memory read nije aktivan.
    Ostali hardver na matičnoj reaguje na IO read i ako je adresiran daje podatak na izlaz.
    Dakle, za čitanje pristiglog scankoda postoji jedna, određena adresa.

    6. Kad pročita scancode, upisaće ga u neki kružni buffer.
    7. Zatim kaže hardveru koji se bavi tastaturom da je scancode pročitan i da hardver može da ukine IRQ.
    8. I na kraju se vraća u glavni program, restaurira sve registre i flagove i dozvoljava novi IRQ.
    CYRfree 2.0.3 - ako bi ćirilicu radije čitali kao latinicu.
    Serbian Latin keyboard layout 1.1 - raspored za QWERTY tastature sa našeg tržišta.
    http://users.beotel.net/~gwh/

Slične teme

  1. XP i novi procesor
    Autor Hurricane u forumu Operativni sistemi
    Odgovora: 6
    Poslednja poruka: 25.12.2003., 17:22
  2. Koji procesor moze
    Autor Mich u forumu Hardver
    Odgovora: 3
    Poslednja poruka: 17.12.2003., 22:43
  3. AMD Procesor
    Autor Ekspres u forumu Hardver
    Odgovora: 6
    Poslednja poruka: 28.11.2003., 23:36
  4. Matična I NOVI PROCESOR
    Autor w2nx u forumu Hardver
    Odgovora: 6
    Poslednja poruka: 12.10.2003., 18:23
  5. Da li da menjam plocu ili procesor
    Autor u forumu Hardver
    Odgovora: 10
    Poslednja poruka: 05.08.2003., 00:08

Pravila za slanje poruka

  • Ne možete kreirati novu temu
  • Ne možete poslati odgovor
  • Ne možete dodati priloge
  • Ne možete prepraviti svoju poruku
  •