Algoritmizace a programování Struktura počítače České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek 2015 Struktura předmětu Systémová struktura počítače, procesor, paměti, periferní zařízení Systém přerušení, zpracování asynchronních událostí Algoritmy, programy, programovací jazyky, jazyk C Proměnné, typy, operátory, výrazy, příkazy, vstup a výstup Řízení běhu programu, řídící struktury Struktura programu v C, podprogramy a funkce Předávání parametrů (hodnotou, odkazem), reentrantní funkce Procedurální programování Pole, struktury a uniony Ukazatele a ukazatelová aritmetika Soubory, standardní knihovny Algoritmy vyhledávání a řazení, rekurze Preprocesor, podmíněný překlad, makra, hlavičkové soubory Specifika programování vestavěných (Embedded) systémů A8B14ADP Algoritmizace a programovaní - Struktura počítače 2 1
Zdroje informací Přednášky k předmětu A8B14ADP Web předmětu A7B14SAP http://motor.feld.cvut.cz Literatura [1] Kernighan, B.W. - Ritchie, D.M.: Programovací jazyk C, Computer Press, Brno 2006. ISBN: 97880251089702. [2] Harbison, S.P.- Steele, G.L.: A Reference Manual 5th ed. Prentice Hall 2002. ISBN: 978-01308959293. [3] Herout, P.: Učebnice jazyka C. 6. vyd. Kopp 2010. ISBN: 978-80-7232-383-84. [4] Herout, P.: Učebnice jazyka C - 2.díl, 4. vyd. Kopp 2010. ISBN: 978-80-7232-367-85. [5] Wróblenski, P.-Michalek, M.-Kiszka, B: Algoritmy. Datové struktury a programovací techniky. ComputerPress, 2004. ISBN: 80-251-0343-9 A8B14ADP Algoritmizace a programovaní - Struktura počítače 3 Učební pomůcky (software) Integrované vývojové prostředí pro OS Windows nebo Linux IDE NetBeans s instalací kompilátoru pro jazyk C http://www.netbeans.org (instalace pro studenty zdarma) Integrované vývojové prostředí pro OS Windows IDE MPLAB s instalací kompilátoru pro jazyk C, (Microchip C18) http://www.microchip.com (instalace pro studenty zdarma) A8B14ADP Algoritmizace a programovaní - Struktura počítače 4 2
Systémová struktura počítače - úvod Struktura počítače A8B14ADP Algoritmizace a programovaní - Struktura počítače 5 Architektura počítače - hardware Hlavní komponenty počítače Paměť programu a dat Vstupní a výstupní zařízení Komunikace s okolním světem Procesor Výpočetní část Mezipaměť výsledků Řízení Řadič (Controller) A8B14ADP Algoritmizace a programovaní - Struktura počítače 6 3
Architektura typu von Neumann Společná paměť programu (instrukcí) a dat NELZE paralelně číst instrukce a přenášet data (cesta je společná) A8B14ADP Algoritmizace a programovaní - Struktura počítače 7 Architektura typu von Neumann Instrukce a data jsou uložena v téže paměti. Instrukce a data nelze přenášet po sběrnici současně (společná cesta) pomalejší činnost Jednodušší propojení procesoru s pamětí Paměť je organizována lineárně (tzn. jednorozměrně) a je rozdělena na stejně velké buňky, které se adresují celými čísly (zprav. 0, 1, 2, 3,... ). Data ani instrukce nejsou explicitně označeny. Explicitně nejsou označeny ani různé datové typy. Pro reprezentaci dat i instrukcí se používají dvojkové signály. Instrukce se provádějí jednotlivě, a to v pořadí, v němž jsou zapsány v paměti, pokud není toto pořadí změněno speciálními instrukcemi (nazývanými skoky). Počítač tvoří: Processor (ALU aritmetická a logická jednotky, registry, řídicí část (řadič controller), hlavní paměť (main memory) společně instrukce a data, systém přerušení, vstupní a výstupní zařízení (periferie peripherals) A8B14ADP Algoritmizace a programovaní - Struktura počítače 8 4
Architektura typu Harvard Oddělená paměť programu (instrukcí) a dat LZE paralelně číst instrukce a přenášet data (cesty jsou oddělené) A8B14ADP Algoritmizace a programovaní - Struktura počítače 9 Architektura typu Harvard Instrukce a data jsou uložena v oddělených pamětech. Instrukce lze číst současně s přenosem dat (oddělené cesty) rychlejší činnost Šířka přenosové cesty instrukcí může být jiná (větší) než přenosová cesta dat. Složitější propojení procesoru s pamětmi (vs von Neumann ) Data a instrukce jsou explicitně označeny Paměť je organizována lineárně (tzn. jednorozměrně) a je rozdělena na stejně velké buňky, které se adresují celými čísly (zprav. 0, 1, 2, 3,... ). Pro reprezentaci dat i instrukcí se používají dvojkové signály. Instrukce se provádějí jednotlivě, a to v pořadí, v němž jsou zapsány v paměti, pokud není toto pořadí změněno speciálními instrukcemi (nazývanými skoky). Počítač tvoří: Processor (ALU aritmetická a logická jednotky, registry, řídicí část (řadič controller), paměť programu (instrukcí), paměť dat, systém přerušení, vstupní a výstupní zařízení (periferie peripherals) A8B14ADP Algoritmizace a programovaní - Struktura počítače 10 5
Vývoj software úrovně abstrakce Literatura: [1] A8B14ADP Algoritmizace a programovaní - Struktura počítače 11 Vývoj software úrovně abstrakce Překladač (sw) Asembler (sw) Processor (hw) if( z < 0 z > 35} x++; else y++; cmp z, #0 bnc Cont1 cmp z, LIM bc Cont1 inc x 1001 0011 0101 0001 0110 1101 0011 1010 0001 1110 1100 0011 0111 0010 1010 0001 0101 1110 0010 0011 *WR *RD DB 1 2 3 4 A8B14ADP Algoritmizace a programovaní - Struktura počítače 12 6
Organizace hlavní (operační) paměti počítače Hlavní paměť je rozdělena na buňky paměťová místa, kterým jsou přiřazena nezáporná čísla nazývaná adresy Obsah paměťového místa je slovo slovo (word) velikost závisí na procesoru (např. 16b, 24b, 32b, 64b), b značí bit (binary digit) B značí byte (slabika), 8b = 1B, byte je uspořádaná osmice bitů, obvykle 2 nebo i více byteů tvoří slovo, např. u procesorů Intel řady x86 1 slovo = 2B = 16b. Obsah paměťového místa na adrese adr bývá někdy označován <adr>; nehrozí-li nedorozumění píše se však často adr místo <adr>. A8B14ADP Algoritmizace a programovaní - Struktura počítače 13 Slabiková organizace paměti Dva používané způsoby uložení v paměti (Big vs Little endian) Př. 1 slabika = 1B 1 slovo = 2B 1 dvojité slovo = 4B [dw Double Word] tedy 32b Od adresy 8001 má být uloženo dvojité slovo 1234ABCD: 1. způsob 2. způsob Adresa Big-endian Little-endian Big-endian (IBM360, Motorola 6800) 8001 12 CD 8002 34 AB Little-endian (Intel x86, DEC Alpha) 8003 AB 34 Oba způsoby (Motorola 88110) 8004 CD 12 A8B14ADP Algoritmizace a programovaní - Struktura počítače 14 7
Zobrazení dat v paměti Numerická data čísla: V pevné řádové čárce (fixed point) celá čísla (integer format) byte, word, racionální čísla (fraction format) byte, word, V pohyblivé řádové čárce (floating point), racionálníčísla, double, float,, matisa+charakteristika Formát zobrazení: Dvojková (binary), př. 10100011b Šestnáctková (hexadecimal), př. A3h nebo 0xA3 Desítková (decimal), př. 163d nebo 163 Bez znaménka (unsigned), pouze nezáporná, byte, word, unsigned Se znaménkem (signed), integer, short int, signed Různě dlouhá, různý rozsah hodnot (short int, integer, long int, byte, word, double, A8B14ADP Algoritmizace a programovaní - Struktura počítače 15 Požadované vlastnosti počítače Požadované vlastnosti počítače Řízení toku programu synchronní akce asynchronní akce (řízení událostmi) Přesun proměnných Zpracování proměnných Funkce vstupu/výstupu Pomocné řídicí funkce Zabezpečení běhu Konzistence dat Ochrana proti kopírování Další Required computer features Program flow control Synchronous actions Asynchronous actions (event driven) Variable transport Variable processing Input/Output functions Auxiliary control functions Operation security Data consistency Reverse engineering protection Others A8B14ADP Algoritmizace a programovaní - Struktura počítače 16 8
Architektura typu von Neumann A8B14ADP Algoritmizace a programovaní - Struktura počítače 17 Architektura typu Harvard Typ.různá šířka A8B14ADP Algoritmizace a programovaní - Struktura počítače 18 9
Architektura typu Harvard další modifikace Paralelní čtení/zápis dat Čtení konstant z Flash A8B14ADP Algoritmizace a programovaní - Struktura počítače 19 Architektura von Neumann versus Harvard von Neumann Jednodušší struktura Sdílená sběrnice nelze paralelně transportovat instrukce a data Společný paměťový prostor instrukcí a dat. Možno pružně rozdělit paměť pro instrukce data a zásobník (pokud vše v RAM) Prostor pro zásobník (Stack) bývá dostatečný. Harvard Složitější struktura Oddělené sběrnice možnost paralelního transportu instrukce a dat (rychlost větší) Oddělené prostory instrukcí a dat. Paměť programu (instrukcí) často širší slovo proti paměti dat kompaktnější jednocyklové instrukční kódy. Zásobník často mimo paměť dat (rozdílná šířka paměti programu a dat). Hloubka zásobníku omezená (pak nutno přemístit do paměti dat a to pomalé) A8B14ADP Algoritmizace a programovaní - Struktura počítače 20 10
Systémová struktura počítače A8B14ADP Algoritmizace a programovaní - Struktura počítače 21 Systémová struktura počítače Kontrolní seznam 1 Počítač sériový stroj CPU - Procesor Paměť programu Paměť dat Vstup / výstup Společná sběrnice Hodiny (synchronizace) XTAL krystal Nulování Periferie Vnější paměť Master sběrnice Check list No.1 Computer sequence machine CPU Central Processing Unit Program memory Data memory Input / output Bus Clock XTAL crystal Reset Peripherals External memory Bus master A8B14ADP Algoritmizace a programovaní - Struktura počítače 22 11
Systémová struktura počítače Kontrolní seznam 2 Počítač sériový stroj FSA - konečný automat FSM konečný automat Sychronní automat Stav automatu Podmínky přechodu Instrukce programu Proměnné programu Zásobník programu BIOS Operační systém Aplikační program Zaváděcí program Check list No.2 Computer sequence machine FSA Finite State Automaton FSM Finite State Machine Synchronous FSA FSA state Transition conditions Program instructions Program variables Program stack BIOS (Basic I/O System) Operating system Users application Bootstrap A8B14ADP Algoritmizace a programovaní - Struktura počítače 23 Instrukční cyklus A8B14ADP Algoritmizace a programovaní - Struktura počítače 24 12
Instrukční cyklus Kontrolní seznam 3 Instrukční cyklus Čtení instrukce Vykonání instrukce Dekódování instrukce Čtení operandu Zpracování operandů Zápis výsledku Řídicí sběrnice (CB) Datová sběrnice (DB) Adresová sběrnice (AB) Sběrnicový cyklus Směr přenosu informace Check list No.3 Instruction cycle Operational code (Opcode) fetch Instruction execution Instruction decode Operand read Operand processing Result write Control bus (CB) Data bus (DB) Address bus Bus cycle Information transfer direction A8B14ADP Algoritmizace a programovaní - Struktura počítače 25 Rozdělení společné sběrnice A8B14ADP Algoritmizace a programovaní - Struktura počítače 26 13
Komunikace mezi bloky Kontrolní seznam 4 Komunikace mezi bloky CB, DB, AB Obousměrná sběrnice Jednosměrná sběrnice Pouze jeden bus master Směr čtení Směr zápis Adresa platná Data platná Dekodér adresy Pole paměťových jednotek čtení/zápis z/do paměti Check list No.4 Block communication CB, DB, AB Bidirectional bus Unidirectiona bus One bus master only Direction READ Direction WRITE Address valid Data valid Address decoder Memory array Memory READ/WRITE A8B14ADP Algoritmizace a programovaní - Struktura počítače 27 Činnost společné sběrnice (AB, DB, CB) A8B14ADP Algoritmizace a programovaní - Struktura počítače 28 14
Kde číst následující instrukci Čítač instrukcí 1) Další instrukci čti vždy z adresy uložené v PC 2) Adresa v PC se mění automaticky, po čtení instrukce ukazuje na další instrukci 3) Adresa v PC se dá změnit vykonáním instrukce skoku, cílová adresa je součástí instrukce A8B14ADP Algoritmizace a programovaní - Struktura počítače 29 Větvení programu (Jump, Branch) Realizace větvení programu A8B14ADP Algoritmizace a programovaní - Struktura počítače 30 15
Dekompozice problému na dílčí části A8B14ADP Algoritmizace a programovaní - Struktura počítače 31 Požadavky pro volání procedury Návratová adresa A8B14ADP Algoritmizace a programovaní - Struktura počítače 32 16
Princip volání procedury (Procedure Call) PC PROGRAM COUNTER ADDRESS PROGRAM MEMORY INSTRUCTIONS Zásobník (návratových adres) IR INSTRUCTION REGISTER DECODE EXECUTE + 00100 LD R0, MAX 00101 ADD R0, R1 00102 ST R0, SUM 00103 CALL 00805 00104 NOP 00105 CMP SUM, R3 00106 BNZ 00630C 00107 SP STACK POINTER 00805 00806 00807 LD R7, PORT3 AND R7, 3FEh RET 00104 STACK (LIFO) TOS Ukazatel zásobníku A8B14ADP Algoritmizace a programovaní - Struktura počítače 33 Synchronní akce volání procedury Kontrolní seznam 5 Synchronní akce Čítač instrukcí - PC Ukazatel do paměti programu Postupné čtení Automatická inkrementace Vnucená adresa Zásobník Ukazatel zásobníku Ukazatel na vrchol zásobníku Vrchol zásobníku Vlož do zásobníku - PUSH Vyzvedni ze zásobníku - POP Check list No.5 Synchronous actions Program Counter PC Pointer to program memory Sequential read Auto-increment Forced address Stack Stack Pointer Pointer to stack top TOS top of stack PUSH POP A8B14ADP Algoritmizace a programovaní - Struktura počítače 34 17
Synchronní akce volání procedury - pokrač. Kontrolní seznam 6 Synchronní akce - pokrač. Začátek programu Hlavní smyčka Volání procedury Návratová adresa Začátek procedury Tělo procedury Bod návratu (return) Vnořené volání Návěští (cílová adresa skoku) Skok (bez návratové adresy) Hloubka zásobníku Check list No.6 Synchronous actions cont'd Program start point Main loop Procedure call Return address Procedure start Procedure body Return Nested calls Label (jump target address) Jump (no return address) Stack depth A8B14ADP Algoritmizace a programovaní - Struktura počítače 35 Sdílené prostředky (sdílí je procedury) A8B14ADP Algoritmizace a programovaní - Struktura počítače 36 18
Princip volání procedury (synchronní) Volání procedury - souhrn akcí Volání procedury je vyvolané programem (synchronní) ne vnější událostí (vnější událost viz. přerušení) Stejným mechanismem se řídí i vnořené volání (procedura volá proceduru) Další instrukce se vždy čte z adresy právě uložené v čítači instrukcí (PC) Čti instrukci Call Ulož návratovou adresu (tj. obsah čítače instrukcí) do zásobníku Vlož do čítače instrukcí počáteční adresu procedury Ulož kontext do zásobníku Proveď tělo procedury Vyzvedni kontext Proveď instrukci Return Ta vyzvedne Návratovou adresu ze zásobníku do čítače instrukcí (PC) Pokračuj v programu za místem volání Call na pozadí tj. čti instrukci z adresy uložené v PC A8B14ADP Algoritmizace a programovaní - Struktura počítače 37 Algoritmizace a programování Struktura počítače KONEC České vysoké učení technické Fakulta elektrotechnická 19