miércoles, 29 de febrero de 2012

Subdominios y redirecciones web

¿Qué es un subdominio o redirección web? 
Cuando no queremos gastarnos el dinero en un dominio, generalmente, tampoco en un hosting. Los hostings gratuitos nos dan largas direcciones, por ejemplo:

http://pepejuegaweb.lawebdelsitioquesemuere/tuweb 

Y... ¿quién se va a acordar de eso? Ni tan siquiera el propio administrador. Es por eso que se utilizan las redirecciones, que no son, ni más ni menos, que direcciones más cortas que nos enviarán a nuestra página web. En verdad, son redirecciones y no subdominios.Un subdominio es aquella dirección derivada de otro dominio. Una redirección es un dominio que nos envía a otro lugar. Pero claro, al utilizar servicios gratuitos, las redirecciones son subdominios de esos sitios, por lo tanto, se usan ambos nombres. En los dominios de pago, nosotros podemos crear subdominios como redirecciones o como direcciones para otros espacios webs. A continuación muestro una lista con algunos de los proveedores de redirecciones en español que mejores servicios me han dado.

Proveedor
Dirección
Tipo de redirección
Miarroba
http://web.esp.st
http://web.ya.st
 http://web.migueb.com
Dot.tk
http://web.tk
Sitio.de
http://sitio.de/web

lunes, 27 de febrero de 2012

Registros del procesador


Dentro del procesador, hay un conjunto de registros que ofrecen un nivel de memoria que es más rápido y pequeño que la memoria principal. Los registros del procesador sirven para dos funciones:
  • Registros visibles de usuario: Un programador de lenguaje de máquina o ensamblador puede minimizar las referencias a memoria principal mediante un uso óptimo de estos registros. Con lenguajes de alto nivel, un compilador que optimice código intentará hacer una selección inteligente de qué variables asignar a registros y cuáles a ubicaciones de la memoria principal. Algunos lenguajes de alto nivel permiten que el programador indique al compilador qué variables se deben almacenar en registros.
  • Registros de control y de estado: Son utilizados por el procesador para el control de las operaciones o por rutinas privilegiadas del sistema operativo para controlar la ejecución de los programas.


No hay una separación clara de los registros en estas dos categorías. En algunas máquinas, por ejemplo, el contador de programa es visible al usuario y, en otras, no. Sin embargo, para comprender lo siguiente, es necesario esta división.

Registros visibles de usuario
Un registro visible de usuario es aquél que puede ser referenciado por medio del lenguaje de máquina que ejecuta el procesador y es, por lo general, accesible para todos los programas, incluyendo tanto los programas de aplicación como los del sistema. Las clases de registro que, normalmente, están disponibles, son los registros de datos, los registros de dirección y los registros de códigos de condición.
Los registros de datos pueden ser asignados por el programador a diversas funciones. En algunos casos, son de propósito general y pueden ser empleados por cualquier instrucción de máquina que lleve a cabo operaciones sobre los datos. Sin embargo, suelen ponerse ciertas restricciones a menudo. Por ejemplo, pueden existir registros dedicados a operaciones en coma flotante.

Los registros de dirección contienen direcciones en la memoria principal de datos e instrucciones o una parte de la dirección que se utiliza en el cálculo de la dirección completa. Estos registros pueden ser de propósito general o pueden estar dedicados a un modo específico de direccionamiento. Entre los ejemplos se incluyen:
  • Registro índice: El direccionamiento indexado es un modo común de direccionamiento que implica sumar un índice a un valor base para obtener la dirección efectiva.
  • Puntero de segmento: Con direccionamiento segmentado, la memoria se divide en segmentos, que son bloques de palabras de tamaño variable. Una referencia a memoria consta de una referencia a un segmento particular y un desplazamiento dentro del segmento. En este modo, se utiliza un registro que alberga una dirección base (ubicación inicial) de un segmento (más adelante se explica cómo funciona).
  • Puntero de pila: Si hay un direccionamiento de pila visible para los usuarios, la pila estará, por lo general, en la memoria principal, existiendo un registro dedicado a señalar la cima de la pila. Esto permite el uso de instrucciones que no contienen ningún campo de dirección, tales como push (poner) y pop (sacar).

Una última categoría de registros que son, al menos, parcialmente visibles para los usuarios, son aquellos que contienen códigos de condición (también denominados indicadores o flags). Los códigos de condición son bits activados por el hardware del procesador como resultado de determinadas operaciones. Por ejemplo, una operación aritmética puede producir un resultado positivo, negativo, cero o desbordamiento. Además de almacenar el resultado de esta operación en un registro o en memoria, también se activará un código de condición.

En algunas máquinas, una llamada a un procedimiento o subrutina provocará que los registros visibles de usuario se salven automáticamente, para luego restaurarlos al retomar. Este proceso de salvar y restaurar lo lleva a cabo el procesador como parte de la ejecución de las instrucciones de llamada y retomo. Esto permite que cada procedimiento pueda usar los registros de forma independiente. En otras máquinas, es responsabilidad del programador salvar los contenidos de los registros de usuario visibles que sean relevantes antes de hacer la llamada a un procedimiento, incluyendo instrucciones en el programa con tal propósito. Así pues, las instrucciones de salvar y restaurar pueden ser llevadas a cabo por el hardware o por el software, dependiendo de la máquina.

Registros de control y de estado
Varios registros se emplean para controlar las operaciones del procesador. En la mayoría de las máquinas, la mayor parte de estos registros no son visibles para los usuarios. Algunos de ellos pueden estar accesibles a las instrucciones de máquina ejecutadas en un modo de control o modo del sistema.
Por supuesto, máquinas diferentes tendrán organizaciones diferentes de registros y podrán usar terminologías distintas. Algunos son:
  • Contador de programa (PC, Program Counter): Contiene la dirección de la instrucción a ser leída.
  • Registro de instrucción (IR, Instruction Regíster): Contiene la última instrucción leída.
  • Todos los diseños de procesadores incluyen además un registro o conjunto de registros, conocidos a menudo como palabra de estado del programa (PSW, Program Status Word), que contiene información de estado. Normalmente, la PSW contiene códigos de condición junto a otra información de estado. Entre los campos e indicadores más comunes se incluyen los siguientes:
  • Signo: Contiene el bit del signo de la última operación aritmética efectuada.
  • Cero: Se activa cuando el resultado de una operación aritmética es cero.
  • Acarreo: Se activa cuando, como resultado de una suma o una resta, se produce un acarreo más allá del bit más significativo. Se utiliza en operaciones aritméticas de más de una palabra.
  • Igualdad: Se activa si una comparación lógica da como resultado la igualdad.
  • Desbordamiento: Empleado para señalar un desbordamiento aritmético.
  • Habilitar/inhahilitar interrupciónes: Empleado para habilitar o inhabilitar interrupciones. Cuando Las interrupciones están inhabilitadas, el procesador las ignora. Esto es muy deseable cuando el sistema operativo está ocupado en el tratamiento de otra interrupción.
  • Supervisor: Indica si el procesador está ejecutando en modo supervisor o en modo usuarlo. Ciertas instrucciones privilegiadas sólo se pueden ejecutar en modo supervisor y sólo se puede tener acceso a ciertas áreas de memoria en modo supervisor.
En el diseño de un procesador específico, se pueden encontrar una serie de registros relacionados con el estado y el control. Además de la PSW, puede haber un puntero a un bloque de memoria que contenga información de estado adicional. En máquinas que utilizan varios tipos de interrupción, se puede ofrecer una serie de registros con punteros a cada rutina de tratamiento de interrupción. Si se utiliza una pila para implementar ciertas funciones (por ejemplo, las llamadas a procedimientos), entonces se necesita un puntero a la pila.
Una serie de factores inciden en el diseño de la organización de los registros de control y estado. Un punto clave es el soporte del sistema operativo. Cierto tipo de información de control es de utilidad específica para el sistema operativo. Si el diseñador del procesador dispone de una visión funcional del sistema operativo, la organización de los registros puede adaptarse convenientemente.
Otra decisión clave del diseño es la asignación de información de control a los registros y la memoria. Es habitual dedicar los primeros centenares o miles de palabras (las más bajas) de memoria para el control. El diseñador debe decidir la cantidad de información de control que debe residir en los rápidos y costosos registros, junto a la cantidad que debe permanecer en memoria principal, que es más lenta y barata.

viernes, 24 de febrero de 2012

Modo dual de las computadoras

La mayoría de las computadoras actuales presentan dos o mas niveles de ejecución o programación. En el nivel menos permisivo, generalmente llamado nivel de usuario, la computadora ejecuta solamente un subconjunto de las instrucciones maquina, quedando prohibidas las demás. Además, el acceso a determinados registros, o a partes de esos registros, y a determinadas zonas del mapa de memoria y de E/S también queda prohibido. En el nivel más permisivo, denominado nivel de núcleo, la computadora ejecuta todas sus instrucciones sin ninguna restricción y permite el acceso a todos los registros y mapas de direcciones. Uno o varios bits del registro de estado establecen el nivel en el que esta ejecutando la maquina. Los niveles de ejecución se incluyen en las computadoras para dar soporte al sistema operativo.
Los programas de usuario, por razones de seguridad, no podrán realizar determinadas acciones al ejecutar en nivel de usuario. Por su lado, el sistema operativo, que ejecuta en nivel de núcleo, puede ejecutar todo tipo de acciones. Típicamente, en el nivel de usuario la computadora no permite operaciones de E/S, ni modificar una gran parte del registro de estado, ni modificar los registros de soporte de gestión de memoria.

Es muy necesario comprender bien estos conceptos ya que estarán muy presentes en errores en tiempo de ejecución en nuestros programas y para comprender cómo funcionan los computadores.

jueves, 23 de febrero de 2012

Conceptos básicos de los sistemas de cómputo

Para comprender bien el campo de la programación, es necesario conocer el computador. Es por ello que vamos a tratar también lo que se imparte en la asignatura "Fundamentos del Software". Vamos a comenzar por algunos conceptos básicos:

Unidad de Entrada (E)
Es un dispositivo por el que se introducen en el computador los datos e instrucciones. En estas unidades se transforman las informaciones de entrada en señales binarias de naturaleza eléctrica.

Unidad de salida (S)
Dispositivo por el que se obtienen los resultados de los programas ejecutados en el computador.
Transforman las señales binarias en otras que pueda entender el usuario.

Memoria interna (MI)
Es la unidad donde se almacenan tanto los datos como las instrucciones durante la ejecución de los programas. La memoria interna (conocida también como memoria central o principal) actúa con gran velocidad y esta ligada directamente a las unidades más rápidas del computador (unidad de control y la aritmético-lógica). Para que un programa se ejecute debe estar almacenado en la memoria principal. Actualmente esta formada por chips.
La memoria esta dividida en posiciones (palabras de memoria) de un determinado numero de bits n, que es donde se almacena o memoriza la información. Cada palabra únicamente se puede referenciar por su dirección (numero de orden) de forma que siempre que se quiera escribir o leer un dato o instrucción en la memoria hay que especificar la dirección donde se debe efectuar la operación en cuestión. (Memoria ROM) y que es permanente, y otra en la que se puede leer y escribir (RAM) y que es volátil. La memoria ROM de los computadores viene grabada de fábrica, y contiene programas y datos relevantes del sistema operativo que deben permanecer siempre en la memoria interna.

Memoria Externa (ME)
Es muy rápida, pero no tiene gran capacidad para almacenar información. También tiene RAM. Para guardar grandes cantidades de información se usan otros soportes, que son más lentos pero tienen mayor capacidad. Es conocida, también, por memoria auxiliar masiva o secundaria. Usualmente se graban aquí los datos y programas, así, cuando sea necesario utilizar datos o programas que se usen repetidamente, no es necesario darlos de nuevo a través del dispositivo de entrada. La información se guarda en un soporte hasta que el usuario la borre expresamente.

Unidad de tratamiento (PU)
Contiene la unidad aritmetico-lógica (ALU), contiene los circuitos electrónicos con los que se hacen las operaciones de tipo aritmético y de tipo lógico. Esta unidad también se denomina camino de datos, ya que también contiene otros elementos auxiliares por donde se transmiten (buses de datos), o registros para almacenar temporalmente lo datos al objeto de operar con ellos.
Un registro es una memoria diseñada para almacenar un dato, instrucción o una dirección de memoria.

Unidad de control (CU)
Detecta señales eléctricas de estado procedentes de las distintas unidades, indicando su situación o condición de funcionamiento. También capta secuencialmente de la memoria las instrucciones del programa, y, de acuerdo con el código de operación de la instrucción captada y con las señales de estado procedentes de los distintos elementos del computador, genera señales de control dirigidas a todas las unidades, ordenando las operaciones que implican la ejecución de la instrucción. La unidad de control tiene un reloj, que sencillamente es un generador electrónico de pulsos que sincroniza todas las operaciones elementales del computador. El periodo de esta señal
Se denomina tiempo de ciclo y esta comprendido entre, aproximadamente, decimas de nanosegundos y varios microsegundos. La frecuencia del reloj suele darse en millones de ciclos/segundo (es el inverso del tiempo). Cuanto más compleja sea una instrucción, más ciclos precisara.
Un microprocesador es un procesador (CPU) implantado en un circuito integrado.
Un microcontrolador es un circuito integrado que contiene, total o parcialmente, los cinco elementos de un computador completo (unidad de control, unidad de tratamiento, memoria y puertos de entrada/salida).

miércoles, 22 de febrero de 2012

Conceptos básicos de los lenguajes de programación

Vamos a comenzar definiendo algunas cosas básicas de los lenguajes de programación.
Un lenguaje de programación es un lenguaje que puede ser utilizado para controlar el comportamiento de una máquina. Está compuesto, al igual que los lenguajes humanos, por reglas sintácticas, léxicas y semánticas, de forma que quedan definidos las formaciones de estructuras correctas y los significados de cada elemento. Podríamos decir que es un idioma para comunicarnos con los ordenadores.
Los lenguajes podemos clasificarlos según su nivel de abstracción, es decir, si se encuentran más cercanos al lenguaje humano o  al de la máquina.
  • Lenguaje de bajo nivel: son aquellos que se acercan al funcionamiento de la computadora. El de más bajo nivel es el lenguaje máquina (escrito en binario), el lenguaje ensamblador (en hexadecimal).
  • Lenguajes de alto nivel: aquellos que se acercan más al lenguaje humano. En algunos casos, están formados por elementos de lenguajes naturales, destacando el inglés. Existen muchos lenguajes de este tipo, como son C, C++, FORTAN…

En algunos casos se hace una tercera categoría que sitúa a lenguajes como C en lenguajes de “medio nivel” pero, realmente tal distinción es un poco infructuosa.
Un algoritmo es una secuencia de órdenes que el computador seguirá para resolver un problema. Un programa contiene un algoritmo que puede ser un conjunto de algoritmos de menor tamaño (lo cual es recomendable ya que se facilita el desarrollo, la detección de errores y el reutilizado de código en otros algoritmos).
Los procesadores de las computadoras son capaces de comprender y ejecutar las instrucciones que marcan los programas. Se ejecutan de forma que la computadora pueda comprenderlo, es decir, en lenguaje máquina. Todo aquel lenguaje que no sea lenguaje máquina, será ejecutado de alguna de las siguientes formas:
  • Intérpretes: se van ejecutando las instrucciones conforme se van encontrando.
  • Compiladores: el programa se traduce a su equivalente en lenguaje máquina.

Más adelante profundizaremos sobre las diferencias entre estos tipos de ejecución de programas.
Otras cosas importantes a conocer son:
  • Variables: podríamos decir que son contenedores de datos. Hacen referencia a direcciones de memoria donde se almacena algún tipo de dato. Según el lenguaje de programación, deberemos especificar el tipo e variable (si contiene un número entero, con decimales, un carácter…).
  • Condicionales: en caso de que se cumpla una condición dada, se ejecutará o no una porción de código.
  • Bucles: se repite la ejecución de un fragmento de código mientras se cumpla una condición o ésta se deje de cumplir.
  • Funciones: son necesarias para evitar tener que repetir código y mejorar la eficiencia del programa.


También se trabajarán estos conceptos de forma práctica mediante la creación de programas.

Referencias:

Comenzando

La intención de este pequeño blog es la de echar una mano a aquellos que están estudiando Ingeniería Informática o simplemente tienen curiosidad.
Comienzo este blog desde el segundo cuatrimestre de mi primer año de carrera. Escribiré sobre las asignaturas conforme vaya aprobando... y no solo hablaré de las asignaturas, si no de todo un poco.
No sé muy bien cómo va Blogger, pues suelo trabajar con Wordpress... pero viendo que aquí de los errores de programación se encarga más bien Blogger y encontrar una plantilla decente en castellano no es imposible, me he venido a este sistema. Digo esto, por que más de una vez la cagaré. Pero trataré que no.
Siempre podréis seguirme en Twitter con el nombre de usuario @isragranada.

Hola mundo

Hola mundo