MS-DOS Compatible, Uniprocessor



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

Procesor z pohledu programátora

x86 assembler and inline assembler in GCC

Čipové karty Lekařská informatika

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

ISU Cvičení 3. Marta Čudová

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

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

Vnitřní a vnější paměti Část: vnitřní paměti

Memory Management vjj 1

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

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

ISU Cvičení 7. Marta Čudová

Memory Management vjj 1

Operační systémy. Přednáška 8: Správa paměti II

MS WINDOWS II. Jádro. Správa objektů. Správa procesů. Zabezpečení. Správa paměti

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

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

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

Management procesu I Mgr. Josef Horálek

Operační systémy 2. Přednáška číslo 1. Úvod do OS

DMA jednotka pro BCE v systémech s AXI sběrnicí Zdeněk Pohl.

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řidělování paměti II Mgr. Josef Horálek

Metody připojování periferií

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

POPIS TUN TAP. Vysvetlivky: Modre - překlad Cervene - nejasnosti Zelene -poznamky. (Chci si ujasnit o kterem bloku z toho schematu se mluvi.

Strojový kód. Instrukce počítače

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

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.

Koncepce DMA POT POT. Při vstupu nebo výstupu dat se opakují jednoduché činnosti. Jednotlivé kroky lze realizovat pomocí speciálního HW.

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

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

Virtualizace. Lukáš Krahulec, KRA556

Základní deska (1) Parametry procesoru (2) Parametry procesoru (1) Označována také jako mainboard, motherboard

Introduction to MS Dynamics NAV

Přerušovací systém s prioritním řetězem

Systém adresace paměti

Činnost počítače po zapnutí

Vnitřní a vnější paměti Část: vnitřní paměti

User manual SŘHV Online WEB interface for CUSTOMERS June 2017 version 14 VÍTKOVICE STEEL, a.s. vitkovicesteel.com

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

Logická organizace paměti Josef Horálek

Základy digitální techniky

Registry 32 bitové pro všeobecné použití: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.

Petr Krajča. 26. říjen, 2012

Technické prostředky počítačové techniky

Ovladače pro Windows. Ovladače Windows A4M38KRP. Str. 1

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Stručný úvod do programování v jazyce C 2.díl. České vysoké učení technické Fakulta elektrotechnická

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

ORGANIZACE A REALIZACE OPERAČNÍ PAMĚTI


Bootkity v teorii a praxi. Martin Dráb martin.drab@ .cz

Tento materiál byl vytvořen v rámci projektu Operačního programu Vzdělávání pro konkurenceschopnost.

Jednočipové mikropočítače (mikrokontroléry)

Algoritmizace a programování

Předmluva 13 Použité konvence 14. KAPITOLA 1 Základní číselné soustavy a pojmy Číselné soustavy a převody 15 1.

WORKSHEET 1: LINEAR EQUATION 1

Přerušení POT POT. Přerušovací systém. Přerušovací systém. skok do obslužného programu. vykonávaný program. asynchronní událost. obslužný.

Výpočet v módu jádro. - přerušení (od zařízení asynchronně) - výjimky - softvérové přerušení. v důsledku událostí

MCP BIOS řídicí jednotky Kit386EXR

MS WINDOWS I. řada operačních systémů firmy Microsoft *1985 -? Historie. Práce ve Windows XP. Architektura. Instalace. Spouštění

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

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

WL-5480USB. Quick Setup Guide

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

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Systémová struktura počítače

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

a co je operační systém?

MyIO - webový komunikátor

Von Neumannovo schéma

UPM3 Hybrid Návod na ovládání Čerpadlo UPM3 Hybrid 2-5 Instruction Manual UPM3 Hybrid Circulation Pump 6-9

Systém přerušení. Algoritmizace a programování. Struktura počítače - pokračování. Systémová struktura počítače pokrač.

SIMATIC S7-1500(T) SIMOTION konfigurace systému Motion Control. Engineered with TIA Portal. Unrestricted Siemens AG 2017

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

Pamět ová hierarchie, virtuální pamět. doc. Ing. Róbert Lórencz, CSc.

1.1. Proveďte diagnostiku poskytnutého pevného disku (disků) s využitím technologie S.M.A.R.T Zjistěte informace o formátu na pevném disku

Miroslav Flídr Počítačové systémy LS /21- Západočeská univerzita v Plzni

IMTEE Přednáška č. 8. interrupt vector table CPU při vzniku přerušení skáče na pevně dané místo v paměti (obvykle začátek CODE seg.

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

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

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

- program = vykonatelný soubor - proces = jedna instance vykonávaného programu

Arduino Ethernet Shield W5100 R3

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

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

Gymnázium, Brno, Slovanské nám. 7 WORKBOOK. Mathematics. Teacher: Student:

External ROM 128KB For Sinclair ZX Spectrum

INSTALACE DATABÁZE ORACLE A SYSTÉMU ABRA NA OS WINDOWS

FPC - Převodník pro čínské čtečky F17 a F18 - podrobný popis služeb a příkazů -

Akademický rok: 2004/05 Datum: Příjmení: Křestní jméno: Osobní číslo: Obor:

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

Komunikace procesoru s okolím

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.

Knihovna DMX512lib Komunikace protokolem DMX512. TXV prvé vydání srpen 2010 změny vyhrazeny

Paměti Flash. Paměti Flash. Základní charakteristiky

2N Voice Alarm Station

Compression of a Dictionary

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

Transkript:

Implementace multithreadingu Následující text je pouze stručný nástin toho, jak se přepínají procesy o Neřeší např. vícenásobné přerušení, které také může nastat Cílová platforma jsou x86 kompatibilní procesory Funkce nejsou zapsány optimálně o V reálném projektu je toho třeba o Viz přednáška o urychlení běhu vlákna o Je třeba vzít do úvahy další komponenty systému např. správce paměti MS-DOS Compatible, Uniprocessor Semestrálka KIV/ZOS 1998 Princip o Pomocí služby DOSu se nainstaluje nový handler přerušení 8, které generují hodiny o Když je volána obsluha přerušení, v zásobníku jsou uloženy registry CS, IP a Flags kódu, jehož vykonávání bylo přerušeno o Obsl uha přerušení uloží stávající registry o Plánovač vybere novou úlohu a zapíše do zásobníku její hodnoty uvedených registrů (CS, IP a Flags) o Obsluha přerušení obnoví zbývající registry procesoru pro plánovačem vybranou úlohu o Provede se instrukce iret, kterou se spustí naplánovaný proces díky přepsání hodnot v zásobníku Strana 1 (celkem 27)

//User space procedure Task1; far; begin //dělá něco ohromně užitečného //Kernel space type TTask = record FPU:array[0..FPUSize-1] of byte ALU:array[0..ALUSize-1] of byte; Stack:pointer; State:integer; var tasks:array[0..maxtasks-1] of TTask; oldhandler:procedure; currenttask:0..maxtasks-1; procedure SaveRegisters; assembler; asm ;instrukcemi mov a fsave uloží ;registry do tasks[currenttask] ;flags se uloží přes zásobník a ax fsave es:[si] //FPU mov es:[si+114], ax //ALU mov es:[si+116], bx Strana 2 (celkem 27)

... pop ax pop bx pop cx ;záloha CS, IP a Flags mov es:[si+130], ax... procedure RestoreRegisters;assembler; asm //analogicky k SaveRegisters procedure Scheduler; begin //do proměnné currenttask vybere //index nové úlohy ke spuštění //tj. naplánuje ji Strana 3 (celkem 27)

procedure ClockHandler; assembler; asm pushf call oldhandler cli call SaveRegisters call Scheduler call RestoreRegisters sti iret procedure Init; begin InitTasks; InstallTask(@Task1); GetIntVec($8, @oldhandler); SetIntVec($8, @ClockHandler); Strana 4 (celkem 27)

procedure InstallTask(task:pointer); begin with Tasks[FindFreeSlot] do begin State:=stCreating; Move(ALU, DefaultALU, sizeofalu); Move(FPU, DefaultFPU, sizeoffpu); //CS:IP ALU[130]:=Seg(Task^); ALU[132]:=Ofs(Task^); //SS:SP GetMem(Stack, StackSize); ALU[130]:=Seg(Stack^); ALU[132]:=Ofs(Stack^)+StackSize; State:=stRunnable; Strana 5 (celkem 27)

Protected Mode Umožnil x86 odstínit user-space od kernel-space na hw úrovni o Úrovně oprávnění CPL code privilege level DPL data privilege level o Deskriptor privilege level 00 2 největší oprávnění kernel space 11 2 - nejmenší oprávnění user space WNT používá jenom 2 kombinace kvůli kompatibilitě s Alphou, která měla jen 1b o Některé instrukce lze vykonat pouze s CPL=0 o Také říká, komu je paměť přístupná podle PL (Virtuální) Paměť počítače o RAM + odkládací soubor o a dělí se na bloky zvané segmenty (a ty na stránky) http://data.uta.edu/~ramesh/cse3320/chap8.html Strana 6 (celkem 27)

Každý spuštěný program vlastní několik segmentů o V jednom má uložený programový kód Tj. popis, co má program dělat o V ostatních data Každý segment má svůj popisovač o Segment deskriptor o Segmentové registry (cs, ds, es, fs, gs, ss) pak obsahují segment selektor Popisovač segmentu má výše uvedené bity, které určují privilege level ftp://download.intel.com/design/intarch/papers/exc_ia.pdf Strana 7 (celkem 27)

Protected-Mode, Uniprocessor Příklad pro MS-DOS běžel v reálném režimu, málo paměti o => přepnutí procesoru do chráněného režimu umožní adresovat paměť nad 1 MB Ovšem také znemožní některé věci, které byly možné v reálném režimu A přijdeme o paměť /amnézie, protože se ze segmentových registrů stanou registry ne se segmenty, ale se segment selektory o => přepnutí umožňuje hw odstínění user-mode a kernel-mode přístupu k paměti x86-64 používá long mode V principu to funguje stejně jako v reálném režimu, ale je třeba se postarat o více věcí o Instrukcí cli zakázat přerušení o Připravit si novou tabulku přerušení o Přepnout procesor do chráněného režimu o Instrukcí lgdt nahrát global descriptor table o Instrukcí lidt aktivovat novou tabulku přerušení o Nastavit registry SS:ESP na nový zásobník o Vrátit se přes instrukce ljmp a ret do chráněného režimu Strana 8 (celkem 27)

EnablePM: cli ;zamaskování přerušení mov eax, cr0 bts eax, 0 ;přepneme do mov cr0, eax ;chráněného režimu lgdt [newgdt] ;nastavíme selektory lidt [newidt] ;přerušení a vyjímky mov eax, selss mov ss, eax ;zásobník ljmp selcs, @pm ;nastav segment ;selektor kódu:eip pm: ret ;a vrátíme se v pm Obsluha přerušení musí pochopitelně počítat s tím, že je v chráněném režimu V chráněném režimu je dostupný TSS Task State Segment o Usnadňuje implementaci multithreadingu Strana 9 (celkem 27)

Vlastní multithreading pomocí fcí Win32 Jen na ukázku, jak by se řešilo výše uvedené o Prakticky to zřejmě ani nemá využití Možná nějaký velmi nestandardní důvod Princip o Jedno vlákno dělá hodiny tj. interrupt 8 Tj. volá SwitchTask o Ve druhém vláknu se postupně spouštějí úlohy //user-space procedure MyTask; begin //dělá něco úžasného //kernel-space type TTask = record Context:TContext; State:integer; var FOriginalContext:TContext; tasks:array[0..maxtasks-1] of TTask; currenttask:0..maxtasks-1; Strana 10 (celkem 27)

procedure Init; begin FOriginalContext.ContextFlags:= CONTEXT_FULL or CONTEXT_FLOATING_POINT or CONTEXT_DEBUG_REGISTERS; GetThreadContext(Handle, FOriginalContext); procedure InstallTask(task:pointer); begin with Tasks[FindFreeSlot] do begin State:=stCreating; Context:=FOriginalContext; Context.EIP:=task; Context.ESP:=AllocateStack; State:=stReady; Strana 11 (celkem 27)

procedure SwitchTask; begin SuspendThread(FTaskingThread); GetThreadContext(FTaskingThread, Tasks[currentTask].Context); Tasks[currentTask].State:=stReady; Scheduler; Tasks[currentTask].State:=stRunning SetThreadContext(FTaskingThread, Tasks[currentTask].Context); ResumeThread(FTaskingThread); Paměť Procesy se v reálném režimu nedostanou nad 1MB http://en.wikipedia.org/wiki/extended_memory Strana 12 (celkem 27)

1M ROM 640K Video RAM Program 1 Arena TSR 0 MS-DOS Arena header http://www.ceng.metu.edu.tr/courses/ceng334/msdos.doc Konvenční paměť aka Base Memory o Dolních 640kB o 640K ought to be enough for anybody." - Bill Gates, 1981 UMB alias UMA o Upper Memory Blocks/Area o Mezi 640kB a 1MB o Vyhrazeno pro ROM RAM periferií Do paměti mapované I/O High Memory Area o 64kB-16B nad 1MB o Muselo se povolit A20 (21. adresní bit na sběrnici) Strana 13 (celkem 27)

Aréna o V reálném režimu se paměť spravuje v 16B blocích paragrafech o Paměť ovému bloku přidělenému procesu se říká aréna o Aréna se sestává z několika paragrafů a začíná hlavičkou (1. paragraf), kde je uveden počet paragrafů arény MS-DOS v hlavičce ukládal PSP (Program Segment Prefix) a jméno souboru EBDA o Extended Bios Data Area o Přidáno kvůli PS/2 Nový buffer pro PS/2 port myši o Ve skutečnosti není standardizováno, pouze existuje proprietární popis např. pro původní IBM BIOS EBDA o Použito pro Plug-and-Play Unreal mode o i386+ o Procesor se přepne do chráněného režimu Zároveň povolí A20 o Nastaví se limity segmentů na maximum Respektive se naplní s deskriptorem datového segmentu s limitem na 4GB o Procesor se přepne zpět do reálného režimu o Nastavené limity zůstanou aktivní o A program v reálném režimu může adresovat 4GB flat Strana 14 (celkem 27)

MP Floating Pointer Structure Datová struktura u SMP systémů Začíná signaturou _MP_ Popisuje dostupné procesory Pokud ji kód jádra OS nenajde, předpokládá se uniprocessor o Tj. podle její detekce se rozhoduje, jaké jádro se vlastně nainstaluje viz protected mode o Hledá signaturu na určených místech v paměti 1. kb EBDA Poslední kb základní paměti Arény v adresním rozsahu ROM-BIOSu MP Floating Pointer Structure Field Offset Length Description/Use Signature 0 4B This 4 byte signature is the ASCII string "_MP_" which the OS should use to find this structure. MPConfig Pointer 4 4B This is a 4 byte pointer to the MP configuration structure which contains information about the multiprocessor configuration. Length 8 1B This is a 1 byte value specifying the length of this structure in 16 byte paragraphs. This should be 1. Version 9 1B This is a 1 byte value specifying the version of the multiprocessing specification. Either 1 denoting version 1.1, or 4 denoting version 1.4. Strana 15 (celkem 27)

Checksum 10 1B The sum of all bytes in this floating pointer structure including this checksum byte should be zero. MP 11 1B This is a byte containing feature Features 1 MP Features 2 MP Features 3-5 flags. 12 1B This is a byte containing feature flags. Bit 7 reflects the presence of the ICMR, which is used in configuring the IO APIC. 13 3B Reserved for future use. Processor Entry Field Offset Length Description/Use Entry Type 0 1B Since this is a processor entry, this field is set to 0. Local APIC ID 1 1B This is the unique APIC ID number for the processor. Local APIC Version 2 1B This is bits 0-7 of the Local APIC version number CPU Enabled Bit CPU Bootstrap Processor Bit register. 3:0 1b This bit indicates whether the processor is enabled. If this bit is zero, the OS should not attempt to initialize this processor. 3:1 1b This bit indicates that the processor entry refers to the bootstrap processor if set. Strana 16 (celkem 27)

CPU Signature CPU Feature flags 4 4B This is the CPU signature as would be returned by the CPUID instruction. If the processor does not support the CPUID instruction, the BIOS fills this value according to the values in the specification. 8 4B This is the feature flags as would be returned by the CPUID instruction. If the processor does not support the CPUID instruction, the BIOS fills this value according to values in the specification. Dále existují o MP Configuration Table o MP Configuration Table Entries o IO APIC Entry o APIC Memory Mappings o Local APIC Register Addresses Viz http://www.osdever.net/tutorials/view/multiprocessingsupport-for-hobby-oses-explained A manuály od Intelu Strana 17 (celkem 27)

SMP Bootstrap Pojmy o BSP Bootstrap Procesor Vykonává programový kód po spuštění počítače o AP Application Procesor Každé další jádro SMP systému APID id procesoru Aka Auxiliary Processor Princip o Po zapnutí jsou všechny procesory v reálném režimu o BIOS vybere BSP a ostatní procesory zastaví o Kód SMP jádra běžící na BSP prohledá paměť na _MP_ o Pokud nenašel, zavede se jednoprocesorové jádro o Pokud našel, inicializuje APIC BSP K tomu je nutné se přepnout do chráněného režimu o Kód vykonávaný BSP postupně vzbudí AP pomocí Init-IPI (Inter-Processor Interrupt) o AP se přepne do chráněného režimu a začne svoji další činnost synchronizovat s kódem, který ho spustil a běží na BSP o Jakmile jsou inicializovány všechny AP, BSP přepne I/O APIC do symetrického IO režimu Routovací tabulka, která přesměruje přerušení od sběrnic periferií na některý lokální APIC AP o SMP jádro pokračuje dál s vlastní inicializací Strana 18 (celkem 27)

broadcast_ap_startup: # # This procedure is executed only by the BootStrap # Processor, to awaken the Auxilliary Processors so # that they each can display their Local-APIC ID- # number (and their CR0 register's value, so we can # verify that the cache-related bits are setup # properly). We use code here which follows the MP # Initialization Protocol. # # point FS:EBX to the Local-APIC's memory-mapped page xor %ax, %ax # address segment zero mov %ax, %fs # with FS register mov $APIC_BASE, %ebx # APIC address in EBX # compute the page-number(where each AP should start) mov $realcs, %edx # arena segment-address shl $4, %edx # multiplied by sixteen add $tos, %edx # plus entry's offset shr $12, %edx # divided by page-size and $0xFF, %edx # must be in bottom 1MB # issue an 'INIT' Inter-Processor Interrupt command mov $0x000C4500, %eax # broadcast INIT-IPI mov %eax, %fs:0x300(%ebx)# to all-except-self # do 10ms delay, enough time for APs to awaken mov $10000, %eax # ten-thousand microseconds call delay_eax_microseconds# execute programmed delay # wait for indication of the command's completion spin1: bt $12, %fs:0x300(%ebx) # command-in- # progress? jc spin1 # yes, spin until done #---------------------------------------------------- Strana 19 (celkem 27)

# now we complete the Intel 'MP Initialization # Protocol' #---------------------------------------------------- mov $2, %ecx # protocol's repetitions nxipi: # issue a 'Startup' Inter-Processor Interrupt command mov $0x000C4600, %eax # issue 'Startup-IPI' mov %dl, %al # page is the vector mov %eax, %fs:0x300(%ebx)# to all-except-self # delay for 200 microseconds mov $200, %eax # number of microseconds call delay_eax_microseconds # for a programmed delay # wait for indication of the command's completion spin2: bt $12, %fs:0x300(%ebx) # command-in- # progress? jc spin2 # yes, spin until done # repeat this 'Statup-IPI' step twice (per the # protocol) loop nxipi # again for MP protocol ret #---------------------------------------------------- Strana 20 (celkem 27)

#---------------------------------------------------- initap: # # This procedure will be executed by each Application # Processor as it is awakened by the BootStrap # Processor sending Startup-IPI's. In order that each # processor can call subroutines, it requires a # private stack-area, which we setup sequentially # using the 'xadd' instruction (to guarantee that # stack-areas are non-overlapping). But until its # stack is ready, this CPU cannot handle interrupts. # cli mov %cs, %ax mov %ax, %ds mov %ax, %es # disable interrupts # address program arena # using DS register # and ES register # increment the count of processors that have # awakened lock incw n_aps # insure 'atomic' update # increment the AP count # setup an exclusive stack-region for this processor mov $0x1000, %ax xadd %ax, newss mov %ax, %ss xor %esp, %esp # paragraphs in segment # 'atomic' xchg-and-add # segment-address to SS # top-of-stack into ESP # call subroutines to display this processor's # Local-ID call allow_4gb_addressing # adjust FS seg-limit call display_apic_localid # display this CPU's ID # increment the count of processors that have # finished lock # insure 'atomic' update incw n_fin # when modifying counter #---------------------------------------------------- http://www.cs.usfca.edu/~cruse/cs630f08/mphello.s Strana 21 (celkem 27)

http://www.embeddedinternetdesign.com/design/227500241;jsessioni d=ex4dhzlafhp01qe1ghrskhwatmy32jvn?pgno=2 http://www.embeddedinternetdesign.com/design/227500241;jsessioni d=qltxjp4hwv3jtqe1ghrskhwatmy32jvn?pgno=1 Strana 22 (celkem 27)

Režimy procesoru Real-mode Kód může cokoliv a kamkoliv, kam může adresovat Neexistuje žádná ochrana Protected-mode Viz výše Unreal mode Neoficiální režim Viz výše VM86 Virtual Mode Zpřístupňuje real-mode kód v chráněném režimu Např. volání služeb BIOSu z chráněného režimu SMM System Management Mode Žádný kód, jak ho obvykle známe, neběží Pouze běží speciální kód, firmware nebo hw debugger, v privilegovaném režimu 64bit Compatibility Mode Umožňuje 64bit OS spouštět 32bitové aplikace Nejsou k dispozici 64bit registry 64bit Long Mode Většinu 32bit aplikací prý stačí jen překompilovat Viz dále Strana 23 (celkem 27)

http://en.wikipedia.org/wiki/x86-64 http://www.codeproject.com/kb/system/asm.a spx Long Mode Některé systémové instrukce jsou v Long Mode a Kompatibility Mode nedostupné o Segmenty viz protected mode o TSS Task State Segment Hw podpodora pro multithreading Strana 24 (celkem 27)

Adresování o Flat režim o Až na FS a GS, jako kdyby všechny segmentové registry byly rovny nule o Vytvoří se segment deskriptor s bity D=0 (default) a L=1 (long mode) Jejich kombinace říká 64bitový segment Hodnoty DS, SS a ES jsou ignorovány, ať už do nich dáte cokoliv Obsluha přerušení o Pozor, nové adresy obsluh jsou už 64bit Multi-threading o Stále ten samý princip jako u protectedmode o Což jsou privileges, APIC a prakticky ta samá virtualizace jako u real-modu Která se dá použít i u unreal modu Přepnutí do long-mode o http://www.codeproject.com/kb/system/as m.aspx o http://www.ijack.org.uk/html/s/78.html Strana 25 (celkem 27)

EnterLM: ; Disable paging mov eax, cr0 ; Read CR0. and eax,7fffffffh ; Set PE=0 mov cr0, eax ; Write CR0. ; Set Page Address Etension ; by setting CR4's 5th bit. mov eax, cr4 bts eax, 5 mov cr4, eax ; Create the new page tables and load CR3 ; with them. Because CR3 is still 32-bits ; before entering long mode, the page ; table must reside in the lower 4GB. call SetupMemory ; Enable long mode (note, this does not ; enter long mode, it just enables it) ; EFER = Extended Feature Enable Register mov ecx, 0c0000080h ; EFER MSR number. rdmsr ; Read EFER. bts eax, 8 ; Set LME=1. wrmsr ; Write EFER. ; Enable Paging to activate Long Mode. ; Assuming that CR3 is loaded with the ; physical address of the page table. mov eax, cr0 ; Read CR0. or eax,80000000h ; Set PE=1. Strana 26 (celkem 27)

mov cr0, eax ; Write CR0. ; Now you are in compatibility mode. ; Enter 64-bit mode by jumping to an 64- ; bit code segment: db 0eah dd LinearAddressOfStart64 dw code64_idx ; The only thing you have to do in 64-bit ; mode is to reset the RSP: mov rsp,stack64 ; Hotovo, běžíme v long-mode ; i s nastaveným zásobníkem Strana 27 (celkem 27)