<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?action=history&amp;feed=atom&amp;title=Planificador_de_procesos_de_THOS</id>
		<title>Planificador de procesos de THOS - Historial de revisiones</title>
		<link rel="self" type="application/atom+xml" href="https://1984.lsi.us.es/wiki-ssoo/index.php?action=history&amp;feed=atom&amp;title=Planificador_de_procesos_de_THOS"/>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Planificador_de_procesos_de_THOS&amp;action=history"/>
		<updated>2026-05-14T18:01:26Z</updated>
		<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Planificador_de_procesos_de_THOS&amp;diff=3300&amp;oldid=prev</id>
		<title>Robgarcal: Página creada con «&lt;source lang=&quot;C&quot;&gt; /*  * Main function: a welcome message and a simple scheduler  * Alessandro Rubini, 2009 GNU GPL2 or later  */ #include &lt;bathos/bathos.h&gt; #include &lt;bathos...»</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Planificador_de_procesos_de_THOS&amp;diff=3300&amp;oldid=prev"/>
				<updated>2016-01-22T09:57:53Z</updated>
		
		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt; ‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;* Main function: a welcome message and a simple scheduler  * Alessandro Rubini, 2009 GNU GPL2 or later: &lt;/span&gt; #include &amp;lt;bathos/bathos.h&amp;gt; #include &amp;lt;bathos...»&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Main function: a welcome message and a simple scheduler&lt;br /&gt;
 * Alessandro Rubini, 2009 GNU GPL2 or later&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;bathos/bathos.h&amp;gt;&lt;br /&gt;
#include &amp;lt;bathos/jiffies.h&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/hw.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void __attribute__((noreturn)) bathos_main(void)&lt;br /&gt;
{&lt;br /&gt;
	struct bathos_task *p;&lt;br /&gt;
	unsigned long now;&lt;br /&gt;
&lt;br /&gt;
	printf(&amp;quot;Hello, Bathos is speaking (built on %s)\n&amp;quot;, __DATE__);&lt;br /&gt;
&lt;br /&gt;
	now = jiffies;&lt;br /&gt;
	for (p = __task_begin; p &amp;lt; __task_end; p++)&lt;br /&gt;
		p-&amp;gt;release += now + 2;&lt;br /&gt;
&lt;br /&gt;
	while (1) {&lt;br /&gt;
		struct bathos_task *t;&lt;br /&gt;
&lt;br /&gt;
		for (t = p = __task_begin; p &amp;lt; __task_end; p++)&lt;br /&gt;
			if (p-&amp;gt;release &amp;lt; t-&amp;gt;release)&lt;br /&gt;
				t = p;&lt;br /&gt;
		while (time_before(jiffies, t-&amp;gt;release))&lt;br /&gt;
			;&lt;br /&gt;
		t-&amp;gt;arg = t-&amp;gt;job(t-&amp;gt;arg);&lt;br /&gt;
		t-&amp;gt;release += t-&amp;gt;period;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A priori, resulta difícil enteder el código, ya que se han declarado numerosas macros y constantes previamente. Cuando se ejecuta este código (main.c) en THOS se conmutan pequeños procesos que muestran en pantalla distintas cadenas de texto. A continuación se encuentra el código de dichos procesos (task-uart.c):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * A set of tasks that print timely messages to the serial port&lt;br /&gt;
 * Alessandro Rubini, 2009 GNU GPL2 or later&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;bathos/bathos.h&amp;gt;&lt;br /&gt;
#include &amp;lt;arch/hw.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static void *uart_out(void *arg)&lt;br /&gt;
{&lt;br /&gt;
	char *s = arg;&lt;br /&gt;
	puts(s);&lt;br /&gt;
	return arg;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static struct bathos_task __task t_quarter = {&lt;br /&gt;
	.name = &amp;quot;quarter&amp;quot;, .period = HZ/4,&lt;br /&gt;
	.job = uart_out, .arg = &amp;quot;.&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
static struct bathos_task __task t_second = {&lt;br /&gt;
	.name = &amp;quot;second&amp;quot;, .period = HZ,&lt;br /&gt;
	.job = uart_out, .arg = &amp;quot;S&amp;quot;,&lt;br /&gt;
	.release = 1,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
static struct bathos_task __task t_10second = {&lt;br /&gt;
	.name = &amp;quot;10second&amp;quot;, .period = 10 * HZ,&lt;br /&gt;
	.job = uart_out, .arg = &amp;quot;\n&amp;quot;,&lt;br /&gt;
	.release = 2,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
static struct bathos_task __task t_minute = {&lt;br /&gt;
	.name = &amp;quot;minute&amp;quot;, .period = 60 * HZ,&lt;br /&gt;
	.job = uart_out, .arg = &amp;quot;minute!\n&amp;quot;,&lt;br /&gt;
	.release = 3,&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como se puede observar el parámetro '''.arg''' es la cadena de texto a la que accede '''uart_out''' para posteriormete mostrársela al usuario.&lt;br /&gt;
&lt;br /&gt;
De esta forma al ejecutarse el código de ''main.c'' se producirá lo siguiente:&lt;br /&gt;
&lt;br /&gt;
Por cada cuarto de segundo que pase se mostrará en pantalla &amp;quot;.&amp;quot;, cuando pase un segundo &amp;quot;S&amp;quot;, cuando pasen 10 segundos veremos un salto de línea y cuando pase un minuto se mostrará &amp;quot;minute!&amp;quot; y se producirá un salto de línea.&lt;br /&gt;
&lt;br /&gt;
Visto esto, podemos deducir que el planificador conmutará entre los distintos procesos en función del tiempo que haya pasado para el usuario.&lt;/div&gt;</summary>
		<author><name>Robgarcal</name></author>	</entry>

	</feed>