<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Determinismo Temporal</title>
	<atom:link href="http://determinismotemporal.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://determinismotemporal.wordpress.com</link>
	<description>Blog sobre Sistemas de Tempo Real</description>
	<lastBuildDate>Tue, 26 Aug 2008 01:15:29 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='determinismotemporal.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Determinismo Temporal</title>
		<link>http://determinismotemporal.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://determinismotemporal.wordpress.com/osd.xml" title="Determinismo Temporal" />
	<atom:link rel='hub' href='http://determinismotemporal.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Extensão do algoritmo de Liu e Layland</title>
		<link>http://determinismotemporal.wordpress.com/2008/08/25/extensao-do-algoritmo-de-liu-e-layland/</link>
		<comments>http://determinismotemporal.wordpress.com/2008/08/25/extensao-do-algoritmo-de-liu-e-layland/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 01:15:29 +0000</pubDate>
		<dc:creator>tfraga</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Extensão]]></category>
		<category><![CDATA[Layland]]></category>
		<category><![CDATA[Liu]]></category>
		<category><![CDATA[Rate Monotonic]]></category>

		<guid isPermaLink="false">http://determinismotemporal.wordpress.com/?p=13</guid>
		<description><![CDATA[Modified Rate-Monotonic Algorithm for Scheduling Periodic Jobs with Deferred Deadlines O artigo trata de uma extensão do clássico algoritmo de Taxa Monotônica para o caso de tarefas com deadline maior que o período. O algoritmo descrito é semi-estático e orientado a prioridades. O artigo é estruturado em seis partes, que serão descritas a seguir. A [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=determinismotemporal.wordpress.com&amp;blog=3947874&amp;post=13&amp;subd=determinismotemporal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="text-decoration:underline;"><strong>Modified Rate-Monotonic Algorithm for Scheduling Periodic Jobs with Deferred Deadlines</strong></span></p>
<p style="margin-bottom:0;" lang="pt-BR" align="justify">O artigo trata de uma extensão do clássico algoritmo de Taxa Monotônica para o caso de tarefas com <em>deadline</em><span style="font-style:normal;"> maior que o período. O algoritmo descrito é semi-estático e orientado a prioridades. O artigo é estruturado em seis partes, que serão descritas a seguir.</span></p>
<p style="margin-bottom:0;" lang="pt-BR" align="justify"><span style="font-style:normal;">A primeira parte é a introdução. Nela os autores apresentam os conceitos básicos de tarefas e escalonadores. Apresentam também a motivação por detrás da modificação: estender o <em>deadline</em><span style="font-style:normal;"> além do período é uma técnica utilizada em situações de sobrecarga transiente.</span></span></p>
<p style="margin-bottom:0;" lang="pt-BR" align="justify"><span style="font-style:normal;">A segunda parte trata de uma caracterização melhor das tarefas com <em>deadline</em><span style="font-style:normal;"> maior que o período. São apresentados conceitos e fórmulas que serão utilizadas principalmente na prova formal das características do novo algoritmo.</span></span></p>
<p style="margin-bottom:0;font-style:normal;" lang="pt-BR" align="justify">A terceira parte apresenta o algoritmo em si. A modificação divide as requisições em dois grupos: as antigas e as atuais. Para a determinação das prioridades das requisições, foram apresentadas três regras:</p>
<ol type="i">
<li>
<p style="margin-bottom:0;font-style:normal;" lang="pt-BR" align="justify">Todas as requisições atuais possuem prioridade menor que as 	antigas;</p>
</li>
<li>
<p style="margin-bottom:0;font-style:normal;" lang="pt-BR" align="justify">As prioridades de todas as requisições em cada grupo seguem as 	regras do algoritmo de Taxa Monotônica;</p>
</li>
<li>
<p style="margin-bottom:0;" lang="pt-BR" align="justify"><span style="font-style:normal;">Todos 	as requisições antigas da mesma tarefa são escalonadas e 	executadas de forma <em>FIFO </em><span style="font-style:normal;">(<em>First 	In, First Out</em><span style="font-style:normal;">).</span></span></span></p>
</li>
</ol>
<p style="margin-bottom:0;font-style:normal;" lang="pt-BR" align="justify">É apresentada ainda uma forma de implementação desse algoritmo. Não entrarei em detalhes nesse <em>post</em>, mas deve-se dizer que sua implementação não requer grandes mudanças em um <em>framework</em> que utiliza escalonamento de Taxa Monotônica.</p>
<p style="margin-bottom:0;font-style:normal;" lang="pt-BR" align="justify">A quarta e a quinta parte tratam da optimalidade do algoritmo e análise de um caso especial de tarefas no qual o algoritmo não é ótimo, respectivamente. Os seguintes corolários são válidos (considere a diferença entre o <em>deadline </em>de uma tarefa e o seu período como δ e o tempo de processamento dessa tarefa como τ):</p>
<ol type="i">
<li>
<p style="margin-bottom:0;font-style:normal;" lang="pt-BR" align="justify">O algoritmo é ótimo para escalonar tarefas cuja diferença entre o 	<em>deadline </em>e o período é igual a ou maior que o maior período <em>p</em><sub><em>1 </em></sub>de todas as tarefas;</p>
</li>
<li>
<p style="margin-bottom:0;font-style:normal;" lang="pt-BR" align="justify">O algoritmo é ótimo para escalonar um conjunto de duas tarefas, 	contanto que δ<sub>2</sub> ≥ τ<sub>2</sub> e δ<sub>1</sub> ≥ p<sub>1</sub>.</p>
</li>
</ol>
<p style="margin-bottom:0;font-style:normal;" lang="pt-BR" align="justify">Entretanto, esse algoritmo não é ótimo no caso que o <em>deadline</em> de uma tarefa é o dobro do seu período, para todas as tarefas do conjunto.</p>
<p style="margin-bottom:0;font-style:normal;" lang="pt-BR" align="justify">A última parte apresenta uma forma de tratar o caso de tratar um conjunto de tarefas que possuas tarefas que necessitem ser completadas até o seu período e outras com <em>deadline</em> maior que seu período. Nesse caso, as tarefas pertencentes à primeira classe são consideradas urgentes e são tratadas como tarefas antigas, o que garante a elas uma prioridade alta.</p>
<p style="margin-bottom:0;font-style:normal;" lang="pt-BR" align="justify"><span style="text-decoration:underline;">Referências</span></p>
<p style="margin-bottom:0;font-style:normal;text-decoration:none;" lang="pt-BR" align="justify">SHIN, Wei Kuan, LIU, Jane W. S., LIU, Chung L. (1993) “<span lang="en-US">Modified Rate-Monotonic Algorithm for Scheduling Periodic Jobs with Deferred Deadlines”.</span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/determinismotemporal.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/determinismotemporal.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/determinismotemporal.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/determinismotemporal.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/determinismotemporal.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/determinismotemporal.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/determinismotemporal.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/determinismotemporal.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/determinismotemporal.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/determinismotemporal.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/determinismotemporal.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/determinismotemporal.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/determinismotemporal.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/determinismotemporal.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/determinismotemporal.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/determinismotemporal.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=determinismotemporal.wordpress.com&amp;blog=3947874&amp;post=13&amp;subd=determinismotemporal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://determinismotemporal.wordpress.com/2008/08/25/extensao-do-algoritmo-de-liu-e-layland/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cc7c08e0cac48ede7e72ef291468dd90?s=96&#38;d=identicon" medium="image">
			<media:title type="html">tfraga</media:title>
		</media:content>
	</item>
		<item>
		<title>Relatório sobre algoritmos de escalonamento para tarefas periódicas</title>
		<link>http://determinismotemporal.wordpress.com/2008/07/04/relatorio-sobre-algoritmos-de-escalonamento-para-tarefas-periodicas/</link>
		<comments>http://determinismotemporal.wordpress.com/2008/07/04/relatorio-sobre-algoritmos-de-escalonamento-para-tarefas-periodicas/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 18:15:14 +0000</pubDate>
		<dc:creator>tfraga</dc:creator>
				<category><![CDATA[Relatórios]]></category>

		<guid isPermaLink="false">http://determinismotemporal.wordpress.com/?p=7</guid>
		<description><![CDATA[1. Sejam P1(5, 10, 10) e P2(20, 40, 40)‏ -Calcule a utilização (U)‏ -Mostre um escalonamento praticável usando EDF. -Demonstre que um escalonamento praticável baseado em prioridades fixas existe ou prove que não pode existir. 1.3) Como a tarefa 2 possui um período múltiplo em relação à tarefa 1 (que possui maior prioridade), uma condição [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=determinismotemporal.wordpress.com&amp;blog=3947874&amp;post=7&amp;subd=determinismotemporal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>1. Sejam P1(5, 10, 10) e P2(20, 40, 40)‏<br />
-Calcule a utilização (U)‏<br />
-Mostre um escalonamento praticável usando EDF.<br />
-Demonstre que um escalonamento praticável baseado em prioridades fixas existe ou prove que não pode existir.</strong></p>
<div id="attachment_9" class="wp-caption alignnone" style="width: 178px"><a href="http://determinismotemporal.files.wordpress.com/2008/07/screenshot1.png"><img class="size-medium wp-image-9" src="http://determinismotemporal.files.wordpress.com/2008/07/screenshot1.png?w=168&#038;h=114" alt="Utilização" width="168" height="114" /></a><p class="wp-caption-text">Utilização</p></div>
<div id="attachment_10" class="wp-caption alignnone" style="width: 310px"><a href="http://determinismotemporal.files.wordpress.com/2008/07/screenshot2.png"><img class="size-medium wp-image-10" src="http://determinismotemporal.files.wordpress.com/2008/07/screenshot2.png?w=300&#038;h=225" alt="Escalonamento usando EDF no Cheddar" width="300" height="225" /></a><p class="wp-caption-text">Escalonamento usando EDF no Cheddar</p></div>
<p><!-- 		@page { size: 8.5in 11in; margin: 0.79in } 		P { margin-bottom: 0.08in } --></p>
<p style="margin-bottom:0;" align="justify">1.3) Como a tarefa 2 possui um período múltiplo em relação à tarefa 1 (que possui maior prioridade), uma condição necessária e suficiente para que o escalonamento <em>Rate Monotonic </em><span style="font-style:normal;">possa ser realizado é que a taxa de utilização seja menor ou igual à 1. A taxa de utilização calculada anteriormente é igual a 1, portanto existe um escalonamento praticável baseado em prioridades fixas.</span></p>
<p style="margin-bottom:0;" align="justify">
<p style="margin-bottom:0;" align="justify"><strong>2. Sejam P1 = (3, 9, 6), P2 = (4, 18, 12) e P3 = (4, 12, 10).<br />
-Qual a utilização do processador U<br />
-Mostre que um escalonamento RM existe ou não.<br />
-Mostre que um escalonamento EDF existe ou não.<br />
-Mostre que um escalonamento DM existe ou não.</strong></p>
<div id="attachment_11" class="wp-caption alignnone" style="width: 221px"><a href="http://determinismotemporal.files.wordpress.com/2008/07/screenshot-1.png"><img class="size-medium wp-image-11" src="http://determinismotemporal.files.wordpress.com/2008/07/screenshot-1.png?w=211&#038;h=113" alt="Taxa de utilização para a segunda questão" width="211" height="113" /></a><p class="wp-caption-text">Taxa de utilização para a segunda questão</p></div>
<p style="margin-bottom:0;" align="justify"><!-- 		@page { size: 8.5in 11in; margin: 0.79in } 		P { margin-bottom: 0.08in } --></p>
<p style="margin-bottom:0;" align="justify"><span style="font-style:normal;">2.2 e 2.3) Ambos os modelos (EDF e RM) admitem que o</span> <em>deadline</em> de cada tarefa coincide com o seu período; no exemplo em questão, o <em>deadline</em><span style="font-style:normal;"> e o período são diferentes. Portanto, tais modelos não podem ser utilizados.</span></p>
<p style="margin-bottom:0;" align="justify">2.4) O escalonamento DM para o conjunto de tarefas dessa questão causa a perda de deadlines, como pode ser visto na figura abaixo:</p>
<div id="attachment_12" class="wp-caption alignnone" style="width: 283px"><a href="http://determinismotemporal.files.wordpress.com/2008/07/screenshot-2.png"><img class="size-medium wp-image-12" src="http://determinismotemporal.files.wordpress.com/2008/07/screenshot-2.png?w=273&#038;h=300" alt="Escalomanento DM no Cheddar" width="273" height="300" /></a><p class="wp-caption-text">Escalomanento DM no Cheddar</p></div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/determinismotemporal.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/determinismotemporal.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/determinismotemporal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/determinismotemporal.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/determinismotemporal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/determinismotemporal.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/determinismotemporal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/determinismotemporal.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/determinismotemporal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/determinismotemporal.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/determinismotemporal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/determinismotemporal.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/determinismotemporal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/determinismotemporal.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/determinismotemporal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/determinismotemporal.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=determinismotemporal.wordpress.com&amp;blog=3947874&amp;post=7&amp;subd=determinismotemporal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://determinismotemporal.wordpress.com/2008/07/04/relatorio-sobre-algoritmos-de-escalonamento-para-tarefas-periodicas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cc7c08e0cac48ede7e72ef291468dd90?s=96&#38;d=identicon" medium="image">
			<media:title type="html">tfraga</media:title>
		</media:content>

		<media:content url="http://determinismotemporal.files.wordpress.com/2008/07/screenshot1.png?w=168" medium="image">
			<media:title type="html">Utilização</media:title>
		</media:content>

		<media:content url="http://determinismotemporal.files.wordpress.com/2008/07/screenshot2.png?w=300" medium="image">
			<media:title type="html">Escalonamento usando EDF no Cheddar</media:title>
		</media:content>

		<media:content url="http://determinismotemporal.files.wordpress.com/2008/07/screenshot-1.png?w=211" medium="image">
			<media:title type="html">Taxa de utilização para a segunda questão</media:title>
		</media:content>

		<media:content url="http://determinismotemporal.files.wordpress.com/2008/07/screenshot-2.png?w=273" medium="image">
			<media:title type="html">Escalomanento DM no Cheddar</media:title>
		</media:content>
	</item>
		<item>
		<title>Java e Sistemas de Tempo Real: Vale a pena utilizar?</title>
		<link>http://determinismotemporal.wordpress.com/2008/06/10/java-e-sistemas-de-tempo-real-vale-a-pena-utilizar/</link>
		<comments>http://determinismotemporal.wordpress.com/2008/06/10/java-e-sistemas-de-tempo-real-vale-a-pena-utilizar/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 01:10:13 +0000</pubDate>
		<dc:creator>tfraga</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tempo Real]]></category>

		<guid isPermaLink="false">http://determinismotemporal.wordpress.com/?p=3</guid>
		<description><![CDATA[Tradicionalmente, no desenvolvimento de sistemas de tempo real, os desenvolvedores escolhem linguagens como C, C++ e Ada para o desenvolvimento de seus projetos. Entretanto, a atual popularidade de Java faz com que vários desenvolvedores desejem trabalhar com essa linguagem também em sistemas de tempo real. Mas poderia Java ser usada para esse tipo de sistemas? [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=determinismotemporal.wordpress.com&amp;blog=3947874&amp;post=3&amp;subd=determinismotemporal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Tradicionalmente, no desenvolvimento de sistemas de tempo real, os desenvolvedores escolhem linguagens como C, C++ e Ada para o desenvolvimento de seus projetos. Entretanto, a atual popularidade de Java faz com que vários desenvolvedores desejem trabalhar com essa linguagem também em sistemas de tempo real. Mas poderia Java ser usada para esse tipo de sistemas?</p>
<p>Em sua versão tradicional, não. Java possui vários fatores que introduzem um indeterminismo temporal inaceitável em sistemas de tempo real <em>hard</em>, como o sistema de coleta de lixo e falta de um modelo de <em>threads </em>baseado em prioridades. Para solucionar esses problemas, introduziu-se um conjunto de especificações para a utilização de Java em sistemas de tempo real: a <em>Real-Time Specification for Java</em> (RTSJ). Esse <em>post</em> analisará a RTSJ e algumas soluções que surgiram a partir delas: a <em>Java Real-Time System</em> (Java RTS), da Sun; a <em>WebSphere Real Time</em>¸ da IBM; e a biblioteca <em>Javolution.</em></p>
<p><strong>A <em>Real-Time Specification for Java</em> (RTSJ) e a abordagem da Sun: a <em>Java Real-Time System</em> (Java RTS)</strong></p>
<p>A RTSJ é um conjunto de especificações de comportamento para a linguagem Java para permitir que a mesma possua comportamentos determinísticos, essenciais no desenvolvimento de sistemas de tempo real. A sua aprovação ocorreu em 2002, e a primeira implementação comercial em 2003. Algumas de suas maiores inovações são: acesso direto à memória física, <em>threads </em>de tempo real, e um novo modelo de gerência de memória.</p>
<p>O acesso direto à memória se dá através da classe <em>RawMemory</em>. Ela permite o acesso de dados inteiros e de ponto flutuante em endereços específicos do programa. Áreas da memória física podem ser definidas com determinadas características (por exemplo, RAM estática) e usadas para alocação de objetos [Brosgol 2003].</p>
<p>O sistema de <em>threads </em>de tempo real é subdividido em <em>RealtimeThread</em> e <em>NoHeapRealtimeThread.</em> A primeira é mais adequada a sistemas de tempo real <em>soft</em>, e é mais fácil de utilizar. A segunda é adequada a sistemas <em>hard</em>, já que não usa a <em>heap </em>e nem o coletor de lixo, necessitando de maior experiência em desenvolvimento de aplicações de tempo real. Cabe ressaltar que esse sistema possui 28 níveis de prioridade para as <em>threads</em> e foi desenvolvido para evitar completamente situações de inversão de prioridades.</p>
<p>O modelo de gerência de memória possui duas inovações principais: a inclusão de <em>scoped memory </em>e de <em>immortal memory</em>. A primeira é representada por um objeto que é instanciado no código e então utilizado para criar outros objetos dentro. As <em>threads</em> que executam dentro desse espaço de <em>scoped memory</em> governam o tempo de vida desses objetos. Quando não há <em>threads</em> no espaço de <em>scoped memory</em>, todos os objetos que estão dentro desse espaço são desalocados imediatamente [Bruno 2007]. Já objetos criados na segunda nunca estão sujeitos à coleta de lixo e persistem até o fim da aplicação. Portanto, esse segundo tipo de memória deve ser utilizado com muito cuidado e parcimônia.</p>
<p>A Java RTS foi a primeira implementação comercial totalmente de acordo com a RTSJ. Desenvolvida pela Sun, a primeira versão não contava com um sistema de coleta de lixo em tempo real e utilizava uma versão otimizada da <em>HotSpot</em> JVM. A versão 2.0 incluiu um sistema de coleta de lixo em tempo real. Esse pode apresentar uma vazão (<em>throughput)</em> menor que coletor que não seja de tempo real, mas é mais determinístico e possui métodos para otimizá-lo para cada aplicação.</p>
<p><strong>A solução da IBM: <em>WebSphere Real Time</em></strong></p>
<p>A base da solução da IBM para sistemas de tempo real é a Máquina Virtual de tempo real (<em>real-time</em> VM) J9 estendida com a tecnologia <em>Metronome</em> de coleta de lixo em tempo real, compilação <em>Ahead of Time</em>, e total suporte à RTSJ, tudo isso sendo executado em um sistema operacional Linux de tempo real em desenvolvimento [Porpora e Fulton 2006]. Essa solução visa atacar uma das maiores causas de indeterminismo em Java, a coleta de lixo. Examinemos melhor essa solução.</p>
<p>A tecnologia <em>Metronome</em> permite coleta de lixo com determinismo &#8220;<em>hard</em>&#8221; na ordem de menos de um milissegundo [Porpora e Fulton 2006]. Ao manter a coleta de lixo mesmo em sistemas de tempo real, a gerência de memória é bastante facilitada para os desenvolvedores, o que torna a solução da IBM muito atrativa.</p>
<p>A compilação <em>Ahead of Time</em> e o suporte à RTSJ aperfeiçoam ainda mais o desenvolvimento de sistemas. A primeira permite a pré-compilação de código, que pode ser utilizada para aumentar o desempenho, enquanto a segunda permite utilizar, entre outras técnicas, escalonamento de <em>threads</em> baseado em prioridades e manipuladores de eventos assíncronos.</p>
<p>O desenvolvimento do sistema operacional Linux de tempo real visa oferecer um suporte melhor aos sistemas desenvolvidos. Implementações prévias de sistemas Linux de tempo real impunham restrições sobre o uso dos processadores por tarefas de tempo real, ou funcionavam como extensões do kernel. A IBM visa aperfeiçoar o kernel para oferecer maior suporte a tarefas de tempo real e remover essas restrições.</p>
<p><strong><span style="color:#000000;">A biblioteca <em>Javolution</em></span></strong></p>
<p>A biblioteca <em>Javolution</em> foi desenvolvida principalmente por Jean-Marie Dautelle. Seu código é aberto baseado na licença BSD. Ela provê implementações alternativas determinísticas temporalmente e compatíveis com a RTSJ das interfaces da biblioteca padrão [Dautelle 2007]. Ela parte da seguinte premissa: as bibliotecas padrões não são adequadas para aplicações de segurança críticas, pois não são determinísticas em relação ao tempo; deve-se, portanto, desenvolver-se novas bibliotecas que sejam capazes de prover as mesmas funcionalidades das originais, mas de forma determinística, para poderem ser usadas em sistemas de tempo real. Essas bibliotecas devem ser totalmente compatíveis com a RTSJ (já que algumas das bibliotecas originais não são seguras para se utilizar com a <em>NoHeapRealtimeThread</em>).</p>
<p>A <em>Javolution</em> atualmente provê: implementações com determinismo temporal <em>hard</em> e alta eficiência das classes <em>util, lang, text, io </em>e<em> xml;</em> implementações em Java de <em>Structs </em>e <em>Unions</em> para facilitar a interface com aplicações em C/C++; serialização em XML com melhor desempenho e sem geração de lixo; entre outras coisas. Cabe lembrar que, por ser uma biblioteca, a <em>Javolution</em> pode ser utilizada pelas duas soluções acima apresentadas, ou mesmo em aplicações que não sejam de tempo real (para melhorar a previsibilidade e/ou a performance, já que algumas classes implementadas possuem desempenho melhor que as originais).</p>
<p><strong>Conclusão</strong></p>
<p>A partir do lançamento da RTSJ, desenvolver sistemas de tempo real utilizando a linguagem Java tornou-se uma realidade. Desenvolvedores agora possuem uma nova alternativa atraente a ser considerada para os projetos de sistemas de tempo real. Como exemplo prático de utilização de Java em sistemas de tempo real, pode-se citar a Marinha dos EUA, que utiliza a solução da IBM no seu projeto &#8220;<em>Total Ship Computing Environment</em>&#8220;, utilizado nos novos <em>destroyers</em> [Porpora e Fulton 2006].</p>
<p><strong>Referências</strong></p>
<p>Bosgrol, Benjamin M. (2003) &#8220;Introduction to Real-Time Java&#8221;, http://www.embedded.com/story/OEG20030430S0042, Maio.</p>
<p>Bruno, Eric. (2007) &#8220;Go Inside the Java Real-Time System&#8221;, http://www.devx.com/Java/Article/33475/0/page/1, Junho.</p>
<p>Dautelle, Jean-Marie. (2007) &#8220;Fully Time Deterministic Java<sup>tm</sup>&#8220;, http://javolution.org/doc/AIAA-2007-6184.pdf, Maio.</p>
<p>Fulton, Mike S. e Porpora, Gregory A. (2006) &#8220;Real-Time Java<sup>tm</sup> Solutions for Highly Deterministic Applications&#8221;, http://www.alphaworks.ibm.com/g/g.nsf/img/articles/$file/intrortjava.pdf, Maio.</p>
<p><strong>Leituras adicionais</strong></p>
<p>Bosgrol, Benjamin M. (2003) &#8220;Ada and Java: real-time advantages&#8221;, http://www.embedded.com/columns/technicalinsights/16100316?_requestid=135223, Maio.</p>
<p>Fulton, Michael S., Hard, Darren V. e Porpora, Gregory A. (2006) &#8220;IBM WebSphere Real Time: Providing predictable performance&#8221;, ftp://ftp.software.ibm.com/software/webservers/realtime/pdfs/WebSphere_Real_Time_Overview.pdf, Junho.</p>
<p>Heiss, Janice J. (2006) &#8220;Programming in Real-Time Specification for Java (RTSJ): A Conversation with Distinguished Engineer Greg Bollella&#8221;, http://java.sun.com/developer/technicalArticles/Interviews/Bollella_qa2.html, Maio.</p>
<p>Lammers, David. (2005) &#8220;IBM sets real-time tempo for Java code with Metronome&#8221;, http://www.embedded.com/news/embeddedindustry/170703019?pgno=1, Junho.</p>
<p>Mikhalenko, Peter. (2006) &#8220;Real-Time Java: An Introduction&#8221;, http://www.onjava.com/pub/a/onjava/2006/05/10/real-time-java-introduction.html?page=1, Junho.</p>
<p>Wikipedia. &#8220;Real Time Java&#8221;, http://en.wikipedia.org/wiki/Real_time_Java, Maio.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/determinismotemporal.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/determinismotemporal.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/determinismotemporal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/determinismotemporal.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/determinismotemporal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/determinismotemporal.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/determinismotemporal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/determinismotemporal.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/determinismotemporal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/determinismotemporal.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/determinismotemporal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/determinismotemporal.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/determinismotemporal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/determinismotemporal.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/determinismotemporal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/determinismotemporal.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=determinismotemporal.wordpress.com&amp;blog=3947874&amp;post=3&amp;subd=determinismotemporal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://determinismotemporal.wordpress.com/2008/06/10/java-e-sistemas-de-tempo-real-vale-a-pena-utilizar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cc7c08e0cac48ede7e72ef291468dd90?s=96&#38;d=identicon" medium="image">
			<media:title type="html">tfraga</media:title>
		</media:content>
	</item>
	</channel>
</rss>
