¿Que el software? ¿Qué es el software y los tipos de software? ¿Qué es el software y el hardware?

SOFTWARE

Cuando compramos una computadora nos ocupamos de averiguar si viene sin sistema o si viene con Windows o Linux, antivirus, navegador de Internet y otros “programas” que podemos necesitar para el uso cotidiano. Sabemos que sin esos programas ni siquiera podemos encender la computadora. También conocemos que esos “programas”, o software pueden ser adquiridos en comercios del ramo o bajados gratuitamente por Internet o “pirateados”.

Para las organizaciones el software sigue siendo un factor fundamental como generador de ventajas competitivas, ya no tanto por la posibilidad de obtenerlo, sino por su uso adecuado y eficiente para el contexto en que se desenvuelve la organización. Las herramientas ahora no sólo están disponibles, sino que también son accesibles; pero si no se utilizan adecuadamente difícilmente ayudarán a la organización a progresar en este mundo competitivo y globalizado.

Conceptos

Una computadora trabaja de acuerdo a un programa formado por una serie de instrucciones ordenadas en una secuencia predeterminada, siendo cada instrucción una orden específica en las que se descompone un trabajo.

Es decir, un programa se integra en un conjunto de operaciones que han de ejecutarse. Cada operación es una orden que se imparte a la computadora para ser ejecutada. A través de las instrucciones se especifica lo que se va a hacer, cómo hacerlo y lo que va a usar para llevar a cabo la operación.

Uno o más programas constituyen un software. En una computadora convivirán varios software de distintos desarrolladores destinados a diferentes necesidades.

El software puede ser clasificado según diferentes criterios, pero hay una división básica entre el software destinado a cubrir aplicaciones generales (software de aplicación) y el software que se utiliza para la administración o gestión de recursos físicos del hardware de computadoras (software de sistema o de base).

A su vez, todo software debe ser desarrollado y para ello se requieren lenguajes de programación que permitan definir los pasos o instrucciones para cumplir con una tarea.

Los traductores permiten pasar de los lenguajes simbólicos usados para la codificación, al lenguaje de máquina.

La propiedad intelectual y los derechos de autor incluyen el software y por lo tanto no tener en cuenta este aspecto puede generar importantes inconvenientes legales y económicos a la organización.

Software de Aplicación

Es el conjunto de programas creados para atender trabajos generales o específicos del usuario, referidos al cumplimiento de sus diversos objetivos. En cambio, el software o sistema de base actúa como apoyo para que podamos usar la computadora, pero cualquier actividad que pretendamos realizar desde un punto de vista funcional, implica la utilización de un software de aplicación.

El software de aplicación necesita parte de software de sistema para ejecutarse en la computadora. Sin embargo, existe la posibilidad de que los programas sean ejecutados sin software de base, hecho que puede acarrear gran complejidad en el desarrollo de los mismos; por esta razón, expresamos que el software de aplicación necesita del software de base para ser ejecutado.

El software de aplicación puede ser dividido en:

· De propósito general (tareas comunes para todo tipo de usuario. Ej. Navegadores de Internet, planillas de cálculo.)

· De propósito específico (tareas específicas del usuario. Ej. ERP, CRM, SCM, etc.)

Las formas de obtener un software de aplicación pueden ser:

· Confeccionados especialmente para un usuario determinado: introducir en el software las características propias de ese usuario determinado. El desarrollo puede ser realizado internamente o contratado a una organización externa. En ambos casos, tanto la propiedad del software desarrollado como el código fuente y la documentación técnica interna, deben quedar en manos de la empresa contratante.

· Incorporando paquetes pre-planeados: los paquetes se orientan a aplicaciones específicas de los usuarios, pero concebidos en forma estándar con el fin de comercializar múltiples copias. Son sistemas mucho más flexibles para la satisfacción de requisitos de usuarios en forma particular.

Los paquetes de gestión (ERP), los de relacionamiento con los clientes (CRM), los software integrados de oficina, de correo electrónico, navegadores de Internet y otros de uso corriente, son también ejemplos de software de aplicación pre planeados.

El modelo de negocios tomado en cuenta en el desarrollo de un software confeccionado para el usuario es la necesidad específica de ese usuario. En cambio, en los sistemas pre planeados, el modelo tomado en cuenta resulta ser la conjunción de los requerimientos generales que se persigue satisfacer con dicha aplicación, independientemente del usuario particular.

Es posible una estrategia intermedia, “personalizar” la aplicación a las necesidades de los usuarios, o bien, contratando el desarrollador del paquete para que “personalice” directamente el propio paquete.

El esquema tradicional es que el software de aplicación se ejecute en la infraestructura de Tics de la organización. Existe una alternativa denominada ASP (sea hecho “a medida” o paquete). Tiene como característica, estar basado en la Web y de bajo costo de inversión inicial. Reduce en gran medida las necesidades de infraestructura y se ejecuta desde los servidores del proveedor; sólo requiere el uso del navegador de Internet.

Software de Sistema

Para definir el software de sistema o de base lo dividiremos en tres grandes grupos:

Sistema Operativo

Los sistemas operativos son conjuntos de programas concebidos para efectuar la administración o gestión de los recursos físicos de la computadora. La filosofía que anima su desarrollo, es que la computadora debe trabajar lo más continua posible, y para ello el sistema operativo efectuará la administración de los recursos en proceso.

Hubo y hay muchos sistemas operativos pero los más conocidos y difundidos son WINDOWS, LINUX, UNIX, MAC OS X Y CHROME OS.

En una red podrán convivir distintos sistemas operativos.

Es frecuente que a un sistema operativo se le denomine también “plataforma”. Cuando un software funciona con distintas plataformas se lo denomina multiplataforma. Para que un software “corra” en una plataforma, por un lado su lenguaje de máquina debe poder ejecutarse en el procesador y por el otro, debe poder relacionarse, y utilizar los servicios del sistema operativo.

En una misma computadora pueden coexistir más de un sistema operativo, ya sea en forma real como en forma virtual. Sistemas operativos reales, sólo uno de ellos queda en ejecución y para utilizar otro es necesario reiniciar la computadora y seleccionarlo. En cambio, si se utiliza virtualización, todos los sistemas operativos se encuentran activos al mismo tiempo y no es necesario reiniciar para trabajar sobre alguno de ellos. Cada uno de ellos se puede considerar como un equipo virtual diferente. Esta característica es sumamente provechosa en el caso de los servidores, aunque también cómoda en cualquier computadora.

Software para el desarrollo

Existe un conjunto de softwares específicos que permiten facilitar el proceso de construcción. Se utilizan lenguajes de programación que resultan más sencillos de manejar por los desarrolladores, pero que deben ser traducidos al lenguaje binario de máquina para poder ser efectivamente ejecutados.

Utilitarios

Son usados para cumplir un número de funciones que, por estándares y repetitivas, resultan necesarias para cualquier usuario en tareas relacionadas con el uso, diagnóstico y mantenimiento de la computadora. Muchos utilitarios vienen con el sistema operativo, muchos otros son de uso gratuito y pueden ser bajados de Internet y otros son fácilmente adquiribles en cualquier negocio del ramo o en la red. (Ej. Antivirus)

Veamos los más utilizados.

· Explorador: el directorio (denominado FAT, del inglés FILE ALLOCATION TABLE) es básicamente un archivo más dentro de la unidad de discos que contiene además de la identificación o nombre del disco, una serie de datos de los archivos lógicos que están grabados en ese volumen así como también la cantidad de espacio disponible y su ubicación. A su vez, en una estructura de tipo árbol, pueden existir subdirectorios que, a su vez, pueden contener archivos y otros subdirectorios o carpetas. Los datos más usuales que contiene cada archivo lógico son el nombre del archivo, la cantidad de espacio que ocupa, las direcciones del archivo, la fecha de creación, la fecha de modificación y atributos del archivo, entre otros. Este utilitario permite visualizar el contenido del directorio y subdirectorios, así como de otros equipos conectados en red y características de configuración (panel de control). También nos permitirá eliminar un archivo de asignando el espacio ocupado y colocándolo en el espacio disponible o renombrar un archivo. Este utilitario es de los más usados, ya que también nos permite buscar, copiar archivos, ver sus propiedades, abrirlos o ejecutarlos desde su interfaz, ver el espacio libre, etc.

· Reorganizador de espacio en disco (desfragmentador): cuando el espacio ocupado y libre en un disco se encuentra muy fragmentado, se hace necesario compactar (desfragmentar) los archivos y reorganizar los espacios. El movimiento de la cabeza del disco es el tiempo más importante de una operación o lectura o grabación. Cuando hay bastante fragmentación, la ejecución de este proceso permitirá lograr una mejora en el rendimiento del equipo. La función de este utilitario será la de ir copiando los archivos lógicos dentro del volumen sin dejar espacios libres entre ellos.

Sistemas Operativos

Son conjuntos de programas concebidos para efectuar la administración de los recursos de la computadora. Algunos de ellos se encuentran residiendo permanentemente en la memoria principal mientras la computadora esté encendida. Otros residen en la memoria sólo cuando se los necesita ejecutar, encontrándose almacenados en unidades de memoria secundaria. A los primeros se los conoce como residente, supervisor, monitor y a los segundos transientes.

El sistema operativo tiene 2 objetivos básicos:

1) facilitar el uso de la computadora, proporcionando servicios para la ejecución de programas,

2) actuar como entorno de la aplicación, en el cual el programa es ejecutado, administrando los recursos de una manera eficiente.

Los componentes que conforman un sistema operativo materializan, entre otras, las siguientes tareas en la ejecución de una aplicación:

1) Carga de programas y componentes

2) Administración y manejo de las unidades del hardware

3) Administración y manejo de datos

4) Comunicación de programa a programa.

5) Interfase hombre/máquina/sistema de aplicación.

6) Supervisión de la ejecución de los diferentes programas.

7) Alocación de programas/datos de la memoria.

8) Manejo de las interrupciones.

9) Mantenimiento de flujo constante de trabajo a la computadora.

10) Tareas de comunicación de datos.

Las funciones de un sistema operativo son:

1) Carga inicial de los componentes residentes en la memoria principal.

2) Administración de la memoria principal.

3) Administración de/los procesador/es.

4) Administración de los dispositivos de entrada/salida.

5) Administración de los procesos a ser ejecutados.

6) Administrador de datos.

Multiprogramación - Multiprocesamiento

Cuando se ejecutan varios programas o tareas en forma concurrente, surgen importantes complicaciones para el uso del hardware.

· Multiprogramación: consiste en el manejo casi simultáneo de dos o más programas independientes, intercalando su ejecución y compartiendo tiempos del procesador. El control de la ejecución de esta intercalación lo realiza el sistema operativo. Por medio de la multiprogramación, se efectúa la administración de la ejecución en paralelo de dos o más programas que residen simultáneamente en la memoria de la computadora. Características generales:

- Intercalación: ya que más de un programa se encuentra cargado en la memoria principal en condiciones de ejecutarse, ejecutándose o demorados. Pero todos ellos compartiendo tiempos de procesador y asignaciones de memoria.

- Instantaneidad: se simula trabajar como si existiera un solo programa cargado de ejecución instantánea.

- Independencia: se trata de distintos programas, con distintas asignaciones de memoria y de dispositivos de hardware.

Los sistemas operativos que trabajan en multiprogramación tienen forma de proteger la memoria de trabajo de cada programa. El objetivo principal es el aprovechamiento del procesador, permitiendo que varios programas o diferentes aplicaciones se estén ejecutando, intercalando y compartiendo tiempos. Se minimizan los “tiempos de espera”.

· Multiprocesamiento: asignar una cantidad de procesadores “N” a una cantidad de programas “M”, donde generalmente “N>1”. El sistema operativo deberá asignar cada procesador a los distintos programas sabiendo que contamos con más de un procesador. Cuando un programa termina o se detiene, uno de los procesadores queda disponible y se podrá asignar a otro programa o proceso.

Funciones

La función de un sistema operativo es la de administrar los recursos de la computadora.

El sistema operativo tiene a su cargo la administración de cinco elementos principales:

1) Memoria principal

2) Procesador/es

3) Dispositivos de entrada/salida

4) Procesos a ser ejecutados

5) Datos

La parte que reside siempre en memoria principal durante la ejecución de los distintos programas. Nosotros utilizaremos los nombres de residente o supervisor para referenciar esta parte del sistema operativo.

En todos los sistemas operativos existe un programa muy especial que no cumple una función de administración de recursos y que tiene como única misión traer a memoria al supervisor, y se lo considera formando parte del sistema operativo. Este proceso recibe normalmente el nombre de booteo.

Este programa, una vez que se encuentra en memoria, comenzará a ejecutarse cumpliendo una serie de tareas que difieren de acuerdo al sistema operativo.

Una vez cargado el supervisor en memoria, este programa desaparece; en consecuencia diremos que es un programa transiente del sistema operativo.

Si bien, por lo general este programa sólo se ejecutará una vez hasta que el equipo sea apagado, puede haber razones para necesitar “bootear” nuevamente. Entre ellas podemos citar: cambiar de sistema operativo cuando la computadora está “colgada” o un programa no responde, restaurar el sistema frente a errores desconocidos, etcétera. Esta operación puede ser realizada a través del teclado, del Mouse o por una tecla de la computadora (reset).

· Administración de memoria: de acuerdo a las características de las computadoras y modalidades de procesamiento; la evolución de las técnicas de utilización de la memoria, junto con el aumento del tamaño de las memorias reales, ha logrado superar la limitación que la memoria real representaba en el pasado. Cualquiera sea la forma que se utilice, será el supervisor del programa el que se encargue de las tareas necesarias para la administración de la memoria.

· Memoria virtual: Es un espacio de direcciones virtuales en una unidad de almacenamiento externo de acceso directo (disco magnético), cuyo tamaño máximo está determinado por el esquema de direccionamiento del computador. Si cada byte tiene una dirección distinta, la cantidad de bytes que pueden ser referenciados dependerá de la cantidad de bits que se utilicen para expresar una dirección. En cambio, el almacenamiento que puede ser directamente accedido por el procesador se denomina memoria real. Cuando no existe memoria virtual, no hay diferenciación entre el espacio de direcciones y la memoria real; el espacio de direcciones que puede ser usado en los programas tienen idéntico tamaño al espacio de memoria real disponible. En cambio, si usamos memoria virtual, el espacio de direcciones utilizable por los programas es aquel determinado por el tamaño de la memoria virtual implementada y no el espacio de direcciones provisto por la memoria real disponible. Los programas se refieren a los datos e instrucciones por la dirección de memoria virtual, sin conocer la ubicación física de memoria real. Dado que la memoria virtual no existe como una entidad física de memoria principal, las instrucciones y datos de un programa referenciados por direcciones virtuales deben ser contenidos en alguna ubicación física de memoria real para ser ejecutados; los datos e instrucciones correspondientes deben ser llevados de la memoria virtual a la memoria principal. La parte residente del sistema operativo no integra la memoria virtual y se encontrará alojado permanentemente durante la ejecución de los distintos programas, en ubicaciones contiguas de la memoria real. Los contenidos de la memoria virtual están divididos en porciones o secciones de tamaño fijo. El programa estará completo en la memoria virtual, pero en la memoria real sólo estarán algunas secciones o páginas del mismo que irán cambiando a lo largo de su ejecución. El espacio de direcciones de la memoria virtual, que estará contenido en dispositivos de acceso directo, corresponde a los programas que se están ejecutando. En general, se controla la actividad de las secciones de todos los programas que se están ejecutando a fin de mantener, en la medida de lo posible, en la memoria real a las secciones más activas, dejando las menos activas en la memoria virtual. Los hardwares de traducción de direcciones o la función interna de mapping son los mecanismos por los cuales se pueden traducir las direcciones de memoria virtual en direcciones de memoria virtual en direcciones de memoria real durante la ejecución de las instrucciones. El sistema operativo mantiene distintas tablas que indican, entre otros datos:

o Cantidad de memoria virtual implementada.

o Secciones que están presentes en la memoria real.

o Direcciones indicando la ubicación en la memoria real de cada una de dichas secciones.

o Elementos de juicio para determinar qué secciones se tratarán de dejar en la memoria real y cuáles no qué sección será desplazada cuando otra sección de memoria virtual deba ser llevada a memoria real.

El manejo de páginas implica conocer concretamente si una página se encuentra o no en la memoria real y, por otro lado, qué página se desplazará cuando la memoria real esté completa y se deba traer una nueva página. Al utilizar memoria virtual, las direcciones virtuales se convierten en direcciones reales de memoria de diferentes maneras. La más sencilla es aquella que direcciona una página del programa y un desplazamiento dentro de la página. Si consideramos que un programa está dividido en páginas de tamaño fijo, toda dirección podrá ser expresada como número de página y desplazamiento dentro de ella (el valor que puede asumir el desplazamiento será 0 hasta el tamaño de la página menos 1). Cuanto mayor sea la actividad de paginación, mayor será la probabilidad de una menor performance del computador. Es por ello que, si tenemos varias aplicaciones abiertas, aún cuando aparentemente no estén trabajando, la respuesta del equipo puede ser más lenta. Un balance adecuado entre la memoria virtual y real busca el equilibrio de tiempos de paginado y espera para procesos, a los efectos de mejorar la performance general del equipo. Aún cuando la memoria virtual puede ser de muchos gigabytes, para determinar su tamaño más conveniente hay que tener en cuenta distintos factores como:

o El tamaño de la memoria principal.

o La velocidad del dispositivo de acceso directo que va a contener la memoria virtual y el canal al cual

está conectado, y su grado de utilización.

o La velocidad de procesador/es.

o Las características de los programas que se ejecutan concurrentemente.

· Administración de procesadores: función más importante del sistema operativo. El programa supervisor es quien se encarga de manejar la multiprogramación y el multiprocesamiento, a través de dos componentes denominados planificador, que se encarga de elegir el programa que ejecutará en cada oportunidad en que dicha selección sea necesaria; y control del tráfico, cuya función se puede resumir como la del manejo de las interrupciones. En general, el ordenamiento de asignaciones se organiza alrededor de una especie de lista de aplicaciones, programas o módulos a ser ejecutados y que se encuentran en distintos estados:

o Ejecutándose: El programa se encuentra trabajando en ese instante y usando el procesador.

o Listo para ejecutarse: El programa se encuentra en condiciones de ser ejecutado, esperando que se le asigne el procesador.

o Detenido: Se encuentra a la espera de una acción que cambie su estado de detención. Otro caso sería cuando la página a utilizar no se encuentre en la memoria principal y debe ser traída desde la memoria virtual; mientras se realiza tarea, el programa estará en estado “detenido”.

A partir de aquí habrá que especificar qué ocasiones se consultará la lista para asignar el procesador. La asignación del procesador consiste ahora, una vez rastreada la lista, en la elección de uno de los programas en estado “listo para ejecutarse”. Un programa que se encuentre en estado de ejecución podrá ser interrumpido por el cambio de estado de “detenido” a “listo para ejecutarse” de otro programa de mayor prioridad o privilegio. Es decir, que el programa en ejecución se puede detener por una causa ajena a su propio trabajo. Una interrupción es una comunicación al supervisor del sistema operativo del acaecimiento de un evento que debe ser analizado. Es por ello que frente a una interrupción, cesa la ejecución del programa que se encuentra usando el procesador (en “estado de ejecución”) pasándolo al estado “listo para ejecutarse”, el supervisor toma el control del procesador para ejecutarse, analizar la interrupción, procesarla, y una vez procesada, se continuará ejecutando el programa de la lista ( en estado “listo para ejecutarse”) que corresponde de acuerdo al método que se utilice. Un método muy simple y utilizado es el de ciclos de tiempo constante, también denominado en inglés round robin, por su mecanismo de ronda. La lista es rastreada a intervalos o ciclos de tiempo constantes. En este caso el ordenamiento de la lista no es significativo, ya que no existen privilegios o prioridades. Comienza a ejecutarse el primero que llega. Empezando con un programa, la lista es rastreada:

o Cuando el programa termina.

o Cuando el programa no puede continuar su ejecución ( por Ej. por operaciones de entrada/salida)

o Cuando el contador de tiempos genera una interrupción (al cumplirse el ciclo de tiempo)

El rastreo de la lista comienza en el programa siguiente, volviendo al principio, después del último. Sólo puede ser seleccionado un programa que esté en estado “listo para ejecutarse” y, en el caso en que todos se encuentren “detenidos”, continuará rastreando hasta cambiar el estado de un programa a “listo para ejecutarse”. Si un programa está en “ejecución” y se produce una interrupción de fin de operación de entrada/salida de otro programa, luego de procesada la interrupción, se seguirá ejecutando el programa que estaba “en ejecución”, ya que no había concluido su ciclo de tiempo. En cambio si un programa “en ejecución” solicita al sistema operativo una operación de entrada/salida pasará a estado “detenido”, perdiendo el programa la parte del ciclo de tiempo que aún restaba. Este método no permite que una actividad de mucho tiempo de uso de procesador lo monopolice en algún momento.

· Administración de procesos a ser ejecutados: una función importante del sistema operativo será la de proveer los servicios necesarios para que se inicie la ejecución de los programas o procesos indicados por el usuario. Esta interfase del sistema operativo con el usuario es denominada shell (caparazón) ya que esconde detalles del sistema operativo. Normalmente el usuario utiliza una interfaz gráfica (GUI o Graphical User Interface) y con un simple doble click del Mouse, iniciará la ejecución de un programa. El sistema operativo deberá encargarse de cargarlo en la memoria principal y preparar o asignar los recursos que utilizará la ejecución (contexto de ejecución). Sin embargo, los sistemas operativos también tienen otras alternativas, como mandatos de usuario o sentencias de control de trabajos, que debe primeramente controlar para luego ejecutar lo indicado. Una vez cargado él o los programas en memoria y asignados los recursos para su ejecución, otras rutinas del supervisor se encargará de llevar adelante su ejecución.

· Administración de dispositivos de entrada/salida: analizaremos algunos aspectos específicos en la administración de los dispositivos o unidades periféricas de entrada y salida

o Administración de dispositivos periféricos de entrada/salida: se orienta al uso de canales de entrada/salida y las unidades periféricas. Todas las unidades periféricas se encuentran vinculadas al procesador a través de canales de distinto tipo, Un canal está constituido por una memoria independiente por un procesador de entrada/salida que puede trabajar simultáneamente con el procesador principal y que permite, en definitiva, facilitar el trabajo en multiprogramación, dejando libre al procesador principal mientras se ejecuta la operación de entrada/salida. Las unidades de entrada/salida manejan velocidades muy inferiores al procesador y memoria principal. Si consideramos que cada programa que se está ejecutando puede solicitar distintas operaciones de entrada/salida, vemos que es necesario que otro programa de control superior se encargue de lograr que todas esas operaciones se ejecuten de la manera más eficiente posible. Un canal puede realizar de a una operación por vez, o más de una, y puede tener conectadas varias unidades periféricas. Algunos de ellos, exigen que sean del mismo tipo y otros admiten unidades de distinto tipo. Para el uso de unidades de entrada/salida se requiere el hardware y el software correspondiente. Por eso es que muchas veces debemos usar el CD del fabricante para instalar un driver no incluido en el sistema operativo y necesario para manejar el dispositivo de manera eficiente y con las funcionalidades. Cada periférico de entrada/salida requiere su propio conjunto especial de instrucciones para cada operación. El sistema operativo y los canales o controladores proporcionan una interfaz uniforme que esconde esos detalles de forma que los programas puedan acceder a dichos dispositivos utilizando lecturas y escrituras sencillas. Un mismo canal de puerto USB puede manejar impresora, un mouse, pendrive o un disco externo. Los dispositivos de acceso directo permiten el acceso compartido y alternando entre distintos programas. Si la unidad es de acceso secuencial, cuando el supervisor la asigna a un programa no iniciará para ese dispositivo operaciones de entrada/salida de otro programa, hasta que el que lo tiene asignado no lo desasine, ya que se tratará de un dispositivo de acceso dedicado.

o Impresora: la asignación de la impresora puede aparejar grandes inconvenientes de eficiencia en el uso de la computadora, si consideramos trabajar con multiprogramación, es muy probable que más de un programa requiera el uso de la impresora. En este caso, mientras un programa ejecuta, él o los otros deben ser detenidos, hasta que el primero no desasigne la impresora. Debemos considerar que mientras se imprime el listado, todos los programas estarán en la memoria, lo que implica un gran desaprovechamiento de este recurso, sobre todo si tenemos en cuenta que la impresora es uno de los dispositivos más lentos de una computadora. Es así como los sistemas operativos cuentan con una facilidad denominada spooling (operación periférica simultánea en línea), de utilización optativa. Cada vez que un programa asigna la impresora, el sistema operativo genera un archivo en una unidad de disco. Además, cada vez que un programa solicita una operación de impresión, el supervisor desvía la impresión y la graba en el archivo correspondiente. Cada programa no se entera de esta actividad del supervisor que resulta totalmente transparente para ellos. Los distintos listados grabados en disco conforman una cola de impresión que se va imprimiendo realmente, a medida que la impresora va quedando libre. El spooling hace independizar totalmente los conceptos de impresora física e impresora lógica. El computador tendrá todas las impresoras virtuales necesarias independientemente de las impresoras físicas. Debe tenerse en cuenta que esas imágenes de impresión que se grabarán en disco magnético, ocupan un lugar en dicho soporte, y que debe tenerse presente al configurar el equipo. Debemos considerar las actividades conducentes a concretar la impresión física del listado, es decir, su pase del soporte de spool a impresión. Será necesario que el sistema operativo cumpla estas actividades, sino también otras que hacen al control de esta facilidad.

o Discos y unidades lógicamente similares: el problema básico de la administración de los espacios de discos está dado por la asignación del espacio a los archivos en los momentos de generación y expansión o reducción debido a su actualización. La mera lectura o modificación de los registros de un archivo no implica problemas de administración del espacio de estos soportes. El sistema operativo es el encargado de asignar la ubicación del archivo; cada archivo puede dividirse físicamente en unidades de alocación o asignación de tal manera que se puedan aprovechar los huecos que van quedando. La asignación es realizada por el sistema operativo tratando siempre de minimizar los huecos y de evitar que las unidades de asignación de un mismo archivo sean distantes físicamente. En el directorio se guardan las direcciones de las distintas unidades de asignación que conforman cada archivo. Cuando una unidad de asignación se encuentra completa de registros y debe agregarse un nuevo registro, la unidad se subdivide en dos, generando una nueva unidad del archivo y repartiéndose los registros en las unidades y quedando en consecuencia, lugar disponible en ambas para futuras incorporaciones. Este método permite la extensión de un archivo luego de haber sido creado y resulta particularmente útil para la actualización del contenido de los archivos.

· Administración de datos: las funciones de manejo de unidades periféricas no incluyen el análisis particular referido a cómo buscar o ubicar los datos dentro de un archivo. Estas funciones son cumplidas por el sistema operativo para determinadas formas de organización de archivos, o bien, por los sistemas de administración de bases de datos. Este manejo físico de las unidades periféricas se realiza por sus unidades físicas y no por las unidades lógicas que procesa el programa. En un bloque físico puede hacer menos de 1 más de 1 unidad lógica. Nuevamente es el sistema operativo el que se encarga de que el programa pueda trabajar con sus unidades lógicas de datos, independizando del manejo de las unidades físicas de la unidad de entrada/salida utilizada. Un programa realizará la misma operación de lectura o grabación, sin importar si utiliza un disco magnético, un disco magnético, un disco óptico, un pendrive o un disco de estado sólido, a pesar de que cada uno de esos medios tiene características distintas y sus bloques físicos no coinciden. El programa se relaciona con la gestión lógica de entrada/salida que a su vez interactúa con la gestión física de la unidad periférica.

Lenguajes de Programación

Un procesador solo puede ejecutar instrucciones que estén expresadas en lenguaje de máquina. Cualquier otro tipo de lenguaje, deberá ser traducido a dicho lenguaje.

Historia de los lenguajes de programación:

· Primera generación: Lenguaje de máquina (también llamado código objeto o ejecutable): Cada tipo de procesador tiene su propio lenguaje de máquina. Puede haber procesadores compatibles entre sí, aun de distinto fabricante, como el caso de Intel o AMD, y también, procesadores incompatibles, aun del mismo proveedor. Resulta directamente ejecutable por el procesador y cada instrucción debe corresponder a una unidad ejecutable y estar expresada en ese lenguaje binario, incluso en las direcciones de memoria. Las computadoras de aquella época, trabajaban en monoprogramación (solo un programa de memoria) lo cual, representaba una gran dificultad este tipo de lenguaje.

· Segunda generación: Primeros lenguajes simbólicos (lenguajes ensambladores o lenguajes simbólicos de bajo nivel). Cada instrucción escrita representa una instrucción en lenguaje de máquina pero en lugar de escribirse en binario o hexadecimal, los códigos de instrucción eran nombres mnemotécnicas (Ej.: MVC en lugar de 58 para indicar Mover) y los datos se referencian con nombres en lugar de sus direcciones de memoria (Ej.: SALDO en lugar de 05000B3F). El programa escrito en lenguaje ensamblador se comenzó a denominar código fuente y como no era ejecutable directamente por el procesador, se requería de un programa traductor (compaginado) que pasara cada instrucción de lenguaje simbólico en lenguaje máquina.

· Tercera generación: Lenguajes simbólicos de alto nivel (COBOL, orientado a aplicaciones Comerciales, FORTRAN aplicaciones matemáticas o ingenieriles, BASIC, RPG, Pascal, PL/1 o C). Lenguajes más cercanos al lenguaje humano, mayor facilidad y productividad en la escritura del código fuente. Una instrucción en lenguaje fuente (macroinstrucción) genera varias instrucciones en lenguaje de máquina. Fueron más transportables entre distintos procesadores y sistemas operativos (con pocos cambios, aunque con compiladores diferentes)

· Cuarta generación (4GL): De más alto nivel, con menor cantidad de código fuente para realizar tareas. Algunos están asociados a sistemas de administración de datos, permitiendo crear una base de datos y las funciones necesarias para la carga de datos y la emisión de informes, de manera muy sencilla (Ej.: Access to FoxPro). La codificación es menos procedimental y de sintaxis más sencilla para el ser humano. Permite a usuarios no especialistas crear pequeñas aplicaciones usando algunos de estos lenguajes. Clasificación: Lenguajes orientados a objetos y visuales.

o Orientados a objetos: Desde hace varias décadas (Smalltalk o C++), recién en los años 90´ su utilización comenzó a ser masiva (Lenguajes Visual Basic, Visual C++, Visual C# y lenguaje multiplataforma Java). Permiten la definición de objetos o clases, que encapsulan datos (atributos o propiedades), y procedimientos, o métodos (que operan sobre los atributos), en código independiente que puede formar parte del ejecutable o ser un ejecutable aparte y, fácilmente reutilizable. Una vez definida la clase, se puede usar repetidamente y cada una de estas “instancias” hereda las características de los atributos y los procedimientos definidos en la clase (los atributos sólo pueden ser accedidos a través de los métodos). Los lenguajes que no están orientados a objetos también manejan datos y procedimientos, pero, aún los lenguajes estructurados de tercera generación, no lo hacen de manera tan independiente y que facilite tanto la reutilización. Las ventajas de los lenguajes orientados a objetos con respecto a lenguajes tradicionales son: profundizan los principios de modularidad (los módulos de código son más independientes al encapsular datos y procedimientos); posibilita una mayor reutilización (al ser más independientes y contar con una biblioteca de objetos probados y posibles de ser reutilizados); mejora la productividad (una mayor reutilización implica menos cantidad de código nuevo a escribir); reduce errores (al reutilizar objetos ya probados y disminuir la cantidad de código nuevo, también se reducen los errores del desarrollo); hace más sencilla su corrección (depuración); facilita el mantenimiento del código fuente.

o Orientados a Visuales: (Visual Basic, Visual C++ y Visual C# Microsoft, Delphi de Borland). Permiten crear formularios con todos los controles necesarios, sin necesidad de líneas de código. Los formularios típicos de Windows se pueden diseñar seleccionando el tipo de control de una barra de herramientas (nativa y con otros controles adicionales) y “dibujando” la ubicación y tamaño, simplemente usando el mouse. Se pueden mover muy fácilmente en el espacio del formulario y asignarle contenido, color, letra y otras características modificando sus propiedades (los controles son clases), sin necesidad de líneas de código. Estos objetos ya tienen procedimientos incluidos y, de manera muy sencilla se pueden agregar otros para indicar qué hacer cuando se hace clic o doble click con el mouse, o cuando el cursor pasa por encima del control, o usando sentencias del lenguaje de programación. La gran ventaja es que aceleran en gran medida el armado de las interferencias gráficas con los usuarios con mucha productividad (al no usar líneas de códigos que son particularmente extensas y trabajosas para el armado de pantallas), permitiendo ver en forma inmediata el diseño del formulario, reduciendo la posibilidad de errores y facilitando el mantenimiento.

También existen lenguajes de programación para el diseño de sitios Web como HTML, PHP o Java. Son lenguajes multiplataforma y cualquier navegador de internet puede ejecutarlos.

Compaginadores

Traductor de lenguaje simbólico a lenguaje de máquina. Realizaba un control general de sintaxis en todo el programa fuente y si no encontraba errores, generaba la versión ejecutable de ese programa, traduciendo una por una las instrucciones fuente; cada una de ellas se correspondía con una instrucción en lenguaje de máquina. Si había errores, los marcaba en un listado y no generaba el código ejecutable. El proceso de traducción solo debía volver a realizarse si se modifica el código fuente; mientras no hubiera modificaciones se reutilizaba el mismo archivo ejecutable que había generado el compaginador y que tenía el programa en lenguaje de máquina ejecutable. Al ejecutar el programa no era necesario el compaginador, dado que el programa fuente ya estaba traducido en lenguaje de máquina, integra y previamente.

Luego, se agregaron a los compaginadores la posibilidad de “entender” macroinstrucciones que podía definir el programador; utilizando un lenguaje especial, se podía lograr que el compaginador desarrollara estas instrucciones especiales en lenguaje simbólico creadas por un programador, en múltiples instrucciones en lenguaje simbólico nativo y que luego serían a su vez traducidas a lenguaje de máquina.

Compiladores

Traductor de características similares a los compaginadores, solo que asociados a lenguajes de alto nivel. (Sus instrucciones nativas son macroinstrucciones que se traducen en múltiples instrucciones en lenguaje de máquina)

Interpretes

La traducción y ejecución se realizan conjuntamente. Cada instrucción es analizada sintácticamente y, si es correcta, es traducida y ejecutada antes de pasar a la siguiente instrucción. Si se encuentra una instrucción errónea, la ejecución es detenida. La instrucción traducida a lenguaje de máquina no se guarda, y por lo tanto, no se genera un archivo con el programa en lenguaje de máquina y si una instrucción anteriormente traducida y ejecutada debe ser nuevamente ejecutada, será traducida nuevamente. Además, el programador (intérprete) debe estar en memoria todo el tiempo de la ejecución, ya que es el que traduce las instrucciones de lenguaje simbólico de alto nivel a lenguaje de máquina. Consecuentemente, una traducción de intérprete ocupa más memoria principal y es más lenta. Sin embargo, el hecho de disponer del programa fuente en memoria interpretándose, tenía la ventaja de poder ser modificado fácilmente si se encontraban errores de sintaxis o de lógica, además de poder verse fácilmente el contenido de los datos en proceso y de posibilitar la reanudación de la ejecución con los cambios realizados.

Él intérprete era sumamente ágil y conveniente para la prueba, y puesta a punto del programa por parte del programador y muy ventajoso, y poco seguro, para la ejecución del programa “en régimen” por parte del usuario.

Entornos de Desarrollo

Permiten interpretar el código fuente para el desarrollo y puesta a punto del programa, y luego, generar el archivo correspondiente con el programa en lenguaje máquina, para su ejecución reiterativa por parte del usuario. Además, brindan una gran cantidad de posibilidades y ayudas al programador para probar, encontrar y corregir errores (debugging), así como para llevar el control de versiones del código fuente.

Software propietario y libre

Software Propietario (pago o gratuito): Cuando el dueño del software al entregarlo, establece restricciones sobre su utilización y/o modificación.

Aun si la pieza de software se obtiene gratis, el propietario puede establecer restricciones con relación a su utilización, ej: cede en forma gratuita el derecho de uso exclusivamente para fines personales, no pudiendo ser utilizada en aplicaciones comerciales, ni copiado, vendido o cedido a terceros.

Cuando un software propietario se obtiene en forma gratuita se dice que es una pieza propietaria gratuita (freeware). Ej:

Skype, antivirus AVG Free, Acrobat Reader de Adobe, etc.

Software de código abierto (pago o gratuito, open source): El programa fuente es accesible y modificable por el usuario, sin restricciones. Este software puede obtenerse en forma gratuita u onerosa. Puede darse el caso que se vendan las fuentes del software sin otorgar el derecho de copiarlo y entregarlo a otro (no libre)

Software Libre: La licencia de uso (paga o gratuita) garantiza a su receptor la libertad de utilizarlo en lo que quiera, estudiarlo, modificarlo y redistribuir, otorgando licencias de igual tipo como desee.

Una característica es que una comunidad de desarrolladores voluntarios pueden trabajar para mejorar el software o generar complementos de utilidad. Se realiza sin motivaciones económicas (afán de prestigio) y su resultado es accesible por parte de todos los usuarios.

La libertad de modificarlo implica que se trate de código abierto.

Como ejemplos de software código abierto (código fuente a disposición del usuario) y libre: Sistema operativo Linux, Chrome OS, Symbian (teléfonos celulares), sistema de administración de base de datos MySQL y navegador de internet Mozilla Firefox

En los casos que el software es propietario y oneroso (sin código abierto), normalmente no se vende, sino que se otorga al usuario el derecho de uso, bajo un esquema de licenciamiento (Licencia de uso). Generalmente, las licencias de uso prohíben la ingeniería inversa, así como duplicar, modificar y transferir el software. El código fuente no estará disponible para los usuarios clientes.

Los licenciamientos para el uso pueden ser:

- Un valor por cada usuario (puede ser usuario con el software instalado o por usuarios que acceden al uso simultáneamente sin importar cuantos usuarios lo tengan instalado). El valor de cada usuario tiende a decrecer al aumentar la cantidad de usuarios. Para el caso del software para servidores, el valor puede estar asociado a la cantidad de procesadores del servidor.

- El valor del usuario, puede ser por única vez, por periodo de tiempo, pago mensual (tipo alquiler), pago anual (canon) o cualquier combinación

- El pago puede estar referido a rangos de movimientos permitidos, ej: Software para RRHH o HCM, cuyo licenciamiento se realiza de acuerdo a rangos de cantidad de empleados.

- Software que utilizan los servidores del proveedor (basados en internet), denominados proveedores de servicios de aplicaciones o ASP. El valor puede ser por cantidad de transacciones realizadas o por suscripción mensual o anual.

Ventajas y desventajas

Si pensamos en un costo por cada usuario en grandes organizaciones, representa un ahorro muy importante la gratuidad del software libre.

Pero, es presuntamente más difícil que este tipo de software tenga correcciones de errores, adaptación a cambios legales, contables e impositivos, rápidas adaptaciones a nuevos entornos de hardware y software. El ser pago, genera que se mantenga actualizado y generen nuevas versiones.