Iniciando con Programacion
Bueno, ya tenemos una idea de lo que son los programas, ahora vamos a diferenciarlos. Los programas del tipo de BIOS (que estan pre-grabados de acuerdo a la placa madre y a los dispositivos sobre ella ) reciben el nombre de firmware.
Dentro de este grupo, podemos poner no solo lo que está en el circuito integrado del BIOS de la PC, sino otros como los que cumplen funciones similares en los dispositivos ( discos duros, placas, etc.) y además los que tienen las instrucciones para cada tipo de procesador, ya que estos responde a cierto números limitados de comandos, como sumar (ADD) traer una dirección de memoria, mover a otra dirección de memoria y otras ordenes similares, PUSH, PULL, MOVE, JUMP etc. representadas por una secuencia binaria, una parte con la orden y otra parte con las direcciones de memoria.
Además, los modernos procesadores tienen un conjunto de nuevas órdenes, que facilitan su uso con ciertas secuencias de órdenes usadas en multimedia, manejo de dispositivos seriales, presentación de imágenes en movimiento etc.. Es decir que lo que antes se hacia con una serie de ordenes, se resume en una sola ahorrando así tiempo de repuesta del procesador, que tiene pilas (conjunto de datos apilados donde se puede acceder solo en una secuencia ordenada) donde encima las instrucciones correspondientes a esa nueva instrucción que la resume. Tal es el caso de las instrucciones · MMX · SSE · SSE2 · SSE3 · SSE4 · AVX
Que son las direcciones de memoria?
Todo elemento que administra el procesador, esta en un determinado lugar con un nombre binario, que es su dirección de memoria.
Por ejemplo, cuando se presiona una tecla, se envía un dato a un lugar determinado que lo almacena hasta que es leído, ese lugar tiene una dirección de memoria, que al ser consultada por el procesador, reconoce la tecla presionada y borra el dato del lugar.
Algo semejante pasa al mover el Mouse, o presionar una de sus teclas.
Caso inverso, el procesador envía un dato a un dispositivo de presentación, que lo transforma en algo que se puede mostrar mediante un monitor de imágenes, pero en este caso queda almacenado hasta que toda la imagen presentada se renueva y se carga una nueva (refresco).
O sea, parte de ella, esta asignada a las entradas y salidas, las que reciben el nombre de puertos, otra parte a los dispositivos y placas conectadas a la placa madre otra parte a la memoria RAM que es de donde el procesador lee los programas y a donde vuelca los resultados (estos datos pueden haber sidos cargados antes desde el disco duro u otra fuente de información). Por cuestiones de manejo practico, el procesador no trabaja con ningun dato que no este en la memoria RAM, de alli lo lee y alli devuelve el resultado (si es que hay algun resultado)
Las memorias RAM (de acceso aleatorio de Random Access Memory) tienen como caracteristica la velocidad con que se guardan y leen sus datos, para que el procesador no se vea “frenado” por una espera al tener que tomar esos datos de un dispositivo, y tambien en ella se crean zonas de almacenamiento temporal, donde se guardan los resultados, que recibe el nombre de BUFFER. Por ejemplo al enviar un documento a la impresora, la impresora no es lo rapida que es el procesador, entonces se almacena en un buffer lo que se va a imprimir y se desatiende al procesador del asunto para que pueda seguir trabajando. En este caso ese buffer recibe el nombre de “cola de impresión”.
Hay diversos procedimientos usados por los sistemas operativos para ir cargando los datos desde los dispositivos a la memoria RAM, todos atienden a que el procesador no se quede sin datos que procesar esperando al dispositivo. Uno de esos procedimientos, es dividir al archivo que contiene las ordenes (llamado tambien ejecutables) en partes y cargar y leer las primeras partes en forma inmediata, y mientras el procesador trabaja, se cargan en la memoria las partes que faltan subir por si se necesitan a continuación, si al cabo de un tiempo no se necesitan, o la accion se limita solo a una parte del programa cargado y el procesador necesita esos lugares de memoria, los vuelca al disco duro en esas partes, dandole una referencia para poder levantarlos mas rapidamente si asi se requiere, este proceso de division de los archivos se llama “paginación” y cada parte una “pagina”, y el lugar que lo contiene (la RAM o su lugar en el disco duro con un indice para acceder rapidamente) se llaman “marcos de página”
Tenemos otro grupo de programas, encargados de relacionar los dispositivos de la PC con el usuario, haciendo que el teclado y el Mouse funcionen, que la pantalla muestre una presentación amigable (fácilmente entendible) y que administre la RAM, los archivos de disco, y los dispositivos que se puedan conectar a la PC, como una impresora, una cámara Web, un jostick etc. Estos subrogramas que adaptan el dispositivo al sistema oerativo, reciben el nombre de DRIVERS ó manejadores. La suma de los comandos con que la maquina administra los drivers y pone a disposición del usuario u otro programa (ó aplicación) los recursos de la PC se llaman sistemas operativos, que conocemos como Windows (en sus distintas versiones) Linux (también en sus distintas versiones), MAC, Android y otros similares.
Resumiendo:
Estos sistemas operativos, se adaptan a la PC formando un sistema, que pone todos los recursos a disposición del usuario, y permite que otros programas utilicen esos recursos (configuraciones de pantalla, redes, impresoras, teclado etc.) Los sistemas operativos van evolucionando, a medida que la tecnología va brindando nuevos elementos que usan ese tipo de programas, así vemos versiones para los teléfonos celulares, las tablets, como antes había para las notebooks y las netbooks, cada cual, con diversas ventajas según los dispositivos puedan brindarlo (como el caso de las pantallas táctiles) que solo operarán correctamente con sistema operativo adecuado, y no porque tenga un sistema operativo que permita la administración de pantallas táctiles se convertirá en táctil un dispositivo que n cuenta con ese recurso.
Explico esto porque se tiene la tendencia a pensar que los sistemas operativos son como una vestimenta que toda persona puede lucir, siendo en realidad que cada sistema es adecuado para un determinado tipo de PC y un determinado tipo de uso, (cuando la PC tiene un uso asignado). Por eso, hay distintas versiones, unas para el hogar, otros para profesionales, otros para servidores etc., cada una dando prioridad al uso especifico de la PC, así como según la complejidad de la PC, pueden soportar sistemas operativos mas simples o mas complejos
Los programas que se usan sobre el entorno brindado por un sistema operativo (se llama también a este entorno: plataforma), se llaman programas de usuarios o programas de aplicación. En el caso de Windows, Microsoft provee el paquete de Office (que contiene varios programas de aplicación, como Word, Excel, Access, Power Point , Publisher y otros) y hay en el mercado, distintos programas que trabajan sobre dicha plataforma según la necesidad de los usuarios.
Además, hay programas de uso dirigido y especifico hechos a medida de cada necesidad, es en esta rama donde mas se necesita el trabajo del programador y como la mayor necesidad se manifiesta a nivel de administración de pequeña y medianas empresas, es que el estudio se orienta a resolver esta necesidad presuponiendo una posibilidad laboral concreta.
Como mencione anteriormente, ordenes en inglés que luego se traducirán a números binarios diciendole al procesador que debe hacer y con que; Para nosotros es muy dificil recordarnos de las secuencias de 1 y 0 de esas órdenes y otras que serian las direcciones de memoria por lo que se utiliza un “idioma de programacion” Ese idioma permite que con una palabra que nos es "entendible" y "conocida" invoquemos ese conjunto de numeros binarios que representa la orden. Los idiomas que son mas cercanos al idioma de la PC, se llaman de “bajo nivel” y la ventaja: es tener acceso total a todo lo que la PC puede hacer, la contra: lo extenso y complejo que se hace su manejo. (recordemos que el procesador, solo reconoce unas pocas órdenes elementales, a las que se le agregaron ademas secuencias para determinadas funciones) asi que: como con chico bobo, no podemos pretender que la PC entienda o suponga lo que debe hacer, sino decirselo paso a paso.
Los idiomas que reúnen conjuntos de ordenes para formar órdenes mas sencillas al usuario y mas alejadas del idioma de máquina, se llaman de "medio y alto nivel", siendo los de mas "alto nivel" los que tienen y manipulan elementos graficos. (con esto refiero a colocar objetos dentro de un contenedor)
El conjunto de ordenes para resolver un asunto (por no llamarlo problema) se llama “algoritmo”
Un ejemplo, para sumar dos números enteros de una cifra seria algo como:
a) Informar que se va a hacer una suma de dos enteros de un digito y pedir ingreso por teclado de un numero
b) Capturar ese número y depositarlo en un lugar e la memoria
c) Pedir el ingreso del segundo número
d) Capturar el segundo número
e) Mostrar el resultado por pantalla
f) Finalizar el programa
En la práctica, en programación, se crea antes de operar "disponibilidad" de los lugares de memoria que van a ser usados para depositar (en este caso) los números
Esos lugares tienen un nombre, y un tipo de dato que aceptan, para lo cual, el procesador le asignará la cantidad de bits que necesitarán (segun el tipo de dato) y una dirección de memoria relacionada con el "nombre" (etiqueta que recuerda la asignación de un espacio en la memoria para un tipo de dato determinado). Este elemento recibe el nombre de variable. El nombre de la variable no debe contar con signos y comenzar con letras, algunos idiomas reconocen mayúsculas y minusculas como igual, otros las diferencian.
Si la variable se usara para guardar un dato que no cambiará durante el programa, por cuestiones de seguridad y de claridad se llama “constante”
Entonces nuestro algoritmo quedaría asi:
a) Definir dos variables enteras (Ejemplo A y B)
b) Informar que se va a hacer una suma de dos enteros de un dígito y pedir ingreso por teclado de un número
c) Capturar ese número y depositarlo en una variable
d) Pedir el ingreso del segundo número
e) Capturar el segundo número y depositarlo en la segunda variable
f) Mostrar el resultado por pantalla (Ejemplo “EL resultado es: ” A + B )
g) Finalizar el programa
Si le han prestado atención, no se hace el proceso de “sumar” los datos porque los idiomas de programación permiten por lo general mostrar la suma sin la necesidad de hacerlo previamente, asimismo que el texto a mostrar está entre comillas dobles, lo cual identifica a una “cadena de caracteres” como algo que se muestra pero no se opera con ella
Mostrar este código en idioma de bajo nivel es muy extenso, por lo que lo haremos en esta subpágina, y aqui haremos una comparación en otro mas sencillo que escribe "hola mundo " en la pantalla
Assembler 8086
; The easiest way to print out "Hello, World!" //como tiene ; al principio, es solo comentario no parte activa del programa
name "hi"
org 100h
jmp start ; jump over data declaration
msg: db "HOLA MUNDO!", 0Dh,0Ah, 24h
start: mov dx, msg ; load offset of msg into dx.
mov ah, 09h ; print function is 9.
int 21h ; do it!
mov ah, 0
int 16h ; wait for any key....
ret ; return to operating system.
El equivalente en dos idiomas de alto y mediano nivel
Qbasic:
Dim msg$
msg$ = “HOLA MUNDO!”
PRINT msg$
C++
#include <stdio.h>
char msg[12] = “HOLA MUNDO!”;
main{
printf(“%s”, msg);
getchar();
}
Como veran, el uso de los idiomas de bajo nivel es mucho mas extenso y complejo, y se simplifica a medida que su niver sube a nivel de usuario.
Y eso que solo hemos escrito unas palabritas en pantalla, no se imaginan como se complica a la hora de desrrollar un programa extenso para aplicaciones complejas.