1 / 28

TMO 소개 및 구조 그리고 사용방법 (Ver 4.1.x)

2005 년 12 월 27 일. TMO 소개 및 구조 그리고 사용방법 (Ver 4.1.x). 목차. TMO 개요 TMO(Time-Triggered Message-Triggered Object) 개념 TMO 특성 TMO 구조 TMO Programming 환경 TMO Program 구조 TMO 설정 (.net 환경 ) 프로젝트 설정 (console/windows mode) config.ini 설정 TMO 프로그래밍 방법 TMO 선언 및 등록. TMO 개요. TMO 개념

oceana
Download Presentation

TMO 소개 및 구조 그리고 사용방법 (Ver 4.1.x)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2005년 12월 27일 TMO 소개 및 구조 그리고 사용방법(Ver 4.1.x)

  2. 목차 • TMO 개요 • TMO(Time-Triggered Message-Triggered Object) 개념 • TMO 특성 • TMO 구조 • TMO Programming 환경 • TMO Program 구조 • TMO 설정 (.net 환경) • 프로젝트 설정 (console/windows mode) • config.ini 설정 • TMO 프로그래밍 방법 • TMO 선언 및 등록

  3. TMO 개요 • TMO 개념 • Time-triggered Message-triggered Object • 기존 객체 모델에 대한 확장으로 객체 자체적인 실시간 특성에 따라 동작하는 실시간 객체 • 기존 객체는 클라이언트의 서비스 요청 메시지에 의해 동작하지만, TMO는 기존 객체 특성에 자치적인 동작 추가 • TMO 특성 • C++ TMO  C++ 객체 타입 • 분산 컴퓨팅 객체 • 원격 메소드 호출을 통해서 상호동작 • TCP/IP 통신 프로토콜의 투명성 • 각 TMO 名은 전역적으로 유일해야 한다 • 실시간 컴퓨팅 객체 • 자체적 동작 객체 • AAC (Autonomous Activation Condition) • 실시간 동작을 위한 시간 명세 • 또한, TMO는 논리적 멀티캐스트 채널(즉, RMMC)을 통해서 상호동작 E.g.,{ “start-during (10am, 10:05am) finish-by 10:10am:, “for t = from 10am to 10:50am every 30min start-during (t,t+5 min) finish-by t+10min” }

  4. TMO 개요 • TMO 구조 • ODS (Object Data Store) • EAC (Environment Access Capability) • AAC (Autonomous Activation Condition) • SpM 실행에 대한 주기(time-windows) 명세 • SpM (Spontaneous Methods) • AAC의 명세에 따라 동작 • 실제 정확하고 유연하게 시간을 정할 수 있는 SpM • 스스로 동작 유지 (사람의 심장처럼) • SpM이 SvM보다 우선순위 • SvM (Service Methods) • C++/Java 멤버함수의 확장 • local/remote Client에서 특정 SvM 호출

  5. TMO Programming 환경 • Hardware • Operating System • Windows XP,2000, NT, Windows CE, Linux • TMO Support Middleware (TMOSM) • OS의 위에서 동작 • TMO 프로그램 실행 동안 TMOSM은 모든 시스템자원을 관리( CPU time, network access, disk I/O) • TMO Support Library (TMOSL) • TMO 프로그램이 직접적으로 TMOSM과 통신하지 않고 안정된 수준의 API( 현 C++ API )인 TMOSL 이용 • MSI( Middleware Service Interface)를 통해 application 요청을 TMOSM에 전달 • C++ complier suite • TMOSM 4.xx는 .NET 2003에서 test 그림1. TMO Execution Environment

  6. TMO Programming 구조 • TMO Network의 구조 • 고려할 필요 없음 • Processes & Threads • 객체의 위치 • Low-level comm protocols • No specification of timing requirements in indirect terms (ex, priorities) • 단지, 객체 함수에 대해서 실행시작과 실행에 대한 Deadline 그리고 출력 동작의 time-windows

  7. TMO Programming 구조 • TMO Execution Engine - TMOSM (TMO Support Middleware) • WTST (Watchdog Timer & Scheduler Thread): Super-Micro-Thread • TMOSM에서 다른 모든 쓰레드 동작/스케쥴링 관리 그리고 데드라인 • VMAT (Virtual Machine for Main Application Threads) • SpMthread, SvMthread 등 • VCT (Virtual Machine for Communication Threads) • 통신 네트워크를 통해서 들어오는 메시지를 분산시켜서 목적지에 전달 • VAT (Virtual Machine for Auxiliary Threads) • I/O관련 관련 동작 쓰레드

  8. TMO Programming 구조 • EAC (Environment Access Capability) 부분 (an ODS extension) • Gate 객체는 원격 객체 메소드를 효율적으로 호출하는 통로를 제공 • I/O device interfaces, channel interfaces 등 • 각 원격 서비스 메소드를 위한 gate는 보장된 서비스 시간 또는 통계적 서비스 시간과 관련 • gate에 대한 client의 호출은 결과 도착을 위해 데드라인과 관련될 수 있다.

  9. TMO Programming 구조 • Time-triggered (TT-) or spontaneous methods (SpM’s) • Clients로 부터의 메시지에 의한 service methods (SvM’s) 와는 분명히 분리된다

  10. TMO Programming 구조 • Time-triggered (TT-) or spontaneous methods (SpM’s)

  11. TMO Programming 구조 • Deadline, GETB, lst~by

  12.  tmoNode1 est = 2.3 sec lst = 2.4 sec est = 4.3 sec lst = 4.4 sec lst = 2.1 sec lst = 4.1 sec lst = 1.1 sec lst = 3.1 sec est = 1.3 sec lst = 1.4 sec est = 3.3 sec lst = 3.4 sec … 1 sec 3 sec 1 min until 2 sec 4 sec est from est est est … 1 sec 3 sec 1 min until 2 sec 4 sec by = 1.2 sec by = 3.2 sec est from est est est by = 4.2 sec by = 2.2 sec by = 1.5 sec by = 3.5 sec by = 2.5 sec by = 4.5 sec TMO Programming 구조 • TMO에서 AAC에 의한 동작 Deadline = 50 * 1000; GETB = 300 * 1000; MicroSec from = 1 * 1000 * 1000; MicroSec until = 60 * 1000 * 1000; MicroSec every = 1 * 1000 * 1000; MicroSec est = 0; MicroSec lst = 100 * 1000; MicroSec by = 200 * 1000;  tmoNode2 Deadline = 50 * 1000; GETB = 300 * 1000; MicroSec from = 1 * 1000 * 1000; MicroSec until = 60 * 1000 * 1000; MicroSec every = 1 * 1000 * 1000; MicroSec est = 300 * 1000; MicroSec lst = 400 * 1000; MicroSec by = 500 * 1000;

  13. TMO Programming 구조 • Time-Based Coordination of Distributed Actions

  14. TMO Programming 구조 • Time-triggered (TT-) or spontaneous methods (SpM’s) • Time-window imposed on each output action and method completion • Guaranteed service time • Client's deadline demand • Statistical assurances of better service times

  15. TMO Programming 구조 • BCC ( Basic Concurrency Constraint) • 같은 ODSS(Data)에 대한 접근을 원할 때, SvM의 time-windows에서 수행하는 SpM이 없을 경우에만 SvM이 수행하도록 허락 • SpM 실행은 SvM 실행보다 더 높은 우선순위 • BCC는 SpM과 SvM사이의 잠재적 충돌 방지 • BCC는 SpMs의 동시 실행이나 SvMs의 동시실행에 제약을 가하지 않는다

  16. TMO Programming 구조 • Example: SpM1 과 SvM1은 같은 ODSS에 접근한다고 가정하자. 두 method의 하나가 ODSS에 쓸 때의 SpM1의 호출간격은 1sec이고 SpM1의 GCT는 0.2sec이고 SvM1의 GCT는 0.9초라고 가정한다. • SvM1의 최대 실행시간이 너무 길기 때문에, SpM1의 실행의 하나 주기의 끝과 SpM1 실행의 다음 주기의 시작 사이에 scheduled 할 수 없다. • BCC 인해 SvM1이 수행하도록 허락되지 않음 • SvM1은 여러 개의 더 작은 SvM으로 잘라질 것임

  17. TMO 설정 • TMO Programming Tool-Kit Download • http://dream.eng.uci.edu/TMODownload/agree.asp • TMOSL(4.1.8-d) 의 Appendix G에 설정 방법 소개. • Appendix G 단점 –불편하다. • 프로젝트 설정 시 라이브러리 등 모든 경로가 절대 경로로 잡힘. • TMO 지원 라이브러리의 위치가 변경될 경우, • 프로젝트 속성 재설정. • TMO 프로그램을 다른 컴퓨터로 옮길 경우, • 해당 컴퓨터에 설치된 TMO 지원 라이브러리 위치로 프로젝트 속성 재설정 • 새로운 설정 방법 • 상대 경로 이용

  18. TMO 설정 • 새 프로젝트 생성 (Console Mode) • 새 프로젝트  Visual C++ 프로젝트  Win32 콘솔 프로젝트 • 응용 프로그램 설정  빈 프로젝트 체크 • Build 실행  Debug 폴더 생성(추가 파일 첨부하기 위해서)

  19. TMO 설정 • 새 프로젝트 생성 (Windows Mode) • 새 프로젝트  Visuall C++ 프로젝트  Win32 프로젝트 • 응용 프로그램 설정  콘솔 응용 프로그램  빈 프로젝트

  20. TMO 설정 • 라이브러리 파일  생성된 Debug 폴더로 복사 • config.ini • msvcp71d.dll • msvcr71d.dll • TMOSL.dll • TMOSL.h • TMOSL.lib • 프로젝트 속성 설정 • 소스 파일에 cpp 파일 추가 • 속성 설정을 위해 최소 하나 필요 • 프로젝트 명 오른쪽 버튼 클릭  속성 선택

  21. TMO 설정 • 디버깅  작업 디렉터리 • ./Debug • C/C++  일반  추가 포함 디렉터리 • ./Debug • C/C++  전처리기  전처리기 정의 • 클릭 후 UNICODE;_UNICODE입력 • C/C++  코드 생성  런타임 라이브러리 • 다중 스레드 디버그 DLL (/MDd)선택 • 링커  일반  추가 라이브러리 디렉터리 • ./Debug • 링커  입력  추가 종속성 • TMOSL.lib • 확인 버튼 클릭

  22. TMO 설정 • 기타설정 • TMO에서 소켓 사용 시 ‘링커명령줄추가옵션’ 에 ‘ws2_32.lib’입력 • Windows 관련 API 사용시 (ex, winmm.lib) • TMO 라이브러리를 이용한 객체 선언 시 상단에 아래 소스 추가 • 예) TMO 선언부, RMMC 선언부, ODSS 선언부 #include "TMOSL.h" #pragma comment(lib, "TMOSL") #pragma comment(lib, “winmm”) etc… using namespace TMO;

  23. TMO 설정 • config.ini 파일 설정 • ip_addr = 서버 IP 입력 • local_ip = 로컬 IP 입력 • num_of_DC_nodes = 분산 노드 개수 • num_of_links = 분산 노드 개수 • (본인 IP, 본인 IP) = 0 • (본인 IP, 분산 노드 IP) = 0 • …< 분산 노드 개수 만큼 > • (본인 IP, 분산 노드 IP) = 0 서버 IP 로컬 IP 분산 노드 개수

  24. TMO 프로그래밍 방법 • main() 함수에서 TMO 인스턴스 생성 void main() { StartTMOengine (); tms TMO_start_time1 = tm4_DCS_age(3*1000*1000); Ahn_TMO Ahn(_T("Ahn_TMO"),_T("Ahn_SvM"), _T("RMMC1"), TMO_start_time1); MainThrSleep (); }

  25. TMO 프로그래밍 방법 • TMO 선언 및 등록 class Ahn_TMO: public CTMOBase { public: Ahn_TMO (TCHAR * TMO_name, TCHAR * SvM_name, TCHAR * RMMC_name, tms TMO_start_time); private: Ahn_ODSS ODSS1; int Ahn_SpM(); int Ahn_SvM(ParamStruct *); // SvM to be trigger by a SvM Parameter Message CRMMC RMMC1; }; < 클래스 : TMO 선언 > Ahn_TMO::Ahn_TMO(TCHAR * TMO_name, TCHAR * SvM_name, TCHAR * RMMC_name, tms TMO_start_time):RMMC1(RMMC_name, SvM_name) { // register SvM … // register SpM … // register TMO … } < 생성자 : TMO 등록 >

  26. TMO 프로그래밍 방법 • register SvM // register SvM SvM_RegistParam svm_spec; svm_spec.GETB = 20 * 1000; _tcscpy(svm_spec.name, SvM_name); svm_spec.build_regist_info_ODSS(RMMC1.GetId(), RW); svm_spec.build_regist_info_ODSS(ODSS1.GetId(), RW); RegisterSvM((PFSvMBody)Ahn_SvM, &svm_spec);

  27. TMO 프로그래밍 방법 • register SpM // register SpM SpM_RegistParam spm_spec; MicroSec from = 4 * 1000 * 1000; MicroSec until = 1 * 60 * 60; until *= 1000 * 1000; MicroSec every = 1 * 1000 * 1000; MicroSec est = 0; MicroSec lst = 150 * 1000; MicroSec by = 400 * 1000; AAC aac_spec(_T(""), tm4_DCS_age(from), tm4_DCS_age(until), every, est, lst, by); spm_spec.build_regist_info_AAC(aac_spec); spm_spec.build_regist_info_ODSS(RMMC1.GetId(), RW); spm_spec.build_regist_info_ODSS(ODSS1.GetId(), RW); RegisterSpM((PFSpMBody)Ahn_SpM, &spm_spec);

  28. TMO 프로그래밍 방법 • register TMO // register TMO TMO_RegistParam tmo_spec; _tcscpy(tmo_spec.global_name, TMO_name); tmo_spec.start_time = TMO_start_time; RegisterTMO(&tmo_spec);

More Related