\contentsline {chapter}{List of Tables}{vii} \contentsline {chapter}{List of Figures}{viii} \contentsline {chapter}{Abstract}{x} \contentsline {chapter}{Acknowledgments}{xii} \contentsline {chapter}{\numberline {1}Introduction}{1} \contentsline {section}{\numberline {1.1}Objectives}{2} \contentsline {section}{\numberline {1.2}Research Questions}{3} \contentsline {section}{\numberline {1.3}Significance}{3} \contentsline {section}{\numberline {1.4}Thesis Structure}{5} \contentsline {chapter}{\numberline {2}Background}{6} \contentsline {section}{\numberline {2.1}Introduction}{6} \contentsline {section}{\numberline {2.2}Distributed Objects and OO}{7} \contentsline {subsection}{\numberline {2.2.1}Introduction to Distributed Objects}{7} \contentsline {subsection}{\numberline {2.2.2}Why the marriage between Distributed Computing and Object-Orientation?}{9} \contentsline {subsection}{\numberline {2.2.3}Who is currently investing in Distributed Objects?}{11} \contentsline {subsubsection}{Microsoft's Vision of Distributed Objects}{11} \contentsline {subsubsection}{Object Management Group's Vision of Distributed Objects}{12} \contentsline {section}{\numberline {2.3}Distributed Object Architectures}{13} \contentsline {subsection}{\numberline {2.3.1}Distributed Object Architectures}{13} \contentsline {subsubsection}{Distributed Computing Environment (DCE) compared to Distributed Object Architectures}{15} \contentsline {subsubsection}{Is the DCE framework still popular today?}{16} \contentsline {subsection}{\numberline {2.3.2}Common Object Request Broker Architecture}{17} \contentsline {subsubsection}{The Story behind CORBA}{17} \contentsline {subsubsection}{CORBA's Benefits}{17} \contentsline {section}{\numberline {2.4}CORBA's Framework and Components}{18} \contentsline {subsection}{\numberline {2.4.1}CORBA's Framework}{18} \contentsline {subsection}{\numberline {2.4.2}Component overview of CORBA}{19} \contentsline {subsection}{\numberline {2.4.3}CORBA's components in Detail}{20} \contentsline {subsubsection}{Object Request Broker}{20} \contentsline {subsubsection}{Interface Definition Language}{21} \contentsline {subsubsection}{Dynamic Invocation Interface}{22} \contentsline {subsubsection}{Interface Repository}{22} \contentsline {subsubsection}{Object Adaptors}{23} \contentsline {subsection}{\numberline {2.4.4}Object Request Broker in Detail}{24} \contentsline {subsubsection}{What is an Object Request Broker?}{24} \contentsline {section}{\numberline {2.5}Amoeba Framework}{25} \contentsline {subsection}{\numberline {2.5.1}Amoeba Design}{26} \contentsline {subsection}{\numberline {2.5.2}Amoeba Implementation}{26} \contentsline {section}{\numberline {2.6}ORCA Programming Language}{26} \contentsline {section}{\numberline {2.7}Inter-Language Unification}{28} \contentsline {subsection}{\numberline {2.7.1}ILU Implementation}{29} \contentsline {chapter}{\numberline {3}Object Request Broker Performance}{30} \contentsline {section}{\numberline {3.1}Performance Impact of CORBA}{30} \contentsline {subsection}{\numberline {3.1.1}Performance Characteristics of CORBA Components}{31} \contentsline {subsubsection}{Data Marshalling and Copying}{31} \contentsline {subsubsection}{How does CORBA perform overall?}{33} \contentsline {subsection}{\numberline {3.1.2}General/Inter-ORB Protocol (GIOP)}{34} \contentsline {subsubsection}{What is a General/Inter-ORB Protocol?}{34} \contentsline {subsubsection}{What is CDR?}{34} \contentsline {subsubsection}{What performance does CDR provide?}{35} \contentsline {section}{\numberline {3.2}The Current Situation}{35} \contentsline {section}{\numberline {3.3}Performance optimisation techniques}{37} \contentsline {subsection}{\numberline {3.3.1}Data Marshalling through Octets}{37} \contentsline {subsection}{\numberline {3.3.2}Location of Target Server}{38} \contentsline {subsubsection}{Server/Client in same Address Space}{38} \contentsline {subsubsection}{Server on same Machine but unrelated processes}{39} \contentsline {subsubsection}{Server on a Different Architecture}{39} \contentsline {subsection}{\numberline {3.3.3}By-Passing CORBA}{40} \contentsline {subsection}{\numberline {3.3.4}Data Packaging}{41} \contentsline {chapter}{\numberline {4}The Packers}{42} \contentsline {section}{\numberline {4.1}System Overview}{42} \contentsline {section}{\numberline {4.2}Different Packing Techniques}{45} \contentsline {subsection}{\numberline {4.2.1}Separate Component Packing}{45} \contentsline {subsubsection}{Packing Method 1}{45} \contentsline {subsubsection}{Packing Method 2}{45} \contentsline {subsubsection}{Performance OverHead}{47} \contentsline {subsubsection}{Performance of packing method 1 without including the sizes}{47} \contentsline {subsubsection}{Performance of packing method 2}{47} \contentsline {subsubsection}{Conclusions that can be drawn from separate component packaging}{47} \contentsline {subsection}{\numberline {4.2.2}Schema Transmission}{47} \contentsline {subsubsection}{Performance Overheads when transmitting the Schema}{48} \contentsline {subsubsection}{Performance Overhead on the first transmission}{48} \contentsline {subsubsection}{Performance Overhead on the second transmission}{48} \contentsline {subsubsection}{Interesting Issues Raised by transmitting the Schema}{49} \contentsline {subsection}{\numberline {4.2.3}RPC Transmission}{49} \contentsline {subsubsection}{Problems with RPC Transmission}{49} \contentsline {subsection}{\numberline {4.2.4}Character transmission of class}{50} \contentsline {subsubsection}{Problems with Character Transmission}{51} \contentsline {subsection}{\numberline {4.2.5}Sharing a common schema}{51} \contentsline {subsubsection}{Sharing through Shared Memory}{52} \contentsline {subsubsection}{Sharing through a NFS Mount}{53} \contentsline {subsubsection}{Sharing through a socket structure}{54} \contentsline {subsubsection}{Sharing through CORBA}{55} \contentsline {section}{\numberline {4.3}The Packers Packing Types}{55} \contentsline {subsection}{\numberline {4.3.1}Standard CORBA Marshalling}{55} \contentsline {subsection}{\numberline {4.3.2}Octet Marshalling}{57} \contentsline {subsection}{\numberline {4.3.3}Low Level TCP/IP Communication Marshalling}{58} \contentsline {chapter}{\numberline {5}Experimental Investigation}{62} \contentsline {section}{\numberline {5.1}Standard CORBA implementation}{62} \contentsline {subsection}{\numberline {5.1.1}Overview}{62} \contentsline {subsection}{\numberline {5.1.2}Hypothesis}{62} \contentsline {subsection}{\numberline {5.1.3}Expected Results}{63} \contentsline {subsection}{\numberline {5.1.4}Actual Results}{63} \contentsline {subsection}{\numberline {5.1.5}Results Discussion}{63} \contentsline {section}{\numberline {5.2}Octet Data marshalling/packaging mechanism}{67} \contentsline {subsection}{\numberline {5.2.1}Overview}{67} \contentsline {subsection}{\numberline {5.2.2}Hypothesis}{68} \contentsline {subsection}{\numberline {5.2.3}Expected Results}{68} \contentsline {subsection}{\numberline {5.2.4}Actual Results}{68} \contentsline {subsection}{\numberline {5.2.5}Results Discussion}{69} \contentsline {section}{\numberline {5.3}Low Level communication mechanism (TCP/IP Socket)}{70} \contentsline {subsection}{\numberline {5.3.1}Overview}{70} \contentsline {subsection}{\numberline {5.3.2}Hypothesis}{70} \contentsline {subsection}{\numberline {5.3.3}Expected Results}{70} \contentsline {subsection}{\numberline {5.3.4}Actual Results}{70} \contentsline {subsection}{\numberline {5.3.5}Results Discussion}{71} \contentsline {chapter}{\numberline {6}Implementation}{72} \contentsline {section}{\numberline {6.1}Experimental Environment}{72} \contentsline {subsection}{\numberline {6.1.1}Hardware/Platform}{72} \contentsline {subsection}{\numberline {6.1.2}Software}{72} \contentsline {section}{\numberline {6.2}Experimental Design}{73} \contentsline {subsection}{\numberline {6.2.1}Test Data}{73} \contentsline {subsection}{\numberline {6.2.2}Design and Implementation of Experiments}{74} \contentsline {subsubsection}{Interface Definition Language Specification}{74} \contentsline {subsubsection}{Class Proxies/Stubs}{74} \contentsline {subsubsection}{Marshalling Techniques}{75} \contentsline {subsubsection}{Server Implementation Code}{75} \contentsline {subsection}{\numberline {6.2.3}Validation of Experiments}{84} \contentsline {section}{\numberline {6.3}Experimental Limitation}{85} \contentsline {chapter}{\numberline {7}Conclusion}{87} \contentsline {section}{\numberline {7.1}Solutions to Research Questions}{89} \contentsline {section}{\numberline {7.2}Future Work}{90} \contentsline {subsection}{\numberline {7.2.1}Object Request Broker Comparison}{90} \contentsline {subsection}{\numberline {7.2.2}Functionality in the Octet Marshalling Stream}{90} \contentsline {subsection}{\numberline {7.2.3}Deep Marshalling}{91} \contentsline {chapter}{Appendix\ A\ Interface Definition for the Packers}{92} \contentsline {chapter}{Appendix\ B\ Implementation Header for the Packers}{94} \contentsline {chapter}{Appendix\ C\ Implementation Code for the Packers}{100} \contentsline {chapter}{Appendix\ D\ Implementation Header for the Buffer}{121} \contentsline {chapter}{Appendix\ E\ Implementation Code for the Buffer}{127} \contentsline {chapter}{Appendix\ F\ Implementation Code for Standard Marshalling}{157} \contentsline {chapter}{Appendix\ G\ Implementation Code for Structure Marshalling}{162} \contentsline {chapter}{Appendix\ H\ Implementation Code for Socket Marshalling (server)}{166} \contentsline {chapter}{Appendix\ I\ Implementation Code for Socket Marshalling (client)}{169} \contentsline {chapter}{Appendix\ J\ Implementation Code for Octet Marshalling}{173}