21/11/16 MaterialdidáHco InterfacesePeriféricos SubsistemadeE/SdoSOe Drivers • Capítulodelivrotexto:AndrewS.Tanenbaum,Modern Opera+ngSystems,2ªedição,Pren?ce-Hall.Capítulo5:Input/ Output. – Tambémdisponívelemportuguês:SistemasOperacionais Modernos,2a.Edição,Pearson-Pren?ce-HalldoBrasil,2003. Prof.JoãoPauloA.Almeida ([email protected]) IncluislidesdeRobertaLimaGomes CamadasdoSoLwaredeE/S CamadasdoSoLwaredeE/S InterfacedoSistemaOperacional (ChamadasdeSistema) BibliotecasdeE/S Barramento/Controladores CamadasdosistemadesoLwaredeE/S 3 SubsistemadeE/SdoSistemaOperacional 4 CamadasdoSoLwaredeE/S InterfacedoSistemaOperacional (chamadasc/interrupçõesemsoLware) BibliotecasdeE/S Barramento/Controladores SubsistemadeE/SdoSistemaOperacional InterrupçõesdeE/Semhardware 5 1 21/11/16 DriversdosDisposiHvos Subsistema(SoLware)deEntradaeSaída • ObjeHvos – Fornecerumainterface“amigável”parauHlização dosdisposiHvosdeE/S • UniformizarotratamentodosdisposiHvos • “Esconder”detalhesdemais“baixonível” Chamadas de sistema – PermiHrainclusãodenovosdisposiHvos – Facilitaracorreçãodeerrosgeradospelo disposiHvo – ExplorareficientementeosdisposiHvosdeE/S Independente de dispositivo Interface padrão • Desempenho 7 – ComparHlhardisposiHvosdeE/S – AlocardisposiHvos – Escalonarrequisições 8 FunçõesdosoLwaredeE/Sindependentede diposiHvo CamadasdoSub-SistemadeE/S Interface uniforme para os drivers dos dispositivos Identificação de dispositivo Proteção de dispositivo Armazenamento em buffer Relatório dos erros Alocação e liberação de dispositivos dedicados Fornecimento de tamanho de bloco independente de dispositivo 9 CamadasdosistemadeE/Seasprincipaisfunçõesdecada camada 10 2 21/11/16 SoLwaredeE/SIndependentedeDisposiHvo(3) a) b) c) EntradasemuHlizaçãodebuffer UHlizaçãodebuffernoespaçodousuário UHlizaçãodebuffernonúcleoseguidodecópiaparaoespaçodo usuário 14 SoLwaredeE/SIndependentedeDisposiHvo(4) SoLwaredeE/SIndependentedeDisposiHvo(2) (a)Semumainterface-padrãododriver (b)Comumainterface-padrãododriver Aoperaçãoemredepodeenvolvermuitascópiasde umpacote 15 17 Subsistema(SoLware)deEntradaeSaída(4) • SoLwaredeE/Sdeusuário: – RealizachamadasdealtonívelaosoLwaredeE/S independentededisposiHvo: – Wrappersparachamadasdesistema • Abrir/fechararquivo,ler/escreverdados,etc. 19 Profa. Roberta L.G. LPRM/ DI/UFES Subsistema(SoLware)deEntradaeSaída(5) • InterfacedosubsistemadeE/S – disposiHvos“abstratos”deE/S – CadarepresentaumaclassededisposiHvosdeE/S • DisposiHvos“abstratos” – Orientadoabloco(blockdevice) – Orientadoacaractere(stream,characterdevice) – Rede 20 Profa. Roberta L.G. LPRM/ DI/UFES 3 21/11/16 Subsistema(SoLware)deEntradaeSaída(6) Subsistema(SoLware)deEntradaeSaída(7) • InterfacedosubsistemadeE/S(cont.) • InterfacedosubsistemadeE/S(cont.) – DisposiHvosOrientadoabloco – DisposiHvosOrientadoacaractere • Organizadadosemblocosdetamanhofixo • Acessadiretamenteumblocodedados • BlocossãoidenHficadosporendereços(númerodobloco) • ControladisposiHvosqueproduzemouconsomem conjuntodedadosdetamanhoarbitrário • Operaçõesipicas: – ex:blocosdedisco – put()eget()[implementadascomopen,read,write] • Operaçõesipicas: • open(),read(),write()eclose() • Disponibilizadasaosusuáriosviasistemadearquivos – ex:teclado,vídeo,mouse,impressora,etc... • Operaçõesespecíficas(inversãodecores,bip,inicialização, etc)sãofornecidasporumafunçãogenérica – io_control() 21 Profa. Roberta L.G. LPRM/ DI/UFES 22 Profa. Roberta L.G. LPRM/ DI/UFES Subsistema(SoLware)deEntradaeSaída(8) Subsistema(SoLware)deEntradaeSaída(9) • InterfacedosubsistemadeE/S(cont.) • SoLwaredeE/SindependentededisposiHvo – DisposiHvosOrientadoarede – ImplementafunçõesgeraiscomunsatodososdisposiHvos – AtribuiçãouniformedonomeindependentedodisposiHvo • ControleeacessoadisposiHvosqueestãofisicamenteinstaladosem outrosequipamentos • Necessárioestabelecimentodeconexões • Interfaceipicasãosockets • Operaçõesipicas: • OUNIXéumexemploclássico: – NomedodisposiHvoéumstring – open(),close(),create() • Suporteaserviços: – orientadoaconexão:connect(),accept(),read(),write() – semconexão:send()erecv() 23 Profa. Roberta L.G. LPRM/ DI/UFES EntradaeSaídanoUnix /dev/fd0Disquete /dev/hda–MestredobarramentoIDE1 /dev/hdb–EscravodobarramentoIDE1 /dev/hdc–MestredobarramentoIDE2 /dev/hdd–EscravodobarramentoIDE2 • Nocasodediscos,umnúmerointeiroconcatenadoao disposiHvoindicaaparHção • /dev/hda1–PrimeiraparHçãododisposiHvomestredo barramentoide1 25 Profa. Roberta L.G. LPRM/ DI/UFES ChamadasdeSistema(Linux) • OUnixmapeiaosdisposiHvosdeentradaesaídaemarquivos especiais • DisposiHvoslocalizadosnodiretório/dev – – – – – 24 %eax Name Source %ebx %ecx %edx 1 sys_exit kernel/exit.c int - - 2 sys_fork arch/i386/kernel/process.c struct pt_regs - - 3 sys_read fs/read_write.c unsigned int char * size_t 4 sys_write fs/read_write.c unsigned int const char * size_t 5 sys_open fs/open.c const char * int int 6 sys_close fs/open.c unsigned int - - 7 sys_waitpid kernel/exit.c pid_t unsigned int * int 8 sys_creat fs/open.c const char * int - 9 sys_link fs/namei.c const char * const char * - 10 sys_unlink fs/namei.c const char * - - 11 sys_execve arch/i386/kernel/process.c struct pt_regs - - Profa. Roberta L.G. LPRM/ DI/UFES 4 21/11/16 E/SProgramada(1) EsquemasdeEntrada/Saída • 3esquemasdiferentespararealizaçõesdeE/S: – 1 – E/S Programada com Espera Ocupada (busy wait, polling) – 2–E/SDirigidaporInterrupção – 3–E/ScomAcessoDiretoàMemória(DMA) Passosdaimpressãodeumacadeiadecaracteres 28 E/SProgramada(2) E/SOrientadaaInterrupção • a) Escritadeumacadeiadecaracteresparaa impressorausandoE/Sprogramada 29 b) Códigoexecutadoquandoquandoéfeitaachamadaaosistemapara impressão RoHnadetratamentodeinterrupção 30 E/SUsandoDMA • Escritadeumacadeiadecaracteresparaa impressorausandoE/Sorientadaàinterrupção DiscoRígido ImpressãodeumacadeiadecaracteresusandoDMA a) Códigoexecutadoquandoquandoéfeitaachamadaao sistemaparaimpressão b) RoHnadetratamentodeinterrupção 31 5 21/11/16 TamanhodeSetor Buffers…paraescritanoarquivo Buffers https://lwn.net/Articles/457667/ Opçõesdeopen Flush intopen(constchar*pathname,intflags) • O_NONBLOCKorO_NDELAY • Whenpossible,thefileisopenedinnonblockingmode. Neithertheopen()noranysubsequentoperaHonson thefiledescriptorwhichisreturnedwillcausethe callingprocesstowait. • O_SYNC • ThefileisopenedforsynchronousI/O.Any write(2)sontheresulHngfiledescriptorwillblockthe callingprocessunHlthedatahasbeenphysically wrizentotheunderlyinghardware. • #include<stdio.h> • intfflush(FILE*stream); • Foroutputstreams,fflush()forcesawriteofalluserspacebuffereddataforthegivenoutputorupdate streamviathestream'sunderlyingwritefuncHon. • IfthestreamargumentisNULL,fflush()flushesallopen outputstreams. • Notethatfflush()onlyflushestheuserspacebuffers providedbytheClibrary.Toensurethatthedatais physicallystoredondiskthekernelbuffersmustbe flushedtoo,forexample,withsync(2)orfsync(2). 6 21/11/16 Sync ArHgo • sync()causesallbufferedmodificaHonstofilemetadata anddatatobewrizentotheunderlyingfilesystems. • syncfs()islikesync(),butsynchronizesjustthefile systemcontainingfilereferredtobytheopenfile descriptorfd. • Bugs • AccordingtothestandardspecificaHon(e.g.,POSIX. 1-2001),sync()schedulesthewrites,butmayreturn beforetheactualwriHngisdone.However,since version1.3.20Linuxdoesactuallywait.(ThissHlldoes notguaranteedataintegrity:moderndiskshavelarge caches.) • Relaçãodesempenhonotempoxconfiabilidade (integridadededados) • Abstraçãoxrealidadedohardware • Impactonodesempenhopordiferentespremissas (comoosoLwareassumequeohardwarefunciona) Perguntas A1amenHra • Porqueoautordizqueosdiscosesuascontroladores “mentem”?QualéamenHra? • Qualéoproblemadeconfiabilidadequeéintroduzido aotentarmaximizardesempenhonotempo? • Qualoproblemaquetagqueueingresolve?Como funciona? • QualoproblemadasimplementaçõesSATAsemNCQ? • Discutaasconsequênciasdoaumentodotamanhodo setor.Quaissãoasmétricasafetadas?Porque? • Paraevitarqueademandasejareprimida(próximas demandasviriamsomenteapósumarequisiçãoser completamenteatendida,ousejaatéqueosdados sejamescritosnamídia)ascontroladoresdizemqueos dadosjáforamescritosassimqueosdadosestãono cache(memóriavoláHl) • Istofazcomquecrashslevemosistemaaumestado inconsistente(aplicaçãoachaquejáescreveu,mas dadosnãoforamescritos) • ÉistoqueelechamademenHra:asubversãoda “semânHca”doflush • DopontodevistadedesempenhoéposiHvo,gerando pipeline Tagqueueing NaHveCommandQueueing • PermitemúlHplasrequisiçõessimultaneamente • Cadaumaéconfirmadaindependentementequando forescritaemdisco • Pipelineépossível • Escalonamentoeficienteépossível(acessarossetores maispróximosantesconsiderandoarotaçãododisco) – Pensenoelevador 7 21/11/16 AumentodoTamanhodoSetor Escritaleva2voltasnodisco CamadasdoSoLwaredeE/S CiclodevidadeE/S • Comoosdriverssãocarregados? InterfacedoSistemaOperacional (ChamadasdeSistema) BibliotecasdeE/S BIOS Barramento/Controladores SubsistemadeE/SdoSistemaOperacional 48 CamadasdoSoLwaredeE/S InterfacedoSistemaOperacional (ChamadasdeSistema) BIOS=BasicInput/OutputSystem BibliotecasdeE/S BIOS Barramento/Controladores SubsistemadeE/SdoSistemaOperacional • DisponívelemROMouFLASH(firmware) • Bootstrapping – BIOSrecebecontrole – Endereçoƒsico000FFFF0h • Power-OnSelfTest(POST) • Configuraçãobásicadecontroladores • CargadoSistemaOperacional – OudeumBootLoaderdesegundonível – LILO,bootfromnetwork,SCSI,USB • Fornecidopelosprodutoresdeplacamãe • hzp://en.wikipedia.org/wiki/BIOS • hzp://www.embeddedarm.com/Manuals/EBIOS-UM.PDF 49 8 21/11/16 POST • PrincipaisaHvidadesdurantePOST: – VerificaintegridadedaBIOS(updatesflash) – Verificaamemória – Descobrir,inicializarecatalogarbarramentose disposiHvos – Proverinterfacec/usuárioparaconfiguração – IdenHficareselecionardisposiHvosparaboot – Construirambienteparacargadosistema operacional http://en.wikipedia.org/wiki/Image:Phoenix__AwardBIOS_CMOS_Setup_Utility.jpg BIOS=BasicInput/OutputSystem InterrupçõesdeSoLware • Usadoparaentradaesaídabásicaduranteos procedimentosdebooteconfiguraçãodehardware • Etambémduranteaexecuçãodesistemasoperacionais maissimples(DOSporexemplofaziausoextensivoda BIOSparaentradaesaída) – ParaissoaBIOSofereciaumainterfacesimilarà interfacedosSistemasOperacionais – UsandointerrupçõesdesoLware – Usandoatabeladevetoresdeinterrupção • InterrupçõesdesoLwarepodemseraHvadasporsoLware • InstruçãoINT<número-interrupção> – ACPUentãousaestenúmeroparaindexarumatabelade 256entradas(vetordeinterrupções)paraencontraro endereçodaro?nadetratamentodeinterrupçãoaser executada – Vetordeinterrupçõesseencontranoendereço0 • 256x4bytes • DoisHposdeinterrupções – InterrupçõesdoSistemaOperacional(DOS,Linux, etc.) – InterrupçõesdaBIOS • ParagerarinterrupçõesdoDOSuse:INT21h • ParagerarinterrupçõesdoLinuxuse:INT80h Interrupções…nãoconfundir! ChamadasdeSistema • INT21h–DOS/Windows(16-bits) – Quandousamosestainstrução,oDOSchamauma roHnadetratamentoespecífica,dependendodoHpo deinterrupção – OHpodeinterrupçãoserádefinidoemfunçãodo valorqueesHverarmazenadonoregistradorAL • INT80h–Linux – hzp://asm.sourceforge.net/ • INT11h-1ah–BIOS – ChamadopeloDOS InterfacedoBIOS(chamadasc/ interrupçõesemsoLware) InterfacedoSistemaOperacional (chamadasc/interrupçõesemsoLware) BIOS InterrupçõesdeE/Semhardware Natabeladeinterrupçõesestátudomisturado! 56 9 21/11/16 TabeladeInterrupção(IVT) Interrupt TabeladeInterrupção Description INT 00h CPU: Division by Zero INT 70h IRQ8: Called by RTC INT 01h CPU: Single Step for debugging INT 74h IRQ12: Called by mouse INT 02h CPU: NMI, used e.g. by POST for memory errors (Power-On Self Test) INT 75h IRQ13: Called by math coprocessor INT 03h CPU: Breakpoint for debugging INT 76h IRQ14: Called by primary IDE controller INT 04h CPU: Numeric Overflow INT 77h IRQ15: Called by secondary IDE controller INT 05h Print Screen INT 08h IRQ0: Called by system timer 18.2 times per second INT 09h IRQ1: Called by keyboard INT 0Bh IRQ3: Called by 2nd serial port COM2 INT 0Ch IRQ4: Called by 1st serial port COM1 INT 0Dh IRQ5: Called by hard disk controller (PC/XT) or 2nd parallel port LPT2 (AT) INT 0Eh IRQ6: Called by floppy disk controller INT 0Fh IRQ7: Called by 1st parallel port LPT1 (printer) Em vermelho as interrupções de E/S de hardware TabeladeInterrupção TabeladeInterrupção(facilidadesBIOS) INT 10h Video Services (ROM BIOS Extension on VGA controller) AH=00h Set Video Mode AH=01h Set Cursor Shape AH=02h Set Cursor Position AH=03h Get Cursor Position And Shape AH=04h Get Light Pen Position AH=05h Set Display Page AH=06h Clear/Scroll Screen Up AH=07h Clear/Scroll Screen Down AH=08h Read Character and Attribute at Cursor AH=09h Write Character and Attribute at Cursor AH=0Ah Write Character at Cursor AH=0Bh Set Border Color AH=0Eh Write Character in TTY Mode AH=0Fh Get Video Mode AH=13h Write String INT 13h – Onreturnfromint11h,theAXregistercontainsabit-encodedequipment listwiththefollowingvalues: – Bit0Floppydiskdriveinstalled – Bit1Mathcoprocessorinstalled – Bits4,5IniHalvideomode00-none01-40x25color10-80x25color11- 80x25b/w – Bits6,7Numberofdiskdrives – Bit8DMApresent – Bits9,10,11NumberofRS-232serialcardsinstalled – Bit12GameI/Ocardinstalled – Bit13Serialprinterazached – Bits14,15Numberofprintersazached. • INT12h–Indicaamemóriadisponível – ValoremAX:qualoproblema? TabeladeInterrupção(facilidadesBIOS) Interrupt • INT11h–Equipamentosinstalados Description Low Level Disk Services AH=00h Reset Disk Drives AH=01h Check Drive Status AH=02h Read Sectors From Drive TabeladeInterrupção INT 14h Routines for communicating via the serial port. Used by software programs. AH=00h Serial Port Initialization AH=01h Transmit Character AH=02h Receive Character AH=03h Status AH=03h Write Sectors To Drive AH=04h Verifies Sectors On Drive INT 15h Miscellaneous AH=4FH Keyboard Intercept AH=83H Event Wait AH=84H Read Joystick AH=09h Init Fixed Drive Parameters AH=85H Sysreq Key Callout AH=0Ch Seek To Specified Track AH=86H Wait AH=87H Move Block AH=88H Get Extended Memory Size AH=C0H Get System Parameters AH=C1H Get Extended BIOS Data Area Segment AH=C2H Pointing Device Functions AH=05h Format Track On Drive AH=08h Get Drive Parameters AH=0Dh Reset Fixed Disk Controller AH=15h Get Drive Type AH=16h Get Floppy Drive Media Change Status • http://en.wikipedia.org/wiki/BIOS_call 10 21/11/16 TabeladeInterrupção ...emaistabeladeinterrupção INT 19h After POST this interrupt is used by BIOS to load the operating system. INT 1Ah Real Time Clock Services - called by software programs to communicate with the RTC Read Input Status AH=00h Read RTC Read Keyboard Shift Status AH=01h Set RTC AH=10h Read Character Extended AH=02h Read RTC Time AH=11h Read Input Status Extended AH=03h Set RTC Time AH=12h Read Keyboard Shift Status Extended AH=04h Read RTC Date AH=05h Set RTC Date INT 17h Print Services - used by software programs to communicate with the printer AH=06h Set RTC Alarm AH=00h Print Character to Printer AH=07h Reset RTC Alarm AH=01h Initialize Printer AH=02h Check Printer Status INT 16h Implemented by the BIOS or operating system. Provides routines to be called by software programs which communicate with the keyboard. AH=00h Read Character AH=01h AH=02h InterrupçõesdeSoLware(DOS) • INT21h(Entrada:AH<-01h,Saída:caracter->AL) – – LêumcaracterdaconsoleecolocaoseucódigoASCIInoregistradorAL ComogeraresteHpodeInterrupção 1. Copieovalor08hdentrodoregistradorAH 2. Chameainstrução“INT21h” Apósestachamada,assimquefordigitadoumcaracter,seucódigoASCII serácolocadodentrodeAL • INT21h(Entradas:AH<-02h,DL<-caracter) – – Imprimeocaracterouoexecuta,sefordoHpobeep,linefeedou assemelhados ComogeraresteHpodeInterrupção 1. Copieovalor02hdentrodoregistradorAH 2. CopieocódigoASCIIdocaracterquedesejaimprimirdentrodoregistrador DL 3. Chameainstrução“INT21h” Arquivo.com(DOS,16-bit) ;hi.asm-simple"helloworld"program ;assemblewith"nasm-fbin-ohi.comhi.asm" org100h;informNasmthisisa.comfile ;int21hisgoingtowant... movdx,msg;theaddressoformessageindx movah,9;ah=9-"printstring"sub-funcHon int21h ;calldosservices movah,4Ch;"terminateprogram"sub-funcHon int21h;calldosservices msgdb'Hello,World!',0Dh,0Ah,'$';$-terminatedmessage TabeladeChamadasdeSistema(DOS) Exemplosdechamada(DOS) AH Description AH Description 01 Read character from STDIN 02 Write character to STDOUT 05 Write character to printer 06 Console Input/Output 07 Direct char read (STDIN), no echo 08 Char read from STDIN, no echo 09 Write string to STDOUT 0A Buffered input 0B Get STDIN status 0C Flush buffer for STDIN 0D Disk reset 0E Select default drive 19 Get current default drive 25 Set interrupt vector 2A Get system date 2B Set system date • • • • • 2C Get system time 2D Set system time 2E Set verify flag 30 Get DOS version 35 Get Interrupt vector 36 Get free disk space 39 Create subdirectory 3A Remove subdirectory 3B Set working directory 3C Create file 3D Open file 3E Close file 3F Read file 40 Write file 41 Delete file 42 Seek file 43 Get/Set file attributes 47 Get current directory 4C Exit program 4D Get return code 54 Get verify flag 56 Rename file 57 Get/Set file date AH=05h-WRITECHARACTERTOPRINTER Entry:DL=charactertoprint Notes: keyboardcheckedfor^C/^Break STDPRNisusuallythefirstparallelport,butmaybe redirectedunderDOS2+ • iftheprinterisbusy,thisfuncHonwillwait 11 21/11/16 Exemplosdechamada(DOS) Exemplosdechamada(DOS) • • • • • • • • • • • • • AH=06h-DIRECTCONSOLEOUTPUT Entry:DL=character(exceptFFh) Return:AL=characteroutput Notes:doesnotcheck^C/^Break SeeAlso:AH=02h,AH=09h AH=06h-DIRECTCONSOLEINPUT Entry:AH=06hDL=FFh Return: ZFsetifnocharacteravailableandAL=00h ZFclearifcharacteravailableAL=characterread Notes: ^C/^BreakareNOTchecked ifthereturnedcharacteris00h,theuserpressedakey withanextendedkeycode,whichwillbereturnedby thenextcallofthisfuncHon Exemplosdechamada(DOS) Exemplosdechamada(DOS) AH=01h-READCHARACTERFROMSTANDARDINPUT, WITHECHO Return:AL=characterread Notes: ^C/^Breakarechecked ^PtogglestheDOS-internalecho-to-printerflag ^Zisnotinterpreted,thusnotcausinganEOFifinputis redirectedcharacterisechoedtostandardoutput • • • • • • Exemplosdechamada(DOS) Exemplosdechamada(DOS) • • • • • AH=2Ah-GETSYSTEMDATE • Return:CX=year(1980-2099)DH=monthDL=dayAL =dayofweek(00h=Sunday) • AH=2Bh-SETSYSTEMDATE • Entry:CX=year(1980-2099)DH=monthDL=day • Return: • AL=00successful • FFhinvaliddate,systemdateunchanged AH=09h-WRITESTRINGTOSTANDARDOUTPUT Entry:DS:DX->'$'-terminatedstring Return:AL=24h Notes:^C/^Breakarechecked AH=02h-WRITECHARACTERTOSTANDARDOUTPUT Entry:DL=charactertowrite Return:AL=lastcharacteroutput Notes: ^C/^Breakarechecked thelastcharacteroutputwillbethecharacterinDL unlessDL=09honentry,inwhichcaseAL=20hastabs areexpandedtoblanks • ifstandardoutputisredirectedtoafile,noerrorchecks (write-protected,fullmedia,etc.)areperformed 12 21/11/16 Exemplosdechamada(DOS) • AH=39h-"MKDIR"-CREATESUBDIRECTORY • Entry:DS:DX->ASCIZpathname • Return: • CFclearifsuccessfulAXdestroyed • CFsetonerrorAX=errorcode(03h,05h) Chequem hzp://spike.scu.edu.au/~barry/interrupts.html#ah01 paraumalistacompleta 13