Windows es una familia de sistemas operativos desarrollados y comercializados por Microsoft. Existen versiones para hogares, empresas, servidores y dispositivos móviles, como computadores de bolsillo y teléfonos inteligentes. Hay variantes para procesadores de 16, 32 y 64 bits.
Incorpora diversas aplicaciones como Internet Explorer, el Reproductor de Windows Media, Windows Movie Maker, Windows Mail, Windows Messenger, Windows Defender, entre otros.
Desde hace muchos años es el sistema operativo más difundido y usado del mundo; de hecho la mayoría de los programas (tanto comerciales como gratuitos y libres) se desarrolla originalmente para este sistema.

Origen de Windows

Windows 1 : Primera Versión de Microsoft Windows. Lanzado en 1985. Tomó un total de 55 programadores para desarrollarlo y no permitía ventanas en cascada. Microsoft comenzó el desarrollo del "ADMINISTRADOR DE INTERFAZ", que posteriormente derivó en Microsoft Windows en Septiembre de 1981. La interfaz inicial tenía menús ubicados en la parte inferior de la ventana y la interfaz sufrió un cambio en 1982 cuando se diseñaron los ahora comunes menús desplegables. Esto ocurrió después de Apple Lisa, un experimento de Apple por llevar una interfaz gráfica al usuario. Sin embargo, ocurrió antes de Macintosh. Windows prometía una interfaz gráfica fácil de usar y la utilización de gráfica independiente del dispositivo, así como el soporte de multitarea. Las siguientes fueron las principales características de Windows 1.0:
Interfaz gráfica con menús desplegables, ventanas en cascada y soporte para mouse.
Gráficos de pantalla e impresora independientes del dispositivo.
Multitarea cooperativa entre las aplicaciones Windows.

Windows 2 : Segunda versión de Microsoft Windows, lanzada en 1987. Windows 2 tenía más características que Windows 1, tales como iconos y ventanas traslapdas. Cuando se lanzó Windows/386, Windows 2 fue renombrado como Windows/286. Nacen aplicaciones como Excel, Word for Windows, Corel Draw!, Ami, PageMaker). Las siguientes fueron las principales características de Windows 2.0:
Ventanas traslapadas
Archivos PIF para aplicaciones DOS
Windows/386: En 1987 Microsoft lanzó Windows/386. A pesar de ser equivalente a su hermano Windows/286, mientras corrían aplicaciones Windows, éste proveía la capcidad de ejecutar múltiples aplicaciones DOS simultáneamente en memoria extendida Las siguientes fueron las principales características de Windows/386:
Múltiples máquinas virtuales DOS con multitarea.

Windows 3.0: Una completa reconstrucción de Windows con muchas nuevas facilidades tales como la habilidad de direccionar más allá de 640k. Fue lanzado en 1990, y vendió más de 10 millones de copias. Las siguientes fueron las principales características de Windows 3.0:
Modo estándard (286), con soporte de memoria grnade (large memory).
Medo Mejorado 386, com memoria grande y soporte de múltiples sesiones DOS.
Se agregó en Administrador de Programas y de Archivos
Soporte de Red
Soporte para más de 16 colores.
Soporte para combo boxes, menús jerárquico y los archivos .INI privados para capa aplicación empezaron a cobrar más valor.

Windows 3.1: Una versión de Windows con muchas mejoras a Windows 3.0. Incluye soporte para fuentes True Type y OLE. Esta versión fue testigo de la pérdida del modo real, lo cual significa que no corre en procesadores Intel 8086. Las siguientes fueron las principales características de Windows 3.1:
No hay soporte para el modo Real (8086).
Fuentes TrueType.
Multimedia.
OLE - Object Linking and Embedding
Capacidad para que una aplicación reinicie la máquina.
Soporte de API de multimedia y red.

Windows 3.11: Una actualización gratis de Windows 3.1, que contenía parches para errores menores.
Windows for Workgroups 3.1: Una versión de Windows 3.1 que trabja en reed. Aunque Windows 3.1, por sí solo, puede trabajar en red, la instalación y configuración se mejoró con Windows for Workgroup. Proveía capacidades para compatición punto a punto de archivos e impresoras. Los archivos podía ser accedidos desde otras máquinas corriendo DOS o Windows. Windows for Workgroups inclure dos aplicaciones adicionales: Microsoft Mail, para envió de correo electrónico, y Schedule+, una agenda para trabajo en grupo.
Windows for Workgroups 3.11: Una significatica mejora para Windows for Workgroup 3.1 agregando acceso a archivo de 32 bits y capacidad de fax.
Windows 95:(Win95) Sucesor de Windows 3.11 para PC's IBM. Se le conoció cómo "Chicago" durante su desarrollo. Lanzado el 24 de Agosto de 1995. En contraste con las anteriores versiones de Windows, Win95 es un sistema operativo más que una interfaz gráfica de usuario que corre sobre DOS. Provee soporte para aplicaciones de 32 bits, multitarea con desalojo, soporte de red incorparado (TCP/IP,IPX, SLIP, PPP, y Windows Sockets). Incluye MS-DOS 7.0 como una aplicación. La interfaz gráfica, aunque similar a las previas versiones, fue significativamente mejorada.
Win32s : Win32s es un conjunto de librerías para Windows 3.1, la cual posibilita a los usuarios de correr la mayorías de las aplicaciones de Windows NT en Windows 3.1. Si bien permite ejecutar aplicaciones escritas para Windows NT, Win32s no da soporte para multitares con desalojo en Windows 3.1
Windows 98: Nueva versión del sistema operativo Windows. Podría decirse que es una compilación de características. Muchas de estas características ya se encontraban en Internet Explorer 4.0 (al ser instalado con la actualización de escritorio) y en Windows 95 OSR-2. Permite soporte para la FAT32 (al igual que Win95 OSR-2) y el Active Desktop (de IE 4). Soporte para USB y DVD.
Windows NT:(Windows New Technology, NT). El sistema operativo de 32 bits desarrollado originalmente para que sea OS/2 3.0 antes que Microsoft e IBM discontinuaran su trabajo con OS/2. NT se diseñó para estaciones de trabajo avanzadas (Windows NT 3.1) y para servidores (Windows NT 3.1 Advanced Server). El primer lanzamiento fue Windows NT 3.1 en Septiembre de 1993. A diferencia de Windows 3.1, que era una interfaz gráfica que corría sobre MS-DOS, Windows NT es un sistema operativo por sí solo. El usuario lo ve como Windows 3.1, pero tiene multi-procesos real, seguridad y protección de memoria. Está basado en un microkernel, con un direccionamiento de hasta 4GB de RAM,soporte para sistemas de archivos FAT,NTFS y HPFS, soporte de red incorporado, soporte multiprocesador, y seguridad C2 NT está diseñado para ser independiente del hardware. Una vez que la parte específica de la máquina - la capa HAL (Capa de Absttracción de Hardware)- ha sido llevada a un máquina particular, el resto del sistema operativo debería compilar teóricamente sin alteración. Se lanzó una versión de NT para correr en máquinas Alpha de DEC. NT necesitaba un 386, con al menos 12MB de RAM (preferible 16MB), y al menos 75MB de disco duro libre.
Windows NT 3.1: Primera versión de Windows NT (WNT). Existe una leyenda popular que dice que la persona responsable del desarrollo de VMS en VAX de DEC fue también responsable de Windows NT, y si cada letra de VMS es avanzada a la siguiente letra del abecedario se llega a WNT.
Windows NT 3.5: Una versión mucho más mejorada de NT 3.1. Desde estas versión Windows NT se vende como "Windows NT 3.5 Workstation" y "Windows NT 3.5 Server".
Windows NT 4: La nueva versión de Windows NT, denominada "Cairo" en su etapa de desarrollo. Presenta las mismas características de la interfaz de Windows 95. Tiene algunas modificaciones en su diseño con respecto a las porciones GDI y USER del sistema operativo.
Windows ME: La edición del Milenio (Milenium Edition) es una actualización de Windows 98 que toma algunas características de Windows 2000, pero orientada a la computación casera o de pequeños negocios. Mejoró en algunos aspectos de seguridad y funcionalidad, y se hizo más atractiva al agregar o aumentar capacidad en:
Importación/exportación y edición de clips de vídeo.
Mejor organización de información procedente de Internet (fotos, textos, clips, música, etc.).
Más asistentes para tareas que pueden ser difíciles para personas con poca experiencia en computación, por ejemplo, conectar dos computadoras en red.
Menos problemas de administración de memoria. Esto se traduce en menos bloqueos del equipo (system crash).
Mejor soporte para hardware plug and play de nueva generación.
Mejora en rendimiento al transferir datos via Internet o Intranet.
Sin embargo, los usuarios de WME notarán menor compatibilidad con programas antiguos de ambiente MS-DOS (algunos juegos) o inclusive con algunos programas de 16 bits para versiones anteriores de Windows. También presenta algunos problemas con hardware antiguo del cual no es posible obtener actualización de controladores.
Windows CE: Un sistema operativo de la familia Windows y que fue el primero en no estar orientado a los equipos de escritorio. Los dispositivos en los que Windows CE presta servicios son Handheld PC y PalmSize PC. Windows CE también ha permitido la creación de un nuevo sistema denominado AutoPC, que consiste de un PC empotrado en un automóvil que va ubicado en donde actualmente va una radio. Permite controlar la radio, CD y revisar el correo electrónico. Windows CE también permite la creación de aplicaciones en tiempo real.
Windows 2000: Un cambio de nomenclatura para el sistema NT. Así, lo que habría sido Windows NT 5.0 se conoce ahora como Windows 2000. Hasta la versión 4.0 Windows NT se comercializaba en tres versiones: Workstation, Server, y Advanced Server. Ahora la nomenclatura es la siguiente:
Windows 2000 Professional, anteriormente NT Workstation.
Windows 2000 Server, anteriormente NT Server.
Windows 2000 Advanced Server, anteriormente NT Advanced Server.
Windows 2000 Datacenter Server. Producto nuevo y que es el nuevo y más poderoso sistema operativo de Microsoft con posibilidad de hasta 16 procesadores simétricos y 64 GB de memoria física.
Dentro de las características nuevas que incluye, se pueden citar:
Verdadero soporte para Plug and Play.
Servicios de Directorio
Mayor integración con Internet e Intranet.
Windows XP: La principal característica del nuevo Windows es su nueva apariencia. El mayor cambio en WXP es cosmético, y además es el que mayores requisitos de sistema necesita. Lo mínimo es un Pentium II (o equivalente) con 128 MB de RAM, sin embargo se recomienda un Pentium IV con 256 MB de RAM. Otras nuevas características están enfocadas a hacerlo más fácil de utilizar (según Microsoft):
Un nuevo menú inicio, que ofrece una única fuente para lanzar aplicaciones, buscar documentos y configurar.
Una barra de tareas que permite agrupar ventanas abiertas, facilitando el trabajar con múltiples aplicaciones al mismo tiempo.
Menos "amontonamiento" y mensajes más significativos en la barra de tareas.
Un nuevo panel de navegación que muestra las tareas y los detalles, facilitando el trabajo con archivos y carpetas.
Una nueva organización del Panel de Control que permite categorizar los elementos de configuración y las herramientas.
Características integradas para quemar CD´s, facilitando el trabajo con su grabador CD-R/CD-RW en pasos muy sencillos.

Windows 7: (anteriormente conocido con nombre código Blackcomb, y luego Vienna) es la última versión de Microsoft Windows, un sistema operativo producido por Microsoft Corporation para uso en PCs, incluyendo equipos de escritorio en hogares y oficinas, Notebooks, tablet PCs, netbooks y equipos media center.
A diferencia de su predecesor, Windows 7 es una actualización incremental del núcleo NT 6.0, esto con la meta de mantener cierto grado de compatibilidad con aplicaciones y hardware en los que su antecesor Windows Vista ya era compatible. Las metas de desarrollo para Windows 7 fueron el mejorar su interfaz para hacerla más amena al usuario, con nuevas características que permiten hacer tareas de una manera más fácil y rápida, al mismo tiempo en que se realizaron esfuerzos para lograr un sistema más ligero, estable y rápido.

Instalacion de Windows









Dispositivos:
Los dispositivos son regímenes definibles, con sus variaciones y transformaciones. Presentan líneas de fuerza que atraviesan umbrales en función de los cuales son estéticos, científicos, políticos, etc. Cuando la fuerza en un dispositivo en lugar de entrar en relación lineal con otra fuerza, se vuelve sobre sí misma y se afecta, no se trata de saber ni de poder, sino de un proceso de individuación relativo a grupos o personas que se sustrae a las relaciones de fuerzas establecidas como saberes constituidos.
· LOS DISPOSITIVOS DE ENTRADA/SALIDA:
Son aquellos que permiten la comunicación entre la computadora y el usuario.
· DISPOSITIVOS DE ENTRADA:
Son aquellos que sirven para introducir datos a la computadora para su proceso. Los datos se leen de los dispositivos de entrada y se almacenan en la memoria central o interna. Los dispositivos de entrada convierten la información en señales eléctricas que se almacenan en la memoria central.
Los dispositivos de entrada típicos son los teclados, otros son: lápices ópticos, palancas de mando (joystick), CD-ROM, discos compactos (CD), etc. Hoy en día es muy frecuente que el usuario utilice un dispositivo de entrada llamado ratón que mueve un puntero electrónico sobre una pantalla que facilita la interacción usuario-máquina.
· DISPOSITIVOS DE SALIDA:
Son los que permiten representar los resultados (salida) del proceso de datos. El dispositivo de salida típico es la pantalla o monitor. Otros dispositivos de salida son: impresoras (imprimen resultados en papel), trazadores gráficos (plotters), bocinas, entre otros...
Los drivers
Un controlador de dispositivo, llamado normalmente controlador (en inglés, device driver) es un programa informático que permite al sistema operativo interactuar con un periférico, haciendo una abstracción del hardware y proporcionando una interfaz posiblemente estandarizada para usarlo. Se puede esquematizar como un manual de instrucciones que le indica cómo debe controlar y comunicarse con un dispositivo en particular. Por tanto, es una pieza esencial, sin la cual no se podría usar el hardware. Un driver técnicamente es un software o programa que sirve de intermediario entre un dispositivo de hardware y el sistema operativo.
Además, Los fabricantes suelen distribuir los controladores más actuales y también los más adecuados para cada versión del sistema operativo en disquete o en CD-ROM, o bien incluir la posibilidad de descargarlos desde su sitio Web.
Un ejemplo indispensable que nos aclare un poco el tema, se tiene que Cuando se compra algo nuevo, por ejemplo una impresora, y se conecta a una PC, el sistema operativo necesita los drivers de la impresora para poder controlarla. Si no se instala los drivers no se podrá usarla.
Dada la existencia de una infinidad de dispositivos hardware con su consecuente innovación, el driver se crea además para que funcione con un sistema operativo especifico, esto significa que si se cambia de sistema operativo en la computadora, se tendrá que verificar si necesita también actualizar los drivers para evitar que alguna área del PC deje de funcionar (por ejemplo el sonido). Por otra parte, el driver apunta a un modelo específico del dispositivo.
Retomando lo anteriormente dicho, existen tantos tipos de controladores como tipos de periféricos, y es común encontrar más de un controlador posible para el mismo dispositivo, cada uno ofreciendo un nivel distinto de funcionalidades. Por ejemplo, aparte de los oficiales (normalmente disponibles en la página web del fabricante), se pueden encontrar también los proporcionados por el sistema operativo, o también versiones no oficiales hechas por terceros.
Debido que el software de controladores de dispositivos se ejecuta como parte del sistema operativo, con acceso sin restricciones a todo el equipo, resulta esencial que sólo se permitan los controladores de dispositivos autorizados. La firma y el almacenamiento provisional de los paquetes de controladores de dispositivos en los equipos cliente, mediante las técnicas descritas, proporcionan las ventajas siguientes:
· Seguridad mejorada. Puesto que los usuarios estándar no pueden instalar controladores de dispositivos que no estén firmados o que estén firmados por un editor que no es de confianza, los administradores tendrán un control riguroso respecto a los controladores de dispositivos que pueden usarse en una organización. Podrán impedirse los controladores de dispositivos desconocidos, así como cualquier controlador de dispositivo que el administrador no permita expresamente. Mediante el uso de directivas de grupo, un administrador puede proporcionar a todos los equipos cliente de una organización los certificados de los editores que se consideren de confianza, permitiendo la instalación de los controladores sin intervención del usuario, para comprobar que se trata de una firma digital de confianza.
· Reducción de los costes de soporte técnico. Los usuarios sólo podrán instalar los dispositivos que hayan sido probados y admitidos por la organización. En consecuencia, el sistema permite mantener la seguridad del equipo, al tiempo que se reducen las solicitudes del departamento de soporte técnico.
· Experiencia de usuario mejorada. Un paquete de controladores firmado por un editor de confianza y almacenado provisionalmente en el almacén de controladores funciona de modo automático, cuando el usuario conecta el dispositivo al equipo. No se requiere acción alguna por parte del usuario.
En cuanto a la creación de los controladores; normalmente son los fabricantes del hardware quienes escriben sus controladores, ya que conocen mejor el funcionamiento interno de cada aparato, pero también se encuentran controladores libres, por ejemplo en los sistemas operativos libres. En este caso, los creadores no son de la empresa fabricante, aunque a veces hay una cooperación con ellos, cosa que facilita el desarrollo. Si no la hay, el procedimiento necesita de ingeniería inversa y otros métodos difíciles o con riesgos legales.
Los controladores de dispositivo (device drivers en inglés) son programas añadidos al núcleo del sistema operativo, concebidos inicialmente para gestionar periféricos y dispositivos especiales. Los controladores de dispositivo pueden ser de dos tipos: orientados a caracteres (tales como los dispositivos NUL, AUX, PRN, etc. del sistema) o bien orientados a bloques, constituyendo las conocidas unidades de disco. La diferencia fundamental entre ambos tipos de controladores es que los primeros reciben o envían la información carácter a carácter; en cambio, los controladores de dispositivo de bloques procesan, como su propio nombre indica, bloques de cierta longitud en bytes (sectores). Los controladores de dispositivo, aparecidos con el DOS 2.0, permiten añadir nuevos componentes al ordenador sin necesidad de rediseñar el sistema operativo.
Los controladores de dispositivo han sido tradicionalmente programas binarios puros, similares a los COM aunque ensamblados con un ORG 0, a los que se les colocaba una extensión SYS. Sin embargo, no hay razón para que ello sea así ya que un controlador de dispositivo puede estar incluido dentro de un programa EXE, con la condición de que el código del controlador sea el primer segmento de dicho programa. El EMM386.EXE del MS-DOS 5.0 sorprendió a más de uno en su día, ya que llamaba la atención observar cómo se podía cargar con DEVICE: lo cierto es que esto es factible incluso desde el DOS 2.0 (pese a lo que pueda indicar algún libro), pero ha sido mantenido casi en secreto. Actualmente es relativamente frecuente encontrar programas de este tipo. La ventaja de un controlador de dispositivo de tipo EXE es que puede ser ejecutado desde el DOS para modificar sus condiciones de operación, sin complicar su uso por parte del usuario con otro programa adicional. Además, un controlador de dispositivo EXE puede superar el límite de los 64 Kb, ya que el DOS se encarga de relocalizar las referencias absolutas a segmentos como en cualquier programa EXE ordinario.
Para finalizar esta síntesis, recurriremos a los fallos de un controlador, ya que, al ser una parte crítica del sistema operativo, puede ser más grave que otros errores de software, pudiendo bloquear el ordenador o incluso dañar el hardware.
Debido a que el hardware es (necesariamente) indeterminista, encontrar y solucionar un fallo en un controlador es una tarea complicada ya que no sólo hay que monitorear el programa, sino también el propio dispositivo.

En un sistema monoprogramado, la memoria principal se divide en dos partes: una parte para el sistema operativo (monitor residente, núcleo) y otra parte para el programa que se ejecuta en ese instante. En un sistema multiprogramado, la parte de "usuario" de la memoria debe subdividirse aún más para hacer sitio a varios procesos. La tarea de subdivisión la lleva a cabo dinámicamente el sistema operativo y se conoce como gestión de memoria.

En un sistema multiprogramado resulta vital una gestión efectiva de la memoria. Si sólo hay unos pocos procesos en memoria, entonces la mayor parte del tiempo estarán esperando a la E/S y el procesador estará desocupado. Por ello, hace falta repartir eficientemente la memoria para meter tantos procesos como sea posible.
Carga de programas en memoria principal
La tarea central de cualquier sistema de gestión de memoria es traer los programas a memoria principal para su ejecución en el procesador. En casi todos los sistemas multiprogramados modernos, esta tarea supone un esquema sofisticado conocido como memoria virtual. La memoria virtual está, a su vez, basada en el uso de una de dos técnicas básicas; segmentación y/o paginación. Antes de ver estás técnicas de memoria virtual, se debe preparar el terreno considerando técnicas más simples que no requieren el uso de memoria virtual. Una de estas técnicas, la partición, se ha venido usando con distintas variantes en algunos sistemas operativos ahora obsoletos. Las otras dos técnicas, la paginación simple y la segmentación simple, no se usan en solitario. No obstante, el estudio de la memoria virtual resultará más sencillo si se consideran en primer lugar estas dos técnicas, sin tener en cuenta la memoria virtual.
Paginación
Tanto las particiones de tamaño fijo como las de tamaño variable hacen un uso ineficiente de la memoria; las primeras generan fragmentación interna, mientras que las segundas originan fragmentación externa. Supóngase, no obstante, que la memoria principal se encuentra particionada en trozos iguales de tamaño fijo relativamente pequeños y que cada proceso está dividido también en pequeños trozos de tamaño fijo y del mismo tamaño que los de memoria. En tal caso, los trozos del proceso, conocidos como páginas, pueden asignarse a los trozos libres de memoria, conocidos como marcos o marcos de página. En este apartado se verá que el espacio malgastado en memoria para cada proceso por fragmentación interna consta sólo de una fracción de la última página del proceso. Además, no hay fragmentación externa.
En un instante dado, algunos de los marcos de memoria están en uso y otros están libres. El sistema operativo mantiene una lista de los marcos libres. El proceso A, almacenado en disco, consta de cuatro páginas. Cuando llega el momento de cargar este proceso, el sistema operativo busca cuatro marcos libres y carga las cuatro páginas del proceso A en los cuatro marcos. El proceso B, que consta de tres páginas y el proceso C, que consta de cuatro, se cargan a continuación. Más tarde, el proceso B se suspende y es expulsado de memoria principal. Después, todos los procesos de memoria principal están bloqueados y el sistema operativo tiene que traer un nuevo proceso, el proceso D, que consta de cinco páginas.
Supóngase ahora, como en este ejemplo, que no hay suficientes marcos sin usar contiguos para albergar al proceso. ¿Impedirá esto al sistema operativo cargar D? La respuesta es negativa, puesto que se puede emplear de nuevo el concepto de dirección lógica. Ya no será suficiente con un simple registro base. En su lugar, el sistema operativo mantiene una tabla de páginas para cada proceso. La tabla de páginas muestra la posición del marco de cada página del proceso. Dentro del programa, cada dirección lógica constará de un número de página y de un desplazamiento dentro de la página. Recuérdese que, en el caso de la partición simple, una dirección lógica era la posición de una palabra relativa al comienzo del programa; el procesador realizaba la traducción a dirección física. Con paginación, el hardware del procesador también realiza la traducción de direcciones lógicas a físicas. Ahora, el procesador debe saber cómo acceder a la tabla de páginas del proceso actual. Dada una dirección lógica (número de página, desplazamiento), el procesador emplea la tabla de páginas para obtener una dirección física (número de marco, desplazamiento).
Segmentación
Otro modo de subdividir el programa es la segmentación. En este caso, el programa y sus datos asociados se dividen en un conjunto de segmentos. No es necesario que todos los seg-mentos de todos los programas tengan la misma longitud, aunque existe una longitud máxima de segmento. Como en la paginación, una dirección lógica segmentada consta de dos partes, en este caso un número de segmento y un desplazamiento.
Como consecuencia del empleo de segmentos de distinto tamaño, la segmentación resulta similar a la partición dinámica. En ausencia de un esquema de superposición o del uso de memoria virtual, sería necesario cargar en memoria todos los segmentos de un programa para su ejecución. La diferencia, en comparación con la partición dinámica, radica en que, con segmentación, un programa puede ocupar más de una partición y éstas no tienen por qué estar contiguas. La segmentación elimina la fragmentación interna, pero, como la partición dinámica, sufre de fragmentación externa. Sin embargo, debido a que los procesos se dividen en un conjunto de partes más pequeñas, la fragmentación externa será menor.
Mientras que la paginación es transparente al programador, la segmentación es generalmente visible y se proporciona como una comodidad para la organización de los programas y datos. Normalmente, el programador o el compilador asignan los programas y los datos a diferentes segmentos. En aras de la programación modular, el programa o los datos pueden ser divididos de nuevo en diferentes segmentos. El principal inconveniente de este servicio es que el programador debe ser consciente de la limitación de tamaño máximo de los segmentos.
Memoria virtual.
La memoria virtual permite una multiprogramación muy efectiva y releva al usuario de las rígidas e innecesarias restricciones de la memoria principal.
Las ventajas de la memoria virtual son importantes. La cuestión es: ¿Funcionará este esquema? En un primer momento, se produjo un gran debate sobre este punto, pero la experiencia con numerosos sistemas operativos demuestra más allá de cualquier duda que la memoria virtual funciona. Por consiguiente, ha llegado a ser un componente esencial de la mayoría de los sistemas operativos actuales.
Para comprender cuál él es elemento clave y por qué la memoria virtual generó tanto debate, se va a considerar de nuevo la labor del sistema operativo con respecto a la memoria virtual. Considérese un proceso grande formado por un programa largo y un conjunto de series de datos. Durante un corto periodo, la ejecución puede estar reducida a una pequeña sección del programa (por ejemplo, una subrutina) y acceder sólo a una o dos series de datos. Si esto es así, sería un claro desperdicio cargar docenas de fragmentos para el proceso cuando se van a usar sólo unos pocos antes de que pase a estar suspendido o se descargue. Se puede aprovechar mejor la memoria cargando tan sólo unos pocos fragmentos. Además, si el programa se bifurca a una instrucción o hace referencia a datos de un fragmento que no está en memoria, se producirá un fallo de página. Este fallo le dice al sistema operativo que traiga el fragmento deseado.
Paginación
El término memoria virtual se asocia normalmente con sistemas que emplean paginación, aunque también se puede usar memoria virtual basada en la segmentación, que se tratará después. El uso de la paginación en la memoria virtual fue presentado por primera vez en el computador Atlas [KILB62] y pronto alcanzó un uso comercial muy extendido.
En el estudio de la paginación simple se indicó que cada proceso tiene su propia tabla de páginas y que, cuando carga todas sus páginas en memoria principal, se crea y carga en memoria principal una tabla de páginas. Cada entrada de la tabla de páginas contiene el número de marco de la página correspondiente en memoria principal. Cuando se considera un esquema de memoria virtual basado en la paginación se necesita la misma estructura, una tabla de páginas. Nuevamente, es normal asociar una única tabla de páginas con cada proceso.
Segmentación
La segmentación permite al programador contemplar la memoria como si constara de varios espacios de direcciones o segmentos. Con memoria virtual, el programador no necesita pre-ocuparse de las limitaciones de memoria impuestas por la memoria principal. Los segmentos pueden ser de distintos tamaños, incluso de forma dinámica. Las referencias a memoria constan de una dirección de la forma (número de segmento, desplazamiento).
Paginación y Segmentación Combinadas
Tanto la paginación como la segmentación tienen sus ventajas. La paginación, que es transparente al programador, elimina la fragmentación externa y, de este modo, aprovecha la memoria principal de forma eficiente. Además, puesto que los fragmentos que se cargan y descargan de memoria principal son de tamaño constante e igual para todos, es posible construir algoritmos de gestión de memoria sofisticados que aprovechen mejor el comportamiento de los programas, tal y como se verá. La segmentación, que es visible para el programador, tiene las ventajas antes citadas, incluida la capacidad de manejar estructuras de datos que puedan crecer, la modularidad y el soporte de la compartición y la protección. Para combinar las ventajas de ambas, algunos sistemas están equipados con hardware del procesador y software del sistema operativo que las permiten.
En un sistema con paginación y segmentación combinadas, el espacio de direcciones de un usuario se divide en varios segmentos según el criterio del programador. Cada segmento se vuelve a dividir en varias páginas de tamaño fijo, que tienen la misma longitud que un marco de memoria principal. Si el segmento tiene menor longitud que la página, el segmento ocupará sólo una página. Desde el punto de vista del programador, una dirección lógica también está formada por un número de segmento y un desplazamiento en el segmento. Desde el punto de vista del sistema, el desplazamiento del segmento se ve como un número de página dentro del segmento y un desplazamiento dentro de la página.

La planificación es el proceso por el cual el sistema operativo selecciona que proceso ejecutar.
La selección del proceso se basa en alguno de los algoritmos de planificación que se describen más abajo.
Es la característica por el cual el sistema operativo puede o no expulsar del estado de ejecución a un proceso dado. En este sentido entonces tenemos la planificación apropiativa en la cual el sistema operativo puede cortar en cualquier momento la ejecución de un proceso y la planificación no apropiativa en la cual una vez que el proceso está en ejecución el sistema operativo no puede sacarlo de ese estado.

Los objetivos de la planificación de proceso son:

  • Equidad, todos los procesos deben poder ejecutarse
  • Eficacia, mantener ocupada la CPU un 100% del tiempo
  • Tiempo de respuesta, minimizar el tiempo de respuesta al usuario
  • Tiempo de regreso, minimizar el tiempo que deben esperar los usuarios por lotes para obtener sus resultados
  • Rendimiento, maximizar el número de tareas procesadas por hora.

Algoritmos de planificación

Los algoritmos de planificación son los que definen que política se va a seguir para que un proceso pase al estado de ejecución.

En este tipo de planificación cada proceso tiene asignado un quantum de tiempo para ejecutarse y en el caso de que no pueda terminar la ejecución en su quantum el proceso pasa de nuevo a la cola de procesos para ser ejecutado por otro quantum luego de recorrer la cola para asegurarse que todos los procesos reciban ese quantum de procesamiento.

En la planificación round-robin todos los procesos son tratados con la misma prioridad. Para el caso de este tipo de planificación a cada proceso se le asigna una prioridad y los mismos son ejecutados.

Las colas múltiples están basadas en una pila que sirve como índice de una lista de procesos que se tienen que ejecutar.

Este tipo de algoritmo de planificación se usa para trabajos en batch o de procesamiento or lotes en los cuales se puede saber cuál es el tiempo de duración de la ejecución de cada proceso y entonces se puede seleccionar primero el trabajo más corto. El problema que se presenta con éste algoritmo es que los grandes procesos podrían sufrir de inanición dado que cualquier proceso pequeño se “cuela” sobre uno de mayor tamaño y como resultado final se podría dar el caso que el proceso grande nunca obtenga procesamiento.

En este modelo de planificación se tiene en cuenta la cantidad de usuarios en el sistema y se le asigna a cada uno el tiempo de ejecución de 1/n (siendo n la cantidad total de usuarios) de esa forma el planificador tiene que llevar cuenta del tiempo de ejecución de los procesos y balancear el tiempo que están utilizando el procesador para cumplir con la ecuación previa.

Comunicación Entre Procesos

1. Condiciones de competencia
Las condiciones de competencia se dan cuando dos o más procesos intentan acceder a un mismo recurso.
2. Secciones críticas
Para solucionar las condiciones de competencia se implementó un modelo para prohibir que dos procesos accedan al mismo recurso. El modelo en cuestión se denomina exclusión mutua.
3. Exclusión mutua con espera ocupada
Las soluciones con espera ocupada funcionan de la siguiente manera, cuando un proceso intenta ingresar a su región crítica, verifica si está permitida la entrada. Si no, el proceso se queda esperando hasta obtener el permiso.
4. Desactivación de interrupciones
El método más simple para evitar las condiciones de competencia es hacer que cada proceso desactive todas sus interrupciones antes de entrar a su sección crítica y las active una vez que salió de la misma. Este modelo como se puede observar, éste modelo tiene una gran problema y es que si se produce una falla mientras que el proceso está en la región crítica no se puede salir de la misma y el sistema operativo no recuperaría el control.
5. Variables cerradura
En éste caso se genera una variable la cual puede tener dos valores o bien 0 (no hay ningún proceso en su sección crítica) o bien 1 (indicando que la sección crítica está ocupada) entonces cada proceso antes de ingresar a la sección crítica verifica el estado de la variable de cerradura y en caso de que la misma este en 0, le cambia el valor e ingresa a la misma y en caso de que la misma sea 1 el proceso se queda verificando el estado de la misma hasta que el mismo sea 0.
El problema aquí se presenta si dos procesos verifican al mismo tiempo que la variable cerradura esta en 0 e ingresan a la región crítica.
6. Alternancia estricta
El algoritmo de alternancia estricta no bloquea el ingreso a la región crítica cuando otro proceso se está ejecutando. El problema de ésta solución es que cuando un proceso no está en la sección crítica igualmente tiene bloqueado el acceso a la misma y por lo tanto no permite que otro proceso que requiera ingresar a la misma logre hacerlo.

Sincronización y comunicación entre procesos

La comunicación entre procesos: necesaria si se desea que varios procesos puedan colaborar para realizar una misma tarea. Sincronización === funcionamiento coordinado en la resolución de una tarea encomendada.
El SO ofrece mecanismos básicos de comunicación, que permiten transferir cadenas de bytes. Deben ser los procesos que se comunican quienes interpreten el significado de las cadenas transferidas para su labor coordinada.
Los mecanismos de comunicación y sincronización son dinámicos. Es decir, cuando se necesita un mecanismo de este estilo, se crea, usa y destruye, de forma que no se establezca de forma definitiva ningún mecanismo de comunicación, ya que ellos podrían producir efectos indeseados. Es decir, la comunicación es algo puntual.
Los servicios básicos de comunicación son:
a) crear: el proceso solicita la creación del mecanismo
b) enviar o escribir: el proceso emisor envía información al proceso receptor
c) recibir o leer: el proceso receptor recibe información
d) destruir: el proceso solicita la destrucción del mecanismo de comunicación
La comunicación puede ser síncrona y asíncrona:
a) síncrona: los dos procesos han de ejecutar servicios de forma simultánea. El emisor ha de ejecutar el servicio enviar mientras el receptor ejecuta recibir.
b) asíncrona: el emisor hace el envío y prosigue su ejecución. El SO ofrece un almacenamiento intermedio para guardar la información enviada, hasta que el receptor la solicite.

Los algoritmos de exclusión mutua (comúnmente abreviada como mutex por mutual exclusion) se usan en programación concurrente para evitar que fragmentos de código conocidos como secciones críticas accedan al mismo tiempo a recursos que no deben ser compartidos.
La mayor parte de estos recursos son las señales, contadores, colas y otros datos que se emplean en la comunicación entre el código que se ejecuta cuando se da servicio a una interrupción y el código que se ejecuta el resto del tiempo. Se trata de un problema de vital importancia porque, si no se toman las precauciones debidas, una interrupción puede ocurrir entre dos instrucciones cualesquiera del código normal y esto puede provocar graves fallos.
La técnica que se emplea por lo común para conseguir la exclusión mutua es inhabilitar las interrupciones durante el conjunto de instrucciones más pequeño que impedirá la corrupción de la estructura compartida (la sección crítica). Esto impide que el código de la interrupción se ejecute en mitad de la sección crítica.
En un sistema multiprocesador de memoria compartida, se usa la operación indivisible test-and-set sobre una bandera, para esperar hasta que el otro procesador la despeje. La operación test-and-set realiza ambas operaciones sin liberar el bus de memoria a otro procesador. Así, cuando el código deja la sección crítica, se despeja la bandera. Esto se conoce como spin lock o espera activa.
Algunos sistemas tienen instrucciones multioperación indivisibles similares a las anteriormente descritas para manipular las listas enlazadas que se utilizan para las colas de eventos y otras estructuras de datos que los sistemas operativos usan comúnmente.
La mayoría de los métodos de exclusión mutua clásicos intentan reducir la latencia y espera activa mediante las colas y cambios de contexto. Algunos investigadores afirman que las pruebas indican que estos algoritmos especiales pierden más tiempo del que ahorran.
A pesar de todo lo dicho, muchas técnicas de exclusión mutua tienen efectos colaterales. Por ejemplo, los semáforos permiten interbloqueos (deadlocks) en los que un proceso obtiene un semáforo, otro proceso obtiene el semáforo y ambos se quedan a la espera de que el otro proceso libere el semáforo. Otros efectos comunes incluyen la inanición, en el cual un proceso esencial no se ejecuta durante el tiempo deseado, y la inversión de prioridades, en el que una tarea de prioridad elevada espera por otra tarea de menor prioridad, así como la latencia alta en la que la respuesta a las interrupciones no es inmediata.
La mayor parte de la investigación actual en este campo, pretende eliminar los efectos anteriormente descritos. Si bien no hay un esquema perfecto conocido, hay un interesante esquema no clásico de envío de mensajes entre fragmentos de código que, aunque permite inversiones de prioridad y produce una mayor latencia, impide los interbloqueos.

  • Modelo de sincronización por semáforos

Dijkstra dio en 1968 una solución al problema de la exclusión mutua con la introducción del concepto de semáforo binario. Está técnica permite resolver la mayoría de los problemas de sincronización entre procesos y forma parte del diseño de muchos sistemas operativos y de lenguajes de programación concurrentes.
Un semáforo binario es un indicador (S) de condición que registra si un recurso está disponible o no. Un semáforo binario sólo puede tomar dos valores: 0 y 1. Si, para un semáforo binario, S = 1 entonces el recurso está disponible y la tarea lo puede utilizar; si S = 0 el recurso no está disponible y el proceso debe esperar.
Los semáforos se implementan con una cola de tareas o de condición a la cual se añaden los procesos que están en espera del recurso.
Sólo se permiten tres operaciones sobre un semáforo
- Inicializar
- Espera (wait)
- Señal (signal)
En algunos textos, se utilizan las notaciones P y V para las operaciones de espera y señal respectivamente, ya que ésta fue la notación empleada originalmente por Dijkstra para referirse a las operaciones.
Así pues, un semáforo binario se puede definir como un tipo de datos especial que sólo puede tomar los valores 0 y 1, con una cola de tareas asociada y con sólo tres operaciones para actuar sobre él.

  • Modelo de Sincronización de Exclusión Mutua Con Semáforos

La exclusión mutua se realiza fácilmente utilizando semáforos. La operación de espera se usará como procedimiento de bloqueo antes de acceder a una sección crítica y la operación señal como procedimiento de desbloqueo. Se utilizarán tantos semáforos como clases de secciones críticas se establezcan.

Los mensajes proporcionan una solución al problema de la concurrencia de procesos que integra la sincronización y la comunicación entre ellos y resulta adecuado tanto para sistemas centralizados como distribuidos. Esto hace que se incluyan en prácticamente todos los sistemas operativos modernos y que en muchos de ellos se utilicen como base para todas las comunicaciones del sistema, tanto dentro del computador como en la comunicación entre computadores.
La comunicación mediante mensajes necesita siempre de un proceso emisor y de uno receptor así como de información que intercambiarse. Por ello, las operaciones básicas para comunicación mediante mensajes que proporciona todo sistema operativo son:
Enviar(mensaje) y recibir(mensaje). Las acciones de transmisión de información y de sincronización se ven como actividades inseparables.
La comunicación por mensajes requiere que se establezca un enlace entre el receptor y el emisor, la forma del cual puede variar grandemente de sistema a sistema. Aspectos importantes a tener en cuenta en los enlaces son: como y cuantos enlaces se pueden establecer entre los procesos, la capacidad de mensajes del enlace y tipo de los mensajes.
Su implementación varía dependiendo de tres aspectos:
1- El modo de nombrar los procesos.
2- El modelo de sincronización.
3- Almacenamiento y estructura del mensaje.

  • Modelo de sincronización por Monitores

Los monitores son estructuras de un lenguaje de programación que ofrecen una funcionalidad equivalente a la de los semáforos y que son más fáciles de controlar. El concepto fue definido formalmente por primera vez en [HOAR74]. La estructura de monitor se ha implementado en varios lenguajes de programación, incluido Pascal Concurrente, Pascal-plus, Modula-2 y Modula-3. Más recientemente, se han implementado como una biblioteca de programas. Esto permite poner cierres de monitor a objetos cualesquiera. En particular, para algo parecido a una lista enlazada, se puede querer bloquear todas las listas enlazadas con un solo cierre o bien tener un cierre para cada elemento de cada lista.

Sistema operativo
Un Sistema operativo es un software básico que controla una computadora. El sistema operativo tiene tres grandes funciones: coordina y manipula el hardware del ordenador o computadora, como la memoria, las impresoras, las unidades de disco, el teclado o el mouse; organiza los archivos en diversos dispositivos de almacenamiento, como discos flexibles, discos duros, discos compactos o cintas magnéticas, y gestiona los errores de hardware y la pérdida de datos. Un sistema operativo es un programa que controla la ejecución de los programas de aplicación y que actúa como interfaz entre el usuario de un computador y el hardware de la misma.
Objetivos de los Sistemas Operativos
Un sistema operativo tiene tres objetivos o lleva a cabo tres funciones:
• Comodidad: Un sistema operativo hace que un computador sea más cómoda de utilizar.
• Eficiencia: Un sistema operativo permite que los recursos de un sistema informático se aprovechen de una manera más eficiente.
• Capacidad de evolución: Un sistema operativo debe construirse de modo que permita el desarrollo efectivo, la verificación y la introducción de nuevas funciones en el sistema y, a la vez, no interferir en los servicios que brinda.
Evolución de los sistemas operativos
· Proceso en serie
En los primeros computadores, de finales de los 40 hasta mediados de los 50, el programador interactuaba directamente con el hardware; no había sistema operativo. La operación con estas máquinas se efectuaba desde una consola consistente en unos indicadores luminosos, unos conmutadores, algún tipo de dispositivo de entrada y una impresora. Los programas en código máquina se cargaban a través del dispositivo de entrada (un lector de tarjetas, por ejemplo). Si se detiene el programa por un error, la condición de error se indicaba mediante los indicadores luminosos. El programador podía examinar los registros y la memoria principal para determinar la causa del error. Si el programa continuaba hasta su culminación normal, la salida aparecería en la impresora.
Estos primeros sistemas presentaban dos problemas principales:
• Planificación: La mayoría de las instalaciones empleaban un formulario de reserva de tiempo de máquina. Normalmente, un usuario podía reservar bloques de tiempo en múltiplos de media hora o algo por el estilo. Un usuario podía reservar una hora y terminar a los 45 minutos; esto daba como resultado un desperdicio del tiempo del computador. Por el contrario, el usuario podía tener dificultades, no terminar en el tiempo asignado y verse forzado a parar sin haber solucionado el problema.
• Tiempo de preparación: Un programa sencillo, llamado trabajo, cargaba un compilador y un programa en lenguaje de alto nivel (programa fuente) en la memoria, salvaba el programa compilado (programa objeto) y luego montaba y cargaba el programa objeto junto con las funciones comunes. Cada uno de estos pasos podía implicar montar y desmontar cintas o preparar paquetes de tarjetas. Si se producía un error, el infortunado usuario tenía que volver al inicio de este proceso de preparación. De este modo, se perdía un tiempo considerable en preparar un programa para su ejecución.
Este modo de operación podría denominarse proceso en serie porque refleja el hecho de que los usuarios tenían que acceder al computador en serie. Con el paso del tiempo se desarrollaron varias herramientas de software de sistemas para intentar hacer más eficiente este proceso en serie. Entre éstas se incluían bibliotecas de funciones comunes, montadores, cargadores, depuradores y rutinas de manejo de E/S que estaban disponibles como un software común para todos los usuarios.
· Sistemas sencillos de proceso por lotes
Las primeras máquinas eran muy caras y, por tanto, era importante maximizar la utilización de las mismas. El tiempo desperdiciado por la planificación y la preparación era inaceptable.
Para mejorar el uso, se desarrolló el concepto de sistema operativo por lotes (batch). El primer sistema operativo por lotes fue desarrollado a mediados de los 50 por la General Motors para usar en un IBM 701 [WEIZ81]. Este concepto fue refinado posteriormente e implementado en un IBM 704 por una serie de clientes de IBM. A principios de los 60, un conjunto de constructores ya habían desarrollado sistemas operativos por lotes para sus computadores. IBSYS, el sistema operativo de IBM para las computadores 7090/7094, es particularmente notable por su amplia influencia en otros sistemas.
La idea central que está detrás del esquema sencillo de proceso por lotes es el uso de un elemento de software conocido como monitor. Con el uso de esta clase de sistema operativo, los usuarios ya no tenían acceso directo a la máquina. En su lugar, el usuario debía entregar los trabajos en tarjetas o en cinta al operador del computador, quien agrupaba secuencialmente los trabajos por lotes y ubicaba los lotes enteros en un dispositivo de entrada para su empleo por parte del monitor. Cada programa se construía de modo tal que volviera al monitor al terminar su procesamiento y, en ese momento, el monitor comenzaba a cargar automáticamente el siguiente programa.

Paquete de tarjetas para un sistema sencillo por lotes

· Sistemas por lotes con multiprogramación
Aún con el secuenciamiento automático de los trabajos ofrecido por un sistema operativo sencillo por lotes, el procesador está desocupado a menudo. El problema es que los dispositivos de E/S son lentos comparados con el procesador. Los números corresponden a un programa que procesa un archivo de registros y ejecuta, en promedio, 100 instrucciones de máquina por cada registro. En este ejemplo, el computador gasta más del 96% del tiempo esperando a que los dispositivos de E/S terminen de transferir sus datos. El procesador gasta parte del tiempo ejecutando hasta que encuentra una instrucción de E/S. Entonces debe esperar a que concluya la instrucción de E/S antes de continuar.
Esta ineficiencia no es necesaria. Se sabe que hay memoria suficiente para almacenar el sistema operativo (el monitor residente) y un programa de usuario. Supóngase que hay espacio suficiente para el sistema operativo y dos programas usuarios. Ahora, cuando un trabajo necesite esperar una E/S, el procesador puede cambiar al otro trabajo, que probablemente no estará esperando a la E/S. Además, se podría ampliar la memoria para almacenar tres, cuatro o más programas y conmutar entre todos ellos . Este proceso es conocido como multiprogramador o multitarea. Éste es el punto central de los sistemas operativos modernos.

· Sistemas de tiempo compartido
Con el uso de la multiprogramación, el tratamiento por lotes puede llegar a ser bastante eficiente. Sin embargo, para muchas tareas, es conveniente suministrar un modo en que el usuario interactúe directamente con el computador. De hecho, para algunos trabajos, tales como el proceso de transacciones, este modo interactivo es fundamental.
Hoy en día, los requisitos de un servicio de computación interactiva pueden y suelen llevarse a cabo con el empleo de un computador dedicada. Esta opción no estaba disponible en los años 60, cuando la mayoría de los computadores eran grandes y costosos. En su lugar, se desarrollaron las técnicas de tiempo compartido.
Al igual que la multiprogramación permite al procesador manejar varias tareas por lotes al mismo tiempo, la multiprogramación puede también utilizarse para manejar varias tareas in-teractivas. En este último caso, la técnica se conoce como tiempo compartido, porque refleja el hecho de que el tiempo del procesador es compartido entre los diversos usuarios.
· Logros en los sistemas operativos
Los sistemas operativos están entre los elementos de software más complejos que se han de-sarrollado. Esto refleja el reto de tratar de conjugar las dificultades y, en algunos casos, objetivos opuestos de comodidad, eficiencia y capacidad de evolución. Denning y sus colegas [DENN80a] proponen que, hasta la fecha, se han obtenido cuatro logros intelectuales significativos en el desarrollo de los sistemas operativos:
• Los procesos
• La gestión de memoria
• La seguridad y la protección de la información
• La planificación y la gestión de recursos
• La estructura del sistema
Cada logro viene caracterizado por unos principios o abstracciones que se han desarrollado para solucionar las dificultades de los problemas prácticos. En conjunto, estos cinco campos abarcan los puntos clave del diseño e implementación de los sistemas operativos modernos. La breve revisión que se hará de estos cinco campos en esta sección sirve como introducción a gran parte del texto restante.

Proceso
El concepto de proceso es fundamental en la estructura de los sistemas operativos. Este término fue acuñado por primera vez por los diseñadores de Multics en los años 60. Es un término algo más general que el de trabajo. Se han dado muchas definiciones para el término proceso, entre las que se incluyen las siguientes:
• Un programa en ejecución
• El "espíritu animado" de un programa
• La entidad que puede ser asignada al procesador y ejecutada por él.

Estructura del sistema
En la medida en que se añaden más características a los sistemas operativos y en que el hardware se hace más complejo y versátil, el tamaño y la complejidad de los sistemas operativos han ido creciendo (figura 2.13). El sistema CTSS (Compatible Time-Sharing System), puesto en funcionamiento en el MIT en 1963, constaba, como máximo, de aproximadamente 32.000 palabras de 36 bits. El OS/360, presentado posteriormente por IBM, tenía más de un millón de instrucciones de máquina. Hacia 1973, el sistema Multics, desarrollado por el MIT y los Laboratorios Bell, había crecido a más de 20 millones de instrucciones. Es cierto que, más recientemente, se han desarrollado sistemas operativos más simples, para sistemas más pequeños, pero estos han ido creciendo inevitablemente en la medida en que el hardware y los requisitos de los usuarios han crecido.