0% encontró este documento útil (0 votos)
48 vistas38 páginas

SO Completo

El documento describe las funciones básicas de un sistema operativo desde diferentes perspectivas. Brevemente: 1) Un sistema operativo actúa como interfaz entre el hardware y el software, controlando los recursos y coordinando las tareas. 2) Desde la perspectiva del usuario, el sistema operativo proporciona una interfaz de acuerdo al tipo de sistema, como escritorio, mainframe o móvil. 3) Existen diferentes tipos de sistemas operativos para usos como mainframes, escritorios, sistemas distribuidos y tiempo real.

Cargado por

tamadite95
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • Colas de Planificación,
  • Estructura de Sistemas Operati…,
  • Semáforos,
  • Paginación,
  • Planificación Cooperativa,
  • Sistemas de Mano,
  • Estructura en Capas,
  • Hilos,
  • Tipos de Sistemas Operativos,
  • Sistemas de Escritorio
0% encontró este documento útil (0 votos)
48 vistas38 páginas

SO Completo

El documento describe las funciones básicas de un sistema operativo desde diferentes perspectivas. Brevemente: 1) Un sistema operativo actúa como interfaz entre el hardware y el software, controlando los recursos y coordinando las tareas. 2) Desde la perspectiva del usuario, el sistema operativo proporciona una interfaz de acuerdo al tipo de sistema, como escritorio, mainframe o móvil. 3) Existen diferentes tipos de sistemas operativos para usos como mainframes, escritorios, sistemas distribuidos y tiempo real.

Cargado por

tamadite95
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • Colas de Planificación,
  • Estructura de Sistemas Operati…,
  • Semáforos,
  • Paginación,
  • Planificación Cooperativa,
  • Sistemas de Mano,
  • Estructura en Capas,
  • Hilos,
  • Tipos de Sistemas Operativos,
  • Sistemas de Escritorio

TEMA 1: INTRODUCCIÓN

1.1 Funciones del sistema operativo


¿Qué es un Sistema Operativo? Es algo difícil de definir, y es mas sencillo decir que hace en vez de
explicar que es exactamente. Un sistema informático se puede dividir en 4 bloques esenciales:

1) Hardware: todos los componentes físicos del ordenador (CPU, memoria, E/S...).

2) Software/Programas de aplicación: conjunto de programas que hacen posibilidad la


interactividad con el ordenador (navegadores, compiladores, procesadores de texto...).

3) Sistema Operativo: interfaz del software que esta que se comunica constantemente con el
hardware controlando y coordinando las diferentes tareas en el sistema. El S.O.
Proporciona un entorno para el resto de programas. 4) Usuarios

Se puede entender al sistema operativo desde dos puntos de vista diferentes: el del sistema
informático y el del usuario.

1.1.1 Punto de vista del sistema informático

El sistema operativo simplemente es el programa mas conectado con el hardware, de esta forma
actúa como:

1) Gestor de los recursos del sistema (Ej: varias aplicaciones abiertas)


2) Encargado del control de la ejecución de los programas y el acceso a dispositivos E/S

El sistema operativa todo conflicto entre las peticiones de las diferentes aplicaciones, haciendo
que se opere de manera eficiente y se resuelva cualquier problema, previniendo errores o un uso
inadecuado del ordenador.

1.1.1 Punto de vista del usuario

De cara al usuario, el sistema operativo se refleja como la interfaz utilizada. Esta varía
dependiendo del sistema. Ejemplos:

1) Sistema de escritorio: donde se busca la máxima productividad donde el usuario


monopoliza todo los recursos. El S.O. trabaja para optimizar esta tarea.

2) Sistemas de mainframe: muchos usuarios acceden al mismo terminal compartiendo


recursos e intercambiando información. El S.O. debe gestionar su correcto uso
equitativamente entre todos.

3) Sistemas de mano: en móviles o tablets los recursos son limitados. El S.O. debe ser
consciente de la economía de la batería, las limitaciones de hardware, etc.
1.2 Definición de Sistema Operativo
Sistema Operativo: aquel programa que se ejecuta continuamente en el ordenador (denominado
kernel o núcleo) siendo todo los demás programas del sistema y aplicaciones.

El núcleo/kernel del sistema operativo se considera como la cabeza pensante, siendo por lo tanto,
la parte mas importante que debe estar siempre presente. Cada Sistema Operativo tiene un
objetivo diferente: mejorar la facilidad de uso (PC de Escritorio), mejorar la eficiencia (mainframe),
etc.

El sistema operativo es necesario para trabajar mas fácilmente con un sistema informático, pues el
S.O. Se encarga de solucionar todos los problemas mientras el usuario no se tiene que preocupar
por ellos. Desde controlar dispositivos de E/S hasta reservar porciones de memoria, todas estas
funciones quedan al cargo del S.O. Facilitando las tareas.

1.3 Tipos de sistemas operativos


1.3.1 Mainframe

Los mainframes u ordenadores centrales fueron los primeros ordenadores con fines científicos. Se
caracterizan por su gran capacidad de memoria y almacenamiento secundario, de gran demanda
de dispositivos E/S y su rapidez, así como de su alta fiabilidad.

a) Sistemas de procesamiento por lotes

También conocidos como sistemas en 'batch', fueron los primeros. Operadas desde una consola y
utilizada con tarjetas perforadas. La función del SO era cargar programas en memoria y ejecutar
estos programas una y otra vez. Sin embargo en estos sistemas la E/S era mucho mas lenta que la
CPU, por lo que la cual estaba la mayoría del tiempo desocupada generando una gran ineficiencia.

b) Sistemas multiprogramados

Con la llegada del disco magnético, los trabajos se guardaban en el mismo en vez de tarjetas
perforadas, de esta forma el SO podía elegir el orden:

1) Todos los programas estaban al alcance del disco duro


2) Por lo que el SO mantiene varios trabajos en memoria en cola
3) Se ejecuta uno de los trabajos hasta que solicite E/S
4) Entonces el SO le da a la CPU otro trabajo
5) Al terminar el trabajo, el SO libera recursos

De esta forma, se necesita:

- Planificación de trabajos: elegir cual sera el siguiente trabajo en cargar en memoria


- Planificación de la CPU: elegir cual sera el siguiente trabajo en ejecutarse entre los
disponibles
- Gestión de memoria: controlar las diferentes zonas de memoria para cada trabajo

c) Sistemas de tiempo compartido

Estos sistemas se caracterizaron por crear una interacción directa entre el usuario y el sistema
(terminal o shell) que se puede producir en cada programa mientras se ejecuta.

Como gran novedad, utiliza un sistema de interrupción periódica (cada 10ms) a diferencia que el
sistema multiprogramado que no paraba hasta terminar el trabajo. Para ello también se sirve de un
planificador de CPU para cambiar de procesos. As estar cambiando todos los procesos cada 10ms
da la sensación de que los procesos trabajan simultáneamente. Principales características:

1) Mecanismos de gestión de la memoria y protección


2) Técnicas de memoria virtual
3) Planificación de la CPU
4) Mecanismos de sincronización y comunicación
5) Mecanismo de gestión de disco para tener un sistema de archivos

El primer SO en conseguir todo esto fue UNIX.

1.3.2 Sistemas de escritorio

Originalmente careciendo de las características necesarias para ser consideradas multiusuario y


multitarea. Sin embargo con el paso de los años, actualmente ya cuentan con estas características.

El objetivo en estos sistemas no esta en la utilización eficiente de los recursos, sino en el mayor
tiempo de respuesta posible al usuario, y su facilidad de uso mediante una GUI.

Ejemplos: GNU/Linux, MS-DOS, Microsoft Windows, Apple Mac OS X, etc.

1.3.3 Sistemas distribuidos Sistemas en

red con otros sistemas

a) Tipos de sistemas informáticos distribuidos

1) Cliente-servidor: ordenadores que actúan como servidores satisfaciendo a los clientes,


donde estos acceden al servidor para su uso. Esto ha ido sustituyendo a los mainframe
debido a que los sistemas de escritorio actuales son mas potentes y baratos. Ej: Google
Docs → 100.000 ordenadores comparten los datos.

2) P2P o redes entre iguales: tanto cliente como servidores son iguales y pueden ejercer de
cliente-servidor cuando sea necesario. A diferencia del anterior caso, no se produce un
cuello de botella debido al ancho de banda de la conexión. Ej: Skype, eMule, uTorrent, etc.
b) Sistemas operativos para sistemas distribuidos

1) Sistemas operativos de red: ofrecen a las aplicaciones que corren sobre ellos servicios
de acceso a redes de ordenadores.

2) Sistemas operativos distribuidos: crean en el usuario la ilusión de estar en un sólo


ordenador, aunque en realidad el sistema operativo controla todos los ordenadores de la
red.

1.3.4 Sistemas en tiempo real

Utilizados cuando se tiene que responder en un tiempo fijo a un evento especifico, por lo que el
SO necesita reservar recursos y prioridades para atender a cualquiera de estos eventos. Dos tipos:

1) Tiempo real estricto: donde las tareas tienen que estar en un margen estricto de tiempo,
haciendo que un pequeño fallo que pueda ocasionar retardos, origina graves problemas al
resto del funcionamiento.

2) Tiempo real flexible: permite pequeños desajustes de tiempo por lo que son útiles cuando
algunas tareas necesitan de mayor prioridad que otras.

1.3.5 Sistemas de mano

El SO debe ser consciente de los limitados recursos (gestión de batería, color de pantalla, menos
CPU...) de los móviles, tablets, libros electrónicos, etc.
TEMA 2: ESTRUCTURA DE LOS
SISTEMAS OPERATIVOS
2.1 Organización de los sistemas operativos
La organización interna del sistema operativo radica en tres puntos principales:

1) Los servicios que proporciona a través de los componentes.


2) Los componentes del sistema operativos.
3) La interfaz de programación que ofrece al usuario.

2.1.1 Interfaz de programación de aplicaciones (API)

El API es la capa mas baja, donde el SO recibe los programas. Para ello existen unas librerías (Libc)
estándar del sistema, para acceder al API y realizar las tareas y servicios mas comunes.
Normalmente no forman parte del SO, sino que son herramientas de desarrollo de cada lenguaje.

Muchas veces estas librerías estándar, necesitan acceder a una librería del sistema, que si que
forma parte del SO y contiene funciones mas primitivas aun para acceder a servicios de mas bajo
nivel del sistema.

Para invocar a la librería del sistema, sera necesario realizar una llamada al sistema, que funcionan
de interfaz para la invocación de dichos servicios. Se trata de una solicitud del software para que
el SO actúe. Esto no es mas que un procedimiento en ensamblador donde se deja de ejecutar el
proceso, el cual , se pasa al propio SO que hace de juez y mediador.

a) Tipos de llamadas del sistema

Generalmente una llamada al sistema genera una excepción (interrupción generada para la
llamada de un servicio del sistema) deteniéndose el proceso que la invoco. Pero al realizar esto, lo
normal es pasar información extra a la CPU, denominados parámetros, existiendo tres métodos
conocidos:

1) Por registros: se cargan los parámetros en los registros de la CPU. Esto es muy eficiente,
pero el numero de parámetros esta limitado al numero de registros. Linux utiliza esto
cuando se precisan de menos de 6 parámetros.

2) Por tabla de memoria: se copian los parámetros en una tabla de memoria que se
almacena en un registro. No se ve limitado el numero de parámetros que pueden ser
pasados, pero es poco eficiente y lento. Linux lo utiliza cuando trabaja con mas de 5
parámetros, mientras que Windows trabaja siempre independientemente del numero de
parámetros.
3) Por pila: se insertan los parámetros en la pila del proceso. El SO se encarga de extraer de la
pila los parámetros. Igual que por tabla de memoria, el numero de parámetros no se ve
limitado. Es utilizado en sistemas FreeBSD y BSD.

Sea como sea, el sistema siempre debe comprobar los parámetros, pues cualquier error podría
ser muy peligroso, ya que es necesario acceder a zonas peligrosas. 2.1.2 Componentes del
Sistema Operativo

a) Gestión de procesos

Proceso: programa en ejecución, siendo una entidad activa de diferentes recursos de CPU,
memoria, ficheros, etc. Cuando el proceso termina, el SO reclama los recursos utilizados.

Programa: no es un proceso, es el código ejecutable con las instrucciones de un fichero


almacenado en un dispositivo secundario.

La gestión de procesos debe velar de un correcto reparto de la CPU, y como es lógico, por una
organización debida de los procesos. El sistema operativo es responsable de:

• Crear y terminar procesos


• Suspender y reanudar procesos
• Proporcionar mecanismos para la sincronización de procesos
• Proporcionar mecanismos para la comunicación entre procesos
• Proporcionar mecanismos para el tratamiento de interbloqueos

b) Gestión de la memoria principal

La memoria es fundamental ya que es el único acceso directo de almacenamiento que tiene la


CPU, por lo que para que un programa se ejecute, debe ser copiado a la memoria. Edemas, sirve
de zona de intercambio entre la CPU y la E/S. Para que se ejecuten varios programas a la vez, es
necesario que estén copiados ambos en la memoria, para evitar conflictos, el sistema operativo se
debe ocupar de:

• Controlar que partes de la memoria están actualmente en uso y cuales no


• Decidir que procesos añadir o extraer de la memoria cuando hay o falta espacio en la
misma
• Asignar y liberar espacio de la memoria principal según sea necesario • La gestión de la
memoria virtual

c) Gestión del sistema de ficheros

El sistema operativo simplifica todos los medios físicos de almacenamiento de datos, en una visión
lógica uniforme de directorios y a todas les define como unidad básica de almacenamiento, el
fichero. Un fichero es una colección de información definida. El sistema operativo se debe ocupar
de:
• Crear y borrar ficheros
• Crear y borrar directorios para organizar los ficheros
• Soportar primitivas (funciones muy básicas) para la manipulación de ficheros y directorios
• Mapear en memoria ficheros del almacenamiento secundario
• Copias de seguridad de los ficheros en sistemas de almacenamiento seguros

d) Gestión del sistema de E/S

La E/S es la interfaz de conexión y comunicación con el mundo exterior. Cuenta con:

• Un componente de gestión de memoria: para dar servicio al buffering, chansing y


spooling.
• Una interfaz genérica de acceso a los controladores: independientemente del dispositivo,
todas deben contar con una interfaz idéntica, representándose como ficheros. Esto
permite que los procesos puedan acceder a ellos como si estuvieran manipulando ficheros.
• Controladores de dispositivo: quienes conocen las especificaciones de los dispositivos
creados

e) Gestión del almacenamiento secundario

La memoria principal es limitad en cuanto a tamaño. Por eso siempre debe ser respaldada por un
dispositivo de almacenamiento secundario, encargado de almacenar todos los datos de manera
no-volátil. Lo normal es la utilización de un disco duro. El sistema operativo debe ser capaz de:

• Gestión del espacio libre


• Asignación del espacio de almacenamiento • Planificación del
acceso al disco

f) Gestión de red

El componente de red se responsabiliza de la comunicación entre los procesadores en sistemas


interconectados mediante una red de ordenadores. Ej: Internet y los protocolos TPC/IP.

g) Protección y seguridad

Protección: mecanismo de control de acceso de los procesos y usuarios a recursos definidos por el
sistema. La protección mejora la fiabilidad.

Seguridad: mecanismos encargados de defender el sistema de ataques internos u externos (virus,


gusanos, DdoS, uso no autorizado...).

En un sistema informático con múltiples usuarios y la concurrencia de varios procesos, es


necesario métodos de protección existiendo autorizaciones de acceso a recursos privilegiados. Los
ejemplos mas comunes son:

• Hardware de direccionamiento de memoria: evita que los procesos se ejecuten sobre su


propio espacio de direcciones.
• Temporizador: garantiza que ningún proceso tome el control de la CPU indefinidamente.

Un sistema informático puede tener la protección adecuada, pero siempre puede estar expuesto a
fallos o acceso inapropiados, es debido por ello disponer de medidas de seguridad para defender
al sistema.

2.1.3 Interfaz de usuario

La interfaz de usuario puede variar enormemente, por ello no se considera como aspecto básico
dentro del sistema operativo. Los sistemas operativos cuentan de serie con una interfaz de
usuario, pero además, hoy en día también con una gran colección de programas ya instalados,
encargados de cubrir todas las necesarias básicas: manipulación de ficheros, información del
sistema, hora y fecha, herramientas de desarrollo, clientes de correo, navegadores web, etc.

Se pueden distinguir tres tipos diferentes de interfaces de usuario:

1) Interfaz de linea de comandos: el usuario introduce directamente los comandos a


ejecutar. En algunos sistemas se incluye dentro del núcleo, en otros como MSDOS y UNIX
se ejecuta como un programa especial llamado Shell.

2) Interfaz de procesos por lotes: donde los comandos y las directivas de los mismos, se listan
en ficheros para ser ejecutados posteriormente. Se utiliza en sistemas no interactivos.

3) Interfaz gráfica de usuario (GUI): soporte de sistemas de ventas y menús controlables


mediante ratón.

2.2 Operación del sistema operativo


Los sistemas operativos modernos son controlados mediante interrupciones. Si no hay ningún
proceso o E/S que pida la atención, el sistema operativo seguirá inactivo esperando. De esta
forma, si un dispositivo de E/S requiere atención tras completarse una transferencia de datos, se
genera una interrupción. Si se produce un error (ej:
división de cero, acceso a memoria incorrecto...) se genera una excepción (interrupción generada
por software).

El sistema operativo debe estar siempre seguro de que un error que se produzca en un programa
solo afecta al proceso que lo ejecuta, ya que son muchos los procesos que comparten recursos del
sistema. Por ello es necesario utilizar diferentes mecanismos de prevención y protección.

2.2.1 Operación en modo dual

Un método es el distinguir la ejecución de código del sistema operativo de la del código del
usuario. De esta forma se utiliza algún tipo de soporto en el hardware que permita la diferencia
entre varios modos de ejecución y restringir así la utilización de instrucciones peligrosas
(privilegiadas). De esta forma, se distinguen dos modos:
1) Modo usuario: ejecuta código de tareas de usuario. Si se ejecuta una instrucción
privilegiada, se genera una excepción que intercepta el sistema operativo, en vez de
ejecutarse.

2) Modo privilegiado: ejecuta código de tareas del sistema operativo. El hardware se


garantiza de que las instrucción privilegiadas solamente puedan ser utilizadas aquí.

De esta forma, este modo puede ser indicado por in bit de modo {0,1}. Por ejemplo, un
ordenador arranca siempre en modo privilegiado y el sistema operativo no cambia a modo
usuario hasta que el propio usuario va a acceder a el. El sistema operativo se encargara en todo
momento de supervisar una posible interrupción o excepción cuando no se utilice correctamente
el modo usuario. 2.2.2 Protección de la memoria

La memoria se tiende a dividir en dos partes:

1) Bloque S.O.: es donde esta todo el código del sistema operativo, y donde se localiza el
vector de interrupciones.
2) Bloque de usuario: datos y procesos de todos los usuarios mezclados.

En los Sistemas operativos modernos, los procesos no tienen acceso a toda la memoria
física, dado que uno de los objetivos del sistema operativo es proteger a los procesos en
ejecución y al propio sistema de posibles errores, por lo que el sistema operativo ofrece a
cada proceso una visión privada de la memoria, dicha visión se denomina espacio virtual de
direcciones, y está formado por el conjunto de direcciones que puede generar la CPU para
un proceso dado.

→ MMU (Memory Management Unit): se trata de un espacio de direcciones virtuales creado por
la CPU que a partir de las direcciones físicas, las transforma en virtuales para obtener: [PROCESO 1
+ SO]. Si garantiza el aislamiento de los procesos, existiendo regiones de memoria de acceso
permitido o prohibido.

2.2.3 El temporizador

El temporizador se utiliza para poder estar seguros de que el sistema operativo es capaz de
mantener el control de la CPU. Se configura al arranque del sistema para interrumpir la CPU,
generando interrupciones regulares, de esta forma se asegura que hay una interrupción cada 5ms
donde el SO entra en acción evitando un posible cuelgue de procesos. A determinados procesos se
le puede establecer una prioridad mas baja a la hora de comprobar su interrupción.

2.3 Sistemas operativos por estructura

2.3.1) Estructura Sencilla monolítica

No tienen una estructura bien definida (interfaces y niveles de funcionalidad no están bien
separados). Todo lo que está por encima del hardware y por debajo de las llamadas al sistema es
el núcleo, proporcionando características como la planificación de la CPU, la gestión de memoria o
el soporte de archivos, lo que hace que sea difícil de implementar y mantener todo en un mismo
nivel (es lo que define a esta estructura).

Ventajas: eficiente, fácil de programar


Desventajas: difícil de mantener y actualizar

Hoy en día solo se utiliza para sistemas sencillos de hardware limitado (ej: TDT).

2.3.2) ESTRUCTURA EN CAPAS

Capaz de dividir el SO en piezas más pequeñas como es partirlo en capas, donde cada una sólo usa
funciones de la capa inferior y servicios sólo de la capa superior. Cada capa tiene la
responsabilidad de ocultar la existencia de estructuras de datos, operaciones y hardware a las
capas de nivel superior. Estos sistemas siguen concentrando la mayoría de funcionalidades en el
núcleo, por lo que, aunque sea más modular, sigue siendo una estructura monolítica. La mayor
dificultad de estos sistemas es definir cada capa y sus funcionalidades, por lo que una solución es
definir pocas capas con muchas funcionalidades, llegando a ser una estrategia menos eficiente
que los sistemas de estructura sencilla.

Ventajas: fácil de mantener


Inconvenientes: difícil de realizar y muy ineficiente

Ningún SO es capaz de implementarlo de forma real.

2.3.3) MICROKERNEL

Se eliminan los componentes no esenciales del núcleo y se implementan en programas de nivel de


usuario. Este tipo de núcleo proporciona funciones mínimas de gestión de memoria y procesos, y
tiene que hacer usos de un mecanismo de comunicación (que es la funcionalidad esencial en este
tipo de estructura), que es el “paso por mensajes”, que se encarga de comunicar el programa
cliente con los diversos servicios del sistema

Ventajas: robustez, fácil de programar y mantener, de añadir nuevas funciones

Inconvenientes: pobre rendimiento (consumo alto) debido al mecanismo de comunicación.

2.4.4) MODULAR

En esta estructura el núcleo está dividido en módulos, donde cada uno de ellos implementa una
serie de funciones y servicios concretos. Estos módulos de cargan durante el arranque, aunque
también se pueden enlazar dinámicamente. El módulo principal solo tiene funciones básicas, y es
mucho más eficiente que el microkernel dado que no necesita de un mecanismo de comunicación,
dado que los módulos o componentes se cargan en memoria. Cabe destacar que se considera
también una estructura monolítica.

Ventajas: eficiente, fácil de desarrollar y mantener


Inconvenientes: estructura monolítica que cambia dinámicamente y no es tan robusta como el
microkernel
TEMA 3: GESTIÓN DE PROCESOS
3.1 Procesos
Un proceso es la unidad de trabajo en un sistema operativo moderno, por lo que no deja de ser un
programa en ejecución más. Un proceso suele estar formado por:

• El código del programa: (sección text)

• La sección de datos: con tiene las variables globales (sección data y bss)
• La pila: Contiene datos temporales como parámetros y direcciones
• El montón: lugar donde se aloja la memoria que se asigna dinámicamente •
Información de la actividad actual: contador de programa, registros de CPU...

A diferencia de un programa que se declara como una entidad pasiva ya que su estado no se
altera hasta que no se ejecuta. Un proceso es una entidad activa con un contador de programa
especificando la próxima instrucción a ejecutar.

3.1.2 Estados de procesos

Los procesos tienen un estado que cambia durante su ejecución y dependerá de su actividad
actual. Los estados mas usuales son:

• Nuevo: El proceso esta siendo creado


• Ejecutando: El proceso se esta ejecutando
• Esperando: El proceso esta esperando algún evento
• Preparado: El proceso espera asignación de la CPU
• Terminado: El proceso termino su ejecución y espera que se liberen recursos

3.1.3 Bloque de control de proceso

El bloque de control de proceso (PCB) es una estructura de datos que representa a cada proceso
en el SO. Sirve de almacén para información importante acerca de dicho proceso:

• Estado del proceso: estados anteriores (nuevo, ejecutando...)


• Contador de programa: Dirección de la próxima instrucción a ejecutar
• Registros de la CPU
• Información de planificación de CPU: Prioridad del proceso, punteros a colas de
planificación...
• Información de gestión de memoria: Valores de registros, limites del área de memoria,
tablas de paginas o tablas de segmentos...
• Información de registro: Cantidad de CPU usada, limites de tiempo, estadísticas de
ejecución...
• Información de estado de E/S: Lista de dispositivos de E/S reservados
3.1.4 Colas de planificación

En los sistemas operarios hay diferentes colas de planificación para los procesos en distintos
estados:

• Cola de trabajo: Contiene a todos los procesos en el sistema


• Cola de preparados: Contiene procesos cargados en memoria y que están preparados para
ser ejecutados
• Colas de espera: Contienen a los procesos que están esperando por un evento concreto
• Colas de dispositivo: Cola que contiene los procesos que están esperando por un
dispositivo en particular

Esquema del diagrama de colas de planificación:

1) Un nuevo proceso llega y se coloca en la cola de preparados, mientras se ejecuta:

• El proceso puede solicitar una operación de E/S por lo que abandona la CPU y es colocado
en la cola de dispositivo correspondiente
• El proceso puede querer esperar por un evento (como otro proceso o subproceso)
• El proceso puede ser sacado a la fuerza por la CPU y colocándose en la cola de preparados

2) Cuando la espera concluye los procesos pasan del estado de espera al de preparado y son
insertados en la cola de preparados

3) El proceso repite este ciclo hasta que termina

3.1.5 Planificación de procesos

Un proceso se puede mover por diferentes colas de planificación, para ello hay que seleccionar un
criterio para planificar a donde se moverá cada proceso:

• En sistemas multiprogramados el planificador de largo plazo selecciona los trabajos desde


la cola de entrada en el almacenamiento secundario y los carga en memoria.
• El planificador de corto plazo selecciona uno de los procesos y lo asigna a la CPU
• Algunos sistemas utilizan el planificador de medio plazo para sacar procesos de memoria y
reintroducirlos mas tarde. Ej: Intercambio de memoria (SWAP)

IMPORTANTE: En los sistemas de tiempo compartido (Linux, Windows...) no existen planificadores


de trabajos. Los procesos se ejecutan al ser solicitados por el usuario.

3.1.6 Cambio de contexto

El cambio de contexto es la tarea de asignar a la CPU un proceso distinto al que tiene actualmente.
Es necesario guardar el viejo proceso en su PCB y cargar en la CPU el estado nuevo. Hay que
preservar:

• Los registros de la CPU


• El estado del procesos
• La información de gestión de la memoria

3.1.7 Operaciones sobre los procesos

El sistema operativo debe tener los mecanismos para la creación y terminación de procesos.

a) CREACION DE PROCESOS: existe un proceso padre que puede crear múltiples


hijos. Cada proceso cuenta con un identificador (PID) que suele ser un numero entero. Además
cada hijo puede crear nuevos procesos, generándose un árbol de procesos.

Los procesos hijos pueden utilizar los mismos recursos del padre o solicitarlos. El padre puede
repartir sus recursos, o directamente heredarlos a sus hijos. Cuando se crea un hijo, el padre
puede esperar hasta que su hijo termine su ejecución o seguir ejecutándose en segundo plano.

Pid == 0: HIJO y Pid > 0: PADRE

b) TERMINACION DE PROCESOS: un proceso termina cuando se lo indica el


sistema operativa con la llamada al sistema exit(). El padre también puede invocar esta llamada
cuando:

• El hijo a excedido el uso de algunos recursos


• El hijo ya no es necesario
• El padre termina y los hijos deben dejar de ejecutarse

3.2 Procesos cooperativos


Se divide en dos grupos:

• Procesos independientes: que no afectan o pueden ser afectados por otros procesos
• Procesos cooperativos: que pueden afectar o ser afectados por otros procesos

3.2.1 Motivaciones para la colaboración entre procesos

• Compartición de información: ya que varios usuarios pueden estar interesados por el


mismo bloque de información.
• Velocidad de computo: para mejorar la velocidad es conveniente dividir una tarea en
subtareas que trabajen en paralelo.
• Modularidad: se puede dividir las funciones del programa en procesos separados.
• Conveniencia: un usuario puede querer hacer varias tareas al mismo tiempo.

3.2.2 Memoria compartida

La memoria compartida es una estrategia para comunicar procesos donde uno puede acceder
antes que el otro. Para esta estrategia es necesaria que ambos procesos estén dispuestos a
compartir una misma región en memoria.
En ella los dos procesos pueden intercambiar información y escribir en ella pero:

• La estructura de datos y su localización lo determinan los procesos y no el SO.


• Los procesos son los responsables de sincronizarse para no escribir al mismo tiempo.

Las ventajas son:

• Eficiencia: ya que la comunicación tiene lugar a la velocidad de la memoria principal.


• Conveniencia: puesto que el mecanismo de comunicación solo requiere leer y escribir de la
memoria.

3.2.3 Comunicación entre procesos

La comunicación entre procesos o IPC es un mecanismo para que los procesos puedan compartir
información y sincronizar acciones sin necesidad de compartir la memoria. En este caso el sistema
operativo si que se hace al mando.

a) Sistema de pasos de mensajes

Se trata de permitir que los procesos se comuniquen sin necesidad de compartir recursos. Se
utilizan dos llamadas al sistema: send (message) y receive (message).

Además se debe tener en cuenta si el tamaño de los mensajes sera de tipo fijo o de tipo variable,
donde la implementación es mas costosa pero mas simple en aplicaciones en el ultimo caso.

Para llevar a cabo la comunicación es necesario que exista un enlace de comunicaciones. b)

Referenciación

Los procesos se referencian el uno al otro, utilizando una comunicación directa o indirecta.

• Comunicación directa: la información se dirige explícitamente al proceso receptor. La


desventaja es que siempre hay que hacer referencia al receptor.

• Comunicación indirecta: la información se dirige a un buzón donde los procesos pueden


dejar y recoger mensajes. Cada proceso debería utilizar un puerto diferente además de
hacer un uso de sincronización de prioridad de los procesos para su acceso.

c) Buffering

Los mensajes durante la comunicación residen en una cola temporal. Hay varias formas de
implementar dicha cola:

• Con capacidad cero o sin buffering: la cola tiene una capacidad máxima de 0, por lo
tanto no puede haber ningún mensaje esperando en el enlace.

• Con buffering automático:


• Con capacidad limitada: la cola tiene una capacidad limitada, si se llena el transmisor se
bloquea hasta que haya espacio.
• Con capacidad ilimitada: la cola es infinita por lo que el transmisor nunca tiene que
esperar

d) Sincronización

Se utiliza send() y receive(), y el paso de mensajes puede ser:

• Envío con bloqueo: el proceso que envía se bloquea hasta que el proceso receptor o el
buzón reciben el mensaje
• Envío sin bloqueo: el proceso transmisor envía el mensaje y continua operando
• Recepción con bloqueo: el receptor se bloquea hasta que hay un mensaje disponible
• Recepción sin bloqueo: el receptor extrae un mensaje valido o un mensaje nulo 3.2.4

Ejemplos de mecanismos de IPC

a) Tuberías

Se trata de un mecanismo de comunicación indirecta. Cada tubería tiene dos extremos. Un


extremo permite al proceso en ese extremo escribir en la tubería, mientras el otro extremo
permite a los procesos leer de la tubería.

• Tuberías anónimas: solo existen en el espacio de direcciones del proceso que las crea.
• Tuberías con nombre: son públicas al resto del sistema, por lo que teóricamente son
accesibles por cualquier proceso.

b) Señales en POSIX

c) Sockets

Un socket es un punto final en una comunicación bidireccional entre procesos. Para que una
pareja de procesos se pueda comunicar son necesarios dos sockets –uno para cada proceso– de
manera que cada uno de ellos representa un extremo de la conexión.

3.3 Hilos
Hasta ahora los procesos descritos trabajan con un solo hilo de ejecución, es decir, que se ejecuta
en la CPU una única secuencia de instrucciones. Un proceso con un hilo de ejecución solo puede
realizar una tarea a la vez.

3.3.1 Introducción
El hilo es la unidad básica de uso de la CPU en los sistemas operativos multihilo. Los hilos
necesitan:

• Identificador: el equivalente al identificador de proceso


• Contador de programa: marca en que punto se esta ejecutando dicho hilo
• Registros CPU: almacenar datos/estados en los registros
• Pila: guarda las variables locales del hilo
Además de compartir entre sí:

• Código • Datos • Ficheros

a) Ventajas

• Simplicidad: mas simple diseñar el código


• Respuesta: si un hilo se bloquea, el resto sigue trabajando con lo que es mas fácil de
optimizar procesos
• Compartición de recursos: se comparten memoria y recursos, siendo posible la ejecución
de varios hilos dentro del mismo espacio de direcciones
• Economía: como los hilos comparten los recursos, el desarrollo del programa usando hilos,
es mas económico. El cambio de contexto de hilo es 5 veces mas rápido ahorrándose
mucho tiempo
• Aprovechamiento de multiprocesador: si el programa esta diseñado en procesos de un
solo hilo, no se puede aprovechar la arquitectura multiprocesador como el de un 4-core.
Con un programa escrito en multihilo nos aprovechamos de esta tecnología

b) Soporte e implementación
Las librerías de hilos proporcionan al programador la API para crear y gestionar los hilos de su
proceso. Hay dos formas de hacerlo:

• Librerías de usuario: implementar la librería enteramente en el espacio del usuario sin


requerir el soporte del núcleo.

El problema radica en que el núcleo no es consciente de que el proceso tiene varios hilos
con lo que no se aprovechan la mayoría de ventajas de los hilos. Edemas si u hilo bloquea
el proceso, se bloquea el resto del hilos.

• Librerías de núcleo: los hilos son gestionados por el sistema operativo, de esta forma no se
bloquean el resto de hilos ante una llamada al sistema. Tanto Windows como Linux utilizan
esto.

3.3.2 Modelos multihilo

a) Muchos a uno

La gestión de los hilos se hace con una librería en el entorno de usuario, llegando a ser muy
eficiente pero sin olvidar sus lastres:

• Solo se puede ejecutar un hilo simultáneamente


• Un hilo bloqueado bloquea al resto

La ventaja principal radica en que el cambio de contexto es muy rápido ya que no necesitamos
tratar con el S.O., lo hace completamente el proceso actual y no se sobrecarga al sistema.
b) Uno a uno

Se utiliza una librería de núcleo, donde cada hilo tiene asociado un hilo de núcleo., de esta forma
obtenemos que:

• Permite a otro hilo del mismo proceso ejecutarse aun cuando un hilo hace una llamada al
sistema que debe bloquearse
• Permite paralelismo en sistemas multiprocesador
• Crear un hilo de usuario requiere crear el correspondiente hilo de núcleo
• Las gestión de los hilos se hace con una librería en el espacio de núcleo

La desventaja principal es que los hilos de núcleo si que sobrecargan al sistema, por lo que su uso
debe ser limitado. Son utilizadas en sistemas operativos modernos.

c) Muchos a muchos

Se mapean los hilos de usuario en un menor o igual número de hilos de núcleo del proceso. Así los
desarrolladores pueden utilizar la librería de hilos en el espacio de usuario para crear tantos hilos
como quieran. El planificador de la librería de hilos se encarga de determinar que hilo de usuario
es asignado a que hilo de núcleo. Vemos que:

• Paralelismo
• No bloqueo
• Poca cargados
• Cambio rápido

Su lastre es que es complejo de programar y gestionar.

d) De dos niveles

Una variación del modelo anterior, donde se permite que un hilo de usuario quede ligado a un
único hilo de núcleo.

3.3.3 Sincronización

El hecho de compartir varios procesos mismas regiones de memoria, hace que aparezcan algunos
riesgos. La sincronización intenta asegurar la ejecución ordenada de hilos y/o procesos
cooperativos que comparten regiones de la memoria, con el fin de mantener la consistencia de los
datos.

a) El problema de las secciones críticas

Llamamos condición de carrera a la situación donde varios procesos o hilos pueden acceder y
manipular los mismos datos concurrentemente, y donde el resultado de la ejecución depende del
orden particular en el que tienen lugar dichos accesos. Para evitar estas situaciones debemos
asegurarnos que sólo un procesos o hilo en cada momento puede manipular esos recursos
compartidos.
Una forma de controlar el acceso a los recursos compartidos es que cada proceso o hilo pueda
tener un tipo de secciones de código denominadas sección crítica dónde se puedan cambiar las
variables compartidas, actualizar tablas o listas, escribir en un archivo, etc. El acceso a las
secciones críticas es controlado de manera que cuando un proceso se esté ejecutando en su
sección de este tipo ningún otro pueda hacerlo en la suya. Sí eso ocurre, se dice que la ejecución
es mutuamente exclusiva en el tiempo. b) Semáforos (spinlocks)

Para que las operaciones se ejecuten de forma ordenada, se lleva a cabo la implementación de los
semáforos. Los semáforos son un tipo de objetos que nos permite controlar el acceso a una
sección crítica, por medio de dos primitivas: acquire() y release() .

El semáforo no deja de ser un contador con el número máximo de hilos/procesos que pueden
estar dentro de la sección crítica. Según acquire (–) y release (++) el contador varía cuando un
hilo entra/sale de una sección crítica. 3.3.4 Otras consideraciones sobre hilos

a) Datos específicos de hilo

Los hilos, además de compartir datos con otros hilos del mismo proceso, pueden tener datos
privados, denominados TSD.

b) Cancelación de hilos

La cancelación es la operación de terminar un hilo antes de que termine su trabajo.

• Cancelación asíncrona (inmediatamente) : un hilo puede terminar inmediatamente la


ejecución de otro. Puede originar problemas de liberación de memoria y alteración en la
modificación de estructuras de datos.
• Cancelación en diferido: el hilo comprueba periódicamente cuando debe terminar y
comprueba de que su cierre no genere problemas como los anteriores.

El primero es más rápido, el segundo es más seguro.

c) Funciones reentrantes y seguras en hilos

Una función es reentrante si puede ser interrumpida en medio de su ejecución y mientras espera
puede volver a ser llamada con total seguridad. Obviamente las funciones recursivas deben ser
reentrantes para poder llamarse a sí mismas una y otra vez con total seguridad.

Una función es segura en hilos si al manipular estructuras compartidas de datos lo hace de tal
manera que se garantiza la ejecución segura de la misma por múltiples hilos al mismo tiempo.

Para que un programa funcione correctamente el código debe ser reentrante y seguro:

• Reentrante: Puede ser interrumpido y recuperado con seguridad


• Segura en hilos: si la ejecución permite solo manipula estructuras de datos en forma
segura
d) Las llamadas al sistema fork( ) y exec( ) en procesos multihilo

La llamada al sistema exec() sustituye el programa en ejecución con el programa indicado. Esto
incluye la destrucción de todos los hilos del programa original, por lo que duplicar los hilos en el
fork() parece algo innecesario.

El estándar POSIX establece que si se utiliza fork() en un programa multihilo, el nuevo proceso
debe ser creado con un sólo hilo, que será una réplica del que hizo la llamada, así como un
duplicado completo del espacio de direcciones del proceso. Sin embargo algunos sistemas UNIX
tienen una segunda llamada no estándar, denominada forkall() , capaz de duplicar todos los hilos
del proceso padre. Obviamente sólo resulta conveniente emplearla si no se va a utilizar la llamada
exec() .

e) Manejo de señales en procesos multihilo

Una señal se utiliza en UNIX para informar a un proceso cuando un evento a ocurrido

• Señales síncronas: originadas por una acción del proceso (las debe recibir el hilo que hizo
petición de él)
• Señales asíncronas: debido a procesos externos, típicamente las envía el sistema y no
están asociadas a una acción del proceso (CTRL+C)

Se verifica que hilo debe recibir la señal. En UNIX se permite especificar que hilo maneja cada
señal, si no esta especificado la señal la recibe el que esta actualmente en ejecución.

3.4 Planificación de la CPU


El planificador de la CPU o planificador de corto plazo selecciona de la cola de preparados el
siguiente proceso o hilo del núcleo a ejecutar. En dicha cola suelen estar los PCB de todos los
procesos que esperan una oportunidad para usar la CPU

3.4.1. Planificación cooperativa y expropiativa

• Cuando un proceso pasa de ejecutando a esperando. Por ejemplo, por solicitar una
operación de E/S, esperar a que un hijo termine, etc.
• Cuando un proceso termina.

Cuando el planificador es invocado en alguno de los casos anteriores decimos que tenemos un
sistema operativo con planificación cooperativa.

• Cuando ocurre una interrupción del temporizador.


• Cuando un proceso pasa de esperando a preparado. Por ejemplo porque para un proceso
ha terminado la operación de E/S por la que estaba esperando.

Cuando el planificador es invocado en los cuatro casos decimos que tenemos planificación
expropiativa.
La planificación cooperativa no requiere de ningún hardware especial, pero si la expropiativa.
Edemas cuenta con las dificultades de:

• Como un proceso puede ser expropiado en cualquier momento, se debe vigilar que en el
momento de dicha expropiación no se alteren datos compartidos que podrían suponer un
problema.

• ¿Qué pasa si un proceso va a ser expropiado cuando se está ejecutando una llamada al
sistema? No se puede expropiar, tiene que esperar.

3.4.2. El asignador

El asignador es el componente que da el control de la CPU al proceso seleccionado por el


planificador de corto plazo. Esta tarea implica realizar las siguientes funciones:

• Cambiar el contexto.
• Cambiar al modo usuario.
• Saltar al punto adecuado del programa para continuar con el proceso.

Puesto que el asignador es invocado para cada conmutación entre procesos, es necesario que el
tiempo que tarda en detener un proceso e iniciar otro sea lo más corto posible. 3.4.3. Criterios de
planificación

a) Criterios a maximizar

• Uso de CPU: un buen planificador debería mantener la CPU lo más ocupada posible.
• Tasa de procesamiento: una buena medida del volumen de trabajo realizado puede ser el
número de tareas o procesos terminados por unidad de tiempo.

b) Criterios a minimizar

Tiempo de ejecución: es el intervalo de tiempo que transcurre desde que el proceso es cargado
hasta que termina.
Tiempo de espera: Es la suma de tiempos que el proceso permanece a la espera en la cola de
preparados.
Tiempo de respuesta: es el intervalo de tiempo que transcurre desde que se le lanza un evento –
se pulsa una tecla, se hace clic con el ratón o llega un paquete por la interfaz de red– hasta que se
produce la primera respuesta del proceso.

c) Elección del criterio adecuado

En general podemos encontrar dos clases de trabajos para los que puede ser necesario evaluar la
eficiencia del sistema de manera diferente:

• Sistemas interactivos (escritorio/mainframe de tiempo compartido): la mayor parte del


tiempo se esta esperando algún tipo de entrada. Se espera que el sistema deba reaccionar
lo antes posible, por lo que lo mas recomendable es maximizar el tiempo de respuesta de
la entrada de datos .

• Mainframes de procesamiento por lotes y multiprogramados: en todo momento se


realizan cálculos y simulaciones, por lo que el tiempo de respuesta no es tan importante
como lo es realizar los cálculos lo antes posible. Por ello lo aconsejable es reducir el tiempo
de ejecución o la tasa de procesamiento.

El resto esta en el PDF: Planificación, Algoritmos...


TEMA 4: GESTIÓN DE LA MEMORIA
4.1 Memoria principal
La memoria es un recurso finito, pues aunque la memoria ha pasado desde los 48k hasta los 8GB,
el tamaño de los programas también ha aumentado hasta entonces. Existe un problema, y es
poder cargar todos los programas en memoria (algo imposible).

Para que se pueda ejecutar un programa previamente debe ser cargado en memoria desde el
disco, y convertir ese archivo en un proceso. En los sistemas multiprogramados se hace uso de
una cola para cargarlos programas deseados:

1) Seleccionar proceso de la cola de entrada y cargarlo en memoria


2) Mientras el proceso se ejecuta, se acceden a las instrucciones y datos en memoria3) El
proceso termina y su espacio en memoria se declara como libre

4.2 Reubicación de direcciones


Un proceso puede residir en cualquier parte de la memoria. Lo normal es que en las primeras
direcciones de memoria este la parte residente del SO. Desde que tenemos el programa hasta
convertirlo en un ejecutable (compilar o interpretar). Etapas:

1) En tiempo de compilación: se conoce el lugar de la memoria donde sera ejecutado el


procesos

2) En tiempo de carga: cuando el programa esta listo para ejecutar se decide donde se
almacenara en memoria (código reubicable estático)

3) En tiempo de ejecución: con la ayuda de la memoria virtual y dinámicamente se puede


mover de dirección durante la ejecución (código reubicable dinámico)

El Sistema Operativo usando la MMU (Memory Management Unit) proporciona a cada proceso un
espacio de direcciones virtual que ofrece una “vista privada de la memoria”. Estas direcciones
virtual serán luego convertidas en direcciones físicas. De esta forma:

• Los programas pueden ser cargados en cualquier zona libre de la memoria física e incluso
de una región a otra durante la ejecución de los procesos.

• La reubicación de las direcciones virtuales puede hacerse en tiempo de compilación.

• Se puede reducir el consumo de memoria principal compartiendo las regiones de memoria


física asignadas al código y a los datos de solo lectura de los procesos de un mismo
programa.
4.3 Enlazado dinámico y librerías compartida
Enlazado estático: donde las librerías y otros módulos se pueden combinar para formar la imagen
binaria del programa. Enlazado dinámico: esto se pospone hasta la ejecución del programa.

Enlazado dinámico:

Cuando ocurre durante la carga del programa:

• Durante la carga del modulo ejecutable se comprueban sus dependencias y se almacenan


dentro del mismo archivo.
• Las librerías a cargar se cargan y ubican en el espacio de memoria virtual.
• Las referencias del programa a las subrutinas de cada una de las librerías cargadas se
actualizan con la dirección en memoria de las mismas.

Cuando ocurre durante el tiempo de ejecución:

• Durante la ejecución se añade un 'stub'


• Se ejecuta el stub si se invoca la subrutina añadida
• El stub se sustituye por la dirección de la librería

4.4 Paginación
Se trata de un esquema de gestión de la memoria que permite que el espacio de direcciones físico
de un proceso no sea continuo.

4.4.1 Método básico

La memoria física se divide en N marcos y la memoria lógica en N páginas. La paginación es una


forma de reubicación de las direcciones en tiempo de ejecución.

• 1. Cada dirección virtual generada por la CPU es dividida en dos partes: un numero de
pagina 'p' y un desplazamiento 'd'
• 2. El numero de pagina es utilizado por la MMU para indexar la tabla de paginas, que
contiene el numero de marco f de cada pagina en la memoria física
• 3. El numero de marcos es combinado con el desplazamiento para generar la dirección
física que va a ser enviada por el bus de direcciones hacia la memoria.

a) Desde el punto de vista de los procesos

• Si el proceso requiere n paginas, el sistema operativo debe escoger n marcos.


• Los marcos seleccionados son asignados al proceso y cada pagina del proceso es cargada
en uno de dichos marcos.
• La tabla de páginas es actualizada de manera que en la entrada de cada pagina del proceso
se pone el numero de marco correspondiente.
b) Desde el punto de vista del Sistema Operativo

• Conocer que marcos están asignados y a que pagina


• Que marcos están disponibles.

Esto se guarda en la tabla de marcos. Además el SO debe mantener una copia de la tabla de
paginas para cada proceso en el PCB.

c) Tamaño de paginas

A menor tamaño de paginas → Mayor nº de paginas y menor fragmentación interna


A mayor tamaño de paginas → Menor nº de paginas y mayor fragmentación interna

4.4.3 Protección

La protección de las páginas se consigue mediante unos bits de protección asociados a cada
entrada de la tabla de páginas y normalmente almacenados en la misma. Bits de tipo:

• Solo lectura
• Lectura-Escritura
• Solo Ejecución

La MMU comprueba siempre si el tipo de acceso es valido, en caso negativo se genera una
excepción. El tamaño de la tabla de página es dinámica.

4.4.4 Páginas compartidas

Una ventaja de la paginación es la posibilidad de compartir paginas. Para esto basta con que las
paginas compartidas de los distintos procesos tengan asignados un mismo marco.

Si tenemos dos procesos que comparten la misma pagina, existe una mecánica de protección
donde P1 no puede acceder a la información de P2.

4.5 Paginación bajo demanda


Se trata de una técnica donde se implementa la memoria virtual en los sistemas de paginación.

4.5.1 Memoria virtual

Técnica que permite la ejecución de procesos sin que éstos tengan que ser cargados
completamente en memoria principal, sino en secundaria parte de ella. Beneficios:

• Un programa no estará limitado por la cantidad de memoria disponible


• Al mismo tiempo se pueden ejecutar mas programas (aunque con el incremento de uso de
CPU)
4.5.2 Método básico

En la paginación bajo demanda las paginas individuales, en las que se dividen los espacios de
direcciones virtuales de los diferentes procesos pueden ser sacadas de la memoria de manera
temporal y copiadas a un almacenamiento de respaldo, para posteriormente volver a ser traídas a
la memoria cuando son necesitadas por su procesos. A esta técnica se le denomina intercambio o
swapping.

La primera vez que se carga un programa en memoria se tiene que acceder al disco, pero a partir
de la segunda vez este programa se guarda en memoria virtual agilizando el proceso.

Es necesario utilizar un bit de validación: si esta a 1 la pagina es legal y esta en memoria, y si esta a
0 o la pagina es legal pero esta en disco, o la pagina es ilegal.

En la paginación bajo demanda pura la ejecución de un proceso se inicia sin cargar ninguna pagina
en memoria, solamente cuando una pagina es necesaria, obteniendo una mayor velocidad de
inicio de ejecución.

4.5.3 Requerimientos de la paginación bajo demanda

• Tabla de paginas con habilidad para marcar entradas invalidas.


• Disponibilidad de memoria secundaria.
• Posibilidad de reiniciar cualquier instrucción después de un fallo de pagina.

4.5.4 Rendimiento de la paginación bajo demanda

El rendimiento se ve afectado por el numero de fallo de paginas. En el peor de los casos, en cada
instrucción un proceso puede intentar acceder a una página distinta empeorando notablemente el
rendimiento. Sin embargo esto no ocurre puesto que los programas tienden a tener localidad de
referencia.

Bajo demanda: Carga todo al principio, pero luego no se pierde tiempo cargando Bajo
demanda pura: Carga justo lo necesario, pero luego puede perder el tiempo cargando cosas
nuevas

Si se modifican los datos de un programa, la ejecución se esta realizando siempre en memoria


RAM o en memoria virtual, y nunca se escribe en disco. De esta forma se evita acceder una y otra
vez al disco para modificar los datos perdiendo tiempo
innecesariamente. El inconveniente es que si por ejemplo se va la luz... perdemos lo que hemos
hecho si no lo hemos guardado o cerrado correctamente.

4.5.5 Copy-on-Write

Durante la escritura permite la creación rápida de nuevos procesos minimizando la cantidad de


paginas que deben ser asignadas a estos.

Se utiliza llamadas del tipo fork. La idea general es compartir las paginas entre el proceso padre y
el proceso hijo.
4.5.6 Archivos mapeados en memoria

Los archivos mapeados en memoria permiten acceder a un archivo como parte del espacio de
direcciones virtuales de un proceso.

4.5.7 Reemplazo de página

Cuando nos quedamos sin marcos libres, es necesario escoger alguna pagina, e intercambiarla con
el disco y utilizar el marco de la misma para cargar la nueva pagina. Para ello necesitamos de un
algoritmo de asignación de marcos y otro de reemplazo de pagina.

a) Algoritmos de reemplazo de paginas

• Óptimo: seleccionar siempre la pagina que mas se va a tardar en iniciar.


• FIFO: reemplazar la pagina que hace mas tiempo que fue cargada.
• LRU: reemplazar la pagina que hace mas tiempo que fue utilizada suponiendo que si hace
mucho tiempo que no se utilizo es probable que no se vuelva a utilizar.
• LFU y MFU: reemplazar la pagina que ha sido usada con mayor o menor frecuencia
utilizando contadores.

b) Algoritmos de buffering de paginas

Junto a los algoritmos de reemplazo también se puede utilizar los algoritmos de buffering de
paginas:

• Se puede mantener una lista de marcos libres. En caso de producirse un fallo de pagina, se
escoge un marco de la lista y se carga la pagina, al tiempo que se selecciona una pagina
como víctima y se copia al disco.
• Una mejora de lo anterior seria recordar que pagina estuvo en cada marco antes de que
este pasara a la lista de marcos libres.
• Se puede mantener una lista de paginas modificadas e ir escribiéndolas cuando el
dispositivo del espacio de intercambio no este ocupado.

c) Reemplazo local frente a global

En el reemplazo local solo se pueden escoger marcos de entre los asignados al proceso:

• El numero de marcos asignados a un proceso no cambia por que ocurran fallos de paginas.
• El mayor inconveniente es que un proceso no puede hacer disponible a otros procesos los
marcos de memoria que menos usa.

En el reemplazo global se pueden escoger marcos de entre todos los del sistema
independientemente de que estén asignados a otro proceso o no.

• El numero de marcos asignados a un proceso puede aumentar si durante los fallos de


pagina se seleccionan marcos de otros procesos.
• El mayor inconveniente es que los procesos no pueden controlar su tasa de fallos de
pagina.
El reemplazo global es más eficaz que el local.

4.5.8 Asignación de marcos de paginación

Es necesario determinar un sistema para asignar marcos a los diferente procesos. Se podrían
repartir equitativamente los marcos, pero una buena idea mas eficaz seria calcular el mínimo
numero de marcos que realmente necesita cada proceso.

4.5.9 Hiperpaginación

Se dice que un proceso sufre de hiperpaginación cuando gasta más tiempo paginando que
ejecutándose.

a) Causas

Puede ocurrir por múltiples causas, pero estas tienen en común una asignación insuficiente de
marcos libres.

b) Soluciones

• Utilizar un algoritmo de reemplazo local: de esta forma un proceso que hiperpagina no


puede afectar a otro.
• Proporcionar a un proceso tantos marcos como les haga falta: siempre es necesario
asignarle un mínimo de marcos para evitar este problema, para estimar dicho mínimo se
utiliza el modelo de conjuntos de trabajo.

c) Modelo del conjunto de trabajo El

modelo de localidad estable que:

• Una localidad es un conjunto de paginas que se utilizan juntas.


• Cuando un proceso se ejecuta se va moviendo de una localidad a otra.

4.5.10 Otras consideraciones

a) Prepaginado

Se trata de una técnica que consiste en cargar múltiples paginas junto con la pagina demandada
en cada fallo de pagina. Esas otras paginas se escogen según la hipótesis de poder necesitarse a
corto plazo. Se suele utilizar:

• En la paginación bajo demanda pura: donde el sistema sabe de antemano que cuando se
inicia un proceso, siempre fallan las primeras paginas.
• En el acceso secuencial a archivos mapeados en memoria.

c) Tamaño de las paginas

Con paginas grandes:


• Se consiguen menos fallos de paginas
• Se consiguen tablas de paginación mas pequeñas
• La E/S para acceder al contenido de cada pagina requiere menos tiempo Con paginas

pequeñas:

• Se consigue tener menos fragmentación interna y por tanto un mejor aprovechamiento de


la memoria.
• Se obtiene mejor resolución para asignar y transferir al disco solo la memoria que
realmente necesitamos.

Hoy en día se utilizan tamaños de paginas de entre 4 y 8 KB. Aunque muchas aplicaciones hacen
uso de mayor tamaño de paginas.

e) Interbloqueo de E/S

Es posible que una operación de E/S puede llevar una acción sobre una pagina de un proceso
diferente (suele pasar en el proceso de reemplazo). Para evitarlo:

• Se puede utilizar la memoria del núcleo como además en las operaciones de E/S.
• Cada pagina puede tener un bit de bloqueo que se utilizan para indicar que paginas no
pueden ser seleccionadas para reemplazo.

Edemas los bits de bloqueo se pueden utilizar para:

• Bloquear las paginas del núcleo para evitar que sean reemplazadas.
• Bloquear las páginas que acaban de ser cargadas.
• Bloquear aquellas paginas importantes para evitar que sean reemplazadas

4. 6 Interfaz de gestión de la memoria


El sistema operativo y/o las librerías de los lenguajes de programación proporcionan un
conjunto de llamadas del sistema que permiten al programador utilizar la gestión de memoria
para sus fines. Así el programador puede realizar mapeos del espacio. Mmap() permite:

• Reservar porción de espacio de direcciones virtual del proceso.


• Establecer permisos (lectura, escritura, ejecución).
• Mapear archivos en regiones del espacio de direcciones virtual.

4.6.3 Fragmentación

No se produce fragmentación interna en esta estrategia pero si externa. La fragmentación externa


ocurre cuando hay suficiente espacio libre para satisfacer una petición pero el espacio no es
contiguo. El espacio queda fraccionado en un gran numero de huecos.
TEMA 5: GESTIÓN DE
ALMACENAMIENTO
5.1 Dispositivos de almacenamiento
5.1.1 Discos magnéticos

Es el tipo principal. Cada unidad esta compuesta por una serie de platos circulares, utilizándose
unas cabezas de lectura. La superficie de cada plato esta dividida en pistas circulares, cada una de
las cuales se dividen en sectores. El conjunto de pistas formado por todas aquellas que están
situadas en la misma posición en los distintos platos se denomina cilindro.

5.1.2 Discos ópticos

Discos circulares, cuyos datos se leen mediante la incidencia de un láser sobre una de las caras que
lo componen. La información se almacena de forma continua en espiral, desde el interior hasta el
exterior. Debido a esto el acceso aleatorio a los datos es mucho más lento que otras tecnologías.

5.1.3 Memorias de estado sólido

(USB, SSD...). Este tipo de memorias flash almacena la información como en un vector lineal.

5.2 Archivos y sistemas de archivos


Un archivo es una colección de información relacionada cuya estructura y el significado de los
datos lo define su creador. Desde el punto de vista del usuario, es la unidad más pequeña de
almacenamiento.

El sistema operativo debe ofrecer una visión lógica uniforme de todos los sistemas de
almacenamiento, de ahí los sistemas de archivos. Este proporciona los mecanismos par el
almacenamiento de datos y programas.

Los sistemas de archivos se descomponen en:

• Una colección de archivos: cada uno almacenando una serie de datos relacionados.
• Una colección de estructuras de meta datos: contienen información relativa de los
archivos.

5.3 Volúmenes de datos


Utilizaremos el término volumen para referirnos a un espacio de almacenamiento que alberga un
sistema de archivos. Los dispositivos se pueden dividir en múltiples sistemas de archivos, existen
diferentes tecnologías para esto.
5.3.1 RAID

Permite combinar varios discos duros para mejorar las prestaciones y fiabilidad. Se definen varios
niveles de RAID, siendo los mas comunes:

• RAID 0: se distribuyen los datos equitativamente en bloques de tamaño fijo entre dos o
más discos, sin incluir ningún tipo de información redundante, permitiendo leer y escribir
mas datos al mismo tiempo.

• RAID 1: Se crea una copia exacta de los datos en dos o mas discos. SE aumenta así la
fiabilidad, ya que para que uno falle, tienen que fallar todos. El rendimiento de las
operaciones de lectura se incrementa, ya que los datos están disponibles en todos los
discos.

• RAID 5: se distribuyen los datos equitativamente en bloques de tamaño fijo entre dos o
mas discos y se utiliza uno adicional para almacenar la información de paridad de los
bloques en una misma división teniendo en cuenta que: cada vez que se escribe un bloque
de datos hay que actualizar el bloque de paridad, los bloques de paridad no se leen
durante las lecturas de datos, y desde que fallen 2 discos falla todo el sistema.

• RAID 6: Se utiliza la misma estrategia que RAID 5 pero utilizando dos bloques de paridad.

• Conjunto con niveles anidados: combinando los diferentes niveles de RAID comentados.

Los RAID pueden implementarse:

• En el hardware de la controladora de disco: solo los discos conectados a esta pueden


formar un conjunto. Es muy eficiente, sin embargo son mucho mas caras.

• Dentro del sistema operativo en lo que se denomina el software de gestión de


volúmenes: Son mas lentas por lo que no se soportan todos los niveles disponibles.

5.3.3 Volúmenes dinámicos

Se pueden encontrar algunas restricciones:

• El limitado numero de particiones diferentes que puede contener un mismo dispositivos


• Limitaciones o imposibilidad de redimensionar las particiones
• Imposibilidad de crear particiones que hagan uso de regiones libres en diferentes
dispositivos.

Para arreglar esto, los sistemas operativos incluyen un software de gestión de volúmenes que
corrigen estas limitaciones.
5.4 Sistemas de archivos
5.4.1 Estructura de un sistema de archivos

Un sistema de archivos esta compuesto de varios niveles diferentes. Cada nivel utiliza las
funciones de los niveles inferiores. Desde el mas bajo hasta el mas alto:

• Control de E/S: está compuesto por los controladores de dispositivo encargados de


transferirla información entre la memoria principal y el disco.

• Sistema básico de archivos: se encarga de enviar comandos genérico al controlador de


dispositivo apropiado con el fin de leer y escribir bloques.

• Modulo de organización de archivos: tiene conocimientos de los archivos y se encarga de


traducir las direcciones lógicas de bloque en las direcciones físicas del bloque que serán
enviadas al sistema básico de archivos.

• Sistema lógico de archivos: gestiona los meta datos que incluyen toda la estructura del
sistema de archivos excepto todos los datos de los archivos. Un bloque de control de
archivo o FCB contiene la información acerca del archivo.

Windows: FAT, FAT32 y NTFS Linux:


ext2, ext3, ext4

5.4.2 Estructura de metadatos

Estructuras en discos de uso mas común:

• Un bloque de control de arranque: suele ocupar el primer bloque de cada volumen y que
contiene la información necesaria para iniciar un sistema operativo a partir de dicho
volumen.

• Un bloque de control de volumen: que contiene todos los detalles acerca del volumen,
como: nº máximo de bloques, tamaño de bloques... En Linux = Superbloque y en NTFS =
Tabla maestra de archivos (MTF).

• Un FCB por cada archivo donde se almacenan numerosos detalles sobre el mismo. Los
FCB se almacenan en una tabla llamada directorio de dispositivo o tabla de contenidos del
volumen. En Linux se llama inodo.

• Una estructura de directorios para organizar los archivos.

La información almacenada en memoria se utiliza para mejorar el rendimiento, las estructuras


existentes en la memoria pueden incluir:

• Una tabla de montaje en memoria que contiene información acerca de cada volumen
montado.
• Una cache en memoria de la estructura de directorios que almacena la información
relativa a los directorios a los que se han accedido recientemente.

• La tabla global de archivos abiertos que contiene una copia del FCB por cada archivo
abierto en el sistema.

• La tabla de archivos abiertos de cada proceso contiene un puntero a la entrada apropiada


de la entrada global de archivos abiertos.

5.4.3 Montaje de sistemas de archivos

Los sistemas de archivos deben montarse, este proceso se realiza de la siguiente manera:

1. Al sistema operativo se le deba proporcionar el nombre del dispositivo y el punto de


montaje (ubicación dentro de la estructuras de directorios).

2. El SO verifica que el dispositivo contiene un sistema de archivos valido. Para ello lee
el bloque de control de volumen y comprueba que sea valido.

3. El SO registra en la tabla de montaje y en la estructura de directorios en memoria


que hay un sistema de archivos montado en la ubicación especificada.

5.4.4 Archivos

Cada sistema de archivos contiene una tabla donde cada entrada almacena un bloque de control
de archivo o FCB por archivo.

a) Atributos de archivos

• Nombre
• Identificador
• Tipo
• Ubicación
• Tamaño
• Protección • Fecha

b) Operaciones con los archivos

Llamadas al sistema para: crear, escribir, leer, reposicionar, borrar y truncar archivos. c) Tipos

de archivos

• MSDOS y Windows: el tipo de archivos se incluye como parte del nombre del archivo.
• Mac OS X: cada archivo tiene un atributo que almacena el tipo.
• UNIX: se utiliza un numero mágico almacenado al principio de algunos archivos para
indicar el tipo del mismo.
5.4.4 Estructura de directorios

Habiendo millones de archivos en disco, es necesario realizar una organización de archivos


mediante directorios.

a) Directorios de un nivel

Todos los archivos están contenidos en un único directorios, teniendo como limitaciones:

• Cuando hay muchos usuarios, es muy difícil escoger nombres diferentes para sus archivos
dentro del mismo directorio.
• Incluso para una sola persona puede ser difícil organizar muchos archivos.

Utilizado en MSDOS.

b) Directorio de dos niveles

Cada usuario tiene su propio directorio de archivos de usuario (UFD) que cuelga del directorio
maestro de archivos (MFD). Al iniciar sesión el MDF apunta al UFD solicitado.

Desventajas:

• La estructura aísla a los usuarios. La solución es utilizar nombres de ruta. Si se quiere


utilizar a otro usuario es necesario utilizar un nombre de ruta.
• Cambien es difícil par un usuario mantener todos sus datos organizados.

c) Directorios con estructura de árbol

Los usuarios pueden crear sus propios subdirectorios para organizar sus archivos mas
eficientemente. Cada proceso tiene un directorio actual, por lo que para buscar un archivo en otro
directorio tiene dos opciones: o utilizar el nombre de ruta absoluto o el nombre de ruta relativo.

d) Directorios en grafo acíclico

Se permite que un archivo o subdirectorio este simultáneamente en varios directorios, por lo que
se puede compartir mas fácilmente un mismo archivo ya que este tiene diferentes rutas.

Se utilizan:

• Enlaces simbólicos: pseudo archivo en el directorio que contiene una ruta a otro archivo
• Enlace estricto: se duplica la entrada del directorio en varios, pudiéndose acceder al
archivo desde diferentes rutas

Desventajas:

• Búsqueda: si buscamos un archivo podríamos realizar la misma operación múltiples veces.


• Eliminación:
Enlace simbólico: no se borrar el archivo original.
Archivo original: quedaran los enlaces simbólicos, y es necesario eliminarlos
mediante el FCB.

NO PUEDEN TENER CICLOS!!!!

e) Directorios en forma de grafo general

Admiten ciclos, provocando que en búsquedas recursivas podamos vernos en un bucle.

5.5 Compartición de archivos


5.5.1 Múltiples usuarios y protección

Para implementar la compartición, es necesario ajustar unos mecanismos de protección. Uno de


los mas importantes es el enfoque de propietario y grupo:

• El propietario de un archivo es el usuario que puede cambiar los atributos y conceder el


acceso. Se trata del usuario que dispone del mayor grado de control sobre el archivo.

• El grupo es un conjunto de usuarios que pueden compartir el acceso al archivo. El


propietario del archivo es quien define que operaciones pueden ser ejecutadas por los
miembros del grupo.

Todo esto se almacena en el FCB.

Lo normal es asociar cada archivo o directorio con una lista de control de acceso (ACL). Que
especifique los nombres de usuario o grupos y los tipos de acceso para cada uno.

Una alternativa es utilizar listas de control de acceso condensadas. Clasificando a cada usuario en
tres grupos: propietario, grupo, y todos.

Actualmente, se combinan ambos métodos.

5.5.2 Semántica de coherencia

Especifica cuando las modificaciones que un usuario realice en los archivos serán observables por
otros usuarios.

a) Semántica UNIX

• Las escrituras en un archivo abierto por parte de un proceso son visibles inmediatamente
para los otros usuarios que hayan abierto ese mismo archivo.
• Existe un modo de compartición que permite a los procesos compartir el puntero de
ubicación actual dentro del archivo.

b) Semántica de sesión

Suponiendo que una sesión de archivo es el conjunto de operaciones entre las llamadas open() y
close():
• Las escrituras en un archivo abierto por parte de un proceso no son visibles
inmediatamente para los otros usuarios que hayan abierto ese mismo archivo.
• Una vez que se cierra un archivo, los cambios realizados en el son visibles únicamente en
sesiones que comiencen posteriormente. Las sesiones ya abiertas sobre el archivo no
relejaran dichos cambios.

c) Semántica de archivos compartidos inmutables

Cuando un archivo es declarado como compartido por su creador ya no puede ser modificado: su
nombre no se puede reutilizarse y su contenido no puede ser modificado.

5.5.3 Bloqueos de archivos

El objetivo es impedir que otros procesos puedan acceder a un archivo bloqueado.


Siendo bastante útil cuando se comparten archivos entre varios procesos. Tenemos:

• Bloqueo compartido: tipo de bloqueo que puede ser adquirido concurrentemente por
varios procesos.
• Bloqueo exclusivo: solo puede ser adquirido por un proceso cada vez.

Además los Sistemas operativos también pueden ofrecer diferentes mecanismos:

• Obligatorios: después de que un proceso adquiera un bloqueo exclusivo, el sistema


operativo impedirá a todos los demás procesos que accedan al archivo bloqueado.
• Sugeridos: el sistema operativo solo impedirá que accedan al archivo bloqueado aquellos
procesos programados para adquirir el bloqueo explícitamente.

5.5.4 Coherencia

Parte de los metadatos del sistema de archivos se copia en memoria principal para acelerar los
accesos. Esta información estará normalmente más actualizada que la información en disco. El
problema surge ante un fallo del sistema.

a) Comprobación de coherencia

Comprueba la estructura de metadatos y trata de corregir todas las incoherencias que detecte.

b) Soft Updates

Cuando se monta un sistema de archivos con la opción soft updates el sistema operativo
desactiva la escritura síncrona de los metadatos, permitiendo que estos sean escritos cuando los
algoritmos de gestión de la cache lo consideren necesario, pero se impone cierto orden en el que
dichas operaciones de escritura deben ser realizadas.

c) Sistemas de archivos basados en registro

También conocido como journaling, todos los cambios en los metadatos se describen
secuencialmente en un registro.

Common questions

Con tecnología de IA

Implementing a layered operating system structure involves splitting the system into different layers, each only interacting directly with the layer beneath it and providing services to the one above. This modular approach simplifies maintaining and updating the system as each layer can be developed or modified independently . However, defining and designing these layers with clear responsibilities is complex, as each must sufficiently hide its data structures and operations from other layers, creating potential inefficiency in communication and usage of resources . Such complexity and overhead can lead to performance issues, making it difficult to achieve efficient operation, especially in systems requiring high levels of performance .

A microkernel architecture removes non-essential components from the kernel and operates them in user space, minimizing kernel functions to essential management tasks and facilitating robust, maintainable systems through message passing . Despite its clarity and flexibility, this structure suffers from high communication overhead, reducing performance. In contrast, a modular architecture divides the kernel into dynamic modules, each responsible for different tasks, allowing for efficiency and easy maintainability because modules can be loaded as needed . However, it retains a monolithic structure at its core, somewhat compromising robustness compared to the microkernel approach. The trade-offs involve balancing performance against system robustness and ease of maintaining and updating the system .

The client-server model in distributed systems delegates specific functions to servers which fulfill requests made by clients, effectively utilizing networked desktops and other devices . As desktop systems became more powerful and cost-effective, they provided a viable alternative to mainframe systems, which were traditionally used for centralized computing tasks. Mainframes demanded significant investment and maintenance, whereas distributed systems can leverage existing infrastructure, reducing costs and allowing easier scalability and flexibility, which has significantly contributed to the decline of mainframe usage .

The operating system plays a critical role in ensuring process protection and isolation, primarily through implementing virtual memory management and user mode restrictions. Each process is given a space of virtual addresses, separate from the actual physical memory mappings, which the Memory Management Unit (MMU) translates and manages, ensuring that direct access to physical memory is controlled . Furthermore, the system uses dual-mode operation, where processes execute in user mode with limited access, and the OS manages the transition to privileged mode for accessing critical system resources. This prevents processes from interfering with each other’s operations or the operating system itself, maintaining stability and security .

UNIX embodies effective time-sharing characteristics by integrating several critical features: advanced memory management and protection mechanisms that support multiple concurrent users; a well-designed CPU scheduler that transparently switches between processes using periodic interrupts, giving the illusion of parallel execution . Additionally, UNIX provides synchronization and communication facilities, essential for multi-user interactions, and disk management systems that ensure efficient file system access . Its architecture supports dynamic task allocation and rapid context switching, core aspects that facilitate efficient process management in time-sharing systems .

Smaller page sizes result in less internal fragmentation as the memory is divided into smaller units, leading to more efficient use of memory. However, smaller pages mean a higher number of pages, which requires more management and overhead. Larger pages, in contrast, cause more internal fragmentation as unused portions of memory are wasted, but they reduce overhead related to page management and can lead to fewer page faults, improving I/O performance during paging operations .

"Copy-on-Write" is a memory management technique used during process creation to enhance performance and memory usage efficiency. When a process forks to create a child, both processes initially share the same pages of memory. If either process modifies any shared pages, the system creates separate copies for each process, thus "copying" only when needed . This allows for fast process creation as memory duplication is minimized, reducing overhead and enhancing performance, as only modified pages are duplicated rather than the entire memory space .

Swapping in demand paging systems allows for the replacement of currently inactive memory pages with needed ones, particularly from secondary storage to RAM, when required by a process. This enables the execution of processes larger than the available physical memory, enhancing system flexibility . However, excessive swapping can lead to performance degradation, known as "thrashing," where more time is spent exchanging pages than executing processes, significantly affecting system responsiveness. Keeping track of page validity and minimizing swap count are crucial to maintaining optimal system performance . Efficient page-replacement algorithms and adequate memory allocation to processes can mitigate thrashing and improve overall performance .

Global page replacement strategies allow a process to select a replacement page frame from any available in the system, leading to potential efficiency in system-wide resource allocation, as frames can be dynamically allocated where needed most . However, this can result in higher page fault rates, as processes cannot control frame availability, affecting process-specific performance. Local page replacement restricts selection to frames allocated to a process, thus preserving its working set stability, though it might lead to suboptimal usage of system-wide resources as frames remain tied to particular processes regardless of current demand . The trade-offs involve balancing immediate process needs with overall system efficiency, impacting performance and resource allocation .

Time-sharing systems enable multiple users to interact directly with the system while their programs are executing, contrasting with batch or multiprogrammed systems by using periodic interrupts (every 10ms) which allow the CPU to switch processes rapidly. This switch creates the perception that processes are working concurrently, although in reality they are just sharing time slices of the CPU . The operating system performs several central roles in these systems: memory management and protection, virtual memory techniques, CPU scheduling, and mechanisms for synchronization and communication are crucial for efficiently managing multiple active processes .

También podría gustarte