1 |
[en] AN ALTERNATIVE MODEL FOR CONCURRENT PROGRAMMING IN LUA / [pt] UM MODELO ALTERNATIVO PARA PROGRAMAÇÃO CONCORRENTE EM LUAALEXANDRE RUPERT ARPINI SKYRME 23 July 2008 (has links)
[pt] A popularização dos processadores multinúcleo e de
tecnologias como o hyper-threading evidencia uma mudança de
foco na evolução dos processadores. Essa mudança fomenta o
interesse por programação concorrente e a exploração de
paralelismo para obtenção de melhor desempenho. Entretanto,
os modelos atuais para programação concorrente são alvo de
críticas recorrentes, o que estimula a elaboração de
propostas alternativas. Este trabalho apresenta uma análise
crítica do multithreading preemptivo com compartilhamento de
memória, um modelo amplamente utilizado para programação
concorrente, e faz um breve apanhado de trabalhos que
abordam alternativas para programação concorrente. Em
seguida, propõe um modelo para programação concorrente
estruturado com a linguagem de programação Lua e descreve as
suas principais características e vantagens. Finalmente,
apresenta os resultados da avaliação de diversos aspectos de
uma biblioteca desenvolvida para implementar o modelo proposto. / [en] The popularization of multi-core processors and of
technologies such as hyper-threading indicates a different
approach to the evolution of processors. This new approach
brings about an increased interest in concurrent
programming and the exploration of parallelism in order to
achieve better performance. However, concurrent programming
models now in use are subject to recurring criticism, which
stimulates the development of alternative
proposals. This work presents a critical analysis of
preemptive multithreading with shared memory, which is a
widely used model for concurrent programming,
and brie y summarizes some studies that deal with
alternatives for concurrent programming. It then, proposes a
model for concurrent programming structured with the Lua
programming language and describes its main characteristics
and advantages. Finally, it presents the results of
an evaluation of several aspects of a library developed to
implement the proposed model.
|
2 |
[en] OPERATING SYSTEM KERNEL SCRIPTING WITH LUA / [pt] LUNATIK: SCRIPTING DE KERNEL DE SISTEMA OPERACIONAL COM LUALOURIVAL PEREIRA VIEIRA NETO 26 October 2011 (has links)
[pt] Existe uma abordagem de projeto para aumentar a flexibilidade de sistemas
operacionais, chamada sistema operacional extensível, que sustenta
que sistemas operacionais devem permitir extensoes para poderem atender
a novos requisitos. Existe também uma abordagem de projetos no desenvolvimento
de aplicações que sustenta que sistemas complexos devem permitir
que usuários escrevam scripts para que eles possam tomar as suas próprias
decisões de configuração em tempo de execução. Seguindo estas duas abordagens
de projeto, nos construímos uma infra-estrutura que possibilita que
usuários carreguem e executem dinamicamente scripts Lua dentro de kernels
de sistema operacional, aumentando a flexibilidade deles. Nesta dissertação,
nos apresentamos Lunatik, a nossa infra-estrutura para scripting de kernel
baseada em Lua, e mostramos um cenário de uso real no escalonamento
dinâmico da frequência e voltagem de CPU. Lunatik está implementado
atualmente tanto para NetBSD quanto para Linux. / [en] There is a design approach to improve operating system flexibility, called
extensible operating system, that supports that operating systems must
allow extensions in order to meet new requirements. There is also a design
approach in application development that supports that complex systems
should allow users to write scripts in order to let them make their own
configuration decisions at run-time. Following these two design approaches,
we have built an infrastructure that allows users to dynamically load and
run Lua scripts into operating system kernels, improving their flexibility.
In this thesis we present Lunatik, our scripting subsystem based on Lua,
and show a real usage scenario in dynamically scaling CPU frequency and
voltage. Lunatik is currently implemented both for NetBSD and Linux.
|
3 |
[en] UTILIZATION OF DHT IN DISTRIBUTED COMPUTING SYSTEMS / [pt] APLICAÇÕES DE DHT EM SISTEMAS DE MPUTAÇÃO DISTRIBUÍDAFELIPE FREIXO PINA 07 February 2012 (has links)
[pt] Arquiteturas P2P destacam-se pela descentralização e pelo incentivo
a cooperação entre nós. Essas características permitem que sistemas baseados
nesta arquitetura sejam tolerantes a falhas e que os recursos sejam distribu
ídos entre os nós (via replicação). A utilização da técnica de DHT na
criação de redes P2P permite que os sistemas sejam escaláveis. Ao contrário
do uso mais comum em sistemas de distribuição de conteúdo, este trabalho
investiga aplicacações da técnica de DHT em sistemas de computação distribu
ída, onde o recurso compartilhado é a capacidade de processamento de
cada nó. Quatro protocolos de roteamento de mensagens foram analisados
para identificar os mais adequados aos sistemas de computação distribuída
e aplicou-se o conceito de grupo de nós com o objetivo de aumentar a
tolerância a falhas e distribuir tarefas entre os nós da rede. / [en] P2P architectures are recognized for decentralization and incentive for
the cooperation among nodes. These characteristics allow for fault tolerance
and resource distribution among the nodes (by replication) to systems based
on the P2P architecture. Systems based in P2P networks built using the
DHT technique are scalable. Since this architecture is commonly used in
content distribution systems, in this work we investigate the utilization of
the DHT technique in distributed computing systems, where the shared
resources are the node’s computational power. Four routing protocols were
analyzed to identify the most appropriated for use in distributed computing
systems and applied the group concept to archive fault tolerance and
resource distribution among nodes.
|
4 |
[en] SAFE RECORD SHARING IN DYNAMIC PROGRAMMING LANGUAGES / [pt] COMPARTILHAMENTO SEGURO DE REGISTROS EM LINGUAGES DE PROGRAMAÇÃO DINÂMICASALEXANDRE RUPERT ARPINI SKYRME 29 February 2016 (has links)
[pt] Linguagens de programação dinâmicas estão cada vez mais populares e já
foram utilizadas para desenvolver uma ampla gama de aplicações. Enquanto
isso, processadores multi-núcleo se tornaram padrão, mesmo em computadores
pessoais e dispositivos móveis. Dessa forma, os programadores precisam
recorrer ao paralelismo para aprimorar o desempenho de seus programas.
Entretanto, a programação concorrente permanece difícil. Adicionalmente,
a despeito de avanços em linguagens estáticas, avaliamos que linguagens
dinâmicas ainda carecem de suporte adequado à concorrência. Nesta
tese argumentamos que o principal problema da programação concorrente é
a imprevisibilidade - comportamentos inesperados de programas, tais como
retornar valores descabidos. Observamos que a imprevisibilidade é mais
provável quando memória compartilhada é utilizada. Consequentemente,
propomos um modelo de comunicação para concorrência que visa disciplinar
o compartilhamento de memória em linguagens dinâmicas. O modelo
é baseado nos padrões emergentes de concorrência de não compartilhar dados
por padrão, imutabilidade de dados e tipos e efeitos (que transformamos
em capacidades). Ele demanda a utilização de objetos compartilháveis para
compartilhar dados e utiliza troca de mensagens para comunicação entre
fluxos de execução. Objetos compartilháveis podem ser compartilhados apenas para
leitura ou para leitura e escrita, o que permite acesso individual de
escrita e acessos paralelos de leitura. Implementamos um protótipo em Lua
para experimentar com o modelo na prática, bem como para conduzir uma
avaliação geral de desempenho. A avaliação demonstra que há benefícios na
utilização de memória compartilhada, mas ao mesmo tempo revela que os
controles utilizados para assegurar a disciplina ocasionam um impacto de
desempenho. / [en] Dynamic programming languages have become increasingly popular and
have been used to implement a range of applications. Meanwhile, multicore
processors have become the norm, even for desktop computers and
mobile devices. Therefore, programmers must turn to parallelism as a
means to improve performance. However, concurrent programming remains
difficult. Besides, despite improvements in static languages, we find dynamic
languages are still lacking in concurrency support. In this thesis, we argue
that the main problem with concurrent programming is unpredictability -
unexpected program behaviors, such as returning out-of-thin-air values. We
observe that unpredictability is most likely to happen when shared memory
is used. Consequently, we propose a concurrency communication model to
discipline shared memory in dynamic languages. The model is based on
the emerging concurrency patterns of not sharing data by default, data
immutability, and types and effects (which we turn into capabilities). It
mandates the use of shareable objects to share data. Besides, it establishes
that the only means to share a shareable object is to use message passing.
Shareable objects can be shared as read-write or read-only, which allows
both individual read-write access and parallel read-only access to data. We
implemented a prototype in Lua, called luashare, to experiment with the
model in practice, as well as to carry out a general performance evaluation.
The evaluation showed us that safe data sharing makes it easier to allow
for communication among threads. Besides, there are situations where
copying data around is simply not an option. However, enforcing control
over shareable objects has a performance cost, in particular when working
with nested objects.
|
5 |
[en] CONCURRENCY AND COORDINATION MODELS FOR EVENT-DRIVEN IN LUA / [pt] MODELOS DE CONCORRÊNCIA E COORDENAÇÃO PARA O DESENVOLVIMENTO DE APLICAÇÕES ORIENTADAS A EVENTOS EM LUABRUNO OLIVEIRA SILVESTRE 08 February 2010 (has links)
[pt] O uso de multithreading tem se popularizado como forma de separar a execução
de tarefas concorrentes e de alcançar maior desempenho aproveitando melhor o
tempo das CPUs. No entanto, a programação com threads não é uma tarefa fácil.
O uso dos recursos compartilhados deve ser coordenado, pois o acesso concorrente
aos mesmos, na maioria dos casos, gera inconsistência na aplicação. O
modelo de desenvolvimento orientado a eventos foi apontado por alguns como
uma boa alternativa na criação de aplicações. Nesse modelo, a tarefa é realizada
por um ou mais eventos, e um loop principal fica responsável por receber
e despachar esses eventos. Investigamos, neste trabalho, um modelo em Lua que
combina orientação a eventos com preempção sem trazer de volta os problemas
de programação concorrente. Investigamos também como características da linguagem
podem ser utilizadas para prover mecanismos de coordenação flexíveis.
Essas características podem ajudar, por exemplo, a compor novos mecanismos a
partir de existentes. / [en] Multithreading has become popular as a way to organize concurrent tasks and
achieve better performance from CPUs. However, programming with threads is
not an easy task. Usage of shared resources needs to be coordinated because
concurrent access to them, in most cases, may create inconsistency in the
application. The event-driven model has been pointed as a good alternative
to multithreaded programming. In this model, a task is performed by one or
more events, where a main loop is responsible for receiving and dispatching
these events. In this work, we investigate a model to combine event-driven
and preemption in Lua without bringing back all the concurrent programming
problems. We also investigate how the language’s characteristics can be used
to provide flexible coordination mechanisms. These characteristics can aid, for
example, to create new mechanisms based on the ones already existent.
|
6 |
[en] CONCURRENT PROGRAMMING IN LUA: REVISITING THE LUAPROC LIBRARY / [pt] PROGRAMAÇÃO CONCORRENTE EM LUA: REVISITANDO A BIBLIOTECA LUAPROCLIANDER MILLAN FERNANDEZ 09 June 2017 (has links)
[pt] Nos últimos anos, a tendência por aumentar o desempenho de um microprocessador, como uma solução alternativa para a crescente demanda por recursos computacionais de aplicações e sistemas, diminuiu significativamente. Isto levou a um aumento do interesse em utilizar ambientes multi-processados.
Embora muitos modelos e bibliotecas tenham sido desenvolvidos para oferecer suporte à programação concorrente, garantir que vários fluxos de execução acessem recursos compartilhados de forma controlada continua a ser uma tarefa complexa. A biblioteca Luaproc, que oferece suporte para a concorrência em
Lua, mostrou alguma promessa em termos de desempenho e casos de uso. Nesta tese, nós estudamos a biblioteca Luaproc e incorporamos-lhe novas funcionalidades a fim de torná-la mais amigável e estender o seu uso a novos cenários. Primeiro, nós apresentamos as motivações para nossas extensões a Luaproc, discutindo formas alternativas de lidar com as limitações existentes. Em seguida, nós apresentamos requisitos, características da implementação e limitações associadas a cada um dos mecanismos desenvolvidos como soluções alternativas a essas limitações. Finalmente, nós utilizamos as funcionalidades incorporadas na implementação de algumas aplicações concorrentes, a fim de avaliar o desempenho e testar o funcionamento adequado de tais mecanismos. / [en] In recent years, the tendency to increase the performance of a microprocessor, as an alternative solution to the increasing demand for computational resources of both applications and systems, has decreased
significantly. This has led to an increase of the interest in employing multiprocessing environments. Although many models and libraries have been developed to offer support for concurrent programming, ensuring that several execution ows access shared resources in a controlled way remains a complex task. The Luaproc library, which provides support for concurrency in Lua, has shown some promise in terms of performance and cases of use. In this thesis, we study the Luaproc library and incorporate to it new functionalities in order to make it more user friendly and extend its use to new scenarios. First, we introduce the motivations to our extensions to Luaproc, discussing alternative ways of dealing with the existing limitations. Then, we present requirements, characteristics of the implementation, and limitations associated to each of the mechanisms implemented as alternative solutions to these limitations. Finally, we employ the incorporated functionalities in implementing some concurrent applications, in order to evaluate the performance and test the proper functioning of such mechanisms.
|
7 |
[en] A FOREIGN FUNCTION INTERFACE FOR PALLENE / [pt] UMA INTERFACE DE FUNÇÕES EXTERNAS PARA PALLENEGABRIEL COUTINHO DE PAULA 10 December 2021 (has links)
[pt] Pallene é um subconjunto estaticamente tipado da linguagem de programação
Lua, projetada para atuar como uma linguagem de sistemas em
contraparte ao scripting de Lua, e usada para escrever bibliotecas de baixo
nível e módulos de extensão para Lua. Nesse sentido, Pallene é uma linguagem
companheira, usada sempre lado a lado com Lua, compartilhando seu runtime.
Pallene, tanto como uma linguagem de sistema em contraparte a Lua e
como uma ponte entre Lua e outras linguagens, deve fornecer um mecanismo
de interação com bibliotecas e serviços de sistema escritos em uma linguagem
de baixo nível como C. Para este fim, apresentamos um design e implementação
de Interface de Função Estrangeira (IFE) para Pallene, que permite chamar
funções externas que seguem as convenções de chamada C, e manipular
representações de dados C diretamente.
Nosso design equilibra flexibilidade e segurança seguindo uma abordagem
empírica, em que preferimos sacrificar flexibilidade hipotética a menos que
vejamos um caso de uso que nos faça comprometer em segurança. Nossa
implementação tem como objetivo ser tão portátil quanto o Pallene, além de
ter um bom desempenho e ser simples. Uma vez que a implementação de
Pallene já depende de um compilador de C, a nossa IFE usa agressivamente o
compilador de C já disponível para sua vantagem. Dessa forma, podemos usar
diretamente os arquivos de cabeçalho de bibliotecas externas, permitindo que
a IFE verifique a exatidão das ligações de função externa e que use macros de
C. / [en] Pallene is a statically typed subset of the Lua programming language, designed to act as a system-language counterpart to Lua’s scripting, and used to write lower-level libraries and extension modules for Lua. In this sense, Pallene is a companion language, always intended to be used side-by-side with
Lua, sharing its runtime. Pallene, both as a system-language counterpart to Lua and as a bridge between Lua and foreign languages, must provide a mechanism to interact with libraries and system services written in a low-level language like C. To this end, we present a Foreign Function Interface (FFI) design and implementation for Pallene, which allows for calling external functions that follow C calling conventions and manipulating C data representations directly. Our design balances flexibility and safety following an empirical approach, wherein we prefer to sacrifice hypothetical flexibility unless we see a
real use case that forces us to compromise on safety. Our implementation aims to be as portable as Pallene, as well as performant and simple. Since Pallene s implementation already depends on a C compiler, the FFI aggressively uses the already available C compiler to its advantage. This way, we can directly use foreign libraries header files, enabling the FFI to verify the correctness of function bindings and to use macro definitions.
|
8 |
[pt] A IMPLEMENTAÇÃO DE REGISTROS EM PALLENE / [en] THE IMPLEMENTATION OF RECORDS IN PALLENEGABRIEL DE QUADROS LIGNEUL 27 February 2020 (has links)
[pt] As características dinâmicas de linguagens de scripting introduzem um gargalo significativo no tempo de execução quando comparadas a linguagens de sistemas. A arquitetura scripting pode ser usada para melhorar o desempenho ruim de linguagens de scripting. O programador deve usar a linguagem de sistemas para tarefas que consomem muitos recursos, e a de scripting para flexibilidade. Entretanto, essa arquitetura tem duas falhas significativas quando usada para melhorar o desempenho de linguagens de
scripting. Primeiro, existe uma lacuna conceitual entre as duas linguagens, logo migrar da linguagem de scripting para linguagem de sistemas pode exigir enorme esforço. Segundo, existe um gargalo escondido ao manipular as estruturas de dados da linguagem de scripting a partir da linguagem de sistemas. Pallene é uma linguagem de sistemas projetada particularmente para Lua que almeja resolver essas duas falhas. Pallene é um subconjunto estaticamente tipado de Lua, o que facilita o processo de migração. Além disso, Pallene manipula diretamente as estruturas de dados de Lua sem introduzir gargalo. Neste trabalho, nós propomos dois tipos de registros para Pallene, e nós apresentamos a implementação do compilador de Pallene. Nós avaliamos o desempenho do nosso compilador para compará-la com Lua padrão, LuaJIT, e programas C que utilizam a API C de Lua. Nossos experimentos mostram que Pallene é competitiva com as soluções existentes para melhorar o desempenho de Lua. / [en] The dynamic features of scripting languages introduce significant overhead in execution time when compared to system languages. The scripting architecture can be used to improve the poor performance of scripting languages. The programmer should use a system language for resourceintensive tasks, and a scripting one for flexibility. However, this architecture has two significant flaws when used to improve the performance of scripting languages. First, there is a conceptual gap between both languages; so migrating from the scripting language to the system language may require enormous effort. Second, there is a hidden overhead when manipulating the scripting-language data structures from the system language. Pallene is a system language designed particularly for Lua that aims to solve these two issues. Pallene is a statically-typed subset of Lua, which facilitates the migration process. Moreover, Pallene manipulates Lua s data structures directly without introducing overhead. In this work, we propose two types of records for Pallene, and we present the implementation of the Pallene compiler. We benchmarked our compiler to compare it to standard Lua, LuaJIT, and C programs using the Lua-C API. Our experiments show that Pallene is competitive with the existing solutions to improve Lua s performance.
|
9 |
[en] A FRAMEWORK FOR COLLABORATIVE USE OF MOBILE DEVICES FOR REMOTE CONTROL OF SCIENTIFIC APPLICATIONS / [pt] UM FRAMEWORK PARA O USO COLABORATIVO DE DISPOSITIVOS MÓVEIS COMO FERRAMENTA DE CONTROLE REMOTO DE APLICAÇÕES CIENTÍFICASJONER MARTINS VEIGA DUARTE JUNIOR 24 July 2013 (has links)
[pt] Hoje em dia, o uso de dispositivos móveis se tornou bastante popular e criou maneiras diferentes de interação com sua interface sensível ao toque. Aplicações de visualização científica possuem um potencial muito grande de desfrutar dessas novas formas de interação, contudo o poder de processamento dos dispositivos móveis ainda não é suficiente para renderizar e-ou tratar o grande volume de dados que esse tipo de aplicação requer. Propomos um framework, seguindo um modelo cliente-servidor, que permite a utilização de dispositivos móveis para visualização e manipulação colaborativa de aplicações de visualização científica. No papel de servidor, a aplicação científica faz uso de uma biblioteca para compactar e enviar as imagens renderizadas para os clientes e também para tratar os eventos recebidos. No papel de cliente, está um aplicativo multiplataforma (iOS-Android) rodando nos dispositivos móveis, que interpreta os gestos de toque e exibe as imagens recebidas via rede Wi-Fi. O mesmo aplicativo é capaz de conectar em qualquer servidor, pois constrói a interface baseada numa descrição em Lua que o servidor fornece. Por fim, o framework proposto é avaliado em dois aplicativos industriais: Geresim e 3DReplay. / [en] Nowadays, mobile devices have become very popular bringing new ways of interaction with their touch-based interface. Scientific visualization applications have a great potential to take advantage of this new kind of interaction, but the processing capabilities of mobile devices are still not enough to render or process the amount of data this type of application requires. We propose a framework, working as a client-server model, which allows the use of mobile devices to collaboratively visualize and manipulate
scientific visualization applications. In the server role, the scientific application uses a library to compress and send rendered images to clients and also to process received events. In the client role, there is a multiplatform application (iOS-Android) running on mobile devices, which interpret touch
gestures and show the images received through Wi-Fi network. The same application is able to connect in any server, since it builds its interface from a description in Lua language supplied by the server. Lastly, we evaluate the proposed framework with two industrial applications: Geresim e 3DReplay.
|
10 |
[pt] ANALIZANDO O USO DE MEMORIA EM LUA / [en] PROFILING MEMORY IN LUAPABLO MARTINS MUSA 16 July 2020 (has links)
[pt] Inchaço de memória e um problema que ocorre quando a memória
consumida por um programa excede a expectativa do programador. Em
muitos casos, o inchaço de memória prejudica o desempenho ou, até
mesmo, interrompe a execução de aplicações. Detectar e consertar inchaços
de memória é uma tarefa difícil para programadores e, portanto, eles
costumam usar ferramentas para identificar e consertar problemas desta
natureza. Nas últimas duas décadas, muitos trabalhos e ferramentas foram
desenvolvidos com o intuito de ajudar programadores a abordar problemas
de inchaço de memória, entre eles perfiladores de memória. Apesar de
perfiladores de memória terem sido muito estudados nos últimos anos,
existe uma lacuna em relação a linguagens de script. Nessa dissertação,
nós estudamos perfiladores de memória para linguagens de script.
Primeiro, nos propomos uma classificação que divide as ferramentas em
manual e automática baseada em como elas são usadas pelos
programadores. Em seguida, após estudar ferramentas disponíveis em três
linguagens de script diferentes, nós experimentamos algumas das técnicas
estudadas ao construir dois perfiladores de memória automáticos para
ajudar programadores Lua a resolver inchaços de memória. Finalmente,
nós avaliamos ambas as ferramentas com relação a facilidade de integração
ao programa, a utilidade dos relatórios para o entendimento de programas
desconhecidos e para a localização de inchaços de memória e ao custo de
desempenho que elas geram. / [en] Memory bloat is a software problem that happens when the memory
consumption of a program exceeds the programmer s expectations. In
many cases, memory bloat hurts performance or even crashes applications.
Detecting and fixing memory bloat problems is a difficult task for
programmers and, thus, they usually need tools to identify and fix these
problems. The past two decades produced an extensive research and many
tools to help programmers tackle memory bloat, including memory
profilers. Although memory profilers have been largely studied in the last
years, there is a gap regarding scripting languages. In this thesis, we study
memory profilers in scripting languages. First, we propose a classification
in which we divide memory profilers in manual and automatic, based on
how the programmer uses the memory profiler. Then, after reviewing
memory profilers available in three different scripting languages, we
experiment some of the studied techniques by implementing two automatic
memory profilers to help Lua programmers deal with memory bloat.
Finally, we evaluate our tools regarding how easy it is to incorporate them
to a program, how useful their reports are to understand an unknown
program and track memory bloats, and how much overhead they impose.
|
Page generated in 0.0297 seconds