Emulation. Dr.-Ing. Volkmar Sieh. Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg

Ähnliche Dokumente
Komponenten/Busse. Dr.-Ing. Volkmar Sieh. Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2009

Komponenten/Busse. Dr.-Ing. Volkmar Sieh

Komponenten/Busse. Dr.-Ing. Volkmar Sieh. Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011

Hinweise C-Programmierung

Just-In-Time-Compiler (2)

Just-In-Time-Compiler (2)

Just-In-Time-Compiler (1)

Architektur/Chip/Komponente

Assembler Kontrollstrukturen

Aufgabe 1 Entwicklung einer Virtuellen Maschine

Assembler - Einleitung

Cache II. Dr.-Ing. Volkmar Sieh. Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2011

Einführung. Übungen zur Vorlesung Virtuelle Maschinen. Stefan Potyra. SoSe 2009

Übungen zu Grundlagen der Rechnerarchitektur und -organisation: Bonusaufgaben Übung 8 und Präsenzaufgaben Übung 9

Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab...

Assembler. Dr.-Ing. Volkmar Sieh. Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg

Übungen zu Grundlagen der Rechnerarchitektur und -organisation: Bonusaufgaben Übung 9 und Präsenzaufgaben Übung 10

Virtueller Speicher und Memory Management

Klasse Label. class Label { Code code; List<Integer> fixuplist; // code positions to patch int adr; // address of label in code

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Tutorium Rechnerorganisation

Hinweise Dekodierung

"Organisation und Technologie von Rechensystemen 4"

Herzlich willkommen!

Cache-Speicher. Design Digitaler Systeme. Prof. Dr.-Ing. Rainer Bermbach

RO-Tutorien 15 und 16

Übung zu Betriebssysteme

Aufgabe 4 : Virtueller Speicher

Homogene Multi-Core-Prozessor-Architekturen

Herbst Theoretische 1998 Uebung 2 Technische Informatik II Seite 1. Aufgaben: Prozesse

Bibliotheks-basierte Virtualisierung

Ein- und Ausgabegeräte

Assembler-Programmierung

C++ Templates - eine kleine Einführung

Technische Informatik 1 - HS 2017

Seminar Ausgewählte Komponenten von Betriebssystemen. IDL4 Compiler

HelvePic32 Breadboard. Internet Data Logger

Design and Implementation of a Soft-error Resilient OSEK Real-time Operating System

DOSEMU. Vortrag im Hauptseminar Konzepte und Techniken virtueller Maschinen und Emulatoren. Matthias Felix FAU. 13.

Main Memory. Hauptspeicher. Memories. Speichermodule. SIMM: single inline memory module 72 Pins. DIMM: dual inline memory module 168 Pins

Einschub: HW-Zugriff aus dem Userspace

Übungen zu Grundlagen der Rechnerarchitektur und -organisation: Bonusaufgaben Übung 6 und Präsenzaufgaben Übung 7

Cache. Dr.-Ing. Volkmar Sieh. Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2011

Legen Sie den Ausweis (mit Lichtbild!) griffbereit auf den Platz! Dieses Aufgabenheft umfasst 24 Seiten. Überprüfen Sie die Vollständigkeit!

Übung zu Betriebssystemtechnik

Systeme I: Betriebssysteme Kapitel 8 Speicherverwaltung

Assembler - Adressierungsarten

Übungen zu Grundlagen der systemnahen Programmierung in C (GSPiC) im Sommersemester 2018

Aufgabe 2 - Erweiterung um PIC und Interrupts

Ein- Ausgabeeinheiten

Computergrundlagen Geschichte des Computers

Rechnerorganisation. Überblick über den Teil 13

Vorlesung 3: Verschiedenes

Intelligenter Modemadapter für den PC

Die UART-Schnittstelle

Hardware und Gerätetreiber

Übung zu Betriebssysteme

Klausur Betriebssysteme I

Computergrundlagen Geschichte des Computers

Quiz. Gegeben sei ein 16KB Cache mit 32 Byte Blockgröße. Wie verteilen sich die Bits einer 32 Bit Adresse auf: Tag Index Byte Offset.

Multiprozessoren. Dr.-Ing. Volkmar Sieh. Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2011

Cache Grundlagen. Schreibender Cache Zugriff. SS 2012 Grundlagen der Rechnerarchitektur Speicher 22

Konzepte von Betriebssystemkomponenten. Gerätetreiber. Mario Körner

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Schriftliche Prüfung

x86 Open Source Virtualisierungstechniken Thomas Glanzmann

Grundlagen der Rechnerarchitektur. Speicher

Hardware PCI-Bus. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg

Hardware PCI-Bus. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg

Assembler - Variablen

Institut für Informatik Prof. Dr. D. Hogrefe Dipl.-Inf. R. Soltwisch, Dipl.-Inform. M. Ebner, Prof. Dr. D. Hogrefe Informatik II - SS 04.

Zwei Möglichkeiten die TLB zu aktualisieren

Cache Blöcke und Offsets

Betriebssysteme BS-S SS Hans-Georg Eßer. Foliensatz S: Speicherverwaltung. Dipl.-Math., Dipl.-Inform. v1.0, 2015/04/14

RO-Tutorien 15 und 16

Grundlagen von Caching-Mechanismen beim Zusammenspiel von Mikroprozessor und Betriebssystem. Klaus Kusche Dezember 2015


Einführung in die Programmierung Wintersemester 2008/09

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Grundbegriffe der Informatik

RO-Tutorien 17 und 18

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Hans-Georg Eßer, Hochschule München, Betriebssysteme I, SS Speicherverwaltung 1

05. Assembler-Programmierung. Datenstrukturen des ATMega32. Literatur

Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7)

Busse. Dr.-Ing. Volkmar Sieh. Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2008/2009

Interruptverarbeitung

Lehrveranstaltung: PR Rechnerorganisation Blatt 10. Thomas Aichholzer

Transkript:

Emulation Dr.-Ing. Volkmar Sieh Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2015/2016 V. Sieh Emulation (WS15/16) 1 22

Definition: Emulation Wikipedia: Als Emulation wird in der Computertechnik das funktionelle Nachbilden eines Systems durch ein anderes bezeichnet. Das nachbildende System erhält die gleichen Daten, führt die gleichen Programme aus und erzielt die gleichen Ergebnisse wie das originale System. V. Sieh Emulation (WS15/16) Definition 2 22

Emulation V. Sieh Emulation (WS15/16) Definition 3 22

Emulation Beispiel: System mit einem Bus mit angeschlossener CPU, RAM, ROM, einem seriellen Terminal und einer Platte. V. Sieh Emulation (WS15/16) Emulation 4 22

Emulation CPU Idee System-Simulationsschleife: for (;;) { /* bus_step(); */ cpu_step(); /* ram_step(); */ /* rom_step(); */ ser_step(); disk_step(); V. Sieh Emulation (WS15/16) Emulation 5 22

Emulation CPU cpu_step() { if (! power) { /* Do nothing... */ else if (ieflag && interrupt_pending) { cpu_exec_interrupt(); else { cpu_exec_instruction(); V. Sieh Emulation (WS15/16) Emulation 6 22

Emulation CPU cpu_exec_instruction() { inst = load(ip++); /* Get Instruction */ switch (inst) { case ADD: /* add $imm, %accu */ imm = load(ip++); /* Get Op */ accu += imm; break; case OUT: /* out %accu, port */ port = load(ip++); /* Get Port */ out(port, accu); break; case JMP: /* jmp addr */ ip = load(ip); /* Get Address */ break;... V. Sieh Emulation (WS15/16) Emulation 7 22

Emulation CPU cpu_exec_interrupt() { interrupt_pending = 0; store(--sp, ip); store(--sp, ieflag); ieflag = 0; ip = load(0); V. Sieh Emulation (WS15/16) Emulation 8 22

Emulation CPU cpu_interrupt() { interrupt_pending = 1; V. Sieh Emulation (WS15/16) Emulation 9 22

Emulation Bus uint8_t load(uint32_t addr) { if (ROMSTART <= addr && addr < ROMSTART + ROMSIZE) { return rom_load(addr - ROMSTART); else if (RAMSTART <= addr && addr < RAMSTART + RAMSI return ram_load(addr - RAMSTART); else { return 0; store(uint32_t addr, uint8_t val) { if (RAMSTART <= addr && addr < RAMSTART + RAMSIZE) { ram_store(addr - RAMSTART, val); else { /* Do nothing... */ V. Sieh Emulation (WS15/16) Emulation 10 22

Emulation Bus out(uint16_t port, uint8_t val) { if (SERSTART <= port && port < SERSTART + SERSIZE) { ser_out(port - SERSTART, val); else if (DISKSTART <= port && port < DISKSTART + DIS disk_out(port - DISKSTART, val); else... uint8_t in(uint16_t port) { if (SERSTART <= port && port < SERSTART + SERSIZE) { return ser_in(port - SERSTART); else if (DISKSTART <= port && port < DISKSTART + DIS return disk_in(port - DISKSTART); else... V. Sieh Emulation (WS15/16) Emulation 11 22

Emulation Bus interrupt() { cpu_interrupt(); V. Sieh Emulation (WS15/16) Emulation 12 22

Emulation ROM static const uint8_t rom[romsize] = {... ; uint8_t rom_load(uint32_t addr) { addr %= ROMSIZE; return rom[addr]; V. Sieh Emulation (WS15/16) Emulation 13 22

Emulation RAM static uint8_t mem[ramsize]; uint8_t ram_load(uint32_t addr) { addr %= RAMSIZE; return mem[addr]; ram_store(uint32_t addr, uint8_t val) { addr %= RAMSIZE; mem[addr] = val; V. Sieh Emulation (WS15/16) Emulation 14 22

Emulation serielle Schnittstelle ser_out(uint16_t port, uint8_t val) { host_print_char(val); V. Sieh Emulation (WS15/16) Emulation 15 22

Emulation serielle Schnittstelle static uint8_t key, avail; uint8_t ser_in(uint16_t port) { switch (port) { case 0: avail = 0; return key; case 1: return avail; ser_step() { if (host_key_avail()) { key = host_get_key(); avail = 1; interrupt(); V. Sieh Emulation (WS15/16) Emulation 16 22

Emulation Disk static uint8_t disk[size], buf, pos, status; disk_out(uint16_t port, uint8_t val) { switch (port) { case 0: buf = val; break; case 1: pos = val; break; case 2: if (pos < SIZE) { if (val) disk[pos] = buf; else buf = disk[pos]; status = OK; else { status = BAD; break; V. Sieh Emulation (WS15/16) Emulation 17 22

Emulation Disk uint8_t disk_in(uint16_t port) { switch (port) { case 0: val = buf; break; case 1: val = pos; break; case 2: val = status; break; return val; V. Sieh Emulation (WS15/16) Emulation 18 22

Emulation MMU Emulation der MMU muss sehr effizient sein: jeder Code-Zugriff braucht MMU jeder Daten-Zugriff braucht MMU ca. 20% der Befehle lesen/schreiben Speicher Grafikaufbau i.a. über mov-befehle V. Sieh Emulation (WS15/16) Emulation 19 22

Emulation MMU Aufgabe der MMU: Suchen der virtuellen Adresse im Translation-Lookaside-Buffer (TLB) nicht gefunden: Umrechnung der virtuellen Adresse in eine physikalische durch Lookup in Tabellen im Hauptspeicher Eintragen der virtuellen und der dazugehörigen physikalischen Adresse im TLB Weitergabe der zur virtuellen Adresse gehörenden physikalischen Adresse an den Hauptspeicher V. Sieh Emulation (WS15/16) Emulation 20 22

Emulation MMU uint8_t virt_load(uint32_t vaddr) { uint32_t paddr; again: found = tlb_lookup(vaddr & ~0xfff, &paddr); if (! found) { tlb_fill(vaddr & ~0xfff); goto again; return phys_load(paddr (vaddr & 0xfff)); tlb_lookup sollte blitzschnell ausführbar sein und nahezu immer TRUE zurückliefern! V. Sieh Emulation (WS15/16) Emulation 21 22

Emulation MMU struct { uint32_t vaddr, paddr; tlb[size]; int tlb_lookup(uint32_t vaddr, uint32_t *paddrp) { unsigned int hash = (vaddr >> 12) % SIZE; if (vaddr == tlb[hash].vaddr) { *paddrp = tlb[hash].paddr; return 1; else { return 0; Entspricht einem Direct-Mapped Cache. V. Sieh Emulation (WS15/16) Emulation 22 22