sistema operativo os2

89
SISTEMA OPERATIVO

Upload: jefersson-edgar-sierra-paredes

Post on 07-Dec-2015

322 views

Category:

Documents


1 download

TRANSCRIPT

SISTEMA OPERATIVO

INDICE INTRODUCCION

SISTEMA OPERATIVO OS/2

VERSIONES OS/2

COMPATIBILIDAD DEL SISTEMA OPERATIVO OS/2

KERNEL OS/2

ACCESO AL API DE OS/2

FUNCIONES DE ACCESO A FICHEROS Y AL HARDWARE.

o ESTRUCTURA DE OS/2 (SISTEMA DE FICHEROS Y SUBSISTEMAS).

o EL SISTEMA DE FICHEROS DE OS/2.

o LOS SUBSISTEMAS DE OS/2.

EL SUBSISTEMA DE VIDEO (API VIO).

EL SUBSISTEMA DE TECLADO (API KBD).

MODOS DEL TECLADO.

EL SUBSISTEMA DE RATÓN (API MOU).

ACCESO A LAS FUNCIONES DE 16 BITS. EL THUNKING.

GESTION DE MEMORIA EN EL MODO PROTEGIDO DEL 286

GESTION DE MEMORIA EN EL MODO PROTEGIDO DEL 386

MULTITAREA.

o CONCEPTO DE THREAD.

o CONCEPTO DE PROCESO.

o CONCEPTO DE SESIÓN.

o ESTRUCTURA DE OS/2 (SELECTOR DE PROGRAMAS, SESIONES, PROCESOS Y

THREADS).

GESTION DE MEMORIA.

FUNCIONES DE SINCRONIZACIÓN ENTRE THREADS Y PROCESOS.

o CONCEPTO DE SEMÁFORO.

o SERVICIOS DE TEMPORIZACIÓN.

o COMUNICACIÓN ENTRE PROCESOS

SEMÁFOROS Y MEMORIA COMPARTIDA.

CAUCES.

COLAS.

APENDICE A

o LLAMADAS DOSXXX DEL SISTEMA DE FICHEROS

INTRODUCCION

Un sistema operativo explota los recursos de hardware de uno o más

procesadores para ofrecer un conjunto de servicios a los usuarios del

sistema operativo. También gestiona la memoria secundaria y los

dispositivos E/S en nombre de los usuarios.

OS/2 es un sistema operativo desarrollado con la ambición de

satisfacer las necesidades de muchos usuarios así como mejorar a los

sistemas operativos que antes de él se habían creado.

Los objetivos principales de los diseñadores de OS/2 fueron crear un

sistema operativo ideal para la automatización de oficinas, proporcionar

manejadores gráficos independientes de los dispositivos, que las

aplicaciones tuviesen acceso directo a periféricos con gran ancho de banda,

ofrecen capacidad multitarea, proporcionar un ambiente adaptado para

cada programa y para sus descendientes además de ofrecer un ambiente

protegido para garantizar la estabilidad del programa.

OS/2 fue diseñado en un principio por Microsoft con ayuda de IBM

con el objetivo de reemplazar a MS-DOS, cosa que no sucedió, tras tener

OS/2 sus propias características favorables como: uso real de memoria,

ejecución en modo protegido y soporte de multiprogramación en forma

elegante; no fue finalmente aceptado por los usuarios.

SISTEMA OPERATIVO OS/2

OS/2 es un sistema operativo multitarea para PCs creado en la

década pasada, pero que no ha perdido su vigencia, bastante usado por

empresas en aplicaciones críticas, servidores, comunicaciones (en 1992 se

calculaba que más del 90% de los cajeros automáticos del mundo usaban

como sistema operativo a OS/2) y por usuarios particulares.

Entre otras cosas, provee:

Estable - Su estabilidad sólo es comparable con la de Unix, y puede

correr decenas de programas de forma simultánea sin degradar su

performance ni su disponibilidad de memoria.

Multitarea y Multithreading - La posibilidad de ejecutar varios "hilos"

dentro de una misma aplicación. Esto permite una multitarea mucho mas

eficiente y un mejor desempeño de los programas diseñados para el.

Ejecución de programas DOS y Windows - "Mejor Windows que

Windows" fue una frase que IBM usó mucho hace unos años para

describirlo. Dada la mejor multitarea, mejor manejo de memoria y

dispositivos en general, y de dispmitiendo nombres largos y atributos

extendidos, bajo slack space (los clusters son de 512 bytes) y

fragmentación (casi nula en ambientes normales), y alta velocidad en

acceso a los archivos.

WorkPlace Shell - El mejor desktop para computadoras personales (y

no tanto) que existe hasta la fecha. Muy intuitivo, orientado a objetos,

extensible y muy consistente, muy integrado con el sistema operativo y

especialmente potenciable vía exx o programas de usuario. Aún no he

encontrado algo que se le compare ni para Macintosh, Windows 95/NT, o X

Windows que se le acerque.

Compatibilidad con otras plataformas - Aparte de la ya nombrada

capacidad de correr de forma inmejorable aplicaciones para DOS y Windows

3.x, dispone de una serie de herramientas para ejecutar o portar

aplicaciones desde otros sistemas operativos y plataformas. Con las librerías

EMX es relativamente fácil portar aplicaciones desde Unix, teniendo desde

hace ya años Apache, XFree86 con muchas de sus aplicaciones, la mayoría

de las aplrientado a objetos, extensibles y muy consistentes, muy

integradas con el sistema operativo y especialmente potenciable vía exx o

programas de usuario. Aún no he encontrado algo que se le compare ni para

Macintosh, Windows 95/NT, o XWindows que se le acerque.

Compatibilidad con otras plataformas - Aparte de la ya nombrada

capacidad de correr de forma inmejorable aplicaciones para DOS y Windows

3.x, dispone de una serie de herramientas para ejecutar o portar

aplicaciones desde otros sistemas operativos y plataformas. Con las librerías

EMX es relativamente fácil portar aplicaciones desde Unix, teniendo desde

hace ya años Apache, XFree86 con muchas de sus aplicaciones, la mayoría

de las aplicaciones GNU, y mucho mas. IBM provee las bibliotecas Open32,

que permiulnerables a ataques del exterior como lo son de forma genérica

los sistemas operativos Unix y WindowsNT.

VERSIONES OS/2

OS/2 1.0 (1987):

Diseñado originalmente por Microsoft con la ayuda de IBM. Cuando el

procesador 286 era el último y más grande chip. Tras esto, Microsoft

introduce OS/2 1.0 1987; este corre en modo texto programas

extremadamente poderosos.

OS/2 1.1 (1988) –1.3(1991):

Incluyó administrador de presentación, alta ejecución del sistema de

archivos que permite nombre de archivos largos.

OS/2 2.0 (1992):

Interfaz con el usuario de forma más acogedora, por ejemplo par imprimir

sólo se debe arrastrar el icono del objeto sobre la impresora. 32 bits, 386

basado en Kernel, produjo limitaciones como nunca antes.

OS/2 2.1 (1993):

Introdujo un sistema gráfico de 32 bits con algunas mejoras en algunos

aspectos en velocidad y muchos más manejadores;

- Multitarea presentación Manager (MMPM/2)

- Lista estándar de aplicaciones

- Utilitarios OS/2.

OS/2 WARP 3.0 (1994):

Producto refinado y fulido que lució un Kernel mucho más rápido y nuevas

rutinas de intercambio con mayor velocidad.

OS/2 tuvo el frenesí de Internet de 1995 con su Internet Acceskit.

OS/2 WARP CONNECT (1995):

OS/2 en el mango punto a punto y estaciones de trabajo cliente OS/2 por

diseño tiene incluido en el Sistema Operativo la gestión de redes. Es

conocido como un sistema confiable para clientes de redes o para pequeños

servidores.

OS/2 WARP SERVER (1996):

El mayor Sistema Operativo de redes muy eficiente y requiere menos

Hardware que sus equivalentes funcionales NT y UNIX.

OS/2 WARP 4.0 O MERLIN (1996):

Segunda versión de OS/2 Warp. Nunca existirá una versión OS/2 sola

siempre será un servicio de cliente y redes de punto en todas las futuras

versiones de OS/2.

COMPATIBILIDAD DEL SISTEMA OPERATIVO OS/2

OS/2 a la multiprogramación es compatible con todos los programas

DOS. Incluye su propia máquina virtual de DOS, es decir, puede ejecutar

programas DOS desde dentro del OS/2 (sin tener que reiniciar a modo MS-

DOS).

La elasticidad de DOS en ventana, en pantalla completa o sesiones

DOS de disquete. Ésta última consiste en que sin abandonar OS/2 se puede

ejecutar cualquier versión de MS-DOS real a partir de un disquete de

arranque y se puede alternar entre OS/2 y esta sesión MS-DOS sin reiniciar

el ordenador.

Además es capaz de ejecutar simultáneamente aplicaciones DOS,

WINDOWS Y OS/2. Ésta hace que OS/2 se convierta en una buena elección

para el usuario ya que hay muchas opciones disponibles en software para

seleccionar y usar.

KERNEL OS/2

El núcleo de cualquier sistema operativo proporciona las funciones básicas

para ese sistema operativo. Es la parte del sistema operativo que realiza

funciones básicas tales como la asignación de los recursos de hardware

como la memoria y el tiempo de CPU. El OS / 2 funciones del núcleo residen

en el archivo ejecutable OS2KRNL que se carga durante el inicio. Tenga en

cuenta que el nombre del archivo no tiene extensión.

El núcleo de OS / 2 realiza las siguientes funciones básicas.

1. Gestión de la memoria . Los kernel puede asignar memoria y

desasigna y asigna direcciones de memoria física en base a las

solicitudes, ya sea implícita o explícita, de los programas de

aplicación. En cooperación con la CPU, el núcleo también administra el

acceso a la memoria para asegurar que los programas sólo acceso a las

regiones de la memoria que han sido asignados. Parte de la gestión de

memoria incluye la gestión del archivo SWAPPER.DAT y el movimiento

de páginas de memoria entre la RAM y el archivo de intercambiador en

el disco duro.

2. Gestión de tareas . El kernel OS / 2 maneja la ejecución de todas las

tareas que se ejecutan en el sistema. La porción planificador del núcleo

asigna tiempo de CPU para cada proceso que se ejecuta en base a su

prioridad y si es capaz de ejecutar. Una tarea que se bloquea - tal vez

está a la espera de los datos que se entregarán a partir del disco o de la

entrada del teclado - no recibe el tiempo de CPU. El kernel de OS / 2

también se adelantará una tarea de menor prioridad cuando una tarea

de mayor prioridad se convierte en desbloqueado y capaz de correr.

3. La comunicación entre procesos . Comunicación entre procesos (IPC)

es vital para cualquier sistema operativo multitarea. Muchas tareas se

deben sincronizar o se comunican entre sí para garantizar que su trabajo

se coordine adecuadamente. El núcleo gestiona una serie de memoria

methods.Shared IPC se utiliza cuando dos tareas necesitan para pasar

datos entre ellos. El portapapeles OS / 2 es un buen ejemplo de la

memoria compartida. Los datos que se cortan o copian en el

portapapeles se guardan en la memoria compartida.Cuando los datos

almacenados se pega en otra aplicación, que la aplicación busca los

datos en el área de memoria compartida del portapapeles.

Las canalizaciones con nombre se pueden utilizar para comunicar datos

entre dos programas. Los datos pueden ser empujadas dentro de la

tubería por un programa y el otro programa puede extraer los datos

fuera del otro extremo de la tubería. Un programa puede recopilar datos

con gran rapidez y empuje en el tubo. Otro programa puede tomar los

datos del otro extremo de la tubería y, o bien que aparezca en la

pantalla o guardarlo en el disco, pero se puede manejar los datos a su

propio ritmo.

Los semáforos se pueden utilizar para coordinar la actividad de los dos

programas o dos hilos separados dentro de un solo programa. Cuando

una tarea establece el semáforo, por ejemplo, la otra tarea no puede

proceder hasta que el primero ha restablecer el semáforo.

4. La gestión de dispositivos . El núcleo gestiona el acceso al hardware

físico a través del uso de controladores de dispositivos. Acceso a

dispositivos físicos debe ser manejada con cuidado, o más de una

aplicación puede intentar controlar el mismo dispositivo al mismo

tiempo. El núcleo de OS / 2 logra esto de modo que un solo programa en

realidad tiene el control de acceso o a un dispositivo en cualquier

ejemplo dado moment.One de esto es un puerto COM. Sólo un programa

puede comunicarse a través de un puerto COM en cualquier momento

dado. Si está utilizando el puerto COM para obtener su dirección de e-

mail a través de Internet, por ejemplo, y tratar de iniciar otro programa

que intenta utilizar el mismo puerto COM como HyperAccess Lite, el

núcleo de OS / 2 que detecta el puerto COM es ya en uso. El kernel

utiliza entonces el controlador de errores de hardware (HARDERR.EXE)

para mostrar un mensaje en la pantalla que el puerto COM está en uso.

5. I / O de Gestión . El núcleo también se encarga de gestionar los

dispositivos de E / S. Esto incluye el puerto paralelo y serial I / O, y el

sistema de archivo de E / kernel O.The realidad no manejar el acceso

físico en el disco, sino que gestiona las solicitudes de disco I / O

presentadas por los diferentes programas que se ejecutan. Pasa a estas

solicitudes en el sistema de archivos, ya sea FAT, HPFS, CDFS (sistema

de archivos de CD-ROM), o NFS (Network File System), y gestiona la

transferencia de datos entre el sistema de archivos y los programas que

solicitan.

Durante el proceso de arranque, el núcleo también se encarga de cargar

y procesar el archivo CONFIG.SYS.

La mayor parte del código de la aplicación real de estas funciones a

nivel del núcleo reside en las bibliotecas de vínculos dinámicos como

DOSCALL1.DLL. El procesador de comandos cmd.exe es también parte

del kernel. Algunos comandos básicos de línea de comandos también se

incluyen en el núcleo como parte del archivo cmd.exe. Los comandos

son llamados comandos internos debido a que son una parte del

núcleo. Los comandos DEL COPIA y son ejemplos de los comandos

internos.

FUNCIONES DE ACCESO A FICHEROS Y AL HARDWARE

ESTRUCTURA DE OS/2

(SISTEMA DE FICHEROS Y SUBSISTEMAS)

Vamos a empezar por ver como acceder al disco, pantalla y teclado en

OS/2. Si bien es cierto que todos los lenguajes de programación ofrecen

instrucciones estandar (y sobre todo, portables) para acceder a estos

dispositivos, el uso de las funciones específicas que ofrece OS/2 nos permite

conseguir mejores rendimientos. Un ejemplo es la lectura de datos desde un

fichero. Si usamos las funciones estandar de C, por ejemplo, leeremos datos

de un en un byte; dado que, al compilar, estamos haciendo una llamada al

sistema en sí, en principio sería lo mismo usar estas funciones que las de

OS/2; sin embargo, OS/2 permite leer multiples bytes de una sola vez. La

ventaja es que para cada lectura hay que llamar al núcleo de OS/2, lo cual

consume mucho tiempo. Si tenemos que hacer 100 llamadas estandar para

leer 100 bytes, será un proceso bastante lento. Pero si usamos una llamada

de OS/2 para leer los 100 bytes de una sola vez, al haber una sola

transición programa-nucleo-programa, la lectura será notablemente más

rápida. Es imposible acelerar esa transición, pues no es problema de OS/2,

sino de la propia arquitectura Intel.

IMPLEMENTACIÓN DEL SISTEMA DE FICHEROS DE OS/2

En este gráfico vemos como está construido el acceso a los dispositivos en

OS/2.

En el esquema, vemos que la aplicación se comunica con el Sistema de

Ficheros de OS/2, que forma parte del núcleo, y éste determina a quien

tiene que enviar o de quien debe leer los datos. Si el programa quiere

acceder a la pantalla, el Sistema de Ficheros envía los caracteres al

Subsistema de Video (VIO), que es la parte encargada de controlar la

totalidad de accesos a la pantalla. Lo mismo si se trata del teclado, el ratón

o un fichero de disco.

La razón de usar el Sistema de Ficheros para acceder tanto a los archivos de

disco como a los dispositivos, es que permite que el programa no se tenga

que preocupar de la estructura de estos: cualquier entrada o salida será

tratada como un conjunto de caracteres en serie. Esta independencia de

estructura es cómoda para algunas aplicaciones, pero en otras puede ser

mejor poder acceder directamente a cada dispositivo, normalmente por

razones de velocidad. Esa es la razón de que OS/2 permita a las

aplicaciones acceder directamente a los Subsistemas de Video (VIO),

teclado (KBD) y ratón (MOU). A través de estos, podemos por ejemplo hacer

funciones de Scroll en la pantalla, conocer la posición del ratón, etc.

Podemos comparar los Subsistemas de OS/2 con la BIOS del ordenador, si

bien estos son más completos que aquella en muchas funciones, y sobre

todo mucho más rápidos.

EL SISTEMA DE ARCHIVOS DE OS/2

La parte básica de la conexión entre el hardware del ordenador y el

programador se encuentra en el Sistema de Archivos. Es él quien se

encarga de darnos acceso a los ficheros del disco, al teclado y a la pantalla

en modo texto. La ventaja que tiene esto es que nos abstrae totalmente de

las características del hardware, presentándonos todo como una ristra de

caracteres.

El acceso a un fichero sigue una serie de pasos absolutamente necesarios:

primero es preciso abrir el archivo, de modo que el programa obtenga

control sobre él; una vez hecho esto, podemos realizar cualquier operación

de lectura y/o escritura sobre él, y finalizar cerrando el archivo, de modo

que lo liberamos y puede ser accedido por otro programa.

APERTURA Y CIERRE DE FICHEROS

La primera operación necesaria antes de poder acceder a un archivo es

identificarlo mediante una llamada al Sistema Operativo. A esta operación

se le denomina apertura del archivo. Le enviamos como parámetros el

nombre del archivo a abrir y una serie de opciones, y nos devolverá

un identificador de archivo (en adelante se denominará Handle) que

usaremos para referirnos a él cuando queramos leer o escribir. El

identificador es simplemente un número entero. Existe una única excepción

en este caso: los archivos estandar no es necesario que sean abiertos, pues

ya tienen asignado un identificador (STDIN=0, STDOUT=1, STDERR=2).

Las opciones de apertura especifican la forma en que el programa va a

acceder a dicho fichero. Por ejemplo, puede querer acceder solo en modo

lectura, o bien puede especificar que si dicho fichero no existe, devuelva un

error, o bien que lo cree. O bien, si existe, puede pedir que lo sobreescriba.

Etc.

El cierre del fichero se hace al final del acceso, cuando ya no vamos a leer o

escribir nada más en él. Esto permite su liberación, de modo que cualquier

otro programa puede acceder a él con total libertad.

DosOpen

DosClose

LECTURA Y ESCRITURA DE DATOS

Una vez que hemos abierto un fichero, podemos acceder a él. Los ficheros

aparecen como un flujo de caracteres en serie, y el caracter actual está

referenciado por un puntero que se incrementa automáticamente después

de cada operación. Esto significa que cuando hacemos una lectura de un

fichero, recibiremos el caracter siguiente al último leido. Y cada vez que

escribamos un caracter, lo haremos a continuación del último escrito. Existe

sin embargo la posibilidad de cambiar la posición de dicho puntero, de

modo que podemos leer y escribir de forma aleatoria. Esta opción, sin

embargo, solo funciona con ficheros de disco, y no con dispositivos como el

teclado, pantalla, etc.

DosRead 

DosWrite

COMPARTICIÓN DE FICHEROS

Dado que OS/2 es un Sistema Operativo multitarea, puede ocurrir que dos

(o más) programas intenten acceder a la vez a un mismo fichero de disco.

Para evitar interferencias, OS/2 ofrece una serie de opciones de

compartición de archivos, que se especifican en el momento de abrirlos.

Estas son:

Modos de acceso al fichero

READ_ONLY: solo se va a leer del fichero.

WRITE_ONLY: solo se va a escribir en el fichero.

READ_WRITE: se va a leer y escribir (es el valor por omisión).

Modos de compartición

DENY_ALL: OS/2 rechaza cualquier petición posterior de abrir ese

archivo.

DENY_READ: OS/2 rechaza cualquier petición de abrir ese archivo

para lectura.

DENY_WRITE: OS/2 rechaza cualquier petición de abrir ese archivo

para escritura.

DENY_NONE: OS/2 permite cualquier operación con ese archivo.

Los modos de compartición permiten elegir la forma en que otros

programas acceden al fichero que tenemos abierto. Por ejemplo, si tenemos

un programa que lee del fichero prueba.txt y lo envía a la impresora, lo

lógico es que lo abra como READ_ONLY, pues no va a escribir nada en él.

Por otro lado, no puede permitir que otro programa modifique el fichero,

pero no le importa que pueda leerlo, por lo que como modo de acceso

asigna READ_ONLY. De esta forma, si otro programa intenta acceder al

mismo fichero, OS/2 solo le dará acceso si intenta acceder en modo

READ_ONLY; si intenta abrirlo como WRITE_ONLY o READ_WRITE, OS/2 le

devolverá un error.

GESTIÓN DE DISPOSITIVOS

A través del sistema de ficheros podemos acceder también a los dispositivos

físicos que forman el ordenador. Existen normalmente una serie de archivos

que identifican a cada periférico y que nos permiten enviar y recibir datos

hacia y desde ellos.

Los nombres de los archivos de que disponemos son:

COM1-COM4: maneja los puertos serie del ordenador.

CLOCK$: el reloj del sistema.

CON: gestiona la consola (en lectura es el teclado, en escritura, la

pantalla).

SCREEN$: maneja la pantalla.

KBD$: maneja el teclado.

LPT1-LPT3: maneja los puertos pararelo (normalmente la

impresora).

NUL: dispositivo nulo. Todo lo que se envíe a él simplemente es

ignorado.

POINTER$: gestiona el dispositivo de puntero (el ratón).

Los dispositivos cuyo nombre acaba en $ no son accesibles directamente

por los programas, y es preciso usar funciones específicas para acceder a

ellos. Esto da una mayor riqueza y control sobre ellos.

Funciones del DOS

OS/2 ofrece una gran colección de llamadas para gestionar ficheros en el

sistema de archivos. Estas llamadas permiten copiar un fichero a otro,

renombrarlo, borrarlo, cambiar de directorio, etc.

DosCopy  

DosMove

DosDelete

DosForceDelete  

DosCreateDir  

DosDeleteDir  

DosQueryCurrentDir  

DosQueryCurrentDisk  

DosSetCurrentDir  

DosSetDefaultDisk

BUSQUEDA DE FICHEROS

En muchas ocasiones un programa necesita conocer todos los ficheros que

coinciden con un patrón determinado. Es el caso, por ejemplo, de querer

mostrar una lista de ficheros que acaben en AL, o que tengan la letra Fen el

tercer lugar, etc. Para ello, OS/2 facilita una serie de funciones que permiten

realizar ésto. En ellas se debe especificar un nombre de fichero, sabiendo

que:

El símbolo ? sustituye a cualquier caracter situado en esa posicion.

Así, la búsqueda de program?.exe devolverá los nombres de los

ficheros que empiecen por program, a continuación tengan un

caracter cualquiera, y por último, terminen con .exe, como por

ejemplo, programa.exe, o programz.exe; pero no

devolverá programad.exe ni programa.

El símbolo * sustituye a cualquier cadena situada desde esa posición

en adelante. Así, la búsqueda de prog* devolverá cualquier fichero

que empiece por prog, tenga lo que tenga después. Por ejemplo,

devolveráprograma, progs...

DosFindFirst  

DosFindNext

DosFindClose

REDIRECCIÓN DE ENTRADAS Y SALIDAS

Además de estos ficheros de dispositivo, existen también tres 'archivos'

especiales: la entrada estandar (STDIN), la salida estandar (STDOUT), y la

salida de error estandar (STDERR). Por defecto, STDIN está asociada al

teclado, y STDOUT y STDERR a la pantalla; sin embargo, pueden

ser redireccionadas desde la linea de comandos a un fichero o incluso a otro

programa por medio de cauces o Pipes. Por ejemplo, si tenemos un

programa UPCASE.EXE que lee de la entrada estandar un caracter, lo

convierte en mayusculas y lo escribe en la salida estandar, y hacemos

desde la linea de comandos un

C:\>UPCASE.EXE <entrada.txt >salida.txt

no se quedará esperando a que pulsemos una tecla, ni mostrará en pantalla

lo que haya convertido. Lo que hará será leer caracteres del

fichero entrada.txt, y todo lo que salga lo escribirá en el fichero salida.txt.

Hemos redireccionado la entrada al fichero entrada.txt y la salida al

fichero salida.txt. También podemos direccionar la salida de un programa a

la entrada de otro programa distinto, con el caracter |. Así, si hiciesemos

C:\>UPCASE.EXE <entrada.txt |MORE.EXE

nos saldría el texto contenido en entrada.txt por pantalla, y cada vez que se

llene ésta, esperará a que pulsemos una tecla. La salida de UPCASE.EXE ha

sido tomada como entrada de MORE.EXE.

Para poder hacer ésto en nuestros programas, simplemente necesitamos

leer las órdenes a través de la entrada estandar (indicando 0 como handle

en DosRead) y enviar los resultados y errores por la salida estandar y la

salida de error estandar (indicando respectivamente 1 y 2 como handle

en DosWrite).

VARIABLES DE ENTORNOPara permitir la colocación de programas en múltiples directorios y

simplificar algunas opciones de configuración, OS/2 facilita las variables de

entorno. Se trata de una serie de variables que se definen bien en la línea

de comandos, bien en el CONFIG.SYS, por medio de la sentencia SET. Por

ejemplo, la línea

SET mi_variable=C:\OS2UTIL\MIPROGRAMA

asigna a la variable de entorno mi_variable el valor C:\OS2UTIL\

MIPROGRAMA. De este modo, el usuario puede especificar el directorio en

donde estarán diversas partes de un programa, o bien diversas opciones

para éste. Por ejemplo, el compilador EMX requiere de algunas variables de

este tipo para saber donde están las librerias, documentación, etc. El propio

OS/2 hace uso de esta facilidad para implementar variables como el PATH

de datos, etc.

DosScanEnv

OTRAS FUNCIONES DOS

Otras funciones pertenecientes a este grupo son las siguientes:

DosResetBuffer  

DosShutdown

DosBeep

LOS SUBSISTEMAS EN OS/2

En principio, el uso del sistema de ficheros para Entrada/Salida con el

teclado y la pantalla debería ser suficiente, pero por desgracia no es así. Su

uso es relativamente lento, por lo que solo parece útil utilizarlo cuando

necesitamos poder redireccionar la entrada o la salida del programa, o

cuando la velocidad no es importante.

Para mejorar y simplificar el acceso a los tres dispositivos principales de

entrada de datos, OS/2 permite el acceso directo a los subsistemas de

Video, Teclado y Ratón, de modo que se puede mejorar notablemente la

velocidad de los programas. El acceso a estas funciones va desde el mismo

procedimiento que en el acceso a través del sistema de archivos (una ristra

de caracteres) hasta el acceso directo al hardware del sistema. Entre ambos

extremos hay un amplio abanico de posibilidades. De entre todas ellas, se

deberá escoger la que mejor se adapte a las necesidades de velocidad y

flexibilidad del programa.

Estrictamente hablando, siempre usamos los subsistemas. El sistema de

ficheros, cuando sabe que una salida es para la pantalla, envía los datos al

subsistema de video (VIO). Sin embargo, antes tiene que comprobar para

quien es la salida, con lo que pierde algo de rendimiento. Así mismo, la

posibilidad de redireccionar entradas y salidas es otra opción que ralentiza

el sistema. En muchos casos, la pérdida de velocidad es totalmente

inapreciable, pero en algunos programas (juegos, aplicaciones a pantalla

completa,...) el uso del sistema de ficheros puede ser totalmente

contraproducente para el rendimiento. Usando el subsistema directamente

nos ahorramos pasos intermedios, a costa de perder la posibilidad de

redirección y de entrada/salida generalizada para ficheros y dispositivos.

En OS/2 disponemos de los siguientes subsistemas:

Subsistema de Video

Subsistema de Teclado

Subsistema de Puntero (Ratón)

EL SUBSISTEMA DE VIDEO

El subsistema de vídeo (VIO) es el encargado de gestionar la comunicación

entre los programas y la pantalla. Es, sin duda, el subsistema más complejo

de los tres, y el que ofrece, por tanto, mayores posibilidades.

Dado que puede haber varios programas ejecutándose a la vez en el

sistema, pero solo uno puede acceder a la vez a la pantalla (normalmente el

programa que se encuentra en primer plano o foreground), es necesario

virtualizar ésta por medio de un buffer de pantalla propio de cada

programa: el LVB (Logic Video Buffer, buffer de vídeo virtual). Cuando una

aplicación quiere escribir en pantalla y se encuentra en segundo plano

(background), su salida se escribe en dicho LVB. En el momento en que el

usuario conmuta dicho programa a primer plano, el LVB se copia tal cual en

la memoria de pantalla, y el resto de las escrituras van a ésta directamente.

Si se vuelve a conmutar dicho programa a segundo plano, OS/2 copia lo que

hubiese en pantalla en ese momento al LVB. De este modo, el programa

nunca sabe ni le preocupa cuando está en primer o en segundo plano.

FUNCIONES VIO

Salida por TTY virtual

En un extremo se encuentra el primer servicio que ofrece el subsistema VIO,

que es el de salida TTY. Este servicio es casi idéntico a la salida de

caracteres por medio del sistema de archivos. De hecho, éste, cuando

comprueba que lo que el programa envía va dirigido a la pantalla, usa este

servicio para realizar la función.

¿Cuál es la diferencia entre uno y otro, entonces? Las diferencias son dos: la

primera es que el uso del subsistema VIO es una opción más rápida que el

sistema de ficheros; la segunda es que si usamos el subsistema, no

podremos redireccionar la salida a un fichero, o a otro dispositivo de salida.

Siempre irá a la pantalla.

El servicio TTY admite los caracteres de control estándar del ASCII, y

también puede soportar ANSI, si éste es activado mediante la llamada

correspondiente.

VioWrtTTY  

VioGetAnsi  

VioSetAnsi  

VioGetMode  

VioSetMode

VioGetState

VioSetState

SALIDA DE CADENAS DE CARACTERES

Los siguientes servicios se encargan del tratamiento de la pantalla a más

bajo nivel. Con ellos podemos imprimir largas cadenas de caracteres con

atributos y leer los caracteres que hay en determinadas posiciones de la

pantalla. También podemos repetir un caracter o una pareja caracter-

atributo un número determinado de veces.

Los atributos son bytes que definen el color de tinta y de fondo para cada

caracter, así como otras características como el parpadeo. Están

compuestos por un byte, el cual se divide en dos nibbles (grupos de 4 bits).

El nibble de menor peso determina el color de la tinta del caracter, y el de

mayor peso el color de fondo y, según se encuentre activo o no, el parpadeo

del caracter. La distribución es como sigue:

Parpadeo activado

Bi Significado

Intensidad activada

Bi Significado

t

7 Parpadeo del carácter

6 Rojo del fondo

5 Verde del fondo

4 Azul del fondo

3 Intensidad de la tinta

2 Rojo de la tinta

1 Verde de la tinta

0 Azul de la tinta

t

7 Intensidad del fondo

6 Rojo del fondo

5 Verde del fondo

4 Azul del fondo

3 Intensidad de la tinta

2 Rojo de la tinta

1 Verde de la tinta

0 Azul de la tinta

Los bits de color activan directamente cada una de las componentes del

monitor, de modo que éstas se suman directamente, dando lugar a los

siguientes colores:

0Negr

o1 Azul 2 Verde 3

Celest

e

4 Rojo 5Magent

a6

Amarill

o7 Blanco

El bit de intensidad se limita a hacer estos colores más o menos brillantes.

Estos servicios orientados a carácter siguen siendo independientes del

hardware utilizado de modo que no es necesario saber como se trabaja a

nivel físico con ellos. Por otra parte, el propio OS/2 optimiza las

transferencias para cada uno de ellos, de modo que se consigue la mayor

velocidad posible, y se eliminan ciertos problemas inherentes a algunos

sistemas gráficos (por ejemplo, en las tarjetas CGA sincroniza

automáticamente la escritura con el retrasado vertical, de modo que se

evita la aparición de nieve en la pantalla).

Tanto cuando hacemos una lectura como una escritura, si excedemos el fin

de una línea se seguirá leyendo en la siguiente, y si llegamos al final de la

pantalla no se seguirá leyendo ni imprimiendo.

VioWrtCellStr  

VioWrtCharStr

VioWrtCharStrAtt

VioWrtNAttr

VioWrtNCell

VioWrtNChar

VioReadCellStr

VioReadCharStr

FUNCIONES DE   SCROLL

El subsistema VIO ofrece, además, la posibilidad de realizar scroll de

ventanas en modo texto. Con este conjunto de funciones, podemos

desplazar parte o toda la pantalla en cualquiera de las cuatro direcciones

posibles. La razón de incluirlas es que resulta mucho más rápido que hacer

una rutina que lea cada posición del buffer de video y la reescriba en el

lugar adecuado, aparte de que se trata de una función muy común en casi

cualquier programa.

VioScrollDn  

VioScrollLf

VioScrollRt  

VioScrollUp

DEFINICIÓN Y MOVIMIENTO DEL CURSOR

El cursor (el cuadradito parpadeante) es totalmente definible por el usuario

en las sesiones de texto y gráficos de OS/2. Podemos definir tanto su

tamaño como su posición dentro del caracter.

Al contrario que en MS-DOS, cuando escribimos en la pantalla de OS/2 la

posición del cursor no se cambia. Esto se hace así para ganar tiempo.

Normalmente el cursor solo se usa cuando hay que introducir datos por

teclado, y el resto de las veces se suele hacer desaparecer de la pantalla.

Esta es la razón de que halla un conjunto de funciones para situar el cursor.

De esta manera se gana en velocidad.

VioGetCurPos

VioSetCurPos

VioGetCurType  

VioSetCurType

ACCESO AL LVB

Cuando se necesite alta velocidad, se puede pedir acceso directo al buffer

virtual de video asociado con la aplicación. Al hacerlo, OS/2 devuelve un

puntero a la zona de memoria en donde está situado, con lo que podremos

escribir en él como si se tratase de la pantalla física. Una vez que hemos

terminado, debemos enviar una orden de retrasado, que hará que OS/2

copie el LVB a la pantalla física (siempre que la aplicación se encuentre en

primer plano). Esto significa que los cambios que hagamos en el LVB no son

visibles hasta que nosotros queramos.

Usar esta opción implica que perdemos el aislamiento entre el hardware y

nosotros: dado que el LVB no es más que una copia del buffer real de

pantalla, es necesario que nuestro programa conozca la geometría y la

forma de almacenamiento de los datos en ésta.

VioGetBuf  

VioShowBuf

ACCESO DIRECTO AL BUFFER REAL DE VIDEO

En el extremo opuesto se encuentran las funciones de acceso directo al

video. Con ellas, OS/2 da acceso directo a la memoria de pantalla. Sin

embargo, esto que en el DOS de siempre es la opción más normal y común,

puede resultar catastrófico en un Sistema Operativo multitarea como OS/2;

no se hundiría el suelo bajo nuestros pies, pero la pantalla podría ser

alterada en un momento poco oportuno... si OS/2 no tomase las debidas

precauciones.

Para que un programa pueda acceder directamente a la memoria real de

video, es absolutamente necesario que se encuentre en primer plano. Esto

es así porque si escribiese algo en pantalla cuando estuviese en

background, machacaría la imagen de la aplicación que se encontrase en

ese momento en primer plano.

Lo primero que hay que hacer es pedir la dirección física de la memoria de

vídeo. OS/2 devuelve un selector (o varios) a dicha zona de memoria. Estos

selectores deben ser convertidos a punteros antes de poder trabajar con

ellos. Pueden ser varios pues cada selector no puede apuntar a un bloque

de memoria mayor de 64Ks, el cual es también, casualmente, el tamaño de

cada bloque de memoria de las tarjetas de vídeo actuales. Esto ayuda a

simplificar el acceso, pues en modos como 640x480x16colores no

necesitaremos cambiar de bancos; OS/2 nos devuelve un selector que

apunta a cada uno de ellos, con lo que solo tenemos que acceder

normalmente como si fuese memoria lineal, y el Sistema Operativo

conmutará de uno a otro automáticamente.

El hecho de obtener un selector no significa que dispongamos de acceso

todavía a la pantalla. De hecho, si intentásemos escribir o leer algo en ese

momento y la aplicación no se encontrase en primer plano, OS/2 la cerraría

inmediatamente, dando un Fallo de Protección General (el cual ya

sabemos que no es tan fatal como el de Windows, pues en OS/2 solo afecta

a la aplicación que lo ha provocado, dejando intacto al Sistema Operativo y

al resto de los programas).

Cada vez que queramos acceder a la memoria física de video, debemos

bloquear el acceso al buffer. Si el programa estaba en primer plano, OS/2

devolverá un valor afirmativo al retornar de la llamada, y bloqueará el

selector de programas. Esto significa que el usuario no podrá conmutar la

sesión actual a segundo plano hasta que ésta termine el acceso. Sin

embargo, el resto de las aplicaciones siguen funcionando en segundo plano,

sin verse afectadas por este hecho. Por supuesto, esto puede ser peligroso,

y OS/2 toma algunas precauciones: si el sistema está bloqueado y el usuario

hace una conmutación de tarea, si el programa no desbloquea el

conmutador antes de un cierto tiempo definido por el sistema, queda

congelado y se realiza la conmutación. Por eso es recomendable

desbloquear cada x tiempo el selector de programas y volverlo a bloquear.

Si por el contrario el programa se encontraba en segundo plano, hay dos

opciones: OS/2 puede retornar un código de error al programa, con lo que

este sabrá que no tiene acceso al buffer y puede seguir trabajando en otra

cosa, o bien OS/2 congelará al programa hasta que el usuario lo pase a

primer plano, momento en que lo despertará indicándole que tiene acceso

al buffer real.

Una vez que OS/2 ha devuelto un resultado afirmativo, el programa tiene

acceso total a la memoria de video. Cuando haya terminado, tiene que

proceder a desbloquear la pantalla, de modo que OS/2 pueda desbloquear

el selector de programas y devolver el sistema a la normalidad.

VioGetPhysBuf  

VioScrLock  

VioScrUnLock

Existe una dificultad adicional a la hora de trabajar con acceso directo a la

pantalla. Se trata de que OS/2, al conmutar de una tarea a otra, solo guarda

el contenido de la pantalla si ésta se encontraba en modo texto (esto se

cumple para OS/2 1.x. En Warp 4, sin embargo, SI conserva el contenido de

la pantalla, pero no se si se cumple también para OS/2 2.x o 3.x). Si

estabamos trabajando en modo gráfico, el contenido se perderá. Para

evitarlo, OS/2 facilita la posibilidad de crear un thread (este concepto será

explicado más adelante, cuando veamos la multitarea a fondo) que será

activado cuando el programa vaya a cambiar de primer a segundo plano, y

viceversa. Esto es así para permitir que un programa pueda almacenar el

contenido de la pantalla en modo gráfico cuando no tiene bloqueado el

acceso a la memoria de video. Es el thread SavRedrawWait.

Para implementarlo, es necesario crear un nuevo thread en el que se

ejecute la llamada VioSavRedrawWait. Esta llamada bloqueará el thread

hasta que el usuario pulse CTRL+ESC, momento en que OS/2, antes de

conmutar de tarea, despertará a dicho thread indicándole que debe

almacenar el contenido de la pantalla. Cuando el thread termine, debe

volver a ejecutar la llamada, con lo que OS/2 sabrá que ha finalizado. El

thread se quedará dormido de nuevo, y solo será despertado cuando el

usuario vuelva a conmutar a primer plano el programa. Entonces OS/2 le

indicará que debe repintar la pantalla.

VioSavRedrawWait

La inclusión de este sistema de acceso puede parecer innecesaria, a la vista

de la potencia del acceso al LVB; la razón de haberla implementado fue que,

cuando salió OS/2, no llevaba todavía el Presentation Manager, el gestor

de ventanas, sino que era un Sistema Operativo en modo texto, por lo que

se incluyó este sistema para poder acceder en modo gráfico a la pantalla,

dado que VIO no ofrece ninguna facilidad como el trazado de puntos o

líneas. Actualmente, al disponer de un completo (y complejo) gestor de

ventanas, este método puede parecer inutil, sin embargo, para juegos

puede ser muy útil, pues permite acceder a pantalla completa en modos

como 320x200 en 256 colores, lo que permite una alta velocidad de

refresco, así como una gran facilidad de manejo. Hay que señalar que el

acceso directo a la memoria de vídeo solo se puede hacer estando en una

sesión de pantalla completa; no funcionará en una sesión de ventana.

EL SUBSISTEMA DE TECLADO

El subsistema de teclado es el encargado de gestionar el acceso de los

programas a este periférico. Al igual que el subsistema de vídeo, no es

necesario usarlo para escribir programas sencillos de cara al interface de

usuario, pues se puede acceder fácilmente a él a través del sistema de

archivos. Es más, el uso del subsistema de teclado no ofrece casi ninguna

ventaja en lo que a velocidad se refiere. Por tanto ¿para qué usarlo?

Simplemente porque el acceso a través del sistema de archivos solo nos

permite detectar códigos ASCII, pero no la pulsación de teclas de funcion, o,

por ejemplo, si tenemos pulsada la tecla ALT, o CTRL, etc. Para este tipo de

funciones necesitamos usar los servicios del subsistema de teclado.

FUNCIONES KBD

Acceso a nivel de cadenas de caracteres

La primera posibilidad que ofrece el subsistema de teclado es leer

caracteres, lo cual se puede hacer de dos formas: por cadenas, o caracter a

caracter.

La lectura por cadenas es exactamente igual que el uso de los servicios del

sistema de archivos. De hecho, es el servicio que emplea la función

DosRead cuando tiene que leer del teclado. Sin embargo, no necesita un

indicativo de dispositivo abierto, ni participa en el redireccionamiento de

E/S. Además, funciona de modo diferente según el modo de teclado en que

se encuentre: ASCII, BINARIO o ECO.

Con este sistema, se leen caracteres hasta que el buffer definido esté lleno

o hasta que se pulse el caracter de retorno, que por defecto es

el retorno de carro (tecla enter).

KbdStringIn  

KbdGetStatus

KbdSetStatus

La lectura por caracteres es un acceso más a bajo nivel. En este caso

podemos saber exactamente qué tecla está pulsada y cual no, y saber si

además se encuentran apretadas teclas como Ctrl, Alt, AltGr, etc. Además,

si el informe de cambio está activo, se notificará no solo cuando se pulse

una tecla, sino también cuando se suelte.

KbdCharIn  

KbdPeek

Por último, tenemos una función que nos permite vaciar el buffer de

teclado, de modo que todas las pulsaciones hechas hasta el momento que

no han sido atendidas serán borradas.

KbdFlushBuffer

EL SUBSISTEMA DE RATON

El subsistema de ratón controla todo lo referente a este dispositivo.

Lo primero que hay que hacer para trabajar con el ratón es abrir el

dispositivo. Esta acción crea una cola de eventos para el ratón e inicializa

todos los parámetros de la sesión a un valor conocido.

MouOpen  

MouClose

La cola de eventos del ratón almacena todos los sucesos ocurridos con éste

dispositivo, de modo que puedan ser leídos por el programa en el momento

adecuado. Un evento es, por ejemplo, mover el ratón, pulsar un botón,

soltarlo... Existe la posibilidad de filtrar determinados eventos, de modo que

al leer la cola, el resultado será exactamente igual que si no se hubiesen

producido.

Cuando se lee la cola, se puede especificar además si la función retornará

aún en el caso de que ésta esté vacía, o bien si debe esperar a que haya

algún evento en ella. Además de esto, podemos conocer en cualquier

momento la posición actual del ratón, así como cambiarla por otra. Estas

opciones deben usarse sólo con fines de actualizar alguna variable del

programa; si se pretende que sea el propio programa el que pinte el cursor,

es mejor leer las coordenadas por medio de la cola de eventos.

MouReadEventQue  

MouGetEventMask  

MouSetEventMask  

MouFlushQue  

MouGetNumQueEl  

MouGetPtrPos

MouSetPtrPos

El controlador de ratón puede encargarse él mismo de pintar el cursor en

pantalla (solo en sesiones de texto), o bien relegar dicha acción al

programa. Así mismo, puede devolver las coordenadas bien en coordenadas

de pantalla, bien en Mickeys, que son unidades naturales del ratón.

Por otro lado, es posible definir un área de la pantalla que será especifica de

la aplicación, de modo que el controlador no pintará el cursor cuando éste

se encuentre dentro de aquella. Por defecto, este área ocupa toda la

pantalla.

MouDrawPtr  

MouRemovePtr

MouGetDevStatus

MouSetDevStatus

Por último, es posible obtener información sobre las características de

nuestro ratón.

MouGetNumButtons  

MouGetNumMickeys

MULTITAREA

ESTRUCTURA DEL OS/2

(Selector de Programas, Sesiones, Procesos y Threads)

La estructura de OS/2 a nivel de multitarea se centra en los tres conceptos

dados anteriormente: Threads y Procesos, gestionados por el núcleo,

y Sesiones, gestionadas por los subsistemas y por el Selector de

programas.

El selector de programas es la parte de OS/2 que se encarga de conmutar la

pantalla, teclado y ratón físicos hacia los buffers lógicos de cada sesión.

Para ello, incluye un API propio, que permite a una sesión hacer pasar a

primer plano a cualquier sesión hija.

Surge la cuestión de como se arranca la primera sesión, la que nos permitirá

arrancar nuevos programas, etc. Para ello, OS/2 incluye una línea en

el CONFIG.SYS que le indica un proceso que debe arrancar al principio de

todo. Este proceso será el Shell del sistema.

El Shell del sistema, en principio, puede ser cualquier programa, de modo

que al arrancar OS/2, se arrancará éste también. Sin embargo, para que sea

útil, tiene que permitir arrancar nuevas sesiones desde él y pasar el control

a éstas.

En OS/2 1.0, el Shell del sistema era un simple menú, que contenía los

programas básicos (como una línea de comandos). Pulsando sobre estos, se

arrancaba una nueva sesión con éste, y se le cedía el control. En las

versiones posteriores, como Shell se pone el Presentation Manager. Este

es el gestor de ventanas. Sin embargo, el PM no incluye ningún Shell, por lo

que surge una nueva línea en el CONFIG.SYS, que especifica qué Shell

debe arrancar el PM. Este Shell, por defecto, es el Work Place Shell,

o WPS, que es el que nos da la orientación a objetos del escritorio de OS/2;

sin embargo, puede ser cambiado por otro cualquiera. Por ejemplo,

poniendo como Shell el CMD.EXE de OS/2, tendremos una situación parecida

a UNIX, en la que arrancamos siempre desde una línea de comandos.

El selector de programas incorpora dos Hot Keys o Teclas

Calientes: Ctrl+Esc y Alt+Esc. La primera pasa la sesión actual a segundo

plano y vuelve a poner el Shell en primer plano. Esto nos permite arrancar

nuevas sesiones sin cerrar la actual. La segunda permite conmutar de una

sesión a otra de forma cíclica, pero sin pasar por la del Shell.

OS/2 es muy atento con el usuario, y por eso tiene especial cuidado con el

Shell. Dado que se trata del principal nexo de unión entre ambos, si se

produce un error y el Shell se cierra, OS/2 abre uno nuevo inmediatamente,

sin afectar para nada al resto de las aplicaciones que estaban corriendo. De

esta forma el usuario nunca se queda sin control de la máquina. No

olvidemos que el Shell es un programa más, que no corre en el núcleo, y

que por tanto puede contener errores.

De todo esto deducimos varias cosas

El Shell del sistema es un programa más, que se ejecuta en una

sesión independiente, por lo que nada impide que escribamos el

nuestro propio.

Un Shell nunca debe arrancar ningún programa en su misma sesión,

pues eso implicaría que el pulsar Ctrl+Esc no nos devolvería al Shell,

sino al programa que estamos ejecutando en su sesión.

Dado que el Shell es el padre de todas las sesiones que se arrancan,

puede conmutar a cualquiera de ellas sin usar ningún truco especial,

simplemente usando el API del selector de programas. Por esto

mismo, tiene acceso a todas las sesiones de la lista de tareas de

OS/2, y también puede matar a cualquiera de ellas.

GESTION DE LA MEMORIA

OS/2, como cualquier Sistema Operativo multitarea, mantiene un estricto

control sobre la memoria usada por cada programa. Esto es así porque un

programa que sobreescribiese la memoria de otro lo haría fallar con casi

total seguridad. OS/2 hace uso del modo protegido de los

microprocesadores 386 y superiores para asegurar que cada programa

tenga acceso solo a sus bloques de memoria, y no pueda machacar el

contendido de otra zona. A la vez, se encarga de intercambiar zonas de

memoria entre la RAM y el disco duro, implementando así un sistema de

memoria virtual eficiente, con lo que puede ejecutar programas más largos

que los que la memoria física del ordenador permitiría.

Las funciones de asignación y desasignación dinámica de memoria son

extremadamente útiles en programas en los que no sepamos la cantidad de

esta que vamos a necesitar. Un ejemplo puede ser una zona de memoria

para descomprimir imágenes en un visualizador: dado que cada una puede

medir cualquier longitud, reservar una cantidad excesiva de forma estática

hace al programa lento, y reservar poca puede impedir visualizar imágenes

grandes. La solución es comprobar el tamaño de la imagen y reservar una

zona de memoria dinámica acorde con este, liberándola al terminar.

DosAllocMem  

DosFreeMem

Otra función es la de crear zonas de memoria compartida. Se trata de

bloques de memoria a los que pueden acceder dos procesos distintos de

forma simultánea, y se usan para intercambiar grandes cantidades de

información de forma rápida, y para compartirla.

Existen dos formas de compartir un bloque de memoria: una es mediante un

nombre que refiera a ese bloque; otra es mediante un puntero que señale a

su inicio.

DosAllocSharedMem

En el primer caso, se debe especificar un nombre para el bloque que cumpla

el convenio de nombres de ficheros de OS/2, y además debe empezar por \

SHAREMEM\. Por ejemplo, un nombre válido sería\SHAREMEM\

BLOQUE.DAT.

DosGetNamedSharedMem

Si no se especifica un nombre, la memoria solo podrá ser compartida

mediante el intercambio de un puntero que señale al inicio del bloque. Si

ambos procesos conocen este valor, podrán acceder a dicho bloque

pidiéndolo o asignándolo. Para comunicarlo, es necesario usar la

comunicación entre procesos, que veremos más adelante.

DosGetSharedMem  

DosGiveSharedMem

SUBASIGNACIÓN DE MEMORIA

La asignación de memoria es una parte muy importante en cualquier

sistema operativo. Da a los programas la capacidad de adaptarse

dinámicamente a las necesidades de cada momento. Sin embargo, hay un

coste relativamente elevado en la asignación de memoria dinámica. En

cada petición es preciso buscar una zona libre, cambiar los descriptores de

segmento, y cargar los registros de nuevo. Todo esto lleva un tiempo muy

elevado, debido a la propia arquitectura del microprocesador. Lo mismo

ocurre al liberar una zona. De aquí se saca una conclusión clara: utiliza toda

la memoria que necesites, pero evita asignar y desasignar constantemente

bloques. La solución consiste en asignar un bloque de tamaño moderado y

dentro de él sub asignar bloques de tamaño más pequeño, aumentando el

tamaño del bloque físico sólo cuando se necesita más espacio.

Para ayudar en esto, OS/2 ofrece un grupo completo de sub asignación de

memoria.

DosSubAllocMem  

DosSubFreeMem

DosSubSetMem

DosSubUnsetMem

La primera acción consiste en reservar un bloque de memoria

con DosAllocMem. Este bloque de memoria es necesario prepararlo para

sub asignación con DosSubSetMem. Una vez hecho esto, podemos asignar

y desasignar pequeños bloques

con DosSubAllocMem y DosSubFreeMem como si usásemos las llamadas

de siempre, pero con la diferencia de que será notablemente más rápido.

Sin embargo, no debemos olvidar que se trata de un solo bloque de

memoria subdividido, por lo que aunque tengamos sub asignado un bloque,

podemos salirnos de él por accidente sin que el sistema dé un error

(siempre, claro está, que no nos salgamos de la memoria asignada).

Debemos ver las funciones de sub asignación de memoria simplemente

como una ayuda en la gestión de ésta. Para cualquier aplicación es

exactamente lo mismo dividir nosotros mismos un bloque de memoria de

forma lógica que usar estas funciones. La ventaja consiste en que nos

ahorramos programar un grupo de funciones que compruebe cuanto

espacio nos queda libre y en donde y actualice las estructuras. Se trata de

una ganancia en comodidad. Una aplicación clara de estas funciones se

verá cuando expliquemos las colas de mensajes, pues en ellas se hace uso

intensivo de pequeños bloques de memoria que se crean y liberan

constantemente.

SINCRONIZACION Y COMUNICACION ENTRE PROCESOS

Al ser OS/2 un Sistema Operativo multitarea, sus programas se componen

de múltiples partes denominadas threads, las cuales se ejecutan de forma

paralela. Debido a esto, cuando dos o más threads intentan acceder a la vez

a un mismo recurso (por ejemplo, una zona de memoria compartida), el

resultado puede ser, en el mejor de los casos, impredecible. Por eso surgen

los sistemas de sincronización entre procesos. Estos permiten establecer un

sincronismo entre dos o más threads y procesos de una forma consistente

y, sobre todo, fiable y predecible. En OS/2, estos sistemas están formados

por los semáforos.

Por otro lado, dos procesos pueden necesitar intercambiar información entre

ellos. En un primer momento, la memoria compartida puede parecer la

panacea, pero en muchas aplicaciones no son el método más eficiente. Por

eso surgen otros: los cauces y las colas de mensajes.

APENDICE

GRUPO DE LLAMADAS

(Sistema de ficheros)

DosBeep

DosBeep activa el altavoz interno.

#define INCL_BASE

#include <os2.h>

ULONG ulFrequency; 

ULONG ulDuration; 

APIRET rc; /* Codigo de error */

rc = DosBeep(ulFrequency, ulDuration);

DosClose

DosClose cierra un handle a un fichero, cauce o dispositivo.

#define INCL_BASE

#include <os2.h>

HFILE fileHandle; 

APIRET rc; /* Codigo de error */

rc = DosClose(FileHandle);

DosCopy

DosCopy copia el contenido de un fichero o subdirectorio al fichero o

subdirectorio de destino.

#define INCL_BASE

#include <os2.h>

PSZ pszFicheroOrigen; 

PSZ pszFicheroDestino; 

ULONG ulModoOp; 

APIRET rc; /* Codigo de error */

rc = DosCopy(pszFicheroOrigen, pszFicheroDestino,ulModoOp);

DosCreateDir

DosCreateDir crea un nuevo directorio.

#define INCL_BASE

#include <os2.h>

PSZ pszDirName; 

EAOP2 pEABuf; 

APIRET rc; /* Codigo de error */

rc = DosCreateDir(pszDirName, pEABuf);

DosDelete

DosDelete borra un fichero. Este puede ser recuperado.

#define INCL_BASE

#include <os2.h>

PSZ pszFileName; 

APIRET rc; /* Codigo de error */

rc = DosDelete(pszFileName);

DosDeleteDir

DosDeleteDir borra un directorio. Es necesario que esté vacío.

#define INCL_BASE

#include <os2.h>

PSZ pszDirName; 

APIRET rc; /* Codigo de error */

rc = DosDeleteDir(pszFileName);

DosFindClose

DosFindClose cierra un cauce de busqueda de ficheros abierto con

DosFindFirst; esto es, termina una búsqueda.

#define INCL_BASE

#include <os2.h>

HDIR hdirDirHandle; 

APIRET rc; /* Codigo de error */

rc = DosFindClose(hdirDirHandle);

DosFindFirst

DosFindFirst busca el primer archivo de un directorio que coincide con el

patrón de búsqueda.

#define INCL_BASE

#include <os2.h>

PSZ pszFileName; 

PHDIR phdirDirHandle; 

ULONG ulAttribute; 

PVOID pResultBuf; 

ULONG ulResultBufLen; 

PULONG pSearchCount; 

ULONG ulFileInfoLevel; 

APIRET rc; /* Codigo de error */

rc = DosFindFirst(pszFileName, phdirDirHandle, ulAttribute, pResultBuf,

ulResultBufLen, pSearchCount, ulFileInfoLevel);

Bit Descripción

31-14 Reservados. Deben ser cero.

13

1: los ficheros que no tienen activo el bit de ARCHIVO son

ignorados.

0: son buscados también los ficheros que no tienen activo el

bit de ARCHIVO.

12

1: los ficheros que no tienen activo el bit de DIRECTORIO son

ignorados.

0: son buscados también los ficheros que no tienen activo el

bit de DIRECTORIO

11 Reservado. Debe ser cero.

10

1: los ficheros que no tienen activo el bit de SISTEMA son

ignorados.

0: son buscados también los ficheros que no tienen activo el

bit de SISTEMA

9

1: los ficheros que no tienen activo el bit de OCULTO son

ignorados.

0: son buscados también los ficheros que no tienen activo el

bit de OCULTO

8

1: los ficheros que no tienen activo el bit

de SOLO_LECTURA son ignorados.

0: son buscados también los ficheros que no tienen activo el

bit de SOLO_LECTURA

7-6 Reservados. Deben ser cero.

5

1: incluye los ficheros que tienen activo el bit de ARCHIVO.

0: excluye los ficheros que tienen activo el bit de ARCHIVO.

4

1: incluye los ficheros que tienen activo el bit de DIRECTORIO.

0: excluye los ficheros que tienen activo el bit de DIRECTORIO.

3 Reservado. Debe ser cero.

2

1: incluye los ficheros que tienen activo el bit de SISTEMA.

0: excluye los ficheros que tienen activo el bit de SISTEMA.

1

1: incluye los ficheros que tienen activo el bit de OCULTO.

0: excluye los ficheros que tienen activo el bit de OCULTO.

0

1: incluye los ficheros que tienen activo el bit

de SOLO_LECTURA.

0: excluye los ficheros que tienen activo el bit

de SOLO_LECTURA.

DosFindNext

DosFindNext encuentra el siguiente archivo de un directorio que coincide

con la cadena de busqueda dada en un DosFindFirst. Al usarse un handle

para identificar la búsqueda, se pueden hacer varias simultáneamente.

#define INCL_BASE

#include <os2.h>

HDIR hdirDirHandle; 

PVOID pResultBuf; 

ULONG ulResultBufLen; 

PULONG pSearchCount; 

APIRET rc; /* Codigo de error */

rc = DosFindNext (hdirDirHandle, pResultBuf, ulResultBufLen,

pSearchCount);

DosForceDelete

DosForceDelete borra un fichero, de forma que es irrecuperable.

#define INCL_BASE

#include <os2.h>

PSZ pszFileName; 

APIRET rc; /* Codigo de error */

rc = DosForceDelete(pszFileName);

DosMove

DosMove mueve un fichero de un directorio a otro distinto.

#define INCL_BASE

#include <os2.h>

PSZ pszOldPathName; 

PSZ pszNewPathName; 

APIRET rc; /* Codigo de error */

rc = DosMove(pszOldPathName, pszNewPathName);

DosOpen

DosOpen abre un fichero nuevo o uno ya existente para trabajar con él.

#define INCL_BASE

#include <os2.h>

PSZ pszFileName; 

PHFILE pshfFileHandle; 

PULONG pActionTaken; 

ULONG ulFileSize; 

ULONG ulFileAttribute; 

ULONG ulOpenFlag; 

ULONG ulOpenMode; 

PEAOP2 pEABuf; 

APIRET rc; /* Codigo de error */

rc = DosOpen(pszFileName, pshfFileHandle, pActionTaken, ulFileSize,

ulFileAttribute, ulOpenFlag, ulOpenMode, pEABuf);

Parámetros

pszFileName

Puntero a una cadena con el nombre del fichero a abrir. Puede

ir acompañado de un path. La barra derecha (/) y la invertida

(\) pueden ser usadas indistintamente.

pshfFileHandl

e

Puntero a una variable donde OS/2 almacenará el handle

asignado al fichero.

pActionTaken

Puntero a una variable donde OS/2 almacenará un valor que

indica la acción tomada por DosOpen. Si la función falla, este

valor no tiene significado.

Valor Definición

1 El fichero existía

2 El fichero fue creado (no existía)

3El fichero fue truncado (existía y fue

reescrito)

ulFileSize

Nuevo tamaño lógico (fin de fichero, EOF) en bytes. Este

parámetro solo es válido cuando se crea un nuevo fichero o se

reescribe uno. En otro caso es ignorado. Es un error crear o

reemplazar un fichero con una longitud distinta de cero si el

modo de apertura está puesto en SOLO_LECTURA

ulFileAttributeDoble palabra conteniendo el siguiente mapa de bits. Solo es

válido si el fichero es creado.

Bit Descripción

31-6 Reservados. Deben ser cero.

5 El fichero ha sido archivado (bit ARCHIVO activo)

4 El fichero es un subdirectorio.

3 Reservado. Debe ser cero.

2 El fichero es un archivo de sistema.

ulOpenFlagCampo de bits de doble palabra que indica la acción a tomar

en caso de que exista o no el fichero.

Bits Descripción

31-8 Reservados. Deben ser cero.

7-4

0000: Abre un fichero que ya existe; falla si no existe. 

0001: Abre un fichero si existe; lo crea el fichero si no

existe.

3-0

0000: Crea el fichero. Falla si ya existe. 

0001: Abre el fichero si ya existe. 

0010: Abre el fichero; si ya existe lo reescribe.

ulOpenModeCampo de bits de doble palabra que describe el modo de

operación de la función.

Bit Descripción

31-16 Reservado. Debe ser cero.

15

Apertura directa: 

0: FileName representa un fichero para ser abierto

normalmente. 

1: FileName es 'unidad' (como C: o A:), y representa

una unidad de disco o disquete para ser abierta para

un acceso directo.

14 0: Las escrituras en el fichero son a través de la cache

de disco. El sistema de ficheros escribe los sectores

cuando ésta se llena o el fichero es cerrado. 

1: Las escrituras en el fichero son a través de la cache

de disco, pero los sectores son escritos antes del

retorno de una llamada de escritura síncrona. Este

estado del fichero lo define como un archivo síncrono.

13

Bit de notificación de errores físicos. 

0: Los errores van a través del manejador del

sistema. 

1: Los errores son notificados al thread que hizo la

llamada a través de un código de retorno.

12

0: El driver de disco puede poner datos de las

operaciones de I/O en su cache. 

1: Las operaciones de I/O al fichero no deben ser

realizadas a través del cache del sistema de ficheros.

11 Reservado. Debe ser cero.

10-8

Especifica el modo en que se va a acceder al fichero,

de cara a la colocación de los datos en el disco:

000: Sin un modo concreto. 

001: Principalmente acceso secuencial. 

010: Principalmente acceso aleatorio. 

011: Aleatorio concentrado en zonas concretas.

7

0: El handle del fichero puede ser heredado por

procesos creados con DosExecPgm. 

1: El handle del fichero es privado, y solo accesible

por el proceso actual.

6-4

Modos de compartición del fichero: 

001: DENY_ALL; no se permite que otros procesos

accedan. 

010: DENY_WRITE; otros procesos pueden abrirlo para

lectura, pero no para escritura. 

011: DENY_READ; otros procesos pueden abrirlo para

escritura, pero no para lectura. 

100: DENY_NONE; otros procesos pueden abrirlo para

lectura y para escritura.

3 Reservado. Debe ser cero.

2-0

Modo de acceso. Define como va a acceder el proceso

que ha abierto el fichero: 

000: READ_ONLY; solo va a realizar operaciones de

lectura. 

001; WRITE_ONLY; solo va a realizar operaciones de

escritura. 

010; READ_WRITE; va a realizar operaciones de

lectura y escritura.

pEABuf

Puntero a una variable de EAs. Antes de hacer la llamada, debe

contener una estructura de atributos extendidos. A la salida,

no hay cambios en ella. Si no se van a definir o modificar

atributos extendidos,pEABuf debe apuntar a cero.

DosQueryCurrentDir

DosQueryCurrentDir devuelve el path completo del directorio actual para el

proceso que realiza la llamada. Es necesario indicar una unidad, pues para

cada una de ellas hay un path distinto.

#define INCL_BASE

#include <os2.h>

ULONG ulDriveNumber; 

PBYTE pbDirPath; 

PULONG pDirPathLen; 

APIRET rc; /* Codigo de error */

rc = DosQueryCurrentDir(ulDriveNumber, pbDirPath, pDirPathLen);

DosQueryCurrentDisk

DosQueryCurrentDisk devuelve la unidad por defecto para el proceso que

hace la llamada.

#define INCL_BASE

#include <os2.h>

PULONG pDriveNumber; 

PULONG pLogicalDriveMap; 

APIRET rc; /* Codigo de error */

rc = DosQueryCurrentDisk(pDriveNumber, pLogicalDriveMap);

PARÁMETROS

pDriveNumber

Puntero a una variable donde OS/2 devolverá el número

de la unidad por defecto. El valor 1 es la unidad A, el 2 la

unidad B, el 3 la unidad C, etc.

pLogicalDriveMap

Puntero a un mapa de bits donde el sistema devuelve un

mapa de las unidades lógicas disponibles. Las unidades de

la A a la Z tienen cada una un bit asignado, desde el 0 al

25, del mapa. Por ejemplo, el bit 0 representa la unidad A,

el 1 la unidad B, etc. El significado de dicho bit es el

siguiente:

Valor Definición

0La unidad lógica no

existe

1 La unidad lógica sí existe

DosRead

DosRead lee el número especificado de bytes a un buffer, desde un fichero,

cauce o dispositivo.

#define INCL_BASE

#include <os2.h>

HFILE FileHandle; 

PVOID pBufferArea; 

ULONG ulBufferLength; 

PULONG pBytesRead; 

APIRET rc; /* Codigo de error */

rc = DosRead(FileHandle, pBufferArea, ulBufferLength, pBytesRead);

DosResetBuffer

DosResetBuffer escribe los buffers de escritura del fichero indicado. Cuando

se escriben caracteres en un fichero, estos son almacenados en un buffer

de, al menos, un sector, el cual se escribe cuando se llena o cuando se

cierra el fichero. Esta llamada fuerza una escritura de dicho buffer aun

cuando no esté lleno.

#define INCL_BASE

#include <os2.h>

HFILE FileHandle; 

APIRET rc; /* Codigo de error */

rc = DosResetBuffer(FileHandle);

DosScanEnv

DosScanEnv busca una variable de entorno (asignada con SET en el

CONFIG.SYS o desde la línea de comandos) y devuelve su contenido.

#define INCL_BASE

#include <os2.h>

PSZ pszEnvVarName; 

PSZ pszResultPointer; 

APIRET rc; /* Codigo de error */

rc = DosScanEnv(pszEnvVarName, &pszResultPointer);

DosSetCurrentDir

DosSetCurrentDir permite cambiar el directorio por defecto. Solo afecta al

proceso que realiza la llamada.

#define INCL_BASE

#include <os2.h>

PSZ pszDirName; 

APIRET rc; /* Codigo de error */

rc = DosSetCurrentDir(pszDirName);

DosSetDefaultDisk

DosSetDefaultDisk cambia la unidad por defecto. Solo afecta al proceso que

hace la llamada.

#define INCL_BASE

#include <os2.h>

ulDriveNumber; 

APIRET rc; /* Codigo de error */

rc = DosSetDefaultDisk(ulDriveNumber);

DosShutdown

DosShutdown graba todos los buffers del sistema, cierra los ficheros

abiertos y graba la cache, preparando el sistema para apagarlo. Puede

tardar varios segundos en ejecutarse.

#define INCL_BASE

#include <os2.h>

ULONG ulReserved; 

APIRET rc; /* Codigo de error */

rc = DosShutdown(ulReserved);

DosWrite

DosWrite escribe un determinado grupo de bytes desde un buffer al fichero

especificado.

#define INCL_BASE

#include <os2.h>

HFILE FileHandle; 

PVOID pBufferArea; 

ULONG ulBufferLength; 

PULONG pBytesWritten; 

APIRET rc; /* Codigo de error */

rc = DosWrite(FileHandle, pBufferArea, ulBufferLength, pBytesWritten);

ERRORES DE OS/2 POR CODIGO

0 Sin error

1 Función no válida

2 Fichero no encontrado

3 Path no encontrado

4 Demasiados archivos abiertos

5 Acceso denegado

6 HANDLE no válido

8 No hay suficiente memoria

10 Entorno no válido

11 Formato no válido

12 Modo de acceso no válido

13 Datos no válidos

15 Unidad no válida

16 Intenta borrar el directorio actual

17 Los dispositivos fuente y destino son distintos

18 No hay más ficheros

19 El sistema es de solo lectura o está protegido contra escritura

26 Disco sin sistema de ficheros

29 Ha fallado la escritura

32 Violación de compartición

33 Violación del bloqueo

36 Desbordamiento del buffer de compartición

82 No se puede crear fichero

84 Fuera de las estructuras (error interno)

87 Parámetro no válido

89 Sin slots de procedimientos

90 El thread no estaba parado

95 Interrupción

99 Dispositivo en uso

103 Demasiados SEM_REQUEST

105 El propietario del semáforo ha muerto

108 Unidad bloqueada

109 El cauce (pipe) está cerrado

110 Fallo en la apertura

111 Desbordamiento del buffer

112 Disco lleno

113 No hay más handles de busqueda

114 El handle de destino no es válido

115 Violación de protección

123 Nombre no válido

127 Proc no encontrado

164 No se pueden crear más threads

170 Ocupado

182 Ordinal no válido

183 Ya existe

187 Semáforo no encontrado

190 Tipo de módulo no válido

191 Signatura de EXE no válida

192 Marca de EXE no válida

195 MINALLOCSIZE no válido

196 Enlace dinámico pedido desde un anillo no válido

203 Variable de entorno no encontrada

206 Nombre de fichero demasiado largo

208 Meta-expansion demasiado larga

212 Bloqueado

217 Procesos Zombie

224 No existe tal ventana (la sesión no se puede traer a primer plano)

230 Cauce incorrecto

231 Cauce (pipe) ocupado.

233 Cauce no abierto

234 Demasiados datos

250 Fichero origen y destino son el mismo

251 El directorio destino está dentro del fuente

254 Nombre de EA no válido

255 Lista de EAs inconsistente

Valor de EA no soportado

267 Directorio incorrecto

274 Ya se está ejecutando un ShutDown

275 EAs no coinciden

282 EAs no soportados en la unidad

283 Hay EAs importantes

285 Nombre duplicado

288 No se ha hecho DosRequestMutexSem

290 No quedan handles disponibles

291 Demasiadas aperturas

294 Thread no terminado

298 Demasiados post ejecutados

299 Ya se encuentra posted

300 El semáforo ya está borrado.

301 Semáforo ocupado

303 PID no válido

304 PDELTA no válido

305 No hay descendientes

307 PCLASS no válido

308 SCOPE no válido

309 Identificador de Thread no válido

310 No se puede reducir un segmento subasignado

311 No hay suficiente memoria libre

312 Superposición no válida en el bloque

322 Incapaz de despertar

323 Semáforo del sistema

324 No quedan temporizadores disponibles

326 Handle de temporizador no válido

327 Fecha u hora no válida

330 El proceso no es el dueño de la cola

332 Cola duplicada

333 El elemento no existe

334 No hay memoria suficiente

335 Nombre no válido

337 Handle de cola no válido

340 El elemento anterior es el último

341 Acceso no permitido

342 Cola vacía

343 No existe ese nombre

350 Puntero no válido

355 Modo no válido

356 Ancho no válido

358 Fila no válida

359 Columna no válida

366 Valor de WaitFlag no válido

367 No está bloqueado

369 Identificador de sesión no válido

375 Valor de espera no válido

376 Longitud no válida

377 Mascara de Echo no válida

378 Mascara de modo de entrada no válida

385 No hay ratón.

387 Parámetro no válido.

390 Nombre de dispositivo no válido.

393 No hay datos en la cola de eventos.

395 Frecuencia no válida

418 Llamada no válida

421 Parámetros no válidos

422 El thread SavRestoreWait ya tiene dueño

423 El thread SavRestoreWait ha sido liberado

429 El proceso está en background

430 Ilegal durante POPUP

433 Valor de Wait no válido

434 Ya está bloqueado

436 Handle VIO no válido

438 Longitud no válida

439 Handle KBD no válido

445 Se requiere el foco del teclado

447 El teclado está ocupado

458 Opción de STOP no válida

459 Reserva no válida

460 La sesión no es hija de la actual

463 Reintentar el Sub Alloc

464 KBD inactivo (proceso en detached)

465 VIO inactivo (proceso en detached)

466 MOU inactivo (proceso en Detached)

467 No hay una fuente adecuada para ese modo

468 Una fuente de usuario está activa

484 Desbordamiento de CritSec

485Underflow de CritSec (se ha intentado ejecutar

más Exits que Enters).

487 Dirección no válida

494 VIO Extended SG

501 Mouse no console

504 KBD Extended SG

505 MOU extended SG

532 DosSub corrupto

640 TimeOut (finalizó el tiempo)

RECOMENDACIONES

Los usuarios de OS/2 deberían considerar igualmente que el tiempo es dinero y que no

siempre han de buscar por una solución freeware, excepto en el caso que esta sea la mejor

disponible. Cada compra de productos OS/2 cuenta y algunos de los productos de OS/2 son

de los de mayor calidad del mercado, aunque ahora lo ha reemplazado por eComStation.

Para IBM, el destino de OS/2 es ser utilizado únicamente por las grandes empresas. IBM

pretende convertir a OS/2 en un sistema operativo especializado capaz de ejecutar "un

puñado" de cosas en el escritorio, pero manteniéndolo básicamente como un cliente de JAVA.

Esto va en contra de las necesidades de la mayoría de usuarios activos de OS/2.

En consecuencia, los usuarios y vendedores de OS/2 hemos de trabajar conjuntamente para

controlar nuestro propio futuro con eComStation. La dirección que toma IBM nos asegura

que tendremos el soporte necesario de drivers que es lo único que las terceras partes no

podemos hacer.

Una página web para el WarpCaster que sea controlada por alguien sin intereses, con

enlaces desde las páginas de todos los desarrolladores de aplicaciones OS/2 y con un enlace

creado por la instalación de todos los programas de OS/2 también es de vital importancia.

Una organización internacional de usuarios de OS/2 que trabaje conjuntamente con los

desarrolladores de software también ayudará a acercar el OS/2 a los nuevos usuarios y a

mantener a aquellos que no están en la red al día de las novedades relacionadas con OS/2.

Y, por último, una organización que sea capaz de presentar nuevas mejoras y prestaciones al

OS/2 para mantenerlo con la últimas prestaciones. Esta organización debería trabajar para

que los ISVs de OS/2 crearan estos componentes después que un número significativo de

usuarios mostrara su interés en que se hicieran. Incluso, al tener un número importante de

nuevas prestaciones, nos podríamos plantear el lanzamiento de una actualización del

sistema operativo (algo así como Power OS versión 5 o similar) en el caso de que IBM lanzara

definitivamente la toalla. Creo, igualmente, que de esta forma los usuarios de OS/2 serán

más conscientes de como ellos mismos pueden afectar al futuro de OS/2 para permitir que

en el futuro continúen apareciendo aplicaciones nativas para OS/2.

OS/2 ha tenido una autentica historia épica y, con un poco de suerte, la aventura no ha

hecho más que empezar.

Autentica historia épica y, con un poco de suerte, la aventura no ha hecho más que empezar.

CONCLUSIONES

Luego de analizar e investigar el tema tratado, podemos decir

concretamente que la tecnología va de acuerdo a las necesidades del diario

vivir; que, cada día van naciendo ideas nuevas, nuevas fórmulas, nuevas

técnicas, y por supuesto, según nuestro tema en cuestión, nuevas versiones

de los llamados “Sistemas Operativos”, en nuestro caso, el denominado

OS/2. Es así como llegamos al presente. Hoy en día, están disponibles

Windows 7 y Windows 8, las más recientes creaciones en Sistemas

Operativos.

Además de todos los beneficios de productividad y eficacia que

presentaba dicho sistema, es importante señalar los siguientes puntos más

destacables:

OS/2 ofrece u “ofrecía” multitarea para poder controlar varias

actividades en forma simultánea. El usuario podía estar trabajando con una

aplicación, imprimiendo una anterior y haciendo otras cosas.

OS/2 utilizaba ‘planificación apropiada’, podía quitarle la CPU a un

proceso y dársela a otro que considere más importante. Utilizaba de igual

forma, la denominada Memoria Virtual, en donde permitía al usuario

controlar su propio espacio de direcciones. En un OS/2 multitarea

resultaba mejor crear programas pequeños, cada uno de los cuales

realizaba bien una función o un conjunto de funciones afines y después

hacer que se comunicaran entre sí para alcanzar los objetivos del usuario.

Lo que hoy en día en materia de Programación se asemeja con

‘Programación Modular’.

Sin duda, en un futuro no muy lejano, aparecerán nuevas versiones,

nuevos diseños de sistemas operativos. Probablemente, así como

comparamos OS/2 con Windows 8, se compararán Windows 8 con otro

mucho más avanzado.

BIBLIOGRAFIA

INTRODUCCION A LOS SISTEMAS OPERATIVOS

Segunda Edición, 1993

H. M. Dertel.

Pág. 822-871

INTERNET

www.altavista.com

http://www.rastersoft.com/OS2

www.os2spain.org

www.internet.com.uy

www.monografías.com

www.yupi.com

www.os2ss.com