jueves, 15 de marzo de 2018

Multiplicacion de numeros de 2 cifras emu8086

; You may customize this and other start-up templates;
; The location of this template is c:\emu8086\inc\0_com_template.txt
;Eduardo Pablo Aquino Sanchez
org 100h

 .model small ;Modelo de memoria m?s utilizado
.stack

.data        ;definición de datos(variables), donde se almacenara información
.code
   chr1  db ?
   chr2  db ?
   chr3  db ?
   chr4  db ?
   r1    db ?
   r2    db ?
   r3    db ?
   r4    db ?
   ac    db 0
   ac2   db 0 
   aca   db 0
   aca2  db 0
.startup
   ;cls
   mov ah,00h     ;Function(Set video mode)
   mov al,03      ;Mode 80x25 8x8 16
   int 10h        ;Interruption Video

   mov ah,01h     ;Function(character read)
   int 21h        ;Interruption DOS functions
   sub al,30h     ;ajustamos valores
   mov chr1,al    ;[chr1].chr2 * chr3 = ac.r1.r2

   mov ah,01h     ;Function(character read)
   int 21h        ;Interruption DOS functions
   sub al,30h     ;Ajustamos valores
   mov chr2,al    ;chr1.[chr2] * chr3 = ac.r1.r2

   mov ah,02h     ;Function(character to send to standard output)
   mov dl,'*'     ;Character to show
   int 21h

   mov ah,01h     ;Function(Read character)
   int 21h        ;Interruption DOS Functions
   sub al,30h     ;Transform(0dec = 30hex)
   mov chr3,al    ;chr1.chr2 * [chr3] = ac.r1.r2
 
   mov ah,01h     ;Function(Read character)
   int 21h        ;Interruption DOS Functions
   sub al,30h     ;Transform(0dec = 30hex)
   mov chr4,al    ;chr1.chr2 * [chr3] = ac.r1.r2

   mov ah,02h     ;Character to send to standar output
   mov dl,'='     ;
   int 21h        ;Interruption DOS functions

   ;Realizamos operaci?n
 
   ;parte 1 multiplicar el primer digito del segundo numero por todo el primer numero
   mov al,chr4    ;al = chr4
   mov bl,chr2    ;bl = chr2
   mul bl         ;AL = chr3*chr2 (BL*AL)
   mov Ah,0h      ;
   AAM            ;ASCII Adjusment
   mov ac,AH      ;ac = AH (Acarreo)
   mov r2,AL      ;r2 = AL       (Unidad del resultado)

   mov al,chr4    ;AL = chr4
   mov bl,chr1    ;BL = chr1
   mul bl         ;AL = chr1*chr3 (BL*AL)
   mov r1,al      ;r1 = AL       (Decena del resultado)
   mov bl,ac      ;BL = Acarreo anterior
   add r1,bl      ;r1 = r1+ac (r1 + Acarreo)
   mov ah,00h     ;
   mov al,r1      ;AL = r1 (Asignaci?n para el ajust)
   AAM            ;ASCII Adjustment
   mov r1,al      ;r1 = AL
   mov ac,ah      ;ac = AH (Acarreo para la Centena del resultado)
 
   ;parte 2      multiplicar el segundo digito de el segundo numero por todo el primer numero
   mov al,chr3    ;al = chr3
   mov bl,chr2    ;bl = chr2
   mul bl         ;AL = chr3*chr2 (BL*AL)
 
   AAM            ;ASCII Adjusment
   mov ac2,AH      ;ac2 = AH (Acarreo)
   mov r4,AL      ;r4 = AL       (Unidad del resultado)

   mov al,chr3    ;AL = chr3
   mov bl,chr1    ;BL = chr1
   mul bl         ;AL = chr1*chr3 (BL*AL)
   mov r3,al      ;r3 = AL       (Decena del resultado)
   mov bl,ac2      ;BL = Acarreo anterior
   add r3,bl      ;r3 = r1+ac (r1 + Acarreo)
   mov ah,00h     ;
   mov al,r3      ;AL = r3(Asignaci?n para el ajust)
   AAM            ;ASCII Adjustment
   mov r3,al      ;r3 = AL
   mov ac2,ah      ;ac2 = AH (Acarreo para la Centena del resultado)
 
   ;parte 3   Suma de los resultados             
   mov al,r1;=9               ;99
   mov bl,r4;=1              ;x99
   add al,bl            ;----------------
   aAm                       ;891
   mov r1,al;=00            ;891
   mov r4,ah;=01            ;------------------------
                           ; 8901
   mov al,ac;=8
   mov bl,r3;=9
   add al,bl
   add al,r4
   aAm
   mov ac,al;=8
   mov r3,ah;=1
 
   mov al,ac2;=8
   mov bl,r3;=1
   add al,bl
   aAm
   mov ac2,al;=09
   mov r3,ah;=0
 
   ;Mostramos resultado
   mov ah,02h
   mov dl,ac2
   add dl,30h
   int 21h        ;Mostramos ac (millar)

   mov ah,02H
   mov dl,ac
   add dl,30h
   int 21h        ;Mostramos r1 (centena)

   mov ah,02H
   mov dl,r1
   add dl,30h
   int 21h        ;Mostramos r2 (decena)
 
   mov ah,02H
   mov dl,r2
   add dl,30h
   int 21h        ;Mostramos r2 (Unidad)
.exit
end

martes, 13 de marzo de 2018

Resumen de la unidad 2 :Arquitectura de un gestor de bases de datos

ESTRUCTURA DE LA MEMORIA:

Es la estructura de memoria compartida que contienen datos e información de control para una
instancia de una base de datos, cada instancia tiene sus propias estructuras de memoria y se
localiza en la memoria virtual del computador. Las estructuras de memoria se denominan System
Global Area (SGA) la cual es un área compartida por todos los usuarios y se divide en tres partes:


Arear de Memoria rápida (Dtabase buffer cache): mantiene los bloques de datos leídos
directamente de los archivos de datos. Cuando se procesa una consulta, el servidor busca los
bloques de datos requeridos en esta estructura. Si no se encuentra, el proceso servidor lee el
bloque de la memoria secundaria y coloca una copia. Está organizada en dos listas:
– Lista de sucios: bloques que han sufrido modificaciones y no han sido escritos en disco.
– Lista de menos recientemente usados: mantiene los bloques libres, los bloques a los que se
está accediendo actualmente y los bloques sucios que aún no han sido remitidos a la lista
de sucios.
 

Área de registro de rehacer (Redo log buffer): es un buffer circular que mantiene todos los
cambios que han sido realizados sobre la base de datos por operaciones de insert, update,
delete, create, alter y drop. Las entradas de este buffer contienen toda la información
necesaria para reconstruir los cambios realizados a la base de datos por medio de cualquier
instrucción (el bloque que ha sido cambiado, la posición de cambio y el nuevo valor). El uso es
estrictamente secuencial.


Shared Pool: es una caché que mejora el rendimiento ya que almacena parte del diccionario de datos y el parsing de algunas consultas en SQL.

En esta zona se encuentran las sentencias SQL que han sido analizadas. El análisis sintáctico de las sentencias SQL lleva su tiempo y Oracle mantiene las estructuras asociadas a cada sentencia SQL analizada durante el tiempo que pueda para ver si puede reutilizarlas.
Antes de analizar una sentencia SQL, Oracle mira a ver si encuentra otra sentencia exactamente igual en la zona de SQL compartido. Si es así, no la analiza y pasa directamente a ejecutar la que mantiene en memoria. De esta manera se premia la uniformidad en la programación de las aplicaciones. La igualdad se entiende que es lexicográfica, espacios en blanco y variables incluidas.
La base de datos Oracle asigna memoria a la shared pool cuando una nueva instrucción sql se analiza. El tamaño de esta memoria depende de la complejidad de la instrucción. Si toda la shared pool ya ha sido asignada la base de datos Oracle puede liberar elementos de la shared pool hasta que haya suficiente espacio libre para nuevas sentencias. Al liberar un elemento de la shared pool el sql asociado debe ser recompilado y reasignado a otra área de sql compartida la próxima vez que se ejecute.
El contenido de la zona de SQL compartido es:
  • Las sentencias SQL y PL/SQL (texto de la sentencia)
  • Plan de ejecución de la sentencia SQL.
  • Lista de objetos referenciados.
Los pasos de procesamiento de cada petición de análisis de una sentencia SQL son:
  • Comprobar si la sentencia se encuentra en el área compartida.
  • Comprobar si los objetos referenciados son los mismos.
  • Comprobar si el usuario tiene acceso a los objetos referenciados.Si no, la sentencia es nueva, se analiza y los datos de análisis se almacenan en la zona de SQL compartida.
Dividido en:

Library cache

Incluye los espacios comunes de SQL, áreas privadas de SQL (en el caso de una configuración de servidor compartido), los procedimientos PL/SQL y paquetes, y las estructuras de control, tales como bloqueos.

Data Dictionary Cache

También conocido como Dictionary Cache o Row Cache, almacena la información de uso más reciente sobre el diccionario de datos. Es una colección de tablas y vistas que contienen información referente a la base de datos como los nombres y tipos de datos de las columnas de las tablas, usuarios, passwords y privilegios. Durante la fase de compilación, esta información es necesaria para resolver los nombres de los objetos utilizados en un comando SQL y para validar los privilegios de acceso.
Video: https://www.youtube.com/watch?v=fKOnylu4tmA

Large Pool

El administrador de la base de datos puede configurar esta área de memoria opcional, para proveer localidades más amplias de memoria para:
  • Memoria de sesiones.
  • Procesos de I/O del servidor
  • Backups de la base de datos y operaciones de recuperación.
Al asignar espacios dentro de large pool para un servidor compartido, Oracle puede usar la shared pool principalmente para guardar en caché las sentencias compartidas de sql y evitar la sobrecarga causada por la disminución de la caché de sql compartida. Además la memoria para backup y operaciones de recuperación y para procesos de I/O del servidor es asignada en buffers de algunos cientos de kilobytes, por lo que la large pool mucho más capaz de satisfacer dicha demanda de memoria que la shared pool.

Java Pool

La memoria java pool es usada en la memoria del servidor para todas las sesiones que utilicen código java y datos en la JVM. Esta memoria es usada de diferentes maneras dependiendo del modo en el que la base de datos esté corriendo.

Streams Pool

Esta memoria es usada exclusivamente por flujos de Oracle. Esta almacena colas de mensajes y provee memoria para que los flujos de Oracle capturen procesos y los apliquen. A menos que se configure específicamente, el tamaño de esta memoria empieza en cero. El tamaño de la streams pool crece dinámicamente como sea necesario cuando los flujos de Oracle son usados.
Video: https://www.youtube.com/watch?v=HJQF2AtpTA4

ARCHIVOS: 

Los Archivos de Datos (Datafiles): sirve para el almacenamiento físico de las tablas, índices y
procedimientos, estos son los únicos que contienen los datos de los usuarios de la base de datos.

Archivos de Control (control files): tiene la descripción física y dirección de los archivos para el arranque correcto de la base de datos

Archivos de Rehacer (redo log files): tienen los cambios que se han hecho a la base de datos
para recuperar fallas o para manejar transacciones. Debe esta conformado por dos grupos como
mínimo y cada grupo debe esta en discos separados. El principal propósito de estos archivos es deservir de respaldo de los datos en la memoria RAM.

Archivos fuera de línea (archived files): archivos opcionales donde se pueda guardar
información vieja de los archivos de rehacer, convenientes para respaldos de base de datos

LOS PROCESOS: 

Procesos de Base o de Soporte: se encargan de traer datos desde y hacia la estructura de
memoria (SGA), cada uno tiene su propia área de memoria; los procesos de este tipo son los
siguientes:

Database Writer (DBWR): se encarga de copiar los bloques desde el buffer cache hasta la
memoria secundaria.

Log Writer (LGWR): escribe las entradas desde el Log Buffer a disco. La escritura de
bloques del Redo Log Buffer a disco ocurre secuencialmente y bajo las siguientes reglas:
– Cuando el Redo Log está lleno en un 33% o más.
– Cuando oucrre un time-out (cada tres segundos).
– Antes de que el DBWR escriba algún bloque modificado a disco.
– Cuando una transacción se compromete.

Checkpoint (CKPT): encargado de notificar al DBWR para que se escriban en los archivos
de datos todos los bloques contenidos en la lista de sucios. Este proceso es invocado en
intervalos de tiempo determinados. El CKPT es opcional, si no existe las funciones son
realizadas por el LGWR.

System Monitor (SMON): Encargado de realizar un proceso de recuperación rápida cada
vez que una instancia es inicializada. Esta labor incluye limpieza de las estructuras de datos
de soporte a la ejecución de consultas y llevar a la base de datos a un estado estable
previo a la ejecución de aquellas transacciones que no hayan culminado exitosamente.
También se encarga de desfragmentar el espacio físico de almacenamiento uniendo
bloques de datos libres en la memoria secundaria.

Process Monitor (PMON): lleva la pista de los procesos de la base de datos y efectúa
labores de limpieza (liberar recursos y bloques ocupados en los cache’s) si alguno de ellos
termina prematuramente.

Archiver (ARCH): copia las bitácoras activas cuando éstas se encuentran llenas. Este
proceso se encuentra activo sólo cuando el DBMS se encuentra operando en modo
ARCHIVELOG, el único modo que admite recuperación de los datos frente a fallas del
sistema.

Recoverer (RECO): resuelve transacciones distribuidas que se encuentran pendientes
debido a la red o a fallas ocurridas en la base de datos distribuida.

Dispatcher (Dnnn): se crea por cada sesión de trabajo activa; es responsable de enrutar
los requerimientos desde el proceso usuario, al cual se encuentra asociado, hacia los
procesos servidores y retornar la respuesta al proceso de usuario adecuado. Estos
procesos se crean solo cuando se ejecuta con la opción multithreading.

Procesos de Usuario: se encarga de ejecutar el código de aplicación del usuario y manejar el perfil del usuario con sus variables de ambiente. Estos procesos no se pueden comunicar
directamente con la base de datos, por lo que la comunicación la establecen mediante
procesos de servidores.

Procesos de Servidores: estos procesos ejecutan las órdenes SQL de los usuarios y llevan los
datos del buffer caché para que los procesos de usuario puedan tener acceso a los datos.

2.1.3 Requerimientos para instalación de la base de datos.
Antes de instalar cualquier SGBD es necesario conocer los requerimientos de hardware y software, el posible software a desinstalar previamente, verificar el registro de Windows y el entorno del sistema, así como otras características de configuración especializadas como pueden ser la reconfiguración de los servicios TCP/IP y la modificación de los tipos archivos HTML para los diversos navegadores.

Se presenta a continuación una serie de requerimientos mínimos de hardware y software para instalar oracle 11g Express y MySQL estándar versión 5.1. en Windows Seven y Ubuntu 10.


2.1.4 Instalación del software de BD en modo transaccional
Debido al constante crecimiento de datos que generan las empresas hoy en día, se ha vuelto muy necesaria la búsqueda de nuevas plataformas para almacenar y analizar la información, ambientes que consuman menos recursos, que sean más escalables y que provean una alta disponibilidad. La solución consiste en el procesamiento paralelo de los datos de una base de datos.

Una base de datos en modo transaccional significa que la BD será capaz de que las operaciones de inserción y actualización se hagan dentro de una transacción, es un componente que procesa información descomponiéndola de forma unitaria en operaciones indivisibles, llamadas transacciones, esto quiere decir que todas las operaciones se realizan o no, si sucede algún error en la operación se omite todo el proceso de modificación de la base de datos, si no sucede ningún error se hacen toda la operación con éxito.

Una transacción es un conjunto de líneas de un programa que llevan insert o update o delete. Todo aquél software que tiene un log de transacciones (que es la "bitácora" que permite hacer operaciones de commit o rollback), propiamente es un software de BD; aquél que no lo tiene (v.g. D-Base), propiamente no lo es. Todo software de base de datos es transaccional; si el software de la BD no es "transaccional", en realidad NO es un "software" de BD; en todo caso, es un software que emula el funcionamiento de un verdadero software de BD. Cada transacción debe finalizar de forma correcta o incorrecta como una unidad completa. No puede acabar en un estado intermedio.

Se usan las siguientes métodos :

  • ·       Begin TRans para iniciar la transacción
  • ·       CommitTrans para efectuar los cambios con éxito
  • ·       RollbackTrans para deshacer los cambios
Y depende que base de datos uses para efectuar las operaciones pero, es la misma teoría para cualquier BD.

Una vez que se sabe la forma de ingresar comandos, es el momento de acceder a una base de datos.

Suponga que en su hogar posee varias mascotas y desea registrar distintos tipos de información sobre ellas. Puede hacerlo si crea tablas para almacenar sus datos e introduce en ellas la información deseada. Entonces, podrá responder una variedad de preguntas acerca de sus mascotas recuperando datos desde las tablas. Los pasos serían:

• Crear una base de datos

• Crear una tabla

• Introducir datos en la tabla

• Recuperar datos desde la tabla de varias maneras

• Emplear múltiples tablas

2.1.5 Variables de Ambiente y archivos importantes para instalación.


Imagen
Para instalar MySQL como primer instancia el archivo primordial es el que se descarga de la Web de MySQL. El proceso para instalar MySQL desde un archivo ZIP es el siguiente:
1. Extraer el contenido del archivo dentro del directorio de instalación deseado.

2. Crear un archivo de opciones.

3. Elegir un tipo de servidor MySQL

4. Iniciar el servidor MySQL.

5. Establecer la seguridad de las cuentas de usuario por defecto.


2.1.6 Procedimiento general de instalación de un DBMS
https://www.blogger.com/blogger.g?blogID=2605600142034265127#editor/target=post;postID=1936041526765777001;onPublishedMenu=allposts;onClosedMenu=allposts;postNum=22;src=postname

2.1.7 Procedimiento para configuración de un DBMS.
Para configurar nuestro DBMS podemos acceder a las siguientes pantallas, para Oracle o MySQL.
El esquema de una base de datos (en inglés, Database Schema) describe la estructura de una Base de datos, en un lenguaje formal soportado por un Sistema administrador de Base de datos (DBMS). En una Base de datos Relacional, el Esquema define sus tablas, sus campos en cada tabla y las relaciones entre cada campo y cada tabla.
Oracle generalmente asocia un 'username' como esquemas en este caso SYSTEM y HR (Recursos humanos).


Como conclusion podemos decir que una base de datoss esta compuesta por elementos que:
1.- Ayudan a manejar la informacion de forma rapida
2.-ayudan a no perder informacion
3.- almacenan informacion

4.- elementos de recuperacion
 

jueves, 1 de marzo de 2018

Ejemplo ciclos emu8086


org 100h



.model small

.stack 64

.data



mensaje db 10,13 ,"Dame un numero",10,13,"$"

mensaje2 db 10,13 ,"Dame un la potencia",10,13,"$"

n1 db 0

n2 db 0

n3 db 0

.code



inicio:     ;función inicio



 mov ax,@data ;Movemos el segmento data a ax

 mov ds,ax ; Movemos lo que esta en ax a ds

 mov dx,offset mensaje ;Imprimimos el primer mensaje parte 1

 mov ah, 09h ;Imprimimos el primer mensaje parte 2

 int 21h ;Imprimimos el primer mensaje parte 3



 mov ah,01     ;pausa y espera a que el usuario presione una tecla

 int 21h        ;interrupción para capturar

 sub al,30h   ;lo que el usuario presiono se guarda en al y se le resta 30h para convertirlo a un numero

 mov n1,al ;Movemos lo que esta en al a la variable n1

 mov n3,al  ;Movemos lo que esta en al a la variable n3



 mov ah, 09h ;imprimimos el mensaje 2 parte 1

 mov dx,offset mensaje2  ;imprimimos el mensaje 2 parte 2

 int 21h  ;imprimimos el mensaje 2 parte 3

 mov ah,01     ;pausa y espera a que el usuario presione una tecla

 int 21h           ;interrupcion para capturar

 sub al,30h     ;lo que el usuario presiono se guarda en al y se le resta 30h para convertirlo a un numero

 mov n2,al     ;Guardamos lo que el usuario preciono el n2





 mov cl,al ; movemos lo que esta en al a cl para decirle al ciclo cuantas vueltas va a dar

 sub cl,1 ;le restamos 1 para que no de una vuelta de mas





call ciclo ;llamada a ciclo



ciclo:  ;Funcion

 call ciclo1 ;llamada el procediemto 1



ciclo1 proc near : ;procedimiento ciclo

  mov al,n1 ;potencia parte 1

  mov bh,n3 ;potencia parte 2

  mul bh ;potencia parte 3



  mov n1,al



  loop ciclo1 ;loop a la funcion ciclo

 



  mov ax,4c00h ;fin parte 1

  int 21h; fin parte 2



fin: ;funcion fin

 mov ax,4c00h      ;funcion que termina el programa

 int 21h

end inicio