<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://1984.lsi.us.es/wiki-ssoo/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pedfloand</id>
		<title>Wiki de Sistemas Operativos - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://1984.lsi.us.es/wiki-ssoo/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pedfloand"/>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php/Especial:Contribuciones/Pedfloand"/>
		<updated>2026-06-18T06:30:33Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Llamadas_al_sistema&amp;diff=2542</id>
		<title>Llamadas al sistema</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Llamadas_al_sistema&amp;diff=2542"/>
				<updated>2012-10-20T13:02:59Z</updated>
		
		<summary type="html">&lt;p&gt;Pedfloand: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 2.4. Llamadas al sistema =&lt;br /&gt;
&lt;br /&gt;
== Definición de llamada al sistema ==&lt;br /&gt;
&lt;br /&gt;
Una llamada al sistema es un método o función que puede invocar un proceso para solicitar un cierto servicio al sistema operativo. Dado que el acceso a ciertos recursos del sistema requieren la ejecución de código en modo privilegiado, el sistema operativo ofrece un conjunto de métodos o funciones que el programa puede emplear para acceder a dichos recursos. En otras palabras, el sistemas operativo actúa como intermediario, ofreciendo una interfaz de programación (API) que el programa puede usar en cualquier momento para solicitar recursos gestionados por el sistema operativo.&lt;br /&gt;
&lt;br /&gt;
Algunos ejemplos de llamadas al sistema son las siguientes:&lt;br /&gt;
&lt;br /&gt;
* '''time''', que permite obtener la fecha y hora del sistema.&lt;br /&gt;
* '''write''', que se emplea para escribir un dato en un cierto dispositivo de salida, tales como una pantalla o un disco magnético.&lt;br /&gt;
* '''read''', que es usada para leer de un dispositivo de entrada, tales como un teclado o un disco magnético.&lt;br /&gt;
* '''open''', que es usada para obtener un descriptor de un fichero del sistema, ese fichero suele pasarse a write.&lt;br /&gt;
&lt;br /&gt;
Todo sistema operativo ofrece un conjunto de llamadas al sistema. En el caso de Linux 3.0, se ofrecen un total de 345 llamadas al sistema.&lt;br /&gt;
&lt;br /&gt;
Toda llamada al sistema se identifica de manera unívoca mediante un valor numérico que no debe ser modificado a lo largo de la vida del sistema operativo para evitar que se rompa la compatibilidad hacia atrás.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra en un ejemplo en C la invocación de las llamadas al sistema '''time''' y '''write'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;time.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
      uint64_t segundos;&lt;br /&gt;
&lt;br /&gt;
      segundos = time(NULL);&lt;br /&gt;
      write(stdout, &amp;quot;Segundos desde 1970: %d&amp;quot;, segundos);1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Familias de llamadas al sistemas operativo: POSIX y WIN32/64 ===&lt;br /&gt;
&lt;br /&gt;
Las dos familias de APIs estandarizas más importantes son:&lt;br /&gt;
&lt;br /&gt;
* [http://es.wikipedia.org/wiki/POSIX POSIX].&lt;br /&gt;
* WIN32/64, empleada en los sistemas operativos de tipo-Windows. Además, existen emuladores como '''Wine''' que también las implementan.&lt;br /&gt;
&lt;br /&gt;
== Implementación de llamadas al sistema ==&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra el código en ensamblador de x86 para invocar a la llamada al sistema '''write''' que permite escribir un dato en cualquier dispositivo. En concreto, se va a escribir una cadena por el dispositivo de salida '''pantalla''', que se identifica mediante el descriptor de fichero número 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
section .text&lt;br /&gt;
    global _start&lt;br /&gt;
_start:&lt;br /&gt;
    mov eax, 4         ;cargamos el número de la llamada al sistema en el regitro eax&lt;br /&gt;
    mov ebx, 1         ;cargamos el descriptor de fichero sobre el que queremos escribir&lt;br /&gt;
    mov ecx, string    ;cargamos en ecx la dirección de la cadena a imprimir&lt;br /&gt;
    mov edx, lenght    ;cargamos en edx el tamaño de la cadena a imprimir&lt;br /&gt;
    int 80h            ;se invoca al de&lt;br /&gt;
&lt;br /&gt;
    mov eax, 1&lt;br /&gt;
    mov ebx, 0&lt;br /&gt;
    int 80h&lt;br /&gt;
&lt;br /&gt;
section .data&lt;br /&gt;
    string: db &amp;quot;Hola Mundo&amp;quot;, 0x0A&lt;br /&gt;
    lenght: equ 13&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La instrucción ''int'' forma parte del conjunto de instrucciones de procesadores x86. Esta instrucción emite una [[Gestión_de_Entrada/Salida|interrupción]] por software cuyo tratamiento es realizado por la rutina ''dispatcher''. Dicha rutina se encarga del tratamiento de la interrupción por software número 80.&lt;br /&gt;
&lt;br /&gt;
== El ''dispatcher'' ==&lt;br /&gt;
&lt;br /&gt;
El dispatcher, que forma parte del SO, se ejecuta cuando se invoca una llamada al sistema. &lt;br /&gt;
Cuando un proceso hace una llamada al sistema, el dispatcher, se encarga de invocar la llamada que el proceso ha solicitado. &lt;br /&gt;
&lt;br /&gt;
En el caso de x86, el dispatcher consulta el registro eax e invoca a la llamada al sistema identificada con dicha numeración.&lt;br /&gt;
&lt;br /&gt;
== El punto de entrada == &lt;br /&gt;
&lt;br /&gt;
Es la posición de memoria desde la cual es posible solicitarle servicios al sistema operativo. Normalmente hay un único punto de entrada.&lt;br /&gt;
En algunos SO se realiza mediante llamadas a subprogramas. La dirección de memoria del punto de entrada puede cambiar si se modifica el SO. En algunos SO éste problema lo solucionan usando una dirección fija, mientras en otros han preferido usar una referencia a dicha dirección&lt;/div&gt;</summary>
		<author><name>Pedfloand</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Conceptos_b%C3%A1sicos&amp;diff=2541</id>
		<title>Conceptos básicos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Conceptos_b%C3%A1sicos&amp;diff=2541"/>
				<updated>2012-10-20T12:17:40Z</updated>
		
		<summary type="html">&lt;p&gt;Pedfloand: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 2.1. Conceptos básicos = &lt;br /&gt;
A continuación se desarrollan conceptos básicos que se emplearán a lo largo de la asignatura.&lt;br /&gt;
&lt;br /&gt;
== Programa ==&lt;br /&gt;
&lt;br /&gt;
Un programa es una secuencia de instrucciones que, al ejecutarse, desarrolla algún tipo de actividad.&lt;br /&gt;
&lt;br /&gt;
Un programa, generalmente, se expresa en un lenguaje de programación de medio o alto nivel (tales como C, C++, Python, Java, Perl, Php, C#, etc) que, mediante un compilador o máquina virtual, se traduce a instrucciones de bajo nivel que corresponden al juego de instrucciones que ofrece el procesador.&lt;br /&gt;
&lt;br /&gt;
El juego de instrucciones del procesador viene determinado por el fabricante.&lt;br /&gt;
&lt;br /&gt;
== Proceso ==&lt;br /&gt;
&lt;br /&gt;
Un ''proceso'' es una instancia de un programa que está en ejecución. De partida todo proceso dispone de una única línea de ejecución. Se puede entender como la vista dinámica (en ejecución) de un programa.&lt;br /&gt;
&lt;br /&gt;
=== Procesos en sistemas operativos tipo Unix ===&lt;br /&gt;
&lt;br /&gt;
* Todo proceso en un sistema operativo tipo Unix tiene un proceso padre y a su vez puede disponer uno o más de un proceso hijo.&lt;br /&gt;
&lt;br /&gt;
* Todo proceso en un sistema operativo tipo Unix tiene un propietario, que se trata del usuario que ha lanzado dicho proceso.&lt;br /&gt;
&lt;br /&gt;
* El proceso ''init'' es el padre de todos los procesos. Es la excepción a la norma general, pues no tiene padre.&lt;br /&gt;
&lt;br /&gt;
* La informacion necesaria para administrar un proceso se guarda en una estructura controlada por el S.O. llamada Bloque de Control de * Procesos o PCB (Process Control Block)&lt;br /&gt;
&lt;br /&gt;
* Para mostrar la relación actual de procesos en el sistema se puede emplear la orden ''ps''.&lt;br /&gt;
&lt;br /&gt;
* Para identificar los procesos el sistema operativo Unix asigna un numero de identificacion del proceso, o pid(Process IDentification).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ps -ef&lt;br /&gt;
UID        PID  PPID  C STIME TTY          TIME CMD&lt;br /&gt;
root         1     0  0 11:48 ?        00:00:00 /sbin/init&lt;br /&gt;
...&lt;br /&gt;
practica  1712     1 18 12:08 ?        00:00:00 gnome-terminal&lt;br /&gt;
practica  1713  1712  0 12:08 ?        00:00:00 gnome-pty-helper&lt;br /&gt;
practica  1714  1712 20 12:08 pts/0    00:00:00 bash&lt;br /&gt;
practica  1731  1714  0 12:08 pts/0    00:00:00 ps -ef&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La primera columna indica el UID del proceso, la segunda el PID, la tercera el PID del proceso padre. Por último, aparece el nombre del proceso en cuestión.&lt;br /&gt;
&lt;br /&gt;
=== Procesos padre e hijo ===&lt;br /&gt;
&lt;br /&gt;
* Todo proceso (padre) puede lanzar un proceso hijo en cualquier momento, para ello el sistema operativo nos ofrece una llamada al sistema que se denomina ''fork''.&lt;br /&gt;
&lt;br /&gt;
* Un proceso hijo es un proceso clon del padre. Sin embargo, procesos padre e hijo no comparten memoria, son completamente independientes.&lt;br /&gt;
&lt;br /&gt;
* Todo proceso padre es responsable de los procesos hijos que lanza, por ello, todo proceso padre debe recoger el resultado de la ejecución de los procesos hijos para que estos finalicen adecuadamente. Para ello, el sistema operativo ofrece la llamada ''wait'' que nos permite obtener el resultado de la ejecución de uno o varios procesos hijo.&lt;br /&gt;
&lt;br /&gt;
* Si un proceso padre no recupera el resultado de la ejecución de su hijo, se dice que el proceso queda en estado '''zombi'''. Un proceso hijo zombi es un proceso que ha terminado su ejecución y que está pendiente de que su padre recoja el resultado de su ejecución.&lt;br /&gt;
&lt;br /&gt;
== [[Llamadas_al_sistema|Llamadas a sistema ]]==&lt;br /&gt;
&lt;br /&gt;
* Se implementan a través de una interfaz (o API) que ofrece el Sistema Operativo. Son mecanismos que el S.O. pone a disposición de los procesos para solicitar un servicio o recurso. (Otra definición, según Wikipedia: Llamadas que ejecutan los programas de aplicación para pedir algún servicio al SO.) Estas llamadas a sistema evitan que el proceso acceda directamente a los recursos del hardware.&lt;br /&gt;
En el caso de Linux tiene aproximadamente 350 llamadas al sistema en la versión 3.0.0.&lt;br /&gt;
La mayor parte de los Sistemas Operativos suelen implementar la API POSIX por razones de portabilidad.&lt;br /&gt;
&lt;br /&gt;
== Usuario ==&lt;br /&gt;
&lt;br /&gt;
* Sujeto que interactúa con la computadora. Puede ser un humano o un autómata (software). &lt;br /&gt;
&lt;br /&gt;
* En sistemas UNIX encontramos un código único para cada uno, el UID (User IDentifier). A su vez debe pertenecer a un grupo, definido por el GID (Group IDentifier).&lt;br /&gt;
&lt;br /&gt;
== [[Introducción_en_la_administración_de_archivos#Fichero|Fichero ]]==&lt;br /&gt;
&lt;br /&gt;
* Estructura de datos que almacena información.&lt;br /&gt;
&lt;br /&gt;
Los ficheros se identifican mediante su nombre y su extension (un apendice que se utiliza para indicar el tipo de informacion que contiene el fichero).&lt;br /&gt;
&lt;br /&gt;
El lugar donde se encuentra un fichero viene dado por su directorio. Dentro de un directorio pueden existir otros directorios (llamados subdirectorios) lo que da lugar a una organizacion en forma de arbol.&lt;br /&gt;
&lt;br /&gt;
Al camino que debemos seguir para encontrar un fichero lo llamamos '''camino absoluto (absolute path)''', y al camino que debemos seguir para encontrar el fichero en relación a otro fichero, que no sea el fichero raíz, se le conoce cómo '''camino relativo (relative path)'''.&lt;/div&gt;</summary>
		<author><name>Pedfloand</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Conceptos_b%C3%A1sicos&amp;diff=2540</id>
		<title>Conceptos básicos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Conceptos_b%C3%A1sicos&amp;diff=2540"/>
				<updated>2012-10-20T12:12:52Z</updated>
		
		<summary type="html">&lt;p&gt;Pedfloand: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 2.1. Conceptos básicos = &lt;br /&gt;
A continuación se desarrollan conceptos básicos que se emplearán a lo largo de la asignatura.&lt;br /&gt;
&lt;br /&gt;
== Programa ==&lt;br /&gt;
&lt;br /&gt;
Un programa es una secuencia de instrucciones que, al ejecutarse, desarrolla algún tipo de actividad.&lt;br /&gt;
&lt;br /&gt;
Un programa, generalmente, se expresa en un lenguaje de programación de medio ó alto nivel (tales como C, C++, Python, Java, Perl, Php, C#, etc) que, mediante un compilador o máquina virtual, se traduce a instrucciones de bajo nivel que corresponden al juego de instrucciones que ofrece el procesador.&lt;br /&gt;
&lt;br /&gt;
El juego de instrucciones del procesador viene determinado por el fabricante.&lt;br /&gt;
&lt;br /&gt;
== Proceso ==&lt;br /&gt;
&lt;br /&gt;
Un ''proceso'' es una instancia de un programa que está en ejecución. De partida todo proceso dispone de una única línea de ejecución. Se puede entender como la vista dinámica (en ejecución) de un programa.&lt;br /&gt;
&lt;br /&gt;
=== Procesos en sistemas operativos tipo Unix ===&lt;br /&gt;
&lt;br /&gt;
* Todo proceso en un sistema operativo tipo Unix tiene un proceso padre y a su vez puede disponer uno o más de un proceso hijo.&lt;br /&gt;
&lt;br /&gt;
* Todo proceso en un sistema operativo tipo Unix tiene un propietario, que se trata del usuario que ha lanzado dicho proceso.&lt;br /&gt;
&lt;br /&gt;
* El proceso ''init'' es el padre de todos los procesos. Es la excepción a la norma general, pues no tiene padre.&lt;br /&gt;
&lt;br /&gt;
* La informacion necesaria para administrar un proceso se guarda en una estructura controlada por el S.O. llamada Bloque de Control de * Procesos o PCB (Process Control Block)&lt;br /&gt;
&lt;br /&gt;
* Para mostrar la relación actual de procesos en el sistema se puede emplear la orden ''ps''.&lt;br /&gt;
&lt;br /&gt;
* Para identificar los procesos el sistema operativo Unix asigna un numero de identificacion del proceso, o pid(Process IDentification).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ps -ef&lt;br /&gt;
UID        PID  PPID  C STIME TTY          TIME CMD&lt;br /&gt;
root         1     0  0 11:48 ?        00:00:00 /sbin/init&lt;br /&gt;
...&lt;br /&gt;
practica  1712     1 18 12:08 ?        00:00:00 gnome-terminal&lt;br /&gt;
practica  1713  1712  0 12:08 ?        00:00:00 gnome-pty-helper&lt;br /&gt;
practica  1714  1712 20 12:08 pts/0    00:00:00 bash&lt;br /&gt;
practica  1731  1714  0 12:08 pts/0    00:00:00 ps -ef&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La primera columna indica el UID del proceso, la segunda el PID, la tercera el PID del proceso padre. Por último, aparece el nombre del proceso en cuestión.&lt;br /&gt;
&lt;br /&gt;
=== Procesos padre e hijo ===&lt;br /&gt;
&lt;br /&gt;
* Todo proceso (padre) puede lanzar un proceso hijo en cualquier momento, para ello el sistema operativo nos ofrece una llamada al sistema que se denomina ''fork''.&lt;br /&gt;
&lt;br /&gt;
* Un proceso hijo es un proceso clon del padre. Sin embargo, procesos padre e hijo no comparten memoria, son completamente independientes.&lt;br /&gt;
&lt;br /&gt;
* Todo proceso padre es responsable de los procesos hijos que lanza, por ello, todo proceso padre debe recoger el resultado de la ejecución de los procesos hijos para que estos finalicen adecuadamente. Para ello, el sistema operativo ofrece la llamada ''wait'' que nos permite obtener el resultado de la ejecución de uno o varios procesos hijo.&lt;br /&gt;
&lt;br /&gt;
* Si un proceso padre no recupera el resultado de la ejecución de su hijo, se dice que el proceso queda en estado '''zombi'''. Un proceso hijo zombi es un proceso que ha terminado su ejecución y que está pendiente de que su padre recoja el resultado de su ejecución.&lt;br /&gt;
&lt;br /&gt;
== [[Llamadas_al_sistema|Llamadas a sistema ]]==&lt;br /&gt;
&lt;br /&gt;
* Se implementan a través de una interfaz (o API) que ofrece el Sistema Operativo. Son mecanismos que el S.O. pone a disposición de los procesos para solicitar un servicio o recurso. (Otra definición, según Wikipedia: Llamadas que ejecutan los programas de aplicación para pedir algún servicio al SO.) Estas llamadas a sistema evitan que el proceso acceda directamente a los recursos del hardware.&lt;br /&gt;
En el caso de Linux tiene aproximadamente 350 llamadas al sistema en la versión 3.0.0.&lt;br /&gt;
La mayor parte de los Sistemas Operativos suelen implementar la API POSIX por razones de portabilidad.&lt;br /&gt;
&lt;br /&gt;
== Usuario ==&lt;br /&gt;
&lt;br /&gt;
* Sujeto que interactúa con la computadora. Puede ser un humano o un autómata (software). &lt;br /&gt;
&lt;br /&gt;
* En sistemas UNIX encontramos un código único para cada uno, el UID (User IDentifier). A su vez debe pertenecer a un grupo, definido por el GID (Group IDentifier).&lt;br /&gt;
&lt;br /&gt;
== [[Introducción_en_la_administración_de_archivos#Fichero|Fichero ]]==&lt;br /&gt;
&lt;br /&gt;
* Estructura de datos que almacena información.&lt;br /&gt;
&lt;br /&gt;
Los ficheros se identifican mediante su nombre y su extension (un apendice que se utiliza para indicar el tipo de informacion que contiene el fichero).&lt;br /&gt;
&lt;br /&gt;
El lugar donde se encuentra un fichero viene dado por su directorio. Dentro de un directorio pueden existir otros directorios (llamados subdirectorios) lo que da lugar a una organizacion en forma de arbol.&lt;br /&gt;
&lt;br /&gt;
Al camino que debemos seguir para encontrar un fichero lo llamamos '''camino absoluto (absolute path)''', y al camino que debemos seguir para encontrar el fichero en relación a otro fichero, que no sea el fichero raíz, se le conoce cómo '''camino relativo (relative path)'''.&lt;/div&gt;</summary>
		<author><name>Pedfloand</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Qu%C3%A9_es_un_Sistema_Operativo&amp;diff=2537</id>
		<title>Qué es un Sistema Operativo</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Qu%C3%A9_es_un_Sistema_Operativo&amp;diff=2537"/>
				<updated>2012-10-20T11:27:11Z</updated>
		
		<summary type="html">&lt;p&gt;Pedfloand: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1.1. ¿Qué es un Sistema Operativo? =&lt;br /&gt;
&lt;br /&gt;
== 1.1.1. ¿Qué es un Sistema Operativo? ==&lt;br /&gt;
&lt;br /&gt;
El sistema operativo es el conjunto de programas que:&lt;br /&gt;
&lt;br /&gt;
* Gestionan y reparten de manera equitativa los recursos que ofrece el ''hardware'' entre los programas en ejecución. Concretamente, los recursos a gestionar son tres:&lt;br /&gt;
&lt;br /&gt;
** La [http://es.wikipedia.org/wiki/Unidad_central_de_procesamiento CPU], también conocida como procesador o unidad central de procesamiento. Todo procesador ofrece un conjunto de instrucciones de bajo nivel (lenguaje ensamblador) con operaciones básicas que ejecuta de manera secuencial.&lt;br /&gt;
** La [http://es.wikipedia.org/wiki/Memoria_principal Memoria principal], memoria empleada para almacenar el estado de la ejecución del programa.&lt;br /&gt;
** Los [http://es.wikipedia.org/wiki/Entrada/salida#Dispositivos_de_entrada_y_salida dispositivos de Entrada/Salida], tales como la tarjeta de vídeo, la tarjeta de red, los dispositivos de almacenamiento masivo (disco duro del tipo que sea), teclado, ratón, entre muchos otros.&lt;br /&gt;
&lt;br /&gt;
* Ofrece un '''lanzador de aplicaciones''', que pueden estar basados en:&lt;br /&gt;
&lt;br /&gt;
** Intérprete de órdenes/comandos (traducción incorrecta del original inglés ''command'', que significa órden), también llamado ''shell''. El dispositivo de entrada empleado es el teclado. Es generalmente complejo pero ofrece funcionalidades avanzadas. Algunos ejemplos son la shell de ''bash'' disponible en Linux o el PowerShell disponible en la recientes versiones de MS-Windows. Para ejecutar un programa se escribe su nombre, seguido de opciones (en caso de que las tenga y se pulsa la tecla de ''Intro'').&lt;br /&gt;
** Gestor de ventanas: Son los más populares por su sencillez, aunque ofrecen menor funcionalidad que los basados en intérpretes de órdenes. Los programas se ejecutan mediante un clic sencillo o doble de ratón. En dispositivos portátiles en lugar del ratón se emplea una pantalla táctil.&lt;br /&gt;
&lt;br /&gt;
* Ofrece una interfaz homogénea a los programas de usuario para solicitar servicios. Esta interfaz se conoce como '''API''' (del inglés, ''Application Programming Interface'') del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
El sistema operativo se sitúa entre los programas de usuario en ejecución y el hardware, de manera que los programas '''siempre''' deben emplear la ''API'' del sistema operativo para acceder a los recursos que ofrece el hardware. Esta '''API''' es estable y homogénea.&lt;br /&gt;
&lt;br /&gt;
== 1.1.2. Principios de diseño de un buen Sistema Operativo ==&lt;br /&gt;
&lt;br /&gt;
Los aspectos a tener en cuenta respecto a la gestión de recursos son:&lt;br /&gt;
&lt;br /&gt;
* Realizar una gestión eficiente de los recursos.&lt;br /&gt;
* Coordinar la asignación de los mismos entre los programas de ejecución (como se si tratase de un moderador en un debate, asignando el turno de palabra a cada uno de los asistentes).&lt;br /&gt;
* Hacer un reparto equitativo (del diccionario de la RAE, ''equidad'' significa &amp;quot;dar a cada uno lo que merece&amp;quot;). Esto no significa hacer una división exacta de los recursos, si no que se tendrán en cuenta la naturaleza de cada programa en ejecución a la hora de hacer el reparto.&lt;br /&gt;
* No ofrecer ninguna interfaz que permita a las aplicaciones acceder directamente los recursos hardware.&lt;br /&gt;
&lt;br /&gt;
Respecto a la API, debe:&lt;br /&gt;
&lt;br /&gt;
* Ser estable, no debe cambiar con el tiempo.&lt;br /&gt;
* Ser homogénea.&lt;br /&gt;
* Debe abstraer y ocultar los detalles de bajo nivel de los componentes, de manera que los programas lleguen a ser complemente independientes del hardware.&lt;br /&gt;
&lt;br /&gt;
Además de todo esto, un buen sistema operativo es ''portable'', es decir, que soporte diferentes arquitecturas ''hardware'', como por ejemplo la ARM (típicamente empleada en dispositivos móviles con limitaciones importantes en materia de energía), la PC x86 y x86_64 de Intel, las variantes del PC que ofrece AMD, la arquitectura PowerPC (empleada antaño por Apple y desarrollada por IBM) y SPARC (desarrollada por Sun Microsystems, adquirida por Oracle).&lt;/div&gt;</summary>
		<author><name>Pedfloand</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Hilos&amp;diff=2536</id>
		<title>Hilos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Hilos&amp;diff=2536"/>
				<updated>2012-10-20T11:02:57Z</updated>
		
		<summary type="html">&lt;p&gt;Pedfloand: Breve explicación de porqué se produce una menor penalización en la conmutación entre hilos y corrección de algunas expresiones.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 3.5 Hilos = &lt;br /&gt;
&lt;br /&gt;
Un hilo es un &amp;quot;proceso ligero&amp;quot;, es decir, una línea de ejecución. En general, el planificador de procesos da el mismo tratamiento a los hilos y a los procesos, pero la conmutación de hilos es menos costosa que la conmutación de procesos.&lt;br /&gt;
&lt;br /&gt;
Los procesos inicialmente parten con un único hilo, aunque el sistema operativo ofrece llamadas al sistema para crear y destruir hilos. Puedo hacer uso de estas llamadas al sistema desde el propio código del programa. &lt;br /&gt;
&lt;br /&gt;
Cuando se crea un hilo, se le indica qué código se quiere que ejecute. Distintos hilos, de un mismo proceso, comparten espacio de memoria.&lt;br /&gt;
&lt;br /&gt;
Veamos un ejemplo diseñado para un solo procesador:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Uso_del_procesador_hilos.svg]]&lt;br /&gt;
&lt;br /&gt;
Con multiprocesamiento podemos ejecutar diferentes procesos a la vez. Si tenemos uno solo podemos desdoblarlo en hilos, usando técnicas de programación apoyadas en APIS (como POSIX threads).&lt;br /&gt;
&lt;br /&gt;
Para aumentar su eficiencia, un programa en ejecución debe crear tantos hilos como el doble del número de procesadores del los que disponga el sistema. Por ejemplo: 4 hilos para un programa ejecutado con 2 procesadores.&lt;br /&gt;
&lt;br /&gt;
Las principales ventajas del uso de hilos son:&lt;br /&gt;
&lt;br /&gt;
*'''Menor penalización''' en cuanto a conmutación. Ya que sólo se produce un salto en la ejecución de código del proceso, no interviene el planificador de procesos.&lt;br /&gt;
&lt;br /&gt;
*Dos hilos de un mismo proceso '''comparten memoria''' aprovechando mejor los recursos y eliminando los mecanismos de comunicación necesarios para soluciones implementadas en varios procesos.&lt;br /&gt;
&lt;br /&gt;
*Con un solo procesador es posible que una línea de proceso haga uso de una llamada al sistema bloqueante. En este caso se puede llamar a otro hilo del mismo proceso en lugar de conmutar a otro proceso externo, ahorrando así tiempo de conmutación asociado a la ejecución del planificador de procesos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Ejemplo =&lt;br /&gt;
&lt;br /&gt;
El siguiente es un código en C de ejemplo en el que se muestra la creación de dos hilos. Se hace uso de la llamada al sistema ''sleep'' que hace que el proceso pase a estado bloqueado durante N segundos. Nótese que al compartir la variable ''a'', ambos hilos modifican su valor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;pthread.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int a = 10;&lt;br /&gt;
&lt;br /&gt;
void *codigo_hilo1(void *arg)&lt;br /&gt;
{&lt;br /&gt;
	sleep(10);&lt;br /&gt;
	a = a - 2;&lt;br /&gt;
	printf(&amp;quot;Soy el hilo 1 y la variable a vale %d\n&amp;quot;, a);&lt;br /&gt;
	return NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void *codigo_hilo2(void *arg)&lt;br /&gt;
{&lt;br /&gt;
	sleep(5);&lt;br /&gt;
	a++;&lt;br /&gt;
	printf(&amp;quot;Soy el hilo 2 y la variable a vale %d\n&amp;quot;, a);&lt;br /&gt;
	return NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
	pthread_t hilo1, hilo2;&lt;br /&gt;
&lt;br /&gt;
	pthread_create(&amp;amp;hilo1, NULL, codigo_hilo1, NULL);&lt;br /&gt;
	pthread_create(&amp;amp;hilo2, NULL, codigo_hilo2, NULL);&lt;br /&gt;
&lt;br /&gt;
	pthread_join(hilo1, NULL);&lt;br /&gt;
	pthread_join(hilo2, NULL);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este ejemplo se compila en un terminal escribiendo: '''gcc -lpthread archivo.c'''&lt;/div&gt;</summary>
		<author><name>Pedfloand</name></author>	</entry>

	</feed>