viernes, 14 de febrero de 2014

El Juego de la Vida de Conway (Conway's Life) en JAVA


Aquí les traigo parte de la teoría del juego de la vida y su respectivo código fuente de la aplicación programado en java, con interfaz gráfica, espero les sirva el documento.

Concepto y descripción de autómatas celulares

John Von Neumann investigó la cuestión del origen de la vida y trató de diseñar una máquina capaz de reproducirse. La idea en el diseño de auto-reproducción llevó a Von Neumann a inventar un sistema denominado: Autómatas Celulares, capaces de construir cualquier autómata a partir de un conjunto apropiado de instrucciones codificadas.
Los Autómata Celulares se consideran sistemas dinámicos extendidos, que consisten de un número considerable de componentes simples idénticos con conectividad local, y son definidos como un sistemas que evoluciona en tiempo y espacio discretos, compuesto de una colección de celdas discretas y deterministas, ordenadas en fila, en forma de matriz o en tres dimensiones, que actualizan sus estados a lo largo del tiempo en base a los estados que tenían las celdas vecinas en el momento inmediato anterior, en otras palabras, el estado siguiente de una celda es determinado por el estado actual de ella y de sus celdas vecinas, donde cada celda se comporta como un autómata de estado finito. Un autómata finito es un modelo de sistema con entradas y salidas discretas, consiste en un conjunto finito de estados y un conjunto de transiciones entre esos estados. La entrada y el estado actuales del autómata determinan su conducta en el instante siguiente.

Un Autómata celular consiste de dos componentes: el primero es un espacio celular, una red de n celdas de estado finito, cada una con un patrón idéntico de conexiones locales con otras celdas, junto con condiciones de límite, si se trata de una red finita. El segundo componente consiste en reglas de transición que actualizan, o bien definen los estados de cada celda, donde éstos estados junto con el de las celdas conectadas a ellas dan lugar a lo que es una vecindad.


El Juego de La Vida de Conway (Conway’s Life)

John Horton Conway nació en 1937, comenzó su carrera de Matemáticas en la Universidad de Cambrige. A finales de 1960 Conway, motivado por el trabajo de Von Neumann, siguiendo la idea de construir una máquina capaz de construir copias de sí misma y haciendo uso del concepto de vecindad de un autómata definido por Moore, diseñó y dió a conocer el autómata celular más famoso: El juego de la Vida (The Game of the Life), también llamado El Juego de Conway (Conway’s Life), un juego de sentido solitario, es decir, para un solo jugador. Éste juego es un autómata bidimensional donde cada célula puede estar en uno de los dos estados 0 o 1, (muerto o vivo). A partir de un estado inicial el autómata va a evolucionar en base a unas funciones de trancisión, además una célula estará en un estado concreto determinado unicamente por el estado anterior de las celulas vecinas, así como el de la propia célula.


Conway definió el siguiente conjunto de reglas:
  • SOLEDAD, si una célula viva esta sola o tiene un solo vecino muere.
  • SOBREPOBLACIÓN, si una célula viva tiene más de tres vecinos muere.
  • ESTABILIDAD, de lo contrario la célula se queda igual.

DISEÑO FORMAL DE AUTOMATA CELULAR DEL JUEGO DE LA VIDA

Conjunto de Estados
Q
(Muerto o Vivo)
Alfabeto
(0, 1)
Transición
Ҏ
Muerto (0) o Vivo (1)
Estado Inicial
qo
Estático
Conjunto de estados finales
F
Dinámico
Espacio de celulas
n x m
Número de Filas (n)
Número de Columnas (m)
Reglas de transición

  • Soledad
  • Sobrepoblación
  • Estabilidad

  • Si una célula viva esta sola o tiene un solo vecino muere.
  • Si una célula viva tiene más de tres vecinos muere
  • De lo contrario la célula se queda igual.


CODIFICACIÓN DE LOS ESTADOS:

public void procesar() {
        for (int i = 1; i < fil - 1; i++) {
            for (int j = 1; j < col - 1; j++) {
                int sum = m[i - 1][j - 1] + m[i][j - 1] + m[i + 1][j - 1] + m[i + 1][j] + m[i + 1][j + 1] + m[i][j + 1] + m[i - 1][j + 1] + m[i - 1][j];
                if (sum == 3) {
                    mt[i][j] = 1;
                } else if (sum != 2) {
                    mt[i][j] = 0;
                }
            }
        }
        this.copiaMatriz();
    }


CODIFICACIÓN DE ENTORNO Y DE EL PROGRAMA EN GENERAL:

Main.java:

/**
 * @author Andrea Dorado
 */

public class Main {
    public static void main(String[] args) {
        Ventana mjf = new Ventana();
        mjf.setSize(900, 650);
        mjf.setVisible(true);
    }
}


Ventana.java:

import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.*;
import javax.swing.*;

/**
 * @author Andrea Dorado
 */
public class Ventana extends JFrame implements ActionListener {

    JMenuBar menuBar;
    JMenu mnFile;
    JMenuItem mniExit;
    Lienzo pnlGraphic;
    JPanel pnlEast, pnlEastTop, pnlEastBottom;
    JToolBar toolBar;
    JButton btnEjecutar;
    ButtonGroup btnGroup;
    Timer timer;

    public Ventana() {
        super("INF - 154 Lenguajes Formales y Autómatas (El Juego de la Vida)");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        menuBar = new JMenuBar();
        mnFile = new JMenu("Archivo");
        mniExit = new JMenuItem("Salir");
        pnlEast = new JPanel();
        pnlEastTop = new JPanel();
        pnlEastBottom = new JPanel();
        pnlGraphic = new Lienzo();
        toolBar = new JToolBar();
        btnEjecutar = new JButton("Ejecutar");
        btnGroup = new ButtonGroup();
        pnlEast.setLayout(new BoxLayout(pnlEast, BoxLayout.Y_AXIS));
        pnlEastTop.setLayout(new BoxLayout(pnlEastTop, BoxLayout.Y_AXIS));
        pnlEastBottom.setLayout(new BoxLayout(pnlEastBottom, BoxLayout.Y_AXIS));
        pnlEastBottom.setAlignmentX(Component.CENTER_ALIGNMENT);
        pnlEastTop.setAlignmentX(Component.CENTER_ALIGNMENT);
        menuBar.add(mnFile);
        mnFile.add(mniExit);
        pnlEast.add(pnlEastTop);
        pnlEast.add(pnlEastBottom);
        toolBar.add(btnEjecutar);
        toolBar.add(Box.createRigidArea(new Dimension(20, 0)));
        setJMenuBar(menuBar);
        this.add("North", toolBar);
        this.add("East", pnlEast);
        this.add("Center", pnlGraphic);
        mniExit.addActionListener(this);
        btnEjecutar.addActionListener(this);
        timer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                pnlGraphic.repaint();
            }
        });
       
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == mniExit) {
            System.exit(0);
        }
        if (e.getSource() == btnEjecutar) {
            timer.start();
        }
    }
}


Lienzo.java:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;

/**
 * @author Andcrea Dorado
 */
public class Lienzo extends JPanel {

    int fil, col;
    int[][] m = new int[100][100];
    int[][] mt = new int[100][100];

    public Lienzo() {
        fil = 35;
        col = 50;
        m[3][2] = m[3][3] = m[3][4] = m[3][5] = m[3][6] = m[3][7] = m[3][8] = m[3][9] = m[3][11] = m[3][12] = m[3][17] = m[3][18] = m[3][20] = m[3][21] = m[3][22] = m[3][23] = m[3][24] = m[3][25] = m[3][26] = m[3][27] = m[3][35] = m[3][37] = m[3][38] = m[3][39] = m[3][40] = m[3][45] = 1;
        m[4][2] = m[4][3] = m[4][4] = m[4][5] = m[4][6] = m[4][7] = m[4][8] = m[4][9] = m[4][11] = m[4][12] = m[4][17] = m[4][18] = m[4][20] = m[4][21] = m[4][22] = m[4][23] = m[4][24] = m[4][25] = m[4][26] = m[4][27] = m[4][34] = m[4][35] = m[4][37] = m[4][40] = m[4][44] = m[4][45] = 1;
        m[5][5] = m[5][6] = m[5][11]=  m[5][12]=  m[5][13]= m[5][17]=m[5][18]=m[5][20]=m[5][21]=m[5][33]=m[5][35]=m[5][37]=m[5][43]=m[5][45]=1;
        m[6][5]=m[6][6]=m[6][11]=m[6][12]=m[6][13]=m[6][14]=m[6][17]=m[6][18]=m[6][20]=m[6][21]=m[6][22]=m[6][23]=m[6][32]=m[6][35]=m[6][37]=m[6][38]=m[6][39]=m[6][40]=m[6][42]=m[6][43]=m[6][44]=m[6][45]=1;
        m[7][5]=m[7][6]=m[7][11]=m[7][12]=m[7][14]=m[7][15]=m[7][17]=m[7][18]=m[7][20]=m[7][21]=m[7][22]=m[7][23]=m[7][27]=m[7][28]=m[7][29]=m[7][30]=m[7][35]=m[7][40]=m[7][45]=1;
        m[8][5]=m[8][6]=m[8][11]=m[8][12]=m[8][15]=m[8][16]=m[8][17]=m[8][18]=m[8][20]=m[8][21]=m[8][27]=m[8][28]=m[8][29]=m[8][30]=m[8][35]=m[8][40]=m[8][45]=1;
        m[9][2]=m[9][3]=m[9][4]=m[9][5]=m[9][6]=m[9][7]=m[9][8]=m[9][9]=m[9][11]=m[9][12]=m[9][16]=m[9][17]=m[9][18]=m[9][20]=m[9][21]=m[9][35]=m[9][37]=m[9][40]=m[9][45]=1;
        m[10][2]=m[10][3]=m[10][4]=m[10][5]=m[10][6]=m[10][7]=m[10][8]=m[10][9]=m[10][11]=m[10][12]=m[10][17]=m[10][18]=m[10][20]=m[10][21]=m[10][35]=m[10][37]=m[10][38]=m[10][39]=m[10][40]=m[10][45]=1;
        m[20][2]=m[20][3]=m[21][2]=m[21][3]=1;
        m[20][7]=m[21][7]=m[22][7]=m[19][8]=m[18][9]=m[18][10]=m[23][8]=m[24][9]=m[24][10]=1;
        m[21][11]=m[19][12]=m[20][13]=m[21][13]=m[22][13]=m[21][14]=m[23][12]=1;
       
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        int mi = 0;
        int mj = 0;

        Color colorActual = new Color(0, 0, 255);
        for (int j = 1; j < this.getHeight(); j += this.getHeight() / fil) {

            for (int i = 1; i < this.getWidth(); i += this.getWidth() / col) {
                if (m[mj][mi] == 1) {
                    g.setColor(colorActual);
                    g.fillRect(i, j, this.getWidth() / col, this.getHeight() / fil);
                }
                mi++;
            }
            mj++;
            mi = 0;
        }
        this.drawLine(g2d, Color.black);
        this.procesar();
    }

    public void drawLine(Graphics2D g2d, Color color) {
        g2d.setColor(color);
        for (int i = 0; i < getWidth(); i += this.getWidth() / 50) {
            g2d.drawLine(i, 0, i, getHeight());
        }
        for (int i = 0; i < getHeight(); i += this.getHeight() / 35) {
            g2d.drawLine(0, i, getWidth(), i);
        }
    }

    public void procesar() {
        for (int i = 1; i < fil - 1; i++) {
            for (int j = 1; j < col - 1; j++) {
                int sum = m[i - 1][j - 1] + m[i][j - 1] + m[i + 1][j - 1] + m[i + 1][j] + m[i + 1][j + 1] + m[i][j + 1] + m[i - 1][j + 1] + m[i - 1][j];
                if (sum == 3) {
                    mt[i][j] = 1;
                } else if (sum != 2) {
                    mt[i][j] = 0;
                }
            }
        }
        this.copiaMatriz();
    }

    public void copiaMatriz() {
        for (int i = 1; i < fil - 1; i++) {
            for (int j = 1; j < col - 1; j++) {
                m[i][j] = mt[i][j];
            }
        }
    }
}


Si te gustó esta publicación no olvides compartirlo. Espero sus comentarios.



Administración de Procesos en Linux

GNU/Linux nos brinda un set de programas para realizar el monitoreo de los procesos en el sistema operativo que todo usuario con un poco de conocimiento sobre administración deberia conocer.

ps

El comando "ps" muestra información de los procesos activos en el sistema. Por defecto solo selecciona los procesos asociados a una terminal y a un usuario (quien ejecutó ps).
Algunos de los atributos que se muestran son:

  • PID - Identificador del proceso.
  • PPID - Identificador del proceso padre.
  • UID - Identificador del usuario propietario del proceso.
  • TTY - Terminal asociada al proceso, si no hay terminal aparece entonces un '?'.
  • TIME - Tiempo de uso de CPU acumulado por el proceso.
  • CMD - El nombre del programa asociado al proceso.
  • RSS - Espacio de memoria real del proceso [KB].
  • SIZE - Espacio de memoria virtual de la imagen del proceso.
  • NI - Nice, Prioridad del proceso.
  • %CPU - Porcentaje de CPU utilizado por el proceso.
  • STIME - Hora de inicio del proceso.
  • STAT - Estado del proceso (R Ejecutándose, S En espera, T Detenido, Z Zombie, X Muerto).

Para poder ver todos los procesos en el sistema use los siguientes parámetros:

Usando la sintaxis estándar:

  • -e. Selecciona todos los procesos, equivalente a usar -A
  • -f. Lista en formato completo.

$ ps -e
$ ps -ef

Usando la sintaxis BSD:

  • a. Muestra los procesos ejecutados a traves de una terminal. Si se utiliza el parámetro x listará todos los procesos.
  • u. Muestra el listado de manera mas apropiada para el usuario.

$ ps ax
$ ps aux

Consulte el manual en linea de ps para mas detalles.

$ man ps

Si te gustó esta publicación no olvides compartirlo. Espero sus comentarios.



Programación de Procesos en GNU/Linux

Procesos

Un proceso en términos generales es un programa en ejecución, una instancia de programa que tiene asociado un conjunto de recursos como registros internos del procesador, un espacio
en memoria con segmentos de dato, código y pila.

Estado de un Proceso

Un proceso en el transcurso de su ejecución cambia de un estado a otro. Los diferentes estados posibles son:
  • Ejecución. El proceso es ejecutado por el procesador.
  • Listo. El proceso está en espera de ser seleccionado para ejecutarse.
  • Suspendido. El proceso está en espera de un recurso.
  • Parado. El proceso ha sido suspendido por una intervención externa.
  • Zombi. El proceso ha terminado su ejecución pero sigue siendo referenciado en el sistema.
El proceso se caracteriza por tener varios atributos mantenidos por el sistema:

  • Estado
  • Identificador, número único (PID)
  • Valor de los registros del procesador.
  • Identificador de usuario
  • Prioridad
  • Información de contabilidad
  • Otros.


Programar Procesos con Fork

Un proceso puede crear procesos hijo utilizando la llamada al sistema fork. El proceso actual se duplica y crea una copia idéntica con excepción de su identificador (PID). Fork retorna el PID del proceso hijo al padre y cero al proceso hijo. Es necesario conocer este valor de retorno para distinguir el código que ejecutará el proceso padre y el que ejecutará el proceso hijo. En caso de fallo, fork devuelve -1 por dos posibles razones:

  • Se ha llegado al número máximo de procesos de usuario o de sistema.
  • El kernel no ha podido asignar suficiente memoria para crear un nuevo proceso.


Para utilizar la llamada al sistema fork es necesario incluir la cabecera unistd.h

Ejemplo:

#include <errno.h>
#include <stdio.h>
#include <unistd.h>

void main() {

    pid_t pid;
    pid = fork();

    if(pid != -1) {
        if(pid == 0) {
            /*Instrucciones para el proceso Hijo*/
            printf("Hijo: pid = %d\n", pid);
        }
        else {
            /*Instrucciones para el proceso Padre*/
            printf("Padre: pidHijo = %d\n",pid);
        }
    }
    else {
        /*Error. no se creo el proceso hijo*/
        perror("fork");
    }
}

El proceso actual termina automáticamente cuando deja de ejecutar la función main. Si desea que el proceso termine su ejecución en algún momento, utilice la llamada la sistema exit.

void _exit (int estado);

El parámetro estado especifica el código de retorno, entre 0 y 255, que recibe el proceso padre. Se debe retornar 0 si finalizó de manera normal y otro valor si hubo algún error.

Espera de conclusión de procesos Hijo

El proceso padre puede esperar a que un proceso hijo finalice, mediante wait y waitpid.

La primitiva wait suspende la ejecución del proceso actual hasta que acabe algún proceso hijo. Si un proceso hijo ha terminado, wait devuelve el resultado inmediatamente.

pid_t wait (int *estadoProceso);

Ejemplo:

#include <stdio.h>
#include <unistd.h>

void main() {

    int estadoProceso;
    pid_t pid = fork();

    if(pid == 0) {
        printf("Proceso hijo, pid = %d\n", pid);
    }
    else {
        wait(&estadoProceso);
        printf("Proceso padre, pid hijo = %d\n", pid);
    }
}

La primitiva waitpid suspende la ejecución del proceso actual hasta que un proceso hijo específico termine.

pid_t waitpid (pid_t pid, int *estadoProceso, int opciones);

Ejemplo

#include <stdio.h>
#include <unistd.h>

void main() {

    pid_t pid1, pid2;
    int estadoProc1, estadoProc2;

    pid1 = fork();
    if (pid1 == 0) {
        printf("Proceso hijo 1 ejecutandose\n");
    }
    else {
        pid2 = fork();
        if(pid2 == 0) {
            printf("Proceso hijo 2 ejecutandose\n");
        }
        else {
            waitpid(pid1, &estadoProc1, 0);
            printf("Fin del proceso 1\n");
            waitpid(pid2, &estadoProc2, 0);
            printf("Fin del proceso 2\n");
            printf("Proceso padre: pidHijo1 = %d, pidHijo2 = %d\n", pid1, pid2);
        }
    }
}

Lectura y Modificación de atributos

El kernel Linux nos permite obtener y modificar los atributos de los procesos, entre estas llamadas al sistema están:

  • pid_t get pid() Retorna el identificador único del proceso actual
  • pid_t get ppid() Retorna el identificador único del proceso padre
  • uid_t get uid() Retorna el identificador del usuario que ejecutó el proceso
  • int setuid(uid_t uid) Modifica el identificador de usuario


Para que la llamada setuid() cambie efectivamente el identificador de usuario, el proceso debe ejecutarse
como superusuario.

Si te gustó esta publicación no olvides compartirlo. Espero sus comentarios.



Llamadas al Sistema en Linux

Un proceso se ejecuta normalmente en modo usuario, cuando éste necesita algún recurso debe utilizar llamadas al sistema. En GNU/Linux, estas funciones tienen un nombre y número único de identificación. Este número puede encontrarse en la dirección /usr/include/asm/unistd.h.

Fragmento del archivo unistd_32.h:

#define __NR_restart_syscall      0
#define __NR_exit  1
#define __NR_fork  2
#define __NR_read  3
#define __NR_write  4
#define __NR_open  5
#define __NR_close  6
#define __NR_waitpid  7
#define __NR_creat  8
#define __NR_link  9
#define __NR_unlink 10

Cuando un proceso ejecuta una llamada al sistema, llama a la función correspondiente de la biblioteca C. Esta función trata los parámetros y pasa al núcleo.

El número de llamadas al sistema puede variar un poco en relación a la versión del kernel o a la distribución (Debian, red Hat, Slackware, etc), pero oscilan sobre las 300 llamadas.

Si te gustó esta publicación no olvides compartirlo. Espero sus comentarios.



Utilizar Gcc (GNU C Compiler) en Linux

El GNU/Linux está desarrollado en C, un lenguaje de programación de Alto nivel, por esta razón es necesario disponer de un compilador apropiado para que nuestros programas puedan ser ejecutados bajo este sistema operativo.

El compilador gcc (GNU C Compiler) nos permite entre otras cosas generar archivos ejecutables, se caracteriza por ser potente, rápido, realiza optimización y tiene soporte para todos los estándares de programación en C.

Gcc permite encadenar las diferentes fases de compilación de un programa:

  • Preprocesador. En nuestro código se incluyen los archivos de cabecera utilizados. Programas cpp, gcc -M
  • Compilación. Se hace la compilación efectiva del código generando instrucciones en ensamblador y optimizándolo. Programas ccl, gcc -S
  • Ensamblado. El código se ensambla y genera un archivo objeto asociado. Programa gcc -c
  • Enlazado. Se genera el archivo ejecutable del programa, reuniendo todos los archivos objeto y enlazándolos. Programa ld

Si se quiere usar gcc para compilar algún programa, basta escribir en una terminal:

$ gcc nombrePrograma.c

Como resultado tendrá un ejecutable con el nombre a.out por defecto. Para especificar un nombre en particular utilice el parámetro -o:

$ gcc -o nombrePrograma.c nombreEjecutable

Para ejecutar el programa anteponga ./ al nombre del ejecutable:

$ ./a.out

o

$ ./nombreEjecutable

según corresponda.


Si te gustó esta publicación no olvides compartirlo. Espero sus comentarios.



Apuntes del Kernel Linux

POSIX (Portable Operating System Interface)

Documentos producidos por el IEEE y estandarizados por ANSI e ISO. El objetivo de POSIX es permitir tener un código fuente transportable.

Para un desarrollador el compilador el enlazador y el depurados son vitales. El compilador le indica si hay errores de sintaxis en su código y el enlazador resuelve los diferentes símbolos. El depurador permite ejecutar paso a paso la aplicación deseada.

GCC

Permite encadenar las diferentes fases de la compilación de un programa. Se trata de un lanzador de programas que ejecuta las diferentes etapas (preprocesador, compilación, ensamblado y enlazado) transmitiendo a los programas las pociones proporcionadas por el programador.

Parámetros:
-M parada tras la etapa de preprocesador
-S parada tras la generación de codigo ensamblador.
-c parada tras la generación del codigo objeto
-g inserción de los simbolos para la depuración


Archivos de Cabecera

/usr/include definen la interfaz de las bibliotecas utilizadas por los programas que se compilan.
/usr/src/kernel/include
|_ linux Declaraciones independientes de la arquitectura
|_ asm   Declaraciones dependientes de la arquitectura (asm-i386)

GDB

Depurador, para poder depurar un programa, es necesario que este ultimo se haya compilado con la opción -g, ya que el depurador requiere ciertas informaciones sobre el programa que no se incluyen en una compilación normal.

Strace

Permite seguir las llamadas al sistema ejecutadas por un programa. indica las primitivas llamadas, así como sus patrones (traduciendo ciertos valores por constantes simbólicas) y el código de retorno que devuelven.

Make

Herramienta estandard que permite efectuar la compilación inteligente de programas, en función de los archivos modificador que necesitan realmente ser recompilados.

ELF (Executable and Linking Format)

Formato binario para linux, permite generar tres tipos de archivo:

  • Archivo relocalizable (archivo objeto)
  • Archivo ejecutable
  • Archivo compartido (bibliotecas)


$ file <binario>

Biblioteca

Constituye la manera simple de agrupar varios archivos objetos, estas pueden ser

  • Estáticas. En el enlazado, el código de la biblioteca se integra al ejecutable.
  • Dinámicas. el código de la biblioteca se carga en la ejecución del programa. Las bibliotecas dinámicas economizan el espacio en disco y memoria, pues una biblioteca dinámica se carga una sola vez y el código puede ser compartido con  todas las demás aplicaciones que la necesiten. Cuando una biblioteca dinámica se actualiza, no es necesario recompilar las aplicaciones que la utilizan.


LDD

Permite conocer la lista de bibliotecas enlazadas con una aplicación.

$ ldd <binario>

Núcleo Linux.
El código fuente se organiza de manera jerárquica en subdirectorios con ciertas funcionalidades del núcleo:

  • include. Archivos de cabecera necesarios para la generación del núcleo
  • fs. Sistema de archivos
  • init. main.c de Linux
  • ipc. Gestión de comunicación interprocesos
  • mm. Gestión de memoria
  • kernel. Principales llamadas al sistema
  • lib. Módulos diversos.
  • drivers. Controladores de dispositivos
  • net. Protocolos de red
  • arch. Código dependiente de la plataforma
  • script. Scripts utilizados para la configuración y para la generación de las dependencias del núcleo.


Llamadas al sistema. 

Se caracterizan por un nombre y un numero único de identificación. Este numero puede encontrarse en el archivo /usr/include/asm/unistd.h

El número de argumentos están entre 0 y 5

Procesos

Estado de un proceso

  • En ejecución. el proceso es ejecutado por el procesador.
  • A punto (listo). El proceso podría ser ejecutado pero otro proceso se esta ejecutando en ese momento.
  • Suspendido. El proceso está en espera de un recurso.
  • Parado. El proceso ha sido suspendido por una intervención externa.
  • Zombi. El proceso ha terminado su ejecución pero sigue siendo referenciado en el sistema


Atributos de un proceso

  • Estado
  • Identificador de usuario y grupo.
  • Valor de los registros, incluyendo el contador ordinal
  • La identidad del usuario bajo cuyo nombre se ejecuta.
  • La información utilizada por el núcleo para proceder al ordenamiento de los procesos (prioridad)
  • La información respecto al espacio de direccionamiento del proceso (segmentos de código, de datos y de pila)
  • La información respecto a las entradas/salidas efectuadas por el proceso (descriptores de archivos abiertos, directorio actual, ...)
  • Información de contabilidad que resumen los recursos utilizados por el proceso.


Creación de un proceso. 

La creación de un proceso se efectúa duplicando el proceso actual, la llamada al sistema fork permite a un proceso crear una copia conforme a si mismo, exceptuando el identificador de proceso.

Pstree 

Muestra una jerarquía típica de procesos.
-a Visualiza los argumentos en linea de comandos

Tabla de Procesos

Descriptor del Proceso

Cada proceso se referencia por un descriptor. Este descriptor contiene los atributos del proceso, así como la información que permiten gestionar el proceso. Están definidas en el archivo <linux/sched.h>

Los descriptores de procesos se organizan en forma de una lista doblemente encadenada, por los campos next_task y prev_task. Los descriptores de los procesos listos para ejecutarse se colocan en otra lista doblemente encadenada, mediante los campos next_run y prev_run

Registros del Procesador

El contexto de un proceso incluye los registros del procesador, en un cambio de contexto, estos registros son guardados en memoria por el nucleo. El archivo de cabecera <asm/ptrace.h> contiene los campos para la arquitectura x86.


Si te gustó esta publicación no olvides compartirlo. Espero sus comentarios.



Preguntas y Respuestas: Ley 1178 - Ley de Administración y Control Gubernamental I

El Sistema que contribuye de manera directa a los objetivos de una institución, es

a. El Sistema de Control Gubernamental.
b. El Sistema Operativo.
c. El Sistema Administrativo.

La respuesta correcta es :
El Sistema Operativo.


El Órgano Rector del Sistema de Control Gubernamental, es

a. La Contraloría General del Estado.
b. El Ministerio de Planificación del Desarrollo.
c. La Procuraduría General del Estado.

La respuesta correcta es:
La Contraloría General del Estado.



La Ley 1178, fue promulgada el

a. El 20 de junio de 1990.
b. El 20 de julio de 2000.
c. 20 de julio de 1990.

La respuesta correcta es:
20 de julio de 1990.


La institución que defiende la legalidad y los intereses generales de la sociedad, es

a. La Defensoría del Pueblo.
b. El Ministerio Público.
c. La Procuraduría General del Estado.

La respuesta correcta es:
El Ministerio Público.


El Órgano Rector de los Sistemas de Planificación e Inversión Pública, es

a. El Ministerio de Planificación del Des arrollo.
b. La Contraloría General del Estado.
c. El Ministerio de Economía y Finanzas Públicas.

La respues ta correcta es :
El Ministerio de Planificación del Desarrollo.


El Sistema de Tesorería y Crédito Público, es un sistema para

a. Controlar gestión pública.
b. Programar y Organizar Actividades.
c. Ejecutar las actividades programadas y organizadas.

La respuesta correcta es:
Ejecutar las actividades programadas y organizadas.


Uno de los objetivos de la Ley 1178, es

a. Lograr la administración eficaz y eficiente de los recursos públicos.
b. Identificar y sancionar a los s ervidores públicos corruptos.
c. Aplicar sanciones penales a las Máxim as Autoridades Ejecutivas.

La respuesta correcta es :
Lograr la administración eficaz y eficiente de los recursos públicos.


Una de las organizaciones de Defensa de la Sociedad, según la Constitución Política del Estado, es la Procuraduría General del Estado.

Verdadero
Falso

La respuesta correcta es 'Falso'


Una de las atribuciones de los Órganos Rectores es la de compatibilizar los Reglamentos Específicos que debe elaborar cada entidad.

Verdadero
Falso

La respuesta correcta es 'Verdadero'


Una de las características de los sistemas se refiere a Conjunto y dice: Los sistemas siempre tienen dos o más subsistemas.

Verdadero
Falso

La respuesta correcta es 'Verdadero'

Si te gustó esta publicación no olvides compartirlo. Espero sus comentarios.



Preguntas y respuestas: Ley 1178 - Ley de Administración y Control Gubernamental II

El Órgano Rector del Sistema de Tesorería y Crédito Público, es

a. El Ministerio de Economía y Finanzas Públicas .
b. El Ministerio de Planificación del Desarrollo.
c. El Tesoro General de la Nación (TGN)

La respuesta correcta es :
El Ministerio de Economía y Finanzas Públicas.

El Órgano Rector del Sistema Nacional de Planificación, es

a. La Contraloría General del Estado.
b. El Ministerio de Planificación del Desarrollo.
c. El Ministerio de Economía y Finanzas Públicas .

La respuesta correcta es :
El Ministerio de Planificación del Desarrollo.


Uno de los Sistemas que la Ley 1178, establece es para Ejecutar, es

a. El Sistema de Organización Administrativa.
b. El Sistema de Programación de Operaciones .
c. El Sistema de Administración de Bienes y Servicios .

La respuesta correcta es :
El Sistema de Administración de Bienes y Servicios.


Una de las organizaciones de Defensa de la Sociedad, según la Constitución Política del Estado, es la Contraloría General del Estado.

Verdadero
Falso

La respuesta correcta es 'Falso'


La responsabilidad por la implantación de los Sistemas de Administración y Control Gubernamentales en las entidades públicas , es

a. La Máxima Autoridad Ejecutiva.
b. Del Ministerio de Economía y Finanzas Públicas como Órgano Rector.
c. De la Contraloría General del Estado.

La respuesta correcta es :
La Máxima Autoridad Ejecutiva.


El Órgano Rector de los Sistemas Nacionales de Planificación e Inversión Pública, es

a. La Contraloría General del Estado.
b. El Ministerio de Economía y Finanzas Públicas .
c. El Ministerio de Planificación del Desarrollo.

La respuesta correcta es :
El Ministerio de Planificación del Desarrollo.


El Sistema Nacional de Planificación (SISPLAN), de acuerdo a la CPE, será reemplazado por

a. El Sistema de Planificación Integral del Estado.
b. El Sistema de Presupuesto.
c. El Sistema de Programación de Operaciones.

La respuesta correcta es :
El Sistema de Planificación Integral del Estado.


Una de las atribuciones básicas de los Órganos Rectores, es

a. Sancionar penalmente a las entidades infractoras la Ley 1178.
b. Vigilar el funcionamiento adecuado de e integrar la información que generan los mismos.
c. Asignar premios , mediante asignaciones presupuestarias adicionales.

La respuesta correcta es :
Vigilar el funcionamiento adecuado de los sistemas e integrar la información que generan los mismos.


Las Organizaciones que ejercen la función de defensa de la sociedad, son

a. La Defensoría del Pueblo y el Ministerio Público.
b. La Contraloría General del Estado y el Ministerio de Economía y Finanzas Públicas .
c. La Contraloría General del Estado y la Procuraduría General del Estado.

La respuesta correcta es :
La Defensoría del Pueblo y el Ministerio Público.


Toda persona, funcionario o entidad que recaude,, reciba, pague, o custodie fondos, valores o bienes del Estado, tiene la obligación de rendir cuentas por intermedio del Sistema de

a. Contabilidad Integrada.
b. Control Gubernamental.
c. Administración de Personal.

La respuesta correcta es:
Contabilidad Integrada.



Si te gustó esta publicación no olvides compartirlo. Espero sus comentarios.



martes, 4 de febrero de 2014

Resumen: El pintor en el burdel - La civilización del Espectáculo

En este capítulo podemos ver como así como existen pinturas sobre la naturaleza, nuestros pensamientos también existen pinturas que reflejan el sexo, en este capítulo podemos ver que se menciona mucho el trabajo del artista Picasso ya que varias de sus obras expresan dicho contexto como el autor opina y dice que se podría decir que  en todas sus obras desde que era adolecente el expresaba esto.

Lebel fue uno de los expositores que se atrevió a organizar una exposición de Picasso con 30 de sus obras para mostrar esta hipótesis y obtuvo su objetivo ya que mostró hasta pinturas nunca antes expuestas.

Lo interesante de las pinturas de Picasso es la elegancia con la que son expresadas ya que en estos tiempos las pinturas que se muestran generalmente ya son vulgares vacíos y sin sentido  o sea sin una esencia.


Si te gustó esta publicación no olvides compartirlo. Espero sus comentarios.



Resumen: La desaparición del Erotismo - La civilización del Espectáculo

Al transcurrir el tiempo  así como a la literatura y a la cultura también fue cambiando de gran manera  otros aspectos de nuestro modo de vivir como en este ensayo lo afirma, en este caso se habla del sexo que se practica actual mente que maso menos se ve reflejado como un arte en años pasados claro que no desde el principio de los tiempos pero para muchos autores desde su punto de vista el erotismo es una forma de evolución del ser humano ya que en realidad es un arte por que influye y conecta a la parte mas hermosa de un ser humano que es conectar sus deseos con sus sentimientos de forma que esta práctica no sea solo no sea solo por instinto.



Pero ahora así como esta práctica en un arte así también podemos observar que ti ene muchos inconvenientes ya que no todas las personas practican esto por amor si no solamente por el hecho del placer que causa si conciencia en las consecuencias que dicha práctica puede tener al menos  en los adolescentes.

Con el tiempo en el desarrollo de la humanidad se pensó que se deberían frenar los embarazos no deseados que se tenían como consecuencia de la práctica mas que todo de los adolescentes ya que como todos sabemos un  nuevo ser  es una enorme responsabilidad entonces lo que se pensó fue en la masturbación para que estos estudiantes del colegio practique esto en vez de tener relaciones de pareja , bueno el objetivo de esta nueva enseñanza era ese pero lo malo es que también esto nos lleva a tantas interrogantes y también la pregunta más fuerte será que si en verdad estamos evolucionando con el hecho de enseñar esto en los colegios o más bien al contrario.

Ya que en realidad el hablar de la sexualidad hasta el punto de meterse en la intimidad del ser humano y mostrarle que eso es tan normal como entrar al baño le quita la esencia de lo que en realidad es.
El punto es que con el tiempo si se frenarían los embarazos que es un buen ´punto para nosotros pero lo malo es el hecho de que le quita la esencia de lo que significa la práctica del sexo, o sea el erotismo ya que se volvería vacío y sin sentido de amor.

Si te gustó esta publicación no olvides compartirlo. Espero sus comentarios.



Resumen: La civilización del Espectáculo

En la civilización del espectáculo se analiza como el propio título lo dice el gran espectáculo tan envolvente que hace que la cultura de nuestros tiempos sean tan superficial  tan vacía antiguamente la cultura se basaba en las religiones en su mayoría de raíces católicas  pero ahora esta se fue subdividiendo provocando que cada subgrupo de personas lleguen a crear sectas logrando llegar a satisfacer el hecho de pertenecer a una religión tan solo por sentirse  protegidos sin necesidad de tener ninguna clase de culpas por las acciones que pudiesen llegar a tomas  ya que la cultura de hoy es mas envolvente por las imágenes que tomaron un lugar importante en  cuanto a las culturas,por que podemos ver como las personas llegamos a apreciar y a confiar mas en una persona  que tiene una mejor apariencia dejando de lado la intelectualidad de la misma  nos conformamos con que la persona sepa ser sociable tenga una buena apariencia sin sentir la necesidad de saber cuan intelectual es dicha persona nos dejamos llevar mas por los colores que nos llegan a mostrar en cuanto a presencia e imagen.



En cuanto a la cultura ya es tomada mas como un estilo de vida que debe ser cómodo donde las sensaciones que vivimos son mas importantes , donde ya se transgibersó el hecho de ver la cultura como un conjunto de costumbres y se tornó en un conjunto de sensaciones placenteras que hacen que cada persona huya de su realidad.

Hasta el hecho de consumir drogas es ahora un escape casi normal para una gran mayoría de personas y si no es alguna droga la que hace que las personas escapen de su realidad entonces buscan otros escapes como la televisión, los videojuegos, etc.

Hasta las relaciones de pareja ya no son mas algo confidencial ni algo sagrado, una gran mayoría opta por tener relaciones sexuales sin amor llevando a que las personas lo tomen como algo si mucho sentido, tornándolo como una práctica vacía si amor y convirtiendo este acto en algo común y corriente como el consumo de alguna droga.

También tenemos que ver como los mismos deportes que no tenían mucha importancia se convirtieron igual en un escape para poder canalizar los momentos de rabia y las acciones agresivas que tenemos como seres humanos y así poder llevar todo a una tremenda emoción y así poder escapar de la realidad de manera fácil si la necesidad de pensar en nuestros problemas.

Equívocamente tratamos de facilitarnos la vida pero se puede observar que lo único que logramos es crearnos ilusiones falsas vacías, que al final no resuelven  ningún problema de la vida real pero como el mismo autor dice aún el la multitudinaria masa de personas que se envuelven con esta clase de culturas también existe un pequeño porcentaje que aún lleva la esencia de intelectualidad aún que no sea la gran mayoría así que no podemos generalizar a todos.


Si te gustó esta publicación no olvides compartirlo. Espero sus comentarios.



Resumen: Metamorfosis de una palabra - La civilización del Espectáculo

En esta primera etapa del ensayo se exponen las teorías más resaltantes de algunos escritores que exponen sus puntos de vista sobre la cultura y los aspectos que influyen en ella.


Por ejemplo se toma en cuenta el ensayo de T.S. Eliot que da un concepto muy interesante desde su punto de vista de lo que realmente influye a la cultura y también de lo que difiere del conocimiento pero también se puede observar como cambia la cultura o en realidad se analiza como la cultura toma otros rumbos y cambia de  forma total y radical desde esos tiempos hasta nuestros tiempos T.S. Eliot expone que la cultura tiene dos pilares fundamentales el más fuerte es el de la familia, ya que la influencia de las costumbres y el entorno familiar que lo rodea va formando las actitudes de una persona, el segundo pilar importante para la cultura es la religión según Eliot por q aquí es donde realmente una persona forma sus límites depende a la religión que elija. Ya que una religión tiene el propósito de decir que es lo bueno y que lo malo.

En el tiempo de la primera y la segunda guerra mundial se puede observar como la religión manipulaba de manera esclavizadora a las personas con la inquisición y también se ve como trataron de llevar la idea de un solo Dios omnipotente  , todo poderoso para tratar de que las personas no lleguen a un desorden total de tener diferentes dioses basados en hechos bíblicos.

Pero esta cultura se fue destruyendo al contrario de permanecer con el tiempo ya que el objetivo de esta cultura era de permanecer con el tiempo dando paso a una nueva versión de cultura. Por esta razón hubo otras personas que refutaron la idea de T.S. Eliot llevando a discusiones muy interesantes como por ejemplo el hecho de que la cultura ya no tiene estos dos pilares fundamentales si no que la cultura tiene si dos pilares pero uno es totalmente distinto al de la religión quedando solo el pilar de la familia y el de la moda que vivimos en estos tiempos ya que somos muy influidos por la televisión la tecnología envolviéndonos de manera que quita la voluntad y nos arrebata del libre albedrío ya que la moda es algo muy envolvente, por ejemplo las personas ya no quieren ni vivir su propia realidad ya que la televisión o los artistas son lo que la persona desearía ver entonces muchas personas solo se encierran en un mundo irreal como las series o las películas o hasta en los cantantes y personajes famosos con tal de ya no luchar con sus propios problemas y decidir que es lo que realmente le gustaría conquistar o construir u obtener, otro punto muy importante el el hecho de que esta clase de cultura tiene un enfoque mas en el presente no es futurista solo  piensa en brillar por momentos y no como la cultura antigua que pensaba en nunca desaparecer. En cambio esta cultura solo piensa en el momento y luego desaparece pero viene otra moda que vuelve a envolver a la mayoría de las personas.


Si te gustó esta publicación no olvides compartirlo. Espero sus comentarios.