4.1 Dispositivos de entrada y salida
Los dispositivos de entrada y salida básicamente están contempladas en dos
categorías: dispositivos de bloque y dispositivos de
carácter
Dispositivo de bloque: almacena información en bloques de tamaño fijo, cada
uno con su propia dirección. Los tamaños de bloque comunes varían desde 512
bytes hasta 32,768 bytes. Todas las transferencias se realizan en unidades de
uno o más bloques completos (consecutivos). La propiedad esencial de un
dispositivo de bloque es que es posible leer o escribir cada bloque de manera
independiente de los demás. Los discos duros, CD-ROMs y memorias USBs son
dispositivos de bloque comunes. Cabe recalcar que los dispositivos de bloque que
no está bien definido el límite entre estos mismos
Dispositivo de carácter: Un dispositivo de carácter envía o
acepta un flujo de caracteres, sin importar la estructura del bloque. No es
direccionable y no tiene ninguna operación de búsqueda. Las impresoras, las
interfaces de red, los ratones (para señalar)y la mayoría de los demás
dispositivos que no son parecidos al disco se pueden considerar como
dispo
sitivos de carácter.
4.1.1 Interrupción del CPU
En un sistema de computadora personal común, la estructura de las
interrupciones es como se muestra en la siguiente figura.
4.1.2 Definición y manejo de interrupciones.
Funcionamiento de las interrupciones a nivel de hardware
Cuando un dispositivo de E/S ha terminado el trabajo que se le asignó,
produce una interrupción (suponiendo que el sistema operativo haya habilitado
las interrupciones). Para ello, impone una señal en una línea de bus que se le
haya asignado. Esta señal es detectada por el chip controlador de interrupciones
en la tarjeta principal, que después decide lo que debe
hacer.
Si no hay otras interrupciones pendientes, el controlador de interrupciones
procesa la interrupción de inmediato. Si hay otra en progreso, o si otro
dispositivo ha realizado una petición simultánea en una línea de petición de
interrupción de mayor prioridad en el bus, el dispositivo sólo se ignora por el
momento. En este caso, continúa imponiendo una señal de interrupción en el bus
hasta que la CPU la atiende. Para manejar la interrupción, el controlador coloca
un número en las líneas de dirección que especifican cuál dispositivo desea
atención e impone una señal para interrumpir a la CPU. La señal de interrupción
hace que la CPU deje lo que está haciendo y empiece a hacer otra
cosa.
4.1.3 E/S programada.
Es la forma más simple de E/S es cuando la CPU hace todo el trabajo. Por
ejemplo. Considere un proceso de usuario que desea imprimir la cadena de ocho
caracteres “ABCDEFGH” en la impresora. Primero ensambla la cadena en un búfer en
espacio de usuario, como se muestra en la figura :
Después el proceso de usuario adquiere la impresora para escribir, haciendo
una llamada al sistema para abrirla. Si la impresora está actualmente siendo
utilizada por otro proceso, esta llamada
fallará y devolverá un código de error o se bloqueará hasta que la
impresora esté disponible, dependiendo del sistema operativo y los parámetros de
la llamada. Una vez que obtiene la impresora, el proceso de usuario hace una
llamada al sistema para indicar al sistema operativo que imprima la cadena en la
impresora.
Después, el sistema operativo por lo general copia el búfer con la cadena a
un arreglo, por ejemplo, p en espacio de kernel, donde se puede utilizar
con más facilidad (debido a que el kernel tal vez tenga que modificar el mapa de
memoria para tener acceso al espacio de usuario). Después comprueba si la
impresora está disponible en ese momento. Si no lo está, espera hasta que lo
esté. Tan pronto como la impresora está disponible, el sistema operativo copia
el primer carácter al registro de datos de la impresora, en este ejemplo
mediante el uso de E/S por asignación de memoria.Esta acción activa la
impresora. Mostrando lo siguiente:
Tan pronto como copia el primer carácter a la impresora, el sistema operativo
comprueba si la impresora está lista para aceptar otro. En general la impresora
tiene un segundo registro, que proporciona su estado. El acto de escribir en el
registro de datos hace que el estado se convierta en “no está lista”. Cuando el
controlador de la impresora ha procesado el carácter actual, indica su
disponibilidad estableciendo cierto bit en su registro de estado, o colocando
algún valor en él.
En este punto el sistema operativo espera a que la impresora vuelva a estar
lista. Cuando eso ocurre, imprime el siguiente carácter, como se
muestra:
La E/S programada es simple, pero tiene la desventaja de ocupar la CPU tiempo
completo hasta que se completen todas las operaciones de E/S. Si el tiempo para
“imprimir” un carácter es muy corto (debido a que todo lo que hace la impresora
es copiar el nuevo carácter a un búfer interno), entonces está bien usar ocupado
en espera. Además, en un sistema incrustado o embebido, donde la CPU no tiene
nada más que hacer, ocupado en espera es razonable. Sin embargo, en sistemas más
complejos en donde la CPU tiene otros trabajos que realizar, ocupado en espera
es ineficiente. Se necesita un mejor método de E/S.
4.1.4 E/S controlada por interrupciones
4.1.4 E/S controlada por interrupciones
Ahora vamos a considerar el caso de imprimir en una impresora que no coloca
los caracteres en un
búfer, sino que imprime cada uno a medida que va llegando. Si la impresora
puede imprimir (por
ejemplo,) 100 caracteres/seg, cada carácter requiere 10 mseg para imprimirse.
Esto significa que
después de escribir cada carácter en el registro de datos de la impresora, la
CPU estará en un ciclo
de inactividad durante 10 mseg, esperando a que se le permita imprimir el
siguiente carácter. Este
tiempo es más que suficiente para realizar un cambio de contexto y ejecutar
algún otro proceso durante
los 10 mseg que, de otra manera, se desperdiciarían.
La forma de permitir que la CPU haga algo más mientras espera a que la
impresora esté lista es
utilizar interrupciones. Cuando se realiza la llamada al sistema para
imprimir la cadena, el búfer se
copia en espacio de kernel (como vimos antes) y el primer carácter se copia a
la impresora, tan pronto
como esté dispuesta para aceptar un carácter. En ese momento, la CPU llama al
planificador y se
ejecuta algún otro proceso. El proceso que pidió imprimir la cadena se
bloquea hasta que se haya impreso
toda la cadena.
Cuando la impresora ha impreso el carácter, y está preparada para aceptar el
siguiente, genera
una interrupción. Esta interrupción detiene el proceso actual y guarda su
estado. Después se ejecuta
el procedimiento de servicio de interrupciones de la impresora.Si no hay más
caracteres por imprimir, el manejador de interrupciones realiza cierta acción
para desbloquear al usuario. En caso contrario, imprime el siguiente carácter,
reconoce la interrupción y regresa al proceso que se estaba ejecutando justo
antes de la interrupción, que
continúa desde donde se quedó.
4.1.5 Clasificacion
Interrupciones precisas e imprecisas
Interrupciones precisa:
Una interrupción que deja al equipo en un estado bien definido se conoce como
interrupción
precisa (Walker y Cragon, 1995). Dicha interrupción tiene cuatro
propiedades:
1. El contador del programa (PC) se guarda en un lugar conocido.
2. Todas las instrucciones antes de la instrucción a la que apunta el PC se
han ejecutado por
completo.
3. Ninguna instrucción más allá de la instrucción a la que apunta el PC se ha
ejecutado.
4. Se conoce el estado de ejecución de la instrucción a la que apunta el
PC.
Interrupciones imprecisa
Una interrupción que no cumple con los requerimientos anteriores se conoce
como interrupción imprecisa
4.1.6 Manejador de interrupciones.
Deben ocultarse en la profundidad de las entrañas del sistema operativo, de manera que éste sepa lo menos posible de ellas.
La mejor manera de ocultarlas es hacer que el controlador que inicia una operación de E/S se bloquee
hasta que se haya completado la E/S y ocurra la interrupción.
a continuación tal vez no sean necesarios en una máquina específica, y tal vez se requieran otros
que no estén listados. Además, los pasos que se llevan a cabo pueden estar en distinto orden en algunas
máquinas.
1. Guardar los registros (incluyendo el PSW) que no han sido guardados por el hardware de
la interrupción.
2. Establecer un contexto para el procedimiento de servicio de interrupciones. Para ello tal
vez sea necesario establecer el TLB, la MMU y una tabla de páginas.
3. Establecer una pila para el procedimiento de servicio de interrupciones.
4. Reconocer el controlador de interrupciones. Si no hay un controlador de interrupciones
centralizado, rehabilitar las interrupciones.
5. Copiar los registros desde donde se guardaron (posiblemente en alguna pila) a la tabla de
procesos.
6. Ejecutar el procedimiento de servicio de interrupciones. Éste extraerá información de los
registros del controlador de dispositivos que provocó la interrupción.
7. Elegir cuál proceso ejecutar a continuación. Si la interrupción ha ocasionado que cierto
proceso de alta prioridad que estaba bloqueado cambie al estado listo, puede elegirse para
ejecutarlo en ese momento.
8. Establecer el contexto de la MMU para el proceso que se va a ejecutar a continuación.
También puede ser necesario establecer un TLB.
9. Cargar los registros del nuevo proceso, incluyendo su PSW.
10. Empezar a ejecutar el nuevo proceso.
Como se puede ver, el procesamiento de interrupciones no carece de importancia. También ocupa
un considerable número de instrucciones de la CPU, en especial en máquinas en las que hay memoria
virtual y es necesario establecer tablas de páginas, o se tiene que guardar el estado de la
MMU (por ejemplo, los bits R y M). En algunas máquinas, el TLB y la caché de la CPU tal vez
también tengan que manejarse al cambiar entre los modos de usuario y de kernel, lo cual requiere
ciclos de máquina adicionales.
4.1.7 Vector de interrupciones
El vector de interrupciones es un vector que contiene el valor que apunta a la dirección en memoria del gestor de una interrupción. En muchas arquitecturas de computación típicas, los vectores de interrupción se almacenan en una tabla en una zona de memoria, la llamada tabla de vectores de interrupción, de modo que cuando se atiende una petición de interrupción de número n, el sistema, tras realizar eventualmente algunas tareas previas (tales como salvar el valor de ciertos registros) transfiere el control a la dirección indicada por el elemento n-ésimo de dicha tabla.
Usualmente, en las arquitecturas más típicas, la transferencia de control se efectuará de modo análogo a una llamada a función a nivel de máquina, almacenándose en una pila el estado actual del registro contador de programa, que será recuperado por una instrucción máquina de retorno de interrupción, que restaurará el estado correspondiente a la ejecución normal de programa forzando la ejecución de la siguiente instrucción.
Los dispositivos de E/S son cada vez más sofisticados
4.2.3 Controladores
Los buffers son áreas de almacenamiento temporal que residen en la memoria principal, en los canales y en las unidades de control. Sirven para almacenar datos leídos de un dispositivo de entrada antes que los necesite el procesador y para almacenar datos que se escribirán en un dispositivo de salida.
4.3.1 TIPOS DE MEMORIAS TRANSITORIAS
Buffers de una única fila
Un buffer de una única fila no es en realidad un cursor, aunque aquí se apliquen las mismas reglas de pertenencia que se aplican a un cursor de conjunto de claves de sólo avance. Con un buffer de una única fila sólo es posible examinar los datos de la fila del conjunto de resultados. Las filas anteriores no están disponibles y la fila actual no estará accesible después de pasar a la siguiente fila del conjunto de resultados.
Buffers de n filas
Un buffer de n filas amplía el ámbito y la capacidad de desplazamiento del buffer de una única fila. En este caso, a la estación de trabajo se le expone un número determinado de filas del conjunto de resultados y a la aplicación se le permite que se desplace libremente por esas filas.
4.3.2 MANEJO DE MEMORIAS TRANSITORIAS
El uso de búferes también es un problema, tanto para los dispositivos de caracteres como para los de bloques. Para entender mejor el problema, consideremos un proceso que quiere leer datos de un módem, una posible estrategia para manejar los caracteres que llegan es hacer que el proceso de usuario emita una llamada al sistema read y se bloquee en espera de un carácter. La llegada de cada carácter causa una interrupción, el procedimiento de servicio de interrupciones entrega el carácter al proceso de usuario y lo desbloquea; después de colocar el carácter en algún lado, el proceso lee otro carácter y vuelve a bloquearse. Esta posible solución no es recomendable debido a que un proceso se ejecutara muchas veces durante lapsos de tiempo muy cortos.
4.3.3 IMPLEMENTACION
La implementación mas adecuada para el uso de memorias transitorias es que el kernel copie los datos en un búfer kernel y desbloqueando de inmediato el invocador. Ahora no importa cuando termine la E/S real; el usuario podrá volver a utilizar el búfer en el instante en que se le desbloquee.
4.3.4 TERMINALES DE RED
Se denominan dispositivos de comunicación y son aquellos que permiten conectar a la computadora con otras a través de una red, los dos tipos de dispositivos mas importantes son: Tarjeta red y el módem.
El administrador de red proporciona una forma conveniente para los usuarios de compartir recursos y al mismo tiempo controlar sus acceso a los mismos, mediante la implementación de protocolos y comunicaciones de red; estos recursos incluyen hardware como la CPU, áreas de memoria, impresoras, unidades de almacenamiento secundario, módem; y recursos de software como compiladores, programas de aplicación y archivos de datos.
4.3.5 INTERFACES GRAFICAS DE USUARIO
Una interfaz gráfica de usuario, definida por sus siglas en inglés GUI, es la interfaz de usuario que le permite activar los comandos de sistema operativo con un clic sobre un icono de escritorio mediante un dispositivo apuntador como un ratón o una pantalla táctil. El GUI evolucionó a partir de las interfaces de usuario impulsadas por comandos.
Muchas interfaces gráficas de usuario comparten muchas similitudes, tanto en apariencia como en operación. Ejemplo de ello, se puede mencionar a sistemas operativos populares como Windows (todas sus versiones hasta las actuales), UNIX, Macintosh (diferentes versiones) y Linux.
4.4 SERVICIOS DE E/S: GENERICOS PARA POSIX Y WIN32
Debido al tratamiento diferenciado que se da el reloj, se presentan separadamente los servicios relacionados con el mismo de los correspondientes a los dispositivos de entrada/salida convencionales.
En cuanto a los servicios del reloj, se van a especificar de acuerdo a las tres categorías: fecha y hora, temporizaciones y contabilidad.
SERVICIO DE TEMPORIZACION: El servicio esta definido por alarm, y su prototipo es:
unsigned int alarm (unsigned int segundos);
SERVICIO DE CONTABILIDAD: Existen diversas funciones que se pueden englobar en esta categoria, por ejemplo la mas usada times, que devuelve información sobre el tiempo de ejecución de un proceso y sus hijos.
clock_t times (struct tms *info);
Deben ocultarse en la profundidad de las entrañas del sistema operativo, de manera que éste sepa lo menos posible de ellas.
La mejor manera de ocultarlas es hacer que el controlador que inicia una operación de E/S se bloquee
hasta que se haya completado la E/S y ocurra la interrupción.
a continuación tal vez no sean necesarios en una máquina específica, y tal vez se requieran otros
que no estén listados. Además, los pasos que se llevan a cabo pueden estar en distinto orden en algunas
máquinas.
1. Guardar los registros (incluyendo el PSW) que no han sido guardados por el hardware de
la interrupción.
2. Establecer un contexto para el procedimiento de servicio de interrupciones. Para ello tal
vez sea necesario establecer el TLB, la MMU y una tabla de páginas.
3. Establecer una pila para el procedimiento de servicio de interrupciones.
4. Reconocer el controlador de interrupciones. Si no hay un controlador de interrupciones
centralizado, rehabilitar las interrupciones.
5. Copiar los registros desde donde se guardaron (posiblemente en alguna pila) a la tabla de
procesos.
6. Ejecutar el procedimiento de servicio de interrupciones. Éste extraerá información de los
registros del controlador de dispositivos que provocó la interrupción.
7. Elegir cuál proceso ejecutar a continuación. Si la interrupción ha ocasionado que cierto
proceso de alta prioridad que estaba bloqueado cambie al estado listo, puede elegirse para
ejecutarlo en ese momento.
8. Establecer el contexto de la MMU para el proceso que se va a ejecutar a continuación.
También puede ser necesario establecer un TLB.
9. Cargar los registros del nuevo proceso, incluyendo su PSW.
10. Empezar a ejecutar el nuevo proceso.
Como se puede ver, el procesamiento de interrupciones no carece de importancia. También ocupa
un considerable número de instrucciones de la CPU, en especial en máquinas en las que hay memoria
virtual y es necesario establecer tablas de páginas, o se tiene que guardar el estado de la
MMU (por ejemplo, los bits R y M). En algunas máquinas, el TLB y la caché de la CPU tal vez
también tengan que manejarse al cambiar entre los modos de usuario y de kernel, lo cual requiere
ciclos de máquina adicionales.
4.1.7 Vector de interrupciones
El vector de interrupciones es un vector que contiene el valor que apunta a la dirección en memoria del gestor de una interrupción. En muchas arquitecturas de computación típicas, los vectores de interrupción se almacenan en una tabla en una zona de memoria, la llamada tabla de vectores de interrupción, de modo que cuando se atiende una petición de interrupción de número n, el sistema, tras realizar eventualmente algunas tareas previas (tales como salvar el valor de ciertos registros) transfiere el control a la dirección indicada por el elemento n-ésimo de dicha tabla.
Usualmente, en las arquitecturas más típicas, la transferencia de control se efectuará de modo análogo a una llamada a función a nivel de máquina, almacenándose en una pila el estado actual del registro contador de programa, que será recuperado por una instrucción máquina de retorno de interrupción, que restaurará el estado correspondiente a la ejecución normal de programa forzando la ejecución de la siguiente instrucción.
4.2 Canales de E/S
Los dispositivos de E/S son cada vez más sofisticados
• Ej: tarjetas gráficas 3D.
• Evolución:
1. La CPU controla directamente los periféricos.
2. Se agrega un módulo de E/S o controlador.
3. Idem 2 más llamado de interrupción.
4. El módulo de E/S provee el acceso directo a memoria (DMA).
5. El módulo de E/S tiene su propio procesador con su pequeño
conjunto de instrucciones.
6. El módulo además tiene su memoria local o sea se convierte
en una computadora en sí mismo.
4.2.1 Tipos de canales de E/S
Selector
• Controla varios dispositivos de alta velocidad y uno
por vez, por lo tanto el canal se dedica para la
transferencia de datos de ese dispositivo.
• El canal selecciona un dispositivo y efectúa la
transferencia.
• Los dispositivos son manejados por un controlador o
módulo de E/S
• Por lo tanto el canal de E/S ocupa el lugar de la CPU
en el control de esos controladores.
Multiplexor
• Puede manejar E/S con varios dispositivos a la vez.
• Multiplexor de bytes:
• Acepta y transmite caracteres.
• Multiplexor de bloques:
• Intercala bloques de datos desde distintos dispositivos.
4.2.2 Interfaces.
La interfaz externa
• Provista para un periférico desde un módulo de E/S.
• ¿Serial ó paralelo?
• Paralela: tape, disco (dispositivo de alta velocidad).
• Serial: terminales, mouse.
• Existe un módulo que dialoga con el dispositivo. Los
pasos son:
• El módulo envía señal de control pidiendo permiso para enviar
datos al dispositivo.
• Este confirma el pedido.
• El módulo transfiere los datos.
• El periférico confirma la recepción de los mismos.
• Uso de buffers internos en el módulo para compensación
de velocidades.
Tipos de interfaces
• La conexión entre un módulo de E/S y los
dispositivos externos puede ser:
• Punto a punto: línea dedicada.
• Ej: teclado, impresora, modem ...etc.
• Multipunto: idem a un bus externo.
• Ej: dispositivos de almacenamiento en masa externos (discos
SCSI).
4.2.3 Controladores
Por lo general, las unidades de E/S consisten en un componente mecánico y un componente electrónico. A menudo es posible separar las dos porciones para proveer un diseño más modular y general. El componente electrónico se llama controlador de dispositivo o adaptador. En las computadoras personales, comúnmente tiene la forma de un chip en la tarjeta principal o una tarjeta de circuito integrado que se puede insertar en una ranura de expansión (PCI).
El componente mecánico es el dispositivo en sí.
La tarjeta controladora por lo general contiene un conector, en el que se puede conectar un cable que conduce al dispositivo en sí. Muchos controladores pueden manejar dos, cuatro o inclusive ocho dispositivos idénticos. Si la interfaz entre el controlador y el dispositivo es estándar, ya sea un estándar oficial ANSI, IEEE o ISO, o un estándar de facto a interfaz entre el controlador y el dispositivo es a menudo de muy bajo nivel.
Por ejemplo, se podría dar formato a un disco con 10,000 sectores de 512 bytes por pista. Sin embargo, lo que en realidad sale del disco es un flujo serial de bits, empezando con un preámbulo , después los 4096 bits en un sector y por último una suma de comprobación, también conocida como Código de Corrección de Errores (ECC). El preámbulo se escribe cuando se da formato al disco y contiene el cilindro y número de sector, el tamaño del sector y datos similares, así como información de sincronización.
El trabajo del controlador es convertir el flujo de bits serial en un bloque de bytes y realizar cualquier corrección de errores necesaria. Por lo general, primero se ensambla el bloque de bytes, bit por bit, en un búfer dentro del controlador. Después de haber verificado su suma de comprobación y de que el bloque se haya declarado libre de errores, puede copiarse a la memoria principal.
El controlador para un monitor también funciona como un dispositivo de bits en serie a un nivel igual de bajo. Lee los bytes que contienen los caracteres a mostrar de la memoria y genera las señales utilizadas para modular el haz del CRT para hacer que escriba en la pantalla. El controlador también genera las señales para que el haz del CRT realice un retrazado horizontal después de haber terminado una línea de exploración, así como las señales para hacer que realice un retrazado vertical después de haber explorado toda la pantalla. Si no fuera por el controlador del CRT, el programador del sistema operativo tendría que programar de manera explícita la exploración análoga del tubo. Con el controlador, el sistema operativo inicializa el controlador con unos cuantos parámetros, como el número de caracteres o píxeles por línea y el número de líneas por pantalla, y deja que el controlador se encargue de manejar el haz. Las pantallas TFT planas funcionan de manera diferente, pero son igualmente complicadas.
4.3 MEMORIAS TRANSITORIAS (BUFFERS)
Los buffers son áreas de almacenamiento temporal que residen en la memoria principal, en los canales y en las unidades de control. Sirven para almacenar datos leídos de un dispositivo de entrada antes que los necesite el procesador y para almacenar datos que se escribirán en un dispositivo de salida.
4.3.1 TIPOS DE MEMORIAS TRANSITORIAS
Buffers de una única fila
Un buffer de una única fila no es en realidad un cursor, aunque aquí se apliquen las mismas reglas de pertenencia que se aplican a un cursor de conjunto de claves de sólo avance. Con un buffer de una única fila sólo es posible examinar los datos de la fila del conjunto de resultados. Las filas anteriores no están disponibles y la fila actual no estará accesible después de pasar a la siguiente fila del conjunto de resultados.
Buffers de n filas
Un buffer de n filas amplía el ámbito y la capacidad de desplazamiento del buffer de una única fila. En este caso, a la estación de trabajo se le expone un número determinado de filas del conjunto de resultados y a la aplicación se le permite que se desplace libremente por esas filas.
4.3.2 MANEJO DE MEMORIAS TRANSITORIAS
El uso de búferes también es un problema, tanto para los dispositivos de caracteres como para los de bloques. Para entender mejor el problema, consideremos un proceso que quiere leer datos de un módem, una posible estrategia para manejar los caracteres que llegan es hacer que el proceso de usuario emita una llamada al sistema read y se bloquee en espera de un carácter. La llegada de cada carácter causa una interrupción, el procedimiento de servicio de interrupciones entrega el carácter al proceso de usuario y lo desbloquea; después de colocar el carácter en algún lado, el proceso lee otro carácter y vuelve a bloquearse. Esta posible solución no es recomendable debido a que un proceso se ejecutara muchas veces durante lapsos de tiempo muy cortos.
Los búferes son muy importantes en las operaciones de salida. Por ejemplo, considere la forma en que se envían salidas al módem siguiendo el modelo descrito anteriormente, el proceso de usuario ejecuta una llamada write al sistema para enviar a la salida n caracteres.
4.3.3 IMPLEMENTACION
La implementación mas adecuada para el uso de memorias transitorias es que el kernel copie los datos en un búfer kernel y desbloqueando de inmediato el invocador. Ahora no importa cuando termine la E/S real; el usuario podrá volver a utilizar el búfer en el instante en que se le desbloquee.
El uso de búferes es una técnica ampliamente utilizada, pero tiene sus desventajas, si los datos se colocan en demasiados búferes sucesivos, hay una merma en el desempeño.
4.3.4 TERMINALES DE RED
Se denominan dispositivos de comunicación y son aquellos que permiten conectar a la computadora con otras a través de una red, los dos tipos de dispositivos mas importantes son: Tarjeta red y el módem.
El administrador de red proporciona una forma conveniente para los usuarios de compartir recursos y al mismo tiempo controlar sus acceso a los mismos, mediante la implementación de protocolos y comunicaciones de red; estos recursos incluyen hardware como la CPU, áreas de memoria, impresoras, unidades de almacenamiento secundario, módem; y recursos de software como compiladores, programas de aplicación y archivos de datos.
4.3.5 INTERFACES GRAFICAS DE USUARIO
Una interfaz gráfica de usuario, definida por sus siglas en inglés GUI, es la interfaz de usuario que le permite activar los comandos de sistema operativo con un clic sobre un icono de escritorio mediante un dispositivo apuntador como un ratón o una pantalla táctil. El GUI evolucionó a partir de las interfaces de usuario impulsadas por comandos.
Muchas interfaces gráficas de usuario comparten muchas similitudes, tanto en apariencia como en operación. Ejemplo de ello, se puede mencionar a sistemas operativos populares como Windows (todas sus versiones hasta las actuales), UNIX, Macintosh (diferentes versiones) y Linux.
4.4 SERVICIOS DE E/S: GENERICOS PARA POSIX Y WIN32
Debido al tratamiento diferenciado que se da el reloj, se presentan separadamente los servicios relacionados con el mismo de los correspondientes a los dispositivos de entrada/salida convencionales.
En cuanto a los servicios del reloj, se van a especificar de acuerdo a las tres categorías: fecha y hora, temporizaciones y contabilidad.
SERVICIO DE FECHA Y HORA: El servicio para obtener fecha y hora es time, y su prototipo es:
time_t time(time_t *t);
time_t time(time_t *t);
SERVICIO DE TEMPORIZACION: El servicio esta definido por alarm, y su prototipo es:
unsigned int alarm (unsigned int segundos);
SERVICIO DE CONTABILIDAD: Existen diversas funciones que se pueden englobar en esta categoria, por ejemplo la mas usada times, que devuelve información sobre el tiempo de ejecución de un proceso y sus hijos.
clock_t times (struct tms *info);
No hay comentarios.:
Publicar un comentario