MTS 구조분석 Cover Slide 조태문
목적 : MTS1 유지보수 및 개발을 위한 내부구조 이해 배경지식 : 개요 목적 : MTS1 유지보수 및 개발을 위한 내부구조 이해 배경지식 : UNIX system programming TCP/IP socket POSIX thread HP-UX system call Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
Overview - 1 MTS1의 내부구조는 4가지로 나뉘며 상호간의 data 교환은 공유메모리와 socket, 조건변수, SIGNAL 등으로 하며 아래는 각부의 주요 속성이다. ImageMagick API와 외부 lib 제조업체 제공의 lib를 이용한 실제 변환을 담당하는 sktcnv 변환 엔진 (이 문서에는 분석내용 없음) – 이는 Shared Library로 build된다. TIPB에 의해 요청을 받아 변환에 관한 rule 및 presetting을 하여 sktcnv를 호출하는 TRPB ( multiprocess based ) - 이는 실행파일로 build 된다. message 생성 및 송수신을 하며 CP와 TRPB의 매개체 역활을 담당하는 TIPB ( multithread based ) - 이는 실행파일로 build 된다. TIPB와 TRPB를 적절히 구동 시키며 이를 감시하고 프로세스들의 관리를 담당하는 ADMN - 이는 실행파일로 build 된다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
Overview - 2 ADMN TIPB main TRPB main CP TIPB thread TRPB child converter CP TIPB thread TRPB child converter CP TIPB thread TRPB child converter CP TIPB thread TRPB child converter Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
Admin Admin daemon type Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
ADMN overview 단순한 초기화와 프로세스를 데몬화 시켜 프로그램(TIPB, TRPB등)을 실행하는 기능이 핵심이며 후에는 무한루프를 돌며 열려져 있는 프로세스들을 검사해 이상(mtr계정이 아닌것)이 있는 것은 프로세스를 강제종료 시키고 루프에 중 start_gen_process()의해 해당 process는 다시 시작된다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
ADMN flow chart start GetConfigurationShm InitDaemon is jumping? initialize jumper start_gen_process No Yes alarm(1) check_proc invoke (TIPB, TRPB) SIGALRM manage_child signal? wait() SIGHUP SIGINT SIGQUIT SIGABRT SIGKILL SIGTERM end kill_children to_exit to_exit Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
ADMN 주요 function GetConfigurationShm : config를 저장할 공유메모리를 얻어오고 프로세스 메모리를 공유 메모리 영역에 붙인다. InitDaemon : process생성하고 자신은 종료한다. 또 프로세스그룹(세션)을 만든다. 즉, 데몬화를 한다. 시그널 핸들러들을 설치하고 /MTR_DATA/trace/[proc_name].trace file을 열고 여기에 stdout, stderr를 지향시킨다. initialize : SIGUSR1, SIGUSR2, SIGALRM의 핸들러 콜백 함수를 manage_child()로 지정하고 /MTR_DATA/tmp/ADMNPID에 자신의 pid를 저장한다. 또 /MTR_DATA/conf/PROCESS을 열어 구동 되어야할 프로세스와 속성, 구동방식을 저장한다. 해당정보는 process를 invoke할때 쓰인다. start_gen_process : execv()를 이용해 invoke 시킨다. confirm_process : 전역변수 Confirm이 1이 될때까지 기다린다. 최대 60초를 기다리며 실패시 전체종료(to_exit())가 되며 Confirm은 ‘SIGUSR1’의 핸들러가 1로 변경한다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
TIBP TIPB multi thread type Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
Multithread based endless loop daemon. TIPB overview Multithread based endless loop daemon. main thread가 child thread를 생성하고 child thread는 초기화 후 pthread_cond_wait()를 호출해 block상태로 main thread의 cond_signal을 기다린다. TRPB와의 data 교환은 socket으로 한다. thread간 data 교환은 mutex를 이용한 전역 구조체등으로 한다. TRPB와의 file교환은 각각 download pool, upload pool이라는 세마포어를 만들어 공유한다. 종료는 signal을 이용함. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
send req to TRPB process TIPB flow chart start init_config signal? SIGHUP SIGINT SIGQUIT SIGABRT SIGKILL SIGTERM InitDaemon init_proc OpenServerSocket to_exit init_cptbl & init_mintbl end init_thread Init Mutex & Cond CreateThread proc_tipb send req to TRPB process thread section to_select send cond signal trans response & result data accept_cp_req CP trans request & source data accept loop Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
TIPB 주요 function - 1 init_config : config, download pool, upload pool, thread 등의 공유메모리를 얻어오고 프로세스 메모리를 공유 메모리 영역에 붙인다. InitDaemon : ADMN과 동일함. init_proc : ADMN에게 SIGUSR1을 보내어 알림. 또 CP에게 request를 받을 server socket을 생성함. OpenServerSocket : listen socket을 연다. SO_REUSEADDR : 주소 재사용 SO_LINGER( l_onoff=0, l_linger=0 ) : close시 버퍼를 전송해 비우고 즉시 닫음. SO_SNDBUF(320K), SO_RCVBUF(320K) init_cptbl, init_mintbl : cp 정보와 min번호를 각각의 파일에서 불러와 table 형식으로 저장함. init_thread : TIPB의 쓰레드 수를 결정하고 뮤텍스와 조건변수의 초기화를 시킨다. 뮤텍스는 전체 쓰레드 동기화용과 cp별각개처리 동기화용 2개를 사용한다. CreateThread : 쓰레드를 생성한다. thread stack size는 각 512k(1024 x 512 bytes)를 가지며 스케쥴링 방식은 Round-robin (SCHED_RR)이 사용된다. 해당함수는 config에 정의되어 있는 TRPBThreadNum값 만큼 반복호출 된다. 각 thread의 call back함수로는 proc_tipb()가 있다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
TIPB 주요 function - 2 proc_tipb : TIPB에서 쓰레드가 생성되면서 해당 쓰레드가 가장 먼저 수행하는 함수로 TIPB 메인쓰레드에서 cond_signal(조건변수)가 전달되어질 때까지 블럭된 상태로 기다리다가 그 시점부터 다시 동작을 해서 TIPB에게 필요한 정보를 socket으로 전달하기 시작한다. TIPB로 전달하기 전 요청 메세지를 파싱하고 이에 대한 유효성 점검을 수행하고 1:N 변환과 1:1 변환에 대해 분기를 하기도 한다. 응답을 받을 시에는 이미지일 경우 RespTimeOutTimer(10초), 오디오나 비디오, 1:N일 경우 VtRespTimeOutTimer(30초)의 값을 CONFIG에서 참조하여 timeout을 검출한다. TRPB로부터 응답을 받으면 다시 CP로 보낼 response message를 작성하여 보낸다. to_select : (cp가 request를 보내는) server socket에 변화가 있을때까지 block상태로 대기한다. accept_cp_req : 요청을 받아 작업이 없는 thread를 검색하여 해당 thread의 테이블에 요청을 받은 socket을 저장하고 조건변수를 보내 작업을 수행토록 한다. thread의 상태는 thread의 테이블에 IDEL, BUSY로 구분하고 작업을 수행하기 직전 BUSY로 변경하고 끝난 후에 IDEL 상태로 재 변경을 한다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
TRBP TRPB multi process type Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
Multiprocess based endless loop daemon. TRPB overview Multiprocess based endless loop daemon. TRPB와 비슷한 구조를 가지고 있지만 multiprocess 기반이기 때문에 process grouping 작업과 fd 상속을 막는 작업등이 추가 되어 있다. main process가 accept시 child process를 생성하고 child process는 TIPB로 부터 요청이 오는 socket fd를 받아서 message를 받아 요청을 처리해 돌려준다. 하나의 처리가 끝나도 block 상태로 요청을 기다리다가 config의 ProcessCount수 만큼만 요청을 처리하면 TIPB가 해당 process ID로 kill을 한다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
TRPB flow chart start init_config wait signal? InitDaemon init_proc SIGCLD wait signal? SIGHUP SIGINT SIGQUIT SIGABRT SIGKILL SIGTERM InitDaemon init_proc OpenServerSocket to_exit AcceptSocket end fork() send response to TRPB thread child processing loop Created new child child_select skt_conv_req read_tipb_msg single etc lib. is multi? send_media_conv_resp skt_conv_req_1_N multi Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
TRPB 주요 function - 1 init_config : TIPB와 동일함. InitDaemon : TIPB와 동일함. init_proc : TIPB의 thread 수 만큼의 server socket을 open한다. fd의 상속을 막기 위한 처리가 추가 되어 있다. fcntl(ServerSock, F_SETFD, FD_CLOEXEC); AcceptSocket : 요청을 받는다. child_select : TIPB와 연결이 되어 있음으로 해당 socket의 timeout을 감시한다. 이는 child process loop에서 block을 담당하기도 한다. child_select : request를 받는다. read_tipb_msg : 요청타입에 따라 1:1과 1:N의 변환을 시도한다. send_media_conv_resp : response를 TIPB에게 준다. Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.
Homepage www.thinmultimedia.co.kr 서울특별시 서초구 반포동 59-4 송원빌딩 3,4층 Tel 02 536 2840 Fax 02 536 3601 Homepage www.thinmultimedia.co.kr Copyright © 2005 Thin Multimedia, Inc. All Rights Reserved.