viernes, 24 de abril de 2020

Unidad 3 (1)- Lenguajes de Interfaz

Unidad  3 (1).- Introducción al lenguaje ensamblador'

1.1 Importancia de la programación en lenguaje ensamblador

El lenguaje  ensamblador es  un  tipo  de  lenguaje  de  bajo  nivel  utilizado para  escribir programas  informáticos,  y  constituye  la  representación  más  directa del código máquina específico para cada arquitectura de microprocesador.

Consiste en un conjunto de nemónicos que representan instrucciones básicas para los computadores, microprocesadores, microcontroladores y otros circuitos integrados programables.

Características
Posee una cierta dificultad de ser entendido ya que su estructura se acerca al lenguaje máquina, es decir, es un lenguaje de bajo nivel.
Es difícilmente portable, es decir, un código escrito para un microprocesador, puede necesitar ser modificado, para poder ser usado en otra máquina distinta. Al cambiar a una máquina con arquitectura diferente, generalmente es necesario reescribirlo completamente.
Los programas hechos por un programador experto en lenguaje ensamblador son generalmente mucho más rápidos y consumen menos recursos del sistema (memoria RAM y ROM) que el programa equivalente compilado desde un lenguaje de alto nivel. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto nivel.
Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un microprocesador por lo que se pueden crear segmentos de código difíciles y/o muy ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no están disponibles en los lenguajes de alto nivel.
 
Importancia del lenguaje ensamblador
La importancia del lenguaje ensamblador radica principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en el se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sería que los programas en ensamblador ocupan menos espacio en memoria.

Ventajas
Menor consumo de recursos.
Velocidad de ejecución de los programas.
Mayor control sobre el hardware. 
Desventajas
Mayor tiempo de programación y cantidad de código.
Dificultad para encontrar errores en los programas.
Falta de portabilidad.
Peligro de afectar recursos inesperadamente.


1.2 El procesador y sus registros internos
Definición: El procesador es el que se refiere a los diferentes tipos de artículos de sistemas informativos que forma parte de un microprocesador que es parte de un CPU o micro que es el cerebro de la computadora y de todos los procesos informativos desde los más sencillos hasta los más complejos. 

Los registros del procesador se emplean para controlar instrucciones en ejecución, manejar direccionamiento de memoria y proporcionar capacidad aritmética. Los registros son direccionables por medio de un nombre.

Tipos de registros:
Registros de segmento.
Registros de propósito general.
Registros de apuntadores.
Registros de banderas.
Registros de Pila.
Registros Indice.
◘ Registros de segmento: Un registro de segmento tiene 16 bits de longitud y facilita un área de memoria para direccionamiento conocida como el segmento actual.
Registro CS:  El DOS almacena la dirección inicial del segmento de código de un programa en el registro CS. Esta dirección de segmento, mas un valor de desplazamiento en el registro apuntador de instrucción (IP), indica la dirección de una instrucción que es buscada para su ejecución.
Registro DS:  La dirección inicial de un segmento de datos de programa es almacenada en el registro DS. En términos sencillos, esta dirección, mas un valor de desplazamiento en una instrucción, genera una referencia a la localidad de un byte especifico en el segmento de datos.
Registro SS: El registro SS permite la colocación en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la dirección de inicio del segmento de pila de un programa en le registro SS. Esta dirección de segmento, mas un valor de desplazamiento en el registro del apuntador de pila (SP), indica la palabra actual en la pila que esta siendo direccionada.
Registros ES: Algunas operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro extra de segmento para manejar el direccionamiento de memoria. En este contexto, el registro ES esta asociado con el registro DI (índice). Un programa que requiere el uso del registro ES puede inicializarlo con una dirección de segmento apropiada.
Registros FS y GS:  Son registros extra de segmento en los procesadores 80386 y posteriores.
◘ Registros de propósito general: Los registros de propósito general AX, BX, CX y DX son los caballos de batalla del sistema. Son únicos en el sentido de que se puede direccionarlos como una palabra o como una parte de un byte. El ultimo byte de la izquierda es la parte “alta”, y el ultimo byte de la derecha es la parte “baja”. Por ejemplo, el registro CX consta de una parte CH (alta) y una parte Cl (baja), y usted puede referirse a cualquier parte por su nombre.

Registro AX:  El registro AX, el acumulador principal, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmética. Por ejemplo, las instrucciones para multiplicar, dividir y traducir suponen el uso del AX. También, algunas operaciones generan código mas eficiente si se refieren al AX en lugar de a los otros registros.
Registro BX: El BX es conocido como el registro base ya que es el único registro de propósito general que puede ser índice para direccionamiento indexado. También es común emplear el BX para cálculos.
Registro DX: Es conocido como el registro de datos. Algunas operaciones de entrada/salida requieren uso, y las operaciones de multiplicación y división con cifras grandes suponen al DX y al AX trabajando juntos.
◘ Registros Apuntadores: Los registros SP (apuntador de la pila) Y BP (apuntador de base) están asociados con el registro SS y permiten al sistema accesar datos en el segmento de la pila.

Registro SP:  El apuntador de la pila de 16 bits esta asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que esta siendo procesada en la pila. Los procesadores 80386 y posteriores tienen un apuntador de pila de 32 bits, el registro ESP. El sistema maneja de forma automática estos registros.
Registro BP: El BP de 16 bits facilita la referencia de parámetros, los cuales son datos y direcciones transmitidos vía pila. Los procesadores 80386 y posteriores tienen un BP ampliado de 32 bits llamado el registro EBP.
◘ Registros Indice: Los registros SI y DI están disponibles para direccionamiento indexado y para sumas y restas.

Registro SI: El registro índice fuente de 16 bits es requerido por algunas operaciones con cadenas (de caracteres). En este contexto, el SI esta asociado con el registro DS. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el ESI.
Registro DI: El registro índice destino también es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el DI esta asociado con el registro ES. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el EDI.
◘ Registro de Banderas: De los 16 bits del registro de banderas, nueve son comunes a toda la familia de procesadores 8086, y sirven para indicar el estado actual de la maquina y el resultado del procesamiento. Muchas instrucciones que piden comparaciones y aritmética cambian el estado de las banderas, algunas cuyas instrucciones pueden realizar pruebas para determinar la acción subsecuente. En resumen, los bits de las banderas comunes son como sigue:
OF (Overflow, desbordamiento):  Indica desbordamiento de un bit de orden alto (mas a la izquierda) después de una operación aritmética.
DF (dirección): Designa la dirección hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres.
IF (interrupción):  Indica que una interrupción externa, como la entrada desde el teclado, sea procesada o ignorada.
TF (trampa): Permite la operación del procesador en modo de un paso. Los programas depuradores, como el DEBUG, activan esta bandera de manera que usted pueda avanzar en la ejecución de una sola instrucción a un tiempo, para examinar el efecto de esa instrucción sobre los registros de memoria.
SF (signo): Contiene el signo resultante de una operación aritmética (0 = positivo y 1 = negativo).
ZF (cero):  Indica el resultado de una operación aritmética o de comparación (0 = resultado diferente de cero y 1 = resultado igual a cero).
AF (acarreo auxiliar): Contiene un acarreo externo del bit 3 en un dato de 8 bits para aritmética especializada.
PF (paridad): Indica paridad par o impar de una operación en datos de 8 bits de bajo orden (mas a la derecha).
CF (acarreo):  Contiene el acarreo de orden mas alto (mas a la izquierda) después de una  operación aritmética; también lleva el contenido del ultimo bit en una operación de corrimiento o de rotación. 
Las banderas mas importantes para la programación en ensamblador son O, S, Z y C, para operaciones de comparación y aritméticas, y D para operaciones de cadenas de caracteres. Los procesadores 80286 y posteriores tienen algunas banderas usadas para propósitos internos, en especial las que afectan al modo protegido. Los procesadores 80286 y posteriores tienen un registro extendido de banderas conocido como Eflags.

◘ Registros de PILA: La pila es un área de memoria importante y por ello tiene, en vez de uno, dos registros que se usan como desplazamiento (offset) para apuntar a su contenido. Se usan como complemento al registro y son:
SP (Stack Pointer): Se traduce como puntero de pila y es el que se reserva el procesador para uso propio en instrucciones de manipulado de pila. Por lo general, el programador no debe alterar su contenido.
BP (Base pointer):  Se usa como registro auxiliar. El programador puede usarlo para su provecho.
Cabe destacar que estos nombres y tipos de registros son estándar, ya que cada fabricante puede utilizar otros registros que reemplacen a estos o los auxilien, aun así, los fabricantes que usan otros registros tienen la misma función que los anteriormente mencionado.























1.3  La memoria principal (RAM)

La memoria principal o primaria, "Memoria Central ", es aquella memoria de un ordenador, donde se almacenan temporalmente tanto los datos como los programas que la CPU está procesando o va a procesar en un determinado momento. Por ejemplo, cuando la CPU tiene que ejecutar un programa, primero lo coloca en la memoria y después lo empieza a ejecutar.

Otros andarán más rápido si el sistema cuenta con más memoria RAM. La memoria Caché: dentro de la memoria RAM existe una clase de memoria denominada Memoria Caché que tiene la característica de ser más rápida que las otras, permitiendo que el intercambio de información entre el procesador y la memoria principal sea a mayor velocidad.

Está formada por bloques de circuitos integrados o chips capaces de almacenar, retener o "memorizar" información digital, es decir, valores binarios; a dichos bloques tiene acceso el microprocesador de la computadora. La MP se comunica con el microprocesador de la CPU mediante el bus de direcciones.

El ancho de este bus determina la capacidad que posea el microprocesador para el direccionamiento de direcciones en memoria. En algunas oportunidades suele llamarse "memoria interna" a la MP, porque a diferencia de los dispositivos de memoria secundaria, la MP no puede extraerse tan fácilmente por usuarios no técnicos.

La MP es el núcleo del sub-sistema de memoria de una computadora, y posee una menor capacidad de almacenamiento que la memoria secundaria, pero una velocidad millones de veces superior. Si tienes más memoria almacenas más datos.

1.4 El concepto de interrupciones

Una interrupción es una situación especial que suspende la ejecución de un programa de modo que el sistema pueda realizar una acción para tratarla. Tal situación se da, por ejemplo, cuando un periférico requiere la atención del procesador para realizar una operación de E/S.

Una interrupción es el rompimiento en la secuencia de un programa para ejecutar un programa especial llamando una rutina de servicio cuya característica principal es que al finalizar regresa al punto donde se interrumpió el programa.

 

Tipos de interrupciones

Interrupciones de hardware. 

Estas son asíncronas a la ejecución del procesador, es decir, se pueden producir en cualquier momento independientemente de lo que esté haciendo el CPU en ese momento

Excepciones 

Son aquellas que se producen de forma síncrona a la ejecución del procesador. Normalmente son causadas al realizarse operaciones no permitidas tales como la división entre 0, el desbordamiento, el acceso a una posición de memoria no permitida, etc.

Interrupciones por software 

Son aquellas generadas por un programa en ejecución. Para generarlas, existen distintas instrucciones en el código máquina que permiten al programador producir una interrupción.


Sistemas de prioridad

El sistema operativo necesita un mecanismo para priorizar las interrupciones y tratar primero las más urgentes. Para ello, existen varias alternativas:

 
·       Interrupciones simultáneas: No tienen por qué ocurrir de manera simultánea, sino que se refiere a que en un momento dado puede haber varias interrupciones activas.

·       Interrupciones anidadas: Mientras se está procesando una determinada rutina de servicio de interrupción sucede otra señal de interrupción.

·       Inhibición de interrupciones: Se deshabilitan las demás interrupciones mientras se está tratando una.


Determinación de la fuente que genera la interrupción

Hay distintas formas de identificar la fuente de una determinada interrupción.

·       Polling: el microprocesador comprueba de manera sistemática todos los dispositivos de manera que «busca» cuál de ellos fue el que solicitó la interrupción.

·       Interrupciones vectorizadas: Como ventajas podemos destacar que suele ser rápido, pero implica un alto costo en el hardware.

·      Hardware paralelo: se utiliza un registro de interrupción cuyos bits se controlan de forma independiente por las señales de petición de interrupción de cada periférico. Según la posición de cada bit en el registro, se establece la prioridad.


Interrupciones

·         int 01h-->un solo paso

·         int 02h-->interrupción no enmascarable

·         int 03h--> punto de interrupción

·         int 04h-->desbordamiento

·         int 05h-->impresión de pantalla

·         int 08h-->Cronometro

·         int 15h-->Servicios del sistema

·         int 16h-->Funciones de entrada del teclado

·         int 18h-->Entrada con el Basic de ROM

·         int 1Ah-->Leer y establecer la hora

·         int 1Bh-->Obtener el control con una interrupción de teclado.

·         int 2oh-->Terminar un programa

·         int 33h->Funciones del Ratón


















1.5 Llamadas a servicios del sistema

Llamadas al sistema no bloqueantes 

Son aquellas llamadas en las que, si lo que se solicita no está disponible, el proceso no se queda bloqueado, sino que devuelven un valor especial indicando la condición de información no disponible


Llamadas al sistema bloqueantes

La aplicación se bloquea a la espera del resultado. Si un hilo hace una llamada bloqueante, todos los hilos se bloquearán. Si hace una llamada no bloqueante, los demás hilos podrán seguir ejecutando.

Una llamada al sistema es un método o función que puede invocar un proceso para solicitar un cierto servicio al sistema operativo. Dado que los accesos a ciertos recursos del sistema requieren la ejecución de código en modo privilegiado, el sistema operativo ofrece un conjunto de métodos o funciones que el programa puede emplear para acceder a dichos recursos.

llamadas al sistema

Se activa una interrupción ejecutando una operación especial conocida “Llamada al sistema"

Esta se lanza cuando:

Ø  Una aplicación de usuario solicita un servicio del sistema operativo.

Ø  Proporciona los medios para que un programa de usuario pida al so que realice tareas reservadas del so en nombre del programa de usuario.
Ø  Una llamada al sistema se invoca de diversas maneras dependiendo de la funcionalidad proporcionada por el procesador subyacente.
Ø  Se trata de un método usado por un proceso para solicitar la actuación del SO.
Ø  Normalmente una llamada al sistema toma la forma de una excepción que efectúa una transferencia a una posición específica en el vector de interrupción.

Tipos de llamadas al sistema

Control de procesos

·         Terminar (end), abortar (abort)

·         cargar (load), ejecutar (execute)

·         crear procesos (create process o submit job), terminar procesos (terminate process)

·         fork: inicia un nuevo proceso

·         exec:el programa se ejecuta

·         obtener atributos del proceso (get process attributes), definir atributos del proceso (set process attributes)


Administración de archivos

·         crear archivos (create), borrar archivos (delete)

·         abrir (open), cerrar (close)

·         leer (read), escribir (write), reposicionar (reposition)

·         obtener atributos del archivo, definir atributos del archivo.

Administración de dispositivos

·         solicitar dispositivo (request), liberar dispositivo (release)

·         leer (read), escribir (write), reposicionar (reposition)

·         obtener atributos de dispositivo, definir atributos de dispositivo

·         conectar y desconectar dispositivos lógicamente.

Mantenimiento de la información

·         obtener la hora (time) o la fecha (date), definir la hora o la fecha

·         obtener datos del sistema, establecer datos del sistema

·         obtener los atributos de procesos, archivos o dispositivos

·         establecer los atributos de procesos, archivos o dispositivos

Comunicaciones

·         crear, eliminar conexiones de comunicación

·         enviar, recibir mensajes

·         transferir información de estado
























1.6 Modos de direccionamiento

La memoria de acceso aleatorio, o RAM, es la memoria principal de una computadora. Las aplicaciones son cargadas y ejecutadas en la memoria RAM. Los modos de direccionamiento asignan memoria RAM en porciones que pueden ser referenciadas individualmente para que la unidad central de procesamiento, o CPU, pueda determinar qué ubicación de memoria está siendo utilizada por una instrucción de la máquina.

Se les llama modos de direccionamiento a las distintas formas de combinar los operandos según el acceso que se hace a memoria.


Direccionamiento implícito

·         Depende solamente de la instrucción, es decir, la instrucción no lleva parámetros.

·         Particularmente en instrucciones que no accesan memoria, o bien que tienen una forma específica de accesarla.

Ejemplos: PUSHF, POPF, NOP



Modo registro

·         Usa solamente registros como operandos

·         Es el más rápido, pues minimiza los recursos necesarios (toda la información fluye dentro del EU del CPU)

Ejemplo: MOV AX, BX

 

Modo inmediato

·         Tiene dos operandos: un registro y una constante que se usa por su valor.

·         El valor constante no se tiene que buscar en memoria, pues ya se obtuvo al hacer el “fetch” de la instrucción.

Ejemplo: MOV AH, 9



Modo directo

·         Uno de los operandos involucra una localidad específica de memoria

·         El valor constante se tiene que buscar en memoria, en la localidad especificada.

·         Es más lento que los anteriores, pero es el más rápido para ir a memoria, pues ya “sabe” la localidad, la toma de la instrucción y no la tiene que calcular.

Ejemplo: MOV AH, [0000]



Modo indirecto

·         Se usan los registros SI, DI como apuntadores

·         El operando indica una localidad de memoria, cuya dirección (sólo la parte desplazamiento) está en SI o DI.

·         Es más lento que los anteriores, pues tiene que “calcular” la localidad

Ejemplos: MOV AL, [SI]

Modo indexado de base

Formato: [ BX o BP + SI o DI (opcionales) + constante (opcional) ]

·         BX o BP indica una localidad base de la memoria

·         A partir de BX o BP, se puede tener un desplazamiento variable y uno constante

·         La diferencia es el segmento sobre el que trabajan por defecto:

·         BX por defecto en el segmento de datos

·         BP por defecto en el segmento de pila.

Ejemplos:

Ø  MOV AX, [BX]

Ø  MOV DX, [BX+2]

Ø  MOV CX, [BX+DI]

Ø  MOV DL, [BX+SI+3]


Absoluto

El campo de operando contiene una dirección en memoria, en la que se encuentra la instrucción. Y no se cancela.

Indirecto recursivo

Unos pocos sistemas como el PDP-6 o el PDP-10 tenían la posibilidad de direccionamiento indirecto recursivo. Tal dirección de memoria indirecta tenía un campo de registro para indexación y posiblemente un otro bit indirecto, de modo que el proceso de direccionamiento indirecto con indexación podría teóricamente repetirse cualquier número de veces hasta que se encontrara una dirección sin un bit indirecto en la cadena.

Indirecto mediante registros

El campo de operando de la instrucción contiene un identificador de registro en el que se encuentra la dirección efectiva del operando.

El control localiza la instrucción de la memoria y utiliza su parte de dirección para acceder a la memoria de nuevo para leer una dirección efectiva. Unos pocos modos de direccionamiento requieren que el campo de dirección de la instrucción sea sumado al control de un registro especificado en el procesador. La dirección efectiva en este modo se obtiene del siguiente cálculo: Dir. efectiva = Dir. de la parte de la instrucción + Contenido del registro del procesador.

De desplazamiento

Combina el modo directo e indirecto mediante registros.

De pila

Se utiliza cuando el operando está en memoria y en la cabecera de la pila.

Este direccionamiento se basa en las estructuras denominadas Pila (tipo LIFO), las cuales están marcados por el fondo de la pila y el puntero de pila (*SP). El puntero de pila apunta a la última posición ocupada. Así, como puntero de direccionamiento usaremos el SP.

El desplazamiento más el valor del SP nos dará la dirección del objeto al que queramos hacer referencia. En ocasiones, si no existe C. de desplazamiento solo se trabajará con la cima de la pila.

























1.7 Proceso de ensamblado y ligado

1. El programa utiliza un editor de texto para crear un archivo de texto ASCII, conocido como archivo de código fuente.
2. El ensamblador lee el archivo de código fuete y produce un archivo de código objeto, una traducción del programa a lenguaje máquina. De manera opcional, produce un archivo de listado. Si ocurre un error, el programador debe regresar al paso 1 y corregir el programa.

3. El enlazador lee el archivo de código objeto y verifica si el programa contiene alguna llamada a los procedimientos en una biblioteca de enlace.

4. La herramienta cargadora del sistema operativo lee el archivo ejecutable y lo carga en memoria, y bifurca la CPU hacia la dirección inicial del programa, para que éste empiece a ejecutarse.

Edición

Los archivos fuente de código ensamblador deben estar en formato ASCII standard. Para esto puede usarse cualquier editor que permita crear archivos sin formato.

Ensamblado

El ensamblado se lleva a cabo invocando al MASM. Este puede ser invocado, usando una línea de comando, de la siguiente manera: MASM archivo [,[objeto][,[listado][,[cross]]]]][opciones][;] Dónde: Objeto.- Es el nombre para el archivo objeto. Listado. - Nombre del archivo de listado de ensamblado. cross. Es un archivo de referencias cruzadas.  

Objeto. - Es el nombre para el archivo .OBJ Ejecutable. - Nombre del archivo .EXE Mapa. - Nombre del archivo mapa Librería. - Nombre del archivo biblioteca de rutinas

Ejecución

Para la ejecución del programa simplemente basta teclear su nombre en el prompt de MS-DOS y teclear ENTER. Con esto el programa será cargado en memoria y el sistema procederá a ejecutarlo. 













1.8 Desplegado de mensajes en el monitor.

Para poder desplegar un mensaje en el monitor es necesario que el texto a desplegar se escriba en la RAM de visualización de video, para después ser enviado al monitor mediante el controlador de video. El controlador de video es en sí un microprocesador de propósito especial, que libera a la CPU pri

img7.jpg

ncipal del trabajo de controlar el hardware de video.

Para hacer esto se pueden utilizar varios de los servicios con los que cuenta el lenguaje ensamblador, los cuales se describen con detalle en el apéndice A.

Para detener la pantalla y permitir al usuario ver lo que se ha desplegado en la misma se utiliza el servicio 00 de la interrupción 16h.

 

Ejemplo:

mov dx,65       ->           Asignar el Valor 65 ASCII al registro DX

mov ah,02h     ->           Asignar el valor 02h al registro AH, que corresponde al servicio de                                                             impresión de un caracter.

int 21h          ->           Llamada a la interrupción 21h, de la que se ejecutará el servicio 02h.

Unidad 3 Administración de Base de Datos

Unidad 3: Configuración y Administración del Espacio en Disco´

 3.1 Estructuras lógicas de almacenamiento

Para la gestión del almacenamiento de una base de datos existen 4 conceptos
bien definidos que deben ser conocidos para poder comprender la forma en la que
se almacenan los datos. Vamos a ver la diferencia entre bloque, extensión,
segmento y espacio de tablas.
Bloques: Se tratan de la unidad más pequeña. Generalmente debe múltiple del
tamaño de bloque del sistema operativo, ya que es la unidad mínima que va a
pedir Oracle al sistema operativo. Si no fuera múltiple del bloque del sistema se
añadiría un trabajo extra ya que el sistema debería obtener más datos de los
estrictamente necesarios. Se especifica mediante DB_BLOCK_SIZE
Extensiones: Se forma con uno o más bloques. Cuando se aumenta tamaño de
un objeto se usa una extensión para incrementar el espacio.
Segmentos: Grupo de extensiones que forman un objeto de la base de datos,
como por ejemplo una tabla o un índice.
Espacio de tablas:Formado por uno o más datafiles, cada datafile solo puede
pertenecer a un determinado tablespace
En general, el almacenamiento de los objetos de la base de datos (tablas e índices
fundamentalmente) no se realiza sobre el archivo o archivos físicos de la base de
datos, sino que se hace a través de estructuras lógicas de almacenamiento que
tienen por debajo a esos archivos físicos, y que independizan por tanto las
sentencias de creación de objetos de las estructuras físicas de almacenamiento.
Esto es útil porque permite que a esos "espacios de objetos " les sean asociados
nuevos dispositivos físicos (es decir, más espacio en disco) de forma dinámica
cuando la base de datos crece de tamaño más de lo previsto. Posibilita además
otra serie de operaciones como las siguientes:
• Asignar cuotas específicas de espacio a usuarios de la base de datos.
• Controlar la disponibilidad de los datos de la base de datos, poniendo fuera de
uso alguno de esos espacios de tablas individualmente.
• Realizar copias de seguridad o recuperaciones parciales de la base de datos.
• Reservar espacio para almacenamiento de datos de forma cooperativa entre
distintos dispositivos.
El administrador de la base de datos puede crear o borrar nuevos espacios lógicos
de objetos, añadir o eliminar ficheros físicos de soporte, utilizados como espacio
temporal de trabajo, definir parámetros de almacenamiento para objetos
destinados a ese espacio de datos, todos los gestores relacionales que venimos
introduciendo como ejemplos siguen esta filosofía. En el caso de Oracle, sobre los
ficheros físicos de datos (datafiles) se definen los tablespaces. Por lo tanto, una
base de datos Oracle se compone lógicamente de tablcspaccs, y físicamente de
datafilcs. Su creación es sencilla, con la sentencia GREAT'', TABLESPACE:
CREATE TABLESPACE usuarios DATAFILE `datal.ora' SIZE 50M
También es sencillo ampliar el espacio destinado a un tablespace utilizando el
comando ALTER TABLESPACE:
ALTER TABLESPACE usuarios ADD DATAFILE 'data2.ora' SIZE 25M
Para hacer más grande una base de datos, las opciones disponibles son tres:

 3.1.1- Definición de espacio de almacenamiento.

Para la gestión del almacenamiento de una base de datos existen 4 conceptos bien definidos que deben 
ser conocidos para poder comprender la forma en la que se almacenan los datos. Estos conceptos son: 
bloque de datos, extensiones, segmentos y espacios de tablas.
Bloque de datos (Data blocks).- Se trata de la unidad más pequeña de almacenamiento en una base de 
datos. Generalmente debe ser múltiple del tamaño de bloque del sistema operativo, ya que es la unidad 
mínima que va a pedir la BD al sistema operativo. Si no fuera múltiple del bloque del sistema se añadiría un 
trabajo extra ya que el sistema debería obtener más datos de los estrictamente necesarios. Generalmente 
se especifica mediante el parámetro DB_BLOCK_SIZE.
Extensiones (Extents).- Se forma con uno o más bloques. Cuando se aumenta tamaño de un objeto en la 
base de datos, se usa una extensión para incrementar el espacio.


Segmentos (Segments).- Grupo de extensiones que forman un objeto de la base de datos, como por 
ejemplo una tabla o un índice.
  El segmento de datos es una colección de extensiones que mantiene todos los datos para una tabla 
o cluster.
  El segmento de índices mantiene todos los datos para un índice.
  El segmento de rollback mantiene datos para rollback, consistencia de lecturas o recuperación.
  El segmento temporal es una colección de extensiones que mantiene datos pertenecientes a 
objetos temporales.
Espacio de tablas (Tablespaces).- Formado por uno o más archivos de datos (datafiles) del SO, donde 
cada datafile solo puede pertenecer a un determinado tablespace y una base de datos. Representan un 
nivel medio entre la BD y los datafiles.
El SGBD tiene estructuras lógicas y físicas que el administrador ha de gestionar. Las estructuras físicas son 
aquellas se pueden ver en el sistema operativo como son los archivos; mientras que las estructuras lógicas 
sólo se pueden ver desde el manejador  de base de datos, como son por ejemplo los tablespaces.

Los usuarios más avanzados tendrán conocimiento de la estructura lógica de la base de datos, y es 
responsabilidad del DBA gestionar la correspondencia entre las estructuras lógicas y físicas para tener un rendimiento óptimo.


3.1.2 Definición y creación del espacio asignado para cada base de datos


Las bases de datos se almacenan en ficheros o archivos. Existen diferentes formas de organizaciones primarias de archivos que determinan la forma en que los registros de un archivo se colocan físicamente en el disco y, por lo tanto, cómo se accede a éstos.
Las distintas formas de organizaciones primarias de archivos son:
        ·         Archivos de Montículos (o no Ordenados): esta técnica coloca los registros en el disco sin un orden específico, añadiendo nuevos registros al final del archivo.
        ·         Archivos Ordenados (o Secuenciales): mantiene el orden de los registros con respecto a algún valor de algún campo (clave de ordenación).
        ·         Archivos de Direccionamiento Calculado: utilizan una función de direccionamiento calculado aplicada a un campo específico para determinar la colocación de los registros en disco.
        ·         Árboles B: se vale de la estructura de árbol para las colocaciones de registros.
        ·         Organización Secundaria o Estructura de Acceso Auxiliar: Estas permiten que los accesos a los registros de un archivo basado en campos alternativos, sean más eficientes que los que han sido utilizados para la organización primaria de archivos.
El DBMS asigna espacio de almacenamiento a las bases de datos cuando los usuarios introducen create database o alter database. El primero de los comandos puede especificar uno o más dispositivos de base de datos, junto con la cantidad de espacio en cada uno de ellos que será asignado a la nueva base de datos.
Si se utiliza la palabra clave default o se omite completamente la cláusula on, el DBMS pone la base de datos en uno o más de los dispositivos predeterminados de base de datos especificados en master.sysdevices.
Para especificar un tamaño (por ejemplo, 4MB) para una base de datos que se va a almacenar en una ubicación predeterminada, se utiliza: on default = size de esta forma:
create database newpubs  on default = 4


3.1.3. Bitácoras

Una partición de disco, en mantenimiento, es el nombre genérico que recibe cada
división presente en una sola unidad física de almacenamiento de datos. Toda
partición tiene su propio sistema de archivos (formato); generalmente, casi
cualquier sistema operativo interpreta, utiliza y manipula cada partición como un
disco físico independiente, a pesar de que dichas particiones estén en un solo
disco físico.
Una partición de un disco duro es una división lógica en una unidad de
almacenamiento (por ejemplo un disco duro o unidad flash), en la cual se alojan y
organizan los archivos mediante un sistema de archivos. Existen distintos
esquemas de particiones para la distribución de particiones en un disco. Los más
conocidos y difundidos son MBR (Master Boot Record) y GPT (GUID Partition
Table). Las particiones, para poder contener datos tienen que poseer un sistema
de archivos. El espacio no asignado en un disco no es una particion, por lo tanto
no puede tener un sistema de archivos. Existen múltiples sistemas de archivos con 
diferentes capacidades: como FAT, NTFS, FAT32, EXT2, EXT3, EXT4, Btrfs,
FedFS, ReiserFS, Reiser4 u otros.
Los discos ópticos (DVD, CD) utilizan otro tipo de particiones llamada UDF
(Universal Disc Format) Formato de Disco Universal por sus siglas en inglés, el
cual permite agregar archivos y carpetas y es por ello que es usado por la mayoría
de software de escritura por paquetes, conocidos como programas de grabación
de unidades ópticas. Este sistema de archivos es obligatorio en las unidades de
(DVD) pero también se admiten en algúnos (CD)
En Windows, las particiones reconocidas son identificadas con una letra seguida
por un signo de doble punto (p.ej. C:\). prácticamente todo tipo de discos
magnéticos y memorias flash (como pendrives) pueden particionarse. En sistemas
UNIX y UNIX-like las particiones de datos son montadas en un mismo y único
árbol jerárquico, en el cual se montan a través de una carpeta, proceso que sólo el

superusuario (root) puede realizar.

3.1.4 Particiones

Una partición es una división de una base de datos lógica o sus elementos constituyentes en partes independientes. La partición de bases de datos se hace normalmente por razones de mantenimiento, rendimiento o manejo. Cada partición puede ser extendida hasta múltiples nodos, y los usuarios en el nodo pueden hacer transacciones locales en la partición.

Esto aumenta el rendimiento en sitios que tienen transacciones regularmente involucrando ciertas vistas de datos, y manteniendo la disponibilidad y la seguridad. Esta partición puede hacerse creando bases de datos más pequeñas separadas (cada una con sus propias tablas, índices, y registros de transacciones) o dividiendo elementos seleccionados, por ejemplo, solo una tabla.
Partición horizontal: Consiste en poner diferentes filas en diferentes tablas. Por ejemplo, clientes con códigos postales menores que 50000 están almacenados en la tabla ClientesEste, mientras que los clientes con códigos postales mayores o iguales a 50000 están almacenados en la tabla ClientesOeste. Las dos tablas de partición son entonces ClientesEste y ClientesOeste, mientras que una vista con una unión podría ser creada con las dos tablas para poder dar una vista completa de todos los clientes.

Partición vertical: Consiste en crear miles de tablas con miles de columnas y crear tablas para poner las columnas restantes. Se puede particionar una tabla de 5 maneras diferentes:
Por rango
Por listas
Por hash
Por clave
Compuestas
Por rango: Para construir nuestras particiones especificamos rangos de valores. Por ejemplo, podríamos segmentar los datos en 12 particiones: una para los contratos de 1950 a 1960, otra para los años 60, los 70, 80, 90, la década del 2000 y la década actual
ALTER TABLE contratos PARTITION BY RANGE(YEAR(fechaInicio)) ( PARTITION partDecada50 VALUES LESS THAN (1960), PARTITION partDecada60 VALUES LESS THAN (1970), PARTITION partDecada70 VALUES LESS THAN (1980), PARTITION partDecada80 VALUES LESS THAN (1990), PARTITION partDecada90 VALUES LESS THAN (2000), PARTITION partDecada00 VALUES LESS THAN (2010), PARTITION partDecada10 VALUES LESS THAN MAXVALUE );
Por listas: Para construir nuestras particiones especificamos listas de valores concretos.
ALTER TABLE contratos PARTITION BY LIST(YEAR(fechaInicio)) ( PARTITION partDecada50 VALUES IN (1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959), PARTITION partDecada60 VALUES IN (1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969), PARTITION partDecada70 VALUES IN (1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979), PARTITION partDecada80 VALUES IN (1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989), PARTITION partDecada90 VALUES IN (1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999), PARTITION partDecada00 VALUES IN (2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009), PARTITION partDecada10 VALUES IN (2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019));
Por hash: MySQL se encarga de distribuir las tuplas automáticamente usando una operación de módulo. Sólo hay que pasarle una columna o expresión que resulte en un entero (el hash) y el número de particiones que queramos crear.
ALTER TABLE contratos PARTITION BY HASH(YEAR(fechaInicio)) PARTITIONS 7;
Por clave: Similar a la partición por hash, pero en este caso no necesitamos pasarle un entero; MySQL utilizará su propia función de hash para generarlo. Si no se indica ninguna columna a partir de la que generar el hash, se utiliza la clave primaria por defecto.
ALTER TABLE contratos PARTITION BY KEY() PARTITIONS 7;

Compuestas: Podemos combinar los distintos métodos de particionado y crear particiones de particiones. Por último, un pequeño ejemplo de cómo afectaría el particionado a una consulta sencilla como obtener el número total de tuplas que cumplen una condición. Estas son las estadísticas de la consulta sin particionado (ni índices)

3.1.5 ESPACIOS PRIVADOS:


Un «espacio privado» permite que los administradores y redactores gestionen el conjunto de datos del sitio. Algunas bases de datos tienen estos espacios privados llamados comúnmente paneles de control, que son formularios que aparecen al abrir la base de datos.

Los paneles de control sirven de "puerta principal" o "recibidor" de una base de datos en el sentido de que dirigen a las personas hacia determinadas tareas, como introducir o buscar datos. Sirven también para mantener alejados a los usuarios de las tablas que contienen los datos en tiempo real.

Cuando reciba una base de datos, debe adentrarse más allá del panel de control para averiguar cómo están estructurados los datos, pero merece la pena echar un vistazo inicial al panel de control.


Le puede ofrecer algún indicio sobre las tareas que el diseñador de la base de datos consideró que realizarían los usuarios habitualmente con los datos. Puede hacer clic en los vínculos del panel de control para ver qué objetos, como formularios e informes, abren.

3.1.6 ESPACIOS PARA OBJETOS


Los DBMS se basan en archivos para almacenar datos, y estos archivos, o conjuntos de datos, residen en medios de almacenamiento, o dispositivos. Una buena parte del trabajo del DBA implicará la planificación para el almacenamiento real de la base de datos.


Algunas tecnologías de almacenamiento son más adecuadas que otras. Sin embargo, la naturaleza mecánica de la unidad de disco los hace más vulnerables al fracaso de los componentes de otro equipo. Además, las formas en que las unidades de disco son utilizados por las bases de datos pueden hacer que la gestión del almacenamiento impredecibles, como la barra lateral "Modern DBMS de uso de disco“ Puede usarse RAID para mejorar la seguridad de los datos.

Para aplicaciones de misión crítica la integridad de los datos puede ser más importante que la disponibilidad de datos. Si el soporte es poco fiable y un fallo de las causas de corrupción de datos, los datos perdidos puede ser más de un problema que el tiempo de inactividad. Es imperativo, por tanto, que las soluciones de almacenamiento de base de datos para protegerlos a toda costa. 

La recuperación de datos desde medios de almacenamiento lleva mucho más tiempo en completarse que la recuperación de datos desde la memoria caché o la memoria.

El rendimiento de la base de datos depende de la entrada y salida a disco. La cantidad de datos almacenados es mayor que nunca antes, y los datos se almacenados por más tiempo.


Algunos DBMS permiten al tamaño de los archivos temporales de expandirse y contraerse de forma automática. Dependiendo del tipo y la naturaleza de las operaciones de base de datos en proceso, esta fluctuación puede provocar picos de uso del disco.

El crecimiento de la capacidad de almacenamiento aumenta aún más la complejidad de la gestión de datos y bases de datos. Muchas organizaciones están implementando nuevas tecnologías de almacenamiento, tales como almacenamiento en red (NAS) y redes de área de almacenamiento (SAN), para ayudar a controlar la cantidad cada vez mayor de almacenamiento necesario para los usos modernos. La gestión del almacenamiento en el entorno dinámico de hoy es una tarea difícil DBA.

Hay muchos problemas de almacenamiento que deben ser resueltos antes de que un DBA pueda crear una base de datos. Uno de los temas más importantes es la cantidad de espacio para permitir la base de datos. El cálculo espacial debe tener en cuenta no sólo tablas, índices, sino también, y dependiendo del DBMS, el registro de transacciones. Cada una de estas entidades probablemente requerirá un archivo separado o conjunto de datos, para el almacenamiento persistente.


3.2 SEGMENTOS


Un segmento contiene un tipo específico de objetos de la base de datos, como por ejemplo una tabla. Un segmento está compuesto de extensiones que definen el tamaño disponible para el segmento. 
A medida que se llenan las extensiones se van añadiendo nuevas extensiones, es aquel espacio reservado por la base de datos, dentro de un datafile, para ser utilizado por un solo objeto. Así una tabla (o cualquier otro objeto) está dentro de su segmento, y nunca podrá salir de él, ya que si la tabla crece, el segmento también crece con ella.

Físicamente todo objeto en base de datos no es más que un segmento dentro de un datafile. Se puede decir que, un segmento es a un objeto de base de datos, lo que un datafile a un tablespace; el segmento es la representación física del objeto en base de datos (el objeto es solo una definición lógica). 
Los segmentos son los equivalentes físicos de los objetos que almacenan datos. El uso efectivo de los segmentos requiere que el DBA conozca los objetos, que utiliza una aplicación, cómo los datos son introducidos en esos objetos y el modo en que serán recuperados. 

Un segmento está constituido por secciones llamadas extensiones, que son conjuntos contiguos de bloques. Una vez que una extensión existente en un segmento no puede almacenar más datos, el segmento obtendrá del espacio de tabla otra extensión. Este proceso de extensión continuará hasta que no quede más espacio disponible en los ficheros del espacio de tablas, o hasta que se alcance un número máximo de extensiones por segmento. 

Existen 5 tipos de segmento:
De datos: Almacenan las tablas.
De índices: Permiten acceso rápido a los datos. Cada índice ocupa un segmento independiente del segmento de datos y debería estar en un espacio de tablas distinto al de los datos, para mejorar el rendimiento.
De rollback: Permiten ejecutar la restauración de las transacciones no validas asegurando la consistencia en lectura.
Temporales: Son eliminados cuando la sentencia finaliza.
De bootstrap: Se crea en SYSTEM y contiene definiciones del diccionario para sus tablas, que se cargan al abrir la BD No requiere ninguna acción por parte del DBA. No Cambia de tamaño.

3.3. MEMORIA COMPARTIDA:


Un servidor Oracle es un sistema que permite administrar bases de datos y que ofrece un medio de gestión de información abierto, completo e integrado. Un servidor Oracle está constituido de una instancia y una base de datos.

Instancia de Oracle: Una instancia de Oracle permite acceder a la base de datos Oracle y permite abrir únicamente una sola base de datos. La instancia de Oracle está compuesta de procesos en segundo plano que administran y aplican las relaciones entre las estructuras físicas y las estructuras de memoria. 
Existen dos categorías:
Procesos en Segundo Plano Obligatorios: DBWN, PMON, CKPT, LGWR, SMON
Procesos en Segundo Plano Facultativos: ARCn, LMDn, RECO, CJQ0, LMON, Snnn, Dnnn, Pnnn, LCKn, QMNn

Estructuras de Memoria: Compuestas básicamente de dos áreas de memoria: el área de memoria asignada a la SGA (System Global Area): asignada al inicio de la instancia y representa un componente fundamental de una instancia de Oracle.
Está compuesta de varias áreas de memoria:
Área de memoria compartida.
Buffer caché de la base de datos.
Log buffer

Así como otras estructuras para la gestión de bloqueos externos (lock), internos (match), datos estadísticos, etc. Eventualmente también es posible configurar al nivel de la SGA, Área de memoria LARGE POOL y Área de memoria Java:
Área de Memoria Asignada a la PGA (Program Global Area): Ésta es asignada al inicio del proceso de servidor. Es reservada a cada proceso de usuario que se conecte a la base de datos Oracle y liberada al final del proceso.
El Proceso de Usuario: Es el programa que solicita una interacción con la base de datos iniciando una conexión. Se comunica únicamente con el proceso de servidor correspondiente.
El Proceso de Servidor: Representa el programa que entra directamente en interacción con el servidor Oracle. Responde a todas las peticiones y envía los resultados. Puede estar dedicado a un servidor cliente o compartido por varios.
Ventajas: 
Ilusión de una memoria física compartida.
Escabilidad.
Menor costo.
Desventajas:
Topología de red muy importante
Administración de red.
Memoria compartida basada en páginas
El esquema de DSM propone un espacio de direcciones de memoria virtual que
integra la memoria de todas las computadoras del sistema, y su uso se realiza
mediante paginación. Las páginas quedan restringidas a estar necesariamente en
un único nodo. Cuando un programa intenta acceder a una posición virtual de
memoria, se comprueba si esa página se encuentra de forma local. Si no se
encuentra, se provoca un fallo de página, y el sistema operativo solicita la página
al resto de nodos. El sistema funciona de forma análoga al sistema de memoria
virtual tradicional, pero en este caso los fallos de página se propagan al resto de
ordenadores, hasta que la petición llega al nodo que tiene la página virtual
solicitada en su memoria local. A primera vista este sistema parece más eficiente
que el acceso a la memoria virtual en disco, pero en la realidad ha mostrado ser
un sistema demasiado lento en ciertas aplicaciones, ya que provoca un tráfico de
páginas excesivo.
Una mejora dirigida a mejorar el rendimiento sugiere dividir el espacio de
direcciones en una zona local y privada y una zona de memoria compartida, que
se usará únicamente por procesos que necesiten compartir datos. Esta
abstracción se acerca a la idea de programación mediante la declaración explícita
de datos públicos y privados, y minimiza el envío de información, ya que sólo se
enviarán los datos que realmente vayan a compartirse.
Memoria compartida basada en objetos
Una alternativa al uso de páginas es tomar el objeto como base de la transferencia
de memoria. Aunque el control de la memoria resulta más complejo, el resultado 
es al mismo tiempo modular y flexible, y la sincronización y el acceso se pueden
integrar limpiamente. Otra de las restricciones de este modelo es que todos los
accesos a los objetos compartidos han de realizarse mediante llamadas a los
métodos de los objetos, con lo que no se admiten programas no modulares y se
consideran incompatibles

3.4. INSTANCIAS MÚLTIPLES:


Instancias

Cada servidor de bases de datos está compuesto por:
Una Base de Datos: Donde se almacenan los datos físicos (archivos de datos y otros componentes).
Una instancia: Constituye el mecanismo que permite su manipulación.
Una instancia de Base de datos es el conjunto formado por los procesos y las estructuras de memoria que se encuentran en un servidor. Es un conjunto de estructuras de memoria que manejan los archivos de la base de datos, cuando inicia la instancia, con ella inician procesos de fondo (Background Process), como el LGWR, PMON, etc.
Importante saber que al menos una base de datos activa o mejor dicho que está corriendo, debe de tener una instancia asociada. De la misma manera, como la instancia existe en memoria y la base de datos existe en disco, una instancia puede existir sin una base de datos y una base de datos puede existir sin una instancia Puede haber múltiples instancias para una única base de datos o múltiples bases de datos en una misma instancia.

Instancias en MySQL:

El programa mysqld_multi se utiliza para administrar diversos procesos servidor MySQL (mysqld) dentro de una única instalación MySQL. Teniendo cada una de ellas conexiones en diferentes archivos socket en Unix, puertos TCP/IP, directorios, configuración etc. Puede arrancar o parar servidores, o reportar su estado actual. Cuando se necesitan tener varios servicios MySQL utilizando una misma instancia de MySQL, mysqld_multi es la mejor alternativa.
Paso 1: Configurar dos instancias (dos servicios: mysqld1 y mysqld2) MySQL editando /etc/my.cnf.
Paso 2: Crear las carpetas correspondientes y base de datos mysql para la segunda instancia del servicio MySQL (/var/lib/mysql_phpunit), el directorio /var/lib/mysql es el utilizado por defecto, por lo que no es necesario crearlo en este caso.


Paso 3: Configuración de las diversas instancias si se quiere permitir la parada del servicio con el comando service. Las dos instancias deben tener el mismo usuario / password y el privilegio de usuario SHUTDOWN.
Paso 4: Método alternativo (cuando no se quiere utilizar el comando service).  

Establecer la clave de root para el servicio mysqld2. (Lo mismo se tendría que hacer con la primera instancia si no estuviera configurada).
Establecer la clave de root para el servicio mysqld2. (Lo mismo se tendría que hacer con la primera instancia si no estuviera configurada).
Ejemplo: Realizar un volcado en la base de datos stash de mysqld2.
Crear un script de arranque (Fichero /etc/init.d/mysqld_multi).

Se desactiva el servicio mysqld en el arranque y se pone el nuevo servicio (mysqld_multi), para que al arrancar el sistema se inicien todas las instancias si así se desea.



Consultar el estado, arrancar y parar la primera instancia del servidor MySQL (mysqld1), si se quiere indicar la segunda, valdría con cambiar el 1 por un 2.
COMANDOS BASICOS PARA INSTANCIAS
Este comando intenta arrancar una instancia: 

mysql> START INSTANCE mysqld4;
Query OK, 0 rows affected (0,00 sec)
-STOP INSTANCE <instance_name>

Esto trata de parar una instancia:

mysql> STOP INSTANCE mysqld4;
Query OK, 0 rows affected (0,00 sec)
 -SHOW INSTANCES











































CRUD en Android Studio

El día de hoy le vengo a presentar este CRUD ( CREATE,READ,UPDATE,DELETE) hecho en Android Studio junto a mi compañero Israel Vazquez Castil...