Usuari:Sergi/Temari/Tema 18 Sistemas operativos: Gestión de entradas/salidas.

De Acacha

Dreceres ràpides: navegació, cerca

Contingut

Introducció

En aquest tema tractaré de centrar-me en els aspectes fonamentals de la gestió de dispositius d'entrada i sortida des de la visió dels sistemes operatius. Tot i això, serà inevitable referir-se i explicar superficialment conceptes que es tracten més a fons en altres temes de les oposicions (sobretot el tema de la part d'arquitectura de computadors (AC) que tracta sobre els dispositius perifèrics d'entrada i sortida - Usuari:Sergi/Temari/Tema 7 Dispositivos periféricos de entrada/salida. Características y funcionamiento. )

Vull destacar també que no entrarem en detalls sobre els dispositius d'emmagatzemament externs (memòria secundària o superior), ja que tot i que són també dispositius d'E/S, tenen temes dedicats d'oposicions tant des del punt de vista d'AC com de Sistemes Operatius (SO).

Altres temes

Temes relacionats:

Tema introductori:

Dispositiu d'entrada/Sortida

Un dispositiu d'entrada/sortida és un recurs gestionat pel sistema operatiu sobre el qual els processos poden fer operacions de lectura/escriptura amb la 
finalitat d'obtenir,emmagatzemar, mostrar o transferir informació

Cal deixar clara la relació entre perifèric i dispositiu d'entrada/sortida. Aquesta relació no queda sovint clara i és força difusa (a més algunes no tota la bibliografia tracta el concepte de perifèric d'igual manera).

  • Dispositiu d'entrada/sortida: Des de la perspectiva de l'arquitectura de computadors, es considera un dispositiu d'entrada sortida tot aquells dispositiu que no formi part del nucli principal d'un ordinador. Aquest nucli ve determinat pel model de màquina senzilla de Von Neumman i esta format per la CPU (amb la unitat de control i la ALU), la memòria principal, la unitat de control d'E/S i els busos de comunicació.
  • Perifèric: des de la perspectiva del maquinari comercial, s'acostuma a anomenar perifèric a totes aquelles dispositius que permeten la comunicació amb l'exterior. Des de la perspectiva de l'arquitectura de computadors, perifèric i dispositiu d'E/S es poden considerar sinònims però només per posar un exemple, difícilment en qualsevol botiga considerarien un perifèric un disc dur. Perifèric porta associada la idea d'un element no imprescindible fet que en l'actualitat, excepte en honroses excepcions com l'utilització de terminals "ximples" amb LTSP), no ens permet considerar opcional un disc dur (o per exemple un teclat).

La comunicació entre els diferents dispositius es realitza mitjançant busos de comunicació:

  • Bus d'adreces: és l'encarregat d'escollir la dada (segons una adreça) amb la qual es vol operar (llegir/escriure)
  • Bus de dades: és el canal pel qual es transmeten les dades.
  • Bus de control: s'utilitza per enviar senyals de control que permetin gestionar les dispositius d'E/S.

La unitat de control d'E/S és l'encarregada de gestionar la relació entre dispositius d'E/S i el nucli del sistema (CPU o memòria principal)

Recursos:

Classificació dels dispositius d'E/S

Poden establir quatre tipus principals de dispositius d'entrada/sortida:

  • Perifèrics d'entrada: només serveixen per introduir dades a l'ordinador (comunicació usuari--> ordinador). L'exemple més clar és el teclat, sempre i quan no tinguem en compte les llums que indiquen l'estat del teclat o altres funcionalitats avançades en teclats moderns.
  • Perifèrics de sortida: només serveixen per mostrar dades a lexterior (comunicació ordinador--> usuari). L'exemple més clar és la pantalla, tot i que també podríem considerar com a excepció les pantalles tàctils.
  • Perifèrics d'entrada i sortida: Compleixen les funcions dels dispositius d'entrada i sortida al. Exemple: dispositius multi ús (impressora+ escanner)
  • Perifèrics d'emmagatzemament: tots aquells dispositius de memòria secundària que permeten emmagatzemar dades (discs durs magnètics, lectors/gravadors òptics com CD-ROM o DVD-ROM, unitats de cinta, etc.)
  • Perifèrics de comunicació: Son els perifèrics encarregats de comunicar-se amb altres ordinadors remots a través d'una xarxa de comunicació

Arquitectura dels sistemes operatius

La gràfica de la dreta ens mostra un exemple d'arquitectura de Sistema Operatiu. L'exemple esta basat en un Sistema Operatiu amb nucli Linux. El nucli és l'encarregat de gestionar la comunicació entre el maquinari i el sistema operatiu i és el nucli d'aquest últim.

Tot i tractar-se d'un exemple concret de nucli i sistema operatiu, podem observar que apareixen una sèrie de nivells que podrem trobar en tots els sistemes operatius actuals:

Nivell d'espai d'usuari

Nivell d'interfície espai usuari - sistema operatiu. Crides del sistema

  • Interfície entre l'espai d'usuari i el nucli/Sistema Operatiu: Les aplicacions es comuniquen amb el SO utilitzant les crides del sistema de les llibreries del sistema.

Nivell d'espai de nucli

  • Espai de supervisor o espai de kernel: espai sense restriccions d'accés a la memòria que pot accedir a qualsevol adreça, de qualsevol procés o de qualsevol dispositiu mapejat a memòria i per tant no té cap mena de restricció d'accés. Aquest espai esta reservat per a ús del nucli o dels seus mòduls o d'alguns controladors (drivers)

Subsistemes interns

  • Subsistemes interns: en el cas de Unix, es disposa d'uns sistemes de fitxers especials que serveixen per obtenir informació sobre el kernel (/proc i /sys)

Nivell d'abstracció de maquinari. HAL

El Nivell d'abstracció de maquinari (Hardware Abstraction Layer - HAL-) és el nivell que s'encarrega d'oferir al sistema una màquina virtual, un nivell d'abstracció superior que permeti treballar de forma més senzilla amb els dispositius d'E/S.

Un altre objectiu d'aquest nivell es homogeneïtzar les operacions amb dispositius d'E/S amb independència del seu funcionament intern, diferències entre marques, models, etc. Aquest nivell és el que ens permet treballar amb un disc dur (o una targeta de xarxa o qualsevol altre dispositiu) utilitzant sempre les mateixes operacions amb independència del tipus de disc (SCSI, IDE, SATA, PATA) i dels detalls de maquinari (moure el braç del disc dur, localitzar Pista, Sector i Capçalera de la posició del disc a la que volem accedir, etc.)

HAL és el nivell que utilitzaran les API del sistema per treballar amb llenguatges d'alt nivell amb els dispositius d'E/S.

HAL també permet fer més fàcil la portabilitat dels sistemes operatius entre plataformes.

Nivell de programari especific de maquinari (drivers o controladors)


Recursos:

Maquinari

  • Maquinari (chips o lògica electrònica):

Unitats d'entrada/sortida

Adreçament de dispositius d'entrada/sortida

Busos d'E/S i memòria separats

Sistemes antics.

Dispositius amb mapa de memòria

  • Més habitual en sistemes actuals
  • Mmap a Linux

Consulteu:

Transferència de dades

Direct memory Accéss (DMA)

El acceso directo a memoria (DMA, del inglés Direct Memory Access) permite a cierto tipo de componentes de ordenador acceder a la memoria del sistema para leer o escribir independientemente de la CPU principal. Muchos sistemas hardware utilizan DMA, incluyendo controladores de unidades de disco, tarjetas gráficas y tarjetas de sonido. DMA es una característica esencial en todos los ordenadores modernos, ya que permite a dispositivos de diferentes velocidades comunicarse sin someter a la CPU a una carga masiva de interrupciones.

Una transferencia DMA consiste principalmente en copiar un bloque de memoria de un dispositivo a otro. En lugar de que la CPU inicie la transferencia, la transferencia se lleva a cabo por el controlador DMA. Un ejemplo típico es mover un bloque de memoria desde una memoria externa a una interna más rápida. Tal operación no ocupa el procesador y como resultado puede ser planificado para efectuar otras tareas. Las transferencias DMA son esenciales para aumentar el rendimiento de aplicaciones que requieran muchos recursos.

Cabe destacar que aunque no se necesite a la CPU para la transacción de datos, sí que se necesita el bus del sistema (tanto bus de datos como bus de direcciones), por lo que existen diferentes estrategias para regular su uso, permitiendo así que no quede totalmente acaparado por el controlador DMA.

Recursos:

Sincronització per polling

Sincronització per interrupcions

Interrupcions

Interrupts

   Main article: interrupt

Interrupts are central to operating systems as they allow the operating system to deal with the unexpected activities of running programs and the world outside the computer. Interrupt-based programming is one of the most basic forms of time-sharing, being directly supported by most CPUs. Interrupts provide a computer with a way of automatically running specific code in response to events. Even very basic computers support hardware interrupts, and allow the programmer to specify code which may be run when that event takes place.

When an interrupt is received, the computer's hardware automatically suspends whatever program is currently running, and its registers and program counter are saved. This is analogous to placing a bookmark in a book when someone is interrupted by a phone call. This task requires no operating system as such, but only that the interrupt be configured at an earlier time.

In modern operating systems, interrupts are handled by the operating system's kernel. Interrupts may come from either the computer's hardware, or from the running program. When a hardware device triggers an interrupt, the operating system's kernel decides how to deal with this event, generally by running some processing code, or ignoring it. The processing of hardware interrupts is a task that is usually delegated to software called device drivers, which may be either part of the operating system's kernel, part of another program, or both. Device drivers may then relay information to a running program by various means.

A program may also trigger an interrupt to the operating system, which are very similar in function. If a program wishes to access hardware for example, it may interrupt the operating system's kernel, which causes control to be passed back to the kernel. The kernel may then process the request which may contain instructions to be passed onto hardware, or to a device driver. When a program wishes to allocate more memory, launch or communicate with another program, or signal that it no longer needs the CPU, it does so through interrupts.

IRQ:


Recursos:

Gestió de prioritats

Dispositiu especial d'entrada i sortida. Pipes

Imatge:Pipe.png

Programari d'E/S. Drivers

Sistema Operatiu Linux

Imatge:DispositiusEntradaSortida.png

The Windows NT-based operating systems have a HAL in the kernel.[1][2] This allows portability of the Windows NT kernel-mode code to a variety of processors, with different memory management unit architectures, and a variety of systems with different I/O bus architectures; most of that code runs without change on those systems, when compiled for the instruction set for those systems. For example, the SGI Intel x86-based workstations were not IBM PC compatible workstations, but due to the HAL, Windows NT was able to run on them.

BSD, Mac OS X, Linux, CP/M, MS-DOS, Solaris, and some other portable operating systems also have a HAL, even if it's not explicitly designated as such. Some systems, such as Linux, have the ability to insert one while running, like Adeos. The NetBSD operating system kernel is widely known as having a clean hardware abstraction layer which allows it to be highly portable. As part of this system are uvm(9)/pmap(9), bus_space(9), bus_dma(9) and other subsystems. Popular buses which are used on more than one architecture are also abstracted, such as ISA, EISA, PCI, PCI-E, etc., allowing drivers to also be highly portable with a minimum of code modification.

Dispositius Linux. Sistema /dev

Dispositius de caràcter

   A character (char) device is one that can be accessed as a stream of bytes (like a file); a char driver is in charge of implementing this behavior. Such a driver usually implements at least the open, close, read, and write system calls. The text console (/dev/console) and the serial ports (/dev/ttyS0 and friends) are examples of char devices, as they are well represented by the stream abstraction. Char devices are accessed by means of filesystem nodes, such as /dev/tty1 and /dev/lp0. The only relevant difference between a char device and a regular file is that you can always move back and forth in the regular file, whereas most char devices are just data channels, which you can only access sequentially. There exist, nonetheless, char devices that look like data areas, and you can move back and forth in them; for instance, this usually applies to frame grabbers, where the applications can access the whole acquired image using mmap or lseek.

Dispositius de bloc

   Like char devices, block devices are accessed by filesystem nodes in the /dev directory. A block device is something that can host a filesystem, such as a disk. In most Unix systems, a block device can be accessed only as multiples of a block, where a block is usually one kilobyte of data or another power of 2. Linux allows the application to read and write a block device like a char device -- it permits the transfer of any number of bytes at a time. As a result, block and char devices differ only in the way data is managed internally by the kernel, and thus in the kernel/driver software interface. Like a char device, each block device is accessed through a filesystem node and the difference between them is transparent to the user. A block driver offers the kernel the same interface as a char driver, as well as an additional block-oriented interface that is invisible to the user or applications opening the /dev entry points. That block interface, though, is essential to be able to mount a filesystem.


Crides del sistema

  • Conceptes previs
    • Descriptors de fitxers
  • Funció open
  • Funció creat
  • Funció read
  • Funció write
  • Funció close
  • Funció lseek
  • Funció unlink
  • funció stat

Consulteu:

Comandes

Consulteu:

Problemàtica en l'assignació de recursos

Dead Lock. Abraçada mortal

Eines de l'usuari