MIKRORAČUNALNIŠKE ARHITEKTURE Zbirka rešenih nalog Zmago Brezočnik Mikroračunalniške arhitekture Zbirka rešenih nalog Avtor Zmago Brezočnik September 2025 Naslov Mikroračunalniške arhitekture Title Microcomputer Architectures Podnaslo Zbirka rešenih nalog Subtitle Collection of Solved Problems Avtor Zmago Brezočnik Author (Univerza v Mariboru, Fakulteta za elektrotehniko, računalništvo in informatiko) Recenzija Tatjana Kapus Review (Univerza v Mariboru, Fakulteta za elektrotehniko, računalništvo in informatiko) Lektoriranje AMIDAS d.o.o. Language editing Tehnična urednika Zmago Brezočnik Technical editors (Univerza v Mariboru, Fakulteta za elektrotehniko, računalništvo in informatiko) Jan Perša (Univerza v Mariboru, Univerzitetna založba) Oblikovalec ovitka Špela Brezočnik Cover designer Grafika na ovitku DeepAI, foto: Deep AI, Inc., 2025 Cover graphics Založnik Univerza v Mariboru Published by Univerzitetna založba Slomškov trg 15, 2000 Maribor, Slovenija https://press.um.si, zalozba@um.si Izdajatelj Univerza v Mariboru Issued by Fakulteta za elektrotehniko, računalništvo in informatiko Koroška cesta 46, 2000 Maribor, Slovenija https://www.feri.um.si, feri@um.si Izdaja 1. izdaja Edition Izdano Maribor, Slovenija, September, 2025 Published at Vrsta publikacije E-knjiga Publication type Dostopno na https://press.um.si/index.php/ump/catalog/book/1055 Available at CIP - Kataložni zapis o publikaciji Univerzitetna knjižnica Maribor 004.2(076.2)(0.034.2) BREZOČNIK, Zmago Mikroračunalniške arhitekture : zbirka rešenih nalog / avtor Zmago Brezočnik. - 1st ed. - E-knjiga. - Maribor : Univerza v Mariboru, Univerzitetna založba, 2025 Način dostopa (URL): https://press.um.si/index.php/ump/catalog/book/1055 ISBN 978-961-299-054-1 (PDF) doi: 10.18690/um.feri.10.2025 COBISS.SI-ID 249274627 © Univerza v Mariboru, Univerzitetna založba / University of Maribor, University of Maribor Press Besedilo / Text © Brezočnik (avtor), 2025 To delo je objavljeno pod licenco Creative Commons Priznanje avtorstva-Nekomercialno-Brez predelav 4.0 Mednarodna. / This work is licensed under the Creative Commons Attribution-NonCommercialNoDerivs 4.0 International License. Uporabnikom je dovoljeno reproduciranje brez predelave avtorskega dela, distribuiranje, dajanje v najem in priobčitev javnosti samega izvirnega avtorskega dela, in sicer pod pogojem, da navedejo avtorja in da ne gre za komercialno uporabo. Vsa gradiva tretjih oseb v tej knjigi so objavljena pod licenco Creative Commons, razen če to ni navedeno drugače. Če želite ponovno uporabiti gradivo tretjih oseb, ki ni zajeto v licenci Creative Commons, boste morali pridobiti dovoljenje neposredno od imetnika avtorskih pravic. https://creativecommons.org/licenses/by-nc-nd/4.0/ ISBN 978-961-299-054-1 (pdf) DOI https://doi.org/10.18690/um.feri.10.2025 Cena Brezplačni izvod Price Odgovorna oseba založnika Prof. dr. Zdravko Kačič, For publisher rektor Unvierze v Mariboru Attribution Brezočnik, Z. (2025). Mikroračunalniške arhitekture: Zbirka rešenih nalog. Univerza v Mariboru, Univerzitetna založba. doi: 10.18690/um.feri.10.2025 Vsebina i Vsebina Seznam uporabljenih kratic . . . . . . . . . . . . . . . . vii Predgovor . . . . . . . . . . . . . . . . . . . . . . . 1 1 Uvod . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1 Razlika med organizacijo in arhitekturo računalnika . . . . . . . . . 3 1.2 Razlika med strukturo in funkcijo računalnika . . . . . . . . . . . 3 1.3 Glavne funkcije računalnika . . . . . . . . . . . . . . . . . . . 3 1.4 Glavne strukturne komponente računalnika. . . . . . . . . . . . . 3 1.5 Glavne strukturne komponente procesorja . . . . . . . . . . . . . 4 2 Zmogljivost računalnikov . . . . . . . . . . . . . . . . . 5 2.1 Ocenjevanje zmogljivosti računalnikov (1/7) . . . . . . . . . . . . 5 2.2 Ocenjevanje zmogljivosti računalnikov (2/7) . . . . . . . . . . . . 5 2.3 Ocenjevanje zmogljivosti računalnikov (3/7) . . . . . . . . . . . . 6 2.4 Ocenjevanje zmogljivosti računalnikov (4/7) . . . . . . . . . . . . 7 2.5 Ocenjevanje zmogljivosti računalnikov (5/7) . . . . . . . . . . . . 8 2.6 Ocenjevanje zmogljivosti računalnikov (6/7) . . . . . . . . . . . . 10 2.7 Ocenjevanje zmogljivosti računalnikov (7/7)* . . . . . . . . . . . . 11 2.8 Amdahlov zakon (1/4). . . . . . . . . . . . . . . . . . . . . . 13 2.9 Amdahlov zakon (2/4). . . . . . . . . . . . . . . . . . . . . . 13 2.10 Amdahlov zakon (3/4)* . . . . . . . . . . . . . . . . . . . . . 14 2.11 Amdahlov zakon (4/4)* . . . . . . . . . . . . . . . . . . . . . 15 3 Komunikacija med glavnimi komponentami računalnika. . . . 17 3.1 Obseg pomnilniškega naslovnega prostora . . . . . . . . . . . . . 17 3.2 Obseg V/I naslovnega prostora . . . . . . . . . . . . . . . . . . 17 3.3 Vpliv širine vodil na hitrost sistema . . . . . . . . . . . . . . . . 17 3.4 Pomnilniški in V/I naslovni prostor . . . . . . . . . . . . . . . . 18 3.5 V/I modul za nadzor teleprinterja. . . . . . . . . . . . . . . . . 19 3.6 Trajanje strojnega cikla mikroprocesorja . . . . . . . . . . . . . . 19 3.7 Podvojitev širine vodila proti podvojitvi frekvence ure . . . . . . . . 19 3.8 Propustnost vodila za 8- in 16-bitni mikroprocesor . . . . . . . . . 20 3.9 Cikli na vodilu za 16- in 32-bitni mikroprocesor . . . . . . . . . . . 20 3.10 Pomnilniški bralni cikel na sinhronem vodilu (1/2) . . . . . . . . . 21 3.11 Pomnilniški bralni cikel na sinhronem vodilu (2/2) . . . . . . . . . 22 3.12 Pomnilniški pisalni cikel na sinhronem vodilu . . . . . . . . . . . . 23 3.13 Vrivanje čakalnih stanj v ukazni cikel ukaza INC . . . . . . . . . . 24 3.14 Čas izvajanja ukaza INC . . . . . . . . . . . . . . . . . . . . . 24 3.15 Vpliv vrivanja čakalnih stanj na dolžino ukaznega cikla . . . . . . . 25 3.16 Generiranje prekinitve med izvajanjem ukaza INC. . . . . . . . . . 25 3.17 Prekinitve pri prekinljivih in neprekinljivih ukazih . . . . . . . . . 25 3.18 Največja možna zakasnitev potrditve zahteve za vodilo . . . . . . . 26 3.19 Hitrost prenosa podatkov mikroprocesorja Intel 8088 . . . . . . . . 26 3.20 Zapravljeni cikli pri včitavanju ukazov za Intel 8088 . . . . . . . . . 26 3.21 Liho uvrščene besede pri mikroprocesorju Intel 8086 . . . . . . . . . 27 ii Vsebina 4 Predpomnilnik . . . . . . . . . . . . . . . . . . . . . 29 4.1 Izračun parametrov predpomnilnika (1/8) . . . . . . . . . . . . . 29 4.2 Izračun parametrov predpomnilnika (2/8) . . . . . . . . . . . . . 29 4.3 Izračun parametrov predpomnilnika (3/8) . . . . . . . . . . . . . 30 4.4 Izračun parametrov predpomnilnika (4/8) . . . . . . . . . . . . . 30 4.5 Izračun parametrov predpomnilnika (5/8) . . . . . . . . . . . . . 31 4.6 Izračun parametrov predpomnilnika (6/8) . . . . . . . . . . . . . 32 4.7 Izračun parametrov predpomnilnika (7/8) . . . . . . . . . . . . . 33 4.8 Izračun parametrov predpomnilnika (8/8) . . . . . . . . . . . . . 33 4.9 Enačba za učinkovitost dostopa do predpomnilnika . . . . . . . . . 34 4.10 Pomnilniška hierarhija na N nivojih* . . . . . . . . . . . . . . . 35 4.11 Cena bita kombiniranega dvonivojskega pomnilnika . . . . . . . . . 36 4.12 Preoblikovanje predpomnilnika . . . . . . . . . . . . . . . . . . 37 4.13 Računanje časa dostopa do predpomnilnika. . . . . . . . . . . . . 38 4.14 Povprečni čas dostopa do trinivojskega pomnilnika . . . . . . . . . 38 4.15 Predpomnilnik pri mikroprocesorju Motorola 68020 . . . . . . . . . 39 4.16 Vpliv ukaznega predpomnilnika na izkoriščenost vodila. . . . . . . . 40 4.17 Preslikave blokov v predpomnilnika različnih tipov . . . . . . . . . 40 5 Notranji pomnilnik . . . . . . . . . . . . . . . . . . . 43 5.1 Izvedba 256 KB pomnilnika za 8-bitni mikroprocesor . . . . . . . . 43 5.2 Izvedba 512 KB pomnilnika za 8-bitni mikroprocesor . . . . . . . . 43 5.3 Osveževanje DRAM pomnilnika (1/2) . . . . . . . . . . . . . . . 44 5.4 Osveževanje DRAM pomnilnika (2/2) . . . . . . . . . . . . . . . 44 5.5 Izračun stopnje odpovedi 512 KB pomnilnika . . . . . . . . . . . . 44 5.6 Izračun MTBF-ja . . . . . . . . . . . . . . . . . . . . . . . . 45 5.7 MTBF brez odkrivanja enojnih napak in z njim. . . . . . . . . . . 45 5.8 MTBF brez popravljanja enojnih napak in z njim . . . . . . . . . . 46 5.9 Poraba moči pri odkrivanju/popravljanju napak . . . . . . . . . . 46 5.10 Hammingov kod (7,4) . . . . . . . . . . . . . . . . . . . . . . 47 5.11 Matriki G in H Hammingovega koda (7,4) . . . . . . . . . . . . . 47 5.12 Izračun sindroma za Hammingov kod (7,4) . . . . . . . . . . . . . 50 5.13 Popravljanje enojnih/odkrivanje dvojnih napak s kodom (8,4) . . . . 53 5.14 Izračun testnih bitov za Hammingov kod (12,8) . . . . . . . . . . . 55 5.15 Analiza napake s Hammingovim kodom (12,8) . . . . . . . . . . . 55 5.16 Izračun števila testnih bitov za 1024-bitni podatek . . . . . . . . . 56 5.17 Razvoj Hammingovega koda za 16-bitni podatek* . . . . . . . . . . 56 6 Zunanji pomnilnik . . . . . . . . . . . . . . . . . . . . 59 6.1 Povprečno število prečkanih sledi za dostop na želeno sled na disku*. . 59 6.2 Povprečni čas dostopa do sektorja na trdem disku. . . . . . . . . . 60 6.3 Izračun parametrov zmogljivosti trdega diska (1/2) . . . . . . . . . 61 6.4 Izračun parametrov zmogljivosti trdega diska (2/2) . . . . . . . . . 61 6.5 Razlika med fizičnimi in logičnimi zapisi na trdem disku . . . . . . . 62 6.6 Čas prenosa podatkov med sektorji na trdem disku . . . . . . . . . 62 6.7 Izpeljava izraza za gostoto zapisa podatkov. . . . . . . . . . . . . 63 6.8 Redundantno polje neodvisnih diskov . . . . . . . . . . . . . . . 64 6.9 Varnostno shranjevanje podatkov . . . . . . . . . . . . . . . . . 64 6.10 Serpentinasto zapisovanje podatkov na magnetni trak . . . . . . . . 65 6.11 Izračun števila sektorjev na DVD ROM-u . . . . . . . . . . . . . 66 Vsebina iii 6.12 Hitrost vrtenja CD-ROM-a. . . . . . . . . . . . . . . . . . . . 66 6.13 Prilagajanje kotne hitrosti glede na položaj senzorja . . . . . . . . . 66 7 Vhodno-izhodna organizacija mikroprocesorjev . . . . . . . 69 7.1 Naslavljanje vhodno-izhodnih vrat pri mikroprocesorju Intel 8088 . . . 69 7.2 Naslavljanje vhodno-izhodnih vrat pri mikroprocesorju Zilog Z8000 . . 69 7.3 Blokovni V/I prenosi mikroprocesorja Zilog Z8000. . . . . . . . . . 69 7.4 Blokovni in neblokovni V/I prenosi za Zilog Z8000 . . . . . . . . . 70 7.5 Registri in naslovi V/I naprave . . . . . . . . . . . . . . . . . . 70 7.6 Periodično preverjanje statusa naprave. . . . . . . . . . . . . . . 70 7.7 Strežba naprave s programskim V/I . . . . . . . . . . . . . . . . 71 7.8 Prednosti in slabosti pomnilniško preslikanega V/I . . . . . . . . . 71 7.9 Ločen V/I v primerjavi s pomnilniško preslikanim V/I . . . . . . . . 72 7.10 Prekinitveno voden V/I . . . . . . . . . . . . . . . . . . . . . 73 7.11 Zamenjava programskega V/I s prekinitveno vodenim . . . . . . . . 74 7.12 Prekinitve s programskim izpraševanjem . . . . . . . . . . . . . . 74 7.13 Odzivni čas na prekinitev . . . . . . . . . . . . . . . . . . . . 75 7.14 Režija pri procesiranju prekinitve . . . . . . . . . . . . . . . . . 75 7.15 Vpliv blokovnih prenosov na prekinitvene odzivne čase. . . . . . . . 76 7.16 Vrivanje čakalnih stanj v cikel DMA. . . . . . . . . . . . . . . . 77 7.17 Prenos nadzora nad vodilom med CPE in DMAC . . . . . . . . . . 77 7.18 Programski V/I proti prekinitveno vodenemu V/I . . . . . . . . . . 78 7.19 Prekinitveno voden V/I v primerjavi z DMA . . . . . . . . . . . . 78 7.20 Čas prenosa nadzora nad vodilom . . . . . . . . . . . . . . . . . 79 7.21 Prioriteta dostopov do pomnilnika med CPE in DMA . . . . . . . . 80 7.22 Upočasnitev CPE zaradi načina DMA s krajo ciklov. . . . . . . . . 80 7.23 Zakasnitev prenosa DMA zaradi zasedenosti vodila . . . . . . . . . 80 7.24 Primerjava eksplozijskega načina in načina kraje ciklov . . . . . . . 81 7.25 Krmilnik DMA Intel 8237A (1/2) . . . . . . . . . . . . . . . . . 81 7.26 Krmilnik DMA Intel 8237A (2/2) . . . . . . . . . . . . . . . . . 82 7.27 Izbira načina delovanja krmilnika DMA . . . . . . . . . . . . . . 82 7.28 Selektorski in multipleksorski kanal . . . . . . . . . . . . . . . . 82 7.29 Primerjava programskega V/I in DMA. . . . . . . . . . . . . . . 83 7.30 Hitrost prenosa podatkov pri serijski komunikaciji . . . . . . . . . . 83 7.31 Hitrost naraščanja/padanja signala po EIA RS-232C . . . . . . . . 84 7.32 Asinhrona serijska komunikacija . . . . . . . . . . . . . . . . . 86 7.33 Prekinitveno voden V/I za serijsko komunikacijo . . . . . . . . . . 86 7.34 Časovne zanke . . . . . . . . . . . . . . . . . . . . . . . . . 86 7.35 Programirljivi časovniki . . . . . . . . . . . . . . . . . . . . . 87 7.36 Sinhrona serijska komunikacija*. . . . . . . . . . . . . . . . . . 88 8 Nabori ukazov CPE . . . . . . . . . . . . . . . . . . . 91 8.1 Prikaz števil v šestnajstiškem zapisu. . . . . . . . . . . . . . . . 91 8.2 Prikaz vrednosti pakiranih desetiških števil . . . . . . . . . . . . . 91 8.3 Najmanjše in največje število v dani predstavitvi . . . . . . . . . . 91 8.4 Seštevanje pakiranih desetiških števil . . . . . . . . . . . . . . . 92 8.5 Razlaga ukaza DAA Intelovih mikroprocesorjev x86 . . . . . . . . . 92 8.6 Vrednosti zastavic po izvedbi seštevanja za Intel x86. . . . . . . . . 93 8.7 Vrednosti zastavic po izvedbi odštevanja za Intel x86 . . . . . . . . 94 8.8 Program za izračun izraza na štirih tipih procesorjev . . . . . . . . 95 iv Vsebina 8.9 Množenje z aritmetičnim in logičnim pomikanjem v levo . . . . . . . 96 8.10 Nameni uporabe strojnega ukaza NOP. . . . . . . . . . . . . . . 97 8.11 Analiza delovanja ukaza CMP pri procesorjih x86 . . . . . . . . . . 97 8.12 Seštevanje šestnajstiških vrednosti z ukazi MMX . . . . . . . . . . 99 8.13 Pretvorba iz obratne poljske notacije v infiksno . . . . . . . . . . . 99 8.14 Pretvorba iz infiksne notacije v obratno poljsko . . . . . . . . . . . 100 8.15 Uporaba ukaza IMUL za procesorje Intel x86 . . . . . . . . . . . . 100 8.16 Ureditev bajtov v pomnilniku . . . . . . . . . . . . . . . . . . 101 8.17 Program za ugotavljanje ureditve bajtov* . . . . . . . . . . . . . 101 9 Načini naslavljanja in formati ukazov CPE . . . . . . . . . 103 9.1 Razumevanje različnih načinov naslavljanja (1/4) . . . . . . . . . . 103 9.2 Razumevanje različnih načinov naslavljanja (2/4) . . . . . . . . . . 103 9.3 Razumevanje različnih načinov naslavljanja (3/4) . . . . . . . . . . 104 9.4 Razumevanje različnih načinov naslavljanja (4/4) . . . . . . . . . . 104 9.5 Ukaz za vejanje z relativnim naslavljanjem (1/2) . . . . . . . . . . 105 9.6 Ukaz za vejanje z relativnim naslavljanjem (2/2) . . . . . . . . . . 106 9.7 Ukaz s posrednim načinom naslavljanja . . . . . . . . . . . . . . 106 9.8 Bazno indeksni način naslavljanja . . . . . . . . . . . . . . . . . 106 9.9 Naslavljanje s predzmanjšanjem in postpovečanjem . . . . . . . . . 106 9.10 Skladovno naslavljanje. . . . . . . . . . . . . . . . . . . . . . 107 9.11 Izračun največjega števila enooperandnih ukazov* . . . . . . . . . . 108 9.12 Načrtovanje operacijske kode spremenljive dolžine* . . . . . . . . . 108 9.13 Izračun dolžine programske kode za izračun izraza . . . . . . . . . 109 9.14 Število operacijskih kod za mikroprocesor Zilog Z8001 . . . . . . . . 110 10 Razvoj programov v zbirnem jeziku . . . . . . . . . . . . 111 10.1 Določanje vrednosti zastavice C po izvedbi programa . . . . . . . . 111 10.2 Vrednost zastavic Z, S in O po izvedbi ukaza cmp . . . . . . . . . . 111 10.3 Programiranje v zbirniku za procesorje x86 (1/9) . . . . . . . . . . 112 10.4 Programiranje v zbirniku za procesorje x86 (2/9) . . . . . . . . . . 113 10.5 Programiranje v zbirniku za procesorje x86 (3/9) . . . . . . . . . . 113 10.6 Programiranje v zbirniku za procesorje x86 (4/9) . . . . . . . . . . 113 10.7 Programiranje v zbirniku za procesorje x86 (5/9) . . . . . . . . . . 114 10.8 Programiranje v zbirniku za procesorje x86 (6/9) . . . . . . . . . . 114 10.9 Programiranje v zbirniku za procesorje x86 (7/9) . . . . . . . . . . 115 10.10 Programiranje v zbirniku za procesorje x86 (8/9) . . . . . . . . . . 116 10.11 Programiranje v zbirniku za procesorje x86 (9/9) . . . . . . . . . . 116 10.12 Programiranje v zbirniku za procesorje ARM (1/8) . . . . . . . . . 117 10.13 Programiranje v zbirniku za procesorje ARM (2/8) . . . . . . . . . 118 10.14 Programiranje v zbirniku za procesorje ARM (3/8) . . . . . . . . . 119 10.15 Programiranje v zbirniku za procesorje ARM (4/8) . . . . . . . . . 120 10.16 Programiranje v zbirniku za procesorje ARM (5/8) . . . . . . . . . 121 10.17 Programiranje v zbirniku za procesorje ARM (6/8) . . . . . . . . . 122 10.18 Programiranje v zbirniku za procesorje ARM (7/8) . . . . . . . . . 123 10.19 Programiranje v zbirniku za procesorje ARM (8/8) . . . . . . . . . 124 Vsebina v A Priloga . . . . . . . . . . . . . . . . . . . . . . . . . 125 A.1 Dokaz izreka o zvezi RA ≥ RG ≥ RH med aritmetično, geometrijsko in harmonično srednjo vrednostjo . . . . . . . . . . . . . . . . . . 125 A.2 Dokaz izreka 2 R A · R H = R G za srednje vrednosti nad samo dvema spre- menljivkama . . . . . . . . . . . . . . . . . . . . . . . . . . 127 A.3 Dokaz izreka o vsoti prvih n naravnih števil . . . . . . . . . . . . 128 A.4 Dokaz izreka o vsoti kvadratov prvih n naravnih števil . . . . . . . . 129 Viri . . . . . . . . . . . . . . . . . . . . . . . . . . 131 vi Vsebina Seznam uporabljenih kratic vii Seznam uporabljenih kratic Kratica Angleški pomen Slovenski pomen AD Analog-to-Digital analogno-digitalni(-a) ALE Arithmetic and Logic Unit aritmetična in logična enota B byte bajt ( 3 2 bitov) BCD Binary Coded Decimal dvojiško kodirano desetiško število BE Big Endian veliki endian bps bits per second biti na sekundo (b/s) CISC Complex Instruction Set Computer računalnik s širokim naborom ukazov CPE Central Processing Unit centralna procesna enota CPI Clocks (Cycles) per Instruction število urinih ciklov na ukaz cps characters per second število znakov na sekundo DMA Direct Memory Access neposredni dostop do pomnilnika DMAC DMA Controller krmilnik DMA DRAM Dynamic Random Access Memory dinamični RAM EABI Embedded Appl. Binary Interface binarni vmesnik za vgrajene aplikacije EDAC Error Detection and Correction odkrivanje in popravljanje napak EIA Electronic Industries Association Združenje elektronske industrije ER Effective data Rate dejanska hitrost prenosa podatkov FIT Failures in Time število odpovedi v času 9 10 ur GB gigabyte gigabajt ( 30 2 bajtov) IRA International Reference Alphabet mednarodna referenčna abeceda kB/s kilobyte per second kilobajt na sekundo ( 3 10 B/s) kb/s kilobit per second kilobit na sekundo ( 3 10 b/s) KB kilobyte kilobajt ( 10 2 bajtov) LE Little Endian mali endian LRU Least Recently Used že najdlje časa neuporabljen MB megabyte megabajt ( 20 2 bajtov) MIPS Million Instructions Per Second milijonov ukazov na sekundo MMX Multimedia Extension razširitev za multimedijo MSI Mean Scale Integration srednja stopnja integracije MTBF Mean Time Between Failures povprečni čas med odpovedima NASM Netwide Assembler for the x86 zbirnik za arhitekturo Intel x86 PIT Programmable Interval Timer programirljivi intervalni časovnik RAID Redundant Array of Independed Disks redundantno polje neodvisnih diskov RAM Random Access Memory pomnilnik z naključnim dostopom RISC Reduced Instruction Set Computer računalnik z zoženim naborom ukazov rpm revolutions per minute obrati na minuto SCC Serial Communication Controller serijski komunikacijski krmilnik SSI Small Scale Integration nizka stopnja integracije TB terabyte terabajt ( 40 2 bajtov) V/I Input/Output vhodno-izhodni(-a) x86 Intel architecture based on 8086 Intelova arhitektura na osnovi 8086 viii Seznam uporabljenih kratic Predgovor 1 Predgovor Zbirka je nastala na podlagi dolgoletnega pedagoškega dela pri več predmetih s področja mikroračunalniških arhitektur, mikroprocesorjev in mikrokrmilnikov na Fakulteti za elektrotehniko, računalništvo in informatiko Univerze v Mariboru. Na-menjena je študentom kot pripomoček pri pripravi na kolokvije in pisne izpite z računskimi nalogami. Vsebuje 170 nalog z rešitvami in s celotnim potekom reševa-nja. Bralec naj poskuša reševati naloge čim bolj samostojno, rešitve pa naj uporabi zgolj za preveritev lastnega znanja. Vsebina večine nalog izhaja iz temeljnih učbe- nikov [1, 2, 3], iz referenčnega gradiva o mikroprocesorjih z arhitekturo Intel x86 [4] ter iz vira [5] o programiranju procesorjev družine ARM Cortex-M4. Pri vsaki izmed teh nalog je sklic na vir. Nekatere zahtevnejše naloge so označene z zvez-dico (*). Njihova težavnost praviloma presega raven nalog s pisnega dela izpita in so namenjene študentom, ki želijo svoje znanje še dodatno poglobiti. Naloge so razporejene v deset poglavij. Po kratkem uvodu sledi drugo poglavje, namenjeno ocenjevanju zmogljivosti računalnikov. V tretjem poglavju so naloge, ki obravnavajo komunikacijo med osnovnimi komponentami računalnika. Četrto po-glavje vsebuje naloge, namenjene snovanju in izračunu parametrov predpomnilnika. Notranji pomnilnik, zlasti odkrivanje in popravljanje napak s Hammingovimi kodi, obravnavajo naloge petega poglavja, zunanji pomnilnik pa naloge šestega. Sedmo poglavje je posvečeno vhodno-izhodni organizaciji mikroprocesorjev. Osmo poglavje prinaša naloge za analizo učinkov izvajanja različnih strojnih ukazov mikroproce-sorja. Načini naslavljanja in formati ukazov so obravnavani v nalogah devetega poglavja. Zadnje, deseto poglavje vključuje naloge za analizo kratkih odsekov kode in pisanje kratkih programov v zbirniku za mikroprocesorje arhitektur Intel x86 in ARM. Na koncu so za več besedilnih nalog priloženi programi v zbirniku oziroma v jeziku C in zbirniku za procesorje ARM Cortex-M4, razviti in preizkušeni v inte-griranem razvojnem okolju STM32CubeIDE. Zbirko zaključuje priloga A z dokazi štirih izrekov, uporabljenih v nalogah, in seznam virov. Zbirka je namenjena predvsem študentom UN ŠP Elektrotehnika, smer Elektronika, in študentom UN ŠP Telekomunikacije pri predmetu Mikroračunalniške arhitekture. Namenjena je tudi študentom VS ŠP Elektrotehnika, smer Elektronika, pri predmetu Mikroprocesorski sistemi I. Za te skupine so posebej relevantna poglavja 1, 2, 3, 4, 8, 9 in 10. Študentom MAG ŠP Elektrotehnika, smer Elektronika, bosta pri predmetu Mikroprocesorski sistemi koristili predvsem poglavji 6 in 7, študentom VS ŠP Elektrotehnika, smer Elektronika, pri predmetu Mikroprocesorski sistemi II pa poglavji 5 in 7. 2 Predgovor Uvod 3 1 Uvod 1.1 Razlika med organizacijo in arhitekturo računalnika Kakšna je v splošnem razlika med organizacijo in arhitekturo računalnika [1]? Rešitev: Arhitektura računalnika se nanaša na tiste atribute sistema, ki so vidni programerju, ali povedano z drugimi besedami, na tiste atribute, ki imajo neposredni vpliv na lo-gično izvajanje programa. Organizacija računalnika se nanaša na operativne enote in njihove medsebojne povezave, ki izvršujejo arhitekturne specifikacije. Primeri ar-hitekturnih atributov vključujejo nabor ukazov, število bitov, uporabljenih za pred-stavitev različnih podatkovnih tipov (npr. števil, znakov), vhodne/izhodne (V/I) mehanizme in tehnike za naslavljanje pomnilnika. Organizacijski atributi vključujejo tiste podrobnosti strojne opreme, ki so programerju nevidne, kot so na primer kr-milni signali, vmesniki med računalnikom in perifernimi napravami ter uporabljena tehnologija pomnilnika. 1.2 Razlika med strukturo in funkcijo računalnika Kakšna je v splošnem razlika med strukturo in funkcijo računalnika [1]? Rešitev: Struktura računalnika se nanaša na način, kako so komponente računalnika med se-boj povezane. Funkcija računalnika se nanaša na delovanje vsake posamezne kom-ponente kot dela strukture. 1.3 Glavne funkcije računalnika Katere so štiri glavne funkcije računalnika [1]? Rešitev: Štiri glavne funkcije računalnika so procesiranje podatkov, hramba podatkov, pre-mikanje podatkov in nadzor. 1.4 Glavne strukturne komponente računalnika Naštejte in na kratko definirajte glavne strukturne komponente računalnika [1]. Rešitev: Glavne strukturne komponente računalnika so: • Centralna procesna enota (CPE). Nadzira delovanje računalnika in izvaja nje- gove funkcije procesiranja podatkov. Pogosto ji rečemo kar procesor. • Glavni pomnilnik. Hrani podatke in programe. • V/I. Premika podatke med računalnikom in zunanjim okoljem. 4 Uvod • Medsebojne povezave. To je nek mehanizem, ki preskrbi komunikacijo med CPE, glavnim pomnilnikom in V/I. Običajen primer medsebojne povezave komponent sistema je sistemsko vodilo, ki je sestavljeno iz množice prevodnih vezic, na katere so povezane vse druge komponente. 1.5 Glavne strukturne komponente procesorja Naštejte in na kratko definirajte glavne strukturne komponente procesorja [1]. Rešitev: • Krmilna enota. Krmili operacije CPE in s tem računalnika. • Aritmetična in logična enota (ALE). Izvaja računalnikove funkcije procesira- nja podatkov. • Registri. Poskrbijo za hrambo informacije znotraj CPE. • Medsebojne povezave v CPE. To je nek mehanizem, ki preskrbi komunikacijo med krmilno enoto, ALE in registri. Zmogljivost računalnikov 5 2 Zmogljivost računalnikov 2.1 Ocenjevanje zmogljivosti računalnikov (1/7) Primerjalni program izvajamo na procesorju s frekvenco 40 MHz. Izvedeni program sestavlja 100.000 ukazov z naslednjo ukazno mešanico in številom urinih ciklov: Tip ukaza Število ukazov Število urinih ciklov na ukaz Celoštevilčni aritmetični 45.000 1 Prenos podatkov 32.000 2 Plavajoča vejica 15.000 2 Prenos nadzora 8.000 2 Določite število urinih ciklov na ukaz (CPI), zmogljivost v MIPS (število izvedenih ukazov v milijonih na sekundo) in čas izvajanja za ta program [1]. Rešitev: P 3 CP I · I (1 · 45 + 2 · 32 + 2 · 15 + 2 · 8) · 10 CP I i i i = = = 1,55 I 3 (45 + 32 + 15 + 8) · 10 C f 6 40 · 10 zmogljivost v MIPS = = = 25,8 6 6 CP I · 10 1 , 55 · 10 I 3 · CP I 100 · 10 · 1,55 T C = = = 3,87 ms f 6 40 · 10 2.2 Ocenjevanje zmogljivosti računalnikov (2/7) Imamo dva različna računalnika z dvema različnima ukaznima množicama. Oba računalnika imata uro frekvence 200 MHz. V spodnji tabeli so zbrane meritve z obeh računalnikov ob izvajanju dane množice primerjalnih programov. Število ukazov Število ciklov Tip ukaza (v milijonih) na ukaz Računalnik A Aritmetični in logični 8 1 Nalaganje in shranjevanje 4 3 Vejanje 2 4 Drugi 4 3 Računalnik B Aritmetični in logični 10 1 Nalaganje in shranjevanje 8 2 Vejanje 2 4 Drugi 4 3 Določite CPI, zmogljivost v MIPS in čas izvajanja za vsak računalnik. Rezultate komentirajte [1]. 6 Zmogljivost računalnikov Rešitev: P 6 CP I · I (8 · 1 + 4 · 3 + 2 · 4 + 4 · 3) · 10 CP I i i i = = ≈ 2,22 A 6 I (8 + 4 + 2 + 4) · 10 C f 6 200 · 10 zmogljivost v MIPSA = = = 90 6 6 CP I A · 10 2 , 22 · 10 I 6 · CP I 18 · 10 · 2,22 T C A = = = 0,2 s A 6 f 200 · 10 P 6 CP I · I (10 · 1 + 8 · 2 + 2 · 4 + 4 · 3) · 10 CP I i i i = = ≈ 1,92 B 6 I (10 + 8 + 2 + 4) · 10 C f 6 200 · 10 zmogljivost v MIPS B = = = 104 6 6 CP I B · 10 1 , 92 · 10 I 6 · CP I 24 · 10 · 1,92 T C B = = = 0,23 s B 6 f 200 · 10 Čeprav ima računalnik B večjo zmogljivost v MIPS kot računalnik A, je čas izvajanja iste množice primerjalnih programov na njem daljši. 2.3 Ocenjevanje zmogljivosti računalnikov (3/7) Primer zgodnjega računalnika tipa CISC (računalnik s širokim naborom ukazov) je VAX 11/780, primer zgodnjega tipa računalnika RISC (računalnik z zoženim nabo-rom ukazov) pa IBM RS/6000. Uporaba tipičnega primerjalnega programa je dala naslednje rezultate: Procesor Frekvenca ure Zmogljivost čas CPE VAX 11/780 5 MHz 1 MIPS 12x sekund IBM RS/6000 25 MHz 18 MIPS x sekund Zadnji stolpec prikazuje, da je VAX zahteval za izvedbo programa 12-krat več časa CPE kot IBM [1]. a) Kolikšno je razmerje števila ukazov izvedljive strojne kode za ta primerjalni program med računalnikoma IBM RS/6000 in VAX 11/780? b) Koliko znašata vrednosti CPI za oba računalnika? Rešitev: a) Zveza med številom ukazov programa, ki se izvaja na računalniku z zmoglji- vostjo v MIPS in za izvedbo potrebuje T (procesorskega) časa, je: I 6 = (zmogljivost v MIPS) · 10 · T C Razmerje števila ukazov med računalnikoma IBM RS/6000 in VAX 11/780 je: I 6 18 10 x C_IBM = · · = 1,5 I 6 1 10 12x C_V AX Zmogljivost računalnikov 7 b) Zveza med številom urinih ciklov na ukaz, frekvenco ure in mero MIPS je: CP I = 6 (zmogljivost v MIPS) f · 10 5 MHz 6 5 · 10 CP I V AX = = = 5 6 6 1 MIPS · 10 1 · 10 25 MHz 6 25 · 10 CP I IBM = = = 1,39 6 6 18 MIPS · 10 18 · 10 2.4 Ocenjevanje zmogljivosti računalnikov (4/7) Če na nekem računalniku zaporedoma izvajamo n programov in njihove čase izva-janja označimo z x1, x2 , . . ., xn, za izračun srednje vrednosti časa izvajanja vseh n programov najpogosteje uporabimo aritmetično (RA), harmonično (RH ) ali geome-trijsko (RG) srednjo vrednost. Izračunamo jih po naslednjih definicijah: n !1/n n R A := xi, RG := xi , RH := . P n 1 n 1 X Y n i i=1 =1 i =1 xi Za poljuben n velja izrek RA ≥ RG ≥ RH . Dokaz najdete v prilogi A.1. Samo za n 2 = 2 pa velja izrek R · R = R A.2 . Dokaz najdete v prilogi. A H G Štiri primerjalne programe smo izvedli na treh različnih računalnikih in dobili na-slednje rezultate: Računalnik A Računalnik B Računalnik C Program 1 1 10 20 Program 2 1.000 100 20 Program 3 500 1.000 50 Program 4 100 800 100 Tabela prikazuje izvajalne čase v sekundah za 100.000.000 izvedenih ukazov v vsa-kem izmed štirih programov. Izračunajte zmogljivost v MIPS za vsak računalnik in vsak program. Nato izračunajte aritmetične in harmonične srednje vrednosti ter rangirajte računalnike na osnovi aritmetične srednje vrednosti in harmonične sre- dnje vrednosti [1]. Rešitev: Zmogljivost v MIPS izračunamo iz enačbe zmogljivost v MIPS = = 6 T IC 100 × 10 T Računalnik A Računalnik B Računalnik C Program 1 100 10 5 Program 2 0,1 1 5 Program 3 0,2 0,1 2 Program 4 1 0,125 1 8 Zmogljivost računalnikov Aritmetična Rang Harmonična Rang srednja vrednost srednja vrednost Računalnik A 25,325 1 0,25 2 Računalnik B 2,8 3 0,21 3 Računalnik C 3,25 2 2,1 1 2.5 Ocenjevanje zmogljivosti računalnikov (5/7) V spodnji tabeli so zbrani izvajalni časi v sekundah za pet različnih primerjalnih programov na treh računalnikih [1]. Računalnik Primerjalni program R M Z Program 1 417 244 134 Program 2 83 70 70 Program 3 66 153 135 Program 4 39.449 35.527 66.000 Program 5 772 368 369 a) Izračunajte metriko hitrosti za vsak procesor za vsak primerjalni program, normalizirano na računalnik R. To pomeni, da so vse vrednosti razmerij za R enake 1,0. Druga razmerja ri se izračunajo po enačbi T refi ri = T suti kjer se za referenčni sistem vzame računalnik R. Nato izračunajte aritmetično srednjo vrednost za vsak sistem. b) Ponovite točko a), če za referenčni sistem izberete računalnik M. c) Kateri računalnik je najpočasnejši pri obeh prejšnjih izračunih? d) Ponovite izračune iz točk a) in b) z uporabo geometrične srednje vrednosti RG, definirane z enačbo: n ! 1/n R Y := r G i i=1 Rešitev: a) Normalizirano na računalnik R: Zmogljivost računalnikov 9 Računalnik Primerjalni program R M Z Program 1 1,00 1,71 3,11 Program 2 1,00 1,19 1,19 Program 3 1,00 0,43 0,49 Program 4 1,00 1,11 0,60 Program 5 1,00 2,10 2,09 Aritmetična srednja vrednost 1,00 1,31 1,50 b) Normalizirano na računalnik M: Računalnik Primerjalni program R M Z Program 1 0,59 1,00 1,82 Program 2 0,84 1,00 1,00 Program 3 2,32 1,00 1,13 Program 4 0,90 1,00 0,54 Program 5 0,48 1,00 1,00 Aritmetična srednja vrednost 1,01 1,00 1,10 c) Spomnimo, da večji kot je ri, večja je hitrost testiranega sistema. Na osnovi rezultatov v a) je R znatno najpočasnejši računalnik. Na osnovi rezultatov v b) je M za malenkost najpočasnejši računalnik. d) Normalizirano na računalnik R in nato na računalnik M: Računalnik Primerjalni program R M Z Program 1 1,00 1,71 3,11 Program 2 1,00 1,19 1,19 Program 3 1,00 0,43 0,49 Program 4 1,00 1,11 0,60 Program 5 1,00 2,10 2,09 Geometrijska srednja vrednost 1,00 1,15 1,18 Računalnik Primerjalni program R M Z Program 1 0,59 1,00 1,82 Program 2 0,84 1,00 1,00 Program 3 2,32 1,00 1,13 Program 4 0,90 1,00 0,54 Program 5 0,48 1,00 1,00 Geometrijska srednja vrednost 0,87 1,00 1,02 10 Zmogljivost računalnikov Z uporabo geometrične srednje vrednosti je najpočasnejši računalnik R, ne glede na to, kateri računalnik se uporablja za normalizacijo. 2.6 Ocenjevanje zmogljivosti računalnikov (6/7) Da bi si razjasnili rezultate prejšnje naloge, si poglejmo preprostejši primer [1]. Računalnik Primerjalni program X Y Z 1 20 10 40 2 40 80 20 a) Izračunajte aritmetično srednjo vrednost za vsak sistem ob uporabi računal- nika X za referenčni sistem in nato ob uporabi računalnika Y za referenčni sistem. Argumentirajte, da imajo vsi trije računalniki intuitivno približno ekvivalentne zmogljivosti in da aritmetična srednja vrednost daje zavajajoče rezultate. b) Izračunajte geometrično srednjo vrednost za vsak sistem ob uporabi računal- nika X za referenčni sistem in nato ob uporabi računalnika Y za referenčni sistem. Argumentirajte, da so rezultati bolj realistični kot z uporabo aritme- tične srednje vrednosti. Rešitev: a) Normalizirano na računalnik X: Računalnik Primerjalni program X Y Z 1 1 2,0 0,5 2 1 0,5 2,0 Aritmetična srednja vrednost 1 1,25 1,25 Geometrijska srednja vrednost 1 1 1 Normalizirano na računalnik Y: Računalnik Primerjalni program X Y Z 1 0,5 1 0,25 2 2,0 1 4,0 Aritmetična srednja vrednost 1,25 1 2,125 Geometrijska srednja vrednost 1 1 1 Računalnik Y je dvakrat hitrejši od računalnika X za primerjalni program 1, toda samo pol toliko hiter za primerjalni program 2. Podobno je računalnik Z pol toliko močan kot X za primerjalni test 1, vendar dvakrat hitrejši za pri- merjalni test 2. Intuitivno imajo ti trije računalniki ekvivalentne zmogljivosti. Zmogljivost računalnikov 11 Vendar pa, če normaliziramo na X in računamo aritmetično srednjo vrednost hitrostne metrike, ugotovimo, da sta Y in Z 25 % hitrejša kot X. Če zdaj nor- maliziramo na Y in izračunamo aritmetično srednjo vrednost metrike hitrosti, ugotovimo, da je X 25 % hitrejši od Y in Z je več kot dvakrat hitrejši od Y. Očitno je, da je aritmetična srednja vrednost v tem kontekstu brez vrednosti. b) Če uporabimo geometrijsko srednjo vrednost, se izkaže, da imajo trije računal- niki enako zmogljivost, kadar normaliziramo na X, in tudi enako zmogljivost, če normaliziramo na Y. Ti rezultati so mnogo bolj v skladu z našimi pričakovanji. 2.7 Ocenjevanje zmogljivosti računalnikov (7/7)* Zamislimo si, da se v nekem programu izvede dva milijona ukazov na procesorju s frekvenco ure 400 MHz. Program je sestavljen iz štirih glavnih tipov ukazov. Ukazna mešanica in števila urinih ciklov na ukaz (CPI) za vsak tip ukazov so podani v spodnji tabeli: Tip ukaza CPI Ukazna mešanica (%) Aritmetični in logični 1 60 Dostop do predpomnilnika (cache hit) 2 18 Vejanje 4 12 Dostop do pomnilnika (cache miss) 8 10 Podobno kot v nalogi 2.1 lahko tudi za izvajanje tega programa hitro izračunamo, da je CPI = 2,24 in zmogljivost v MIPS = 178. Zdaj predpostavimo, da je lahko program izvajan v osmih sočasnih opravilih ali nitih, kjer se v vsakem opravilu izvede približno enako število ukazov. Izvajanje poteka na osemjedrnem sistemu, kjer ima vsako jedro (procesor) enako zmogljivost kot en sam procesor, ki je bil uporabljen sprva. Koordinacija in sinhronizacija med opravili privedeta do dodatnih 25.000 izvedenih ukazov za vsako opravilo. Predpostavite enako ukazno množico za vsako opravilo kot v primeru enega samega procesorja, povečajte pa CPI za dostope do pomnilnika ob zgrešitvi predpomnilnika na 12 urinih ciklov zaradi tekme za pomnilnik [1]. a) Določite povprečni CPI. b) Določite ustrezno zmogljivost v MIPS. c) Izračunajte pohitritev. d) Primerjajte dejansko pohitritev s teoretično pohitritvijo, določeno z Amdahlo- vim zakonom. Rešitev: a) Ob predpostavki enake ukazne mešanice to pomeni, da se dodatni ukazi za vsako opravilo razporedijo sorazmerno med posamezne tipe ukazov. Imamo torej naslednjo tabelo: 12 Zmogljivost računalnikov Tip ukaza CPI Ukazna mešanica (%) Aritmetični in logični 1 60 Dostop do predpomnilnika (cache hit) 2 18 Vejanje 4 12 Dostop do pomnilnika (cache miss) 12 10 CP I = 0,6 + 2 · 0,18 + 4 · 0,12 + 12 · 0,1 = 2,64 Število CPI se je povečalo zaradi povečanega časa za dostop do pomnilnika. b) 400 zmogljivost v MIPS = ≈ 152 2,64 Zmogljivost v MIPS je zaradi povečanega CPI ustrezno padla. c) Pohitritev je razmerje časov izvajanja. Za primer z enim samim procesorjem je čas izvajanja enak I 6 2 · 10 T C 1 6 = (zmogljivost v MIPS) × 10 178 · 10 6 = = 11 ms. V primeru z osmimi procesorji vsak procesor izvaja 1/8 od dveh milijonov uka- zov, poleg tega pa še 25.000 režijskih ukazov. V primeru z osmimi paralelnimi procesorji je čas izvajanja za vsakega izmed osmih procesorjev enak 2 6 · 10 6 + 0 , 025 · 10 T 8 8 6 = = 1,8 ms. 152 · 10 Pohitritev S znaša torej S čas za izvedbo programa na enem samem procesorju 11 = = = 6,11. čas za izvedbo programa na 8 paralelnih procesorjih 1 , 8 d) Odgovor na to vprašanje je odvisen od tega, kako razlagamo Amdahlov zakon. V sistemu z več procesorji sta dve neučinkovitosti. Prvič, za koordinacijo med nitmi so potrebni dodatni ukazi. Drugič, obstaja tekmovanje za dostop do pomnilnika. Glede na to, kako je problem postavljen, noben del kode ni sam po sebi serijski. Vsa koda se da paralelizirati, vendar z dodatno režijo za razporejanja. Lahko bi trdili, da konflikt pri dostopu do pomnilnika pomeni, da do neke mere ukazov za dostop do pomnilnika ni mogoče paralelizirati. Ni pa jasno, kako ovrednotiti ta učinek v Amdahlovi enačbi. Če predpostavimo, da je del kode, ki ga je mogoče paralelizirati, f = 1, potem po Amdahlovem zakonu za naš primer dobimo S = = 8. 1 1 1 − 1 + 8 Tako je dejanska pohitritev zgolj okrog 6,11 = 76 % teoretične pohitritve. 8 Zmogljivost računalnikov 13 2.8 Amdahlov zakon (1/4) Na kolikojedrnem procesorju bi morali izvajati program, v katerem se dˆ a 90 % kode poljubno paralelizirati, da bi dobili faktor pohitritve 5 v primerjavi z izvajanjem istega programa na enojedrnem procesorju? Rešitev: Iz splošne enačbe Amdahlovega zakona izrazimo N ter v izraz vstavimo vrednosti f = 0,9 in S = 5. S = f 1 1 − f + N f S(1 − f + ) = 1 N f 1 1 − f + = N S f 1 = − 1 + f N S N = = = = 9 1 1 − f 0,9 0,9 S 1 + f − 1 + 0,9 0,1 5 Program bi morali izvajati na devetjedrnem procesorju, da bi pri f = 0,9 dobili petkratno pohitritev v primerjavi z izvajanjem istega programa na enojedrnem pro-cesorju. 2.9 Amdahlov zakon (2/4) Najmanj na kolikojedrnem procesorju bi morali izvajati program, v katerem se dˆ a 80 % kode poljubno paralelizirati, da bi dobili dvakrat večjo pohitritev kot pri dvo-jedrnem procesorju? Rešitev: Najprej zapišemo dve enačbi Amdahlovega zakona, eno za primer z N procesorji in drugo za primer z dvema procesorjema. Nato izrazimo razmerje SN , ki ga izenačimo S 2 z vrednostjo 2. Nazadnje iz dobljene enačbe izrazimo N in ga izračunamo. SN = , S2 = f f 1 1 1 − f + 1 − f + N 2 S f 1 − f + N 2 = = 2 S f 2 1 − f + N 2f f 2 − 2f + = 1 − f + N 2 2f f 3f = 1 − f + − 2 + 2f = − 1 N 2 2 N = = = = 8 3 f 3 · 0 , 8 − 2f 2 · 0,8 1,6 2 1 − 1 1,2 − 1 2 14 Zmogljivost računalnikov Da bi pri f = 0,8 dobili dvakrat večjo pohitritev kot pri dvojedrnem procesorju, bi morali program izvajati na osemjedrnem procesorju. 2.10 Amdahlov zakon (3/4)* Vaše podjetje je pravkar kupilo novi Intel Core i5 dvojedrni procesor in dobili ste nalogo optimizirati vašo programsko opremo za ta procesor. Na tem dvojedrnem procesorju boste izvajali dve aplikaciji, vendar njuni zahtevi po virih nista enaki. Prva aplikacija zahteva 80 % virov, druga pa samo 20 % virov. Predpostavite, da kadar paralelizirate del programa (to pomeni, da ga izvajate na dveh jedrih), je pohitritev za ta del enaka 2 [2]. a) Če je mogoče 40 % prve aplikacije paralelizirati, kolikšno pohitritev bi dosegli, če bi izvajali samo njo? b) Če je mogoče 99 % druge aplikacije paralelizirati, kolikšno pohitritev bi dosegli, če bi izvajali samo njo? c) Če je mogoče 40 % prve aplikacije paralelizirati, kolikšno celotno pohitritev sistema bi dosegli, če jo paralelizirate? d) Če je mogoče 99 % druge aplikacije paralelizirati, kolikšno celotno pohitritev sistema bi dosegli, če jo paralelizirate? Rešitev: a) Pohitritev S izolirano izvajane prve aplikacije je: S = = 1,25 0 , 4 0 1 ,6 + 2 b) Pohitritev S izolirano izvajane druge aplikacije je: S = = 1,98 0 , 99 0 1 ,01 + 2 c) Pohitritev S celotnega sistema (hkrati se izvajata obe aplikaciji) s paralelizi- ranim izvajanjem prve aplikacije je: S = = = 1,19 0 , 4 0 1 1 ,2 + 0,8 · (0,6 + ) 0,2 + 0,8 · 0,8 2 d) Pohitritev S celotnega sistema (hkrati se izvajata obe aplikaciji) s paralelizi- ranim izvajanjem druge aplikacije je: S = = = 1,11 0 , 99 0 1 1 ,8 + 0,2 · (0,01 + ) 0,8 + 0,2 · 0,505 2 Zmogljivost računalnikov 15 2.11 Amdahlov zakon (4/4)* Ko paraleliziramo aplikacijo, jo pohitrimo z večanjem števila procesorjev. To je omejeno z dvojim: deležem oziroma odstotkom aplikacije, ki se lahko paralelizira, in ceno komunikacije. Amdahlov zakon upošteva prvo omejitev, druge pa ne [2]. a) Kolikšna je pohitritev z N procesorji, če je 80 % aplikacije mogoče paralelizirati in zanemarimo ceno komunikacije? b) Kolikšna je pohitritev z osmimi procesorji, če je za vsak dodani procesor režija za komunikacijo 0,5 % originalnega časa izvajanja? c) Kolikšna je pohitritev z osmimi procesorji, če se vsakokrat, ko se število pro- cesorjev podvoji, režija za komunikacijo poveča za 0,5 % originalnega časa izvajanja? d) Kolikšna je pohitritev z N procesorji, če se vsakokrat, ko se število procesorjev podvoji, režija za komunikacijo poveča za 0,5 % originalnega časa izvajanja? e) Napišite splošno enačbo, ki reši naslednje vprašanje. Kolikšno je število pro- cesorjev z največjo pohitritvijo v aplikaciji, v kateri se dâ P % originalnega izvajalnega časa paralelizirati, in se vsakokrat, ko se število procesorjev pod- voji, režija za komunikacijo poveča za 0,5 % originalnega časa izvajanja? Rešitev: a) Pohitritev S z N procesorji je: S = 0,8 0 1 ,2 + N b) Pohitritev S z osmimi procesorji je: S = = = 2,94 0 , 8 0 1 1 ,2 + 8 · 0,005 + 0,2 + 0,04 + 0,1 8 c) Število procesorjev se podvoji trikrat: ko dodamo drugega, četrtega in osmega. Režija za komunikacijo je zato enaka 3 ·0,005. Pohitritev S z osmimi procesorji tako znaša: S = = = 3,17 0 , 8 0 1 1 ,2 + 3 · 0,005 + 0,2 + 0,015 + 0,1 8 d) Pri N procesorjih pride do podvojitve števila procesorjev takrat, ko je N > 1 in log N S 2 potenca števila 2. Pohitritev z osmimi procesorji je: S = 0,8 0 1 ,2 + 0,005 · log N + 2 N e) V aplikaciji se dâ P % originalnega izvajalnega časa paralelizirati, ostane torej (1 − P ) % originalnega izvajalnega časa, ki se ga ne dâ paralelizirati. Režijo za komunikacijo izrazimo tako kot v točki d). Do števila procesorjev, pri katerem 16 Zmogljivost računalnikov imamo največjo pohitritev, pridemo tako, da izraz za pohitritev odvajamo po N in odvod izenačimo z 0. ! dN S = = 0 P dN d d 1 (1 − P ) + 0,005 · log N + 2 N Iz dobljenega izraza izračunamo optimalni N , pri katerem je pohitritev najve- čja. Komunikacija med glavnimi komponentami računalnika 17 3 Komunikacija med glavnimi komponentami raču- nalnika 3.1 Obseg pomnilniškega naslovnega prostora Nek 16-bitni mikroprocesor ima 23 naslovnih linij. Izračunajte njegov pomnilniški naslovni prostor v megabajtih (MB). Koliko 16-bitnih besed je mogoče shraniti v njegov pomnilnik [3]? Rešitev: Pomnilniški naslovni prostor je enak 223 = 8.388.608 bajtov = 8 MB. Za hranjenje 16-bitne besede potrebujemo dvobajtne lokacije. Če je mikroprocesor opremljen s ce-lotnim pomnilnikom, ki ga lahko naslavlja, lahko vanj shranimo 8.388.608 = 4.194.304 2 16-bitnih besed. 3.2 Obseg V/I naslovnega prostora Naslovno vodilo 16-bitnega mikroprocesorja je sestavljeno iz 23 linij. Za naslavlja-nje V/I lokacij uporablja samo 16 spodnjih naslovnih linij. Izračunajte obseg V/I naslovnega prostora te CPE. Kateri je najvišji V/I naslov [3]? Rešitev: Ker je za V/I operacije uporabljenih le 16 naslovnih linij, obsega V/I naslovni prostor 216 = 65.536 bajtov (B) oziroma 64 kilobajtov (KB). Najvišji V/I naslov, ki ga CPE lahko doseže, je 65.536 − 1 = 65.535. Najnižji V/I naslov je, seveda, 0. 3.3 Vpliv širine vodil na hitrost sistema Zamislite si hipotetični 32-bitni mikroprocesor, ki ima 32-bitne ukaze, sestavljene iz dveh polj: prvi bajt vsebuje operacijsko kodo, preostali pa sprotni operand ali naslov operanda [1]. a) Koliko pomnilnika je mogoče neposredno nasloviti (v bajtih)? b) Komentirajte vpliv na hitrost sistema, če ima mikroprocesorsko vodilo 1. 32-bitno lokalno naslovno vodilo in 16-bitno lokalno podatkovno vodilo ali 2. 16-bitno lokalno naslovno vodilo in 16-bitno lokalno podatkovno vodilo. c) Koliko bitov je potrebnih za programski števnik in ukazni register? Rešitev: a) Neposredno je mogoče nasloviti 224 = 16 MB pomnilnika. b) 1. Če je lokalno naslovno vodilo 32-bitno, se lahko celoten naslov prenese k pomnilniku naenkrat. Ker pa je podatkovno vodilo samo 16-bitno, bosta potrebna dva cikla za včitanje 32-bitnega ukaza ali operanda. 18 Komunikacija med glavnimi komponentami računalnika 2. 16 bitov naslova, postavljenega na naslovno vodilo, ne more doseči celo- tnega pomnilnika. Zato potrebujemo bolj obsežen vmesnik pomnilnika, ki bo zadržal prvi del naslova in nato še drugega (mikroprocesor mora na-praviti dva dostopa). Za 32-bitni naslov lahko predpostavimo, da bomo s prvo polovico naslova dekodirali „vrstico“ v pomnilniku, kasneje pa z drugo polovico naslova „stolpec“ v pomnilniku. Poleg „dvokoračnega“ de-lovanja naslovov bo moral mikroprocesor opraviti dva cikla za včitanje 32-bitnega ukaza ali operanda. c) Programski števnik mora biti vsaj 24-bitni. Navadno ima 32-bitni mikroproce- sor 32-bitno zunanje naslovno vodilo in 32-bitni programski števnik, razen če se v čipu uporabljajo segmentni registri, ki lahko delajo z manjšim program- skim števnikom. Če naj ukazni register vsebuje celoten ukaz, mora biti dolg 32 bitov. Če bo vseboval samo operacijsko kodo, mora biti dolg 8 bitov. 3.4 Pomnilniški in V/I naslovni prostor Zamislite si hipotetični mikroprocesor, ki generira 16-bitne naslove (predpostavite, da so programski števnik in naslovni registri 16-bitni) in ima 16-bitno podatkovno vodilo [1]. a) Koliko znaša maksimalna velikost pomnilniškega naslovnega prostora, ki ga lahko procesor neposredno doseže, če je povezan s „16-bitnim pomnilnikom“? b) Koliko znaša maksimalna velikost pomnilniškega naslovnega prostora, ki ga lahko procesor neposredno doseže, če je povezan z „8-bitnim pomnilnikom“? c) Katera arhitekturna značilnost bi mikroprocesorju omogočala dostop do loče- nega V/I prostora? d) Koliko 8-bitnih V/I vrat lahko mikroprocesor podpira, če lahko vhodni in izhodni ukaz specificirata 8-bitno številko V/I vrat? Koliko pa lahko podpira 16-bitnih V/I vrat? Rešitev: a) Mikroprocesor lahko neposredno doseže 216 = 64 KB pomnilnika. Med dosto- pom lahko prenese 16-bitno besedo ali en bajt. b) Mikroprocesor lahko neposredno doseže 216 = 64 KB pomnilnika. Med dosto- pom lahko prenese en bajt. c) Mikroprocesor bi potreboval posebna ukaza za branje iz V/I lokacije in za pisanje na V/I lokacijo, katerih izvajanje bi generiralo posebni krmilni signal (npr. M/IO*), ki bi označeval, ali želi mikroprocesor dostopiti do pomnilnika ali V/I lokacije. Mikroprocesor bi potreboval najmanj en dodaten izhodni priključek. d) Mikroprocesor lahko podpira 28 = 256 vhodnih in 28 = 256 izhodnih 8-bitnih vrat ter prav toliko 16-bitnih vhodnih in izhodnih vrat. Komunikacija med glavnimi komponentami računalnika 19 3.5 V/I modul za nadzor teleprinterja Zamislite si računalniški sistem, ki vsebuje V/I modul za nadzor teleprinterja s preprosto tipkovnico in tiskalnikom. V V/I modulu so naslednji registri, ki so nepo-sredno povezani na sistemsko vodilo: INPR: Input Register, 8 bitov, OUTR: Output Register, 8 bitov, FGI: Input Flag, 1 bit, FGO: Output Flag, 1 bit, IEN: Interrupt Enable, 1 bit. V/I modul nadzira pritiske na tipke tipkovnice in izpise na tiskalnik teleprinterja. Teleprinter je sposoben zakodirati alfanumerične simbole v 8-bitno besedo in deko- dirati 8-bitno besedo v alfanumerični simbol [1]. a) Opišite, kako procesor z uporabo prvih štirih navedenih registrov upravlja V/I prenose na teleprinterju? b) Opišite, kako je mogoče funkcijo izvajati učinkoviteje z uporabo IEN. Rešitev: a) Vnos s tipkovnice teleprinterja se shrani v register INPR. INPR bo sprejel podatek iz teleprinterja, ko je zastavica FGI=0. Ko podatek prispe, se shrani v INPR, FGI pa se postavi na 1. CPE periodično preverja FGI. Če je FGI =1, CPE prenese vsebino registra INPR v akumulator AC in zbriše FGI na 0. Ko ima CPE podatek za pošiljanje na teleprinter, preveri zastavico FGO. Če je FGO = 0, mora CPE počakati. Če je FGO = 1, CPE prenese vsebino iz akumulatorja AC v register OUTR in zbriše zastavico FGO na 0. Teleprinter postavi zastavico FGI na 1, ko je beseda natisnjena. b) Proces, opisan v točki a), je zelo potraten. CPE, ki je veliko hitrejša od tele- printerja, mora vedno znova preverjati zastavici FGI in FGO. Če se uporabljajo prekinitve, lahko teleprinter sproži prekinitev k CPE, kadarkoli je pripravljen sprejeti ali poslati podatek. 3.6 Trajanje strojnega cikla mikroprocesorja Mikroprocesor je poganjan z uro frekvence 5 MHz. Kako dolg je urin cikel? Koliko časa traja nek tip strojnega cikla, sestavljen iz treh urinih ciklov [3]? Rešitev: Perioda ure T je enaka 1 , kjer je f frekvenca ure. Iz tega sledi, da je trajanje urinega f cikla 1 −6 6 = 0 , 2 · 10 s = 200 ns 5 ·. Trajanje strojnega cikla s tremi urinimi cikli je 10 3T = 3 · 200 ns = 600 ns . 3.7 Podvojitev širine vodila proti podvojitvi frekvence ure Zamislite si 32-bitni mikroprocesor s 16-bitnim zunanjim podatkovnim vodilom, ki ga poganja ura s frekvenco 8 MHz. Predpostavite, da cikel na vodilu tega mikro-procesorja znaša najmanj štiri urine cikle. Koliko znaša najvišja hitrost prenosa 20 Komunikacija med glavnimi komponentami računalnika podatkov prek vodila v bajtih na sekundo, ki jih zmore mikroprocesor? Ali bi bilo za povečanje zmogljivosti bolje podvojiti širino zunanjega podatkovnega vodila na 32 bitov ali podvojiti frekvenco ure mikroprocesorja? Komentirajte, kakšne spre-membe bi zahtevala ena ali druga odločitev. Namig: Določite število bajtov, ki se lahko prenesejo v enem ciklu na vodilu [1]. Rešitev: En urin cikel (perioda ure) traja τ = 1/(8 MHz) = 125 ns. Najkrajši možni cikel na vodilu traja 4 · 125 ns = 500 ns. Ker je vodilo 16-bitno, se v 500 ns prek vo-dila preneseta 2 bajta. V 1 sekundi se prek vodila prenese (2 B)/(500 ns) = 4 MB podatkov. Najvišja hitrost prenosa podatkov je tako enaka 4 MB/s. Tako podvoji-tev širine zunanjega podatkovnega vodila kot podvojitev frekvence ure bi podvojila najvišjo dosegljivo hitrost prenosa podatkov prek vodila. Podvojitev frekvence ure bi lahko pomenila potrebo po uporabi druge polprevodniške tehnologije pri izdelavi čipa (predpostavimo, da bi vsak ukaz trajal enako število urinih ciklov kot v čipu z originalno tehnologijo). Podvojitev širine zunanjega podatkovnega vodila bi pome-nila podvojitev števila gonilnikov in zadrževalnikov podatkovnega vodila v samem čipu in spremembe pri krmilni logiki vodila. V prvem primeru bi se morala tudi hitrost pomnilnika (približno) podvojiti, da pomnilnik ne bi upočasnjeval mikropro-cesorja. V drugem primeru bi se morala podvojiti dolžina besede pomnilnika, da bi pomnilnik lahko sprejemal in pošiljal 32-bitne besede. 3.8 Propustnost vodila za 8- in 16-bitni mikroprocesor Imamo dva mikroprocesorja, ki imata 8- in 16-bitno zunanje podatkovno vodilo. Sicer sta obe CPE identični in imata enako dolge cikle na vodilu. Predpostavite, da so vsi ukazi in operandi dolgi dva bajta. Za kakšen faktor se razlikujeta njuni propustnosti vodila? Kaj pa, če je 50 % operandov in ukazov enobajtnih [3]? Rešitev: V enem ciklu na vodilu prenese 8-bitni mikroprocesor samo en bajt, 16-bitni pa dva. Torej ima 16-bitni mikroprocesor dvakrat večjo propustnost vodila. Zamislimo si 100 ukazov (in/ali operandov), od katerih jih je 50 dolgih en bajt in 50 dva bajta. 8-bitni mikroprocesor zahteva za njihov prenos 2 · 50 + 50 = 150 ciklov na vodilu. 16-bitni mikroprocesor zahteva 50 + 50 = 100 ciklov na vodilu. Njuni propustnosti vodila se zdaj razlikujeta samo za faktor 1,5. 3.9 Cikli na vodilu za 16- in 32-bitni mikroprocesor Zamislite si 32-bitni mikroprocesor, katerega cikel na vodilu traja enako dolgo kot cikel na vodilu 16-bitnega mikroprocesorja. Predpostavite, da je v povprečju 20 % operandov in ukazov dolgih 32 bitov, 40 % jih je dolgih 16 bitov in 40 % jih je dolgih le 8 bitov. Izračunajte doseženo izboljšanje, če včitujete ukaze in operande z 32-bitnim mikroprocesorjem [1]. Rešitev: Zamislimo si mešanico 100 ukazov in operandov. V povprečju je sestavljena iz 20 32-bitnih besed, 40 16-bitnih besed in 40 bajtov. Število potrebnih ciklov na vodilu za 16-bitni mikroprocesor je 2 · 20 + 40 + 40 = 120. Za 32-bitni mikroprocesor je Komunikacija med glavnimi komponentami računalnika 21 potrebnih 20 + 40 + 40 = 100 ciklov na vodilu. Doseženo izboljšanje v odstotku zmanjšanja potrebnih ciklov na vodilu pri uporabi 32-bitnega procesorja namesto 16-bitnika znaša (120 − 100)/120 = 17 %. 3.10 Pomnilniški bralni cikel na sinhronem vodilu (1/2) Nek mikroprocesor ima sinhrono vodilo s takšnim časovnim potekom pomnilniškega bralnega cikla, kot je prikazan na spodnji sliki. Pri operaciji branja na sinhronem vodilu mora pomnilniški modul postaviti podatek na vodilo dovolj časa pred negativno fronto signala READ, da se signali na podat-kovnem vodilu že umirijo. Ob negativni fronti ure v T2 CPE testira vhodni signal READY, da se prepriča, ali bo podatek iz pomnilnika na voljo pred koncem T3. Če je vrednost signala READY takrat visoka, je to zagotovilo, da bo podatek iz 22 Komunikacija med glavnimi komponentami računalnika pomnilnika na voljo pravočasno in CPE lahko vstopi v stanje T3. Če je vrednost signala READY ob testiranju nizka, CPE ne sme vstopiti v stanje T3, pač pa mora strojni cikel podaljšati z vstavitvijo čakalnega stanja TW. Če še to ne zadostuje, mora CPE vriniti dodatna čakalna stanja. Predpostavite, da ima mikroprocesor uro frekvence 10 MHz in da ima signal READ negativno fronto v sredini druge polovice periode T3 [3]. a) Izračunajte dolžino pomnilniškega bralnega cikla. b) Koliko časa po začetku cikla CPE preverja linijo READY? c) Kdaj najpozneje mora biti pomnilniški podatek postavljen na vodilo? Upošte- vajte 20 ns za umiritev podatkovnih linij. Ignorirajte čase vzpona in padca signalov. Rešitev: a) Pri frekvenci ure 10 MHz znaša perioda ure 100 ns. Dolžina pomnilniškega bralnega cikla je 3 · 100 = 300 ns. b) CPE testira linijo READY v sredini T2, ki je 150 ns oddaljena od začetka strojnega cikla. c) Negativna fronta signala READ nastopi 100 + 100 + 75 = 275 ns po začetku strojnega cikla (v sredini druge polovice periode T3). Da bi se signali na podatkovnem vodilu lahko umirili, mora pomnilnik postaviti podatek na vodilo vsaj 275−20 = 255 ns po začetku cikla ali z drugimi besedami najpozneje 55 ns po prvi fronti T3. 3.11 Pomnilniški bralni cikel na sinhronem vodilu (2/2) Zamislite si mikroprocesor, ki ima takšen potek pomnilniškega bralnega cikla, kot je prikazan na sliki pri nalogi 3.10. Po nekaj analizah načrtovalec ugotovi, da pomnil- nik zamuja s pravočasnim zagotavljanjem prebranega podatka za okrog 180 ns [3]. a) Koliko čakalnih stanj (urinih ciklov) se mora vstaviti za pravilno delovanje sistema, če je frekvenca ure 8 MHz? b) Za vrivanje čakalnih stanj se uporablja vhodna statusna linija READY mikro- procesorja. Ko procesor izda ukaz READ za branje, mora s poskusom branja podatka počakati vse dotlej, dokler se ne aktivira (postavi) linija READY. Znotraj katerega časovnega intervala moramo držati linijo READY v nizkem stanju, da prisilimo procesor k vstavitvi zahtevanega števila čakalnih stanj? Rešitev: a) Perioda ure je 1/(8 MHz) = 125 ns, torej vsako čakalno stanje podaljša pomnil- niški bralni cikel za 125 ns. Ker moramo podaljšati pomnilniški bralni cikel za 180 ns, moramo vstaviti dva urina cikla. To dejansko podaljša cikel branja za 250 ns in ostane rezerva 250 − 180 = 70 ns. Komunikacija med glavnimi komponentami računalnika 23 b) Da bi prisilili CPE k vstavitvi dveh čakalnih stanj, moramo spraviti READY v nizko stanje pred negativno fronto T2. Od tam naprej moramo držati READY v nizkem stanju do negativne fronte prvega čakalnega stanja. Negativna fronta T2 se pojavi 125 + 62,5 = 187,5 ns od začetka strojnega cikla. Negativna fronta prvega stanja TW se pojavi 187,5 + 125 = 312,5 ns od začetka strojnega cikla. READY mora zavzeti nizko stanje malenkost pred točko 187,5 ns (set-up time) in na njem ostati malenkost za točko 312,5 ns (hold time). 3.12 Pomnilniški pisalni cikel na sinhronem vodilu Nek mikroprocesor ima takšen potek pisanja v pomnilnik, kot je prikazan na spodnji sliki. Njegov proizvajalec specificira, da je širina signala WRITE določena z izrazom T − 50 , kjer je T perioda ure v ns [3]. a) Kolikšno širino signala WRITE lahko pričakujemo, če ima ura frekvenco 5 MHz? b) V priročniku za mikroprocesor je podano, da ostanejo podatki veljavni še 20 ns po negativni fronti signala WRITE. Koliko časa skupno je na vodilu veljaven podatek? c) Koliko čakalnih stanj moramo vstaviti, če pomnilnik zahteva veljavnost po- datka na vodilu vsaj 190 ns? Rešitev: a) Ura frekvence 5 MHz ustreza periodi 200 ns. Iz tega sledi, da je pričakovana širina signala WRITE 200 − 50 = 150 ns. b) Podatek ostane na vodilu veljaven 150 + 20 = 170 ns. c) Če pomnilnik zahteva veljavnost podatka na vodilu najmanj 190 ns, moramo vstaviti eno čakalno stanje. To poveča interval prisotnosti veljavnega podatka na vodilu na 170 + 200 = 370 ns. 24 Komunikacija med glavnimi komponentami računalnika 3.13 Vrivanje čakalnih stanj v ukazni cikel ukaza INC Nek mikroprocesor ima ukaz (INC) za neposredno inkrementiranje pomnilniške lo-kacije, ki prišteje 1 k vrednosti v pomnilniški lokaciji. Ukaz ima pet faz: včitanje operacijske kode (štirje urini cikli na vodilu), včitanje naslova operanda (trije cikli), včitanje operanda (trije cikli), prištevanje vrednosti 1 k operandu (trije cikli) in shranitev rezultata (trije cikli). Časovni potek ukaznega (inštrukcijskega) cikla je prikazan spodaj [1]. a) Za koliko odstotkov se bo podaljšal ukazni cikel, če moramo v vsak pomnilniški bralni ali pomnilniški pisalni cikel na vodilu vstaviti dve čakalni stanji? b) Izračun ponovite ob predpostavki, da operacija inkrementiranja namesto treh ciklov traja 13 ciklov. Rešitev: a) Brez čakalnih stanj traja ukazni cikel 16 urinih ciklov. Ukaz zahteva štiri dostope do pomnilnika, kar pomeni osem čakalnih stanj. Ukazni cikel skupaj s čakalnimi stanji traja 24 urinih ciklov, torej se je podaljšal za 50 %. b) V tem primeru bi ukazni cikel trajal 26 urinih ciklov brez čakalnih stanj in 34 ciklov s čakalnimi stanji, kar pomeni povečanje za 31 %. 3.14 Čas izvajanja ukaza INC Za mikroprocesor iz primera 3.13 predpostavite frekvenco ure 8 MHz. Koliko traja včitavanje in izvajanje inštrukcije INC? Koliko je največje število inštrukcij INC, ki jih CPE lahko izvede na sekundo [3]? Rešitev: Celotna dolžina ukaznega cikla je 16 urinih ciklov. Urin cikel traja 1 6 = 125 ns. 8 · 10 Tako traja celoten ukazni cikel 16 · 125 = 2.000 ns = 2 µs. Naša hipotetična CPE lahko izvede do 1−6 = 500.000 ukazov INC na sekundo. 2 · 10 Komunikacija med glavnimi komponentami računalnika 25 3.15 Vpliv vrivanja čakalnih stanj na dolžino ukaznega cikla Spomnimo se spet ukaznega cikla ukaza INC iz primera 3.13. Za koliko odstotkov se poveča dolžina cikla, če moramo v vsak cikel na vodilu vstaviti dvoje čakalnih stanj? Ponovite izračun ob predpostavki, da strojni cikel za notranje operacije traja 51 urinih ciklov [3]. Rešitev: Normalno traja ukazni cikel 16 stanj T. Dodatek dveh čakalnih stanj v bralni in pisalni strojni cikel poveča dolžino ukaznega cikla za osem stanj T, kar znaša 50 %. Če predpostavimo 51 stanj T za cikel notranjih operacij, postane normalna dolžina ukaznega cikla 64 stanj T. Zdaj predstavlja osem čakalnih stanj povečanje samo za 8 = 0,125, to je za 12,5 %. 64 Ta primer kaže, kako je negativni vpliv dodajanja čakalnih stanj odvisen od dolžine cikla notranjih operacij. Nekateri aritmetični ukazi (množenje, deljenje) imajo dolge cikle z notranjimi operacijami. V aplikacijah z mnogimi računskimi operacijami je vpliv relativno majhen. Po drugi strani pa je lahko v aplikacijah, kjer CPE porabi večino svojega časa za premikanje podatkov, vpliv zelo velik. 3.16 Generiranje prekinitve med izvajanjem ukaza INC Mikroprocesor pri nalogi 3.13 začne fazo včitavanja operanda ukaza za neposredno inkrementiranje pomnilnika v tistem trenutku, ko tipkovnica aktivira linijo za zah-tevo po prekinitvi. Po kolikšnem času procesor vstopi v procesiranje prekinitve? Predpostavite uro frekvence 10 MHz [3]. Rešitev: V trenutku, ko tipkovnica sproži zahtevo po prekinitvi, potrebuje procesor še devet urinih ciklov do zaključitve izvajanja ukaza. Procesiranje prekinitve se bo torej začelo po preteku 9 · 100 = 900 ns. 3.17 Prekinitve pri prekinljivih in neprekinljivih ukazih Nek mikroprocesor ima ukaz za premikanje niza bajtov z enega področja pomnil-nika v drugo. Včitavanje in dekodiranje ukaza traja deset urinih ciklov. Nato prenos vsakega bajta traja 15 urinih ciklov. Izračunajte dolžino ukaznega cikla za primer niza dolžine 64 bajtov, če je mikroprocesor poganjan z 10 MHz. Koliko znaša najve-čja možna zakasnitev odziva na prekinitev, če ukaza ni mogoče prekiniti? Ponovite izračun za primer, če se ukaz lahko prekine na začetku vsakega prenosa bajta [3]. Rešitev: Dolžina urinega cikla za dano frekvenco ure je 100 ns. Zaradi tega je dolžina uka-znega cikla (10 + 15 · 64) · 100 = 97 µs. Če ukaza ni mogoče prekiniti, znaša največja možna zakasnitev odziva na prekinitev 97 µs. Če pa je ukaz mogoče prekiniti tik pred začetkom vsakega prenosa bajta, znaša zgornja zakasnitev le 15 · 100 = 1,5 µs. 26 Komunikacija med glavnimi komponentami računalnika 3.18 Največja možna zakasnitev potrditve zahteve za vodilo Najdaljši strojni cikel CPE traja pet urinih ciklov. Določite največjo možno zaka- snitev potrditve zahteve za vodilo, če je CPE poganjana z uro frekvence 5 MHz [3]. Rešitev: Do največje zakasnitve pride, če se zahteva za vodilo pojavi natanko po začetku strojnega cikla dolžine petih urinih ciklov. Ker je perioda ure 200 ns, je zakasnitev enaka 5 · 200 = 1 µs. 3.19 Hitrost prenosa podatkov mikroprocesorja Intel 8088 Mikroprocesor Intel 8088 ima časovni potek pomnilniškega bralnega cikla, kot je pri- kazan na sliki pri nalogi 3.10, vendar pa zahteva štiri urine cikle. Veljaven podatek je na vodilu v časovnem intervalu, ki sega v četrti urin cikel. Predpostavite, da je mikroprocesor poganjan z uro frekvence 8 MHz [3]. a) Koliko znaša najvišja hitrost prenosa podatkov? b) Ponovite izračun ob predpostavki, da moramo vriniti eno čakalno stanje na vsak preneseni bajt. Rešitev: a) Perioda ure je 125 ns. En pomnilniški bralni cikel traja 500 ns = 0,5 µs. Če se cikli na vodilu ponavljajo eden za drugim, lahko dosežemo hitrost prenosa podatkov 1 B = 2 MB/s. 0 , 5 µ s b) Čakalno stanje podaljša cikel branja na vodilu za 125 ns in tako znaša 625 ns = 0,625 µs. Hitrost prenosa podatkov se je zmanjšala na 1 B = 1,6 MB/s. 0 , 625 µ s 3.20 Zapravljeni cikli pri včitavanju ukazov za Intel 8088 Predpostavite, da mikroprocesor Intel 8088 z ukazno vrsto dolžine štirih bajtov za včitavanje ukazov iz pomnilnika izvaja program, v katerem je verjetnost skoka (rezultat izvedbe ukaza za skok) 10 %. Zaradi enostavnosti še poenostavite, da so vsi ukazi dolgi dva bajta [3]. a) Kolik delež ciklov na vodilu za včitavanje ukazov je lahko zapravljen? b) Ponovite izračun, če bi bila ukazna vrsta dolga osem bajtov. Rešitev: a) Pojav programskega skoka pomeni, da so bili zaman porabljeni (torej zapra- vljeni) štirje cikli na vodilu (ustrezajo štirim bajtom, ki so že v ukazni vrsti, ko naletimo na ukaz za skok). Za 100 ukazov je število ciklov, ki na vodilu niso porabljeni zaman, v povprečju 90 · 2 = 180. Zaman porabljenih in torej zavrženih je lahko do 10 · 4 = 40 ciklov. Delež zavrženih ciklov je torej največ 40 = 18 % . 180 + 40 b) Če bi bila kapaciteta ukazne vrste dvakrat večja, bi bil delež zavrženih ciklov na vodilu lahko do 80 = 30 %. 180 + 80 Komunikacija med glavnimi komponentami računalnika 27 3.21 Liho uvrščene besede pri mikroprocesorju Intel 8086 Intel 8086 je 16-bitni mikroprocesor, medtem ko je mikroprocesor 8088 njegova 8-bitna različica. Mikroprocesor 8086 uporablja 16-bitno vodilo, ki lahko naenkrat prenese dva bajta, če je nižji bajt na sodem naslovu. 8086 omogoča tako sodo kot liho uvrščene besedne operande. Za dostop do liho uvrščene besede sta potrebna dva pomnilniška cikla (vsak je sestavljen iz štirih urinih ciklov) za prenos besede. Zamislite si ukaz mikroprocesorja 8086, ki vključuje dva 16-bitna operanda. Koliko časa je potrebnega, da se včitata oba operanda? Upoštevajte vse možnosti. Pred- postavite frekvenco ure 4 MHz in da ni čakalnih stanj [3]. Rešitev: Urin cikel znaša 0,25 µs, zato traja pomnilniški cikel 1 µs. Če sta oba operanda sodo uvrščena, traja včitanje obeh 2 µs. Če je eden izmed operandov uvrščen liho, drugi pa sodo, traja včitanje obeh 3 µs. Če sta oba operanda uvrščena liho, traja včitanje obeh 4 µs. 28 Komunikacija med glavnimi komponentami računalnika Predpomnilnik 29 4 Predpomnilnik 4.1 Izračun parametrov predpomnilnika (1/8) Set-asociativni predpomnilnik je sestavljen iz 64 linij, ki so razdeljene v sete po štiri linije. Glavni pomnilnik vsebuje 4K blokov, vsak blok pa ima 128 besed. Prikažite format naslovov glavnega pomnilnika [1]. Rešitev: Število setov v predpomnilniku 64 4 v = = 16 = 2, zato potrebujemo 4 bite za ozna-4 čitev številke seta. Glavni pomnilnik je sestavljen iz 4K = 212 blokov, zato za označitev številke bloka potrebujemo 12 bitov. Ti biti so sestavljeni iz bitov značke in bitov za izbiro seta. Ker imamo 4 bite za označitev seta, je polje z značko dolgo 12 − 4 = 8 bitov. Vsak blok je sestavljen iz 128 = 27 besed, zato potrebujemo 7 bitov za označitev besede. Naslov glavnega pomnilnika: ZNAČKA SET BESEDA 8 4 7 4.2 Izračun parametrov predpomnilnika (2/8) Dvakrat set-asociativni predpomnilnik ima linije dolge 16 bajtov in skupno velikost 8 KB. Glavni pomnilnik velikosti 64 MB je naslovljiv po bajtih. Prikažite format naslovov glavnega pomnilnika [1]. Rešitev: Skupno število linij v predpomnilniku 13 8 KB 2B 9 m = = 4 = 2 = 512. 16 B 2 B Skupno število setov v predpomnilniku 9 , zato za označitev seta v 2 8 = = 2 = 256 potrebujemo 8 bitov. 2 Glavni pomnilnik velikosti 26 64 MB = 2 B potrebuje 26-bitne naslove. Število blokov v glavnem pomnilniku = 26 64 MB 2B 22 = 4 = 2, zato za označitev šte-16 B 2 B vilke bloka potrebujemo 22 bitov. Ti biti so sestavljeni iz bitov značke in bitov za označitev seta. Ker imamo 8 bitov za označitev seta, je polje z značko dolgo 22 − 8 = 14 bitov. Linije so dolge 16 B = 4 2 B, zato potrebujemo 4 bite za označitev besede (bajta). Naslov glavnega pomnilnika: ZNAČKA SET BESEDA 14 8 4 30 Predpomnilnik 4.3 Izračun parametrov predpomnilnika (3/8) Za šestnajstiške pomnilniške naslove 11111116, 66666616 in BBBBBB16 prikažite naslednjo informacijo v šestnajstiški obliki [1]: a) Vrednost v poljih za značko, linijo in besedo za predpomnilnik z neposredno preslikavo in format naslovov s spodnje slike. ZNAČKA LINIJA BESEDA 8 14 2 b) Vrednost v poljih za značko in besedo za asociativni predpomnilnik in format naslovov s spodnje slike. ZNAČKA BESEDA 22 2 c) Vrednost v poljih za značko, set in besedo za dvakrat set-asociativni predpo- mnilnik in format naslovov s spodnje slike. ZNAČKA SET BESEDA 9 13 2 Rešitev: V spodnji tabeli so za vsako organizacijo predpomnilnika podani (šestnajstiški) po-mnilniški naslovi, zapisani po bitih v dvojiškem številskem sistemu. Z modrim ozad-jem so označeni biti značke, z zelenim biti linije, z rumenim biti besede in s sivim biti seta. Za vsako organizacijo predpomnilnika in podani pomnilniški naslov so pod dvojiškim zapisom naslova v šestnajstiškem številskem sistemu zapisane vrednosti v poljih za značko, linijo ali set in besedo. 4.4 Izračun parametrov predpomnilnika (4/8) Imamo 32-bitni mikroprocesor, ki ima v čipu 16 KB 4-krat set-asociativnega pred-pomnilnika. Linije predpomnilnika so dolge štiri 32-bitne besede. Prikažite format naslovov glavnega pomnilnika. Kam v predpomnilnik se preslika beseda s pomnil- niške lokacije ABCDE8F8 [1]? Predpomnilnik 31 Rešitev: Dolžina linij v predpomnilniku je 4 4 · 32 bitov = 4 · 4 B = 16 B = 2 B. Skupno število linij v predpomnilniku 14 . m 2 B 10 = = 2 24 B Skupno število setov v predpomnilniku 10 2B 8 v = 2 = 2. 2 B ZNAČKA SET BESEDA 20 8 4 Pomnilniško lokacijo ABCDE8F8 zapišimo v dvojiškem številskem sistemu in z bar-vami označimo polja za značko, set in besedo. S sivo barvo označeni biti določajo set, v katerega se preslika beseda iz pomnilnika. Biti 100011112 predstavljajo desetiško število 143. Beseda s pomnilniške lokacije ABCDE8F8 se torej preslika v katerokoli linijo seta 143. 4.5 Izračun parametrov predpomnilnika (5/8) Procesor Intel 80486 ima v čip integriran skupni predpomnilnik za ukaze in podatke. Ima kapaciteto 8 KB, štirikrat set-asociativno organizacijo in linije dolžine štirih 32-bitnih besed. Predpomnilnik je organiziran v 128 setov. Za vsako linijo ima bit veljavnosti linije (V) in tri bite (B0, B1 in B2) za izvedbo algoritma LRU (Least Recently Used) za izbiro linije za zamenjavo. Ob zgrešitvi predpomnilnika procesor 80486 prebere 16 bajtov dolg blok iz glavnega pomnilnika v predpomnilnik. Poka- žite, kako se interpretirajo različna polja pomnilniškega naslova [1]. Rešitev: Linije so dolge 4 · 32 bitov = 4 4 · 4 B = 16 B = 2 B, zato potrebujemo 4 bite za označitev besede (bajta). Skupno število linij v predpomnilniku 13 8 KB 2B 9 m = = 4 = 2 = 512. 16 B 2 B Skupno število setov v predpomnilniku 9 , zato za označitev seta v 2 7 = = 2 = 128 potrebujemo 7 bitov. 2 2 Ker ima procesor 32-bitno naslovno vodilo, ima značka dolžino 32 − (7 + 4) bitov = 21 bitov. To pomeni, da se v vsak set predpomnilnika preslika natanko 21 2 blokov glavnega pomnilnika. Naslov glavnega pomnilnika: ZNAČKA SET BESEDA 21 7 4 Vsak set glavnega pomnilnika vsebuje tri bite LRU in štiri linije. Vsaka linija vsebuje štiri 32-bitne besede, bit veljavnosti V in 21-bitno značko. 32 Predpomnilnik 4.6 Izračun parametrov predpomnilnika (6/8) Zamislite si računalnik z bajtno naslovljivim glavnim pomnilnikom velikosti 216 baj-tov in velikostjo bloka 8 bajtov. Predpostavljajte, da računalnik uporablja predpo- mnilnik z 32 linijami z neposrednim preslikovanjem [1]. a) Kako je 16-bitni naslov pomnilnika razdeljen na značko, številko linije in šte- vilko bajta? b) V katero linijo bi se shranili bajti iz vsakega izmed naslednjih naslovov? 0001 0001 0001 1011 1100 0011 0011 0100 1101 0000 0001 1101 1010 1010 1010 1010 c) Predpostavite, da je v predpomnilniku shranjen bajt z naslova 0001 1010 0001 1010. Kakšni so naslovi drugih bajtov, ki so shranjeni poleg njega? d) Kolikšno je skupno število bajtov pomnilnika, ki so lahko shranjeni v predpo- mnilniku? e) Zakaj je v predpomnilnik shranjena značka? Rešitev: a) Osem najbolj uteženih bitov označuje značko, pet srednjih bitov številko linije in trije najmanj uteženi biti številko bajta. b) c) Bajt z naslova 0001 1010 0001 1010 se preslika v linijo številka 3. V tej isti liniji je osem bajtov z naslovov od 0001 1010 0001 1000 do 0001 1010 0001 1111 (trije najmanj uteženi biti za izbiro bajta v liniji zavzamejo vse vrednosti od 000 do 111). d) Predpomnilnik ima 32 linij po 8 bajtov, kar pomeni, da je lahko v njem skupno 32 · 8 = 256 bajtov glavnega pomnilnika. e) V isto linijo predpomnilnika se preslikuje mnogo različnih blokov iz glavnega pomnilnika. Značka je potrebna, da označuje, kateri izmed teh blokov je tre- nutno v dani liniji predpomnilnika. Predpomnilnik 33 4.7 Izračun parametrov predpomnilnika (7/8) Nek 2-krat set-asociativni predpomnilnik ima velikost linije oziroma bloka štirih 16-bitnih besed. V predpomnilnik lahko namestimo skupaj 4096 besed. Velikost glavnega pomnilnika je 64K×32 bitov. Prikažite, kako se tolmačijo procesorjevi na- slovi [1]. Rešitev: Velikost linije je 3 4 · 16 b = 4 besede = 4 · 2 B = 8 B = 2 B. Če procesor dostopa do 16-bitne besede, potrebujemo dva bita za izbiro ene izmed štirih besed. Če procesor dostopa do bajta, potrebujemo poleg teh dveh bitov za izbiro besede še en bit za izbiro bajta znotraj izbrane besede. Za izbiro osebka v izbrani liniji predpomnilnika potrebujemo torej tri najmanj utežene bite procesorjevega naslova. Bita b2b1 izbe-reta besedo, pri dostopu do bajta pa bit b0 izbere še bajt v tej besedi. Velikost predpomnilnika je 4096 besed = 12 2 besed. Število linij v predpomnilniku 12 . m 2 besed 10 = = 2 22 besed Število setov v predpomnilniku 10 2 9 v = = 2, zato potrebujemo 9 bitov za izbiro seta. 2 Velikost glavnega pomnilnika je 64K 2 × 32 bitov = 16 18 2 · 2 B = 2 B. Naslovi po-mnilnika so torej 18-bitni. Značka je potemtakem dolga 18 − (9 + 3) = 6 bitov. ZNAČKA SET BESEDA 6 9 2 1 4.8 Izračun parametrov predpomnilnika (8/8) Imate pomnilniški sistem, ki uporablja 32-bitni naslov za bajtno naslavljanje, in predpomnilnik, ki uporablja linije dolžine 64 bajtov [1]. a) Predpostavite predpomnilnik z neposrednim preslikovanjem, kjer je značka v naslovu dolga 20 bitov. Prikažite format naslova in določite naslednje parame- tre: število naslovljivih enot, število blokov v glavnem pomnilniku in število linij v predpomnilniku. b) Predpostavite asociativni predpomnilnik. Prikažite format naslova in dolo- čite naslednje parametre: število naslovljivih enot, število blokov v glavnem pomnilniku in število linij v predpomnilniku. c) Predpostavite 4-krat set-asociativni predpomnilnik, kjer je značka v naslovu dolga 9 bitov. Pokažite format naslova in določite naslednje parametre: število naslovljivih enot, število blokov v glavnem pomnilniku, število linij v setu, število setov v predpomnilniku in število linij v predpomnilniku. Rešitev: a) 6 Dolžina linij v predpomnilniku je 64 B = 2 B, torej potrebujemo 6 bitov za izbiro bajta (besede). 34 Predpomnilnik Število naslovljivih enot je 32 2 B. Število bitov v naslovu za izbiro linije v predpomnilniku je 6 32 − (20 + 6) = 6 , torej je v predpomnilniku 2 linij. Število blokov v glavnem pomnilniku je (20+6) 26 2 = 2. ZNAČKA LINIJA BESEDA 20 6 6 b) 6 Dolžina linij v predpomnilniku je 64 B = 2 B, torej potrebujemo 6 bitov za izbiro bajta (besede). Število naslovljivih enot je 32 2 B. Število bitov v naslovu za izbiro značke v predpomnilniku je 32 − 6 = 26. Število blokov v glavnem pomnilniku je 26 2. Število linij v predpomnilniku ni določeno. ZNAČKA BESEDA 26 6 c) 6 Dolžina linij v predpomnilniku je 64 B = 2 B, torej potrebujemo 6 bitov za izbiro bajta (besede). Število naslovljivih enot je 32 2 B. Število bitov v naslovu za izbiro seta je 32 17 − (9 + 6) = 17 , torej je v predpomnilniku 2 setov. ZNAČKA SET BESEDA 9 17 6 4.9 Enačba za učinkovitost dostopa do predpomnilnika Imamo dvonivojski pomnilnik s pomnilnikoma M1 in M2. M1 je manjši, hitrejši in dražji (na bit) od pomnilnika M2 (M1 bi lahko bil na primer predpomnilnik, M2 pa glavni pomnilnik) [1]. Če je Ts povprečni (sistemski) čas dostopa, T1 čas dostopa do M1, T2 čas dostopa do M2 in H verjetnost zadetka v M1 (delež referenc, ki se najdejo v M1), lahko izračunamo povprečni čas dostopa kot Ts = H · T1 + (1 − H) · (T1 + T2). a) Izrazite Ts s takim izrazom, da bo iz njega mogoče neposredno razbrati, za kolikšno vrednost je povprečni čas dostopa večji od T1 . b) Izrazite količnik T1/Ts, imenovan tudi kot učinkovitost dostopa (access effici- ency), ki je merilo o tem, kako blizu je povprečni čas dostopa (Ts) času dostopa do M1 (T1 ). Predpomnilnik 35 Rešitev: a) Ts = H · T1 + (1 − H) · (T1 + T2) = H · T1 + T1 − H · T1 + T2 − H · T2 = T1 + (1 − H) · T2 b) Ts = T1 + (1 − H) · T2/ : T1 Ts T2 = 1 + (1 − H) · T 1 T1 T = T (1 + (1 T1 1 s 2 − H ) · ) T 1 4.10 Pomnilniška hierarhija na N nivojih* Zamislite si računalniški sistem s pomnilniško hierarhijo na N nivojih. Definirajmo naslednje oznake: Ci = cena enega bita pomnilnika na pomnilniškem nivoju i, Si = velikost pomnilnika na nivoju i, Ti = čas za dostop do besede na pomnilniškem nivoju i, Hi = verjetnost zadetka v pomnilnik na nivoju i, Bi = čas, potreben za prenos bloka podatkov iz pomnilniškega nivoja (i + 1) v pomnilniški nivo i [1]. a) Izračunajte povprečno ceno Cs enega bita pomnilnika v tem sistemu. b) Izračunajte povprečni (sistemski) čas dostopa Ts. Rešitev: a) Povprečno ceno enega bita pomnilnika v tem sistemu dobimo tako, da delimo vsoto produktov cene enega bita pomnilnika na nivoju i z velikostjo pomnilnika na nivoju i s skupno velikostjo vseh pomnilnikov v sistemu: N X C S i i C i=1 s N = . X S i i=1 b) Pri izpeljavi povprečnega časa dostopa Ts uporabimo formulo za izračun priča- kovane vrednosti oziroma matematičnega upanja E(X) diskretno porazdeljene slučajne spremenljivke X. E(X) je vsota produktov posamezne vrednosti slu- čajne spremenljivke in njene verjetnosti: N E(X) = xi Pr[ XX = xi] . i=1 36 Predpomnilnik V kontekstu N-nivojskega hierarhičnega pomnilnika je diskretna slučajna spre- menljivka Ti, njena verjetnost pa Hi. Tako lahko zapišemo N T X = T H . s i i i=1 Ugotovimo lahko naslednje. Če je beseda v pomnilniku na nivoju 1 (v pred- pomnilniku), jo procesor prebere neposredno. Če je v pomnilniku na nivoju 2, ne pa na nivoju 1, se blok podatkov iz pomnilnika na nivoju 2 prenese v pomnilnik na nivoju 1 in od tam prebere. Za čas dostopa do pomnilnika na nivoju 2 imamo torej T2 = B1 + T1. Izrazimo še T3 : T3 = B2 + T2 = B1 + B2 + T1. Če zgornji izraz posplošimo, dobimo i−1 X Ti = Bj + T1. j=1 Zdaj ta izraz vstavimo v formulo za izračun matematičnega upanja za Ts: N i− ! 1 N i− ! 1 T X X X X = B + T H = B H + T H s j 1 i j i 1 i i=1 j=1 i=1 j=1 N i −1 N = X X X ( B H ) + T H j i 1 i i=1 j=1 i=1 N i−1 X X = (B jHi) + T1, i=1 j=1 saj je N X H i = 1. i=1 4.11 Cena bita kombiniranega dvonivojskega pomnilnika Imamo pomnilniški sistem z naslednjimi parametri: čas dostopa do predpomnilnika je 4 100 ns , cena predpomnilnika 10 − USD/bit, čas dostopa do glavnega pomnilnika je −5 1 . 200 ns , cena glavnega pomnilnika 10 USD/bit. a) Kolikšna je cena 1 MB glavnega pomnilnika? b) Kolikšna je cena 1 MB glavnega pomnilnika z uporabo tehnologije predpomnil- nika? c) Kolikšna je verjetnost zadetka v predpomnilnik (H), če je povprečni čas do- stopa do glavnega pomnilnika 10 % večji od časa dostopa do predpomnilnika? Predpomnilnik 37 d) Kolikšna je povprečna cena enega bita kombiniranega dvonivojskega pomnil- nika, če ima predpomnilnik kapaciteto 4 KB, glavni pomnilnik pa kapaciteto 8 MB? Rešitev: a) 220 B · 10−5 USD/bit = 220 B · 10−5 · 8 USD/B = 83,89 USD b) 220 B · 10−4 USD/bit = 220 B · 10−4 · 8 USD/B = 838,86 USD c) Ts = T1 + (1 − H) · T2 = 1,1 · T1 0,1 · T 1 = (1 − H) · T2 Iz te enačbe izrazimo H: T2 − 0,1 · T1 1.200 − 0,1 · 100 1.190 H = = = = 0,9925. T 2 1.200 1.200 d) C1S1 + C2S2 Cs = S 1 + S2 10− 4 12 −5 23 USD/bit · 2 B + 10 USD/bit · 2 B = 12 2 B 23 + 2 B = USD/bit 10− 4 12 −5 23 · 2 + 10 · 2 212 23 + 2 = 1 −5 , 00439 · 10 USD/bit Kot vidimo, je povprečna cena enega bita kombiniranega dvonivojskega pomnilnika le malenkost višja od cene enega bita glavnega pomnilnika. 4.12 Preoblikovanje predpomnilnika Zamislite si prvonivojski (L1) predpomnilnik s časom dostopa 1 ns in verjetnostjo zadetka H = 0,95. Predpostavite, da spremenimo zasnovo predpomnilnika (velikost in organizacijo) tako, da povečamo verjetnost zadetka na 0,97, hkrati pa povečamo čas dostopa na 1,5 ns. Kateri pogoj mora biti izpolnjen ob tej spremembi, da do-bimo povečanje zmogljivosti predpomnilnika (skrajšanje povprečnega časa dostopa do glavnega pomnilnika) [1]? Rešitev: Ob začetnih pogojih je povprečni čas dostopa 1,0 ns + 0,05 · T2. Ob spremenjenih pogojih je povprečni čas dostopa 1,5 ns + 0,03 · T2. 38 Predpomnilnik Za povečanje zmogljivosti mora veljati 1,0 ns + 0,05 · T2 > 1,5 ns + 0,03 · T2. Rešitev neenačbe nam razkrije pogoj za povečanje zmogljivosti z novo organizacijo predpomnilnika: T2 > 25 ns. 4.13 Računanje časa dostopa do predpomnilnika Predpostavite enonivojski predpomnilnik s časom dostopa 2,5 ns, dolžino linije 64 bajtov in verjetnostjo zadetka H = 0,95. Glavni pomnilnik uporablja zmožnost prenosa blokov, ki ima čas dostopa do prve besede (4 bajtov) 50 ns in zatem 5 ns za vsako preostalo besedo [1]. a) Kakšen je čas dostopa ob zgrešitvi predpomnilnika? Predpostavite, da pred- pomnilnik počaka, dokler se linija ne včita iz glavnega pomnilnika, in potem ponovi dostop z zadetkom. b) Predpostavite, da povečanje linije na 128 bajtov poveča H na 0,97. Ali to zmanjša povprečni čas dostopa do pomnilnika? Rešitev: a) Najprej poteče 2,5 ns, da se ugotovi dogodek zgrešitve predpomnilnika. Nato se zahtevana linija včita v predpomnilnik. Nazadnje je potrebnih še dodatnih 2,5 ns za včitanje zahtevane besede: Tmiss = 2,5 + 50 + 15 · 5 + 2,5 = 130 ns. b) Vrednost Tmiss iz točke a) je ekvivalentna vsoti časov T1 in T2, T1 + T2, pri čemer je T1 čas dostopa do predpomnilnika in T2 čas dostopa do glavnega pomnilnika. Povprečni čas dostopa do glavnega pomnilnika je tako Ts = H · T1 + (1 − H) · (T1 + T2) = 0,95 · 2, 5 + 0,05 · 130 = 8,875 ns. Pri prenovljeni shemi predpomnilnika imamo: Tmiss = 2,5 + 50 + 31 · 5 + 2,5 = 210 ns in Ts = H · T1 + (1 − H) · (T1 + T2) = 0,97 · 2,5 + 0,03 · 210 = 8,725 ns. Po prenovi organizacije predpomnilnika se povprečni čas dostopa do glavnega pomnilnika skrajša za 8,875 ns − 8,725 ns = 0,15 ns. 4.14 Povprečni čas dostopa do trinivojskega pomnilnika Računalnik ima predpomnilnik, glavni pomnilnik in disk za izvedbo navideznega pomnilnika. Če je beseda, na katero se sklicuje procesor, v predpomnilniku, je po-trebnih 20 ns, da jo doseže. Če je ni v predpomnilniku, je pa v glavnem pomnilniku, Predpomnilnik 39 je potrebnih 60 ns za njeno naložitev v predpomnilnik, nato pa se ponovi sklic do nje. Če besede ni v glavnem pomnilniku, je potrebnih 12 ms za njen vnos z diska v glavni pomnilnik, nato 60 ns za njeno kopiranje v predpomnilnik, nazadnje pa še ponovitev sklica nanjo v predpomnilnik. Verjetnost zadetka v predpomnilnik je 0,9, verjetnost zadetka v glavni pomnilnik pa 0,6. Kolikšen je povprečni čas za dostop do sklicevane besede v tem sistemu [1]? Rešitev: Definirajmo najprej uporabljene oznake in njihove vrednosti: H1 = 0,9: verjetnost zadetka v predpomnilnik, H2 = 0,6: verjetnost zadetka v glavni pomnilnik, T1 = 20 ns: čas za dostop do besede v predpomnilniku, T2 = 60 ns: čas za prenos besede (v bloku) iz glavnega pomnilnika v predpomnilnik, T3 = 12 ms: čas za včitanje besede (znotraj sektorja) iz diska v glavni pomnilnik. Obravnavati moramo tri primere: 1. sklic je na besedo v predpomnilniku, 2. sklic je na besedo, ki je ni v predpomnilniku, je pa v glavnem pomnilniku in 3. sklic je na besedo, ki je ni niti v predpomnilniku niti v glavnem pomnilniku, pač pa je na disku. Povprečni čas Ta za dostop do sklicevane besede v tem sistemu je: T a = H1 · T1 + (1 − H1) · H2 · (T2 + T1) + (1 − H1) · (1 − H2) · (T3 + T2 + T1) = 0 6 , 9 · 20 + (1 − 0 , 9) · 0 , 6 · (60 + 20) + (1 − 0 , 9) · (1 − 0 , 6) · (12 · 10 + 60 + 20) = 0,9 · 20 + 0,06 · 80 + 0,04 · 12.000.080 = 480.026 ns = 480,026 µs. 4.15 Predpomnilnik pri mikroprocesorju Motorola 68020 Pri mikroprocesorju Motorola 68020 traja dostop do predpomnilnika dva urina cikla. Dostop do podatka v glavnem pomnilniku prek vodila k procesorju traja tri urine cikle, če ni vrivanja čakalnih stanj. Podatki se dostavijo procesorju hkrati z dostavo v predpomnilnik [1]. a) Izračunajte povprečno dolžino pomnilniškega cikla, če je verjetnost zadetka v predpomnilnik 0,9 in procesor dela na frekvenci 16,67 MHz. b) Ponovite izračun, če mora procesor v vsak pomnilniški cikel vriniti dve periodi ure. Kakšna ugotovitev lahko sledi iz rezultatov? Rešitev: a) Pri frekvenci 16,67 MHz traja perioda ure 60 ns. Dostop do predpomnilnika traja dve periodi ure, kar znaša 120 ns, dostop do glavnega pomnilnika pa traja tri periode ure, kar je 180 ns. Povprečna dolžina pomnilniškega cikla znaša torej 0,9 · 120 + 0,1 · 180 = 126 ns. 40 Predpomnilnik b) Vsak dostop do glavnega pomnilnika je podaljšan za dve periodi ure, torej za 120 ns. Povprečna dolžina pomnilniškega cikla zdaj znaša 0,9 · 120 + 0,1 · 300 = 138 ns. Čeprav se čas dostopa do pomnilnika poveča za 120 ns, se povprečni čas dostopa poveča samo za 12 ns, saj je v povprečju samo vsak deseti dostop procesorja dostop v glavni pomnilnik. 4.16 Vpliv ukaznega predpomnilnika na izkoriščenost vodila Zamislite si procesor s časom pomnilniškega cikla 300 ns in hitrostjo izvajanja ukazov 1 MIPS. Vsak ukaz v povprečju zahteva en pomnilniški cikel na vodilu za včitanje ukaza in enega za dostop do operanda, ki ga ukaz vpeljuje [1]. a) Izračunajte izkoriščenost vodila. b) Predpostavite, da je procesor opremljen z ukaznim predpomnilnikom, ki ima verjetnost zadetka 0,5. Določite vpliv na izkoriščenost vodila. Rešitev: a) Za procesor s hitrostjo izvajanja ukazov 1 MIPS povprečni ukaz porabi 1.000 ns za včitanje in izvedbo. V povprečju traja ukaz dva cikla na vodilu, kar znaša 600 ns, tako da je izkoriščenost vodila 600 = 0,6. 1 . 000 b) Samo za polovico ukazov se ukaz včita prek vodila. Izkoriščenost vodila je zdaj 150+300 = 0,45 . To zmanjša čas čakanja za druge potencialne gospodarje na vodilu, kot so krmilniki za neposredni dostop do pomnilnika (DMA) in drugi 1.000 mikroprocesorji. 4.17 Preslikave blokov v predpomnilnika različnih tipov Imamo glavni pomnilnik, sestavljen iz 32 blokov, ki so označeni s številkami od 0 do 31, in predpomnilnik z osmimi linijami, označenimi od 0 do 7 [1]. a) Kateri bloki glavnega pomnilnika tekmujejo za preslikavo v linijo 2 predpo- mnilnika, če predpomnilnik uporablja neposredno preslikovanje? b) V katere linije predpomnilnika se lahko preslika blok 31 glavnega pomnilnika, če predpomnilnik uporablja 4-krat set-asociativno preslikovanje? c) CPE se sklicuje na bloke glavnega pomnilnika po takšnem zaporedju, kot je prikazano na spodnji sliki. V začetku je predpomnilnik prazen. Pri katerem sklicu se mora vsebina predpomnilnika nujno razlikovati za neposredno presli- kovanje in 4-krat set-asociativno preslikovanje? vrstni red sklicev 1 2 3 4 5 6 7 8 sklic na blok 0 15 18 5 1 13 15 26 Predpomnilnik 41 Rešitev: a) Če ima predpomnilnik m linij, se blok i glavnega pomnilnika preslika v linijo j predpomnilnika po naslednji enačbi: j = i mod m. Če za j vstavimo vrednost 2 in za m vrednost 8, dobimo enačbo 2 = i mod 8. Rešitev enačbe so številke tistih blokov glavnega pomnilnika, ki imajo pri deljenju z vrednostjo 8 ostanek 2. Izmed blokov s številkami od 0 do 31 so to bloki 2, 10, 18 in 26. b) Število setov v predpomnilniku izračunamo tako, da število linij delimo s k = 4: v 2 3 = = 2. Predpomnilnik je torej sestavljen iz dveh setov, označenih s 2 2 številkama 0 in 1. Če ima predpomnilnik v setov, se blok i glavnega pomnilnika preslika v set j predpomnilnika po naslednji enačbi: j = i mod v. Če za j vstavimo vrednost 31 in za v vrednost 2, dobimo enačbo j = 31 mod 2. Bloki s sodimi številkami se preslikujejo v set 0, oni z lihimi številkami pa v set 1. Blok 31 je lih, zato se lahko preslika v katerokoli linijo seta 1, torej v linije 4, 5, 6 ali 7. c) Pri neposrednem preslikovanju se blok i glavnega pomnilnika preslika v linijo j = i mod 8, torej v linijo s tisto številko, ki vrne pri deljenju številke bloka glavnega pomnilnika s številom 8 ostanek 2. V spodnji tabeli so v tretji vrstici prikazane številke linij v predpomnilniku, v katere se preslika posamezni blok glavnega pomnilnika, na katerega se sklicuje CPE. vrstni red sklicev 1 2 3 4 5 6 7 8 sklic na blok 0 15 18 5 1 13 15 26 številka linije 0 7 2 5 1 5 7 2 Pri 4-krat set-asociativnem predpomnilniku je več prostosti, kam v izbrani set se lahko namesti blok, na katerega se sklicuje CPE. Zdaj bomo oponašali izbiro linije v predpomnilniku kot v primeru neposrednega preslikovanja, dokler bo to mogoče. vrstni red sklicev 1 2 3 4 5 6 7 8 sklic na blok 0 15 18 5 1 13 15 26 številka linije 0 7 2 5 x Set 0 je sestavljen iz linij 0, 1, 2 in 3, set 1 pa iz linij 4, 5, 6 in 7. Blok 0 lahko namestimo v linijo 0 seta 0, blok 15 v linijo 7 seta 1, blok 18 v linijo 2 seta 0, blok 5 pa v linijo 5 seta 1. Vse do tod lahko preslikamo bloke glavnega pomnilnika v iste linije kot pri neposrednem preslikovanju. Od tod naprej pa ne gre več, saj moramo blok 1 preslikati v set 1 (tam sta prosti še liniji 4 in 6), pri neposrednem preslikovanju pa se je blok 1 preslikal v linijo 1. Tako lahko zaključimo, da se mora vsebina predpomnilnika za neposredno in 4-krat set-asociativno preslikavo nujno razlikovati pri petem sklicu. 42 Predpomnilnik Notranji pomnilnik 43 5 Notranji pomnilnik 5.1 Izvedba 256 KB pomnilnika za 8-bitni mikroprocesor Za 8-bitni mikroprocesor morate izvesti 256 KB pomnilnika [3]. a) Koliko dinamičnih pomnilnikov z naključnim dostopom (DRAM-ov) 64K×1 potrebujete za implementacijo 256 KB pomnilnika za 8-bitni mikroprocesor? b) Koliko čipov pa potrebujete, če uporabite DRAM-e 256K×1. c) Koliko znaša najmanjši inkrement v pomnilniški kapaciteti za obe izvedbi? Primerjajte tudi porabo moči, površino zasedenega prostora na tiskanini, za- nesljivost in ceno komponent. Rešitev: a) Za implementacijo 256 KB pomnilnika z DRAM-i 64K×1 potrebujemo štiri banke po osem čipov v vsaki, torej skupno 32 DRAM-ov. b) Enako kapaciteto lahko dosežemo samo z osmimi čipi 256K×1. c) Velikost najmanjšega inkrementa pomnilniške kapacitete ustreza tisti, dobljeni z 8 DRAM-i. Za čipe 64K×1 je to 64 KB, za čipe 256K×1 pa 256 KB. Pro- blem pri DRAM-ih 256K×1 je torej granularnost. Če potrebujemo na primer le 64 KB pomnilnika, je implementacija z DRAM-i 256K×1 neprimerna. Pomnil- niške kapacitete ni mogoče nadgrajevati v inkrementih, manjših od 256 KB. Z DRAM-i večje kapacitete prihranimo pri porabi moči in prostoru na tiska- nini. Pridobimo tudi na zanesljivosti zaradi manjšega števila čipov in znižanja stroškov za čipe, saj je cena DRAM-a 256K×1 precej manjša od cene štirih DRAM-ov 64K×1. 5.2 Izvedba 512 KB pomnilnika za 8-bitni mikroprocesor Načrtovalec namerava za izvedbo 512 KB pomnilnika za 8-bitni mikroprocesor upo- rabiti 256 Kb (kilobitne) DRAM-e [3]. a) Koliko DRAM-ov 256K×1 je potrebnih? b) Koliko DRAM-ov pa je potrebnih, če so DRAM-i organizirani ×4? c) Primerjajte obe implementaciji v smislu porabe moči in prostora na tiskanini. Rešitev: a) Osem DRAM-ov 256K×1 zagotovi 256 KB pomnilnika, zato potrebujemo dve banki po osem DRAM-ov – torej skupno 16 čipov. b) Po drugi strani dva DRAM-a 64K×4 zagotavljata 64 KB pomnilnika. Potre- bujemo torej osem bank po dva DRAM-a v vsaki. Spet potrebujemo skupaj 16 čipov. c) Zaključimo lahko, da za tako velik pomnilnik ostane število čipov enako, ne glede na organizacijo DRAM-ov. Imamo pa z DRAM-i 64K×4 bolj drobno granulacijo. Poraba moči je tudi nižja, ker je vsaka banka sestavljena iz samo dveh čipov. Slaba stran pa je seveda poraba prostora. DRAM-i 64K×4 so izvedeni v 18-nožičnih ohišjih in zato porabijo več prostora na tiskanini. 44 Notranji pomnilnik 5.3 Osveževanje DRAM pomnilnika (1/2) Imamo DRAM, ki potrebuje osveževalni cikel 64-krat na milisekundo. Vsaka ope-racija osveževanja traja 150 ns, medtem ko traja pomnilniški cikel 250 ns. Kolikšen odstotek skupnega časa delovanja pomnilnika je treba nameniti osveževanju [1]? Rešitev: V 1 ms je čas, namenjen osveževanju, 64·150 ns = 9.600 ns. Delež časa, namenjenega osveževanju pomnilnika, je ˘6 oziroma 0,96 %. 9,6·10 s = 0,0096 10˘3 s 5.4 Osveževanje DRAM pomnilnika (2/2) Pomnilnik nekega mikroračunalnika je zgrajen iz DRAM-ov 64K×1. Po podatkih iz priročnika je polje celic v DRAM-u organizirano v 256 vrsticah. Vsaka vrstica mora biti osveževana s periodo, ki ni daljša od 4 ms. Predpostavite, da osvežujemo pomnilnik strogo periodično. Kakšna je časovna perioda med zaporednima osveže- valnima zahtevama? Kako dolg števnik z osveževalnimi naslovi potrebujemo [3]? Rešitev: Perioda osveževanja (od vrstice do vrstice) je lahko maksimalno 4.000 = 15,625 µs. 256 Ker imamo skupno 256 vrstic (to so vrstični naslovi 0–255), potrebujemo 8-bitni števnik ( 8 256 = 2). 5.5 Izračun stopnje odpovedi 512 KB pomnilnika 512 KB pomnilnika 16-bitnega mikroprocesorja je izvedenega z DRAM-i 64K×1 na eni tiskani plošči. Razen pomnilniških čipov vsebuje še 11 čipov srednje stopnje integracije (MSI) in 25 čipov nizke stopnje integracije (SSI). Izračunajte stopnjo odpovedi sistema, če je na tiskanini 10 uporov, 100 keramičnih kondenzatorjev in so na njej še štirje tantalovi kondenzatorji. Predpostavite tipične stopnje odpovedi v spodnji tabeli. FIT (Failures in Time) pomeni število odpovedi v času 9 10 ur [3]. Tip komponente Tipična stopnja odpovedi (FIT) upor 1 dioda 1 čip SSI 10 keramični kondenzator 10 tantalov kondenzator 20 čip MSI 50 tiskanina 500 DRAM 64K×1 1.200 Rešitev: Vsaka pomnilniška banka zahteva 16 DRAM-ov in zagotavlja 128 KB. Za sku-pno 512 KB potrebujemo štiri banke, to je 64 DRAM-ov. Stopnja odpovedi po-mnilniškega polja je 1.200 · 64 = 76.800 FIT. Preostale komponente prispevajo 11 · 50 + 25 · 10 + 10 · 1 + 100 · 10 + 4 · 20 + 1 · 500 = 2.390 FIT. Iz tega sledi, da je stopnja odpovedi celotne pomnilniške plošče 76.800 + 2.390 = 79.190 FIT. Vidimo, da pomnilniški čipi prispevajo okrog 97 % odpovedi. Notranji pomnilnik 45 5.6 Izračun MTBF-ja Večanje števila komponent skrajšuje MTBF v sistemu [3]. a) Izračunajte MTBF (povprečni čas med odpovedima) za DRAM 64K×1 iz na- loge 5.5. b) Ponovite izračun za pomnilniško ploščo kapacitete 512 KB iste naloge. c) Predpostavite velik sistem z 32 mikroračunalniki. Vsak mikroračunalnik je opremljen z eno tako ploščo. Kakšen je MTBF v tem sistemu? Rešitev: a) 9 MTBF DRAM-a je = 830.000 ur, to je 95 let. 10 1.200 b) 10 9 Za pomnilniško ploščo imamo MTBF = 12.600 ur, to je 17 mesecev. V povprečju lahko pričakujemo odpoved pomnilniške plošče vsako poldrugo leto. 79.190 c) Pomnilnik celotnega sistema znaša 512 · 32 = 16 MB (32 pomnilniških plošč). Njegova stopnja odpovedi bo 32-krat večja od tiste za eno pomnilniško ploščo, ali kar je ekvivalentno, njegov MTBF bo 32-krat krajši. Torej, 12.600 = 384 32 ur, kar znese samo 16,4 dneva. Torej lahko pričakujemo odpoved pomnilnika nekje v sistemu približno vsak drugi teden. 5.7 MTBF brez odkrivanja enojnih napak in z njim Sistem ima 8-bitni mikroprocesor s 128 KB pomnilnika, ki je izveden z DRAM-i 64K x 1 s stopnjo odpovedi 1.200 FIT. Narava aplikacije je taka, da se odpovedi tolerirajo, če se le pravočasno odkrijejo in se sistem ustavi. Odločeno je bilo, da dodamo en paritetni bit na bajt za odkrivanje napak [3]. a) Kako pogosto bi pomnilnik odpovedoval, preden dodamo pariteto? Predpo- stavite, da so vse odpovedi zaradi enojnih napak. b) Kako pogosto se bo sistem ustavljal zaradi odpovedi pomnilnika? Ignorirajte odpovedi zaradi drugih komponent, kot so pomnilniška vmesniška vezja. Rešitev: a) V nalogi 5.6 smo izračunali, da znaša MTBF za en DRAM 64K x 1 95 let. Za skupno 128 KB potrebujemo 16 DRAM-ov organiziranih v dve banki. Zaradi tega se MTBF pomnilnika zmanjša na 95, to je okrog 6 let. 16 b) Za odgovor na to vprašanje moramo upoštevati število dodanih DRAM-ov za izvedbo paritete, kar zahteva en DRAM 64K × 1 na banko. Skupno število DRAM-ov je torej 18, zato se MTBF pomnilnika zmanjša na 95 , to je okrog 18 5 let. Prednost je seveda ta, da je napake v pomnilniku zdaj mogoče odkriti. Ker so vse odpovedi po predpostavki zaradi enojnih pomnilniških napak, se vse odkrijejo. Iz tega sledi, da bodo napake v pomnilniku v povprečju ustavile sistem vsakih pet let. 46 Notranji pomnilnik 5.8 MTBF brez popravljanja enojnih napak in z njim Pomnilnik s skupno kapaciteto 1 MB za 16-bitni mikroprocesor je izveden z DRAM-i 256K×1 [3]. a) Izračunajte njegov MTBF, če predpostavljate 2.000 FIT za vsak DRAM. b) Imejmo napravo za odkrivanje in popravljanje napak (EDAC), ki zmore po- pravljati enojne napake. Koliko s tem povečamo zanesljivost, če se 98 % napak pojavlja na posamičnih bitih? Rešitev: a) Vsaka banka zahteva 16 DRAM-ov in zagotavlja 512 KB pomnilnika. Sku- pno število zahtevanih čipov je torej 32. Skupna stopnja odpovedi (če razen DRAM-ov zanemarimo vse preostale komponente) je 2.000 · 32 = 64.000 FIT. To ustreza MTBF-ju 9 10 = 15.625 ur = 22 mesecev. 64 . 000 b) Vsaka pomnilniška banka zahteva šest dodatnih DRAM-ov za hranjenje testnih bitov. Skupno število čipov postane zdaj 22 · 2 = 44. Stopnja odpovedi znaša 2.000 · 44 = 88.000 FIT. Vendar zdaj samo večkratne napake prispevajo k odpovedim (enojne napake se popravijo), zato se efektivna stopnja odpovedi pomnilnika zmanjša na 88.000 · 0,02 = 1.760 FIT. To ustreza MTBF-ju 9 10 = 1 . 760 568.180 ur = 790 mesecev. Zanesljivost pomnilnika se je torej povečala za faktor 790 = 36. Iz tega rezultata je razvidno, da se zanesljivost dramatično 22 poveča že pri popravljanju enojnih napak. 5.9 Poraba moči pri odkrivanju/popravljanju napak EDAC vpliva na porabo moči in ponavadi tudi na hitrost sistema. Predpostavite 16-bitni mikroprocesor z 1 MB pomnilnika [3]. a) Za koliko odstotkov se poveča poraba moči, če dodamo zmožnost odkrivanja dvojnih/popravljanja enojnih napak? b) Naj bo stanje CPE dolgo 100 ns in naj pomnilniški čas dostopa zagotovi, da bo podatek na voljo 20 ns pred včitanjem. Koliko čakalnih stanj bi morala CPE vriniti v vsak pomnilniški cikel, če dana naprava EDAC vnaša zakasnitev 40 ns? Rešitev: a) Poraba moči se poveča zaradi dodatne kapacitete pomnilnika, ki jo potrebu- jemo. Ker imamo 16-bitne besede, moramo dodati 6 testnih bitov in poraba moči se poveča za 22−16 · 100 % = 37,5 %. 16 b) Podatki so veljavni 20 ns pred časom včitanja, vendar ta čas ne more kom- penzirati dodatne zakasnitve 40 ns, če dodamo napravo EDAC. CPE mora vriniti eno čakalno stanje na pomnilniški cikel. To podaljša pomnilniški cikel za 100 ns. Notranji pomnilnik 47 5.10 Hammingov kod (7,4) V pomnilniku želimo popravljati enobitne napake, zato moramo k m podatkovnim bitom dodati r testnih (paritetnih) bitov in nato celotno kodno besedo dolžine n = m + r bitov vpisati v pomnilnik. a) Koliko testnih bitov morate dodati, da boste po prebrani kodni besedi iz pom- nilnika lahko izračunali sindrom, ki bo pokazal na bitno mesto v kodni besedi, na katerem se je pojavila napaka? b) Izračunajte število potrebnih testnih bitov za m = 4 in napišite, kako ta Hammingov kod označujemo. Rešitev: a) Sindrom je dolg r bitov, torej ima enako dolžino kot znaša število testnih bitov. Število vseh možnih vrednosti sindroma je torej r 2. Če imajo vsi biti sindroma vrednost 0, pomeni, da v pomnilniku v kodni besedi ni prišlo do nobene napake. Potemtakem ostane še r 2 − 1 vrednosti sindroma, ki morajo pokazati na enega izmed bitov v m +r bitov dolgi kodni besedi, saj lahko pride do enojne napake bodisi na podatkovnem ali testnem bitu. Število neničelnih vrednosti sindroma mora biti torej vsaj tolikšno, kolikor znaša dolžina kodne besede: 2r r − 1 ≥ m + r ⇒ m + r + 1 ≤ 2 b) V izpeljano neenačbo iz točke a) za m vstavimo vrednost 4 in dobimo 4 + r r r + 1 ≤ 2 ⇒ 5 + r ≤ 2 ⇒ r = 3. Za popravljanje enobitne napake pri štirih podatkovnih bitih potrebujemo tri testne bite. Hammingov kod, ki vsebuje štiri podatkovne in tri testne bite, skupaj pa je kodna beseda dolga 7 bitov, označujem kot dvojico (n, m) = (7, 4), kjer prvi element dvojice predstavlja skupno število bitov kodne besede v pomnilniku, drugi pa število podatkovnih bitov. 5.11 Matriki G in H Hammingovega koda (7,4) Za popravljanje enojnih napak v pomnilniku uporabljamo Hammingov kod (n, m). a) V tabeli prikažite, na katerih bitnih mestih se morajo nahajati testni (parite- tni) in podatkovni biti, da bo sindrom pokazal na bitno mesto enojne napake. V tabeli tudi označite, nad katerimi podatkovnimi biti se računa posamezni testni bit. b) Za prve štiri testne bite (p1, p2, p3 , p4) napišite enačbe, iz katerih bo razvidno, nad katerimi podatkovnimi biti se posamezni testni bit računa. c) S pomočjo tabele iz točke a) razberite vsebino matrike G za generiranje kodne besede (7, 4), ki se zapiše v pomnilnik, in matriko zapišite. 48 Notranji pomnilnik d) S pomočjo tabele iz točke a) razberite vsebino matrike H za preverjanje pari- tete kodne besede (7, 4), ki se prebere iz pomnilnika, in matriko zapišite. e) S pomočjo tabele iz točke a) razberite vsebino matrike R za dekodiranje po- datkovnih bitov iz kodne besede v pomnilniku po ugotovitvi, da je kodna beseda brez napak ali pa je popravljena po odkritju enojne napake. Rešitev: Bitno mesto 1 2 3 4 5 6 7 8 9 10 11 12 Kodna beseda p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 d8 p1 × × × × × × a) . . . p2 × × × × × × p3 × × × × × p4 × × × × × ... Testni biti p1, p2, p3, p4 . . . se morajo nahajati na bitnih mestih potenc števila 2, to je na bitnih mestih 1, 2, 4, 8. . . Podatkovni biti d1, d2, d3, d4 . . . zasedajo po vrstnem redu vsa bitna mesta, ki niso potence števila 2. Tabela je narisana samo do podatkovne besede dolžine osem bitov, ki potrebuje štiri testne bite. Kot je prikazano s tremi horizontalnimi in tremi vertikalnimi pikami, se lahko tabela po potrebi razširi v obe dimenziji. Podatkovne bite, nad katerimi se izračuna posamezni testni bit, najlažje določi- mo na naslednji način. V stolpcu za vsako bitno mesto s simboli × označimo binarno kodo tega bitnega mesta. Simbol × v tem kodu predstavlja logično vrednost 1, prazno mesto brez simbola pa logično vrednost 0. Najbolj uteženi bit v tej kodi je v spodnji celici stolpca, najmanj uteženi bit pa v zgornji. V narisanem delu tabele s štirimi paritetnimi biti dobimo kode bitnih mest 0001, 0010, 0011. . . Iz te tabele zdaj z lahkoto odčitamo podatkovne bite, nad katerimi se računa vrednost posameznega testnega bita. Pariteta za dani testni bit v vrstici se računa nad tistimi podatkovnimi biti, ki imajo v tej vrstici simbol ×. b) Iz tabele, sestavljene v točki a), lahko zapišemo izraze za izračun prvih štirih testnih bitov, kjer simbol ⊕ označuje operacijo XOR (ekskluzivni ALI). p1 = d1 ⊕ d2 ⊕ d4 ⊕ d5 ⊕ d7 p2 = d1 ⊕ d3 ⊕ d4 ⊕ d6 ⊕ d7 p3 = d2 ⊕ d3 ⊕ d4 ⊕ d8 p4 = d5 ⊕ d6 ⊕ d7 ⊕ d8 Če ima v enačbi za izračun testnega bita sodo število podatkovnih bitov vre- dnost 1, bo testni bit imel vrednost 0, sicer bo imel vrednost 1. Alternativa za uporabo operacije ⊕ je navadno seštevanje vrednosti posameznih podatkovnih bitov v enačbi, nato deljenje vsote z 2 in ugotavljanje, kakšen je ostanek. Če je ostanek 0, je imelo sodo število podatkovnih bitov vrednost 1 in testni bit bo imel vrednost 0, če pa je ostanek 1, je imelo liho število podatkovnih bitov vrednost 1, testni bit pa bo imel vrednost 1. Notranji pomnilnik 49 c) G: Generatorska matrika linearnega koda (7,4):   1 1 0 1   1 0 1 1     1 0 0 0   G   = 0 1 1 1       0 1 0 0     0 0 1 0   0 0 0 1 Generatorska matrika G linearnega koda (7,4) vsebuje sedem vrstic in štiri stolpce. Vrstice matrike ustrezajo bitnim mestom kode od 1 do 7, stolpci pa podatkovnim bitom d1, d2, d3 in d4 . V vrsticah 1, 2 in 4, ki ustrezajo bitnim mestom, kjer so v kodi testni biti p1, p2 in p3, vrednost 1 pomeni, da je podatkovni bit vključen v izračun paritete, vrednost 0 pa, da ni vključen. Vrstice matrike, ki niso potence števila 2, ustrezajo enemu podatkovnemu bitu. Ta je v vrstici označen z vrednostjo 1, na drugih treh mestih v vrstici pa so vrednosti 0. d) H: Matrika za preverjanje paritete kodne besede (7,4):   1 0 1 0 1 0 1 H = 0 1 1 0 0 1 1   0 0 0 1 1 1 1 Matriko H za preverjanje paritete kodne besede (7, 4) dobimo iz zgornjega levega dela tabele iz točke a), tako da pogledamo pravokotnik, ki ga tvorijo vrstice od p1 do p3 in stolpci od bitnega mesta 1 do bitnega mesta 7. Matrika H ima tako tri vrstice in sedem stolpcev. Na mestu, kjer je v navedenem pravokotniku simbol ×, v matriko vpišemo vrednost 1, na drugih mestih pa vrednost 0. e) R: Matrika za dekodiranje podatkovnih bitov iz kodne besede brez napak ali popravljene enojne napake za kod (7,4):   0 0 1 0 0 0 0 R =     0 0 0 0 0 1 0   0 0 0 0 1 0 0   0 0 0 0 0 0 1 Matrika R ima štiri vrstice in sedem stolpcev. V i-ti vrstici je enica na tistem bitnem mestu, na katerem se nahaja podatkovni bit di, na vseh drugih mestih so vrednosti 0. 50 Notranji pomnilnik 5.12 Izračun sindroma za Hammingov kod (7,4) Predpostavite, da za popravljanje enobitnih napak v pomnilniku uporabljate Ham-mingov linearni kod (7,4). a) Za splošni 4-bitni podatkovni vektor T p = [ d 1 d 2 d 3 d 4 ] (ta oznaka pomeni, da je vrstični vektor transponiran in dejansko predstavlja stolpični vektor) prikažite, kako se izračuna 7-bitna kodna beseda s tremi testnimi (paritetnimi) in štirimi podatkovnimi biti. b) Izračunajte 7-bitno kodno besedo za podatkovni vektor T p = [1011]. c) Izračunajte sindrom, če v pomnilniku ni prišlo do nobene napake. d) Za primer iz točke c) izvedite dekodiranje podatkovnih bitov iz kodne besede v pomnilniku. e) Izračunajte sindrom, če je prišlo v pomnilniku do napake na podatkovnem bitu d2. f ) Izračunajte sindrom, če je prišlo v pomnilniku do napake na podatkovnem bitu d1. g) Izračunajte sindrom, če je prišlo v pomnilniku do napake na testnem bitu p2 . h) Izračunajte sindrom, če je prišlo v pomnilniku do napake na podatkovnem bitu d1 in napake na podatkovnem bitu d2. Ali lahko iz izračunanega sindroma odkrijete, da je prišlo do dvojne napake, torej do napake na dveh različnih bitih? Pri izračunih uporabite generatorsko matriko G, matriko H za preverjanje paritete kodne besede in matriko R za dekodiranje podatkovnih bitov za kod (7,4), ki so bile predstavljene v problemu 5.11. Rešitev: a) Zapišimo najprej splošno 4-bitno podatkovno besedo v obliki stolpičnega vek- torja p:   d 1 p =  2   d    d  3 d4 Zdaj s pomočjo generatorske matrike G izračunamo splošno 7-bitno kodno besedo x:       1 1 0 1 d1 ⊕ d2 ⊕ 0 ⊕ d4 d1 ⊕ d2 ⊕ d4       1 0 1 1 d ⊕ 0 ⊕ d ⊕ d d ⊕ d ⊕ d    1 3 1 3 4 4      d    1   1   1 0 0 0   1     x   2  d      = d ⊕ 0 ⊕ 0 ⊕ 0 d G×p =  0 1 1 1   · =  0 ⊕ d 2 ⊕ d3 ⊕ d  = d2 ⊕ d3 ⊕ d   4 4   d      3   0 1 0 0   0 ⊕ d 2 ⊕ 0 ⊕ 0   d  2       d       0 0 1 0 0 ⊕ 0 ⊕ d ⊕ 0 d 4       3 3 0 0 0 1 0 ⊕ 0 ⊕ 0 ⊕ d4 d4 Notranji pomnilnik 51 b) Za konkretni 4-bitni podatkovni vektor T T p = [ d 1 d 2 d 3 d 4 ] = [1011] zdaj izraču- najmo 7-bitno kodno besedo T x = [ p 1 p 2 d 1 p 3 d 2 d 3 d 4 ], ki se vpiše v pomnilnik:       1 1 0 1 1 ⊕ 0 ⊕ 0 ⊕ 1 0       1 0 1 1 1 ⊕ 0 ⊕ 1 ⊕ 1 1   1             1 0 0 0 1 ⊕ 0 ⊕ 0 ⊕ 0 1       0   x       = G · p = 0 1 1 1 · = 0 ⊕ 0 ⊕ 1 ⊕ 1 = 0           1             0 ⊕ 0 ⊕ 0 ⊕ 0 0 0 1 0 0         1       0 0 1 0 0 ⊕ 0 ⊕ 1 ⊕ 0 1       0 0 0 1 0 ⊕ 0 ⊕ 0 ⊕ 1 1 c) Prebrano kodno besedo iz pomnilnika označimo z r. Če v pomnilniku ni bilo napak, je prebrana kodna beseda enaka vpisani: p = x. Izračun sindroma z:   0   1         1 0 1 0 1 0 1   1 1 ⊕ 1 0   z   = H · r = 0 1 1 0 0 1 1 · 0 = 1 ⊕ 1 ⊕ 1 ⊕ 1 = 0                 0 0 0 1 1 1 1 0 1 ⊕ 1 0     1   1 Ker v pomnilniku ni prišlo do nobene napake, je izračunani sindrom enak 0. d) Ko ugotovimo, da je kodna beseda v pomnilniku brez napak, lahko podatkovne bite iz nje dekodiramo s pomočjo dekodirne matrike R. Iz pomnilnika sprejet dekodirani podatkovni vektor označimo s pr.   0   1     0 0 1 0 0 0 0 1     1     0 0 0 0 0 1 0 0   p   r  = R · r = · 0 =          0 0 0 0 0 1 0 1       0 0 0 0 0 0 0 1   1  1      1 Iz pomnilnika sprejet dekodirani podatkovni vektor pr je enak podatkovnemu vektorju p, ki je bil v pomnilnik vpisan. e) Zdaj predpostavimo, da je prišlo v pomnilniku do enojne napake na petem bitnem mestu – to je na podatkovnem bitu d2.   0   1         ⊕ 1 ⊕ 1 1 1 0 1 0 1 0 1   1 1   z   = H · r = 0 1 1 0 0 1 1 · 0 = 1 ⊕ 1 ⊕ 1 ⊕ 1 = 0 ↑                 0 0 0 1 1 1 1 1 1 ⊕ 1 ⊕ 1 1     1   1 52 Notranji pomnilnik Najbolj uteženi bit sindroma se nahaja spodaj, zato je njegove bite treba prebrati od spodaj navzgor. Vrednost sindroma je 1012 = 5 in s tem pokaže, da je napaka v kodni besedi na bitnem mestu 5. Tam se nahaja podatkovni bit d2. Tega je treba invertirati in s tem je enobitna napaka popravljena. f ) Zdaj predpostavimo, da je prišlo v pomnilniku do enojne napake na tretjem bitnem mestu – to je na podatkovnem bitu d1.   0   1         1 0 1 0 1 0 1   0 1 1   r   = H · r = 0 1 1 0 0 1 1 · 0 = 1 ⊕ 1 ⊕ 1 = 1 ↑                 0 0 0 1 1 1 1 0 1 ⊕ 1 0     1   1 Vrednost sindroma je 0112 = 3 in s tem pokaže, da je napaka v kodni besedi na bitnem mestu 3. Tam se nahaja podatkovni bit d1. Tega je treba invertirati in s tem je enobitna napaka popravljena. g) Zdaj predpostavimo, da je prišlo v pomnilniku do enojne napake na drugem bitnem mestu – to je na testnem bitu p2.   0   0         1 0 1 0 1 0 1   1 1 ⊕ 1 0   z   = H · r = 0 1 1 0 0 1 1 · 0 = 1 ⊕ 1 ⊕ 1 = 1 ↑                 0 0 0 1 1 1 1 0 1 ⊕ 1 0     1   1 Vrednost sindroma je 0102 = 2 in s tem pokaže, da je napaka v kodni besedi na bitnem mestu 2. Tam se nahaja testni bit p2. Ker se nobeden izmed podatkovnih bitov v pomnilniku ni spremenil, ni treba nič popravljati.   0   1         ⊕ 1 0 1 0 1 0 1 0 1   0 1   h)   z = H · r = 0 1 1 0 0 1 1 · 0 = 1 ⊕ 1 ⊕ 1 = 1 ↑                 0 0 0 1 1 1 1 1 1 ⊕ 1 ⊕ 1 1     1   1 Vrednost sindroma je 1102 = 6, kar naj bi pomenilo, da je prišlo do enojne napake na bitnem mestu 6, torej na podatkovnem bitu d3. To seveda ni res, saj je prišlo do dveh napak, na podatkovnih bitih d1 in d2. Vidimo torej, da Hammingov kod (7,4) ob ugotovljenem sindromu, ki je različen od 0, ne more razlikovati med situacijama, ko sta se spremenila dva bita ali samo eden. Če se je spremenil samo en bit, ga lahko popravi, če pa sta se spremenila dva bita, tega ne more odkriti in zmotno invertira tisti bit, na katerega pokaže izračunani sindrom. Notranji pomnilnik 53 5.13 Popravljanje enojnih/odkrivanje dvojnih napak s ko- dom (8,4) V problemu 5.12.h) smo pokazali, da Hammingov kod (7,4) ne more potrditi, da je v kodni besedi prišlo do dvojne napake. Če pa k štirim podatkovnim bitom dodamo še četrti testni bit p4, ki se izračuna kot soda pariteta nad celotno kodno besedo, to je nad štirimi podatkovnimi in tremi paritetnimi biti, dobimo Hammingov kod (8,4), ki poveča minimalno Hammingovo razdaljo 3 v kodu (7,4) na 4 v kodu (8,4). Zaradi tega lahko poleg popravljanja enojnih napak odkrije tudi dvojne napake, torej na dveh različnih bitih kodne besede. Vse zmožnosti odkrivanja in popravljanja napak Hammingovega koda (8,4) so zbrane v spodnji tabeli. Število napak Pariteta Sindrom Komentar 0 soda 0 ni napak 1 liha 0 napaka v p4 1 liha ̸= 0 enojna napaka, nanjo kaže sindrom 2 soda ̸= 0 dvojna napaka a) Za 4-bitno podatkovno besedo d1d2d3d4 = 1011 zapišite 8-bitno kodno besedo v Hammingovem kodu (8,4). b) Izračunajte sindrom in pariteto, če v pomnilniku na kodni besedi iz točke a) ni prišlo do nobene napake. Komentirajte rezultat. c) Izračunajte sindrom in pariteto, če je prišlo v pomnilniku na kodni besedi iz točke a) do napake na paritetnem bitu p4. Komentirajte rezultat. d) Izračunajte sindrom in pariteto, če je prišlo v pomnilniku na kodni besedi iz točke a) do napake na podatkovnem bitu d3. Komentirajte rezultat. e) Izračunajte sindrom in pariteto, če je prišlo v pomnilniku na kodni besedi iz točke a) do napake na dveh različnih podatkovnih bitih, na bitu d1 in bitu d2. Komentirajte rezultat. Rešitev: a) V Hammingovem kodu (7,4) je kodna beseda sestavljena iz štirih podatkovnih in treh testnih bitov v naslednjem vrstnem redu: p1p2d1p3d2d3d4. V Hammin- govem kodu (8,4) je tem sedmim bitom na koncu dodan paritetni bit p4. Ce- lotna kodna beseda za podatkovne bite 1011 je torej 01100110, kjer so podat- kovni biti črni, testni biti iz Hammingovega koda (7,4) rdeči, dodani paritetni (testni) bit koda (8,4) pa je zelen.   0   1         1 0 1 0 1 0 1 0 1 1 ⊕ 1 0           0 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 0 0 1 1 0 0 1 1 0   b)   z = H × r = × = = ↑               0 0 0 1 1 1 1 0 0 1 ⊕ 1 0           1 1 1 1 1 1 1 1 1 1 ⊕ 1 ⊕ 1 ⊕ 1⊕ 0     1   0 54 Notranji pomnilnik Matriko H za Hammingov kot (8,4) dobimo iz matrike za kod (7,4), ki ji na koncu vsake vrstice dodamo paritetni bit p4 in četrto vrstico s samimi enicami, ker se paritetni bit p4 računa nad vsemi biti kodne besede. Rezultat je štiribitni stolpec, v katerem spodnji bit pod vodoravno črtico predstavlja pariteto, trije biti nad njim pa v smeri od spodaj navzgor predstavljajo sindrom. Pariteta je soda (0), sindrom ima vrednost 0002 = 0, kar ob upoštevanju podane tabele za tolmačenje rezultatov pomeni, da v pomnilniku ni prišlo do nobene napake.   0   1         1 0 1 0 1 0 1 0 1 1 ⊕ 1 0           0 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 0 0 1 1 0 0 1 1 0   c)   z = H × r = × = = ↑         ⊕ 1 0       0 0 0 1 1 1 1 0 0 1           1 1 1 1 1 1 1 1 1 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1 1     1   1 Vrednost bita p4, ki je napačen, je označena z rdečo barvo. Izračunana pariteta je liha (1) in sindrom je enak 0. Ta napaka pomeni, da je prišlo do napake na dodanem paritetnem bitu p4 v kodu (8,4). Ker je pokvarjen paritetni bit, kodne besede ni treba popravljati.   0   1         1 0 1 0 1 0 1 0 1 1 ⊕ 1 0           0 1 ⊕ 1 ⊕ 1 1 0 1 1 0 0 1 1 0   d)   z = H × r = × = = ↑               0 0 0 1 1 1 1 0 0 1 1           1 1 1 1 1 1 1 1 0 1 ⊕ 1 ⊕ 1 1     1   0 Vrednost bita d3, ki je napačen, je označena z rdečo barvo. Izračunana pariteta je liha (1) in sindrom je 1102 = 6, kar pomeni, da je prišlo do napake na podatkovnem bitu d3. Prišlo je torej do enojne napake na podatkovnem bitu d3 , ki se lahko invertira in s tem popravi.   0   1         1 0 1 0 1 0 1 0 0 1 ⊕ 1 0           0 1 ⊕ 1 ⊕ 1 1 0 1 1 0 0 1 1 0   e)   z = H × r = × = = ↑         ⊕ 1 ⊕ 1 1       0 0 0 1 1 1 1 0 1 1           1 1 1 1 1 1 1 1 1 1 ⊕ 1 ⊕ 1 ⊕ 1 0     1   0 V pomnilniku je prišlo do dvojne napake – na bitu d1 na tretjem in bitu d2 na petem bitnem mestu. Izračunana pariteta je soda in sindrom ima vrednost 1102 = 6, kar pomeni, da je prišlo do dvojne napake, torej do dveh napak na različnih bitih. Vidimo, da je Hammingov kod (8,4) sposoben ločiti med dvojno Notranji pomnilnik 55 napako na omenjenih bitih od enojne napake na bitu d3, česar Hammingov kod (7,4) ne zmore (glejte problem 5.12.h)). 5.14 Izračun testnih bitov za Hammingov kod (12,8) Predpostavite, da imamo v pomnilniku shranjeno 8-bitno besedo d1d2d3d4d5d6d7d8 = 01000011. a) Določite potrebno število testnih bitov za Hammingov algoritem, ki bo sposo- ben popravljati enobitne napake. b) Kakšne so vrednosti testnih bitov, ki se vpišejo k podatkovni besedi v pomnil- nik? c) Napišite razpored bitov in vrednost kodne besede v pomnilniku. Rešitev: a) Število podatkovnih bitov m = 8. Določiti moramo število potrebnih testnih bitov r r . Iz neenačbe m + r + 1 ≤ 2 izhaja, da je najmanjši možni r, ki za- dovolji to neenačbo, enak 4. Potrebujemo torej štiri testne bite. Tako dobimo Hammingov kod (12,8). b) Do enačb za testne bite pridemo, če upoštevamo položaje znakov × v celotni tabeli pri nalogi 5.11. p1 = d1 ⊕ d2 ⊕ d4 ⊕ d5 ⊕ d7 = 0 ⊕ 1 ⊕ 0 ⊕ 0 ⊕ 1 = 0 p2 = d1 ⊕ d3 ⊕ d4 ⊕ d6 ⊕ d7 = 0 ⊕ 0 ⊕ 0 ⊕ 0 ⊕ 1 = 1 p3 = d2 ⊕ d3 ⊕ d4 ⊕ d8 = 1 ⊕ 0 ⊕ 0 ⊕ 1 = 0 p4 = d5 ⊕ d6 ⊕ d7 ⊕ d8 = 0 ⊕ 0 ⊕ 1 ⊕ 1 = 0 K podatkovni besedi se v pomnilnik vpišejo testni biti p1p2p3p4 = 0100. c) Razpored in vrednosti bitov kodne besede so prikazani v spodnji tabeli. Bitno mesto 1 2 3 4 5 6 7 8 9 10 11 12 Razpored bitov p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 d8 Vrednosti bitov 0 1 0 0 1 0 0 0 0 0 1 1 5.15 Analiza napake s Hammingovim kodom (12,8) Za 8-bitno podatkovno besedo d1d2d3d4d5d6 d7d8 = 10011100 bi se pri Hammingovem kodu (12,8) v pomnilnik k njej shranili testni biti p1p2p3p4 = 1110. Ko se celotna ko-dna beseda prebere iz pomnilnika, se nad njo izračunajo testni biti ′ ′ ′ ′ p p p p = 1011 1 2 3 4. Katera podatkovna beseda je bila prebrana iz pomnilnika [1]? Rešitev: Bitno mesto 1 2 3 4 5 6 7 8 9 10 11 12 Razpored bitov p 1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 d8 Vpisana beseda 1 1 1 1 0 0 1 0 1 1 0 0 Prebran podatek 1 0 0 1 1 0 0 0 56 Notranji pomnilnik Vrednost celotne kodne besede, ki se vpiše v pomnilnik, je v tabeli prikazana v vrstici z oznako „Vpisana beseda“. Zdaj izračunamo operacijo ⊕ nad testnimi biti, ki so bili izračunani in vpisani v pomnilnik ob podatkovnih bitih, in tistimi, ki so bili izračunani, ko je bila beseda prebrana iz pomnilnika: ′ ′ ′ ′ p1 p 2 p 3 p4 ⊕ p p p p = 1110 ⊕ 1011 = 0101. Ker je najbolj uteženi testni bit na desni strani, ima rezultat vrednost 1 2 3 4 10102 = 10. To pomeni, da je napaka v pomnilniku nastopila na bitnem mestu 10 v kodni besedi. Na bitnem mestu 10 se nahaja podatkovni bit d6. To pomeni, da se je iz pomnilnika prebrala podatkovna beseda d1d2d3d4d5d6d7d8 = 10011000, kar je razvidno iz vrstice „Prebran podatek“ v tabeli. 5.16 Izračun števila testnih bitov za 1024-bitni podatek Koliko testnih bitov je potrebnih, če uporabljate Hammingov kod za popravljanje enojnih napak v 1024-bitni podatkovni besedi [1]? Rešitev: V neenačbo r r 2 − 1 ≥ m + r ⇒ m + r + 1 ≤ 2 vstavimo m = 1024 in ugotovimo, da je minimalno število testnih bitov, ki zadovolji to neenačbo, enako 11. Za popravljanje enojnih napak v 1024-bitni podatkovni besedi potrebujemo torej 11 testnih bitov. 5.17 Razvoj Hammingovega koda za 16-bitni podatek* Razvijte Hammingov kod za 16-bitne podatkovne besede, ki bo znal popravljati enobitne napake. a) Koliko testnih bitov mora imeti ta kod? b) Generirajte testne bite za podatkovno besedo d1d2d3 d4d5d6d7d8d9d10d11d12d13d14d15d16 = 1101001011001101. c) Pokažite, da kod pravilno odkrije napako na podatkovnem bitu d13. Rešitev: a) V neenačbo r r 2 − 1 ≥ m + r ⇒ m + r + 1 ≤ 2 vstavimo m = 16 in ugotovimo, da je minimalno število testnih bitov, ki zadovolji to neenačbo, enako 5. Tako dobimo Hammingov kod (21,5). b) S povečanjem tabele iz primera 5.11 na 21 bitnih mest in pet testnih bitov lahko pridemo do enačb za posamezne testne bite. Po vstavitvi vrednosti posa- meznih bitov podane podatkovne besede imajo testni biti naslednje vrednosti: p1 = d1 ⊕ d2 ⊕ d4 ⊕ d5 ⊕ d7 ⊕ d9 ⊕ d11 ⊕ d12 ⊕ d14 ⊕ d16= 1 p2 = d1 ⊕ d3 ⊕ d4 ⊕ d6 ⊕ d7 ⊕ d10 ⊕ d11 ⊕ d13 ⊕ d14 = 0 p3 = d2 ⊕ d3 ⊕ d4 ⊕ d8 ⊕ d9 ⊕ d10 ⊕ d11 ⊕ d15 ⊕ d16 = 1 p4 = d5 ⊕ d6 ⊕ d7 ⊕ d8 ⊕ d9 ⊕ d10 ⊕ d11 = 1 p5 = d12 ⊕ d13 ⊕ d14 ⊕ d15 ⊕ d16 = 1 Izračunani testni biti, zapisani z najbolj uteženim testnim bitom na levi strani, so: p5p4p3p2p1 = 11101. Notranji pomnilnik 57 c) Če pride v pomnilniku do napake na podatkovnem bitu d13, se bo spremenila vrednost tistih testnih bitov, ki računajo pariteto tudi nad podatkovnim bitom d13. To sta testna bita p5 in p2. Vrednost bita p5 se iz vrednosti 1 spremeni na 0, vrednost bita p2 pa iz vrednosti 0 v 1. Testni biti imajo zdaj torej naslednje vrednosti: p5 p4p3p2p1 = 01111. Nad istoležnimi testnimi biti pred in po napaki v pomnilniku izračunamo operacijo XOR: 11101 ⊕ 01111 10010 = 18 Rezultat 100102 v desetiškem številskem sistemu pomeni vrednost 18. Na 18. bitnem mestu se nahaja podatkovni bit d13. Tako je odkrita napaka na bitu d13. Napako lahko popravimo, tako da ta bit invertiramo. 58 Notranji pomnilnik Zunanji pomnilnik 59 6 Zunanji pomnilnik 6.1 Povprečno število prečkanih sledi za dostop na želeno sled na disku* Zamislite si disk z N sledmi, označenimi od 0 do (N-1), in predpostavite, da so zahtevani sektorji porazdeljeni na disku naključno in enakomerno. Izračunati želimo povprečno število sledi, ki jih je treba prečkati za iskanje sledi, na kateri je zahtevani sektor [1]. a) Najprej izračunajte verjetnost iskanja dolžine j, če se glava trenutno nahaja nad sledjo t. Namig: Treba je določiti skupno število kombinacij ob upošte- vanju dejstva, da so vsi položaji za cilj iskanja enako verjetni. b) Zdaj izračunajte verjetnost iskanja dolžine K. Namig: Treba je sešteti verje- tnosti za vse možne kombinacije premikov prek K sledi. c) Izračunajte povprečno število prečkanih sledi za iskanje z uporabo formule za pričakovano vrednost N −1 E X [ x ] = i · Pr [x = i] . i=0 Namig: Uporabite izreka P n n n (+1) Pn 2 n(n+1)(2n+1) i = i = i =1 in . Njun 2 i =1 6 dokaz najdete v prilogah A.3 in A.4. d) Dokažite, da se za velike vrednosti N povprečno število prečkanih sledi pri iskanju približuje N /3. Rešitev: Najprej si skicirajmo predstavitev N sledi diska: 0 1 · · · j−1 · · · N −j · · · N −2 N −1 a) Uporabimo zapis Ps[j/t] = Pr[iskanje dolžine j, če je glava trenutno postavljena nad sled t]. Upoštevajmo, da ima vsaka izmed sledi enako verjetnost, da je izbrana. Tako je verjetnost izbire katerekoli sledi 1/N. Potem lahko zapišemo: Ps[j/t ] = 1/N, če t ≤ j − 1 ali t ≥ N − j , Ps[j/t ] = 2/N, če j − 1 < t < N − j. V prvem primeru je trenutna sled tako blizu enemu robu diska (sledi 0 ali sledi N − 1), da je samo ena sled od nje oddaljena natanko j sledi. V drugem primeru obstajata dve sledi, ki sta od trenutne sledi t oddaljeni natanko za j sledi (ena levo in druga desno od t), zato je verjetnost iskanja dolžine j verjetnost, da je izbrana katerakoli izmed teh dveh strani, kar znaša 2/N. 60 Zunanji pomnilnik b) Naj bo Ps[K ] = Pr[iskanje dolžine K, neodvisno od položaja trenutne sledi]. Dobimo: N −1 N −1 1 Ps [ X X K ] = Ps [ K/t ] · Pr[trenutna sled je sled t ] = Ps[K/t]. N t=0 t=0 Iz točke a) vemo, da Ps [K/t] zavzame vrednost 1/N za 2K sledi in vrednost 2/N za (N-2K ) sledi. Tako dobimo: Ps [K] = + = = − . 2 2 N 1 2 K 2( N − 2 K ) 2K + 2(N − 2K ) 2 2K N N N N N c) E [ N−1 N−1 2 N−1 N−1 2 X X K 2 K 2 X 2 X 2 K ] = K · Pr [ K ] = − = K − K 2 2 N N N N K =0 K =0 K =0 K =0 = − = (N − 1) − 2 N 2 (N − 1) N 2 (N − 1) N (2N − 1) (N − 1) (2N − 1) 2 N 6 3N 3 2 N ( N − 1) − ( N − 1) (2 N − 1) N − 1 = = 3N 3N d) Če števec in imenovalec izraza za E[K ] v točki c) delimo z N, dobimo: N 1 − E [ N K ] = . 3 Za velike vrednosti N gre člen 1/N proti 0 in ga lahko zanemarimo, zato E[K ] limitira proti vrednosti N /3. 6.2 Povprečni čas dostopa do sektorja na trdem disku Za diskovni sistem definirajmo naslednje parametre: T s = iskalni čas, to je povprečni čas za postavitev glave nad želeno sled, r = hitrost vrtenja diska v številu obratov na sekundo, n = število bitov na sektor, N = kapaciteta sledi v bitih, T a = čas dostopa do sektorja. Izpeljite formulo za Ta kot funkcijo drugih parametrov [1]. Rešitev: Skupni čas dostopa do sektorja je sestavljen iz treh delov: iz povprečnega iskalnega časa, ki je potreben, da se glava premakne nad sled z želenim sektorjem, iz povprečne vrtilne zakasnitve zaradi čakanja, da pride pod glavo začetek želenega sektorja (v povprečju je to polovica časa za en obrat diska), in samega časa za prenos vseh bitov podatkov v sektorju. Podaja ga spodnja enačba: 1 n T a = Ts+ + . 2r rN Zunanji pomnilnik 61 6.3 Izračun parametrov zmogljivosti trdega diska (1/2) Predpostavite pogon magnetnega diska z osmimi stranmi (površinami) diska, 512 sledmi na eni strani diska in 64 sektorji na sled. Velikost sektorja je 1 KB. Povprečni iskalni čas je 8 ms, čas prehoda s sledi na sosednjo sled je 1,5 ms in disk se vrti s hitrostjo 3.600 rpm (obratov na minuto). Zaporedne sledi v cilindru se lahko berejo brez premika glave [1]. a) Koliko znaša kapaciteta diska? b) Predpostavite, da je datoteka shranjena v sosednjih sektorjih in sledeh sose- dnjih cilindrov z začetkom v sektorju 0 sledi 0 cilindra i. Koliko znaša pov- prečni čas, ki je potreben, da glava prispe do sektorja 0 sledi 0 cilindra i, kjer se začne datoteka? c) Ocenite čas, ki je potreben za prenos datoteke z dolžino 5 MB. d) Koliko znaša hitrost prenosa? Rešitev: a) Kapaciteta diska = 3 9 6 10 28 8 · 512 · 64 · 1 KB = 2 · 2 · 2 · 2 B = 2 B = 256 MB. b) Vrtilna zakasnitev = (čas za en obhod)/2 = 60/(2 · 3.600) = 8,3 ms. Povprečni čas dostopa do začetka datoteke = iskalni čas + vrtilna zakasnitev = 8 + 8,3 = 16,3 ms. c) Vsak cilinder vsebuje 8 sledi · 64 sektorjev/sled · 1 KB/sektor = 512 KB, zato 5 MB podatkov zahteva natanko 10 cilindrov. Disk bo porabil 8 ms, da najde cilinder, v povprečju 8,3 ms, da najde sektor 0, in 8 · (60/3.600) = 133,3 ms, da prebere vseh 8 sledi na enem cilindru. Zdaj se potrebuje 1,5 ms za premik na naslednji sosednji cilinder, kar je ravno čas za premik s sledi na sosednjo sled. Pri prehodu na novi cilinder moramo upoštevati vrtilno zakasnitev. Skupni čas za prenos datoteke je 8 + 8,3 + 133,3 + 9 · (1,5 + 8,3 + 133,3) = 1.437,5 ms. d) obrati sektorjev bajtov 3.600 Hitrost prenosa = · · = · 64 · 1 KB = 3,75 MB/s. sekundo obrat sektor 60 6.4 Izračun parametrov zmogljivosti trdega diska (2/2) Predpostavite disk z eno ploščo in naslednjimi parametri: hitrost vrtenja: 7.200 rpm; število sledi na eni strani plošče: 30.000; število sektorjev na sled: 600; iskalni čas: 1 ms za vsakih 100 prečkanih sledi. Disk je prejel zahtevo za dostop do naključnega sektorja na naključni sledi in predpostavite, da je glava diska v začetku nad sledjo 0 [1]. a) Koliko znaša povprečni iskalni čas? b) Koliko znaša povprečna vrtilna zakasnitev? c) Koliko znaša čas prenosa enega sektorja? d) Koliko znaša skupni povprečni čas za izpolnitev zahteve? 62 Zunanji pomnilnik Rešitev: a) Če predpostavimo, da je glava v začetku postavljena nad sled 0, se izračun poenostavi. Če je zahtevana sled s številko 0, je iskalni čas 0. Če je zahtevana sled s številko 29.999, je iskalni čas tisti čas, ki je potreben za prečkanje 29.999 sledi. Za naključno zahtevo bo povprečno število prečkanih sledi 29.999/2 = 14.999,5 sledi. Pri zakasnitvi 1 ms za 100 sledi je povprečni iskalni čas torej 149,995 ms. b) Pri hitrosti vrtenja 7.200 rpm naredi disk en obrat v času 8,333 ms. Povprečna vrtilna zakasnitev je tako 4,167 ms. c) Pri 600 sektorjih na sled in časom za en popoln obrat 8,333 ms je čas prenosa enega sektorja 8,333/600 = 0,01389 ms. d) Skupni povprečni čas za izpolnitev zahteve, torej za dostop do podatkov enega sektorja, je enak vsoti časov pri točkah a), b) in c), kar znaša skupaj okrog 154 ms. 6.5 Razlika med fizičnimi in logičnimi zapisi na trdem disku Navedimo razliko med fizičnimi in logičnimi zapisi. Logični zapis je zbirka sorodnih podatkovnih elementov, ki predstavljajo logično celoto, ne glede na to, kako ali kam se informacija shrani. Fizični zapis je sosednje področje hranilnega prostora, ki je definiran z značilnostmi hranilne naprave in operacijskega sistema. Predpostavite diskovni sistem, v katerem vsak fizični zapis vsebuje 30 120-bajtnih logičnih zapi-sov. Izračunajte, koliko prostora na disku (v sektorjih, sledeh in straneh diska) je potrebnega za hrambo 300.000 logičnih zapisov, če ima disk sektorje fiksne kapaci-tete 512 bajtov, 96 sektorjev na sled, 110 sledi na eni strani plošče in 8 uporabnih strani diska. Zanemarite morebitni(-e) zapis(-e) za glavo datoteke, indekse sledi in predpostavite, da se zapisi ne morejo raztezati prek dveh sektorjev [1]. Rešitev: Vsak sektor lahko shrani ⌊512/120⌋ = 4 logične zapise. Zahtevano število sektorjev je 300.000/4 = 75.000 sektorjev. Potrebnih je ⌈75.000/96⌉ = 782 sledi, kar nadalje pomeni ⌈782/110⌉ = 8 strani diska. 6.6 Čas prenosa podatkov med sektorji na trdem disku Imamo disk, ki se vrti s hitrostjo 3.600 rpm. Iskalni čas za premik glave med sose-dnjima sledema je 2 ms. Disk ima na sledi 32 sektorjev, ki so shranjeni zaporedno od sektorja 0 do sektorja 31. Bralno/pisalna glava dostopa do sektorjev po narašča-jočem vrstnem redu. Predpostavite, da je glava na začetku sektorja 1 na sledi 8. V glavnem pomnilniku je dovolj velik vmesnik, da lahko vanj shranimo celotno sled. Podatki med lokacijami na disku se prenašajo z branjem iz izvorne sledi v vmesnik v glavnem pomnilniku in nato pisanjem podatkov iz vmesnika na ciljno sled [1]. a) Koliko časa bi trajal prenos sektorja 1 na sledi 8 na sektor 1 na sledi 9? b) Koliko časa bi trajal prenos vseh sektorjev sledi 8 na ustrezne sektorje sledi 9? Zunanji pomnilnik 63 Rešitev: a) Čas je sestavljen iz naslednjih komponent: časa za branje izvornega sektorja, časa za dostop na ciljno sled, vrtilne zakasnitve in časa za pisanje ciljnega sektorja. En obrat diska za branje ali pisanje celotne sledi traja 60/3.600 = 16,7 ms. Čas za branje ali pisanje enega samega sektorja je 16,7/32 = 0,52 ms. Čas za premik na sosednjo sled (iz sledi 8 na sled 9) je 2 ms. Vrtilna zakasnitev je čas, ki se porabi, da se glava spet poravna s sektorjem 1. Ker je po zaključenem branju sektorja glava na njegovem koncu, se mora začetek tega sektorja zavrteti še 31/32 dolžine sledi, da se bo začetek sektorja prvič spet poravnal z glavo. To se zgodi po preteku 16,7 · (31/32) = 16,2 ms. Čas, potreben za premik glave s sledi 8 na sled 9, znaša 2 ms in se prekriva s časom 16,2 ms za vrtilno zakasnitev, zato se upošteva samo daljši čas, torej čas vrtilne zakasnitve. Skupni čas prenosa je 0,52 + 16,2 + 0,52 = 17,24 ms. b) Čas za branje ali pisanje celotne sledi je preprosto čas za en obrat plošče, to je 16,7 ms . Med branjem in pisanjem se porabita 2 ms za premik glave s sledi 8 na sled 9. V tem času so se trije sektorji in večina četrtega že zavrteli mimo glave. Ker pa je v vmesniku shranjena celotna sled, lahko pišemo sektorje na ciljno sled po drugem vrstnem redu, kot smo jih brali z izvorne sledi. Tako se lahko pisanje začne s petim sektorjem (ima številko 4) na sled 9. Ta sektor glava doseže po preteku 0,52 · 4 = 2,08 ms po končanju operacije branja. Skupni čas prenosa znaša torej 16,7 + 2,08 + 16,7 = 35,48 ms. 6.7 Izpeljava izraza za gostoto zapisa podatkov Izpeljite izraz za gostoto zapisa podatkov (di) na sledi i trdega diska v odvisnosti od polmera (r) in gostote zapisa podatkov (d) skrajno notranje sledi s številko 0. Predpostavite, da ima trdi disk gostoto D sledi na cm. Rešitev: r x sled 0 sled i Na zgornji sliki je narisana najbolj notranja sled trdega diska s polmerom r in sled i, ki ima polmer r + x. Količina podatkov na sledi (v B) je enaka dolžini sledi oz. obsegu krožnice (v cm), pomnoženi z gostoto zapisa podatkov na sledi (v B/cm). 64 Zunanji pomnilnik Ker je na vsaki sledi diska enaka količina podatkov, lahko zapišemo, da je količina podatkov na skrajno notranji sledi s številko 0 enaka količini podatkov na sledi i: 2πrd = 2π(r + x)di . Na razdalji x se nahaja i sledi z gostoto D sledi na cm, zato lahko razdaljo x zapišemo kot i x = . D Izraz za x vstavimo v prvo enačbo in iz nje izrazimo gostoto zapisa podatkov na sledi i: di = . i r rd + D 6.8 Redundantno polje neodvisnih diskov Imamo redundantno polje neodvisnih diskov (RAID) s štirimi diski. Vsak ima kapa-citeto 200 GB (gigabajtov). Koliko znaša razpoložljiva kapaciteta hrambe podatkov za vsakega izmed naslednjih nivojev RAID: 0, 1, 3, 4, 5, 6 [1]? Rešitev: Označimo z N potrebno število podatkovnih diskov za vsak nivo RAID. Izračun števila Razpoložljiva kapaciteta Nivo RAID podatkovnih diskov hrambe podatkov (GB) RAID 0 N = 4 800 RAID 1 2 · N = 4 ⇒ N = 2 400 RAID 3 N + 1 = 4 ⇒ N = 3 600 RAID 4 N + 1 = 4 ⇒ N = 3 600 RAID 5 N + 1 = 4 ⇒ N = 3 600 RAID 6 N + 2 = 4 ⇒ N = 2 400 6.9 Varnostno shranjevanje podatkov Razvijte strategijo za varnostno shranjevanje podatkov v računalniškem sistemu. Ena izbirna možnost je uporabiti priklop zunanjih diskov, kar stane 150 USD za vsak pogon 500 GB. Druga izbirna možnost je kupiti tračni pogon za 2.500 USD in tračne kasete s kapaciteto 400 GB po 50 USD. Tipična strategija varnostnega shra-njevanja podatkov je imeti dve množici medijev za hrambo na lokaciji računalnika in varnostne kopije shranjevati nanju izmenično, tako da je v primeru, če se sistem zruši v času kopiranja, prejšnja verzija še vedno nepoškodovana. Obstaja še tre-tja množica medijev na drugi lokaciji, ki se periodično ažurira s podatki z množice medijev na sami lokaciji [1]. a) Predpostavite, da morate varnostno shraniti 1 TB (terabajtov) podatkov. Ko- liko bi stal diskovni sistem za varnostno shranjevanje podatkov? Zunanji pomnilnik 65 b) Koliko bi stal tračni sistem za varnostno shranjevanje 1 TB podatkov? c) Pri kako veliki količini podatkov za vsako varnostno shranjevanje bi bila stra- tegija shranjevanja na trak cenejša? d) Katera vrsta strategije za varnostno shranjevanje daje prednost traku? Rešitev: a) Stroški diskovnega sistema za varnostno shranjevanje 1 TB podatkov bi znašali 2 · 3 · 150 = 900 USD. b) Stroški tračnega sistema za varnostno shranjevanje 1 TB podatkov bi znašali 2.500 + 3 · 3 · 50 = 2.950 USD. c) Naj bo Z število GB, pri katerih bi nas oba pristopa za varnostno shranjevanje podatkov stala približno enako. Cena za sistem varnostnega shranjevanja z diski je Cd = (Z /500) · 3 · 150 USD. Cena za sistem varnostnega shranjevanja s tračnim pogonom je Ct = 2.500 + (Z /400) · 3 · 50 USD. Pri enakih stroških za oba načina varnostnega shranjevanja podatkov velja Cd = Ct. Iz enačbe izrazimo Z in dobimo Z = 4.762 GB. Če moramo varnostno shranjevati več kot 4.762 GB podatkov, je strategija shranjevanja na trak cenejša. d) Shranjevanje na trak bi bilo bolj primerno, če bi želeli imeti več kopij vsako- kratnega varnostnega shranjevanja podatkov. 6.10 Serpentinasto zapisovanje podatkov na magnetni trak Magnetni trak je dolg 300 m in širok 12 mm. Podatki se zapisujejo z 32 sledmi v tehniki serpentinastega zapisovanja, kar pomeni, da se zapis vrši izmenično v eno in drugo smer. Gostota zapisa na sled po dolžini traku znaša 62,5 kB/m. Trak se premika s hitrostjo 1,5 m/s. Opomba: Pri tej nalogi upoštevajte, da 1 kB pomeni 1.000 B , saj se v tehničnih specifikacijah za shranjevanje podatkov (trakovi, optični diski in trdi diski) praviloma uporablja desetiški številski sistem. a) Izračunajte skupno količino podatkov, ki se lahko zapiše na trak. b) Izračunajte čas, ki je potreben za popoln zapis vseh podatkov. Rešitev: a) Skupno količino podatkov, ki se lahko zapiše na trak, izračunamo po naslednjih korakih. Število prehodov (naprej-nazaj) je enako številu sledi, torej 32. Dolžina zapisa na vseh sledeh skupaj L = 32 · 300 m = 9.600 m. Gostota zapisa 3 d = 62 , 5 kB / m = 62 , 5 · 10 B/m. Skupna količina podatkov, ki se lahko zapiše na trak, je L · d = 9.600 m · 62.500 B/m = 600.000.000 B = 600 MB. b) Čas zapisovanja, ki je potreben za popoln zapis vseh podatkov, je t = = 6.400 s ≈ 1 h 9.600 m 46 min 40 s . 1,5 m/s 66 Zunanji pomnilnik 6.11 Izračun števila sektorjev na DVD ROM-u Koliko sektorjev po 2.048 bajtov vsebuje enoslojni DVD-ROM s kapaciteto 4,7 GB? Opomba: 9 Pri tej nalogi upoštevajte, da 1 GB pomeni 10 B, saj se v tehničnih spe-cifikacijah za shranjevanje podatkov (trakovi, optični diski in trdi diski) praviloma uporablja desetiški sistem. Rešitev: Kapaciteto pretvorimo v bajte: 9 4 , 7 GB = 4 , 7 · 10 B. Dobimo 4 9 , 7 · 10 B 2.048 B = 2.294.921, 875. Ker je število sektorjev lahko samo celo število, upoštevamo, da enoslojni DVD-ROM s kapaciteto 4,7 GB vsebuje 2.294.921 sektorjev po 2.048 bajtov. 6.12 Hitrost vrtenja CD-ROM-a Optični senzor na CD-ROM-u bere podatke na notranjem robu diska pri polmeru r = 25 mm . Hitrost prenosa podatkov je 1× (tj. 150 kB/s = 150.000 B/s). Go-stota podatkov vzdolž spirale (število bitov na centimeter poti bralne glave) znaša D = 10 kb/cm = 10.000 b/cm . Izračunajte, s kakšno hitrostjo (v obratih na mi-nuto, rpm) se mora vrteti disk. Opomba: V tej nalogi je hitrost 150 kB/s zapisana v desetiškem številskem sistemu, kar pomeni 150 kB/s = 150.000 B/s. To sledi in-dustrijskim standardom za optične nosilce podatkov, kjer je 1 kB = 1.000 B. Rešitev: Pretvorba enote za hitrost prenosa: 150 kB/s = 150.000 B/s = 1.200.000 b/s. Polmer: r = 25 mm = 2,5 cm. Gostota podatkov: D = 10.000 b/cm. Tangencialna (linearna) hitrost branja: ν bitna hitrost 1.200.000 b/s = = = 120 cm/s = 1,2 m/s. D 10 . 000 b/cm Vrtilna frekvenca: f v 120 cm/s 120 −1 = = = s ≈ 7,639 Hz. 2 πr 2 π · 2 , 5 cm 5 π Hitrost vrtenja v obratih na minuto: 60 · f ≈ 60 · 7,639 ≈ 458,3 rpm. Disk se mora vrteti približno s hitrostjo 2 4 , 58 · 10 rpm. 6.13 Prilagajanje kotne hitrosti glede na položaj senzorja Optični senzor bere podatke na dveh različnih razdaljah od središča diska: najprej pri polmeru r1 = 30 mm, nato pa pri r2 = 60 mm. Ko je senzor pri r1, se disk vrti s kotno hitrostjo ω1 = 120 rad/s. Zunanji pomnilnik 67 a) Izračunajte linearno hitrost premikanja diska mimo optičnega senzorja pri pr- vem položaju. b) Kolikšna mora biti nova kotna hitrost ω2, da bo linearna hitrost premikanja diska mimo optičnega senzorja ostala enaka tudi pri polmeru r2? Rešitev: a) Linearna hitrost premikanja diska mimo optičnega senzorja pri polmeru r1 je ν1 = ω1 · r1 = 120 · 0,03 = 3,6 m/s b) Zaradi zahteve po konstantni linearni hitrosti (hitrosti gibanje diska mimo bralnega laserskega žarka) se mora disk za dostope bližje zunanjemu robu (npr. pri polmeru r2) vrteti počasneje kot za dostope bližje notranjemu robu (npr. pri polmeru r1), torej ω1 ≥ ω2. Veljati mora torej ω1r1 = ω2r2. Kotna hitrost ω2 pri polmeru r2 je zato ω r1 30 mm = 2 · ω 1 = · 120 rad/s = 60 rad/s r 2 60 mm Da ostane linearna hitrost enaka pri r2 = 60 mm, mora biti tam kotna hitrost ω2 = 60 rad/s. 68 Zunanji pomnilnik Vhodno-izhodna organizacija mikroprocesorjev 69 7 Vhodno-izhodna organizacija mikroprocesorjev 7.1 Naslavljanje vhodno-izhodnih vrat pri mikroprocesorju Intel 8088 V tipičnem mikroprocesorju se v vhodno-izhodnem (V/I) krmilniku za dano napravo uporablja ločen V/I naslov za sklicevanje na V/I podatkovna registra (podatkovni vhodni register in podatkovni izhodni register) in ločen V/I naslov za en krmilni in en statusni register. Takim registrom pravimo vrata (port). Pri mikroprocesorju Intel 8088 se uporabljata dva formata V/I ukazov. Pri enem formatu 8-bitna ope-racijska koda specificira V/I operacijo, sledi pa ji 8-bitni naslov V/I vrat. Druge operacijske kode za V/I vsebujejo naslov V/I vrat v 16-bitnem registru DX. Koliko vrat lahko mikroprocesor 8088 naslovi v vsakem od teh načinov naslavljanja [1]? Rešitev: V prvem načinu naslavljanja lahko procesor naslovi 8 2 = 256 V/I vrat. Tipično bi to omogočalo naslovitev 128 naprav. Vendar pa operacijska koda specificira bodisi vhodno ali izhodno operacijo, zato je naslove mogoče pouporabiti, tako da imamo 256 naslovov vhodnih vrat in 256 naslovov izhodnih vrat, kar omogoča naslovitev 256 naprav. V drugem načinu naslavljanja je mogočih 216 = 64K naslovov vrat. 7.2 Naslavljanje vhodno-izhodnih vrat pri mikroprocesorju Zilog Z8000 V družini mikroprocesorjev Zilog Z8000 obstaja zmožnost neposrednega naslavljanja vrat, pri katerem je 16-bitni naslov vrat del samega ukaza, in zmožnost posrednega naslavljanja vrat, pri katerem se ukaz sklicuje na enega izmed 16-bitnih splošno-namenskih registrov, ki vsebujejo naslov vrat. Koliko vrat lahko naslovi Z8000 v vsakem V/I načinu naslavljanja [1]? Rešitev: Z neposrednim načinom naslavljanja lahko ukaz naslovi do 216 = 64K vrat. Pri posrednem načinu naslavljanja je naslov vrat v 16-bitnih registrih, zato lahko tudi pri tem načinu naslavljanja ukaz naslovi do 216 = 64K vrat. 7.3 Blokovni V/I prenosi mikroprocesorja Zilog Z8000 Mikroprocesor Zilog Z8000 vključuje tudi zmožnost blokovnega V/I prenosa, ki je za razliko od DMA-ja pod neposrednim nadzorom procesorja. Ukazi za prenos blokov specificirajo register za naslov vrat (Rp), števni register (Rc) in ciljni register (Rd). Rd vsebuje naslov v glavnem pomnilniku, na katerega se shrani prvi prebrani bajt iz vhodnih vrat. Rc je katerikoli izmed 16-bitnih splošnonamenskih registrov. Kako veliki podatkovni bloki se lahko prenašajo [1]? Rešitev: Ker je Rc 16-bitni register, se lahko prenašajo bloki velikosti 216 = 64 KB. 70 Vhodno-izhodna organizacija mikroprocesorjev 7.4 Blokovni in neblokovni V/I prenosi za Zilog Z8000 Zamislimo si mikroprocesor, kot je Zilog Z8000, ki ima ukaz za blokovni V/I pre-nos. Po prvi izvedbi ukaza traja vsaka ponovna izvedba pet urinih ciklov. Če pa uporabimo ukaz za neblokovni V/I prenos, znaša skupni čas za včitanje in izvajanje ukaza 20 urinih ciklov. Izračunajte pohitritev prenosa z ukazom za blokovni prenos med prenosom blokov velikosti 128 bajtov [3]. Rešitev: Z uporabo neblokovnih V/I ukazov traja prenos 20 · 128 = 2.560 urinih ciklov. Z blokovnim V/I traja prenos 5 · 128 = 640 urinih ciklov (ob zanemaritvi časa za enkratno včitanje iterativnega ukaza in njegovih operandov). Pohitritev prenosa znaša (2.560 − 640)/2.560 = 0,75 ali 75 %. 7.5 Registri in naslovi V/I naprave Nek sistem temelji na 8-bitnem mikroprocesorju in ima dve V/I napravi. V/I kr-milnik za ta sistem uporablja ločene krmilne in statusne registre. Obe napravi obravnavata podatke po en bajt naenkrat. Prva naprava ima dve statusni liniji in tri krmilne linije. Druga naprava ima tri statusne linije in štiri krmilne linije [3]. a) Koliko 8-bitnih registrov V/I krmilnega modula potrebujemo za branje statusa in krmiljenje obeh naprav? b) Kolikšno je skupno število potrebnih registrov krmilnega modula, če je prva naprava samo izhodna? c) Koliko različnih naslovov je potrebnih za krmiljenje obeh naprav? Rešitev: a) Vsaka V/I naprava potrebuje ena izhodna vrata za krmilne ukaze in ena vho- dna vrata za status. Širina vsakih vrat je določena z ustreznim številom sta- tusnih in krmilnih linij. Na primer, statusna vrata prve naprave potrebujejo le dva bita. b) Prva naprava potrebuje samo ena vrata za podatke, medtem ko druga naprava potrebuje tako vhodna kot tudi izhodna podatkovna vrata. Ker vsaka naprava potrebuje ena krmilna in ena statusna vrata, je skupaj potrebnih sedem vrat. c) Za krmiljenje obeh naprav potrebujemo sedem različnih naslovov. Če pa upo- števamo, da lahko uporabimo isti naslov za dostop do dvojih vrat, če so ena vhodna, druga pa izhodna, lahko shajamo samo s štirimi različnimi naslovi. 7.6 Periodično preverjanje statusa naprave Pri programskem V/I procesor obtiči v čakalni zanki za preverjanje statusa V/I naprave. Da bi povečali učinkovitost, bi lahko programsko opremo za V/I napisali tako, da procesor periodično preverja status naprave. Če naprava ni pripravljena, lahko procesor skoči na izvajanje drugih opravil. Po preteku nekega časovnega intervala se procesor vrne na ponovno preverjanje statusa [1]. Vhodno-izhodna organizacija mikroprocesorjev 71 a) Predpostavite zgornjo shemo za oddajo podatkov znak za znakom na tiskalnik, ki lahko dela s hitrostjo 10 znakov na sekundo (cps). Kaj se bo zgodilo, če se njegov status preverja na vsakih 200 ms? b) Zdaj predpostavite tipkovnico z vmesnikom za en sam znak. V povprečju se znaki vnašajo s hitrostjo 10 cps, vendar lahko časovni interval med dvema zaporednima pritiskoma tipke znaša zgolj 60 ms. S kakšno frekvenco naj bi V/I program pregledoval tipkovnico? Rešitev: a) Če preverjamo status tiskalnika samo na vsakih 200 ms, se hitrost tiskanja upočasni na okrog 5 cps. b) Vhodne naprave moramo obravnavati drugače, da se vhodni podatek ne izgubi. Vmesnik je treba preverjati vsaj na vsakih 60 ms. V nasprotnem primeru tvegamo, da nazadnje vtipkani znak v vmesniku prepiše prejšnjega, ki še ni bil prebran. Tako lahko pride do izgubljanja nekaterih znakov. 7.7 Strežba naprave s programskim V/I Nek mikroprocesor preverja status V/I naprave vsakih 20 ms, kar je izvedeno s ča-sovnikom, ki procesor alarmira o vsakokratnem preteku tega časovnega intervala. Vmesnik naprave vsebuje dvoje vrat: ena za status in ena za podatkovni izhod. Koliko časa traja preverjanje in strežba naprave, če je frekvenca ure 8 MHz? Zaradi enostavnosti predpostavite, da vsi ukazni cikli trajajo 12 urinih ciklov [3]. Rešitev: Pri frekvenci ure 8 MHz znaša perioda ure 0,125 µs, zato ukazni cikel traja 12 · 0,125 = 1,5 µs. Za preverjanje statusa potrebujemo en ukaz vhodnega tipa za branje statusnega registra naprave, nato pa še vsaj en ukaz za pregled vsebine registra. Če je naprava pripravljena, potrebujemo en ukaz izhodnega tipa za prenos podatka k napravi. Skupno so torej potrebni trije ukazi, kar zahteva 3 · 1,5 = 4,5 µs. 7.8 Prednosti in slabosti pomnilniško preslikanega V/I Vhodno/izhodne naprave v mikroračunalnikih lahko uporabljajo bodisi pomnilniško preslikan V/I ali izoliran V/I [1]. a) Navedite prednosti pomnilniško preslikanega V/I. b) Navedite slabosti pomnilniško preslikanega V/I. Rešitev: a) Prednosti pomnilniško preslikanega V/I so: • Za delo z V/I vrati lahko uporabljamo velik nabor ukazov, kar dopušča bolj učinkovito programiranje. • Ne potrebujemo nobene dodatne krmilne linije na vodilu, da bi razlikovali med dostopom do pomnilnika in dostopom do V/I prostora. 72 Vhodno-izhodna organizacija mikroprocesorjev • Naslavljanje je prožnejše. Na primer, v naboru ukazov se lahko upora- bljajo različni načini naslavljanja in različni registri za izmenjavo podat-kov z V/I moduli. b) Slabosti pomnilniško preslikanega V/I so: • Za naslavljanje V/I naprav se porablja dragocen pomnilniški naslovni prostor. • Pomnilniško preslikan V/I uporablja ukaze za dostop do pomnilnika, ki so pri večini procesorjev daljši od V/I ukazov. Dolžina programov je zaradi tega večja. • Strojna oprema naslovnih dekodirnikov za V/I module je kompleksnejša, ker je naslov naprave daljši. 7.9 Ločen V/I v primerjavi s pomnilniško preslikanim V/I Včasih so V/I naprave opremljene z vmesnimi pomnilniki, ki sprejmejo bloke podat-kov. Tak vmesni pomnilnik lahko CPE napolni (ali izprazni) s podatki iz lastnega pomnilnika. Iterativni tipi ukazov so zelo učinkoviti pri pospeševanju takih prenosov. Težava je v tem, da veliko CPE nima iterativnih V/I ukazov. Na primer, mikropro-cesor Intel 8086 ima iterativne ukaze samo za prenose pomnilnik-pomnilnik. Če pa uporabimo pomnilniško preslikan V/I, jih lahko izkoristimo [3]. a) Zamislite si sistem na osnovi mikroprocesorja Intel 8086, ki uporablja ločen V/I naslovni prostor za prenose podatkov k oziroma od naprave, opremljene z vmesnim pomnilnikom kapacitete 128 bajtov. Podatkovni blok se prenese z izvajanjem programske zanke z uporabo „vhodnih“ ali „izhodnih“ ukazov mikroprocesorja 8086. Programska zanka prenese eno 16-bitno besedo na ite- racijo in za izvajanje porabi 50 urinih ciklov. Izračunajte, koliko traja prenos bloka podatkov dolžine 128 bajtov pri frekvenci ure mikroprocesorja 5 MHz. b) Predpostavimo, da namesto tega uporabimo pomnilniško preslikan V/I. Zdaj imamo možnost uporabe ukaza „move string“, ki traja samo 17 urinih ciklov na besedo. Izračunajte faktor, za katerega se pospeši prenos podatkov (v odstotkih). c) Vmesni pomnilnik V/I naprave se napolni z novimi podatki dvestokrat na sekundo. Kolikšen delež CPE časa se porabi za prenose na napravo oziroma iz naprave? Izračunajte ta deleža za sistema, obravnavana v točkah a) in b). d) Vmesni pomnilnik V/I naprave se napolni enkrat na sekundo. Ali je res po- membno, ali uporabimo programsko zanko ali ukaz za procesiranje nizov? Rešitev: a) Prenos bloka dolžine 128 bajtov traja (128/2) · 50 = 3.200 urinih ciklov in zato 3.200 · 0,2 = 640 µs. b) Prenos bloka z ukazom „move string“ traja 64·17·0,2 = 218 µs. Hitrost prenosa bloka podatkov se je v primerjavi s hitrostjo, doseženo v točki a), povečala za ((640 − 218)/640) · 100 %) = 66 %. Vhodno-izhodna organizacija mikroprocesorjev 73 c) V sistemu iz točke a) CPE za prenose porabi −6 200 · 640 · 10 s = 0,13 s na sekundo, kar pomeni 13 % svojega časa. V sistemu iz točke b) CPE za prenose porabi samo −6 200 · 218 · 10 s = 0,044 s na sekundo oziroma 4,4 % svojega časa. d) Za tako redke prenose podatkov je vpliv na porabljen čas CPE zanemarljiv ne glede na to, kateri izmed dveh pristopov se uporablja. 7.10 Prekinitveno voden V/I Zamislite si sistem z uporabo prekinitveno vodenega V/I za neko napravo, ki prenaša podatke s stalno povprečno hitrostjo 8 kB/s. Takšna „naprava“ bi lahko bila na primer telekomunikacijska linija [1]. a) Predpostavite, da procesiranje prekinitve traja okrog 100 µs (to je čas za skok v prekinitveni program, njegovo izvedbo in povratek v glavni program). Izra- čunajte delež procesorskega časa, ki se porabi za to V/I napravo, če ta prekinja za vsak bajt. b) Zdaj predpostavite, da ima naprava dva 16-bajtna vmesnika in prekinja proce- sor, ko se napolni eden izmed njiju. Seveda procesiranje prekinitve zdaj traja dlje, ker mora prekinitveni program prenesti 16 bajtov. V prekinitvenem pro- gramu traja prenos vsakega bajta 8 µs. Izračunajte delež procesorskega časa, ki se v tem primeru porabi za to V/I napravo. c) Nazadnje predpostavite, da procesor premore V/I ukaz za blokovni prenos, kot ga ima mikroprocesor Zilog Z8000. Ta pridruženemu prekinitvenemu programu omogoča prenos vsakega bajta v samo 2 µs. Izračunajte delež procesorskega časa, ki se tokrat porabi za to V/I napravo. Rešitev: a) V povprečju naprava prenese en bajt v času 1 3 = 125 µs. CPE porabi 100 µs 8 · 10 100 za procesiranje pridružene prekinitve – to je = 0 , 8 ali 80 % svojega časa. 125 Zaradi strežbe V/I naprave ostane CPE le malo časa za druga opravila. b) V tem primeru je časovni interval med prekinitvami 16 · 125 = 2.000 µs. Vsaka prekinitev zdaj zahteva 100 µs za prvi znak in čas za prenos vseh preostalih znakov, kar znese skupaj 100 + 15 · 8 = 220 µs. Delež porabljenega procesor- skega časa za to napravo je 220 = 0,11 ali 11 %. 2 . 000 c) V točki b) je prekinitveni program prenašal vsak bajt bloka z izvajanjem pro- gramske zanke, sestavljene iz več ukazov. Ti ukazi so prenašali vsak bajt v register CPE in od tod v pomnilnik ali V/I napravo (odvisno od smeri pre- nosa). Vsak ukaz v zanki se mora pri vsakem obhodu zanke vsakokrat včitati, dekodirati in izvesti. Ukaz za blokovni prenos odpravi potrebo po taki pro- gramski zanki. Zdaj prekinitveni program včita ukaz samo enkrat in ga pona- valjajoče izvaja, dokler ni prenesenih vseh 16 bajtov. Zaradi tega se zmanjša čas procesiranja prekinitve za 16 · 6 = 96 µs. Porabljen del procesorskega časa v intervalu ,22−0,096 2 ms je 0 = 0,062, to je 6,2 %. Faktor izboljšanja znaša 2 skoraj 2. 74 Vhodno-izhodna organizacija mikroprocesorjev 7.11 Zamenjava programskega V/I s prekinitveno vodenim Nek sistem nadzira operater z ukazi, ki jih vnaša prek tipkovnice. Povprečno število ukazov, vnesenih v osemurnem delovniku, je 60. Tipični ukaz vsebuje okrog 48 znakov [3]. a) Predpostavite, da procesor preverja tipkovnico vsakih 100 ms. Kolikokrat bo tipkovnica preverjana v časovnem intervalu osmih ur? b) Za koliko odstotkov bi se zmanjšalo število procesorjevih preverjanj tipkovnice, če bi uporabili prekinitveno voden V/I? Rešitev: a) Pri programskem V/I procesor preverja tipkovnico 10-krat na sekundo. Število pregledov v osmih urah je 10 · 60 · 60 · 8 = 288.000. b) Pri prekinitveno vodenem V/I tipkovnica prekine CPE, kadarkoli pritisnemo tipko. CPE streže tipkovnico samo ob nastopu prekinitev. Skupno število znakov, ki jih vtipka operater v osmih urah, je samo 60 · 48 = 2.880. Število dostopov CPE do tipkovnice se torej zmanjša za 288.000−2.880 = 0,99, to je za 288 . 000 99 %. 7.12 Prekinitve s programskim izpraševanjem Nekatere CPE niso sposobne obravnavati vektoriziranih prekinitev. Ko se aktivira edina linija za prekinitveno zahtevo takšne CPE, se izvede skok na fiksni pomnil-niški naslov, kjer se nahaja skupni prekinitveni program. Ta prebere status V/I naprave z najvišjo prioriteto, da ugotovi, ali je to naprava, ki zahteva strežbo. Če ni tako, prekinitveni program nadaljuje s pregledom statusa naprave z neposredno nižjo prioriteto in tako naprej, dokler ne odkrije izvora prekinitvene zahteve. Nato CPE skoči v drugi program, ki streže tej napravi. Takšna prekinitvena shema se imenuje programsko izpraševanje. Za razliko od vektorskih prekinitev ne zahteva zunanjih prekinitvenih vezij. Vsak prekinitveni vir preprosto aktivira skupno linijo za prekinitveno zahtevo na CPE prek vezja z odprtim kolektorjem. Po drugi strani pa povečuje režijo procesiranja prekinitve in upočasni odziv CPE na prekinitve [3]. a) Predstavljajte si sistem, ki uporablja prekinitve s programskim izpraševanjem in ima skupno osem prekinitvenih naprav. Po skoku v skupni prekinitveni program CPE porabi 10 µs za branje in pregled statusa vsake naprave. Koli- ko časa se porabi za izpraševanje, ko prekinitev povzroči naprava z najnižjo prioriteto? Predpostavite, da ni čakajočih prekinitev. b) Predpostavite, da je hitrost, s katero se generirajo prekinitve, enaka za vseh osem naprav. Kolikšen je povprečni čas, ki se porabi za programsko izpraše- vanje naprave? Spet predpostavite, da ni čakajočih prekinitev. Rešitev: a) Pred preverjanjem statusa naprave z najnižjo prioriteto to stori CPE za vseh sedem drugih naprav. Za to porabi 7 · 10 = 70 µs. b) Verjetnost, da prihaja prekinitev od 1. naprave, je 1/8 = 0,125, da prihaja od 2. naprave prav tako 0,125 in tako naprej. V povprečju je čas, ki se porabi za programsko izpraševanje naprave 0,125 · (1+2+3+4+5+6+7)·10 µs = 35 µs. Vhodno-izhodna organizacija mikroprocesorjev 75 7.13 Odzivni čas na prekinitev Načrtovalec želi ugotoviti, koliko časa je potrebnega do vstopa v prekinitveni pro-gram za napravo z najvišjo prioriteto. Iz uporabniškega priročnika za CPE in razgo-vorov s programskimi inženirji je načrtovalec zbral podatke, zbrane v spodnji tabeli. Opravilo Cikli dovršitev najdaljšega ukaza 50 aktiviranje vhoda za prekinitev na CPE po zahtevi V/I naprave 2 potrditev prekinitve in branje prekinitvenega vektorja od V/I naprave 16 shranjevanje vsebin registrov CPE na sklad 60 dostop do začetka prekinitvenega programa s prek. vektorjem 52 Ti podatki podajajo trajanja različnih opravil, ki zadevajo procesiranje prekinitve, izražena v številu urinih ciklov. Na podlagi teh informacij in dejstva, da CPE uporablja uro frekvence 5 MHz, odgovorite na naslednja vprašanja [3]. a) Izračunajte odzivni čas na prekinitveno zahtevo najvišje prioritete za najslabši primer (ignorirajte morebitne čakajoče prekinitve; odzivni čas je čas, potreben za dostop do prekinitvenega programa). b) V katerem razponu bodo variirali odzivni časi za prekinitve najvišje prioritete? c) Verjetnosti, da trenutni ukazni cikel za zaključitev potrebuje 20, 10 ali 6 urinih ciklov (ko se pojavi prekinitev), so 20, 30 in 50 %. Izračunajte povprečni čas odziva na prekinitve. Rešitev: a) Do najslabšega primera pride tedaj, kadar CPE ravno začne izvajati najdaljši ukazni cikel, ko se aktivira njegov vhod za zahtevo po prekinitvi. Takrat je odzivni čas (2 + 50 + 16 + 60 + 52) · 0,2 = 36 µs. b) Odzivni čas bo najkrajši, ko se prekinitveni vhod na CPE aktivira natanko takrat, ko ta ravno zaključi izvajanje trenutnega ukaznega cikla. CPE lahko takoj začne z opravili, povezanimi s skokom v prekinitveni program, saj mu pred tem ni treba čakati zaključka trenutnega ukaznega cikla, ker je ta že zaključen. Najkrajši odzivni čas torej znaša 36 − (50 · 0,2) = 26 µs. Odzivni časi bodo tako variirali v obsegu od 26 do 36 µs. c) V povprečju trenutni ukazni cikel, ki mora biti dokončan, doda zakasnitev (20 · 0,2 + 10 · 0,3 + 6 · 0,5) · 0,2 = 28 µs. 7.14 Režija pri procesiranju prekinitve V nekem sistemu traja v povprečju 30 µs do vstopa v ustrezni prekinitveni program, ko je prekinitev potrjena. Izvajanje prekinitvenega programa traja v povprečju 150 µs. Vendar pa strežba V/I naprave dejansko traja 135 µs. Preostalih 15 µs se porabi za povrnitev vsebine registrov CPE in za druge operacije, povezane z vrnitvijo v prekinjeni program [3]. 76 Vhodno-izhodna organizacija mikroprocesorjev a) Določite skupno režijo (v odstotkih), povezano s prekinitvijo, ob upoštevanju, da je edini produktivni čas tisti, ki se porabi za strežbo naprave. b) Meritve v realnem sistemu kažejo, da pride v povprečju na sekundo 750 pre- kinitev. Izračunajte, kolikšen delež časa CPE se porabi za prekinitve. Rešitev: a) Iskana režija znaša 30+15 · 100 % = 25 %. 30+150 b) CPE na sekundo porabi −6 750 · 180 · 10 s = 0,135 s časa za prekinitve, kar znaša 13,5 %. 7.15 Vpliv blokovnih prenosov na prekinitvene odzivne čase Da bi ocenili poslabšanje odzivnosti CPE na zahteve po prekinitvi zaradi prenosov blokov podatkov, ki jih ni mogoče prekiniti, si zamislite sistem, v katerem imajo naprave DMA propustnost 2 MB/s. CPE tega sistema ima ukaze za procesiranje nizov, katerih izvajanja ni mogoče prekiniti. Ta ukaz porabi 15 urinih ciklov za prenos vsake 16-bitne besede [3]. a) CPE uporablja ta ukaz za polnjenje 128-bajtnega vmesnega pomnilnika V/I naprave. Za koliko bi lahko takšni prenosi podaljšali odzivni čas na prekinitve? CPE uporablja uro frekvence 5 MHz. b) Bloki podatkov, ki jih prenašajo nekatere naprave DMA tega sistema, so dolgi do 256 bajtov. Kakšen je lahko vpliv prenosa bloka ene same naprave DMA na čase odzivov na prekinitve? c) Predpostavite, da morajo biti prekinitve potrjene najpozneje po 64 µs. Na katero dolžino bi morali omejiti dolžino podatkovnih blokov, da bi izpolnili to zahtevo? Izračunajte ju za oba tipa prenosov, obravnavana v točkah a) in b). Ignorirajte čas, ki je potreben za dokončanje trenutnega ukaza. Rešitev: a) Časi odziva na prekinitve bi se lahko podaljšali tja do (128/2) · 15· 0,2 = 192 µs – to je čas, ki je potreben za napolnitev 128 bajtov vmesnega pomnilnika V/I naprave. b) Pri hitrosti 2 MB/s traja prenos podatkovnega bloka dolžine 256 bajtov 256 B 6 2 · 10 B/s = 128 µs. Odziv na prekinitev bi se zaradi takšnih prenosov DMA lahko za- kasnil za do 128 µs. c) Če se podatki prenašajo z uporabo ukazov za procesiranje nizov, je meja dol- žine podatkovnih blokov 64 µs ⌊ 128 · ⌋ = 42 B. Če uporabljamo DMA, je meja 192 µ s 128 64 µs · = 64 B. 128 µs Vhodno-izhodna organizacija mikroprocesorjev 77 7.16 Vrivanje čakalnih stanj v cikel DMA Ena izmed ključnih značilnosti krmilnika DMA (DMAC-ja) je hitrost, s katero lahko prenaša podatke v pomnilnik ali iz pomnilnika. Vendar pa je dejanska hitrost DMA-ja odvisna tudi od hitrosti pomnilnika. Pogosto je treba upočasnjevati DMAC, tako da mu pomnilnik lahko sledi. DMAC lahko upočasnujemo bodisi z zniževanjem fre-kvence ure ali z vstavljanjem čakalnih stanj. Za primer vzemimo čip 8237A DMAC. Tako kot pri procesorjih 8088/8086 trajajo njegovi bralni in pisalni cikli štiri peri-ode urinega signala. Čip 8237A vzorči svoj vhod READY v periodi T3 in vrine eno čakalno stanje, če je v nizkem stanju. Od takrat naprej vriva čakalna stanja vse dotlej, dokler READY ne gre na visoko stanje [3]. a) Predpostavite, da je pomnilnik hitrejši od DMAC-ja. Kolikšna je najvišja mogoča hitrost prenosov DMA, če je frekvenca ure DMAC-ja 4 MHz? b) Če je frekvenca ure DMAC-ja 4 MHz, DMAC zagotavlja, da je širina impulza za branje 220 ns. Pomnilnik pa zahteva, da je ta parameter vsaj 350 ns. Koliko čakalnih stanj moramo vriniti v vsak bralni cikel DMA? Kakšna je posledična hitrost prenosa DMA? c) Informacija v priročniku za DMAC zagotavlja, da je širina prožilnega signala za branje enaka T − 30 ns, kjer je T perioda ure DMAC-ja. Ali lahko izpol- nimo zahtevo po širini prožilnega signala za branje iz pomnilnika brez vrivanja čakalnih stanj? Do katere vrednosti naj bi znižali frekvenco ure DMAC-ja, da bi zadostili zahtevi? Rešitev: a) Pri frekvenci 4 MHz znaša perioda ure 250 ns. Ker vsak cikel DMA traja štiri periode urinega signala, trajajo cikli DMA 4 · 250 ns = 1.000 ns = 1 µs. Tako zmore DMAC izvesti 1 milijon ciklov DMA na sekundo. b) Pomnilnik je prepočasen za 350 − 220 = 130 ns. Tako bo eno čakalno stanje, ki podaljša cikel DMA za 250 ns, več kot dovolj. Cikel DMA traja zdaj 5·250 ns = 1.250 ns = 1,25 µs, kar pomeni 0,8 milijona ciklov DMA na sekundo. c) Zahtevo lahko izpolnimo, če podaljšamo periodo ure, tako da bo izpolnjena neenačba T − 30 ns ≥ 350 ns. To pomeni, da mora biti T vsaj 380 ns, kar ustreza frekvenci ure −9 1 / (380 · 10 s) ≈ 2,6 MHz. 7.17 Prenos nadzora nad vodilom med CPE in DMAC Ko je naprava pripravljena na prenos DMA, generira zahtevo DMA k DMAC-ju. Nato DMAC aktivira linijo BR („bus request“) CPE, da zahteva nadzor nad vodilom. Pretečeni čas, dokler se CPE ne odzove s signalom BG („bus grant“), ni odvisen samo od določene CPE, ampak tudi od tega, kaj CPE dela v trenutku, ko DMAC postavi svojo zahtevo. Na primer, če je CPE zaposlena s ciklom na vodilu, bo počakala na njegovo zaključitev in šele nato odobrila vodilo. Tukaj predpostavimo, da se vodilo odobri znotraj dveh urinih ciklov. Podobno tudi tedaj, ko DMAC deaktivira signal BR, CPE signala BG ne deaktivira takoj. To stori po preteku dveh urinih ciklov. Predpostavite, da cikel DMA traja štiri urine cikle in da tako CPE kot DMAC uporabljata uro frekvence 5 MHz [3]. 78 Vhodno-izhodna organizacija mikroprocesorjev a) Koliko časa traja prenos 64 bajtov, če deluje DMAC v načinu kraje ciklov? Upoštevajte tudi čas za prevzem in sprostitev vodila. b) Ponovite izračun za delovanje v eksplozijskem načinu. c) Kolikšen delež izračunanih vrednosti predstavlja režijo. Rešitev: a) Pri frekvenci 5 MHz je perioda ure 200 ns. Za prenos enega bajta potrebujemo 2 + 4 + 2 = 8 urinih ciklov, kar pomeni 8 · 0,2 µs = 1,6 µs. Prenos 64 bajtov bo trajal 64 · 1,6 µs = 102,6 µs, če predpostavimo, da naprava DMA prenaša podatke po en bajt naenkrat. b) V eksplozijskem načinu traja prenos (2 + 64 · 4 + 2) · 0,2 µs = 52 µs. c) V načinu kraje ciklov je režija (4/8) · 100 % = 50 %. V eksplozijskem načinu je režija samo (4/256) · 100 % = 1,56 %. 7.18 Programski V/I proti prekinitveno vodenemu V/I Neka počasna V/I naprava preskrbi kvečjemu en bajt informacije vsakih 100 ms. CPE preverja status naprave redno približno na vsakih 50 ms (programski V/I). Nekatere analize kažejo, da za vsakokratno preverjanje statusa naprave CPE porabi okrog 20 µs svojega časa. Poleg tega je bilo ugotovljeno, da naprava v povprečju pre-skrbi samo en bajt na sekundo. Izračunajte, za koliko odstotkov se skrajša poraba časa CPE za komunikacijo s to napravo, če slednjo opremimo z zmožnostjo prekini- tev. Predpostavite, da prekinitveni program in pridružena režija znašata 40 µs [3]. Rešitev: Izračunali bomo ustrezna časa CPE, porabljena v intervalu ene sekunde za oba primera. V načinu s programskim V/I opravi CPE v eni sekundi (1.000 ms/50 ms) = 20 preverjanj statusa naprave. Za to porabi 20· 20 µs = 400 µs. Če je V/I naprava zmožna delati s prekinitvami, porabi CPE samo 40 µs. To predstavlja zmanjšanje porabe časa CPE za komunikacijo z V/I napravo za 400−40 · 100 % = 90 %. 400 7.19 Prekinitveno voden V/I v primerjavi z DMA Neka V/I naprava je zmožna sprejemati en bajt podatka vsakih 100 µs. Podatki se prenašajo na napravo v blokih po 256 bajtov. Najprej razmislite o zasnovi sistema tako, da bo naprava povzročila prekinitev, kadarkoli je pripravljena sprejeti naslednji bajt podatkov. Ocenjeno je, da strežba vsake prekinitve traja skupno okrog 40 µs [3]. a) Kakšen je koeficient izboljšanja, če uporabljamo DMA v načinu kraje ciklov in prekinemo CPE samo po prenosu celotnega bloka? Predpostavite, da se porabi 2 µ s časa za pridobitev vodila, prenos bajta in povrnitev nadzora nad vodilom nazaj k CPE. Predpostavite tudi, da CPE ne more delati nič koristnega, dokler je vodilo zasedeno. b) Predpostavite, da so takšni 256 bajtov dolgi bloki prenašani k napravi s pov- prečno hitrostjo enega bloka na vsaki 2 sekundi. Kakšen delež časa CPE se porabi za strežbo naprave, če uporabljamo prekinitveno voden V/I? Vhodno-izhodna organizacija mikroprocesorjev 79 c) Predpostavite, da se bloki prenašajo s hitrostjo 20 blokov na sekundo. Kolikšen delež časa CPE bomo prihranili, če bomo uporabili DMA? Rešitev: a) Prekinitveno voden V/I zahteva za prenos bloka 256 · 0,04 ms = 10,24 ms časa CPE. Z DMA-jem traja prenos samo 256 · 0,002 ms + 0,04 ms = 0,552 ms. Koeficient izboljšanja (skrajšanje časa prenosa bloka) znaša 10,24/0,552 = 18,55. b) Prenos enega bloka traja 256 · 40 µs = 10,24 ms. Ker sta zaporedna bloka med seboj oddaljena za 2 s, znaša delež časa CPE, ki se porabi za strežbo naprave, 10,24 ms · 100 % = 0,512 %. 2.000 ms c) Pri hitrosti prenosa 20 blokov na sekundo znaša čas med dvema zaporednima blokoma 1 s/20 = 50 ms. Če uporabljamo prekinitveno voden V/I, znaša delež časa CPE, ki se porabi za strežbo naprave, 10,24 ms ·100 % = 20,48 %. Z uporabo 50 ms DMA-ja pa znaša delež časa CPE za strežbo naprave zgolj 10,552 ms · 100 % = 50 ms 1,1 % kar pomeni, da smo prihranili kar 20,48 % - 1,1 % = 19,38 % časa CPE. 7.20 Čas prenosa nadzora nad vodilom Časovni potek cikla za dodelitev vodila nekega mikroprocesorja je identičen s tem na spodnji sliki. Novi gospodar prevzame vodilo z namenom, da prenese v pomnilnik blok z 256 bajti. Prenos vsakega bajta traja dve stanji TB. Koliko je dolg časovni interval z zaporednimi stanji TB, če je frekvenca ure 8 MHz [3]? Rešitev: Novi gospodar vodila bo porabil 2 · 256 = 512 stanj TB za prenos podatkov v pomnilnik. Pred prenosom traja eno stanje TB, da novi gospodar pridobi nadzor nad vodilom, po prenosu pa še eno stanje TB, da preda nadzor nad vodilom prejšnjemu gospodarju. Iz tega sledi, da je skupno število stanj TB enako 1 + 512 + 1 = 514. Časovni interval z zaporednimi stanji TB traja 514 · 125 ns = 64.250 ns = 64,25 µs. 80 Vhodno-izhodna organizacija mikroprocesorjev 7.21 Prioriteta dostopov do pomnilnika med CPE in DMA V skoraj vseh sistemih, ki vsebujejo module DMA, se dostopom DMA-ja do pomnil- nika daje višja prioriteta kot dostopom CPE do pomnilnika. Zakaj [1]? Rešitev: Če se procesor nekoliko zadrži pri poskusu branja iz pomnilnika ali pisanja v pomnil-nik, običajno ne pride do kakšne škode, ampak le do majhne izgube časa. Po drugi strani pa se lahko prenos DMA bodisi k V/I napravi ali od V/I naprave izvaja v obliki toka podatkov (npr. trdi disk ali magnetni trak), ki ga ni mogoče ustaviti. Če je torej modul DMA zadržan (zavrnjen nadaljnji dostop do glavnega pomnilnika), bodo podatki izgubljeni. 7.22 Upočasnitev CPE zaradi načina DMA s krajo ciklov Nek modul DMA prenaša znake z naprave, na kateri se podatki generirajo s hitrostjo 9.600 bit/s, v pomnilnik z uporabo kraje ciklov. Procesor včituje ukaze s hitrostjo 1 milijon ukazov na sekundo (1 MIPS). Za kolikšen delež časa bo procesor upočasnjen zaradi aktivnosti DMA-ja [1]? Rešitev: Zanemarimo operacije branja in pisanja podatkov in predpostavimo, da procesor samo včituje ukaze. Potem procesor potrebuje dostop do glavnega pomnilnika enkrat na vsako mikrosekundo. Modul DMA prenaša znake s hitrostjo 9.600/8 = 1.200 znakov na sekundo, kar pomeni enega na vsako 1/1.200 sekunde ali na vsakih 833 µs. DMA torej ukrade procesorju vsaki 833. cikel. To upočasni procesor za približno (1/833) · 100 % = 0,12 %. 7.23 Zakasnitev prenosa DMA zaradi zasedenosti vodila Cikel na vodilu neke CPE je sestavljen iz šestih urinih ciklov. Zaradi dolžine časa dostopa do pomnilnika mora CPE vrivati po dve čakalni stanji v vsak cikel na vodilu. Ko naprava DMA prek svojega vmesnika aktivira linijo BR, traja dva urina cikla, da si pridobi nadzor nad vodilom, če na vodilu trenutno ni nobene aktivnosti (CPE prek vodila ne izvaja nobenega prenosa) [3]. a) Koliko časa mora taka naprava čakati, če CPE poganjamo z uro frekvence 8 MHz? b) Ali bi uporabili DMA v eksplozijskem načinu za napravo, ki prenaša podatke s hitrostjo 0,75 MB/s? Rešitev: a) Predpostavimo najprej, da se trenutno na vodilu ne izvaja noben cikel. Urin cikel traja 125 ns. V/I naprava bo torej čakala 2 · 125 ns = 250 ns za prevzem nadzora na vodilu. Če pa se na vodilu trenutno izvaja cikel, bi V/I naprava morala čakati največ še dodatnih (6+2)·125 ns = 1.000 ns = 1 µs. V/I naprava bo na začetek prenosa DMA morala čakati za časovni interval med 250 ns in 1,25 µs. Vhodno-izhodna organizacija mikroprocesorjev 81 b) Če naprava prenaša podatke s hitrostjo 0,75 MB/s, sta zaporedna bajta odda- ljena 1,33 µs. Ta čas je prekratek, da bi CPE lahko pred prihodom naslednjega bajta napravila sploh kakšen ukazni cikel, zato način kraje ciklov ne pride v poštev. Za V/I napravo s podano hitrostjo bi uporabili DMA v eksplozijskem načinu. 7.24 Primerjava eksplozijskega načina in načina kraje ciklov Imamo sistem, kjer cikli na vodilu trajajo 500 ns. Prenos nadzora nad vodilom v katerikoli smeri (od procesorja k V/I napravi ali obratno) traja 250 ns. Ena izmed V/I naprav sistema ima hitrost prenosa 50 kB/s in uporablja DMA. Podatki se prenašajo po bajtih (en bajt naenkrat) [1]. a) Predpostavite, da uporabljamo DMA v eksplozijskem načinu. To pomeni, da vmesnik DMA-ja pridobi nadzor nad vodilom pred začetkom prenosa bloka in zadrži nadzor nad vodilom, dokler ne prenese celotnega bloka. Kako dolgo bi naprava vezala vodilo pri prenosu bloka s 128 bajti? b) Ponovite izračun za način DMA-ja s krajo ciklov. Rešitev: a) Prenos 128 bajtov podatkov traja 128 B = 2,56 ms. Temu moramo prišteti 50 kB / s še čas za prenos nadzora nad vodilom na začetku in po koncu prenosa, kar znaša 250 ns + 250 ns = 500 ns. Ta dodatni čas je proti času samega prenosa podatkov zanemarljiv, zato lahko zaključimo, da bo vodilo vezano za 2,56 ms. b) Čas, ki je potreben za prenos enega bajta v načinu kraje ciklov, je 250 ns + 500 ns + 250 ns = 1.000 ns = 1 µ s. Ker se med zaporednimi prenosi bajtov vodilo sprosti, je zasedeno samo 128 · 1 µs = 128 µs. Izbira DMA-ja v načinu kraje ciklov nam torej zmanjša zasedenost vodila v primerjavi z delovanjem DMA-ja v eksplozijskem načinu za faktor 2,56 ms = 20. 128 µ s 7.25 Krmilnik DMA Intel 8237A (1/2) Pregled časovnih diagramov za krmilnik DMA Intel 8237A kaže, da traja cikel DMA-ja na vodilu, v katerem prenese en bajt podatkov med pomnilnikom in V/I napravo, tri periode ure [3]. a) Predpostavite, da krmilnik 8237A uporablja uro frekvence 5 MHz. Koliko traja prenos enega bajta? b) Kakšna bi bila največja možna hitrost prenosa? c) Predpostavite, da pomnilnik ni dovolj hiter in moramo vriniti v vsak cikel DMA dve čakalni stanji. Kakšna bo dejanska hitrost prenosa? Rešitev: a) Pri frekvenci ure 5 MHz traja urin cikel 0,2 µs. Prenos enega bajta traja torej 3 × 0,2 µs = 0,6 µs. b) Najvišja hitrost prenosa, ki jo lahko dosežemo, je 1 B −6 = 1,67 MB/s. 0 , 6 · 10 s 82 Vhodno-izhodna organizacija mikroprocesorjev c) Če je čas pomnilniškega cikla daljši od 600 ns, moramo vriniti čakalna sta- nja z manipulacijo linije READY na 8237A. Upočasniti moramo cikle DMA. Vrivanje dveh čakalnih stanj v vsak cikel DMA bo podaljšalo cikel DMA na (3 + 2) · 0,2 µs = 1 µs. Rezultat tega je, da bo hitrost prenosa padla na 1 MB/s. 7.26 Krmilnik DMA Intel 8237A (2/2) Predpostavite, da v sistemu iz primera 7.25 pomnilniški cikel traja 750 ns. Do ka-tere vrednosti lahko zmanjšamo frekvenco ure vodila brez vpliva na doseženo hitrost prenosa [3]? Rešitev: Cikel DMA lahko traja do 750 ns brez potrebe po vrivanju čakalnih stanj. To ustreza periodi ure 750/3 = 250 ns, kar pomeni frekvenco ure 4 MHz. Ta pristop bi odpravil potrebo po vezju za vrivanje čakalnih stanj in tudi zmanjšal porabo moči. 7.27 Izbira načina delovanja krmilnika DMA Nek krmilnik DMA streže štirim sprejemnim telekomunikacijskim povezavam (ena povezava na vsak kanal DMA) s hitrostjo 64 kb/s (kilobitov na sekundo) na povezavo [1]. a) Ali bi uporabljali krmilnik DMA v eksplozijskem načinu ali v načinu kraje ciklov? b) Katero shemo prioritete bi izkoristili za strežbo kanalov DMA? c) Predpostavite delovanje DMA s krajo ciklov. Prenos enega bajta traja 2 µs. Koliko časa ostane CPE vodilo na voljo za druga opravila? Rešitev: a) Telekomunikacijska povezava lahko prenaša podatke nepretrgoma, zato eksplo- zijski način ne pride v poštev, saj krmilnik DMA sploh ne bi dal procesorju nobene priložnosti, da bi prišel do vodila. Potreben je torej DMA s krajo ciklov. b) Ker imajo vse linije enako hitrost prenašanja podatkov, bi vsem dodelili enako prioriteto. To pomeni izbiro prioritetne sheme z rotiranjem. c) Hitrost 64 kb/s ustreza 8 kB/s, to je en bajt vsakih 125 µs prek vsake linije. V časovnem intervalu 125 µs naj bi krmilnik DMA izvedel prenos vsaj štirih bajtov, kar pomeni, da ima CPE za druga opravila vodilo na voljo kar 125 µs − 4 · 2 µs = 117 µs. 7.28 Selektorski in multipleksorski kanal Nek 32-bitni računalnik ima dva selektorska kanala in en multipleksorski kanal. Vsak selektorski kanal podpira dva magnetna diska in dve magnetni tračni enoti. Na multipleksorski kanal sta povezana dva linijska tiskalnika, dva čitalnika kartic in 10 videoterminalov. Predpostavite naslednje prenosne hitrosti: Vhodno-izhodna organizacija mikroprocesorjev 83 diskovni pogon 800 kB/s, magnetna tračna enota 200 kB/s, linijski tiskalnik 6,6 kB/s, čitalnik kartic 1,2 kB/s, videoterminal 1 kB/s. Ocenite najvišjo skupno V/I hitrost v tem sistemu [1]. Rešitev: Na selektorskem kanalu je lahko sočasno postrežena samo ena naprava, zato je naj-višja skupna V/I hitrost 800 + 800 + 2 · 6,6 + 2 · 1,2 + 10 · 1 = 1.625,6 kB/s. 7.29 Primerjava programskega V/I in DMA Računalnik je sestavljen iz procesorja in V/I naprave D, povezane na glavni pomnil-nik M prek skupnega vodila s podatkovnim vodilom širine ene besede. Procesor lahko izvaja največ 106 ukazov na sekundo. Povprečni ukaz zahteva pet strojnih ciklov, od katerih trije uporabljajo pomnilniško vodilo. Operacije branja iz pomnil-nika in pisanja v pomnilnik zahtevajo en strojni cikel. Predpostavite, da procesor neprekinjeno izvaja procese v ozadju, ki zahtevajo 95 % njegovega izvajalnega časa, vendar ne vsebujejo nobenega V/I ukaza. Denimo, da je trajanje enega procesor-skega cikla enako enemu ciklu na vodilu. Zdaj predpostavite, da uporabljamo V/I napravo za prenos zelo velikih blokov podatkov med M in D [1]. a) Ocenite najvišjo V/I hitrost prenosa podatkov v besedah na sekundo, ki je mogoča skozi D, če se uporablja programski V/I in vsak enobesedni V/I prenos zahteva izvedbo dveh procesorskih ukazov. b) Ocenite to isto hitrost, če se uporablja DMA. Rešitev: a) Procesor lahko samo 5 % svojega časa posveti za V/I. Torej je najvišja hitrost izvajanja V/I ukazov 6 10 · 0,05 = 50.000 ukazov na sekundo. V/I prenosna hitrost je torej 25.000 besed na sekundo. b) Število strojnih ciklov v eni sekundi, ki so na razpolago za DMA, je enako 10 6 6 · (0 , 05 · 5 + 0 , 95 · 2) = 2 , 15 · 10 . Če vzamemo, da lahko modul DMA uporablja vse te cikle, ter zanemarimo morebitni nastavitveni čas in čas za preverjanje statusa, potem najvišja V/I prenosna hitrost znaša 6 2 , 15 · 10 besed na sekundo. 7.30 Hitrost prenosa podatkov pri serijski komunikaciji Podatkovni vir proizvaja 7-bitne znake IRA (International Reference Alphabet), ki jim je pripet paritetni bit. Izpeljite izraz za najvišjo dejansko hitrost prenosa podatkov ER (Effective data Rate) prek linije s pasovno širino R bitov na sekundo (bps) za naslednje primere [1]: a) asinhroni prenos s končnim bitom, ki traja poldrugo dolžino bitne celice, 84 Vhodno-izhodna organizacija mikroprocesorjev b) bitno usmerjeni sinhroni prenos z okvirjem, sestavljenim iz 48 krmilnih bitov in 128 informacijskih bitov, c) enako kot v b), le da je informacijsko polje dolgo 1.024 bitov, d) znakovno usmerjeni sinhroni prenos z devetimi krmilnimi znaki na okvir in 16 informacijskimi znaki, e) enako kot v d), le da je v okvirju 128 informacijskih znakov. Rešitev: Za vsak primer izračunamo delež g prenesenih bitov, ki so podatkovni biti. Potem je najvišja dejanska hitrost prenosa podatkov enaka ER = gR. a) Imamo 7 podatkovnih bitov, 1 začetni bit, končni bit dolžine poldruge bitne celice in 1 paritetni bit. 7 ER = gR = ·R = 0,67·R 1 + 7 + 1 + 1,5 b) Vsak okvir vsebuje 48 + 128 = 176 bitov. Število znakov je 128/8 = 16, število podatkovnih bitov pa 16 · 7 = 112. 112 ER = ·R = 0,64·R 176 c) Vsak okvir vsebuje 48 + 1.024 = 1.072 bitov. Število znakov je 1.024/8 = 128, število podatkovnih bitov pa 128 · 7 = 896. 896 ER = ·R = 0,84·R 1.072 d) Z devetimi krmilnimi znaki in 16 informacijskimi znaki vsebuje vsak okvir (9 + 16) · 8 = 200 bitov. Število podatkovnih bitov je 16 · 7 = 112. 112 ER = ·R = 0,56·R 200 e) Z devetimi krmilnimi znaki in 128 informacijskimi znaki vsebuje vsak okvir (9 + 128) · 8 = 1.096 bitov. Število podatkovnih bitov je 128 · 7 = 896. 896 ER = ·R = 0,82·R 1.096 7.31 Hitrost naraščanja/padanja signala po EIA RS-232C Standard Združenja elektronske industrije EIA RS-232C med drugim omejuje hitrost naraščanja/padanja električnega signala (slew rate) na izhodu gonilnika, ki ne sme biti večja od 30 V/µs. Ideja je upočasniti prehode signala in s tem zmanjšati presluh k drugim signalnim linijam. Če kabel gonilniku ne predstavlja dovolj kapacitivnosti, moramo dodati zunanji kondenzator C1 [3]. Vhodno-izhodna organizacija mikroprocesorjev 85 a) Denimo, da se signal na izhodu gonilnika spreminja med −11,75 V in 11,75 V. Prehodi (v vsaki smeri) so skoraj linearni in trajajo 0,5 µs. Ali prehodi signala izpolnjujejo omejitev RS-232C za hitrost naraščanja/padanja električnega si- gnala? b) Da bi izpolnili zahteve standarda RS-232C za hitrost naraščanja/padanja ele- ktričnega signala, se odločimo dodati zunanji kondenzator C1. Kakšna naj bo njegova približna vrednost, če gonilnik daje konstanten tok okrog 10 mA? c) Koliko časa traja prehod od −11,75 V do 11,75 V po priključitvi takšnega kondenzatorja na izhod vsakega gonilnika? d) V splošnem se časi vzpona merijo med točkama 10 % in 90 % prehoda. Izraču- najte čas vzpona brez in čas vzpona z dodanim kondenzatorjem C1 na izhodu gonilnika. Rešitev: a) Med prehodom se izhodna napetost spremeni za skupno 2 · 11,75 V = 23,5 V. Hitrost naraščanja/padanja električnega signala je 23,5 V = 47 V/µ 0 , 5 µs. Prehodi s signala torej ne izpolnjujejo zahteve za RS-232C. b) Zahtevano kapacitivnost lahko določimo iz enačbe q = CV , kjer je q naboj in V napetost na kondenzatorju C. Z odvajanjem obeh strani enačbe po času dobimo dq dV dV = C ali i = C , kjer je i tok skozi kondenzator. Za C dobimo dt dt dt C = = ≈ 330 pF dV V 30 i −3 10 · 10 A dt µs Če želimo izpolniti zahteve, mora gonilnik na svojem izhodu čutiti skupno kapacitivnost vsaj 330 pF. Dejansko kapacitivnost, ki jo čuti gonilnik, izraču- namo po isti enačbi, če vstavimo za dV vrednost 47 V/µs. Rezultat je okrog dt 210 pF. K tej kapacitivnosti v glavnem prispeva kabel. Da bomo zadovoljili zahteve za RS-232C, moramo dodati zunanji kondenzator C1 s kapacitivnostjo vsaj 330 pF − 210 pF = 120 pF. c) Nalogo si poenostavimo, če predpostavimo, da so prehodi signala linearni. Iz primerjave dolžin katet dveh pravokotnih trikotnikov lahko zapišemo 2 · 11,75 V 30 V t 1 µs = . Iz te enačbe lahko izpeljemo, da prehod signala (t) od −11,75 V do 11,75 V traja 0,783 µs. d) Točki 10 % in 90 % napetosti znašata 2,35 V in 21,15 V. Sprememba napetosti znaša torej 21,15 − 2,35 = 18,8 V. Čas vzpona pred priključitvijo konden- zatorja C1 je potemtakem 18,8 V t r 1 = = 0,4 µs, čas vzpona po priključitvi 47 V /µ s kondenzatorja pa je 18,8 V t r 2 = = 0,63 µ 30 V /µs. s 86 Vhodno-izhodna organizacija mikroprocesorjev 7.32 Asinhrona serijska komunikacija Predpostavite, da je frekvenca oddajne in sprejemne ure nekega serijskega komunika-cijskega krmilnika (SCC-ja) 38,4 kHz. Napravo smo inicializirali za Baudno hitrost s faktorjem ×16, kar pomeni, da ima ura na vhodu 16-krat višjo frekvenco kot de-janska Baudova hitrost. SCC signal ure na vhodu deli z Baudovim faktorjem 16 in tako dobi 16 notranjih period ure na vsak bit, ki omogočajo natančno vzorčenje. Kdaj najpozneje mora CPE prebrati sprejet znak, da se ne bo izgubil? Serijski komunikacijski krmilnik smo inicializirali tako, da znak vsebuje osem podatkovnih bitov, pariteto in dva končna bita [3]. Rešitev: Ker je faktor Baudne hitrosti ×16, je dejanska hitrost prenosa šestnajstkrat nižja 12 bitov. Najvišja hitrost prenosa znakov je torej 2.400 = 200 znakov/s. To pomeni, 12 1 s da so zaporedni znaki lahko do od frekvence ure in tako znaša 38.400 = 2.400 b/s. Vsak znak je sestavljen skupno iz 16 200 = 0,005 s 5 ms , to je vsaksebi. Po obvestilu o prejemu znaka ga mora CPE prebrati v naslednjih 5 ms, sicer tvegamo, da bo izgubljen. 7.33 Prekinitveno voden V/I za serijsko komunikacijo Nek serijski komunikacijski krmilnik dela s hitrostjo 2.400 b/s. Vsak znak je sesta- vljen iz 12 bitov [3]. a) Kolikšna je najvišja pogostnost, s katero bi krmilnik prekinjal CPE? b) Določite povprečno pogostnost prekinjanja CPE, če je povprečna izkoriščenost komunikacijskega kanala samo 0,2. Rešitev: a) Iz dane bitne hitrosti in formata izračunamo najvišjo hitrost prenosa, ki znaša 2.400 = 200 znakov/s – to je, en znak vsakih 5 ms. Pri polni dupleksni komu-nikaciji to velja za vsako smer. 12 b) Pogostnost prekinjanja znaša do 400 prekinitev na sekundo ali eno prekinitev na 2,5 ms. Pri danih pogojih se ta pogostnost zmanjša na 400 · 0,2 = 80 prekinitev na sekundo. 7.34 Časovne zanke Včasih moramo generirati časovne zakasnitve specificiranih dolžin za učasovanje določenih akcij v izvajanju programa. Seveda lahko takšne časovne zakasnitve ge-neriramo s programirljivimi časovniki. Drugačen pristop je uporaba programskih zank, katerih čas izvajanja lahko izračunamo iz časov izvajanja posameznih ukazov. Določena časovna zakasnitev se nato ustvari z ustreznim številom izvedb časovne zanke [3]. a) Iz uporabniškega priročnika CPE ugotovite čas izvajanja (v številu urinih ci- klov) vsakega ukaza v zanki. Nato s seštevanjem izračunate, da izvajanje zanke traja 80 urinih ciklov. Kolikokrat bi morali izvesti zanko, če morate ustvariti časovno zakasnitev 1 ms? Predpostavite, da CPE deluje s frekvenco ure 8 MHz. Vhodno-izhodna organizacija mikroprocesorjev 87 b) Kako bi generirali 250 µs širok impulz na eni izmed linij izhodnih vrat? c) Predpostavite, da nadgradite sistem z različico CPE, ki deluje na frekvenci 10 MHz . Kakšen bo novi čas izvajanja časovne zanke? Kakšne možnosti prila- goditev časovne zanke imate na voljo, če želite preprečiti časovne probleme v točki b)? Rešitev: a) Pri frekvenci 8 MHz znaša perioda ure 125 ns = 0,125 µs. Izvajanje zanke traja tako 80 · 0,125 µs = 10 µs. Za časovno zakasnitev 1 ms se mora zanka izvesti 1.000/10 = 100-krat. b) En bit izhodnih vrat bi postavili na vrednost 1, zanko bi izvedli 250/10 = 25-krat in nato resetirali ta bit nazaj na vrednost 0. c) Čas izvajanja zanke je zdaj 80 · 0,1 µs = 8 µs. Da bi preprečili časovne pro- bleme, moramo bodisi dodati določeno število ukazov NOP (no operation) za podaljšanje časa izvajanja zanke nazaj na 10 µs ali povečati število izvajanj zanke na 250/8, to je na 31. 7.35 Programirljivi časovniki Po možnosti časovne zakasnitve ustvarimo s strojno in ne s programsko opremo (glejte nalogo 7.34). Ponavadi to izvedemo s programirljivimi časovniki. Poleg tega, da odpravijo neposredno sodelovanje CPE, časovniki ponujajo tudi mnogo drugih koristnih funkcij. Zamislimo si sistem, ki uporablja programirljivi intervalni časovnik (PIT) Intel 8254. Časovnik uporablja uro frekvence 2 MHz. Vsebuje tri 16-bitne nastavljive sinhrone števnike, ki štejejo navzdol bodisi binarno ali v kodu BCD (dvojiško kodirano desetiško število) [3]. a) Kakšno začetno vsebino morate naložiti v prvi števnik, če ga želite uporabiti za generiranje prekinitev na vsako 1 ms? Kolikšen je najdaljši časovni interval, ki ga lahko generira ta števnik, če šteje v kodu BCD? b) Predpostavite, da je vaš sistem povezan z omrežjem. Poslati morate neko sporočilo k drugemu sistemu in želite izmeriti, koliko časa preteče, da prejmete odgovor nazaj. Opišite, kako bi izvedli takšno meritev. c) Kolikšen je najdaljši časovni interval, ki ga lahko izmerite s časovnikom Intel 8254? Rešitev: a) Pri frekvenci 2 MHz znaša perioda ure za proženje časovnika 0,5 µs. Da bi se časovnik pri takšnem taktu ure po inicializaciji iztekel (vrebina v števniku do- seže vrednost 0) po preteku časovnega intervala 1 ms, ga moramo inicializirati z začetno vrednostjo 1.000/0,5 = 2.000. Najdaljši časovni interval, ki ga s tem časovnikom lahko dosežemo v načinu BCD, ustreza največjemu BCD številu, ki ga lahko vpišemo v 16-bitni BCD števnik. To število je 9.999, ki ustreza časovnemu intervalu 9.999 · 0,5 µs = 4.999,5 µs ≈ 5 ms. 88 Vhodno-izhodna organizacija mikroprocesorjev b) V števnik vpišemo največjo vrednost takoj, ko sporočilo odpošljemo. Ko prej- memo odgovor, preberemo vsebino števnika, jo odštejemo od največje vredno- sti in razliko pomnožimo s periodo urinega signala. c) Če povežemo vse tri časovnike, lahko merimo časovne intervale do 48 2/f , kar pri frekvenci 2 MHz znaša več kot 4 leta in 5 mesecev. 7.36 Sinhrona serijska komunikacija* Nek sistem je opremljen z dvoje sinhronih serijskih komunikacijskih vrat, delujočih v načinu polnega dupleksa. Prenosna hitrost obeh (dvosmernih) kanalov je 9.600 b/s. Vsak informacijski okvir je dolg 1.064 bitov in nosi 128 bajtov podatkov [3]. a) Serijski komunikacijski krmilnik (SCC) je sprogramiran tako, da prekine CPE vsakokrat, ko je pripravljen sprejeti ali preskrbeti nov bajt podatkov. Kako pogosto bo SCC prekinjal CPE med sprejemanjem okvirja? Kaj pa, če SCC hkrati obravnava en okvir na smer vsakega kanala? b) Ocenjeno je, da procesiranje prekinitve (za vsak podatkovni bajt) traja skupaj okrog 50 µs in da sestavljen promet (prek obojih vrat) znaša 25 okvirjev na sekundo. Kolikšen delež svojega časa porabi CPE za strežbo SCC-ja? c) Predpostavite, da uporabljamo DMA in je CPE še vedno prekinjana enkrat na okvir. Podatki se prenašajo v pomnilnik ali iz pomnilnika s štirikanalnim DMAC-jem. V načinu kraje ciklov vsak cikel DMA traja 1 µs (vključno z re- žijo za prenos nadzora na vodilu). Ocenjeno je tudi, da med takšnimi prenosi obstaja 20-odstotna verjetnost, da bo procesor ostal nedejaven in čakal, da DMAC sprosti vodilo. Kolikšen del procesorskega časa zdaj zavzemajo opera- cije, povezane s SCC-jem? Predpostavite enak čas strežbe prekinitve in enako količino sestavljenega prometa kot pri vprašanju v točki b). d) Predpostavite, da je prenosna hitrost vsakega kanala 64 kb/s. Ali obstaja kakšna možnost uporabe prekinitveno vodenega V/I, kot smo to storili pri vprašanjih v točkah a) in b)? e) Ponovite vprašanje c) za prenosno hitrost 64 kb/s. Rešitev: a) Pri hitrosti 9.600 b/s traja prenos okvirja 1.064 b = 0,111 s. V tem časovnem 9 . 600 b/s intervalu mora SCC poslati CPE 128 podatkovnih bajtov, to je 128 · 8 = 1.024 podatkovnih bitov (40 preostalih bitov okvirja (5 bajtov) pa ne nosi podatkov, temveč krmilno informacijo). Z drugimi besedami, medtem ko se sprejema okvir, bo CPE prekinjana s pogostnostjo 128/0,111 s = 1.153-krat na sekundo, kar pomeni enkrat na vsakih 867 µs. Če sta oba kanala sočasno aktivna v obeh smereh, bo CPE v povprečju prekinjana na vsakih (867 µs)/4 = 217 µs. b) V časovnem intervalu 1 s je CPE prekinjena 25 · 128 = 3.200-krat. Strežba vseh teh prekinitev traja 3.200 · 50 µs = 160.000 µs = 0,16 s, kar predstavlja 16 % časa CPE. Vhodno-izhodna organizacija mikroprocesorjev 89 c) Število ciklov DMA je enako skupnemu številu podatkovnih bajtov, kar po- meni 3.200 ciklov DMA na sekundo. Vsi prenosi skupaj trajajo 3.200 · 1 µs = 3.200 µ s. CPE bo izgubila 20 % tega časa, to je 3.200 µs · 0,2 = 640 µs, saj bo vodilo v takšnem deležu zasedeno s prenosi DMA-ja. CPE pa je prekinjena še enkrat na vsak okvir in za to porabi še dodatnih 25·50 µs = 1.250 µs. Tako po- rabi CPE za delo s SCC-jem na sekundo skupno 640 µs + 1.250 µs = 1.890 µs. To predstavlja samo okrog 0,2 % časa CPE. d) Prenos enega okvirja zdaj traja 1.064 b = 0,0166 s = 16.600 µs. To ustreza 64 . 000 b/s prekinitvi na vsakih 16.600 µs/128 = 130 µs med sprejemanjem okvirja. Če pa sta oba kanala aktivna sočasno v obeh smereh, CPE tej hitrosti ne bo zmogla slediti. e) Čeprav se je hitrost prenosa spremenila, je ostalo skupno število podatkovnih bajtov na sekundo enako. Zaradi tega je odgovor na to vprašanje takšen, kot je opisan v točki c). 90 Vhodno-izhodna organizacija mikroprocesorjev Nabori ukazov CPE 91 8 Nabori ukazov CPE 8.1 Prikaz števil v šestnajstiškem zapisu Prikažite v šestnajstiškem zapisu [1]: a) pakiran desetiški format za število 23, b) ASCII znaka 23. Rešitev: a) 23 b) 32 33 8.2 Prikaz vrednosti pakiranih desetiških števil Za vsako izmed naslednjih pakiranih desetiških števil prikažite desetiško vrednost [1]: a) 0111 0011 0000 1001 b) 0101 1000 0010 c) 0100 1010 0110 Rešitev: a) 7309 b) 582 c) 0100 1010 0110 ni veljavno pakirano desetiško število, saj je binarna koda druge števke (1010) večja od 1001, zato je v zapisu napaka. 8.3 Najmanjše in največje število v dani predstavitvi Nek mikroprocesor ima besede dolžine enega bajta. Katero je najmanjše in katero največje celo število, ki je predstavljivo v naslednjih predstavitvah [1]: a) nepredznačeno, b) predznačena velikost, c) eniški komplement, d) dvojiški komplement, e) nepredznačeno pakirano desetiško število, f ) predznačeno pakirano desetiško število? 92 Nabori ukazov CPE Rešitev: a) 0; 255 b)-127; 127 c)-127; 127 d)-128; 127 e) 0; 99 f )-9; +9 8.4 Seštevanje pakiranih desetiških števil Mnogi procesorji zagotavljajo logiko za izvajanje aritmetike na pakiranih desetiških številih. Čeprav so pravila za desetiško aritmetiko podobna tistim za dvojiške opera-cije, desetiški rezultati zahtevajo nekaj popravkov posameznih števk, če se uporablja dvojiška logika. Razmislite o desetiškem seštevanju dveh nepredznačenih števil. Če je vsako število sestavljeno iz N števk, potem je v vsakem številu 4N bitov. Števili je treba sešteti z binarnim seštevalnikom. Predlagajte preprosto pravilo za popravek rezultata. Na ta način izvedite seštevanje števil 1.698 in 1.798 [1]. Rešitev: Desetiški števili 1.698 in 1.798 zapišemo z BCD števkami. Če je rezultat seštevanja dveh 4-bitnih BCD števk večji od 9 (dvojiško od 1001), je k rezultatu na trenutnem mestu treba prišteti vrednost 6 (dvojiško 0110), prenos 1 pa prišteti k BCD števki na sosednjem bolj uteženem mestu. 0001 0110 1001 1000 +0001 +0111 +1001 +1000 0010 1101 0010 0000 + 1 + 1 + 1 +0110 0011 1110 0011 0110 +0110 +0110 0100 1001 Končni rezultat seštevanja je dvakrat podčrtan: 1.698 + 1.798 = 3.496 se v kodu BCD zapiše kot 0011 0100 1001 0110. 8.5 Razlaga ukaza DAA Intelovih mikroprocesorjev x86 Arhitektura Intelovih mikroprocesorjev x86 (Intelova arhitektura, temelječa na pro-cesorju 8086) vključuje tudi ukaz, imenovan DAA (Decimal Adjust after Addition). DAA izvaja naslednje zaporedje ukazov: if ((AL AND 0FH) > 9) OR (AF = 1) then AL ← AL + 6; AF ← 1; else AF ← 0; Nabori ukazov CPE 93 endif; if (AL > 9FH) OR (CF = 1) then AL ← AL + 60H; CF ← 1; else CF ← 0; endif; Znak H na koncu števila pomeni, da je število zapisano v šestnajstiškem številskem sistemu. AL je 8-bitni register, ki vsebuje rezultat seštevanja dveh nepredznačenih 8-bitnih celih števil. AF je zastavica, ki se postavi, če pride do prenosa iz bita 3 na bit 4 v rezultatu seštevanja. CF je zastavica, ki se postavi, če pride do prenosa iz bita 7 na bit 8. Razložite funkcijo, ki jo opravlja ukaz DAA. [1] Rešitev: Ukaz DAA lahko uporabimo za ukazom ADD, da omogočimo uporabo ukaza za seštevanje na dveh 8-bitnih besedah, ki vsebujeta vsaka po dve pakirani desetiški števki. Če pride do desetiškega prenosa (to je takrat, ko je rezultat večji od 9) v desni števki, se ta pokaže bodisi kot števka rezultata, večja od 9, ali postavitev zastavice AF. Če tak prenos obstaja, rezultat popravimo s prištetjem vrednosti 6. Ilustrirajmo to z naslednjim primerom: 27 +46 6D +06 73 Drugi test podobno popravi prenos iz leve števke v 8-bitnem bajtu. Pakirano dese-tiško seštevanje nad več števkami lahko sprogramiramo z uporabo navadnega ukaza za seštevanje s prenosom (ADC) v zanki in vstavitvi enega ukaza DAA po vsakem seštevanju. 8.6 Vrednosti zastavic po izvedbi seštevanja za Intel x86 Analizirajte vrednosti zastavic po izvedbi seštevanja za arhitekturo Intel x86 [1]. a) Kakšna bo vrednost zastavic C (Carry), Z (Zero), O (Overflow), S (Sign), P (Parity) in A (Auxiliary Carry), če je bila zadnja izvedena operacija nad 8-bitno besedo (bajtom) na računalniku s procesorjem Intel x86 seštevanje operandov 00000010 in 00000011? b) Ponovite točko a) za seštevanje vrednosti -1 (v dvojiškem komplementu) in +1. Rešitev: a) 00000010 +00000011 00000101 94 Nabori ukazov CPE Carry = 0; Zero = 0; Overflow = 0; Sign = 0; Parity = 1; Aux. Carry = 0. Soda pariteta pomeni, da je v rezultatu sodo število enic. Pomožni prenos (Auxiliary Carry) se uporablja pri seštevanju pakiranih desetiških števil. Ka- dar pride do prenosa iz nižje utežene števke (spodnjega polbajta v zgornji polbajt), se ta zastavica postavi. b) Število -1 z osmimi biti v dvojiškem komplementu izračunamo tako, da naj- prej zapišemo število +1 v dvojiškem številskem sistemu kot 00000001. Zdaj izračunamo eniški komplement, kar pomeni, da vse ničle zamenjamo z enicami in vse enice z ničlami. Dobimo 11111110. Nazadnje moramo k temu številu v eniškem komplementu prišteti vrednost 1 po modulu 8 2, kar pomeni, da morebitni prenos iz najbolj uteženega (levega) mesta zavržemo. Tako dobimo število -1, ki ga v dvojiškem komplementu zapišemo kot 11111111. 11111111 +00000001 (mod 8 2) 1 00000000 Carry = 1; Zero = 1; Overflow = 0; Sign = 0; Parity = 1; Aux. Carry = 1. Pri seštevanju je prišlo do prenosa iz najbolj uteženega (levega) mesta, ki pa ga zaradi seštevanja po modulu 8 2 zavržemo. Seštevanje desetiških števil -1 in +1 nam v dvojiškem številskem sistemu, kjer je negativno število -1 predstavljeno z dvojiškim komplementom, resnično vrne rezultat 0. 8.7 Vrednosti zastavic po izvedbi odštevanja za Intel x86 Ponovite problem 8.6 za operacijo A − B, kjer A vsebuje desetiško vrednost -16, B pa desetiško vrednost +20 [1]. Rešitev: Aritmetično logična enota v procesorju namesto odštevanja A − B izvede seštevanje A + (-B). Po zgledu iz problema 8.6 se negativno število A = -16 z 8-bitno be-sedo v dvojiškem komplementu zapiše kot 11110000, negativno število (-B) pa kot 11101100. Po seštevanju A + (-B) dobimo naslednji rezultat: 11110000 +11101100 (mod 8 2) 1 11011100 Carry = 1; Zero = 0; Overflow = 0; Sign = 1; Parity = 0; Aux. Carry = 0. Kakšno je pravilo za zastavico Overflow pri seštevanju dveh predznačenih števil? Če sta obe števili pozitivni ali obe negativni, pride do prekoračitve, če ima rezultat nasprotni predznak. V našem primeru sta obe števili negativni (najbolj uteženi bit je enak 1), negativen je tudi rezultat, zato Overflow = 0. Izračun v desetiškem številskem sistemu: A − B = A + (-B) = -16 + (-20) = -36. Število -36 je v rangu predstavljivih 8-bitnih števil od -128 do +127, zato ni prekoračitve. Nabori ukazov CPE 95 8.8 Program za izračun izraza na štirih tipih procesorjev Primerjajte procesorje, ki imajo ukaze brez naslova, z enim naslovom, dvema naslo-voma ali tremi naslovi, tako da napišete program za izračun izraza A + B × C W = D − E × F za vsak navedeni tip procesorja. V spodnji tabeli so za vsakega od štirih procesorjev navedeni razpoložljivi strojni ukazi, zapisani z mnemoniki, v oklepajih pa je interpretacija teh ukazov. 0 naslovov 1 naslov 2 naslova 3 naslovi PUSH M (T ← M) LOAD M (AC←M) MOVE X,Y (X ← Y) MOVE X,Y (X ← Y) POP M (M ← T) STORE M (M←AC) ADD X,Y (X ← X + Y) ADD X,Y,Z (X ← Y + Z) ADD (T ← (T−1)+T) ADD M (AC←AC+M) SUB X,Y (X ← X−Y) SUB X,Y,Z (X ← Y−Z) SUB (T ← (T−1)−T) SUB M (AC←AC−M) MUL X,Y (X ← X × Y) MUL X,Y,Z (X ← Y × Z) MUL (T← (T−1)×T) MUL M (AC←AC×M) DIV X,Y (X ← X/Y) DIV X,Y,Z (X ← Y/Z) DIV (T← (T−1)/T) DIV M (AC←AC/M) A, B, C, D, E , F , W in M so pomnilniške lokacije, T je element na vrhu sklada, (T − 1) element tik pod vrhom sklada, AC je akumulator, spremenljivke X, Y in Z so pomnilniške lokacije ali registri procesorja [1]. Opomba: Pri procesorju, ki ima ukaze z 0 naslovi, sta izjemi ukaza PUSH in POP, ki imata po en naslov, pri procesorju s tremi naslovi pa ukaz MOVE, ki ima dva naslova. Navodilo: Programe poskusite napisati tako, da boste uporabili čim manj dodatnih začasnih spremenljivk, če sploh katero. V ta namen lahko uporabite tudi W . Vsi operandi morajo ohraniti svoje vrednosti tudi po zaključku programa, končni rezul-tat pa mora biti v W . Rešitev: 0 naslovov 1 naslov 2 naslova 3 naslovi PUSH A LOAD E MOVE R0, E MUL R0, E, F PUSH B MUL F MUL R0, F SUB R0, D, R0 PUSH C STORE T MOVE R1, D MUL R1, B, C MUL LOAD D SUB R1, R0 ADD R1, A, R1 ADD SUB T MOVE R0, B DIV W, R1, R0 PUSH D STORE T MUL R0, C PUSH E LOAD B ADD R0, A PUSH F MUL C DIV R0, R1 MUL ADD A MOVE W, R0 SUB DIV T DIV STORE W POP W 96 Nabori ukazov CPE 8.9 Množenje z aritmetičnim in logičnim pomikanjem v levo Tako aritmetično kot logično pomikanje v levo predstavljata množenje z 2, če ni prekoračitve, če pa pride do prekoračitve, operaciji ustvarita različna rezultata, ven-dar aritmetično pomikanje v levo ohranja predznak števila. Pokažite, da te izjave veljajo za 5-bitna cela števila v formatu dvojiškega komplementa [1]. Rešitev: Bitni Vrednost Aritmetično Vrednost Logično Vrednost vzorec pomikanje pomikanje v levo v levo 00000 0 00000 0 00000 0 00001 1 00010 2 00010 2 00010 2 00100 4 00100 4 00011 3 00110 6 00110 6 00100 4 01000 8 01000 8 00101 5 01010 10 01010 10 00110 6 01100 12 01100 12 00111 7 01110 14 01110 14 01000 8 00000 prekoračitev 10000 prekoračitev 01001 9 00010 prekoračitev 10010 prekoračitev 01010 10 00100 prekoračitev 10100 prekoračitev 01011 11 00110 prekoračitev 10110 prekoračitev 01100 12 01000 prekoračitev 11000 prekoračitev 01101 13 01010 prekoračitev 11010 prekoračitev 01110 14 01100 prekoračitev 11100 prekoračitev 01111 15 01110 prekoračitev 11110 prekoračitev 10000 -16 10000 prekoračitev 00000 prekoračitev 10001 -15 10010 prekoračitev 00010 prekoračitev 10010 -14 10100 prekoračitev 00100 prekoračitev 10011 -13 10110 prekoračitev 00110 prekoračitev 10100 -12 11000 prekoračitev 01000 prekoračitev 10101 -11 11010 prekoračitev 01010 prekoračitev 10110 -10 11100 prekoračitev 01100 prekoračitev 10111 -9 11110 prekoračitev 01110 prekoračitev 11000 -8 10000 -16 10000 -16 11001 -7 10010 -14 10010 -14 11010 -6 10100 -12 10100 -12 11011 -5 10110 -10 10110 -10 11100 -4 11000 -8 11000 -8 11101 -3 11010 -6 11010 -6 11110 -2 11100 -4 11100 -4 11111 -1 11110 -2 11110 -2 Nabori ukazov CPE 97 8.10 Nameni uporabe strojnega ukaza NOP Nabori ukazov mnogih procesorjev vsebujejo ukaz NOP (No Operation), kar po-meni brez operacije, ki razen inkrementiranja programskega števnika nima nobenega učinka na stanje procesorja. Za katere namene bi ta ukaz lahko bil koristen [1]? Rešitev: Strojna koda za ukaz NOP ima dolžino, ki je enaka najkrajši dolžini v naboru uka-zov procesorja, in dolžina kateregakoli drugega ukaza je mnogokratnik te dolžine. To dejstvo lahko koristno uporabimo pri razhroščevanju programa. Če želimo iz programa odstraniti nekaj strojnih ukazov, za katere menimo, da so odveč, lahko to naredimo hitro, brez potrebe po spreminjanju programa v urejevalniku, prevajanju in nato ponovnem nalaganju ažurirane strojne kode v pomnilnik kar tako, da v ob-stoječi strojni kodi programa del kode, ki ga želimo odstraniti, prepišemo s strojno kodo za NOP. Druga možna uporaba ukaza NOP za razhroščevanje je ta, da v določene testne točke programa vstavimo ukaz NOP, nato pa po potrebi strojno kodo za NOP za-menjamo s strojno kodo za skok v podprogram za razhroščevanje. Tretja korist ukaza NOP je vnašanje kratkih časovnih zakasnitev z vnaprej znanim časom trajanja (npr. po ukazu za sprožitev AD (analogno-digitalne) pretvorbe vsta-vimo potrebno število ukazov NOP in s tem vnesemo dovolj zakasnitve, da bo AD pretvorba končana pred izvedbo ukaza za branje vrednosti vzorca). 8.11 Analiza delovanja ukaza CMP pri procesorjih x86 Ukaz CMP (Compare) pri procesorjih x86 odšteje izvorni operand od ciljnega ope-randa in ažurira statusne zastavice (C, P, A, Z, S, O), vendar ne spremeni nobenega izmed operandov. Ukaz CMP lahko uporabimo, da ugotovimo, ali je ciljni operand večji (>), enak (=) ali manjši (<) od izvornega operanda [1]. a) Predpostavite, da sta operanda interpretirana kot nepredznačeni celi števili. Prikažite, katere statusne zastavice so relevantne za določanje relativne veli- kosti obeh celih števil in katere vrednosti zastavic ustrezajo pogojnim kodam oziroma relacijam manjši kot, večji kot in enak. b) Predpostavite, da sta operanda interpretirana kot predznačeni celi števili v dvojiškem komplementu. Prikažite, katere statusne zastavice so relevantne za določanje relativne velikosti obeh celih števil in katere vrednosti zastavic ustrezajo pogojnim kodam oziroma relacijam manjši kot, večji kot in enak. c) Ukazu CMP lahko sledi ukaz za pogojni skok Jcc (Jump if cc) ali SETcc (Set Condition), kjer je cc sklic na enega izmed 16 pogojev, zbranih v tabeli na naslednji strani. Podrobno razložite, da so pogoji preverjanja za predznačena števila pravilni. 98 Nabori ukazov CPE Simbol Testirani pogoj Komentar A, NBE C = 0 AND Z = 0 Above; Not below or equal (greater than, unsigned) AE, NB, NC C = 0 Above or equal; Not below (greater than or equal, unsigned); Not carry B, NAE, C C = 1 Below; Not above or equal (less than, unsigned); Carry set BE, NA C = 1 OR Z = 1 Below or equal; Not above (less than or equal, unsigned) E, Z Z = 1 Equal; Zero (signed or unsigned) G, NLE [(S = 1 AND O = 1) OR Greater than; Not less (S = 0 AND O = 0)] AND than or equal (signed) [Z = 0] GE, NL (S = 1 AND O = 1) OR (S Greater than or equal; = 0 AND O = 0) Not less than (signed) L, NGE (S = 1 AND O = 0) OR (S Less than; Not greater = 0 AND O = 1) than or equal (signed) LE, NG (S = 1 AND O = 0) OR (S Less than or equal; Not = 0 AND O = 1) OR (Z = greater than (signed) 1) NE, NZ Z = 0 Not equal; Not zero (signed or unsigned) NO O = 0 No overflow NS S = 0 Not sign (not negative) NP, PO P = 0 Not parity; Parity odd O O = 1 Overflow P P = 1 Parity; Parity even S S = 1 Sign (negative) Vir: [1] Rešitev: Rezultat ukaza CMP Z C a) cilj < izvor 0 1 cilj > izvor 0 0 cilj = izvor 1 0 Rezultat ukaza CMP Zastavice b) cilj < izvor S ̸= O cilj > izvor S = O AND Z = 0 cilj = izvor Z = 1 Nabori ukazov CPE 99 c) • Enak: Operanda sta enaka, zato je rezultat odštevanja enak nič (Z = 1). • Večji kot: Če je A večji kot B in sta A in B oba pozitivna ali oba negativna, operacija (A − B) v dvojiškem komplementu vrne pozitivni rezultat (S = 0) brez prekoračitve (O = 0). Če je A večji kot B in je A pozitiven, B pa negativen, je rezultat bodisi pozitiven (S = 0) brez prekoračitve (O = 0) ali negativen (S = 1) s prekoračitvijo (O = 1). V vseh teh primerih je rezultat različen od nič (Z = 0). Na kratko lahko pogoj zapišemo kot S = O AND Z = 0. • Večji ali enak kot: Razmišljanje je enako kot za pogoj „Večji kot“ s to razliko, da je rezultat lahko bodisi nič bodisi različen od nič, zato v pogoju odpade člen z zastavico Z: S = O. • Manjši kot: Ta pogoj je nasproten od pogoja za „Večji ali enak kot“: S ̸= O. • Manjši kot ali enak: Ta pogoj je nasproten od pogoja za „Večji kot“: S ̸= O OR Z = 1. • Ni enak: Operanda nista enaka, zato rezultat odštevanja ni enak nič: Z = 0. 8.12 Seštevanje šestnajstiških vrednosti z ukazi MMX Predpostavite, da dva registra vsebujeta naslednji šestnajstiški vrednosti: AB0890C2 in 4598EE50. Kakšen je rezultat njunega seštetja z ukazi MMX (Intelova arhitektura ukazne množice za multimedijo) [1]: a) za pakirane bajte, b) za pakirane besede? Rešitev: a) Seštevanje po bajtih: AB 08 90 C2 + 45 98 EE 50 F0 A0 7E 12 b) Seštevanje po 16-bitnih besedah: AB08 90C2 + 4598 EE50 F0A0 7F12 8.13 Pretvorba iz obratne poljske notacije v infiksno Pretvorite naslednje formule iz obratne poljske notacije v infiksno [1]. a) A B + C + D × b) A B / C D / + 100 Nabori ukazov CPE c) A B C D E + × × / d) A B C D E + F / + G − H / × + Rešitev: a) (A + B + C) × D b) (A / B) + (C / D) c) A / (B × C × (D + E)) d) A + (B × ((C + (D + E) / F) − G) / H) 8.14 Pretvorba iz infiksne notacije v obratno poljsko Pretvorite naslednje formule iz infiksne notacije v obratno poljsko notacijo [1]. a) A + B + C + D + E b) (A + B) × (C + D) + E c) (A × B) + (C × D) + E d) ( A − B) × (((C − D × E) / F) / G) × H Rešitev: a) A B + C + D + E + b) A B + C D + × E + c) A B × C D × + E + d) A B − C D E × − F / G / × H × 8.15 Uporaba ukaza IMUL za procesorje Intel x86 Nabor ukazov Intelove računalniške arhitekture x86 vsebuje tudi ukaz imul op1, op2, takojšnji-operand Ta ukaz pomnoži op2, ki je lahko bodisi vrednost v registru ali v pomnilniku, z vrednostjo takojšnjega operanda in postavi rezultat v op1, ki mora biti register. V naboru ukazov ni drugih ukazov take vrste s tremi operandi. Katera je možna uporaba tega ukaza [1]? Rešitev: To je primer namenskega ukaza CISC, načrtovanega za podporo prevajalnika. Za-mislimo si primer indeksiranja polja, kjer so elementi polja dolgi 32 bitov. Naslednji ukaz je ravno to, kar potrebujemo: imul ebx, i, 32 ebx je 32-bitni register, ki zdaj vsebuje odmik v bajtih v polje z indeksom i. Nabori ukazov CPE 101 8.16 Ureditev bajtov v pomnilniku Za naslednje podatkovne strukture narišite ureditev bajtov v pomnilniku za „veliki endian“ in „mali endian“ [1]. a) struct { double i; //0x1112131415161718 }s1; b) struct { int i; //0x11121314 int j; //0x15161718 }s2; c) struct { short i; //0x1112 short j; //0x1314 short k; //0x1516 short l; //0x1718 }s3; Rešitev: V rešitvi je pomen kratic naslednji: BE: veliki endian („big endian“) LE: mali endian („little endian“) 8.17 Program za ugotavljanje ureditve bajtov* Napišite kratek program, ki bo ugotovil, ali računalnik uporablja ureditev bajtov „veliki endian“ ali „mali endian“. Program poženite na svojem računalniku in zapi- šite izhod iz programa [1]. Rešitev: Eden izmed možnih programov za rešitev problema je napisan spodaj: 102 Nabori ukazov CPE #include main() { int integer; char *p; integer = 0x30313233; /* ASCII kode za znake ’0’, ’1’, ’2’, ’3’ */ p = (char *)&integer; if (*p==’0’ && *(p+1)==’1’ && *(p+2)==’2’ && *(p+3)==’3’) printf("To je racunalnik veliki endian.\n"); else if (*p==’3’ && *(p+1)==’2’ && *(p+2)==’1’ && *(p+3)==’0’) printf("To je racunalnik mali endian.\n"); else printf("Napaka v logiki za dolocitev, ali je racunalnik veliki ali mali endian.\n"); } Ta program smo pognali na računalniku s procesorjem Intel Core i7. Program je izpisal naslednje besedilo: To je racunalnik mali endian. Načini naslavljanja in formati ukazov CPE 103 9 Načini naslavljanja in formati ukazov CPE 9.1 Razumevanje različnih načinov naslavljanja (1/4) Podanih je nekaj vrednosti v pomnilniku računalnika: • Beseda 20 vsebuje vrednost 40. • Beseda 30 vsebuje vrednost 50. • Beseda 40 vsebuje vrednost 60. • Beseda 50 vsebuje vrednost 70. Računalnik ima procesor z akumulatorjem in ukaze z enim naslovom. Katere vre- dnosti naslednji ukazi naložijo v akumulator [1]? a) LOAD IMMEDIATE 20 b) LOAD DIRECT 20 c) LOAD INDIRECT 20 d) LOAD IMMEDIATE 30 e) LOAD DIRECT 30 f ) LODE INDIRECT 30 Rešitev: a) 20 b) 40 c) 60 d) 30 e) 50 f ) 70 9.2 Razumevanje različnih načinov naslavljanja (2/4) Naslov v programskem števniku označimo z X1. Ukaz, shranjen na naslovu X1, ima naslovni del (sklic na operand) X2. Operand, ki je potreben za izvedbo ukaza, je shranjen v pomnilniško besedo na naslovu X3. Indeksni register vsebuje vrednost X4. Kakšna je zveza med temi različnimi količinami za naslednje načine naslavljanja ukaza [1]? a) neposredno b) posredno c) relativno glede na PC 104 Načini naslavljanja in formati ukazov CPE d) indeksno Rešitev: a) X3 = X2 b) X3 = (X2) c) X3 = X1 + X2 + 1 d) X3 = X2 + X4 9.3 Razumevanje različnih načinov naslavljanja (3/4) Naslovno polje v ukazu vsebuje desetiško vrednost 14. Kje se nahaja ustrezni ope-rand za a) sprotno naslavljanje, b) neposredno naslavljanje, c) posredno naslavljanje, d) registrsko naslavljanje, e) registrsko posredno naslavljanje [1]? Rešitev: Operand se nahaja a) v naslovnem polju (njegova vrednost je 14). b) na pomnilniški lokaciji z naslovom 14. c) na pomnilniški lokaciji, katere naslov se nahaja na pomnilniški lokaciji 14. d) v registru 14. e) na pomnilniški lokaciji, katere naslov je v registru 14. 9.4 Razumevanje različnih načinov naslavljanja (4/4) Predpostavite 16-bitni procesor z naslednjo vsebino pomnilnika od lokacije 200 na-prej: 200 naloži v AC način 201 500 202 naslednji ukaz Načini naslavljanja in formati ukazov CPE 105 Polje naloži v AC v prvi besedi (operacijska koda) označuje, da ta ukaz naloži vre-dnost v akumulator. Polje način specificira način naslavljanja in, če je relevantno, označuje izvorni register. Predpostavite, da je izvorni register, če je uporabljen, re-gister R1, ki ima vrednost 400. Procesor ima tudi bazni register, ki vsebuje vrednost 100. Vrednost 500 na lokaciji 201 je lahko del pri izračunu naslova. Predpostavite, da lokacija 399 vsebuje vrednost 999, lokacija 400 vsebuje vrednost 1.000 in tako naprej. Določite dejanski naslov in operand, ki se bo naložil za naslednje načine naslavljanja [1]. a) neposredno b) takojšnje c) posredno d) relativno glede na PC e) s premikom f ) registrsko g) registrsko posredno h) avtoindeksno z inkrementom in uporabo R1 Rešitev: dejanski naslov operand a) 500 1.100 b) 201 500 c) 1.100 1.700 d) 702 1.302 e) 600 1.200 f ) R1 400 g) 400 1.000 h) 400 1.000 9.5 Ukaz za vejanje z relativnim naslavljanjem (1/2) Ukaz za vejanje z relativnim naslavljanjem glede na programski števnik je dolg 3 bajte. Desetiški naslov ukaza je 256.028. Določite naslov cilja vejanja, če je pred- značeni odmik ukaza -31 [1]. Rešitev: Spomnimo se, da relativno naslavljanje uporablja vsebino programskega števnika, ki kaže na naslednji ukaz za trenutnim ukazom. V tem primeru je trenutni ukaz na desetiškem naslovu 256.028 in je dolg 3 bajte, zato programski števnik vsebuje vrednost 256.031. Glede na odmik -31 je dejanski naslov 256.031 -31 = 256.000. 106 Načini naslavljanja in formati ukazov CPE 9.6 Ukaz za vejanje z relativnim naslavljanjem (2/2) Ukaz za vejanje z relativnim naslavljanjem glede na programski števnik je shranjen v pomnilniku na naslovu 62010. Vejanje se izvede na naslov 53010. Naslovno polje v ukazu je dolgo 10 bitov. Koliko znaša dvojiška vrednost v tem polju [1]? Rešitev: (PC + 1) + relativni naslov = dejanski naslov relativni naslov = dejanski naslov − (PC + 1) relativni naslov = 530 − (620 + 1) = -91 S pretvorbo desetiškega števila -91 v 10-bitno število v dvojiškem komplementu dobimo za odmik v naslovnem polju vrednost 1110100101. 9.7 Ukaz s posrednim načinom naslavljanja Kolikokrat mora procesor dostopiti do pomnilnika, ko včita in izvaja ukaz s posre-dnim načinom naslavljanja, če je ukaz a) računska operacija, ki zahteva en operand, b) vejanje [1]? Rešitev: a) Procesor mora dostopiti do pomnilnika trikrat − včitanje ukaza, včitanje na- slova operanda in včitanje samega operanda. b) Procesor mora dostopiti do pomnilnika dvakrat − včitanje ukaza, včitanje naslova operanda in njegova naložitev v programski števnik. 9.8 Bazno indeksni način naslavljanja Nek procesor pozna tudi bazno indeksni način naslavljanja. Predpostavite, da je izvajanje prišlo do ukaza s takšnim načinom naslavljanja in da ukaz specificira od-mik 1.970. Trenutna vrednost baznega registra je 48.022, indeksnega registra pa 8. Kolikšen je naslov operanda [1]? Rešitev: Procesor izračuna naslov operanda s seštevanjem odmika, vsebine baznega registra in vsebine indeksnega registra. Torej je operandov pomnilniški naslov enak 1.970 + 48.022 + 8 = 50.000. 9.9 Naslavljanje s predzmanjšanjem in postpovečanjem Definirajmo naslednje zapise. EA = (X)+ je dejanski naslov, ki je enak vsebini lokacije X, X pa se inkrementira za dolžino ene besede po izračunu dejanskega na-slova. EA = -(X) je dejanski naslov, ki je enak vsebini lokacije X, pri čemer se X dekrementira za dolžino ene besede, preden se izračuna dejanski naslov. EA = (X)-je dejanski naslov, ki je enak vsebini lokacije X, kjer se X dekrementira za dolžino ene besede po izračunu dejanskega naslova. Predpostavite spodaj navedene ukaze, Načini naslavljanja in formati ukazov CPE 107 če je vsak izmed njih zapisan v formatu, kjer je za operacijo najprej zapisan izvorni operand, nato ciljni operand, rezultat operacije pa se postavi v ciljni operand. a) OP X, (X) b) OP (X), (X)+ c) OP (X)+, (X) d) OP -(X), (X) e) OP -(X), (X)+ f ) OP (X)+, (X)+ g) OP (X)-, (X) Če uporabimo X za kazalec sklada, kateri izmed teh ukazov lahko sname dva vrhnja elementa s sklada, izvede določeno operacijo (npr. sešteje izvor k cilju in shrani rezultat v cilj) in postavi rezultat nazaj na sklad? Za vsak takšen ukaz povejte, ali sklad narašča proti nižjim ali višjim pomnilniškim naslovom [1]. Rešitev: a) Ne, ker je izvorni operand vsebina X-a, ne pa vrha sklada, ki je na lokaciji, kamor kaže X. b) Ne, ker se včita dvakrat isti operand. c) Da. Sklad raste proti višjim pomnilniškim naslovom. d) Ne, ker se včita dvakrat isti operand. e) Ne, ker se včita dvakrat isti operand. f ) Ne, ker se kazalec sklada inkrementira dvakrat, tako da se rezultat zavrže. g) Da. Sklad raste proti nižjim pomnilniškim naslovom. 9.10 Skladovno naslavljanje Predpostavite skladovno usmerjeni procesor, ki vsebuje skladovni operaciji PUSH in POP. Aritmetične operacije avtomatično zahtevajo vrhnji element ali dva vrhnja elementa sklada. Začnite s praznim skladom. Prikažite elemente na skladu med izvajanjem naslednjih ukazov [1]. PUSH 4 PUSH 7 PUSH 8 ADD PUSH 10 SUB MUL 108 Načini naslavljanja in formati ukazov CPE Rešitev: Ukaz Sklad (vrh na levi) PUSH 4 4 PUSH 7 7, 4 PUSH 8 8, 7, 4 ADD 15, 4 PUSH 10 10, 15, 4 SUB 5, 4 MUL 20 9.11 Izračun največjega števila enooperandnih ukazov* Predpostavite ukazno množico, ki uporablja ukaze dolžine 16 bitov. Operandovska polja so dolga 6 bitov. Obstaja K dvooperandovskih ukazov in L ukazov brez ope- randa. Kolikšno je največje število enooperandnih ukazov, ki so lahko podprti [1]? Rešitev: Naj bo X število ukazov z enim naslovom (z enim operandom). Možnost, da imamo K dvonaslovnih, X enonaslovnih in L breznaslovnih ukazov v 16-bitni ukazni besedi, zahteva, da velja: 26 6 6 16 · 2 · K + 2 · X + L = 2 Iz enačbe izrazimo X: 216 12 − 2 · K − L X = 6 2 Za preveritev tega rezultata predpostavimo primer, da nimamo ukazov brez naslova in z dvema naslovoma, to pomeni, da je L = K = 0. V tem primeru dobimo: 2 16 X 10 = = 2 26 Rezultat je pravilen, saj ob enem 6-bitnem naslovnem polju ostane 10 bitov za polje z operacijsko kodo, ki lahko zavzame 210 kombinacij. 9.12 Načrtovanje operacijske kode spremenljive dolžine* Načrtajte operacijsko kodo spremenljive dolžine, ki omogoča, da se vse navedeno zakodira v 36-bitni ukaz: • 7 ukazov z dvema 15-bitnima naslovoma in eno 3-bitno številko registra, • 500 ukazov z enim 15-bitnim naslovom in eno 3-bitno številko registra, • 50 ukazov brez naslovov ali registrov [1]. Načini naslavljanja in formati ukazov CPE 109 Rešitev: 36-bitni ukaz razdelimo na štiri polja: A, B, C in D. Polje A so prvi trije biti, polje B je naslednjih 15 bitov, polje C je naslednjih 15 bitov in polje D so zadnji trije biti. 7 ukazov s tremi operandi uporablja polja B, C in D za operande in A za operacijsko kodo. Naj bodo kombinacije 000 do 110 operacijske kode in kombinacija 111 koda, ki označuje, da ima ukaz manj kot tri operande. 500 ukazov z dvema operandoma je specificiranih s kombinacijo 111 v polju A in operacijsko kodo v polju B z operandoma v C in D. V polju B porabimo za 500 ukazov samo 9 od 15 bitov (29 = 512 > 500). Operacijske kode za 50 ukazov brez operandov lahko zakodiramo s preostalimi šestimi biti v polju B (26 = 64 > 50). 9.13 Izračun dolžine programske kode za izračun izraza Izhajajte iz rezultatov naloge 8.8. Predpostavite, da so pomnilniški naslovi 16-bitni. Sklici na operande v ukazih so 16-bitni, če se nanašajo na pomnilniški naslov, in 4-bitni, če se nanašajo na register. Procesor z enim naslovom uporablja akumulator, procesorja z dvema ali tremi naslovi pa imata 16 registrov in ukaze, ki delujejo nad vsemi kombinacijami pomnilniških naslovov in registrov. Predpostavite 8-bitno ope-racijsko kodo in dolžine ukazov, ki so večkratniki 4 bitov. Koliko bitov programa potrebuje vsak izmed procesorjev, da izračuna rezultat W [1]? Rešitev: a) Format ukaza brez naslova je sestavljen iz 8-bitne operacijske kode in izbirnega 16-bitnega naslova (operaciji PUSH M in POP M). Program ima 12 ukazov, 7 med njimi ima sklic na naslov. Skupno potrebno število bitov za program je: N0 = 12×8 + 7×16 = 208 bitov. b) Format ukaza z enim naslovom je sestavljen iz 8-bitne operacijske kode in 16- bitnega naslova. Program ima 11 ukazov. Skupno potrebno število bitov za program je: N1 = 11×(8 + 16) = 264 bitov. c) Format ukaza z dvema naslovoma ima 8-bitno operacijsko kodo in sklica na dva operanda. Za sklic na operand v registru se uporabijo 4 biti, za sklic na operand v pomnilniku pa 16 bitov. Program ima 9 ukazov, v katerih je 7 sklicev na operand v pomnilniku in 11 sklicev na operand v registru. Skupno potrebno število bitov za program je: N2 = 9×8 + 7×16 + 11×4 = 228 bitov. d) Format ukaza s tremi naslovi je sestavljen iz 8-bitne operacijske kode in skli- cev na tri operande, med katerimi je en operand v registru in dva operanda v pomnilniku ali pa sta dva v registrih in eden v pomnilniku. Program je sesta- vljen iz 5 ukazov, v katerih je skupaj 7 sklicev na pomnilnik in 8 na registre. Skupno potrebno število bitov za program je: N3 = 5×8 + 7×16 + 8×4 = 184 bitov. 110 Načini naslavljanja in formati ukazov CPE 9.14 Število operacijskih kod za mikroprocesor Zilog Z8001 16-bitni mikroprocesor Zilog Z8001 ima naslednji splošni format ukazov: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 način operacijska koda w/b operand 2 operand 1 Polje način specificira, kako iz operandovskih polj locirati operande. Bit w/b se uporablja v nekaterih ukazih za specifikacijo o tem, ali sta operanda bajta ali 16-bitni besedi. Polje operand 1 lahko (odvisno od vsebine polja način) specificira enega izmed 16 splošnonamenskih registrov. Polje operand 2 lahko specificira katerikoli splošnonamenski register razen registra R0. Kadar so v polju operand 2 same ničle, vsaka izmed originalnih operacijskih kod dobi nov pomen [1]. a) Koliko operacijskih kod ima mikroprocesor Zilog Z8001? b) Predlagajte učinkovit način za preskrbo več operacijskih kod in komentirajte posledice. Rešitev: a) 5-bitno polje za operacijsko kodo lahko zavzame 25 = 32 različnih vrednosti. Vsako vrednost v tem polju lahko interpretiramo na dva različna načina v odvisnosti od tega, ali so v polju operand 2 same ničle ali ne. Število predsta- vljivih operacijskih kod se zato podvoji, tako da lahko zakodiramo 64 različnih ukazov. b) Lahko bi pridobili dodatnih 32 operacijskih kod, če bi v ta namen dodelili še en bitni vzorec v polju operand 2. Na primer, za pridobitev več operacijskih kod bi lahko uporabili vzorec 0001. Cena za to bi bila omejena fleksibilnost pri programiranju, saj zdaj v polju operand 2 ne bi mogli več specificirati tudi registra R1. Razvoj programov v zbirnem jeziku 111 10 Razvoj programov v zbirnem jeziku 10.1 Določanje vrednosti zastavice C po izvedbi programa Odgovorite na spodnji vprašanji, če predpostavite zbirnik za procesorje Intelove računalniške arhitekture x86 [1]. a) Kakšna je vrednost statusne zastavice C (carry) po izvedbi naslednjih ukazov: mov al, 3 add al,4 b) Kakšna je vrednost statusne zastavice C (carry) po izvedbi naslednjih ukazov: mov al, 3 sub al, 4 Rešitev: a) Zastavica C ima vrednost 0. b) Zastavica C ima vrednost 1. 10.2 Vrednost zastavic Z, S in O po izvedbi ukaza cmp Predpostavite naslednji ukaz v zbirniku NASM (Netwide Assembler for the x86) za procesorje Intelove računalniške arhitekture x86: cmp vleft, vright Za predznačena števila so pomembne tri statusne zastavice. Če je vleft = vright, se postavi zastavica Z (zero). Če je vleft > vright, se zastavica Z zbriše in zastavica S (sign) ima enako vrednost kot zastavica O (overflow). Če je vleft < vright, se zastavica Z zbriše, zastavici S in O pa imata različni vrednosti [1]. a) Razložite, zakaj velja S = O, če vleft > vright? Delovanje statusnih zastavic Z, S in O ilustrirajte s primeri štiribitnih predznačenih števil z zapisom v dvojiškem komplementu. b) Razložite, zakaj velja S ̸= O, če vleft < vright? Delovanje statusnih zastavic Z, S in O ilustrirajte s primeri štiribitnih predznačenih števil z zapisom v dvojiškem komplementu. Rešitev: a) vleft > vright Če ni prekoračitve, ima razlika vleft − vright pravilno pozitivno vrednost, zato je S = O = 0. Če pa pride do prekoračitve, razlika nima pravilne pozi- tivne vrednosti, ampak je negativna, zato je S = O = 1. Skratka, pri pogoju vleft > vright po operaciji odštevanja vleft − vright za zastavici S in O velja zveza S = O. 112 Razvoj programov v zbirnem jeziku • Primer 1: vleft = 6, vright = 4, torej 6 − 4 = 6 + (-4) = 2 0110 = 6 +1100 = -4 0010 = 2, S = O = 0 • Primer 2: vleft = 6, vright = -4, torej 6 − (-4) = 6 + 4 = prekoračitev 0110 = 6 +0100 = 4 1010 = prekoračitev, S = O = 1 b) vleft < vright Če ni prekoračitve, ima razlika vleft − vright pravilno negativno vrednost, zato je O = 0 in S = 1. Če pa pride do prekoračitve, razlika nima pravilne negativne vrednosti, ampak je pozitivna, zato je O = 1 in S = 0. Skratka, pri pogoju vleft < vright po operaciji odštevanja vleft − vright za zastavici S in O velja zveza S ̸= O. • Primer 1: vleft = 4, vright = 6, torej 4 − 6 = 4 + (-6) = -2 0100 = 4 +1010 = -6 1110 = -2, S = 1, O = 0 • Primer 2: vleft = -6, vright = 4, torej -6 − 4 = -6 + (-4) = prekoračitev 1010 = -6 +1100 = -4 0110 = prekoračitev, S = 0, O = 1 10.3 Programiranje v zbirniku za procesorje x86 (1/9) Predpostavite naslednji odsek kode v zbirniku NASM (Netwide Assembler for the x86) za procesorje Intelove računalniške arhitekture x86: mov al, 0 cmp al, al je next Napišite ekvivalentni program, ki bo imel en sam ukaz [1]. Rešitev: V register al se naloži vrednost 0, v ukazu cmp pa se glede na izraz 0 − 0 ažurirajo vrednosti zastavic. Zastavica Z se postavi. V ukazu je je pogoj (Z=1) izpolnjen, zato se izvede skok na naslov next. Vse tri ukaze lahko zamenjamo z enim samim ukazom, ki izvede brezpogojni skok na naslov next: jmp next Razvoj programov v zbirnem jeziku 113 10.4 Programiranje v zbirniku za procesorje x86 (2/9) Za inicializacijo podatkov lahko uporabimo smernice, ki inicializirajo več lokacij. Na primer db 0x55, 0x56, 0x57 rezervira tri bajte in inicializira njihove vrednosti. NASM podpira posebni žeton $ za izračune, ki vključujejo trenutno mesto v zbirniš-kem programu. To pomeni, da $ izračuna mesto v zbirniškem programu na začetku vrstice, ki vsebuje izraz. Ob upoštevanju teh dejstev razmislite o naslednjem zapo-redju smernic: message db ’Zdravo, svet!’ msglen equ $-message Katera vrednost se dodeli simbolu msglen [1]? Rešitev: Simbolu msglen se dodeli konstantna vrednost 13. 10.5 Programiranje v zbirniku za procesorje x86 (3/9) Predpostavite, da tri simbolične spremenljivke V1, V2 in V3 vsebujejo nepredzna-čene celoštevilčne vrednosti. V zbirniku NASM za procesorje Intelove računalniške arhitekture x86 napišite del kode, ki bo premaknil najmanjšo vrednost v register ax. Uporabljate lahko samo ukaze mov, cmp in jbe [1]. Rešitev: V1: resw 1 ; vrednosti morajo biti prirejene V2: resw 1 ; pred zagonom programa V3: resw 1 main: mov ax, V1 ; naloži V1 za testiranje cmp ax, V2 ; ˇce ax <= V2, potem jbe L1 ; skok na L1 mov ax, V2 ; sicer premakni V1 v ax L1: cmp ax, V3 ; ˇce ax <= V2, potem jbe L2 ; skok na L2 mov ax, V3 ; sicer premakni V1 v ax L2: 10.6 Programiranje v zbirniku za procesorje x86 (4/9) Za medsebojno zamenjavo vsebine dveh registrov lahko uporabimo ukaz xchg. Pred-postavimo, da nabor ukazov za procesorje Intelove računalniške arhitekture x86 ne bi podpiral tega ukaza [1]. a) Izvedite ukaz xchg ax, bx samo z uporabo ukazov push in pop. 114 Razvoj programov v zbirnem jeziku b) Izvedite ukaz xchg ax, bx samo z uporabo ukaza xor (ne uporabljajte drugih registrov). Rešitev: a) push ax push bx pop ax pop bx b) xor ax, bx xor bx, ax xor ax, bx 10.7 Programiranje v zbirniku za procesorje x86 (5/9) V naslednjem programu, napisanem v zbirniku NASM za procesorje Intelove raču-nalniške arhitekture x86, predpostavite, da so a, b, x in y simboli za lokacije glavnega pomnilnika. Ugotovite, kaj ta program dela [1]. mov eax, a mov ebx, b xor eax, x xor ebx, y jnz L2 L1: ; zaporedje ukazov A jmp L3 L2: ; zaporedje ukazov B L3: Rešitev: Če je x = a in hkrati y = b, izvedi zaporedje ukazov A, sicer izvedi zaporedje ukazov B. 10.8 Programiranje v zbirniku za procesorje x86 (6/9) Če mikroprocesorji Intel delujejo v realnem načinu, lahko naslovijo le prvi 1 MB naslovnega prostora. Mikroprocesorja 8086 in 8088 delujeta samo v realnem načinu, kasnejši mikroprocesorji pa v realnem ali zaščitenem načinu. Delovanje v realnem načinu omogoča aplikacijski programski opremi, napisani za procesorja 8086/8088, da deluje tudi s procesorjem 80286 in naslednjimi brez sprememb v programski opremi. Vsi ti mikroprocesorji ob vklopu napajanja po privzetem začnejo delovati v realnem načinu. V realnem načinu se pomnilnik doseže s kombinacijo segmentnega naslova in naslova odmika. Segmentni naslov, ki se nahaja v enem izmed segmen-tnih registrov, definira začetni naslov kateregakoli pomnilniškega segmenta velikosti 64 KB. Naslov odmika izbere poljubno lokacijo znotraj 64 KB dolgega segmenta v pomnilniku. Razvoj programov v zbirnem jeziku 115 Mikroprocesorji 8086-80286 imajo štiri različne 16-bitne segmentne registre (cs – kodni segment, ss – skladovni segment, ds – podatkovni segment in es – dodatni segment) in naslov odmika (ip za naslov ukaza, sp ali bp za naslov sklada, bx, di, si, 8-bitno število ali 16-bitno število za naslov podatka in di za ciljni naslov niza). V realnem načinu se vsakemu segmentnemu registru interno z desne strani pripne 0H. Znak H pomeni, da je to šestnajstiška ničla, sestavljena iz štirih bitov 0. Dejansko to pomeni, da se vsebina segmentnega registra pomnoži s 16. To tvori 20-bitni naslov, ki predstavlja začetni naslov znotraj prvega 1 MB pomnilnika. Odmik do 64 KB od začetka segmenta določi naslov odmika. Poiščite pomnilniški naslov naslednjega ukaza, ki ga bo izvedel mikroprocesor Intel x86, če ta dela v realnem načinu za naslednje kombinacije v registrih cs:ip. Pri tej nalogi je segmentni register cs, naslov odmika pa vsebuje programski števnik ip [4]. a) cs = 1000H in ip = 2000H b) cs = 2000H in ip = 1000H c) cs = 2300H in ip = 1A00H d) cs = 1A00H in ip = B000H e) cs = 3456H in ip = ABCDH Rešitev: a) 12000H b) 21000H c) 24A00H d) 25000H e) 3F12DH 10.9 Programiranje v zbirniku za procesorje x86 (7/9) Določite pomnilniško lokacijo, naslovljeno z naslednjimi kombinacijami registrov mikroprocesorja Intel 80286, ki deluje v realnem načinu [4]. a) ds = 1000H in di = 2000H b) ds = 2000H in si = 1002H c) ss = 2300H in bp = 3200H d) ds = A000H in bx = 1000H e) ss = 2900H in sp = 3A00H Rešitev: Delovanje mikroprocesorjev Intel x86 v realnem načinu je predstavljeno v nalogi 10.8. Pri tej nalogi se za določitev začetka segmenta uporabljata segmentna registra ds ali ss, za naslov odmika pa registri di, si, bp, bx ali sp. 116 Razvoj programov v zbirnem jeziku a) 12000H b) 21002H c) 26200H d) A1000H e) 2CA00H 10.10 Programiranje v zbirniku za procesorje x86 (8/9) Predpostavite, da imajo v mikroprocesorju Intelove računalniške arhitekture x86 navedeni registri in odmik list naslednje vrednosti: ds =1100H, bx = 0200H, list = 0250H in si = 0500H. Določite naslov, do katerega dostopa vsak izmed naslednjih ukazov, če deluje mikroprocesor v realnem načinu [4]. a) mov list[si],edx b) mov cl,list[bx+si] c) mov ch,[bx+si] Rešitev: Za dostop do pomnilnika se uporablja podatkovni segmentni register ds in odmik, specificiran v ukazu. Delovanje mikroprocesorjev Intel x86 v realnem načinu je predstavljeno v nalogi 10.8. a) 11750H b) 11950H c) 11700H 10.11 Programiranje v zbirniku za procesorje x86 (9/9) Razvijte zaporedje ukazov v zbirniku za mikroprocesorje Intelove računalniške arhi-tekture x86, ki seštejejo 8-bitno BCD število v registrih ax in bx k 8-bitnemu BCD številu v registrih cx in dx. ax in cx sta najbolj utežena registra. Po seštevanju mora biti rezultat v registrih cx in dx [4]. Rešitev: push ax ; shranemo originalno vsebino registra ax mov al, bl add al, dl ; bl + dl daa ; desetiška prilagoditev po seštevanju bl + dl mov dl, al ; shranemo BCD števko 0 rezultata v dl mov al, bh adc al, dh ; bh + dh Razvoj programov v zbirnem jeziku 117 daa ; desetiška prilagoditev po seštevanju bh + dh mov dh, al ; shranemo BCD števko 1 rezultata v dh pop ax ; povrnemo originalno vsebino registra ax adc al, cl ; al + cl daa ; desetiška prilagoditev po seštevanju al + cl mov cl, al ; shranemo BCD števko 2 rezultata v cl mov al, ah adc al, ch ; ah + ch daa ; desetiška prilagoditev po seštevanju ah + ch mov ch, al ; shranemo BCD števko 3 rezultata v ch 10.12 Programiranje v zbirniku za procesorje ARM (1/8) Nek mikroprocesor iz družine ARM ima v registru r0 vrednost r0 = 0x20008000. Vsebina v pomnilniku je takšna: Naslov pomnilnika Vsebina 0x20008007 0x79 0x20008006 0xCD 0x20008005 0xA3 0x20008004 0xFD 0x20008003 0x0D 0x20008002 0xEB 0x20008001 0x2C 0x20008000 0x1A Kakšna je vrednost registrov r1 in r0 po izvedbi naslednjih ukazov? Predpostavimo, da se za organizacijo podatkov v pomnilniku uporablja mali endian. Ti ukazi se izvajajo neodvisno, tj. niso del programa. a) ldrsb r1, [r0, #2] b) ldrh r1, [r0], #2 c) ldrsh r1, [r0, #4]! Rešitev: a) ldrsb (Load Register Signed Byte) naloži bajt iz pomnilnika in mu razširi predznak na 32 bitov. r1 = 0xFFFFFFEB, r0 = 0x20008000 b) ldrh (Load Register Halfword) naloži polbesedo iz pomnilnika in ga razširi z ničlami do 32 bitov. r1 = 0x00002C1A, r0 = 0x20008002 c) ldrsh (Load Register Signed Halfword) naloži polbesedo iz pomnilnika in mu razširi predznak na 32 bitov. r1 = 0xFFFFA3FD, r0 = 0x20008004 118 Razvoj programov v zbirnem jeziku 10.13 Programiranje v zbirniku za procesorje ARM (2/8) Nek mikroprocesor iz družine ARM ima naslednji vrednosti v registrih r0 in r1: r0 = 0x20000000 in r1 = 0x12345678. Vsi bajti v pomnilniku so inicializirani na 0x00. Recimo, da je bil naslednji zbirni-ški program uspešno izveden. Narišite tabelo, ki prikazuje vrednost pomnilnika, če procesor uporablja mali endian. str r1, [r0], #4 str r1, [r0, #4]! str r1, [r0, #4] Rešitev: Naslov pomnilnika Vsebina 0x20000000 0x78 0x20000001 0x56 0x20000002 0x34 0x20000003 0x12 0x20000004 0x00 0x20000005 0x00 0x20000006 0x00 0x20000007 0x00 0x20000008 0x78 0x20000009 0x56 0x2000000A 0x34 0x2000000B 0x12 0x2000000C 0x78 0x2000000D 0x56 0x2000000E 0x34 0x2000000F 0x12 Razvoj programov v zbirnem jeziku 119 10.14 Programiranje v zbirniku za procesorje ARM (3/8) V zbirniški datoteki main.s za procesor ARM Cortex-M4 s sintakso GNU napišite program, ki bo izračunal dolžino niza Lep pozdrav!\n. Znaka \null na koncu niza ne prištevajte k dolžini. Končni rezultat (dolžina niza) naj bo shranjen v registru r2. Rešitev: Ko program pride v neskončno zanko na oznaki exit:, bo register r2 vseboval vrednost 13, ki predstavlja dolžino niza (vključno z znakom za prehod v novo vrstico). 120 Razvoj programov v zbirnem jeziku 10.15 Programiranje v zbirniku za procesorje ARM (4/8) Podprogram v zbirniku za mikroprocesorje ARM lahko sprejme do štiri argumente prek registrov r0-r3. Če podprogram sprejme več kot štiri argumente, je treba do-datne argumente posredovati prek sklada. V zbirniku za procesor ARM Cortex-M4 s sintakso GNU v datoteki main.s napišite preprost podprogram sum6, ki vzame šest 32-bitnih celih števil in izračuna njihovo vsoto. Kot primer vzemite, da morate sešteti prvih šest naravnih števil: 1, 2, 3, 4, 5, 6 [5]. Rešitev: Program main postavi prve štiri argumente v registre r0, r1, r2 in r3 in z ukazom push {r0, r1} potisne zadnja dva argumenta na sklad. Pri tem se ne glede na vrstni red navedenih registrov v ukazu na sklad najprej potisne register z najvišjim inde-ksom, v našem primeru je to register r1. Podprogram sum6 najprej akumulira vsoto prvih štirih argumentov v registru r0. Nato uporabi ukaz ldrd r2, r3, [sp] za naložitev dveh zaporednih 32-bitnih besed z vrha sklada v registra r2 in r3. Pri nalaganju vrednosti več registrov s sklada se najprej naloži vrednost v register z najnižjim indeksom, v našem primeru se torej vrednost z vrha sklada vnese v r2, vrednost pod njo pa v register r3. Ukaz ldrd, s katerim z vrha sklada dvignemo dve zaporedni 32-bitni besedi, bi lahko nadomestili z ukazoma ldr r2, [sp] in ldr r3, [sp, #4] za dvig samo po ene 32-bitne besede naenkrat. Beseda na vrhu sklada se začne na naslovu [sp], beseda tik pod vrhom sklada pa na naslovu [sp+4], saj so besede dolge 32 bitov ali 4 bajte. Podprogram sum6 vrne končni rezultat 21 (vsoto vseh šestih argumentov) v registru r0. Razvoj programov v zbirnem jeziku 121 10.16 Programiranje v zbirniku za procesorje ARM (5/8) Za razliko od naloge 10.14 morate zdaj napisati program za izračun dolžine istega niza Lep pozdrav!\n tako, da v datoteki main.c definirate niz in nato kličete podpro-gram v zbirniku za procesor ARM Cortex-M4 s sintakso GNU v datoteki strlen.s, ki izračuna dolžino niza. Znaka \null na koncu niza ne prištevajte k dolžini. Upoštevati morate protokol za klic zbirniškega podprograma, ki je definiran v binarnem vme-sniku za vgrajene aplikacije ARM (EABI). Klicani zbirniški program pričakuje, da se mu argument (naslov niza) preda v registru r0. Klicatelj (program v C-ju) priča- kuje, da podprogram v zbirniku vrne 32-bitni rezultat (dolžino niza) v register r0 [5]. Rešitev: Izračunano dolžino niza (13) klicani zbirniški program vrne klicatelju (C-ju) v re-gister r0. To vrednost dobi celoštevilčna spremenljivka i, program pa vstopi v ne-skončno zanko (ukaz while(1)). 122 Razvoj programov v zbirnem jeziku 10.17 Programiranje v zbirniku za procesorje ARM (6/8) V nalogi 10.16 je C-jevski program klical podprogram za izračun dolžine niza v zbir-niškem programu. Zdaj izračunajte dolžino pozdravnega niza v obratni smeri. V zbirniku za procesor ARM Cortex-M4 s sintakso GNU v datoteki main.s definirajte niz in pokličite C-jevsko funkcijo strlen v datoteki strlen.c. Zbirniški program mora slediti protokolu za klic procedure, definiranemu v binarnem vmesniku za vgrajene aplikacije ARM (EABI). Vhodni argument C-jevske funkcije (začetni naslov niza) mora postaviti v register r0 pred klicem funkcije. C-jevska funkcija mora zbirni-škemu programu vrniti dolžino niza v registru r0. Znaka \null na koncu niza ne prištevajte k dolžini [5]. Rešitev: Pri tej nalogi je klicatelj zbirniški program, ki kliče C-jevsko funkcijo strlen. V C-ju izračunana dolžina niza se postavi v register r0 in program v zbirniku vstopi v neskončno zanko. Razvoj programov v zbirnem jeziku 123 10.18 Programiranje v zbirniku za procesorje ARM (7/8) Potrebujemo program za izračun vsote kvadratov prvih n naravnih števil. n X 2 2 2 2 2 i = 1 + 2 + 3 + . . . + n i=1 Program naj bo realiziran v dveh ločenih datotekah, v C-jevski datoteki main.c in v zbirniški datoteki squareSum.s za procesor ARM Cortex-M4 s sintakso GNU. V datoteki main.c spremenljivki n dodelite vrednost in pokličite zbirniški podprogram squareSum, ki izračuna rezultat in ga nato vrne v C-jevski program. Podprogram v zbirniku mora slediti protokolu za klic procedure, definiranemu v binarnem vme-sniku za vgrajene aplikacije ARM (EABI). Rešitev: Vhodni argument (n=5) za zbirniški podprogram squareSum se prenese prek re-gistra n 2 r0 . Tudi zbirniški program izračunani rezultat P i = 55 i =1 vrne C-ju prek registra r0, ki se vpiše v spremenljivko result. 124 Razvoj programov v zbirnem jeziku 10.19 Programiranje v zbirniku za procesorje ARM (8/8) Potrebujemo program, ki za nenegativno celo število n izračuna n!. n f Y ( n ) = i = n · (n − 1) · (n − 2) · . . . · 3 · 2 · 1 i=1 Program naj bo realiziran v dveh ločenih datotekah, v C-jevski datoteki main.c in v zbirniški datoteki factorial.s za procesor ARM Cortex-M4 s sintakso GNU. V da-toteki main.c spremenljivki n dodelite vrednost in pokličite zbirniški podprogram factorial, ki izračuna n! in nato rezultat vrne v C-jevski program. Podprogram v zbirniku mora slediti protokolu za klic procedure, definiranemu v binarnem vme-sniku za vgrajene aplikacije ARM (EABI). Rešitev: Vhodni argument (n=5) za zbirniški podprogram factorial se prenese prek registra r0. Tudi zbirniški program izračunani rezultat 5! = 120 vrne C-ju prek registra r0, ki se vpiše v spremenljivko result. Priloga 125 A Priloga A.1 Dokaz izreka o zvezi RA ≥ RG ≥ RH med aritmetično, geometrijsko in harmonično srednjo vrednostjo Izrek. Za x1, . . . , xn > 0 velja RA ≥ RG ≥ RH , kjer n n !1/n RA := xi, RG := xi , RH := . P n 1 n 1 X Y n i=1 i=1 i=1 xi Dokaz. Funkcija f(x) = ln x je strogo konkavna na (0, ∞), saj je f (x) = − < 0. 2 ′′ 1 x Jensenova neenakost za konkavno funkcijo 1 f in enake uteži w i n = pravi: n ! n f X X w x ≥ w f (x ). i i i i i=1 i=1 (1) Dokaz 1 R A G i n R ≥ . Z uporabo f = ln in w = dobimo 1 n ! n 1 ln X X x ≥ ln x . n i i n i=1 i=1 Ker je 1 Pn R A i n = i x , lahko naprej pišemo =1 1 n ln X R ≥ ln x A i n i=1 1 n ! n n = Y X Y ln x (ker ln x = ln x ) n i i i i=1 i=1 i=1 n !1/n = ln Y x i i=1 = ln RG. Ker je funkcija x e strogo naraščajoča, lahko obe strani neenačbe potenciramo z osnovo e in neenačaj se ohrani, sledi RA ≥ RG. (2) Dokaz 1 R G H i x R ≥ . Uporabimo Jensenovo neenakost na zaporedju y := > 0: i 1 n ! n n 1 1 1 1 1 ln ≥ X X X ln = − ln x = − ln R = ln . n i G x n x n R i i G i=1 i=1 i=1 126 Priloga Po potenciranju obeh strani neenačbe z osnovo e dobimo 1 n 1 1 n X ≥ = ⇒ RG P = ≥ R . n n H 1 x R i i G =1 i=1 xi S tem smo dokazali RA ≥ RG ≥ RH . Enakost nastopi v obeh neenakostih natanko tedaj, ko je x1 = x2 = · · · = xn. Priloga 127 A.2 2 Dokaz izreka R A H G R · = R za srednje vrednosti nad samo dvema spremenljivkama Izrek. Naj bosta x1 > 0 in x2 > 0. Označimo RA = , RH = , RG = x1x2. 1 1 2 x1 + x2 2 √ x + x 12 Tedaj velja identiteta R 2 · R = R . A H G Dokaz. Najprej poenostavimo RH : R H = = = . 1 1 x + 2 2 2x1x2 x 1 2 1 2 + x x + x 1 x2 x1x2 Dobimo: x1 + x2 2x1x2 R A · RH = · 2 x1 + x2 = · x1 + x 2 2x1x2 2 x 1 + x 2 = x1x2 = ( √ 2 2 x 1 x 2 ) = R G 128 Priloga A.3 Dokaz izreka o vsoti prvih n naravnih števil Izrek. Vsota prvih n naravnih števil je n n(n + 1) X i = . 2 i=1 Dokaz. Izpeljava temelji na izračunu razlike kvadratov dveh sosednjih naravnih števil. n X i = 1 + 2 + 3 + . . . + n = ? i=1 ( 2 2 i − 1) = i − 2i + 1 i2 2 − ( i − 1) = 2i − 1 Na levi in na desni strani enačbe izvedemo seštevanje za vse vrednosti i od 1 do n. n n X X 2 2 ( i − ( i − 1) ) =(2i − 1) i=1 i=1 Izračunamo izraz na levi strani te enačbe. n X 2 2 2 2 2 2 2 2 ( i − ( i − 1) ) = n − ( n − 1) + ( n − 1) − ( n − 2) + ( n − 2) − ( n − 3) + . . . i=1 + 32 2 2 2 2 2 2 − 2 + 2 − 1 + 1 − 0 = n Dobimo: n n n n n 2 X X X X = (2 i − 1) = 2 i − 1 = 2 i − n i=1 i=1 i=1 i=1 n 2 X 2 i = n + n = n(n + 1) i=1 n n(n + 1) X i = 2 i=1 Priloga 129 A.4 Dokaz izreka o vsoti kvadratov prvih n naravnih števil Izrek. Vsota kvadratov prvih n naravnih števil je n n(n + 1)(2n + 1) X 2 i = . 6 i=1 Dokaz. Izpeljava temelji na izračunu razlike kubov dveh sosednjih naravnih števil. n X 2 2 2 2 2 i = 1 + 2 + 3 + . . . + n = ? i=1 ( 3 3 2 i − 1) = i − 3 i + 3i − 1 i3 3 2 − ( i − 1) = 3 i − 3i + 1 Na levi in na desni strani enačbe izvedemo seštevanje za vse vrednosti i od 1 do n. n n X X 3 3 2 ( i − ( i − 1) ) = (3 i − 3i + 1) i=1 i=1 Podobno kot pri vsoti razlik kvadratov sosednjih števil i in i − 1 za prvih n naravnih števil (dokaz izreka v prilogi 3 A.3 ) se vsi členi, razen prvega člena n, izničijo. Tako dobimo: n n n n n n(n + 1) n 3 X X X X X 2 2 2 = (3 i − 3 i + 1) = 3 i − 3 i + 1 = 3 i − 3 + n 2 i=1 i=1 i=1 i=1 i=1 n n(n + 1) 3 X 2 3 i = n + 3 − n i 2 =1 X n 3 3 2 n n ( n + 1) n 2 n + 3 n ( n + 1) − 2 n n (2 n + 3n + 1) 2 i = + − = = 3 2 3 6 6 i =1 n(n + 1)(2n + 1) = 6 130 Priloga Viri 131 Viri [1] William Stallings, Computer Organization and Architecture: Designing for Per- formance, Ninth Edition, Pearson, 2013. [2] John L. Hennessy and David A. Patterson, Computer Architecture: A Quanti- tative Approach, Fifth Edition, Morgan Kaufmann, 2012. [3] Dimitrios A. Protopapas, Microcomputer Hardware Design, Prentice-Hall Inter- national, Inc., 1988. [4] Barry B. Brey, The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, and Pentium Pro Processor Architecture, Programming, and Interfacing, Fifth Edition, Prentice-Hall, 2000. [5] Yifeng Zhu, Embedded Systems with ARM Cortex-M Microcontrollers in Assem- bly Language and C, Second Edition, E-Man Press LCC, 2015. 132 Viri M DOI IKRORAČUNALNIŠKE https://doi.org/ 10.18690/um.feri.10.2025 ARHITEKTURE: ISBN 978-961-299-054-1 ZBIRKA REŠENIH NALOG ZMAGO BREZOČNIK Univerza v Mariboru, Fakulteta za elektrotehniko, računalništvo in informatiko, Maribor, Slovenija zmago.brezocnik@um.si Ta zbirka rešenih nalog je namenjena predvsem študentom kot pripomoček pri Ključne besede: pripravi na kolokvije in pisne izpite z računskimi nalogami s področja mikroračunalniške arhitekture, mikroračunalniških struktur, mikroprocesorjev in mikrokrmilnikov. Naloge so centralna procesna razvrščene enota, po poglavjih, ki obravnavajo zmogljivost računalnikov, komunikacijo med pomnilnik, glavnimi komponentami računalnika, predpomnilnik, notranji in zunanji vhodno-izhodna pomnilnik, vhodno-izhodno organizacijo mikroprocesorjev, nabore ukazov organizacija centralne procesne mikroprocesorjev, enote, načine naslavljanja in formate ukazov ter razvoj zbirni jezik programov v zbirnem jeziku. Zadnje poglavje preverja znanje pri analizi odsekov kode in pisanju kratkih programov za mikroprocesorje iz družin Intel x86 in ARM. DOI MICROCOMPUTER https://doi.org/ 10.18690/um.feri.10.2025 ISBN ARCHITECTURES: 978-961-299-054-1 COLLECTION OF SOLVED PROBLEMS ZMAGO BREZOČNIK University of Maribor, Faculty of Electrical Engineering and Computer Science, Maribor, Slovenia zmago.brezocnik@um.si Keywords: This collection of solved problems is primarily intended as a study aid for microcomputer students preparing for midterm tests and written exams with calculation-based architectures, central processing unit, tasks in the field of microcomputer structures, microprocessors, memory, and microcontrollers. The problems are organized into chapters covering input-output organization computer performance, communication between main computer of microprocessors, assembly language components, cache memory, internal and external memory, input- output organization of microprocessors, instruction sets of the central processing unit, addressing modes and instruction formats, and assembly language programming. The final chapter focuses on testing knowledge through the analysis of code segments and the writing of short programs for Intel x86 and ARM microprocessors.