Software">
Libro de Sistemas Operativos
Libro de Sistemas Operativos
Libro de Sistemas Operativos
Cada vez más, muchos usuarios interactúan con dispositivos móviles como los teléfonos inteligentes
y tabletas: dispositivos que están reemplazando los sistemas de computadoras de escritorio y portátiles
para algunos usuarios. Estos dispositivos suelen estar conectados a redes a través de
celulares u otras tecnologías inalámbricas. La interfaz de usuario para computadoras móviles
generalmente cuenta con una pantalla táctil, donde el usuario interactúa con el sistema
presionar y deslizar los dedos por la pantalla en lugar de usar un dispositivo físico
teclado y ratón. Muchos dispositivos móviles también permiten a los usuarios interactuar a través de
una interfaz de reconocimiento de voz, como Siri de Apple.
Algunas computadoras tienen poca o ninguna vista de usuario. Por ejemplo, las computadoras integradas en
dispositivos domésticos y automóviles pueden tener teclados numéricos y pueden
encender o apagar las luces indicadoras para mostrar el estado, pero ellos y sus sistemas operativos y
aplicaciones están diseñados principalmente para ejecutarse sin la intervención del usuario.
1.1.2 Vista del sistema
Desde el punto de vista de la computadora, el sistema operativo es el programa más
íntimamente involucrado con el hardware. En este contexto, podemos ver un sistema operativo como un
asignador de recursos. Un sistema informático tiene muchos recursos.
que pueden ser necesarios para resolver un problema: tiempo de CPU, espacio de memoria, almacenamiento
espacio, dispositivos de E/S, etc. El sistema operativo actúa como administrador de estos
recursos. Frente a numerosas y posiblemente contradictorias solicitudes de recursos, la
sistema operativo debe decidir cómo asignarlos a programas específicos y
usuarios para que pueda operar el sistema informático de manera eficiente y justa.
Una visión ligeramente diferente de un sistema operativo enfatiza la necesidad de
controlar los diversos dispositivos de E/S y programas de usuario. Un sistema operativo es un
programa de control Un programa de control gestiona la ejecución de los programas de usuario.
para prevenir errores y uso indebido de la computadora. Se preocupa especialmente
con la operación y control de dispositivos de E/S.
1.1.3 Definición de sistemas operativos
A estas alturas, probablemente pueda ver que el término sistema operativo cubre muchos
roles y funciones. Ese es el caso, al menos en parte, debido a la miríada
diseños y usos de las computadoras. Las computadoras están presentes en tostadoras, automóviles,
barcos, naves espaciales, hogares y negocios. Son la base de las máquinas de juego,
sintonizadores de televisión por cable y sistemas de control industrial.
Para explicar esta diversidad, podemos recurrir a la historia de las computadoras. A pesar de que
Las computadoras tienen una historia relativamente corta, han evolucionado rápidamente. La computación
comenzó como un experimento para determinar qué se podía hacer y rápidamente
movido a sistemas de propósito fijo para usos militares, como descifrar códigos y
trazado de trayectorias y usos gubernamentales, como cálculo de censos. Aquellos
Las primeras computadoras evolucionaron hasta convertirse en mainframes multifuncionales de propósito
general, y
ahí es cuando nacieron los sistemas operativos. En la década de 1960, la Ley de Moore predijo
que el número de transistores en un circuito integrado se duplicaría cada 18
meses, y esa predicción se ha cumplido. Los ordenadores ganaron en funcionalidad
y se encogió de tamaño, dando lugar a un gran número de usos y un gran número y
variedad de sistemas operativos. (Consulte el Apéndice A para obtener más detalles sobre la historia
de sistemas operativos.)
¿Cómo, entonces, podemos definir qué es un sistema operativo? En general, tenemos
no hay una definición completamente adecuada de un sistema operativo. Sistemas operativos
6 Capítulo 1 Introducción
existen porque ofrecen una forma razonable de resolver el problema de crear
un sistema informático utilizable. El objetivo fundamental de los sistemas informáticos es
para ejecutar programas y facilitar la resolución de problemas de los usuarios. Computadora
el hardware se construye hacia este objetivo. Dado que el hardware básico por sí solo no es
particularmente fáciles de usar, se desarrollan programas de aplicación. estos programas
requieren ciertas operaciones comunes, como las que controlan los dispositivos de E/S.
Las funciones comunes de control y asignación de recursos son luego llevadas
juntos en una sola pieza de software: el sistema operativo.
un kernel central junto con middleware que admite bases de datos, multimedia y
gráficos (por nombrar sólo algunos).
En resumen, para nuestros propósitos, el sistema operativo incluye el núcleo siempre en ejecución, marcos de
trabajo de middleware que facilitan el desarrollo de aplicaciones.
y proporcionar funciones y programas del sistema que ayuden a administrar el sistema
mientras se está ejecutando. La mayor parte de este texto se ocupa del núcleo de los sistemas operativos de
propósito general, pero se analizan otros componentes según sea necesario para
explicar completamente el diseño y la operación del sistema operativo.
1.2 Organización del sistema informático
Un sistema informático moderno de propósito general consta de una o más CPU y
una serie de controladores de dispositivos conectados a través de un bus común que proporciona
acceso entre componentes y memoria compartida (Figura 1.2). cada dispositivo
controlador está a cargo de un tipo específico de dispositivo (por ejemplo, una unidad de disco,
dispositivo de audio o pantalla gráfica). Dependiendo del controlador, más de uno
el dispositivo puede estar conectado. Por ejemplo, un puerto USB del sistema puede conectarse a un
Concentrador USB, al que se pueden conectar varios dispositivos. Un controlador de dispositivo mantiene
algo de almacenamiento de búfer local y un conjunto de registros de propósito especial. El dispositivo
controlador es responsable de mover los datos entre los dispositivos periféricos
que controla y su almacenamiento de búfer local.
Normalmente, los sistemas operativos tienen un controlador de dispositivo para cada controlador de dispositivo.
Este controlador de dispositivo comprende el controlador de dispositivo y proporciona la
resto del sistema operativo con una interfaz uniforme para el dispositivo. la cpu y
los controladores de dispositivos pueden ejecutarse en paralelo, compitiendo por los ciclos de memoria. A
garantizar el acceso ordenado a la memoria compartida, un controlador de memoria sincroniza
acceso a la memoria.
En las siguientes subsecciones, describimos algunos conceptos básicos de cómo un sistema de este tipo
opera, centrándose en tres aspectos clave del sistema. Empezamos con interrupciones,
que alertan a la CPU sobre eventos que requieren atención. Luego hablamos de almacenamiento
estructura y estructura de E/S.
1.2.1 Interrupciones
Considere una operación de computadora típica: un programa que realiza E/S. para empezar un
Operación de E/S, el controlador del dispositivo carga los registros apropiados en el dispositivo
controlador. El controlador del dispositivo, a su vez, examina el contenido de estos registros para determinar
qué acción tomar (como "leer un carácter del
teclado"). El controlador inicia la transferencia de datos desde el dispositivo a su local
buffer. Una vez que se completa la transferencia de datos, el controlador del dispositivo informa al
controlador de dispositivo que ha terminado su funcionamiento. El controlador del dispositivo luego da
control a otras partes del sistema operativo, posiblemente devolviendo los datos o un
puntero a los datos si la operación fue una lectura. Para otras operaciones, el dispositivo
el controlador devuelve información de estado como "escritura completada con éxito" o
“dispositivo ocupado”. Pero, ¿cómo informa el controlador al controlador del dispositivo que tiene
terminado su funcionamiento? Esto se logra a través de una interrupción.
1.2.1.1 Resumen
El hardware puede activar una interrupción en cualquier momento enviando una señal al
CPU, generalmente a través del bus del sistema. (Puede haber muchos autobuses dentro
un sistema informático, pero el bus del sistema es la vía de comunicación principal
entre los componentes principales.) Las interrupciones se utilizan para muchos otros fines
también y son una parte clave de cómo interactúan los sistemas operativos y el hardware.
Cuando la CPU se interrumpe, detiene lo que está haciendo e inmediatamente
transfiere la ejecución a una ubicación fija. La ubicación fija normalmente contiene
la dirección inicial donde se encuentra la rutina de servicio para la interrupción.
Se ejecuta la rutina de servicio de interrupción; al finalizar, la CPU reanuda el
cómputo interrumpido. Una línea de tiempo de esta operación se muestra en la Figura 1.3.
Para ejecutar la animación asociada con esta figura, haga clic aquí.
Las interrupciones son una parte importante de la arquitectura de una computadora. Cada computadora
El diseño tiene su propio mecanismo de interrupción, pero varias funciones son comunes.
La interrupción debe transferir el control a la rutina de servicio de interrupción adecuada.
El método sencillo para administrar esta transferencia sería invocar
una rutina genérica para examinar la información de interrupción. La rutina, a su vez
llamaría al controlador específico de interrupción. Sin embargo, las interrupciones deben ser manejadas
rápidamente, ya que ocurren con mucha frecuencia. Una tabla de punteros para interrumpir rutinas.
se puede utilizar en su lugar para proporcionar la velocidad necesaria. La rutina de interrupción
se llama indirectamente a través de la tabla, sin necesidad de una rutina intermedia.
Generalmente, la tabla de punteros se almacena en poca memoria (los primeros cien o más
ubicaciones). Estas ubicaciones contienen las direcciones de las rutinas de servicio de interrupción.
para los diversos dispositivos. Esta matriz, o vector de interrupción, de direcciones es entonces
indexado por un número único, dado con la solicitud de interrupción, para proporcionar la
dirección de la rutina de servicio de interrupción para el dispositivo de interrupción. Operando
sistemas tan diferentes como Windows y UNIX envían interrupciones de esta manera.
La arquitectura de interrupción también debe guardar la información de estado de cualquier
fue interrumpido, para que pueda restaurar esta información después de dar servicio al
interrumpir. Si la rutina de interrupción necesita modificar el estado del procesador, por
ejemplo, modificando los valores de registro; debe guardar explícitamente el estado actual
y luego restaurar ese estado antes de regresar. Después de atender la interrupción, el
dirección de retorno guardada se carga en el contador del programa, y la interrumpida
el cálculo se reanuda como si no se hubiera producido la interrupción.
1.2.1.2 Implementación
El mecanismo de interrupción básico funciona de la siguiente manera. El hardware de la CPU tiene un
cable llamado línea de solicitud de interrupción que la CPU detecta después de ejecutar cada
instrucción. Cuando la CPU detecta que un controlador ha afirmado una señal en
la línea de solicitud de interrupción, lee el número de interrupción y salta a la
rutina de manejo de interrupciones utilizando ese número de interrupción como un índice en
el vector de interrupción. Luego comienza la ejecución en la dirección asociada con
ese índice. El manejador de interrupciones guarda cualquier estado que cambiará durante
su operación, determina la causa de la interrupción, realiza las acciones necesarias
procesamiento, realiza una restauración de estado y ejecuta un retorno de interrupción
Instrucción para devolver la CPU al estado de ejecución anterior a la interrupción. Nosotros
digamos que el controlador del dispositivo genera una interrupción afirmando una señal en el
línea de solicitud de interrupción, la CPU detecta la interrupción y la envía al
manejador de interrupciones, y el manejador borra la interrupción dando servicio al dispositivo.
La figura 1.4 resume el ciclo de E/S impulsado por interrupciones.
El mecanismo básico de interrupción que acabamos de describir permite que la CPU responda a
un evento asíncrono, como cuando un controlador de dispositivo está listo para el servicio.
En un sistema operativo moderno, sin embargo, necesitamos funciones de manejo de interrupciones más
sofisticadas.
1. Necesitamos la capacidad de diferir el manejo de interrupciones durante el procesamiento crítico.
2. Necesitamos una forma eficiente de enviar al controlador de interrupciones adecuado para
un dispositivo.
3. Necesitamos interrupciones multinivel, para que el sistema operativo pueda distinguir entre interrupciones de
alta y baja prioridad y pueda responder con
el grado de urgencia adecuado.
En el hardware de las computadoras modernas, la CPU proporciona estas tres funciones.
y el hardware del controlador de interrupciones.
La mayoría de las CPU tienen dos líneas de solicitud de interrupción. Uno es el no enmascarable
interrupción, que está reservada para eventos como errores de memoria irrecuperables.
La segunda línea de interrupción es enmascarable: la CPU puede apagarla antes
la ejecución de secuencias de instrucciones críticas que no deben ser interrumpidas. El
La interrupción enmascarable es utilizada por los controladores de dispositivos para solicitar servicio.
Recuerde que el propósito de un mecanismo de interrupción vectorial es reducir el
necesidad de un solo controlador de interrupciones para buscar todas las posibles fuentes de interrupciones
para determinar cuál necesita el servicio. En la práctica, sin embargo, las computadoras tienen
más dispositivos (y, por lo tanto, controladores de interrupciones) que elementos de dirección tienen
en el vector de interrupción. Una forma común de resolver este problema es usar la interrupción
encadenamiento, en el que cada elemento en el vector de interrupción apunta a la cabeza de
una lista de controladores de interrupción. Cuando se lanza una interrupción, los manejadores en el
lista correspondiente son llamados uno por uno, hasta que se encuentra uno que puede dar servicio
la solicitud. Esta estructura es un compromiso entre la sobrecarga de un enorme
tabla de interrupciones y la ineficiencia de enviar a un solo controlador de interrupciones.
La Figura 1.5 ilustra el diseño del vector de interrupción para los procesadores Intel.
Los eventos del 0 al 31, que no son enmascarables, se utilizan para señalar varios
condiciones de error Los eventos del 32 al 255, que son enmascarables, se utilizan para
propósitos tales como interrupciones generadas por dispositivos.
El mecanismo de interrupción también implementa un sistema de prioridad de interrupción
niveles Estos niveles permiten a la CPU diferir el manejo de interconexiones de baja prioridad.
interrumpe sin enmascarar todas las interrupciones y hace posible una prioridad alta
interrupción para prevenir la ejecución de una interrupción de baja prioridad.
En resumen, las interrupciones se utilizan en todos los sistemas operativos modernos para
manejar eventos asincrónicos (y para otros propósitos que discutiremos a lo largo del texto). Los controladores
de dispositivos y las fallas de hardware provocan interrupciones. Para permitir
el trabajo más urgente que se debe hacer primero, las computadoras modernas usan un sistema de
interrumpir las prioridades. Debido a que las interrupciones se usan con tanta frecuencia para situaciones
sensibles al tiempo
procesamiento, se requiere un manejo eficiente de interrupciones para un buen rendimiento del sistema.
1.2.2 Estructura de almacenamiento
La CPU puede cargar instrucciones solo desde la memoria, por lo que cualquier programa debe
primero se cargará en la memoria para ejecutarse. Las computadoras de propósito general ejecutan la mayoría
de sus programas desde una memoria reescribible, llamada memoria principal (también llamada
memoria de acceso aleatorio o RAM). La memoria principal comúnmente se implementa en
una tecnología de semiconductores llamada memoria dinámica de acceso aleatorio (DRAM).
Las computadoras también usan otras formas de memoria. Por ejemplo, el primer programa que se ejecuta al
encender la computadora es un programa de arranque, que luego carga
El sistema operativo. Dado que la RAM es volátil, pierde su contenido cuando se enciende.
está apagado o perdido, no podemos confiar en él para mantener el programa de arranque. En su lugar, para este
y algunos otros propósitos, la computadora usa una memoria de solo lectura programable borrable
eléctricamente (EEPROM) y otras formas de
firmwar: almacenamiento en el que se escribe con poca frecuencia y que no es volátil. EEPROM
12 Capítulo 1 Introducción
DEFINICIONES Y NOTACIÓN DE ALMACENAMIENTO
La unidad básica de almacenamiento informático es el bit. Un bit puede contener uno de dos
valores, 0 y 1. Todo el resto del almacenamiento en una computadora se basa en colecciones de bits.
Dados suficientes bits, es asombroso cuántas cosas puede representar una computadora:
números, letras, imágenes, películas, sonidos, documentos y programas, por nombrar
unos pocos. Un byte son 8 bits, y en la mayoría de las computadoras es el más pequeño conveniente
trozo de almacenamiento. Por ejemplo, la mayoría de las computadoras no tienen una instrucción para
muévase un poco pero tenga uno para mover un byte. Un término menos común es palabra,
que es la unidad de datos nativa de una determinada arquitectura informática. se hace una palabra
de uno o más bytes. Por ejemplo, una computadora que tiene registros de 64 bits y
El direccionamiento de memoria de 64 bits normalmente tiene palabras de 64 bits (8 bytes). Un ordenador
ejecuta muchas operaciones en su tamaño de palabra nativo en lugar de un byte a la vez.
El almacenamiento informático, junto con la mayor parte del rendimiento informático, suele ser
medido y manipulado en bytes y colecciones de bytes. Un kilobyte, o
KB, es de 1.024 bytes; un megabyte, o MB, son 10242 bytes; un gigabyte, o GB, es
1,0243 octetos; un terabyte, o TB, son 10244 bytes; y un petabyte, o PB, es 1,0245
bytes Los fabricantes de computadoras a menudo redondean estos números y dicen que
un megabyte es 1 millón de bytes y un gigabyte es 1 billón de bytes. Redes
las medidas son una excepción a esta regla general; se dan en bits
(porque las redes mueven datos poco a poco).
se puede cambiar, pero no se puede cambiar con frecuencia. Además, es de baja velocidad,
por lo que contiene principalmente programas y datos estáticos que no se usan con frecuencia.
Por ejemplo, el iPhone usa EEPROM para almacenar números de serie y hardware.
información sobre el dispositivo.
Todas las formas de memoria proporcionan una matriz de bytes. Cada byte tiene su propio
habla a. La interacción se logra mediante una secuencia de instrucciones de carga o almacenamiento en
direcciones de memoria específicas. La instrucción de carga mueve un byte o palabra
desde la memoria principal a un registro interno dentro de la CPU, mientras que la tienda
La instrucción mueve el contenido de un registro a la memoria principal. Aparte de lo explícito
carga y almacena, la CPU carga automáticamente las instrucciones de la memoria principal
para la ejecución desde la ubicación almacenada en el contador del programa.
Un ciclo típico de instrucción-ejecución, tal como se ejecuta en un sistema con un von
arquitectura de Neumann, primero obtiene una instrucción de la memoria y la almacena
esa instrucción en el registro de instrucciones. Luego se decodifica la instrucción.
y puede hacer que los operandos se obtengan de la memoria y se almacenen en algún
registro interno. Una vez ejecutada la instrucción sobre los operandos, el
El resultado puede volver a almacenarse en la memoria. Observe que la unidad de memoria solo ve
un flujo de direcciones de memoria. No sabe cómo se generan (por
el contador de instrucciones, la indexación, el direccionamiento indirecto, las direcciones literales o algún otro
medios) o para qué sirven (instrucciones o datos). En consecuencia, podemos ignorar
cómo una dirección de memoria es generada por un programa. solo nos interesa
la secuencia de direcciones de memoria generada por el programa en ejecución.
Idealmente, queremos que los programas y los datos residan en la memoria principal de forma permanente. Este
arreglo generalmente no es posible en la mayoría de los sistemas para dos
razones:
1. La memoria principal suele ser demasiado pequeña para almacenar todos los programas y datos necesarios
permanentemente.
2. La memoria principal, como se mencionó, es volátil: pierde su contenido cuando se enciende.
se apaga o se pierde.
Por lo tanto, la mayoría de los sistemas informáticos proporcionan almacenamiento secundario como una
extensión de
memoria principal. El requisito principal para el almacenamiento secundario es que sea capaz de
mantener grandes cantidades de datos de forma permanente.
Los dispositivos de almacenamiento secundario más comunes son las unidades de disco duro (HDD)
y dispositivos de memoria no volátil (NVM), que proporcionan almacenamiento tanto para
programas y datos. La mayoría de los programas (sistema y aplicación) se almacenan en
almacenamiento secundario hasta que se carguen en la memoria. Muchos programas luego usan
almacenamiento secundario como origen y destino de su procesamiento.
El almacenamiento secundario también es mucho más lento que la memoria principal. Por lo tanto, la adecuada
la administración del almacenamiento secundario es de importancia central para un sistema de cómputo, como
se analiza en el capítulo 11.
Sin embargo, en un sentido más amplio, la estructura de almacenamiento que hemos descrito
—que consta de registros, memoria principal y almacenamiento secundario— es solo uno
de muchos posibles diseños de sistemas de almacenamiento. Otros componentes posibles incluyen
memoria caché, CD-ROM o blu-ray, cintas magnéticas, etc. los que son
lo suficientemente lento y lo suficientemente grande como para que se usen solo para fines especiales
— para almacenar copias de seguridad de material almacenado en otros dispositivos, por ejemplo—
se denominan almacenamiento terciario. Cada sistema de almacenamiento proporciona las funciones básicas
de almacenar un dato y mantener ese dato hasta que se recupere en un momento posterior.
Las principales diferencias entre los distintos sistemas de almacenamiento radican en la velocidad, el tamaño y
la
volatilidad.
La amplia variedad de sistemas de almacenamiento se puede organizar en una jerarquía (Figura
1.6) según capacidad de almacenamiento y tiempo de acceso. Como regla general, hay una
compensación entre tamaño y velocidad, con una memoria más pequeña y más rápida más cerca de la
UPC. Como se muestra en la figura, además de diferir en velocidad y capacidad, el
varios sistemas de almacenamiento son volátiles o no volátiles. Almacenamiento volátil, como
mencionado anteriormente, pierde su contenido cuando se desconecta la alimentación del dispositivo,
por lo tanto, los datos deben escribirse en un almacenamiento no volátil para su custodia.
Los cuatro niveles superiores de memoria de la figura se construyen con memoria de semiconductores, que
consta de circuitos electrónicos basados en semiconductores.
Los dispositivos NVM, en el cuarto nivel, tienen varias variantes pero en general son más rápidos
que los discos duros. La forma más común de dispositivo NVM es la memoria flash, que
es popular en dispositivos móviles como teléfonos inteligentes y tabletas. Cada vez más,
La memoria flash se utiliza para el almacenamiento a largo plazo en equipos portátiles, de escritorio y
servidores también.
Dado que el almacenamiento juega un papel importante en la estructura del sistema operativo,
se referirá a él con frecuencia en el texto. En general, utilizaremos los siguientes
terminología:
• El almacenamiento volátil se denominará simplemente memoria. Si necesitamos enfatizar un tipo particular de
dispositivo de almacenamiento (por ejemplo, un registro), lo haremos
tan explícitamente.
• El almacenamiento no volátil retiene su contenido cuando se pierde la energía. Será
denominado NVS. La gran mayoría del tiempo que dedicamos a NVS será
estar en almacenamiento secundario. Este tipo de almacenamiento se puede clasificar en dos
tipos distintos:
◦ Mecánica. Algunos ejemplos de este tipo de sistemas de almacenamiento son HDD, dispositivos ópticos
discos, almacenamiento holográfico y cinta magnética. Si tenemos que enfatizar
un tipo particular de dispositivo de almacenamiento mecánico (por ejemplo, magnético
tape), lo haremos de forma explícita.
◦ Eléctrico. Algunos ejemplos de estos sistemas de almacenamiento son la memoria flash,
FRAM, NRAM y SSD. El almacenamiento eléctrico se denominará NVM. Si
necesitamos enfatizar un tipo particular de dispositivo de almacenamiento eléctrico (por
ejemplo, SSD), lo haremos de forma explícita.
El almacenamiento mecánico es generalmente más grande y menos costoso por byte que
almacenamiento eléctrico. Por el contrario, el almacenamiento eléctrico suele ser costoso, más pequeño,
y más rápido que el almacenamiento mecánico.
El diseño de un sistema de almacenamiento completo debe equilibrar todos los factores
discutido: debe usar solo tanta memoria costosa como sea necesario mientras
proporcionando tanto almacenamiento económico y no volátil como sea posible. Los cachés pueden
ser instalado para mejorar el rendimiento donde una gran disparidad en el tiempo de acceso o
tasa de transferencia existe entre dos componentes.
1.2.3 Estructura de E/S
Una gran parte del código del sistema operativo está dedicada a la gestión de E/S, tanto
debido a su importancia para la confiabilidad y el rendimiento de un sistema y
debido a la naturaleza variable de los dispositivos.
Recuerde desde el comienzo de esta sección que una computadora de propósito general
El sistema consta de múltiples dispositivos, todos los cuales intercambian datos a través de un común
autobús. La forma de E/S impulsada por interrupciones descrita en la Sección 1.2.1 está bien para
mover pequeñas cantidades de datos, pero puede producir una gran sobrecarga cuando se utiliza para
movimiento masivo de datos como NVS I/O. Para resolver este problema, la memoria directa
se utiliza el acceso (DMA). Después de configurar búferes, punteros y contadores para el
dispositivo de E/S, el controlador de dispositivo transfiere un bloque completo de datos directamente a
o desde el dispositivo y la memoria principal, sin intervención de la CPU. Solo
se genera una interrupción por bloque, para decirle al controlador del dispositivo que la operación
se ha completado, en lugar de la única interrupción por byte generada para baja velocidad
dispositivos. Mientras el controlador de dispositivo está realizando estas operaciones, la CPU está
disponible para realizar otros trabajos.
Algunos sistemas de gama alta utilizan una arquitectura de conmutador en lugar de bus. En estos
sistemas, varios componentes pueden hablar con otros componentes al mismo tiempo,
en lugar de competir por bicicletas en un autobús compartido. En este caso, DMA es incluso
más efectivo. La Figura 1.7 muestra la interacción de todos los componentes de una computadora
sistema.
1.3 Arquitectura del sistema informático
En la Sección 1.2, presentamos la estructura general de un sistema informático típico. Un sistema informático se
puede organizar de diferentes maneras,
que podemos categorizar aproximadamente de acuerdo con el número de propósitos generales
procesadores utilizados.
1.3.1 Sistemas de un solo procesador
Hace muchos años, la mayoría de los sistemas informáticos utilizaban un solo procesador que contenía
una CPU con un solo núcleo de procesamiento. El núcleo es el componente que ejecuta instrucciones y registros
para almacenar datos localmente. La única CPU principal con
su núcleo es capaz de ejecutar un conjunto de instrucciones de propósito general, incluyendo
instrucciones de los procesos. Estos sistemas tienen otros procesos de propósito especial.
16 Capítulo 1 Introducción
también. Pueden venir en forma de procesadores específicos del dispositivo, como
controladores de disco, teclado y gráficos.
Todos estos procesadores de propósito especial ejecutan un conjunto de instrucciones limitado y
no ejecutar procesos. A veces, son administrados por el sistema operativo,
en que el sistema operativo les envía información sobre su próxima tarea y
supervisa su estado. Por ejemplo, un microprocesador controlador de disco recibe
una secuencia de solicitudes del núcleo principal de la CPU e implementa su propio disco
cola y algoritmo de programación. Este arreglo libera a la CPU principal de
la sobrecarga de la programación del disco. Las PC contienen un microprocesador en el teclado
para convertir las pulsaciones de teclas en códigos que se enviarán a la CPU. En otros sistemas o
circunstancias, los procesadores de propósito especial son componentes de bajo nivel integrados en
el hardware El sistema operativo no puede comunicarse con estos procesadores; hacen su trabajo de forma
autónoma. El uso de microprocesadores de propósito especial es común y no convierte un sistema de un solo
procesador en un multiprocesador. Si solo hay una CPU de propósito general con un solo núcleo de
procesamiento, entonces
el sistema es un sistema de un solo procesador. De acuerdo con esta definición, sin embargo,
muy pocos sistemas informáticos contemporáneos son sistemas de un solo procesador.
Además, no tenemos una definición universalmente aceptada de lo que es parte de
El sistema operativo. Un punto de vista simple es que incluye todo lo que envía un proveedor cuando solicita
"el sistema operativo". Sin embargo, las características incluidas varían mucho entre los sistemas. Algunos
sistemas ocupan menos de un megabyte
de espacio y carecen incluso de un editor de pantalla completa, mientras que otros requieren gigabytes
de espacio y se basan enteramente en sistemas de ventanas gráficas. Una definición más común, y la que
solemos seguir, es que el sistema operativo
es el único programa que se ejecuta en todo momento en la computadora, generalmente llamado el
núcleo. Junto con el kernel, existen otros dos tipos de programas: system
programas, que están asociados con el sistema operativo pero no son necesariamente parte del kernel, y
programas de aplicación, que incluyen todos los programas
no asociado con el funcionamiento del sistema.
La cuestión de qué constituye un sistema operativo se volvió cada vez más
importante a medida que las computadoras personales se generalizaban y los sistemas operativos se volvían
cada vez más sofisticados. En 1998, el Departamento de Estado de los Estados Unidos
Justice presentó una demanda contra Microsoft, en esencia alegando que Microsoft incluyó
demasiada funcionalidad en sus sistemas operativos y, por lo tanto, impidió la aplicación
proveedores de la competencia. (Por ejemplo, un navegador web era una parte integral de
sistemas operativos de Microsoft). Como resultado, Microsoft fue declarado culpable de usar
su monopolio del sistema operativo para limitar la competencia.
Hoy, sin embargo, si nos fijamos en los sistemas operativos para dispositivos móviles,
ver que una vez más el número de características que constituyen el sistema operativo
esta incrementando. Los sistemas operativos móviles a menudo incluyen no solo un núcleo central
sino también middleware, un conjunto de marcos de software que proporcionan
servicios a los desarrolladores de aplicaciones. Por ejemplo, cada uno de los dos sistemas operativos móviles
más destacados, iOS de Apple y Android de Google, presenta
¿POR QUÉ ESTUDIAR SISTEMAS OPERATIVOS?
Aunque hay muchos practicantes de la informática, solo un pequeño porcentaje de ellos estará involucrado en la
creación o modificación de un sistema operativo. ¿Por qué, entonces, estudiar los sistemas operativos y cómo
funcionan? Simplemente
porque, como casi todo el código se ejecuta sobre un sistema operativo, el conocimiento
de cómo funcionan los sistemas operativos es crucial para una adecuada, eficiente, eficaz y
programación segura. Entender los fundamentos de los sistemas operativos,
cómo manejan el hardware de la computadora y qué proporcionan a las aplicaciones es
no sólo esenciales para quienes los programan, sino también muy útiles para quienes
que escriben programas en ellos y los usan.
1.2 Organización del sistema informático 7
un kernel central junto con middleware que admite bases de datos, multimedia y
gráficos (por nombrar sólo algunos).
En resumen, para nuestros propósitos, el sistema operativo incluye el núcleo siempre en ejecución, marcos de
trabajo de middleware que facilitan el desarrollo de aplicaciones.
y proporcionar funciones y programas del sistema que ayuden a administrar el sistema
mientras se está ejecutando. La mayor parte de este texto se ocupa del núcleo de los sistemas operativos de
propósito general, pero se analizan otros componentes según sea necesario para
explicar completamente el diseño y la operación del sistema operativo
1.3.2 Sistemas multiprocesador
En las computadoras modernas, desde dispositivos móviles hasta servidores, los sistemas multiprocesador ahora
dominan el panorama de la informática. Tradicionalmente, estos sistemas
tienen dos (o más) procesadores, cada uno con una CPU de un solo núcleo. Los procesadores comparten el bus
de la computadora y, a veces, el reloj, la memoria y los dispositivos periféricos. La principal ventaja de los
sistemas multiprocesador se incrementa
rendimiento Es decir, al aumentar el número de procesadores, esperamos obtener
más trabajo hecho en menos tiempo. La relación de aceleración con N procesadores no es N,
sin embargo; es menor que N. Cuando múltiples procesadores cooperan en una tarea, se incurre en una cierta
cantidad de gastos generales para mantener todas las partes funcionando correctamente.
Esta sobrecarga, más la competencia por los recursos compartidos, reduce la ganancia esperada
de procesadores adicionales.
Los sistemas de multiprocesador más comunes utilizan el multiprocesamiento simétrico (SMP), en el que cada
procesador de CPU del mismo nivel realiza todas las tareas, incluidas
funciones del sistema operativo y procesos de usuario. La Figura 1.8 ilustra un típico
Arquitectura SMP con dos procesadores, cada uno con su propia CPU. Note que cada
El procesador de la CPU tiene su propio conjunto de registros, así como un registro privado o local.
cache. Sin embargo, todos los procesadores comparten memoria física a través del bus del sistema.
El beneficio de este modelo es que muchos procesos pueden ejecutarse simultáneamente
—Pueden ejecutarse N procesos si hay N CPU—sin afectar el rendimiento
a deteriorarse significativamente. Sin embargo, dado que las CPU están separadas, uno puede
estar inactivo mientras otro está sobrecargado, lo que resulta en ineficiencias. Estos
las ineficiencias se pueden evitar si los procesadores comparten ciertas estructuras de datos. A
El sistema multiprocesador de esta forma permitirá procesos y recursos, tales
como memoria, para ser compartida dinámicamente entre los diversos procesadores y puede
reducir la variación de la carga de trabajo entre los procesadores. Tal sistema debe ser
cuidadosamente, como veremos en el Capítulo 5 y el Capítulo 6.
La definición de multiprocesador ha evolucionado con el tiempo y ahora incluye
sistemas multinúcleo, en los que múltiples núcleos informáticos residen en un solo chip.
Los sistemas multinúcleo pueden ser más eficientes que múltiples chips con un solo núcleo
porque la comunicación en el chip es más rápida que la comunicación entre chips.
1.3 Arquitecto de sistemas informáticos
Organización del sistema informático
Un sistema informático moderno de propósito general consta de una o más CPU y
una serie de controladores de dispositivos conectados a través de un bus común que proporciona
acceso entre componentes y memoria compartida (Figura 1.2). cada dispositivo
controlador está a cargo de un tipo específico de dispositivo (por ejemplo, una unidad de disco,
dispositivo de audio o pantalla gráfica). Dependiendo del controlador, más de uno
el dispositivo puede estar conectado. Por ejemplo, un puerto USB del sistema puede conectarse a un
Concentrador USB, al que se pueden conectar varios dispositivos. Un controlador de dispositivo mantiene
algo de almacenamiento de búfer local y un conjunto de registros de propósito especial. El dispositivo
controlador es responsable de mover los datos entre los dispositivos periféricos
que controla y su almacenamiento de búfer local.
Normalmente, los sistemas operativos tienen un controlador de dispositivo para cada controlador de dispositivo.
Este controlador de dispositivo comprende el controlador de dispositivo y proporciona la
resto del sistema operativo con una interfaz uniforme para el dispositivo. la cpu y
los controladores de dispositivos pueden ejecutarse en paralelo, compitiendo por los ciclos de memoria. A
garantizar el acceso ordenado a la memoria compartida, un controlador de memoria sincroniza
acceso a la memoria.
En las siguientes subsecciones, describimos algunos conceptos básicos de cómo un sistema de este tipo
opera, centrándose en tres aspectos clave del sistema. Empezamos con interrupciones,
que alertan a la CPU sobre eventos que requieren atención. Luego hablamos de almacenamiento
estructura y estructura de E/S.
Además, un chip con múltiples núcleos usa significativamente menos energía que
Múltiples chips de un solo núcleo, un problema importante para los dispositivos móviles, así como
computadoras portátiles
En la Figura 1.9, mostramos un diseño de doble núcleo con dos núcleos en el mismo chip de procesador. En
este diseño, cada núcleo tiene su propio conjunto de registros, así como su propio
caché local, a menudo conocida como caché de nivel 1 o L1. Note, también, que un nivel 2 (L2)
el caché es local para el chip pero lo comparten los dos núcleos de procesamiento. La mayoría de las
arquitecturas adoptan este enfoque, combinando cachés locales y compartidos, donde local,
los cachés de nivel inferior son generalmente más pequeños y más rápidos que los cachés compartidos de nivel
superior
DEFINICIONES DE LOS COMPONENTES DEL SISTEMA INFORMÁTICO
• CPU: el hardware que ejecuta las instrucciones.
• Procesador: un chip físico que contiene una o más CPU.
• Núcleo: la unidad de cálculo básica de la CPU.
• Multinúcleo: incluye varios núcleos informáticos en la misma CPU.
• Multiprocesador: incluidos varios procesadores.
Aunque prácticamente todos los sistemas ahora son multinúcleo, usamos el término general
CPU cuando se refiere a una sola unidad computacional de un sistema informático y
núcleo y multinúcleo cuando se refiere específicamente a uno o más núcleos en
una CPU
cachés Aparte de las consideraciones arquitectónicas, como caché, memoria y
contención de bus, un procesador multinúcleo con N núcleos aparece en el sistema operativo como N CPU
estándar. Esta característica ejerce presión sobre el sistema operativo
diseñadores, y programadores de aplicaciones, para hacer un uso eficiente de estos núcleos de procesamiento,
un tema que abordamos en el Capítulo 4. Prácticamente todos los sistemas operativos modernos
sistemas, incluidos Windows, macOS y Linux, así como Android e iOS
sistemas móviles: admite sistemas SMP multinúcleo.
Agregar CPU adicionales a un sistema multiprocesador aumentará la potencia informática; sin embargo, como
se sugirió anteriormente, el concepto no escala muy bien,
y una vez que agregamos demasiadas CPU, la contienda por el bus del sistema se convierte en un problema.
cuello de botella y el rendimiento comienza a degradarse. Un enfoque alternativo es
en lugar de proporcionar a cada CPU (o grupo de CPU) su propia memoria local
al que se accede a través de un pequeño y rápido autobús local. Las CPU están conectadas por un compartido
interconexión del sistema, de modo que todas las CPU comparten un espacio de direcciones físicas. Esta
enfoque, conocido como acceso a memoria no uniforme, o NUMA, se ilustra
en la figura 1.10. La ventaja es que, cuando una CPU accede a su memoria local,
no solo es rápido, sino que tampoco hay disputas sobre la interconexión del sistema.
Por lo tanto, los sistemas NUMA pueden escalar de manera más efectiva a medida que se agregan más
procesadores.
Un inconveniente potencial con un sistema NUMA es una mayor latencia cuando una CPU
debe acceder a la memoria remota a través de la interconexión del sistema, creando una posible
penalización de rendimiento. En otras palabras, por ejemplo, la CPU0 no puede acceder al local
memoria de CPU3 tan rápido como puede acceder a su propia memoria local, ralentizando
rendimiento. Los sistemas operativos pueden minimizar esta penalización NUMA a través de
planificación cuidadosa de la CPU y administración de la memoria, como se explica en la Sección 5.5.2
y la Sección 10.5.4. Debido a que los sistemas NUMA pueden escalar para adaptarse a una gran
número de procesadores, se están volviendo cada vez más populares en los servidores como
así como sistemas informáticos de alto rendimiento.
Por último, los servidores blade son sistemas en los que varias tarjetas de procesador, E/S
las placas y las placas de red se colocan en el mismo chasis. La diferencia entre estos y los sistemas
multiprocesadores tradicionales es que cada placa de procesador blade se inicia de forma independiente y
ejecuta su propio sistema operativo. Algunos
Las placas de servidor blade también son multiprocesador, lo que difumina las líneas entre
tipos de computadoras. En esencia, estos servidores constan de múltiples independientes
sistemas multiprocesador.
1.3.3 Sistemas agrupados
Otro tipo de sistema multiprocesador es un sistema en clúster, que reúne varias CPU. Los sistemas agrupados
difieren del multiprocesador
sistemas descritos en la Sección 1.3.2 en que están compuestos de dos o más
sistemas individuales, o nodos, unidos entre sí; cada nodo suele ser un sistema multinúcleo. Dichos sistemas se
consideran débilmente acoplados. debemos notar
que la definición de agrupado no es concreta; muchos paquetes comerciales y de código abierto luchan para
definir qué es un sistema en clúster y por qué uno
forma es mejor que otra. La definición generalmente aceptada es que agrupados
las computadoras comparten almacenamiento y están estrechamente vinculadas a través de una red de área local
LAN
(como se describe en el Capítulo 19) o una interconexión más rápida, como InfiniBand.
El agrupamiento generalmente se usa para proporcionar un servicio de alta disponibilidad, es decir,
servicio que continuará incluso si uno o más sistemas en el clúster fallan.
Generalmente, obtenemos alta disponibilidad agregando un nivel de redundancia en el
sistema. Una capa de software de clúster se ejecuta en los nodos del clúster. Cada nodo puede
monitorear uno o más de los otros (a través de la red). Si la máquina monitoreada
falla, la máquina de monitoreo puede tomar posesión de su almacenamiento y reiniciar el
aplicaciones que se estaban ejecutando en la máquina fallida. Los usuarios y clientes de
las aplicaciones solo ven una breve interrupción del servicio.
La alta disponibilidad proporciona una mayor confiabilidad, lo cual es crucial en muchos
aplicaciones La capacidad de continuar brindando un servicio proporcional al nivel
del hardware superviviente se denomina degradación elegante. Algunos sistemas van más allá
degradación elegante y se denominan tolerantes a fallas, porque pueden sufrir una
falla de cualquier componente individual y aún así continuar la operación. Tolerancia a fallos
requiere un mecanismo que permita detectar, diagnosticar y, si
posible, corregido.
El agrupamiento se puede estructurar de forma asimétrica o simétrica. En el agrupamiento asimétrico, una
máquina está en modo de espera activa mientras que la otra ejecuta las aplicaciones. La máquina host de espera
activa no hace nada más que monitorear
el servidor activo. Si ese servidor falla, el host de espera activa se convierte en el activo
Esta placa es una computadora en pleno funcionamiento, una vez que se llenan sus ranuras.
Consiste en un zócalo de procesador que contiene una CPU, zócalos DRAM, bus PCIe
ranuras y conectores de E/S de varios tipos. Incluso la CPU de propósito general de menor costo contiene
múltiples núcleos. Algunas placas madre contienen múltiples
zócalos del procesador. Las computadoras más avanzadas permiten más de un sistema
tablero, creando sistemas NUMA