An unconventional proposal: using the x86 architecture as the ubiquitous virtual standard architecture

J. Liedtke, N. Islam, T. Jaeger, Vsevolod Panteleenko, Yoonho Park
{"title":"An unconventional proposal: using the x86 architecture as the ubiquitous virtual standard architecture","authors":"J. Liedtke, N. Islam, T. Jaeger, Vsevolod Panteleenko, Yoonho Park","doi":"10.1145/319195.319231","DOIUrl":null,"url":null,"abstract":"There are 100+ million computers in the world. Even smaller organizations have easily 100+ machines; 10,000+ are typical for medium-sized organizations like a university or a bank. Current network technology is so ubiqitious and so powerful that we increasingly use these crowds of computers as one “technical being” instead of thinking of them as single machines. Consequently, we try to support distributed applications, not only by moving data around but also by remote execution of downloaded/uploaded code (applets, servlets) and even dynamically migrating active objects, i.e., curently executing programs (agents, load distribution). Unfortunately, not all of these 100+ million machines are compatible with each other. Currently, in the workstation/PC/NC segment, we see about 7 different hardware architectures: x86, PowerPC, Alpha, Mips, Sparc, PA-Risc, 68K. Some architectures are likely to disappear over time, e.g. 68K; however, new ones will show up (perhaps Intel’s IA-64). Heterogeneity will probably remain a problem over the next decade. More or less compatible OS APIs and tools, in particular compilers, help to move a source program from an x-machine to a y-machine. Moving a compiled program is harder; moving a currently executing program (migrating) between x and y is the hardest. One approach to move compiled programs between architectures is based on architectureindependent intermediate representations for compiled programs, e.g. Java bytecodes [10] or slim binaries [6]. However, it does not seem likely that in the near future all compilers will use a single intermediate language. (The language community has dreamed about the UNCOL (unitary compiler language) approach for nearly 40 years [15]. The UNCOL idea is to have a single language-independent code generation interface and thus architectureindependent compilers.) So the mentioned approach is restricted to certain programming languages and does not (yet?) give us general mobility for compiled programs. To solve the inter-architecture mobility problem for portable agents and for load distribution, we must be able to migrate a currently executing program with all its data, including temporary stack and heap data. A first approach to this problem is the ubiquitous interpreter. For example, the Aglets system [9] uses a JVM; Ara [11] uses Tcl. A second approach [14] is based on generating special (native) code that permits migration at certain synchronization points (“bus stops”) (Per architecture, a native-code version was generated when the source was compiled.). Similar to the techniques mentioned in the previous paragraph, both solutions suffer from the fact that they are specific to a single language.","PeriodicalId":335784,"journal":{"name":"Proceedings of the 8th ACM SIGOPS European workshop on Support for composing distributed applications","volume":"265 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"1998-09-07","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"4","resultStr":null,"platform":"Semanticscholar","paperid":null,"PeriodicalName":"Proceedings of the 8th ACM SIGOPS European workshop on Support for composing distributed applications","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.1145/319195.319231","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
引用次数: 4

Abstract

There are 100+ million computers in the world. Even smaller organizations have easily 100+ machines; 10,000+ are typical for medium-sized organizations like a university or a bank. Current network technology is so ubiqitious and so powerful that we increasingly use these crowds of computers as one “technical being” instead of thinking of them as single machines. Consequently, we try to support distributed applications, not only by moving data around but also by remote execution of downloaded/uploaded code (applets, servlets) and even dynamically migrating active objects, i.e., curently executing programs (agents, load distribution). Unfortunately, not all of these 100+ million machines are compatible with each other. Currently, in the workstation/PC/NC segment, we see about 7 different hardware architectures: x86, PowerPC, Alpha, Mips, Sparc, PA-Risc, 68K. Some architectures are likely to disappear over time, e.g. 68K; however, new ones will show up (perhaps Intel’s IA-64). Heterogeneity will probably remain a problem over the next decade. More or less compatible OS APIs and tools, in particular compilers, help to move a source program from an x-machine to a y-machine. Moving a compiled program is harder; moving a currently executing program (migrating) between x and y is the hardest. One approach to move compiled programs between architectures is based on architectureindependent intermediate representations for compiled programs, e.g. Java bytecodes [10] or slim binaries [6]. However, it does not seem likely that in the near future all compilers will use a single intermediate language. (The language community has dreamed about the UNCOL (unitary compiler language) approach for nearly 40 years [15]. The UNCOL idea is to have a single language-independent code generation interface and thus architectureindependent compilers.) So the mentioned approach is restricted to certain programming languages and does not (yet?) give us general mobility for compiled programs. To solve the inter-architecture mobility problem for portable agents and for load distribution, we must be able to migrate a currently executing program with all its data, including temporary stack and heap data. A first approach to this problem is the ubiquitous interpreter. For example, the Aglets system [9] uses a JVM; Ara [11] uses Tcl. A second approach [14] is based on generating special (native) code that permits migration at certain synchronization points (“bus stops”) (Per architecture, a native-code version was generated when the source was compiled.). Similar to the techniques mentioned in the previous paragraph, both solutions suffer from the fact that they are specific to a single language.
一个非常规的建议:使用x86架构作为无处不在的虚拟标准架构
世界上有1亿多台电脑。即使是较小的组织也很容易拥有100多台机器;在大学或银行等中等规模的机构中,通常会有1万多名员工。当前的网络技术是如此无处不在,如此强大,以至于我们越来越多地将这些计算机群作为一个“技术存在”来使用,而不是将它们视为单个机器。因此,我们尝试支持分布式应用程序,不仅通过移动数据,还通过远程执行下载/上传的代码(applet, servlet),甚至动态迁移活动对象,即当前正在执行的程序(代理,负载分发)。不幸的是,并非所有这1亿多台机器都彼此兼容。目前,在工作站/PC/NC领域,我们看到大约7种不同的硬件架构:x86、PowerPC、Alpha、Mips、Sparc、PA-Risc、68K。有些架构可能会随着时间的推移而消失,例如68K;然而,新的将会出现(可能是英特尔的IA-64)。未来十年,异质性可能仍将是一个问题。或多或少兼容的OS api和工具,特别是编译器,有助于将源程序从x机移动到y机。移动一个编译过的程序比较困难;在x和y之间移动当前正在执行的程序(迁移)是最难的。在体系结构之间移动已编译程序的一种方法是基于已编译程序的与体系结构无关的中间表示,例如Java字节码[10]或精简二进制文件[6]。然而,在不久的将来,所有编译器似乎不太可能使用单一的中间语言。近40年来,语言社区一直梦想着UNCOL(统一编译语言)方法[15]。UNCOL的想法是有一个独立于语言的代码生成接口,从而独立于架构的编译器。因此,上述方法仅限于某些编程语言,并不能(还没有?)为我们提供编译程序的通用移动性。为了解决可移植代理和负载分配的架构间移动性问题,我们必须能够迁移当前正在执行的程序及其所有数据,包括临时堆栈和堆数据。解决这个问题的第一种方法是无处不在的解释器。例如,Aglets系统[9]使用JVM;Ara[11]使用Tcl。第二种方法[14]是基于生成特殊的(本地)代码,允许在某些同步点(“公交车站”)进行迁移(每个架构,在编译源代码时生成本地代码版本)。与前一段提到的技术类似,这两种解决方案都有一个缺点,即它们特定于一种语言。
本文章由计算机程序翻译,如有差异,请以英文原文为准。
求助全文
约1分钟内获得全文 求助全文
来源期刊
自引率
0.00%
发文量
0
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
确定
请完成安全验证×
copy
已复制链接
快去分享给好友吧!
我知道了
右上角分享
点击右上角分享
0
联系我们:info@booksci.cn Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。 Copyright © 2023 布克学术 All rights reserved.
京ICP备2023020795号-1
ghs 京公网安备 11010802042870号
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术官方微信