domingo, 26 de agosto de 2012

Llamadas al Sistema


La  llamada al sistema (en inglés system call) es el mecanismo usado por una aplicación para solicitar un servicio al sistema operativo
Las llamadas al sistema comúnmente usan una instrucción especial de la CPU que causa que el procesador transfiera el control a un código privilegiado, previamente especificado por el mismo código. Esto permite al código privilegiado especificar donde va a ser conectado así como el estado del procesador.
Cuando una llamada al sistema es invocada, la ejecución del programa que invoca es interrumpida y sus datos son guardados, normalmente en su PCB (Bloque de Control de Proceso del inglés Process Control Block), para poder continuar ejecutándose luego. El procesador entonces comienza a ejecutar las instrucciones de código de alto nivel de privilegio, para realizar la tarea requerida. Cuando esta finaliza, se retorna al proceso original, y continúa su ejecución. El retorno al proceso demandante no obligatoriamente es inmediato, depende del tiempo de ejecución de la llamada al sistema y del algoritmo de planificación de CPU.


Implementaciones típicas
La implementación de las llamadas al sistema requiere un control de transferencia que involucra características específicas de la arquitectura del procesador. Una forma típica de implementar es usar una interrupción por software. Linux usa esta implementación en la arquitectura x86.
Para los procesadores con arquitectura RISC, ésta es la única forma, pero arquitecturas CISC como x86 soportan otras técnicas adicionales. Un ejemplo es SYSCALL/SYSRE.


Llamadas al sistema en Linux
GNU/Linux es un Sistema Operativo multitarea en el que van a convivir un gran número de procesos. Es posible, bien por un fallo de programación o bien por un intento malicioso, que alguno de esos procesos haga cosas que atenten contra la estabilidad de todo el sistema. Por ello, con vistas a proteger esa estabilidad, el núcleo o kernel del sistema funciona en un entorno totalmente diferente al resto de programas. Se definen entonces dos modos de ejecución totalmente separados: el modo kernel y el modo usuario.


Cada uno de estos modos de ejecución dispone de memoria y procedimientos diferentes, por lo que un programa de usuario no podrá ser capaz de dañar al núcleo.

Las syscalls o llamadas al sistema son el mecanismo por el cual los procesos y aplicaciones de usuario acceden a los servicios del núcleo. Son la interfaz que proporciona el núcleo para realizar desde el modo usuario las cosas que son propias del modo kernel (como acceder a disco o utilizar una tarjeta de sonido). La siguiente figura explica de forma gráfica cómo funciona la syscall read().
El modo usuario necesita acceder al disco para leer, para ello utiliza la syscall read() utilizando la interfaz de llamadas al sistema. El núcleo atiende la petición accediendo al hardware y devolviendo el resultado al proceso que inició la petición. 


Para hacer uso de las llamadas al sistema desde el lenguaje de programación C, los sistemas operativos que trabajan con el núcleo Linux ponen a disposición del usuario varias funciones o procedimientos de librería que representan a las llamadas del sistema. Los prototipos relativos a estas funciones o procedimientos pueden encontrarse listados en el archivo de cabecera unistd.h (este se encuentra en el directorio/usr/include/asm/, aquí también pueden encontrarse los archivos unistd_32.h y unistd_64.h, archivos relativos a las arquitecturas de 32 y 64 bits respectivamente).

El sistema operativo de núcleo Linux cuenta con aproximadamente 200 funciones relacionadas con cada llamada al sistema, algunos de los cuales pueden agruparse en ciertas categorías que permiten el manejo o control de: procesos, señales, archivos, tiempo, etc.


El programador (1): usa las librerías C para llamadas al sistema y otras librerías (2): para implementar el código fuente de la aplicación (3): y a partir de él generar el archivo ejecutable de dicha aplicación.

El usuario final (4): ejecuta la aplicación, (5): la cual se comunica a través de llamadas al sistema con el núcleo del sistema operativo (6): el cual toma el control y se encarga de manipular el hardware para realizar el proceso solicitado.

Cuando el proceso se ha completado, el núcleo (7): retorna el control a la aplicación.



-----------------------------------------------------------------------------------------------
fuentes:systope
http://es.wikipedia.org/wiki/Llamada_al_sistema

Procesos Padre


Definición de proceso:

·         Un proceso es una entidad activa que tiene asociada un conjunto de atributos: código, datos, stack, registros e identificador único.
·         Un proceso es la entidad de ejecución reconocida por el sistema de operación.
·         Un proceso es un programa en ejecución. Esta ejecución es secuencial.
·         Un proceso requiere de recursos (memoria, CPU, dispositivos de E/S, stack) para su ejecución
·         Los procesos también son llamados frecuentemente tareas.
·         Un programa, por su parte representa una entidad pasiva. Cuando un programa es reconocido por el sistema de operación y tiene asignado recursos, éste se convierte en proceso.


Siempre que le pidamos a nuestra computadora que haga algo, los procesos asumirán el trabajo y de esta manera el microprocesador dará ejecución al plan que realice el sistema operativo a través de los procesos.

Procesos Padre
La mayoría de los procesos también tiene un proceso padre. El proceso padre es el proceso que los inició. Por ejemplo, si está tecleando órdenes en la shell, la shell es un proceso, y cualquier orden que usted ejecute también lo será. De este modo cada proceso que ejecute tendrá como proceso padre a su shell. La excepción de esto es un proceso especial llamado init. init es siempre el primer proceso, así que su PID siempre es 1. El kernel arranca automáticamente init en el incio. Como el sistema de archivos, los procesos también están organizados en una jerarquía. A medida que se producen más procesos, se crean más procesos hijos. Se puede concebir una jerarquía de procesos encadenados juntos por PID y PPID.

jueves, 16 de agosto de 2012

Procesador

El microprocesador (o simplemente procesador) es el circuito integrado central y más complejo de un sistema informático; a modo de ilustración, se le suele llamar por analogía el «cerebro» de un computador.Constituye la unidad central de procesamiento (CPU) de un PC catalogado como microcomputador.

-Tienen 3 buses, Datos: Contiene el flujo de información  Direcciones: Controla la posición actual en memoria  Control: Regula el flujo de información para evitar conflictos.

Funcionamiento

Desde el punto de vista lógico, singular y funcional, el microprocesador está compuesto básicamente por: varios registros, una unidad de control, una unidad aritmético lógica, y dependiendo del procesador, puede contener una unidad de coma flotante.
El microprocesador ejecuta instrucciones almacenadas como números binarios organizados secuencialmente en la memoria principal. La ejecución de las instrucciones se puede realizar en varias fases:
  • Prefetch, prelectura de la instrucción desde la memoria principal.
  • Fetch, envío de la instrucción al decodificador
  • Decodificación de la instrucción, es decir, determinar qué instrucción es y por tanto qué se debe hacer.
  • Lectura de operandos (si los hay).
  • Ejecución, lanzamiento de las máquinas de estado que llevan a cabo el procesamiento.
  • Escritura de los resultados en la memoria principal o en los registros. 

Arquitecturas: 

 CISC: En la arquitectura computacional, CISC (del inglés complex instruction set computer) es un modelo de arquitectura de computadora. Los microprocesadores CISC tienen un conjunto de instrucciones que se caracteriza por ser muy amplio y permitir operaciones complejas entre operandos situados en la memoria o en los registros internos, en contraposición a la arquitectura RISC.

La microprogramación es una característica importante y esencial de casi todas las arquitecturas CISC. La microprogramación significa que cada instrucción de máquina es interpretada por un microprogramalocalizado en una memoria en el circuito integrado del procesador. Las instrucciones compuestas son decodificadas internamente y ejecutadas con una serie de microinstrucciones almacenadas en una ROM de Control, ROM interna. Para esto se requieren de varios ciclos de reloj, al menos uno por microinstrucción. Es así entonces como los chips CISC utilizan comandos que incorporan una gran diversidad de pequeñas instrucciones para realizar una única operación.  

  


RISC: características fundamentales:
  • Instrucciones de tamaño fijo y presentadas en un reducido número de formatos.
  • Sólo las instrucciones de carga y almacenamiento acceden a la memoria de datos.
Además estos procesadores suelen disponer de muchos registros de propósito general.

El objetivo de diseñar máquinas con esta arquitectura es posibilitar la segmentación y el paralelismo en la ejecución de instrucciones y reducir los accesos a memoria.

Diversos estudios reflejaron, que la mayoría del software, la mayoría del tiempo, usaba las instrucciones más simples dejando las instrucciones más complejas para casos raros, en software muy especializado. Esto abría nuevas posibilidades de desarrollo, pues el procesador no tenía por qué llevar un juego de instrucciones muy complejo, abaratando así los costes de desarrollo, diseño, producción etc...

Las instrucciones, aunque con otras características, siguen divididas en tres grupos:

a) Transferencia.
b) Operaciones.
c) Control de flujo.

Reducción del conjunto de instrucciones a instrucciones básicas simples, con la que pueden implantarse todas las operaciones complejas. Arquitectura del tipo load-store (carga y almacena). Casi todas las instrucciones pueden ejecutarse dentro de un ciclo de reloj.

Pipeline (ejecución simultánea de varias instrucciones). Posibilidad de reducir el número de ciclos de máquina necesarios para la ejecución de la instrucción.

Historia de Linux


GNU/Linux es uno de los términos empleados para referirse a la combinación del núcleo o kernel libre similar a Unix denominado Linux con las herramientas del proyecto GNU. Su desarrollo es uno de los ejemplos más prominentes de software libre; todo su código fuente puede ser utilizado, modificado y redistribuido libremente por cualquiera bajo los términos de la GPL (Licencia Pública General de GNU, en inglés: General Public License) y otra serie de licencias libres.

A pesar de que Linux es, en sentido estricto, el sistema operativo, parte fundamental de la interacción entre el núcleo y el usuario (o los programas de aplicación) se maneja usualmente con las herramientas del proyecto GNU o de otros proyectos como GNOME. 

Desarrollo del núcleo Linux
En 1983 Richard Stallman inició el Proyecto GNU, con el propósito de crear un sistema operativo similar y compatible con UNIX y los estándares POSIX. Dos años más tarde, 1985, creó la Fundación del Software Libre(FSF) y desarrolló la Licencia pública general de GNU (GNU GPL), para tener un marco legal que permitiera difundir libremente el software. De este modo el software de GNU fue desarrollado muy rápidamente, y por muchas personas. A corto plazo, se desarrolló una multiplicidad de programas, de modo que a principios de los años 1990 había casi bastante software disponible como para crear un sistema operativo completo. Sin embargo, todavía le faltaba un núcleo.

En 1991, en HelsinkiLinus Torvalds comenzó un proyecto que más tarde llegó a ser el núcleo Linux. Esto fue al principio un emulador terminal, al cual Torvalds solía tener acceso en los grandes servidores UNIX de launiversidad. Él escribió el programa expresamente para el hardware que usaba, e independiente de un sistema operativo, porque quiso usar las funciones de su nueva computadora personal con un procesador 80386. Este es aún el estándar de hoy. El sistema operativo que él usó durante el desarrollo fue Minix, y el compilador inicial fue el GNU C compiler, que aún es la opción principal para compilar Linux hoy (aunque Linux puede ser compilado bajo otros compiladores, tal como el Intel C Compiler escribió en su libro "Solamente por diversión",él tarde o temprano comprendió que había escrito un núcleo de sistema operativo

GNU/Linux
La designación "Linux" al principio fue usada por Torvalds sólo para el núcleo. El núcleo fue, sin embargo, con frecuencia usado junto con otro software, especialmente con el del proyecto de GNU. Esta variante de GNU rápidamente se hizo la más popular, ya que no había ningún otro núcleo libre que funcionara en ese tiempo. Cuando la gente comenzó a referirse hacia esta recopilación como "Linux", Richard Stallman, el fundador del proyecto de GNU, solicitó que se usara el nombreGNU/Linux, para reconocer el rol del software de GNU.

sábado, 11 de agosto de 2012

¿Qué es SHELL?

En informática, el término shell se emplea para referirse a aquellos programas que proveen una interfaz de usuario para acceder a los servicios del sistema operativo. Estos pueden ser gráficos o de texto simple, dependiendo del tipo de interfaz que empleen.

El shell acepta las órdenes del usuario o las sentencias de control de trabajos, las interpreta, crea y controla los procesos según sea necesario
 Los shells están diseñados para facilitar la forma en que se invocan o ejecutan los distintos programas disponibles en el computador.

Shells de texto comunes:

- Bourne Shell 
Es un programa informático cuya función consiste en interpretar órdenes. Incorpora características tales como control de procesos, redirección de entrada/salida, listado y lectura de ficheros, protección, comunicaciones y un lenguaje de órdenes para escribir programas por lotes o scripts. Fue el intérprete usado en las primeras versiones de Unix y se convirtió en un estándar de facto.

- Bash (Bourne again shell)
  Está basado en la shell de Unix y es compatible con POSIX. Fue escrito para el proyecto GNU y es el intérprete de comandos por defecto en la mayoría de las distribuciones de Linux.



-Korn shell (ksh
Es un programa informático cuya función consiste en interpretar órdenes por líneas. Fue escrito para el proyecto de contenido libre GNU y su código se encuentra disponible bajo los términos de la Licencia Pública General. Se encuentra disponible en la mayoría de las distribuciones GNU/Linux y para otros sistemas operativos basados en Unix. Fue desarrollado por David Korn de los Laboratorios AT&T Bell en los comienzos de los 80s. Es totalmente compatible con el Bourne Shell y también incluye muchos elementos del interprete de comandos C, como historia de órdenes.
La principal ventaja de ksh sobre otros intérpretes de comandos tradicionales de Unix, es su uso como lenguaje de programación. Desde su concepción, se le agregaron gradualmente muchas capacidades, mientras se mantenía amplia compatibilidad con elBourne Shell.
La versión ksh93 soporta arreglos asociativos y aritmética de punto flotante integrada. Sus funciones avanzadas para manejar archivos de comandos lo pusieron a la par con lenguajes de programación especializados como awk y perl.
Para uso interactivo, ksh provee la habilidad de editar la línea de órdenes en modo WYSIWYG, usando la tecla cursor-arriba para llamar a una orden previamente usada, y luego editar la orden como si los usuarios estuvieran en modo línea. Dos modos están disponibles, compatible con vi y emacs. 


-Z shell (o simplemente zsh
Es un potente intérprete de comandos para sistemas operativos de tipo Unix, como por ejemplo los BSD o GNU/Linux.1 La primera versión de zsh fue escrita por Paul Falstad en 1990, cuando era estudiante en la Universidad de Princeton.
Zsh se diseñó para poder usarse interactivamente. Se le han incorporado muchas de las características principales de otras shells de Unix como, bash, ksh, o tcsh y además posee características propias originales.

  
-Emacs es un editor de texto con una gran cantidad de funciones, muy popular entre programadores y usuarios técnicos. Es parte del proyecto GNU, activamente desarrollado. Es la versión más popular de Emacs. El manual de GNU Emacs lo describe como "un editor extensible, personalizable, auto-documentado y de tiempo real."

A pesar de (o quizás a causa de) su venerable pasado, Emacs es uno de los editores de texto más potentes y versátiles hoy en día. Debe remarcarse que es principalmente un editor de texto, y no un procesador de texto; su enorme conjunto de características está orientado a ayudar el usuario a manipular trozos de texto, más que manipular el tipo de letra de los caracteres o imprimir documentos (aunque Emacs puede también hacer eso). Emacs tiene una gran cantidad de características que permiten lidiar con la aparentemente sencilla tarea de editar texto, que van desde comandos para manipular palabras y párrafos (borrarlos, moverlos, moverse por entre ellos, etc.), hasta resaltado de sintaxis para hacer el código fuente más fácil de leer, o ejecutar "macros de teclado" que contienen lotes de comandos de edición definidos por el usuario.
La rica variedad de características que se encuentran en Emacs es el resultado de su diseño poco habitual. Casi toda la funcionalidad del editor, desde las operaciones básicas de edición (como la inserción de caracteres en un documento) hasta la configuración de la interfaz de usuario, es controlada por un dialecto del lenguaje de programación Lisp. En este entorno Lisp,variables e incluso funciones enteras pueden ser modificadas al vuelo, sin tener que recompilar o ni siquiera reiniciar el editor. Como resultado, el comportamiento de Emacs puede ser modificado casi sin límite, bien directamente por el usuario, o (más habitualmente) cargando fragmentos de código Emacs Lisp. Estos fragmentos son conocidos como "bibliotecas", "librerías", "paquetes" o "extensiones".
Emacs contiene un gran número de bibliotecas escritas en Emacs Lisp, y en Internet se pueden encontrar más bibliotecas de terceras partes. Muchas bibliotecas implementan ayudas para la programación de ordenadores, lo que es un reflejo de la popularidad de Emacs entre los programadores. Emacs se puede usar como un entorno de desarrollo integrado (IDE), que permite a los programadores editar, compilar y depurar su código con una única interfaz

-Símbolo del sistema  
(en inglés Command prompt) es el intérprete de comandosen OS/2 y sistemas basados en Windows NT (incluyendo Windows 2000, Windows XP, Windows Server 2003, Windows Vista y Windows 7). Es el equivalente decommand.com en MS-DOS y sistemas de la familia Windows 9x.
A diferencia de su antecesor (command.com), este programa es tan sólo unaaplicación, no es una parte del sistema operativo y no posee la función de cargar la configuración al arrancar el sistema.
Muchas funciones que se realizan desde la interfaz gráfica de algún sistema operativo son enviadas al cmd que es el encargado de ejecutarlas. Esto no es del todo cierto en Windows debido a que hay muchas más opciones realizables que no son enviadas al cmd y se ejecutan mediante scripts.



Shells gráficos comunes:

 

 -GNOME es un entorno de escritorio e infraestructura de desarrollo parasistemas operativos Unix y derivados Unix como GNU/Linux, BSD o Solaris; compuesto enteramente de software libre.

El Proyecto GNOME, según sus creadores, provee un gestor de ventanas «intuitivo y atractivo» y una plataforma de desarrollo para crear aplicaciones que se integran con el escritorio. El Proyecto pone un gran énfasis en la simplicidad, usabilidad y eficiencia. Otros objetivos del proyecto son:
  • La libertad para crear un entorno de escritorio que siempre tendrá el código fuente disponible para reutilizarse bajo una licencia de software libre.
  • El aseguramiento de la accesibilidad, de modo que pueda ser utilizado por cualquiera, sin importar sus conocimientos técnicos y discapacidad física.
  • Hacer que esté disponible en muchos idiomas.
  • Un ciclo regular de liberaciones y una estructura de comunidad disciplinada


 -Unity es un interfaz de usuario creada para el entorno de escritorio GNOME, y desarrollado por Canonical para la distribución de Linux Ubuntu. Su primer lanzamiento se realizó en la versión 10.10 de Ubuntu Netbook Remix. Fue diseñado con el propósito de aprovechar el espacio en pantallas pequeñas de los netbooks, especialmente el espacio vertical.


-Microsoft Windows es el nombre de una familia de sistemas operativosdesarrollados por Microsoft desde 1981, año en que el proyecto se denominaba«Interface Manager».

Anunciado en 1983, Microsoft comercializó por primera vez el entorno operativo denominado Windows en noviembre de 1985 como complemento para MS-DOS, en respuesta al creciente interés del mercado en una interfaz gráfica de usuario (GUI) que fuera introducido por otros sistemas operativos como Mac OS y de otras compañías como Xerox.



 Fuente | Wikipedia | 
-Stallings Williams "Sistemas Operativos" , pag 75.