本文目錄一覽:
- 1、使用Java CORBA實現迭代法求平方根,要求精確到0.000001
- 2、什麼是 CORBA 。
- 3、java中rmi和corba的區別
- 4、Java 以下兩個要求 怎麼在Java中以程序的方式實現? (圍繞CORBA和IOR)
使用Java CORBA實現迭代法求平方根,要求精確到0.000001
上面while那句是控制迭代次數的。while那句不改變x的值。
因為x的平方=a,兩邊都除x,得到x=a/x,所以當x和
a/x的差值小到一定精度時就可以停止迭代了。fabs函數是求絕對值的。
什麼是 CORBA 。
CORBA(Common Object Request Broker Architecture公共對象請求代理體系結構)是由OMG組織制訂的一種標準的面向對象應用程序體系規範。或者說 CORBA體系結構是對象管理組織(OMG)為解決分散式處理環境(DCE)中,硬體和軟體系統的互連而提出的一種解決方案;OMG組織是一個國際性的非盈利組織,其職責是為應用開發提供一個公共框架,制訂工業指南和對象管理規範,加快對象技術的發展。
OMG組織成立後不久就制訂了OMA(Object Management Architecture,對象管理體系結構)參考模型,該模型描述了OMG規範所遵循的概念化的基礎結構。OMA由對象請求代理ORB、對象服務、公共設施、域介面和應用介面這幾個部分組成,其核心部分是對象請求代理ORB(Object Request Broker)。對象服務是為使用和實現對象而提供的基本服務集合;公共設施是向終端用戶應用程序提供的一組共享服務介面;域介面是為應用領域服務而提供的介面;應用介面是由開發商提供的產品,用於它們的介面,不屬於OMG標準的內容。ORB提供了一種機制,通過這種機制,對象可以透明的發出請求和接收響應。分布的、可以互操作的對象可以利用ORB構造可以互操作的應用。
CORBA標準由對象管理組織(OMG)設立並進行控制,CORBA定議了一系列API,通信協議,和物件/服務信息模型用於使得異質應用程序能夠互相操作,這些應用程序用不同的程序語言編寫,運行在不同的平台上。CORBA因此為定義明確的物件提供了平台和位置的透明性,這些物件是分散式計算平台的基礎。
CORBA分布計算技術,是由絕大多數分布計算平台廠商所支持和遵循的系統規範技術,具有模型完整、先進,獨立於系統平台和開發語言,被支持程度廣泛的特點,已逐漸成為分布計算技術的標準。COBRA標準主要分為3個層次:對象請求代理、公共對象服務和公共設施。最底層是對象請求代理ORB,規定了分布對象的定義(介面)和語言映射,實現對象間的通訊和互操作,是分布對象系統中的”軟匯流排”;在ORB之上定義了很多公共服務,可以提供諸如並發服務、名字服務、事務(交易)服務、安全服務等各種各樣的服務;最上層的公共設施則定義了組件框架,提供可直接為業務對象使用的服務,規定業務對象有效協作所需的協定規則。
CORBA(公共對象請求代理架構):這是個和微軟com,com+齊名的同類軟體技術規範,由OMT提出。
用於在不同進程(程序)之間,甚至是不同物理機器上的進程(程序)之間通訊。底層技術依靠RPC[遠程過程調用]實現。
面向對象的軟體,以數據為中心設計,對象類既具有模塊的封裝性和類屬等特性,還具有繼承特性
,極大地提高了類的可擴充性和可再用能力。對象類較之於傳統軟體的功能模塊而另具有的優點是:
(1)易於理解,具有完整的語義特徵;
(2)易於擴充和修改,具有較高的通用性和適應性;
(3)易於構造組裝,具有規範的外部介面。
開發應用組件必須遵循標準,以保證軟體組件的互操作性,只有遵循統一的標準,不同廠商的、不同時期的、不同程序設計風格的、不同編程語言的、不同操作系統的、不同平台上的軟體或軟體部件才能進行交流與合作。為此,OMG(ObjectManageGroup)提供了一個對象標準CORBA,它定義了一個網連對象的介面,使得對象可以同時工作。基於CORBA的對象請求代理ORB為客戶機/伺服器開發提供了中間件的新格式。
作為OMG成員的微軟公司撇開CORBA而另闢了COM(ComponetObjectModel),即組件對象模型,並把COM定位成基於對象的軟體開發模型,儘管COM被認為是微軟鼓噪出來的技術,但支持COM的開發工具卻不斷增多,其中大部分來自於微軟,包括VisualBasic和VisualC ++。
公共對象請求代理結構:CORBA標準
全球性網路使線上的所有設備和軟體成為全球共享的浩瀚的資源,計算機環境也從集中式發展到分散式環境,開放式系統的發展使用戶能夠透明地應用由不同廠商製造的不同機型不同平台所組成的異構型計算資源,因此,分散式處理和應用集成自然而然地成為人們的共同要求,那麼什麼是分散式處理和應用集成呢?它們的功能和關鍵技術是什麼呢?簡單地講,分散式處理和應用集成就是指在異構的、網路的、物理性能差別很大的、不同廠商的、不同語言的信息資源的基礎上構建信息共享的分散式系統,並且能夠有效地進行應用系統和分散式處理的集成。分散式處理的關鍵在於定義可管理的軟體構件,即面向對象技術中的「對象」。應用集成的關鍵在於為跨平台、跨機種、跨編程語言的產品提供統一的應用介面。OMG組織針對當今信息產業的要求,公布了CORBA標準,即公共對象請求代理體系結構(Common Object Request Broker Architecture),這是一個具有互操作性和可移植性的分散式面向對象的應用標準。
CORBA的核心是對象請求代理ORB,它提供對象定位、對象激活和對象通訊的透明機制。客戶發出要求服務的請求,而對象則提供服務,ORB把請求發送給對象、把輸出值返回給客戶。ORB的服務對客戶而言是透明的,客戶不知道對象駐留在網路中何處、對象是如何通訊、如何實現以及如何執行的,只要他持有對某對象的對象引用,就可以向該對象發出服務請求。
CORBA允許用戶以兩種不同的方式提出對象請求:
1)靜態調用:
通過給定介面的存根,在編譯了對象代碼後,進入客戶端的程序。因此,靜態調用必須在編譯時就知道對象及其類型。
2)動態調用:
通過ORB的動態調用介面DII,在運行時生成訪問對象的代碼。
不管客戶以哪一種形式提出請求,ORB的任務是:找出所要對象的位置,激活該對象,向對象傳遞此請求。對象執行所請求的服務後,把輸出值返回給ORB,然後再由ORB返回給客戶。
CORBA的重要概念是:
1.對象連接
CORBA廣泛地支持對象的實現,在單伺服器系統中也可以實現由介面定義語言定義的介面。ORB的靈活性既可以直接集成已有的應用,又不會使新對象受某些原則的制約。
對象連接提供了有不同類型對象實現時,使用ORB服務的方法,服務包括:對象引用、方法調用、安全控制、對象實現的激活與靜候等。
2.介面定義語言(IDL)
CORBA用IDL來描述對象介面,IDL是一種說明性語言,它的語法類似於C++。
IDL提供的數據類型有:基本數據類型、構造類型、模板類型、和複合類型、操作說明。這些類型可以用來定義變元的類型和返回類型,操作說明則可以用來定義對象提供的服務。
IDL還提供模塊構造,其中可以包含介面,而介面是IDL各類型中最重要的,它除了描述CORBA對象以外,還可以用作對象引用類型。
IDL提供了介面繼承性,派生介面可以繼承其基類介面所定義的操作與類型。IDL的介面繼承性有其特殊性,此處不贅述。
總之,CORBA的IDL是一種說明性語言,描述面向對象系統開發所遵循的介面與實現相分離的基本原則。
3.動態調用介面
把IDL說明編譯成面向對象程序設計語言的實代碼後,客戶可以調用已知對象的操作。在某些應用中,用戶並不了解應用介面編譯信息,但也要求調用對象的操作,這時就要動態調用介面來調用用戶的操作了。例如,圖形用戶介面應支持用戶瀏覽介面公共庫,以獲得每個對象所支持的操作信息,用戶可根據自己的需求從瀏覽對象中挑選出所需的對象操作,具體的對象操作的調用實際上是用動態調用介面來完成的。
4.介面公用庫
介面公用庫持久地存儲IDL的介面說明,藉助於介面公用庫,可以實現對象繼承性層次結構的導航,並且提供了有關對象支持的所有操作的描述。介面公用庫最常見的功能是為介面瀏覽器提供信息,幫助應用開發者找出潛在的可重用的軟體部件。ORB可以利用介面公用庫檢查運行時的操作參數類型,但介面公用庫的基本功能是提供類型信息,為動態調用介面發送請求提供信息支持。
java 2是sun公司提供的現在更明為java EE 企業級的應用開發,是一種跨平台的語言,
.NET平台是微軟體提代的一種跨語言的的編程語言.
java中rmi和corba的區別
java中rmi和corba的區別:
1、定義介面:
rmi自己定義介面(interface)
corba生成idl代碼,然後使用idlj -fall name.idl生成介面和幾個類文件
2、啟動服務:
rmi啟動的是rmiregistry (port)默認1099
corba啟動的是tnameserv
3、實現的繼承類:
rmi extends UnicastRemoteObject
corba extends 運行idlj時 生成的_NameImplBase
4、實現類的rebind
rmi可以直接rebind 如:Naming.rebind(“rmi://localhost/meeting”,meetingserver);
corba需要先調用init()如:
ORB orb=ORB.init(avgs,null);
MOTDImpl impl=new MOTDImpl(motdFile);
orb.connect(impl);
org.omg.CORBA.Object objRef=
orb.resolve_initial_references(“NameService”);
NamingContext ncRef=NamingContextHelper.narrow(objRef);
NameComponent nc=new NameComponent(motdService,””);
NameComponent[] path=new NameComponent[]{nc};
ncRef.rebind(path,impl);
這裡corba就要麻煩很多了
5、客戶端調用corba的調用跟實現類的綁定差不多如:
ORB orb=ORB.init(avgs,null);
org.omg.CORBA.Object objRef=
orb.resolve_initial_references(“NameService”);
NamingContext ncRef=NamingContextHelper.narrow(objRef);
NameComponent nc=new NameComponent(“MessageOfTheDay”,””);
NameComponent path[]=new NameComponent[]{nc} ;
org.omg.CORBA.Object motdObj=ncRef.resolve(path);
MOTD motdRef=MOTDHelper.narrow(motdObj);
System.out.println(motdRef.getMOTD());
rmi只要lookup就可以了
總的來說其實rmi和corba都差不多,都是樁和框架,兩者相互競爭,但是在java中都可以相互調用。這歸功於rmi_iiop.
Java 以下兩個要求 怎麼在Java中以程序的方式實現? (圍繞CORBA和IOR)
最近在看 JAVA NIO 的相關知識,了解一下IO的底層實現原理。
IO涉及到的底層的概念大致如下:
1) 緩衝區操作。2) 內核空間與用戶空間。3) 虛擬內存。4) 分頁技術。
一,虛擬存儲器
虛擬存儲器是硬體異常(缺頁異常)、硬體地址翻譯、主存、磁碟文件和內核軟體的完美交互,它為每個進程提供了一個大的、一致的和私有的地址空間。
虛擬存儲器的三大能力:①將主存看成是一個存儲在磁碟上的地址空間的高速緩存。②為每個進程提供了一個一致的地址空間。③保護每個進程的地址空間不被其他進程破壞。
虛擬內存的兩大好處:① 一個以上的虛擬地址可指向同一個物理內存地址。② 虛擬內存空間可大於實際可用的硬體內存。
二,用戶空間與內核空間
設虛擬地址為32位,那麼虛擬地址空間的範圍為0~4G。操作系統將這4G分為二部分,將最高的1G位元組(虛擬地址範圍為:0xC0000000-0xFFFFFFFF)供內核使用,稱為內核空間。而將較低的3G位元組供各個進程使用,稱為用戶空間。
每個進程可以通過系統調用進入內核,因為內核是由所有的進程共享的。對於每一個具體的進程,它看到的都是4G大小的虛擬地址空間,即相當於每個進程都擁有一個4G大小的虛擬地址空間。
三,IO操作
一般IO緩衝區操作:
1) 用戶進程使用read()系統調用,要求其用戶空間的緩衝區被填滿。
2) 內核向磁碟控制器硬體發命令,要求從磁碟讀入數據。
3) 磁碟控制器以DMA方式(數據不經過CPU)把數據複製到內核緩衝區。
4) 內核將數據從內核緩衝區複製到用戶進程發起read()調用時指定的用戶緩衝區。
從上圖可以看出:磁碟中的數據是先讀取到內核的緩衝區中。然後再從內核的緩衝區複製到用戶的緩衝區。為什麼會這樣呢?
因為用戶空間的進程是不能直接硬體的(操作磁碟控制器)。磁碟是基於塊存儲的硬體設備,它一次操作固定大小的塊,而用戶請求請求的可能是任意大小的數據塊。因此,將數據從磁碟傳遞到用戶空間,由內核負責數據的分解、再組合。
內存映射IO:就是復用一個以上的虛擬地址可以指向同一個物理內存地址。將內核空間的緩衝區地址(內核地址空間)映射到物理內存地址區域,將用戶空間的緩衝區地址(用戶地址空間)也映射到相同的物理內存地址區域。從而數據不需要從內核緩衝區映射的物理內存地址移動到用戶緩衝區映射的物理內存地址了。
要求:①用戶緩衝區與內核緩衝區必須使用相同的頁大小對齊。②緩衝區的大小必須是磁碟控制器塊大小(512位元組磁碟扇區)的倍數—因為磁碟是基於塊存儲的硬體設備,一次只能操作固定大小的數據塊。
用戶緩衝區按頁對齊,會提高IO的效率—這也是為什麼在JAVA中new 一個位元組數組時,指定的大小為2的倍數(4096)的原因吧。
四,JAVA中的IO,本質上是把數據移進或者移出緩衝區。
read()和write()系統調用完成的作用是:把內核緩衝區映射的物理內存空間中的數據 拷貝到 用戶緩衝區映射的物理內存空間中。
因此,當使用內存映射IO時,可視為:用戶進程直接把文件數據當作內存,也就不需要使用read()或write()系統調用了。
當發起一個read()系統調用時,根據待讀取的數據的位置生成一個虛擬地址(用戶進程使用的是虛擬地址),由MMU轉換成物理地址,若內核中沒有相應的數據,產生一個缺頁請求,內核負責頁面調入從而將數據從磁碟讀取到內核緩衝區映射的物理內存中。對用戶程序而言,這一切都是在不知不覺中進行。
總之,從根本上講數據從磁碟裝入內存是以頁為單位通過分頁技術裝入內存的。
五,JAVA NIO中的直接緩存和非直接緩存
直接緩存:不是分配於堆上的存儲,位於JVM之外,它不受JAVA的GC管理,相當於內核緩衝區。非直接緩存:建立在JAVA堆上的緩存,受JVM管理,相當於用戶緩衝區。
根據上面第三點,將直接緩存中的數據寫入通道的速度要快於非直接緩存。因為,連接到通道的另一端是文件(磁碟,FileChannel)或者網路(Socket通道),這些都是某種形式上的硬體。那麼,對於非直接緩存而言,數據從緩衝區傳遞到硬體,要經過內核緩衝區中轉。而對於直接緩存而言,就不需要了,因為直接緩存已經直接映射到內核緩衝區了。
原創文章,作者:PSKBF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/127527.html