martes, 30 de agosto de 2011

Tecnologias de Procesadores

El procesador (CPU, por Central Processing Unit o Unidad Central de Procesamiento), es por decirlo de alguna manera, el cerebro del ordenador. Permite el procesamiento de información numérica, es decir, información ingresada en formato binario, así como la ejecución de instrucciones almacenadas en la memoria.
El primer procesador comercial, el Intel 4004, fue presentado el 15 de noviembre de 1971. Los diseñadores fueron Ted Hoff y Federico Faggin de Intel, y Masatoshi Shima de Busicom (más tarde ZiLOG), era un dispositivo de cálculo de 4 bits, con una velocidad de 108 kHz. Desde entonces, la potencia de los microprocesadores ha aumentado de manera exponencial.
El procesador se compone de un grupo de unidades interrelacionadas (o unidades de control). Aunque la arquitectura del microprocesador varía considerablemente de un diseño a otro, los elementos principales del microprocesador son los siguientes:
Una unidad de control que vincula la información entrante para luego decodificarla y enviarla a la unidad de ejecución:La unidad de control se compone de los siguientes elementos:
secuenciador (o unidad lógica y de supervisión ), que sincroniza la ejecución de la instrucción con la velocidad de reloj. También envía señales de control:
contador ordinal, que contiene la dirección de la instrucción que se está ejecutando actualmente;
registro de instrucción, que contiene la instrucción siguiente.
Una unidad de ejecución (o unidad de procesamiento), que cumple las tareas que le asigna la unidad de instrucción. La unidad de ejecución se compone de los siguientes elementos:
la unidad aritmética lógica (se escribe ALU); sirve para la ejecución de cálculos aritméticos básicos y funciones lógicas (Y, O, O EXCLUSIVO, etc.);
la unidad de punto flotante (se escribe FPU), que ejecuta cálculos complejos parciales que la unidad aritmética lógica no puede realizar;
el registro de estado;
el registro acumulador.
Una unidad de administración del bus (o unidad de entrada-salida) que administra el flujo de información entrante y saliente, y que se encuentra interconectado con el sistema RAM;
Ilustración:
Tecnologias
La tecnología de proceso, se refiere a los materiales y técnicas utilizadas en la fabricación del circuito integrado, el encapsulado se refiere a cómo se integra un procesador con lo que lo rodea en un sistema funcional, que de alguna manera determina la velocidad total del sistema.
Aunque la tecnología de proceso y de encapsulado son vitales en la elaboración de procesadores más rápidos, es la arquitectura del procesador lo que hace la diferencia entre el rendimiento de una CPU (Control Process Unit) y otra.
Dependiendo de cómo el procesador almacena los operandos de las instrucciones de la CPU, existen tres tipos de juegos de instrucciones:
Juego de instrucciones para arquitecturas basadas en pilas.
Juego de instrucciones para arquitecturas basadas en acumulador.
Juego de instrucciones para arquitecturas basadas en registros. 
 
Tecnologia CISC
La arquitectura CISC (Complex Instruction Set Computer, Ordenador de Conjunto de Instrucciones Complejas) se refiere a la conexión permanente del procesador con las instrucciones complejas, difíciles de crear a partir de las instrucciones de base.
La arquitectura CISC es especialmente popular en procesadores de tipo 80x86. Este tipo de arquitectura tiene un costo elevado a causa de las funciones avanzadas impresas en la silicona.
Las instrucciones son de longitud diversa, y a veces requieren más de un ciclo de reloj. Dado que los procesadores basados en la arquitectura CISC sólo pueden procesar una instrucción a la vez, el tiempo de procesamiento es una función del tamaño de la instrucción.
Como por ejemplo:
Intel 8086, 8088, 80286, 80386, 80486.
Motorola 68000, 68010, 68020, 68030, 6840.
Tecnologia RISC
Los procesadores con tecnología RISC (Reduced Instruction Set Computer, Ordenador de Conjunto de Instrucciones Reducidas) no poseen funciones avanzadas conectadas en forma permanente.
Es por eso que los programas deben traducirse en instrucciones sencillas, lo cual complica el desarrollo o hace necesaria la utilización de un procesador más potente. Este tipo de arquitectura tiene un costo de producción reducido si se lo compara con los procesadores CISC. Además, las instrucciones de naturaleza sencilla se ejecutan en un sólo ciclo de reloj, lo cual acelera la ejecución del programa si se lo compara con los procesadores CISC. Para terminar, dichos procesadores pueden manejar múltiples instrucciones en forma simultánea, procesándolas en paralelo.Las ventajas de los procesadores RISC, especialmente las ligadas a los sistemas abiertos (UNIX), los hacen plataformas ideales para explorar los puntos fuertes de los sistemas multiprocesadores.
Procesamiento paralelo
Consiste en la tecnologia de ejecución simultánea de instrucciones desde el mismo programa pero en diferentes procesadores. Implica la división del programa en múltiples procesos manejados en paralelo a fin de reducir el tiempo de ejecución.
No obstante, este tipo de tecnología necesita sincronización y comunicación entre los diversos procesos, de manera similar a lo que puede llegar a ocurrir cuando se dividen las tareas en una empresa: se distribuye el trabajo en procesos discontinuos más pequeños que son manejados por diversos departamentos. El funcionamiento de una empresa puede verse afectado en gran medida si la comunicación entre los distintos servicios internos no funciona de manera correcta. 
 
Canalización
Se denomina canalización a la tecnología destinada a mejorar la velocidad de ejecución de instrucciones mediante la colocación de las diversas etapas en paralelo.A fin de comprender el mecanismo de canalización, es necesario primero comprender las etapas de ejecución de una instrucción. Las etapas de ejecución de una instrucción correspondientes a un procesador con canalización "clásica" de 5 pasos son las siguientes:
RECUPERACIÓN: recupera la instrucción de la caché;
DECODIFICACIÓN: decodifica la instrucción y busca operandos (valores de registro o inmediatos);
EJECUCIÓN: ejecuta la instrucción (por ejemplo, si se trata de una instrucción ADD, se realiza una suma, si es una instrucción SUB, se realiza una resta, etc.);
MEMORIA: accede a la memoria, y escribe o recupera información desde allí;
POST ESCRITURA (retirar): registra el valor calculado en un registro.
Las instrucciones se organizan en líneas en la memoria y se cargan una tras otra. 
 
Superscaling
La tecnología Superscaling consiste en ubicar múltiples unidades de procesamiento en paralelo con el fin de procesar múltiples instrucciones por ciclo.
HyperThreading
La tecnología HyperThreading (se escribe HT) consiste en ubicar dos procesadores lógicos junto con un procesador físico. El sistema reconoce así dos procesadores físicos y se comporta como un sistema multitareas, enviando de esta manera, dos subprocesos simultáneos denominados SMT (Simultaneous Multi Threading, Multiprocesamiento Simultáneo). Este "engaño", por decirlo de alguna manera, permite emplear mejor los recursos del procesador, garantizando el envío masivo de información al éste.
 
Tecnologia Multinúcleo
Un procesador multinúcleo es aquel que combina dos o más procesadores independientes en un solo paquete, a menudo un solo circuito integrado. Un dispositivo de doble núcleo contiene solamente dos microprocesadores independientes. En general, los microprocesadores multinúcleo permiten que un dispositivo computacional exhiba una cierta forma del paralelismo a nivel de thread (thread-level parallelism) (TLP) sin incluir múltiples microprocesadores en paquetes físicos separados. Esta forma de TLP se conoce a menudo como multiprocesamiento a nivel de chip (chip-level multiprocessing) o CMP.
Multiprocesamiento es un procesamiento simultáneo con dos o más procesadores en un computador, o dos o más computadores que están procesando juntos. Cuando se usa dos o más computadores, se unen con un canal de alta velocidad y comparten la carga de trabajo general entre ellos.
Ejemplo de algunas Tecnologías y Arquitecturas incorporadas en Procesadores Intel:
Front Side Bus (FSB)
El 'Front Side Bus', o su acrónimo FSB (traducido "Bus de la parte frontal"), es el término usado para referirse al bus de datos de la CPU. Este bus transmite toda la información que pasa desde la CPU a los demás dispositivos dentro del sistema, como la RAM, las tarjeta PCI, el disco duro, etc.
Overclock
Consiste en forzar el reloj, es decir, forzar la frecuencia de reloj de la CPU.
La práctica conocida como overclocking pretende alcanzar una mayor velocidad de reloj para un componente electrónico por encima de las especificaciones del fabricante.
La idea es conseguir un rendimiento más alto y superar las cotas actuales de rendimiento, aunque esto en ocasiones pueda suponer una pérdida de estabilidad o la rotura del componente.
Este aumento de velocidad produce un mayor gasto energético, y por tanto, una mayor producción de calor residual. El calor puede producir fallos en el funcionamiento del componente, y se debe combatir con diversos sistemas de refrigeración, entre ellos el mas recomendado es el de la refrigeración liquida.
Speedstep
La Tecnología Intel Speedstep mejorada permite que el sistema ajuste dinámicamente el voltaje y la frecuencia de núcleo del procesador, lo cual reduce el consumo de energía para disminuir la producción de calor y reducir el ruido, ya que los ventiladores no tienen que girar tan rápido.
HyperThreading
La tecnología HyperThreading es un diseño de Intel que permite al software ejecutar múltiples hilos (multi-threaded); es decir, procesar los hilos en paralelo con un único procesador, incrementando el uso de las unidades de ejecución del procesador.
Esta tecnología consistente en usar dos procesadores lógicos dentro de un único procesador físico, permite obtener una mejoría en el uso del procesador, ya que al simular dos procesadores puede aprovechar mejor los recursos del procesador y por lo tanto una mejora en la velocidad de las aplicaciones.
De todas formas, las aplicaciones que pretendan aprovechar la capacidad de la tecnología HyperThreading deben haber sido programadas para utilizar múltiples hilos de lo contrario no se conseguirá el paralelismo en la ejecución que se pretende.
Bit NX: NX significa No eXecute (no ejecutar).
Esta tecnología inicialmente desarrollada por AMD, se encarga de separar el area de memoria usada para albergar instrucciones del procesador de las usadas para almacenar datos. Para esto las zonas de memoria que albergan datos están marcadas por el llamado bit NX, que impide que las instrucciones del procesador no se almacenen en los segmentos de memoria reservados para datos.
Es una técnica utilizada para prevenir que cierto tipo de software malicioso tome el control de la máquina insertando su código en el área de almacenamiento de datos de otro programa y ejecute su propio código desde dentro de esta sección; esto se conoce como desbordamiento de búfer, y NX puede prevenirlo.

El bit NX se refiere específicamente al bit número 63 (al último bit, si el primer bit empieza en el 0, en enteros de 64 bits) en la entrada de la tabla de páginas de un procesador x86. Si este bit está marcado a 0, entonces el código puede ser ejecutado desde esa página; si está marcado a 1, el código no puede ser ejecutado desde esa página, y todo lo que ahí resida será considerado como datos.
Intel ha decidido llamarlo XD bit, que significa Execute Disable (ejecutar deshabilitado).A pesar de todo, recurre a una implementación bastante similar que el bit NX de AMD, por lo que se puede considerar que se trata de la misma tecnología.
Emulación por software
Previamente a que esta característica estuviera integrada dentro del hardware, varios sistemas operativos, como Windows XP, intentaron emularla mediante software.Un sistema operativo con la habilidad de emular las ventajas de un bit NX puede prevenir que las areas de memoria, como la pila (stack) y heap sean ejecutables, y puede prevenir que la memoria ejecutable sea escribible y por tanto vulnerable a ataques.Esto ayuda a impedir que ciertos exploits de desbordamiento de búfer tengan éxito,particularmente aquellos que inyectan y ejecutan código. Estos ataques se basan en que alguna parte de la memoria, normalmente la pila, es tanto escribible como ejecutable; y si no lo es, el ataque fracasa.

Arquitectura en pipeline
La arquitectura en pipeline consiste en ir transformando un flujo de datos en un
proceso comprendido por varias fases secuenciales, siendo la entrada de cada una la salida de la anterior. Esta arquitectura es muy común en el desarrollo de programas para el intérprete de
comandos, ya que se pueden concatenar comandos fácilmente con tuberías (pipe).

martes, 16 de agosto de 2011

Control de Señales y de Procesos en Linux

Control de Señales


Cuando una señal se envía a un proceso, que no esté preparado para recibirla, el proceso se mata.

SIGNAL(señal, &funcion)
int señal;
int (*función)(); función a realizar cuando se recibe una señal.
Esta llamada se utiliza para indicar que se está preparado para recibir algún tipo de señal y suministrar la dirección del procedimiento manejador de la señal.

Después del SIGNAL, si se recibe una señal por ejemplo SIGINT (pulsar la tecla DEL), se efectúa:
1) El estado del proceso se guarda en su propia pila.
2) Se ejecuta el manejador de la señal.

SIGRETURN (&contexto)
Es llamado por el manejador que atiende la señal cuando termina.
Recupera el estado del proceso interrumpido desde la pila y lo continúa.

Los tipos de señales son:

1 SIGHUP El modem ha detectado línea telefónica colgada
2 SIGINT Interrupción de teclado, la tecla DEL ha sido pulsada
3 SIGQUIT Señal Quit (desde el teclado CTRL \)
4 SIGILL Instrucción ilegal
5 SIGTRAP Traza de los traps (excepciones)
6 SIGABRT Abortar un programa
7 SIGBUS Error en el Bus
8 SIGFPE Excepción por rebosamiento de coma flotante
9 SIGKILL Matar un proceso
10 SIGUSR1 El usuario define la señal # 1
11 SIGSEGV Violación de segmentación
12 SIGUSR2 El usuario define la señal # 2
13 SIGPIPE Escritura en pipe sin lectores
14 SIGALRM Alarma
15 SIGTERM Software genera una señal de terminación
16 SIGSTKFLT Fallo en el stack
17 SIGCHLD Cambia el estado del hijo, terminado o bloqueado
18 SIGCONT Si está bloqueado continuar
19 SIGSTOP Señal de paro
20 SIGTSTP Paro del teclado
21 SIGTTIN Proceso en segundo plano quiere leer, lectura terminal
22 SIGTTOU Proceso en segundo plano quiere escribir, escritura terminal
23 SIGURG Condición urgente
24 SIGXCPU Excedido el límite de la CPU
25 SIGXFSZ Excedido el limite del tamaño de un fichero
26 SIGVTALRM Alarma del reloj virtual
27 SIGPROF Historial del reloj
28 SIGWINCH Cambia el tamaño de la ventana
29 SIGIO Ahora es posible la entrada salida
30 SIGPWR Fallo en la alimentación
31 SIGSYS Llamada al sistema erronea
32 SIGRTMIN Primera señal en tiempo real
33 SIGRTMAX Última señal en tiempo real

Después de recibir una señal, en principio es necesario volver a permitir recibir otra señal con otro SIGNAL, ya que si no, puede recibirse una señal y matar el proceso (acción por defecto), existe un parámetro para que se vuelva a cargar la función.
Existen dos funciones predefinidas que el usuario puede utilizar:

• SIG_IGN, para que las señales se ignoren (excepto SIGKILL).
• SIG_DFL, para ejecutar la acción por defecto de matar al proceso.

Ejemplo: Supongamos que lanzamos un comando en modo tanda: command &

Es indeseable que la señal DEL, del teclado pueda afectar a ese proceso, así, el Shell
después de ejecutar el FORK, pero antes del EXEC deberá hacer
• signal (SIGNIT, SIG_IGN);
• signal (SIGQUIT, SIG_IGN);

que inhiben las señales DEL, y QUIT (CTRL\).

SIGACTION (sig, *act, *oact)
Es una nueva versión de signal, examina, pone o modifica los atributos de una señal.
Sig es un entero que indica la señal.
*act es una estructura que contiene los atributos y manejador de la señal
*oact es la estructura que recibe los atributos antes de la llamada.

ALARM (segundos)
Esta llamada se utiliza para interrumpir un proceso al cabo de un cierto tiempo, su parámetro especifica el tiempo en segundos, después del cual el núcleo envía la señal SIGALRM al proceso.
Un proceso solo puede tener una alarma pendiente, para resetear una alarma, basta hacer una llamada de alarma con parámetro cero.

PAUSE (segundos)
Esta llamada le dice al S.O. que suspenda al proceso, hasta que se reciba una señal.

SIGPROCMASK(how, &set, &old)
Esta señal permite bloquear un conjunto de señales mediante una mascara de bits que le envía al núcleo del sistema.

SIGPENDING(SET)
Obtiene el conjunto de señales bloqueadas.

SIGSUSPEND(sigmask)
Permite a un proceso establecer atómicamente el mapa de bits de las señales bloqueadas y suspenderse a sí mismo.

Control de Procesos

En este tópico parece no haber mucho que decir; existe una serie de herramientas para administrar los procesos, algunas de las cuales se valen de señales para cumplir con su objetivo.

Algunos de estos procesos son:

pid = fork() - crea un proceso hijo idéntico al proceso padre.
pid = waitpid(pid, &statloc, opts) - espera a que un hijo determinado termine y coge su condición de salida.
s = wait(&status) - espera a que un proceso hijo termine y coge su condición de salida devuelve el pid del hijo que termina, llamada antigua.
s = execve (name, argv, envp) - sustituye la imagen en memoria de un proceso.
exit(status) - pone fin a la ejecución del proceso y devuelve  la condición de salida.
size = brk (addr) - fija el tamaño del segmento de datos a (addr).
pid = getpid() - devuelve el id del proceso solicitante.
pid = getpgrp() - devuelve el id de grupo de procesos del proceso solicitante.
pid = setsid() - crea una nueva sesión y asigna el pid del invocador como identificador del grupo de procesos.
s = ptrace(req, pid, addr, data) - controla un proceso para depurar.

FORK()
Crea un nuevo proceso, exactamente igual  al proceso  original, incluyendo los descriptores de ficheros, registros,  ambiente, etc.
Una vez ejecutado el FORK, padre, e hijo se están ejecutando  simultáneamente, en un principio las variables tienen los mismos  valores, después, cambios en uno no afectan al otro.
La llamada FORK devuelve un valor después de ejecutarse,  este valor es:
  •  cero -> en el proceso hijo 
  • pid (identificador del proceso hijo -> en el padre 
Mediante este valor los procesos pueden saber cual es el  padre y cual es el hijo.




WAITPID 
pid =  waitpid(pid, &statloc, opts) - espera a que un hijo determinado termine, devolviendo el pid del proceso que termina, y coge su condición de salida.

En mucho casos, el hijo creado por el FORK necesita lanzar  un proceso, distinto al del padre.
Ejemplo:
El Shell, lee un comando, lanza un proceso hijo, y debe esperar hasta que el proceso hijo ejecute el  comando, posteriormente lee un  nuevo comando cuando el hijo termina.
Para esperar a que el hijo termine, el padre debe ejecutar  WAITPID.
Si el parámetro pid vale -1, el padre espera por el primer hijo que termina El segundo parámetro statloc es la dirección de una variable  (estado de salida) que es escrita por el proceso hijo para  indicar terminación normal o anormal.

EXEC.
s = execve (name, argv, envp) - sustituye la imagen en memoria de un proceso.
name - nombre del fichero que contiene el programa a ejecutar.

argv - vector de argumentos.
envp - vector ambiente

En el caso del Shell, el proceso hijo debe ejecutar el comando, esto lo hace mediante la llamada EXEC, la cual hace que la imagen del hijo, sea reemplazada por el fichero que hay en el primer parámetro de EXEC.


Ejemplo: Shell simplificado con FORK, WAITPID y EXEC.

While (TRUE){ /* bucle indefinido */
        read_command (command, parámetro); /* lee comando */
       if ( fork() != 0){ /* lanza un proceso hijo */
              waitpid(-1,&status,0); /* el padre espera a que hijo acabe */
      }else{
              execve(command, parámetros, 0); /* ejecuta el comando */
     }
};

EXIT().
Esta llamada la deben utilizar lo procesos cuando terminan.
Devuelve al padre un valor de estatus (0 a 255), que se carga en el byte menos significativo de la variable estatus de WAITPID, un cero es terminación normal, otro valor es error.

BRK(adr)
Esta llamada cambia el tamaño del segmento de datos de un programa. El parámetro adr que indica el nuevo tamaño en bytes del segmento de datos. Devuelve el tamaño actual del segmento de datos.
La rutina sbrk, en la librería, también cambia el tamaño del segmento de datos, su parámetro indica el número de bytes que aumenta (positivo) o disminuye (negativo) el segmento de datos.

GETPID
Devuelve el identificador del proceso (pid) que lo ejecuta. En un Fork, al padre se le devuelve el pid del hijo, mientras que al hijo se le devuelve un cero, si el hijo quiere saber su pid, deberá efectuar un GETPID.

lunes, 15 de agosto de 2011

Llamadas al Sistema y Señales en Linux

Llamadas al Sistema [1]

Las llamadas al sistema son puntos de entrada al núcleo (kernel) de Linux. Éstas usualmente no son invocadas de forma directa, sino que se utilizan funciones wrapper de la librería del lenguaje C, glibc, para que estas hagan una serie de pasos necesarios para que la llamada sea exitosa [2]. Estos wrappers normalmente tienen el mismo nombre de la función original y el trabajo que hacen es mínimo la mayoría de las veces.
Cuando una llamada al sistema falla retorna un número de error negativo, pero la función de C retorna -1 y le asigna este número de error negado (positivo) a la variable errno (errno.h).
Aunque no es el caso común, algunas de las llamadas al sistema no tienen una función equivalente proveída por la librería de C, así que hay que llamarlas directamente mediante la función syscall [3] (sys/syscall.h).


Control de Señales [4]

Las señales son utilizadas para notificar a un proceso o hilo acerca de un evento dado y son comúnmente comparadas con las interrupciones de hardware, ya que cuando un proceso recibe una señal puede que se ejecute un manejador de señal, que es equivalente al sistema ejecutando un manejador de interrupcion tras recibir una.
Una señal puede originarse desde excepciones por hardware, llamadas al sistema, eventos gestionados por el núcleo (alarmas), etc.
Cada señal tiene un nombre único, una abreviacion que comienza por SIG (como SIGINT para la señal de interrupción) y un número de señal. Adicionalmente el sistema define cuatro posibles disposiciones o acciones a tomar cuando se recibe una señal :
  • Exit (salir): fuerza al proceso a terminar.
  • Core (núcleo): fuerza al proceso a terminar y a crear un archivo de núcleo (core file).
  • Stop (parar): para el proceso.
  • Ignore (ignorar): ignora la señal; no se toma ninguna acción.
Dentro de un proceso y sus hilos cada señal tiene el mismo manejador de señal, el cual puede ser cambiado a uno diferente del que la señal tiene por defecto (excepto por SIGKILL y SIGSTOP). Un proceso además puede capturar una señal y ejecutar una rutina de manejo de señal propia.
Aqui se puede observar la lista de señales utilizadas [5] .

Control de Procesos [6]

En este tópico parece no haber mucho que decir; existe una serie de herramientas para administrar los procesos, algunas de las cuales se valen de señales para cumplir con su objetivo.

KILL: es la función y llamada al sistema que envía una señal a un proceso determinado por parámetro. Su prototipado:


Ejemplo [7]




int kill(pid_t pid, int sig); 
pid < 0: se envía la señal sig al proceso identificado por pid 
pid = -1:se envía la señal sig a todos los procesos menos al primero (el programa init) 
pid < -1: se envía la señal sig al grupo de procesos identificado por el valor de -pid
Esta función ejemplifica parte del proceso que une los tres temas tratados anteriormente ya que se trata de una Llamada al Sistema con la que se controlan los procesos mediante una señal especificada (como pueden ser SIGSTOP, SIGCONT, SIGTERM; cada una con resultados diferentes).

lunes, 8 de agosto de 2011

Capítulo 1º de "Operating System Principles" de Hensen

"Este capítulo describe el propósito y trasfondo tecnológico de los sistemas operativos. Enfatiza las similitudes de todos los sistemas operativos y señala las ventajas de los sistemas de propósito específico sobre los de propósito general."

El propósito de un sistema operativo es repartir los recursos físicos de una instalación entre los usuarios de la manera mas eficiente posible. Para hacer esto posible, es ademas necesario que se haga a la máquina parecer mas confiable de lo que en realidad es desde el punto de vista de los programas que se ejecutan en ella, implementando lo que se llama una máquina virtual.

El trasfondo tecnológico de los sistemas operativos que se presenta en este texto consiste de maquinas altamente limitadas tanto en poder de procesamiento como en capacidad de almacenamiento; lo que obliga a que se diseñen instalaciones especializadas en ciertos tipos de tareas:
  • Programación por lotes: Es un tipo de sistema e el que los programas que los usuarios desean ejecutar en la máquina se agrupan en lotes para ser ejecutados uno tras otro, de forma que los resultados de todos solo se obtienen cuando el lote entero ha concluido su ejecución.
  • Sistemas de cola (spooling systems): El adelanto tecnológico que constituye el concepto de interrupción hace posible simular la ejecución de varios programas en un solo procesador al mismo tiempo dándole a cada programa un pequeño intervalo de tiempo para ejecutarse, tras el cual éste es interrumpido para darle paso al siguiente programa. Lo anterior es llamado multiprogramación. Normalmente en este tipo de sistema, los programas se ejecutaban ordenados mediante una estimación de tiempo de ejecución dada por el usuario.
  • Sistemas interactivos: Para que un programa pueda conversar directamente con un humano su tiempo de respuesta debe ser de pocos segundos, lo que puede lograrse solo si dicho programa le debe dar respuesta a peticiones triviales como en una aplicación de edición de texto. Este tipo de sistema no puede confiar en estimaciones de los usuarios para organizar la ejecución de los programas, por lo cual se automatiza este paso usando métodos como el round robin (que es el más simple de todos y le asigna a cada programa una porción de tiempo preestablecida).
Las similitudes entre los sistemas operativos deben tenerse mucho mas en cuenta que las diferencias, sobre todo a la hora de estudiarlos, ya que este conocimiento le permite a un diseñador adaptarse a las restricciones específicas del problema al que se esté enfrentando.

Creo que cabe decir que lo anterior es aún relevante en tiempos mas modernos, pero por razones distintas; los computadores han evolucionado hasta un punto en el que la mayoría del tiempo las limitaciones que impone el hardware no son tan severas como para que los sistemas de propósito especifico sean más relevantes que los de propósito general, como propone el autor.


domingo, 7 de agosto de 2011

Linux - Ubuntu

Ubuntu es una distribución GNU/Linux basada en Debían que ofrece un sistema operativo predominantemente enfocado a ordenadores de escritorio aunque también proporciona soporte para servidores.  Ubuntu concentra su objetivo en la facilidad de uso, la libertad de uso, los lanzamientos regulares (cada 6 meses) y la facilidad en la instalación.
Ubuntu está patrocinado por Canonical, una empresa privada fundada y financiada por el empresario sudafricano Mark Shuttleworth que en vez de vender Ubuntu con fines lucrativos, se financia por medio de servicios vinculados al sistema operativo y vendiendo soporte técnico.
Su eslogan es Linux for human beings (“Linux para seres humanos”) y su nombre proviene de la ideología sudafricana Ubuntu («Igualdad/Lealtad hacia otros.»). 

¿Qué es GNU/linux? 

En pocas palabras: es un sistema operativo GNU que usa como núcleo el kernel Linux.
El proyecto GNU nació en 1984 de la iniciativa de Richard Stallman con el objetivo de desarrollar un sistema operativo basado en UNIX, pero libre: el sistema GNU. El proyecto GNU está fuertemente unido a la filosofía del Software Libre, que es eje central en los proyectos que como Ubuntu derivan de él.
El kernel Linux es el corazón del sistema operativo Ubuntu. Nació en 1991 gracias a Linus Torvalds. Es esencialmente un clónico del núcleo de UNIX creado de manera independiente.

La Diferencia
 
Ubuntu pretende crear una distribución que proporcione un sistema GNU/Linux actualizado y coherente para la informática de escritorio y servidores. Ubuntu incluye una cuidadosa selección de los paquetes de Debian, y mantiene su poderoso sistema de gestión de paquetes que nos permite instalar y desinstalar programas de una forma fácil y limpia. A diferencia de la mayoría de las distribuciones, que vienen con una enorme cantidad de software que pueden o no ser de utilidad, la lista de paquetes de Ubuntu se ha reducido para incluir solo aplicaciones importantes y de alta calidad.
Ubuntu está disponible para las arquitecturas i386 (procesadores 386/486/Pentium(II/III/IV) y Athlon/Duron/Sempron processors), AMD64 (Athlon64, Opteron y los nuevos procesadores Intel de 64 bits), PowerPC (iBook/Powerbook, G4 y G5) y ARM. 

Ubuntu 11.04 (Natty Narwhal)

La versión 11.04 Natty Narwhal fue lanzada el 28 de abril de 2011.Esta versión marca el fin de Ubuntu Netbook Edition, puesto que se ha decidido fusionarla con la edición de escritorio.
Esta versión recibió varios cambios en su apariencia, partiendo por la implementación de la interfaz de usuario Unity. Debido a esto, no se utilizó GNOME Shell, ya que Unity es el shell creado por Canonical para Ubuntu.

Ubuntu 11.04 incluye tres sesiones de escritorio en la entrada de usuario de Ubuntu; la primera sesión es «Ubuntu», utiliza Unity y es necesario tener instalados controladores para ambientes gráficos 3D. La segunda sesión es «Ubuntu Clásico», utiliza el mismo entorno que se utilizaba en versiones anteriores de Ubuntu con GNOME Panel, y utiliza efectos de escritorio. La tercera sesión es «Ubuntu Clásico (Sin efectos)», como la anterior pero sin efectos de escritorio.
Ubuntu 11.04 utiliza el reproductor de música Banshee de manera predeterminada, reemplazando a Rhythmbox; el navegador web Mozilla Firefox 4; la suite ofimática LibreOffice, que reemplaza a OpenOffice.org; y el diccionario se ha eliminado.

Asimismo, esta versión incluye el núcleo Linux 2.6.38, el cual provee mejoras de rendimiento de un 30% a un 50% en algunos casos, mejoras en el sistema de archivos Btrfs, la inclusión de los últimos controladores para los procesadores AMD Fusion, y soporte para más tarjetas gráficas con prestaciones 3D.


Fuente
 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best WordPress Themes