Nízkoúrovňové programování

Podobné dokumenty
Architektura počítačů Úvod

Architektura počítačů Agenda

Architektura počítačů Agenda

Úvod. Programovací paradigmata

NSWI /2011 ZS. Principy cpypočítačůčů aoperačních systémů ARCHITEKTURA

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

HelenOS ARM port. Pavel Jančík Michal Kebrt Petr Štěpán

Matematika v programovacích

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Struktura a architektura počítačů (BI-SAP) 7

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Pohled do nitra mikroprocesoru Josef Horálek

11. Přehled prog. jazyků

Operační systémy. Tomáš Vojnar IOS 2009/2010. Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, Brno

Přednáška 1. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Procesy a vlákna (Processes and Threads)

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010

Operační systémy MIPS, Kalisto a správa paměti

11 Návrh programového vybavení

Základy programování Operační systémy (UNIX) doc. RNDr. Petr Šaloun, Ph.D. VŠB-TUO, FEI (přednáška připravena z podkladů Ing. Michala Radeckého)

Programovací jazyky Přehled a vývoj

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Architektury CISC a RISC, uplatnění v personálních počítačích

SÁM O SOBĚ DOKÁŽE POČÍTAČ DĚLAT JEN O MÁLO VÍC NEŽ TO, ŽE PO ZAPNUTÍ, PODOBNĚ JAKO KOJENEC PO PROBUZENÍ, CHCE JÍST.

Paralelní programování

Paralelní programování

Opakování programování

Operační systémy. Tomáš Hudec.

Architektura počítače

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Real Time programování v LabView. Ing. Martin Bušek, Ph.D.

Programovatelné automaty SIMATIC S7 a S5

Profilová část maturitní zkoušky 2017/2018

Souborové systémy Mgr. Josef Horálek

a co je operační systém?

IT ESS II. 1. Operating Systém Fundamentals

x86 assembler and inline assembler in GCC

ISU Cvičení 2. Marta Čudová

Profilová část maturitní zkoušky 2013/2014

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

Struktura a architektura počítačů (BI-SAP) 1

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

MPASM a IDE pro vývoj aplikací MCU (Microchip)

Úvod do programovacích jazyků (Java)

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Metody připojování periferií BI-MPP Přednáška 2

C2115 Praktický úvod do superpočítání

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

Simulátory aplikačně specifických instrukčních procesorů Jazyk LISA. Masařík Karel

a operačních systémů

IB109 Návrh a implementace paralelních systémů. Organizace kurzu a úvod. RNDr. Jiří Barnat, Ph.D.

Assembler RISC RISC MIPS. T.Mainzer, kiv.zcu.cz

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

operační systém vjj 1

Architektura počítačů Logické obvody

ÚVOD DO OPERAČNÍCH SYSTÉMŮ. Správa paměti. Přímý přístup k fyzické paměti, abstrakce: adresový prostor, virtualizace, segmentace

Operační systémy. Přednáška 1: Úvod

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška I / 21

Y36SAP

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

Architektury VLIW M. Skrbek a I. Šimeček

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí.

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Přednáška 11. Historie MS Windows. Architektura Windows XP. Grafické a znakové rozhraní. Úlohy, procesy a vlákna.

Struktura pamětí a procesů v DB Oracle. Radek Strnad

Základní typy struktur výpočetních systémů

Vláknové programování část I

Kubatova Y36SAP procesor - control unit obvodový a mikroprogramový řadič RISC Y36SAP-control unit 1

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

Úvod SISD. Sekvenční výpočty SIMD MIMD

Přednáška. Strojový kód a data. 4. Přednáška ISA J. Buček, R. Lórencz

09. Memory management. ZOS 2006, L.Pešička

Architektura počítačů Logické obvody

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Jazyk symbolických adres

GPU A CUDA HISTORIE GPU CO JE GPGPU? NVIDIA CUDA

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

IB111 Úvod do programování skrze Python Přednáška 13

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Algoritmizace a programování

Pár odpovědí jsem nenašla nikde, a tak jsem je logicky odvodila, a nebo jsem ponechala odpověď z pefky, proto je možné, že někde bude chyba.

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

TÉMATICKÝ OKRUH Softwarové inženýrství

Hardware - komponenty počítačů Von Neumannova koncepce počítače. Von Neumannova koncepce počítače

ČÁST 1. Základy 32bitového programování ve Windows

Operační systém (Operating System)

Hlavní využití počítačů

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2

Transkript:

Nízkoúrovňové programování http://d3s.mff.cuni.cz Martin Děcký decky@d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE Faculty Faculty of of Mathematics Mathematics and and Physics Physics

kdysi 2

dnes fa 31 8e 66 29 83 0f 66 08 opcode c0 d8 0f 82 c8 22 ea 00 01 16 0f 20 c0 66 01 c0 1d 80 00 00 strojový kód na IA-32 Posloupnost bytů uložená v paměti kódující instrukce prováděné procesorem cli xor mov lgdtw sub or mov ljmpw or instruction name register name %eax, %eax %eax, %ds dereference (%esi) %eax, 0x66c0200f(%edx) $0x1, %eax displacement %eax, %cr0 $0x0, $0x801d constant %al, (%eax) instrukční mnemonika na IA-32 (AT&T syntaxe) Kód napsaný ručně nebo vyrobený překladačem vyššího programovacího jazyka Assembler překládá mnemonika na strojový kód 3

dnes (2) 86 89 82 83 86 c4 81 c8 03 57 10 28 08 58 c3 70 a7 c0 3f 70 c0 e0 e0 a4 ff 00 ff 0e 01 18 08 78 opcode instruction name add rdpr mov sllx and ldx retl stx %sp, 0x7ff, %g3 %ver, %g4 constant -1, %g1 %g1, 0xe, %g1 %g3, %g1, %g3 [ %g3 + 0x18 ], %g2 register name displacement %g4, [ %g2 + 0x478 ] dereference strojový kód na SPARC V9 Všechny instrukce mají délku 4 byty instrukční mnemonika na SPARC V9 4

K čemu mi to může být dobré? Vždyť přece budu stejně celý život programovat v Javě, C, Pythonu nebo PHP! 5

Aplikační framework Komponentový systém Java /.NET JVM / CLR C++ C Firmware / Operační systém Assembler Strojový kód Procesor

Stovky tisíc řádků kódu Aplikační software Např. textový editor Knihovny pro uživatelské rozhraní Systémový software Operační systém Vstupně/výstupní operace Alokace paměti a úložného prostoru Sdílení prostředků Hardware Firmware Hardware Procesor, paměť, periferie 8

Paměťová zeď Výkon procesorů omezen výkonem pamět Výkon procesorů roste rychleji než výkon pamět Jednoduché operace trvají desetiny ns, přístup do paměti trvá desítky ns Nedosažitelný cíl kombinace: Paměť stejně rychlá jako procesor, dostatečná kapacita, rozumná cena 10

Proč je důležité vědět o CPU cache? Quick Sort vs. Radix Sort LaMarca, Ladner (1996) O(n log n) vs. O(n) Teoreticky není co řešit Zdroj: Patterson & Hennessy 11

Proč je důležité vědět o CPU cache? (2) Jenže: Quick Sort se pro větší množství dat ukázal rychlejší... Zdroj: Patterson & Hennessy 12

Proč je důležité vědět o CPU cache? (3) Důvod Způsob přístupu k datům v implementaci algoritmu Radix Sort způsoboval příliš mnoho výpadků cache Zdroj: Patterson & Hennessy 13

Proč je důležité vědět o CPU cache? (4) Řešení Úprava implementace algoritmu Radix Sort, aby pracoval s daty nejprve v rámci bloku paměti, který je již načtený v cache (řádku cache) 14

Abstrakce: Od uživatele k algoritmu Smaž odstavec Nastav písmo... Uživatel 15

Abstrakce: Od uživatele k algoritmu Smaž odstavec Nastav písmo... document.par[i].value =...; document.set_font(...);... Algoritmus Uživatel 16

Abstrakce: Od uživatele k algoritmu Smaž odstavec Nastav písmo... document.par[i].value =...; document.set_font(...);... Sémantická mezera Algoritmus Uživatel 17

Abstrakce: Od algoritmu k programu document.par[i].value =...; document.set_font(...);... Algoritmus 18

Abstrakce: Od algoritmu k programu MULI $2, $5, 4 ADD $2, $4, $2 LW $16, 0($2)... document.par[i].value =...; document.set_font(...);... Algoritmus Sémantická mezera Program 19

Abstrakce: Od programu ke kódu MULI $2, $5, 4 ADD $2, $4, $2 LW $16, 0($2)... Program 20

Abstrakce: Od programu ke kódu MULI $2, $5, 4 ADD $2, $4, $2 LW $16, 0($2)... Program 0101001010010 0110101001101 0111010110101... Sémantická mezera Procesor 21

Abstrakce Překonávání sémantických mezer Postup od konkrétního (technického) jazyka k abstraktnímu (obecnému) jazyku Ideálně se zachováním přesnosti, ale využit šířeji definovaných pojmů a zapouzdření vnitřních detailů Stručnější a kompaktnější vyjádření An abstraction is one thing that represents several real things equally well. (Edsger Dijkstra) 22

Abstrakce (2) Vhodný jazyk pro danou úroveň abstrakce Řídící logika procesoru Pomocí jednotky ALU sečti hodnotu z registru A a hodnotu z registru B, výsledek ulož do registru C Strojový kód: instrukce (slova) nad abecedou {0, 1} 1000110010100000 Assembler: symbolický zápis instrukcí programu add R2, R3, R1 Vyšší programovací jazyk: symbolický zápis algoritmu fruits := apples + oranges 23

Abstrakce (3) Vhodný jazyk pro danou úroveň abstrakce Překlad mezi jazyky = překonávání sémantické mezery Jazyk vyšší úrovně = vyšší produktivita člověka Doménově-specifické jazyky Jazyk nižší úrovně = vyšší produktivita stroje Strojový kód Překladač Překlad z vyššího programovacího jazyka do jazyka nižší úrovně (často až do symbolického zápisu instrukcí konkrétního procesoru) Assembler Překlad ze symbolického zápisu instrukcí do binárního kódu vykonatelného konkrétním procesorem 24

Překladač vyššího jazyka.c.h preprocessor.i compiler.h.s assembler.o cc -c -o output.o input.c as -o output.o input.s 25

Assembler s preprocessorem.s.h preprocesor.s assembler.h.o cc -c -o output.o input.s 26

Linkování.o.o linker linker script.o binary ld -T link.ld -o output.bin input0.o input1.o 27

Linkování (2) input0.c void global_fnc01() { } void global_fnc02() { } int global_int; void *global_ptr; int another_symbol attribute ((section( another_section ))); input0.o.text global_fnc01 global_fnc02.bss global_int global_ptr another_section another_symbol 28

Linkování (3) link.ld SECTIONS {.output 0x80000000 : { *(.text) *(.bss) *(another_section) _output_end =.; } } output.bin.output (displacement: 0x80000000) global_fnc01 global_fnc02 global_int global_ptr another_symbol _output_end 29

Užitečné přepínače překladače GCC -ffreestanding Překlad bez standardní knihovny a funkce main() -nostdlib Bez prohledávání systémové cesty knihoven -nostdinc Bez prohledávání systémové cesty hlavičkových souborů -fno-builtin Nepoužívat vestavěné funkce překladače (není-li explicitně použit prefix builtin_) 30

Užitečné atributy překladače GCC attribute ((packed)) Struktura bez standardního zarovnání prvků attribute ((may_alias)) Proměnná daného datového typu může být zároveň jiným datovým typem attribute ((aligned(n))) Proměnná se zarovnáním v paměti na n bytů attribute ((section( sekce ))) Symbol umístěn ve vstupní sekci sekce attribute ((returns_twice)) Pro implementaci funkcí obnovujících kontext procesoru 31

Užitečné nástroje objdump Výpis informací o objektových a binárních souborech -x Výpis všech hlaviček -d Disassemblování spustitelných sekcí -D Disassemblování všech sekcí -S Disassemblování proložené řádky zdrojového kódu Potřebuje debuggovací informace (gcc -g) 32

Kde se to naučit pořádně? Kurzy na MFF UK (a obdobné na jiných univerzitách) Principy počítačů Architektura počítačů Operační systémy Principy překladačů Crash dump analýza Literatura David Patterson, John Hennessy: Computer Organization and Design On-line Série článků Co se děje v počítači na Root.cz 33

Stručná charakteristika open source general-purpose multiplatform microkernel multiserver operating system implemented from scratch 35

kernel console kernel unit tests kernel log concurrent hash table synchronization interface ELF loader kernel lifecycle mgmt tracing support wait queues readcopyupdate lists, trees, bitmaps generic resource allocator cache coherency spinlocks work queues string routines misc routines slab allocator address space mgmt memory reservation bdsh interrupt & syscall dispatch hardware resource mgmt thread & task mgmt IPC thread scheduler task capabilities platform library routines bootstrap routines interrupt handling CPU mgmt memory backends memory zones mgmt console compositor clipboard audio input output slip nconfsrv loopip dhcp ethip tcp link layer protocols networking management frame allocator udp transport layer protocols layer TMPFS global page hash table support shared platform drivers hierarchical page table support ISO 9660 FAT shared debugging support Location FS UDF exfat MINIX FS ext4 file system drivers device drivers device manager vfs platform drivers I/O mgmt debugging support context switching platform memory mgmt atomics & barriers Kernel subsystems remote framebuffer inetsrv shared architecture dependent system information cycle & time mgmt remote console human interface dnsrsrv hardware architecture dependent vterm client session abstraction architecture independent HelenOS: Architektura v kostce location service logger klog naming service loader task monitor init kernel System components 37

Q&A 38

References Slide 2 Harvard Mark I, IBM 1944 (cited under fair use doctrine) Slide 6 Tron: Legacy, Walt Disney Studios Motion Pictures 2010 (cited under fair use doctrine) Slide 9 Data compiled by Jonas Bonér (https://gist.github.com/jboner/2841832), Jeffrey Dean and Peter Norvig; rendering by ayshen (https://github.com/ayshen) Slide 10 Roth A., Martin M.: CIS 371 Computer Organization and Design, University of Pennsylvania, Department of Computer and Information Science, 2009; data and rendering Elsevier Science 2003 Slide 11, 12, 13, 33 D. A. Patterson, J. L. Hennessy: Computer Organization and Design, Morgan Kaufmann, ISBN 978-0123747501, 2011 39