jueves, 12 de enero de 2017

Proceso


Proceso:  Se refiere a la ejecución de diversas instrucciones por parte del microprocesador, de acuerdo a lo que indica un programa.

Estados de los procesos:  Todo proceso en un sistema operativo presenta un estado que indica la situación de la ejecución en que se encuentra. El número de posibles estados varía de un sistema operativo a otro.

Consideramos que todo proceso puede estar, como mínimo, en uno de los siguientes tres estados:

Activo: El proceso está empleando la CPU, por tanto, está ejecutándose. Pueden haber tantos procesos activos como procesadores haya disponibles. Por tanto, si el sistema dispone de un único procesador, únicamente puede haber un proceso activo a la vez.

Preparado: El proceso no está ejecutándose pero es candidato a pasar a estado activo. Es el planificador el que, en base a un criterio de planificación, decide qué proceso selecciona de la lista de procesos preparados para pasar a estado activo.

Bloqueado: El proceso está pendiente de un evento externo que le ha hecho bloquear, tales como una operación de lectura/escritura, la espera de finalización de un proceso hijo, una señal o una operación sobre un semáforo. El dispositivo/hecho externo "avisa" al S.O. cuando ha terminado la acción que realizaba mediante una INTERRUPCIÓN, dejando el S.O. lo que está haciendo para atender a esta última. Tras esto, el S.O. comprueba cuales son los procesos que fueron bloqueados por ese evento externo, cambiándolos al estado de preparado.

La transición de activo a preparado y viceversa depende de decisiones tomadas por el planificador del sistema operativo en base a un cierto criterio. La transición de activo a bloqueado, y de bloqueado a preparado puede inducirlas el programador mediante llamadas al sistema.


Operaciones sobre procesos: Los sistemas operativos son responsables de la "gestión de procesos y memoria", por lo que están encargados de realizar una serie de actividades, tales como la planificación o itineración de procesos, la operación sobre procesos y la comunicación entre procesos. Para operar sobre un proceso, los sistemas operativos actuales suministran ciertas funciones, que pueden ser ejecutadas ya sea desde el mismo proceso o desde el intérprete de comandos, si es un usuario el que solicita algún servicio de dicho sistema. 
Entre las operaciones sobre procesos que con mayor frecuencia ofrecen los sistemas operativos se encuentran la creación, terminación o destrucción, suspensión y reanudación de procesos. Actualmente, en la mayoría de los S.O., los procesos pueden ejecutarse de forma concurrente, pudiéndose crear y eliminar de forma dinámica, por lo que es necesario que estos sistemas brinden un mecanismo para la creación y terminación de procesos.

planificador de procesos: El planificador de procesos (process scheduler, en inglés) es la parte del sistema operativo que se encarga de seleccionar a qué proceso se asigna el recurso procesador y durante cuánto tiempo.

Ejemplo:

Para la siguiente configuración de procesos:
  • Proceso Pa: Llega en el instante de tiempo 0. Realiza una llamada al sistema bloqueante cada 1 unidad de tiempo, la operación bloqueante se resuelve tras 2 unidades de tiempo. Para finalizar su ejecución requiere 5 unidades de ejecución.
  • Proceso Pb: Llega en el instante de tiempo 1. Para finalizar su ejecución requiere 4 unidades de ejecución.
  • Suponga que el proceso Pa tiene mayor prioridad que el proceso Pb, por tanto, el planificador debe de dejar paso al proceso Pa siempre que éste esté en estado preparado.
La evolución de la asignación del procesador que realizaría el planificador es la siguiente:

Bloque de control de procesos: Para llevar a cabo la gestión de un proceso, es necesario que el sistema operativo guarde cierta información necesaria. Para ello, existe un registro especial que se conoce como el bloque de control del proceso BCP, o PCB en inglés (Process Control Block).
El BCP es creado por el Sistema operativo cada vez que aparece un nuevo proceso. Los procesos son conocidos para el sistema operativo y por tanto elegibles para competir por los recursos del sistema sólo cuando existe un BCP activo asociado a ellos. Cuando el programa termina, el BCP es eliminado para dejar espacio libre en el registro, y usarlo para almacenar otros BCP.
El bloque de control de procesos difiere mucho de un sistema a otros, pero existen contenidos comunes:

  • Identificador del proceso: Identificar de forma unívoca al proceso en el sistema, generalmente se emplea un entero sin signo que se denomina PID (Process IDentifier)

  • Estado del proceso para el planificador de procesos: preparado, activo o bloqueado.
  • Contexto de la ejecución: valor de los registros del procesador, bits de estados, etc. Esto es, cada vez que se ejecuta el planificador y se realiza una conmutación de procesos, la información sobre en qué lugar se encontraba la ejecución del proceso se encuentra guardada aquí, así como el lugar en el que se paró la ejecución del anterior proceso (cada una en su respectivo BCP).
  • Aspectos relacionados con la administración de memoria: tales como el espacio de direcciones y la cantidad de memoria asignada a un proceso.
  • Aspectos relacionados con la administración de ficheros: tales como los ficheros con los que el proceso está actualmente operando.
  • Los procesadores en los que el proceso puede ejecutarse: en caso de soportar el sistema multiprocesador.
  • En el caso de un sistema operativo tipo UNIX: el proceso padre de dicho proceso y la relación de procesos hijos.
  • Estadísticas temporales: Tiempo de lanzamiento del proceso, tiempo en estado activo, etc.



Tipos de interrupciones y excepciones: Una interrupción por hardware es un mecanismo de comunicación entre el procesador y los dispositivos de E/S. Sirve para indicar que un dispositivo de E/S tiene datos pendientes de ser tratados. Las interrupciones por hardware evitan que el sistema operativo tenga que muestrear periódicamente el estado de los dispositivos de E/S, de manera que son ellos mismos los que indican que hay datos a ser tratados.

  • Una interrupción por software, es un mecanismo de comunicación entre un proceso (que se ejecuta en modo usuario) y el sistema operativo (que se ejecuta en modo supervisor). El proceso emplea las interrupciones por software para notificar al sistema operativo que requiere de su intervención. Para lanzar una interrupción por software un proceso ejecuta la instrucción int seguida de un número de 16 bits que indica el tipo de interrupción por software. Por ejemplo, las llamadas al sistema en x86 se implementan mediante interrupciones por software, por medio de la instrucción int 0x80 (Sin embargo, hoy día las arquitectura de procesadores viene con instrucciones especializadas para la invocación de llamadas al sistema, por tanto esta técnica ha caído en desuso).
Las excepciones son un tipo de interrupción por software que emplea el sistema operativo para indicar al proceso de un evento externo que debe ser tratado inmediatamente.
El tratamiento de interrupciones es prioritario, por tanto, en caso de interrupción se deja de ejecutar el proceso para dar paso al manejador de la interrupciones.


Conmutación de procesos: La conmutación de procesos es la operación que consiste en retirar el procesador a un proceso para asignárselo a otro. La conmutación se produce por cuatro razones:

  1. Un proceso agota el tiempo máximo asignado al procesador, por tanto, se debe dar paso a otro proceso para garantizar que la multiprogramación es llevada a cabo apropiadamente.
  2. Un proceso está pendiente de un evento externo, por tanto, pasa a estado bloqueado haciendo uso de la llamada al sistema bloqueante. El planificador debe asignar el procesador a otro nuevo proceso de entre los que están en estado preparado.
  3. Que termine la ejecución del proceso en cuestión.
  4. Que haya una interrupción en la ejecución.
Los pasos que se siguen son los siguientes:
  1. Pasar a modo privilegiado.
  2. Guardar el contenido de los registros del hardware en el PCB (el llamado contexto de la ejecución).
  3. Actualizar el estado del proceso en el PCB (el estado ha pasado de activo a bloqueado o preparado).
  4. Si se produjo una interrupción, atenderla.
  5. Seleccionar un nuevo proceso.
  6. Restaurar el contexto de ejecución del nuevo proceso seleccionado. En el caso de que el nuevo proceso no hubiese estado en el contexto de la ejecución deberá inicializarse.
  7. Pasar a modo no privilegiado.

Sincronización: Los mecanismos de sincronización los podemos catalogar en dos categorías:
  • Optimistas: Este mecanismo considera que la frecuencia de acceso a un cierto recurso compartido es baja. Este tipo tiene mas consumo de memoria, ya que tiene que copiar el recurso compartido y en caso de interferencia en el hilo tiene que volver a ejecutarlo y consume mas recursos.
  • Pesimistas: Este mecanismo permite coordinar la ejecución de dos o más procesos que acceden al recurso compartido con una frecuencia alta.
Dependerá del criterio del programador el tipo de mecanismo que utilice ya que puede que no elija el tipo correcto. Por ejemplo, puede que la frecuencia de acceso a un cierto recurso sea alta y el programador le asigna un mecanismo optimista, esto provocaría no obtener el resultado esperado.


Concurrencia de procesos: La concurrencia de procesos se refiere a las situaciones en las que dos o más procesos puedan coincidir en el acceso a un recurso compartido o, dicho de otra forma, que requieran coordinarse en su ejecución. Para evitar dicha coincidencia, el sistema operativo ofrece mecanismos de arbitraje que permiten coordinar la ejecución de los procesos.
 



domingo, 13 de noviembre de 2016

Sistema de Computación



La arquitectura de Von Neumann: habla de un computadora digital electrónico con partes que constan de elementos esenciales tales como Unidad de Procesamiento: La cual contiene una unidad aritmético lógica y registros del procesador Unidad de Control: La cual contiene un registro de instrucciones y un contador de programa. Memoria: Que sirve para almacenar tanto datos como instrucciones de almacenamiento, almacenamiento masivo externo y mecanismos de entrada y salida 





En un sistema con arquitectura Von Neumann el tamaño de la unidad de datos o instrucciones está fijado
por el ancho del bus que comunica la memoria con la CPU. Así un microprocesador de 8 bits con un bus de 8 bits, tendrá que manejar datos e instrucciones de una o más unidades de 8 bits (bytes) de longitud. Si tiene que acceder a una instrucción o dato de más de un byte de longitud, tendrá que realizar más de un acceso a la memoria.El tener un único bus hace que el microprocesador sea más lento en su respuesta, ya que no puede buscaren memoria una nueva instrucción mientras no finalicen las transferencias de datos de la instrucción anterior.
Las principales limitaciones que nos encontramos con la arquitectura Von Neumann son:

a) La limitación de la longitud de las instrucciones por el bus de datos, que hace que el microprocesador tenga que realizar varios accesos a memoria para buscar instrucciones complejas.
b) La limitación de la velocidad de operación a causa del bus único para datos e instrucciones que no deja acceder simultáneamente a unos y otras, lo cual impide superponer ambos tiempos de acceso


Procesador: El procesador es el cerebro del sistema, encargado de procesar toda la información. Básicamente, es el "cerebro" de la computadora. Prácticamente, todo pasa por él, ya que es el responsable de ejecutar todas las instrucciones existentes. Mientras más rápido vaya el procesador,





Memoria rom: Circuito integrado de memoria de solo lectura que almacena instrucciones y datos de forma permanente.





Memoria Ram:  se utiliza como memoria de trabajo de computadoras para el sistema operativo, los programas y la mayor parte del software. En la RAM se cargan todas las instrucciones que ejecuta la unidad central de procesamiento (procesador) y otras unidades del computador.



Memoria secundaria: es un tipo de almacenamiento masivo y permanente (no volátil), a diferencia de la memoria RAM que es volátil; pero posee mayor capacidad de memoria que la memoria principal, aunque es más lenta que ésta.



Software: son los programas informáticos que hacen posible la realización de tareas específicas dentro de un computador. Por ejemplo Word, Excel, PowerPoint, los navegadores web, los juegos, los sistemas operativos, etc.

 La palabra software se refiere a las instrucciones que se incorporan a un sistema informático para que este lleve a cabo una determinada función. Partiendo de esta sencilla definición, el campo que se esconde detrás es inmenso, porque engloba desde pequeñas aplicaciones para llevar a cabo tareas muy específicas, a archiconocidos sistemas operativos con capacidad para realizar miles de funciones.




El hardware: es la parte que puedes ver del computador, es decir todos los componentes de su estructura física.
La pantalla, el teclado, la camara y el ratón hacen parte del hardware de tu equipo.





Los Dispositivos de Entrada: Estos dispositivos permiten al usuario del computador introducir datos, comandos y programas en el CPU. El dispositivo de entrada más común es un teclado similar al de las máquinas de escribir. La información introducida con el mismo, es transformada por el ordenador en modelos reconocibles. Los datos se leen de los dispositivos de entrada y se almacenan en la memoria central o interna. Los Dispositivos de Entrada, convierten la información en señales eléctricas que se almacenan en la memoria central.



Los Dispositivos de Salida: Estos dispositivos permiten al usuario ver los resultados de los cálculos o de las manipulaciones de datos de la computadora. El dispositivo de salida más común es la unidad de visualización (VDU, acrónimo de Video Display Unit), que consiste en un monitor que presenta los caracteres y gráficos en una pantalla similar a la del televisor.



martes, 12 de julio de 2016




Python
Es un lenguaje de programación poderoso y fácil de aprender. Cuenta con estructuras de datos eficientes y de alto nivel y un enfoque simple pero efectivo a la programación orientada a objetos. La elegante sintaxis de Python y su tipado dinámico, junto con su naturaleza interpretada, hacen de éste un lenguaje ideal para scripting y desarrollo rápido de aplicaciones en diversas áreas y sobre la mayoría de las plataformas.

El intérprete de Python y la extensa biblioteca estándar están a libre disposición en forma binaria y de código fuente para las principales plataformas desde el sitio web de Python, http://www.python.org/ y puede distribuirse libremente. El mismo sitio contiene también distribuciones y enlaces de muchos módulos libres de Python de terceros, programas y herramientas, y documentación adicional.

Las características principales de este lenguaje son cuatro
Tipado dinámico, no es necesario indicar el tipo de variable al momento de declararlo ya que lo identifica automáticamente.
Fuertemente tipado, no se permite tratar de manera implícita a una variable como si fuera de otro tipo.
Multiplataforma, se refiere a que no depende de un sistema operativo en especifico para funcionar bien.
Multiparadigma, python es un lenguaje orientado a diversos paradigmas entre ellos tiene la programación orientada a objetos, programación estructurada, programación funcional y programación orientada a aspectos.

¿Cómo comienzo a usar Python?
Primero hay que instalar este lenguaje y los pasos dependerán de tu sistema operativo.
Si usas linux no sera necesario instalarlo ya que viene por defecto instalado.
En caso que uses Windows o Mac debes instalar python desde su página oficial.
En caso que desees probarlo antes de instalarlo puedes usar repl.it.

Operadores aritméticos en Python


                                  Operador                                                               Descripción
                                                     +                                                                              Suma
                                                     -                                                                               Resta
                                                     *                                                                        Multiplicación
                                                    **                                                                          Exponente
                                                     /                                                                              División
                                                    //                                                                         División Entera
                                                   %                                                                              Módulo


El tipo módulo de python es el residuo que se obtiene en una división. Por ejemplo al dividir 7 entre 4. El número 7 es el dividendo, 4 es el divisor, el cociente seria 1 y el resto seria 3. En este ejemplo de 7 % 4 el resultado seria 3.

En otras palabras, el módulo da como respuesta el resto de la división entre los dos números, donde el primero es el dividendo y el segundo es el divisor.
Tipos Básicos de Python

Existen 5 tipos de datos principales
Enteros, son los números tanto negativos como positivos que no tienen decimales. Este es representado por el tipo int o long. La diferencia entre estos dos es que int tiene un limite de almacenamiento mientras que el tipo long puede usar toda la memoria que se tenga disponible para almacenar estos números.


¿Como funciona el int y el long?
Para poder entender su funcionamiento mostraremos unos ejemplos. El tipo int se declara de la siguiente manera

>>> numero_a = 2
>>> numero_b = 5

Si queremos visualizar su tipo basta con digital lo siguiente


>>> print type(numero_a)
<type 'int'>

Si sumamos dos enteros nos da un entero

 
>>> print numero_a + numero_b

Ya sea división seguirá dando un entero


>>> print numero_a / numero_b
>>> print numero_b / numero_a


Para crear un tipo long se hace un pequeño cambio


>>> gran_numero_a = 2L
>>> gran_numero_b = 5L

Para confirmar que es un long podemos agregarle el type

>>> type(gran_numero_a)
<type 'long'>

Quiero volver a indicar que la única diferencia entre int y long es que este último no tiene una restricción para almacenar números salvo la capacidad que tenga la memoria del computador.


                                                                                                 Reales
 Estos números son los que tienen decimales. En python son expresados con el tipo float. El tipo float se obtiene cuando le asignas a una variable un valor como el siguiente


>>> real_a = 0.236
>>> real_b = 5.414

Podemos verificar que su tipo si es float con la función type


>>> print type(real_a)
<type 'float'>

Si hacemos alguna operación entre un entero y un real predomina el numero real


>>> print 3 + 5.0
8.0
>>> print 5/2.0
2.5


                                                                       Complejos
Python es uno de los pocos lenguajes que soporta números imaginarios. Este tipo de variable están orientados mas que nada para un uso científico pues no es necesario profundizar mucho en el tema. En python son representados con nombre de complex. Si tenemos la curiosidad de como se declara los números complejos, se declara de la siguiente manera.


>>> numero_imaginario = 1j
>>> type(numero_imaginario)
                                                                               <type 'complex'>
                                                                           >>> 2j + 5j
                                                                                    7j
                                                                          >>> 2j * 5j
                                                                                   (-10+0j)


                                                                     Cadenas
Este tipo de variable, son conocidos con el tipo str, representan a las cadenas de texto ya sean con comillas simples (‘texto’) o con doble comillas (“texto”)El tipo de variable sera visualizado de la siguiente manera


>>> cadena = "hola cesar" 
                                                         >>> type(cadena)
                                                                                <type 'str'>

                                                                     Booleanos
Este tipo de variable solo puede tener dos tipos de variables: True o False. Estas variables en python son con conocidos con el nombre de bool. Es importante resaltar que python es un lenguaje sensitivo a las mayúsculas. Por lo tanto, es importante tener cuidado con las mayúsculas al tipiar en python. Es decir, al momento de tipiar los booleanos se debe escribir True y no true, ni TRUE, ni TrUe.

Hasta aquí llegamos con los concepto de python. Si quieren profundizar mas de este tema pueden visitar la documentación oficial de python.
http://www.python.org/