280 likes | 481 Views
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 개념
E N D
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 개념 • 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” }
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 호출
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
TMO Programming 구조 • TMO Network의 구조 • 고려할 필요 없음 • Processes & Threads • 객체의 위치 • Low-level comm protocols • No specification of timing requirements in indirect terms (ex, priorities) • 단지, 객체 함수에 대해서 실행시작과 실행에 대한 Deadline 그리고 출력 동작의 time-windows
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관련 관련 동작 쓰레드
TMO Programming 구조 • EAC (Environment Access Capability) 부분 (an ODS extension) • Gate 객체는 원격 객체 메소드를 효율적으로 호출하는 통로를 제공 • I/O device interfaces, channel interfaces 등 • 각 원격 서비스 메소드를 위한 gate는 보장된 서비스 시간 또는 통계적 서비스 시간과 관련 • gate에 대한 client의 호출은 결과 도착을 위해 데드라인과 관련될 수 있다.
TMO Programming 구조 • Time-triggered (TT-) or spontaneous methods (SpM’s) • Clients로 부터의 메시지에 의한 service methods (SvM’s) 와는 분명히 분리된다
TMO Programming 구조 • Time-triggered (TT-) or spontaneous methods (SpM’s)
TMO Programming 구조 • Deadline, GETB, lst~by
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;
TMO Programming 구조 • Time-Based Coordination of Distributed Actions
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
TMO Programming 구조 • BCC ( Basic Concurrency Constraint) • 같은 ODSS(Data)에 대한 접근을 원할 때, SvM의 time-windows에서 수행하는 SpM이 없을 경우에만 SvM이 수행하도록 허락 • SpM 실행은 SvM 실행보다 더 높은 우선순위 • BCC는 SpM과 SvM사이의 잠재적 충돌 방지 • BCC는 SpMs의 동시 실행이나 SvMs의 동시실행에 제약을 가하지 않는다
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으로 잘라질 것임
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 지원 라이브러리 위치로 프로젝트 속성 재설정 • 새로운 설정 방법 • 상대 경로 이용
TMO 설정 • 새 프로젝트 생성 (Console Mode) • 새 프로젝트 Visual C++ 프로젝트 Win32 콘솔 프로젝트 • 응용 프로그램 설정 빈 프로젝트 체크 • Build 실행 Debug 폴더 생성(추가 파일 첨부하기 위해서)
TMO 설정 • 새 프로젝트 생성 (Windows Mode) • 새 프로젝트 Visuall C++ 프로젝트 Win32 프로젝트 • 응용 프로그램 설정 콘솔 응용 프로그램 빈 프로젝트
TMO 설정 • 라이브러리 파일 생성된 Debug 폴더로 복사 • config.ini • msvcp71d.dll • msvcr71d.dll • TMOSL.dll • TMOSL.h • TMOSL.lib • 프로젝트 속성 설정 • 소스 파일에 cpp 파일 추가 • 속성 설정을 위해 최소 하나 필요 • 프로젝트 명 오른쪽 버튼 클릭 속성 선택
TMO 설정 • 디버깅 작업 디렉터리 • ./Debug • C/C++ 일반 추가 포함 디렉터리 • ./Debug • C/C++ 전처리기 전처리기 정의 • 클릭 후 UNICODE;_UNICODE입력 • C/C++ 코드 생성 런타임 라이브러리 • 다중 스레드 디버그 DLL (/MDd)선택 • 링커 일반 추가 라이브러리 디렉터리 • ./Debug • 링커 입력 추가 종속성 • TMOSL.lib • 확인 버튼 클릭
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;
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 분산 노드 개수
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 (); }
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 등록 >
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);
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);
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);