1.CALLBACK 함수의 정의.?
시스템에 의해 호출 되는 함수 라고 나와 있는데... 시스템 콜을 의미 하는것인지...?
2. C언어에서 일반 함수와 콜백 함수의 차이점과 장단점.
3. 콜백함수가 사용된 예(수행 절차)를 알고 싶습니다..
리눅스 커널부분의 자료를 찾아 봤는데.. 정확한 개념을 잘 모르겠습니다.
좋은 하루 되십시오.
콜백이란 운영체제 뿐만 아니라 광범위하게 사용되는 의미입니다. 특정 작업(프로세스나 메커니즘)이 발생했을때 그 핸들러를 처리하는것을 콜백이라고 합니다. 예를 들어서 어떤 데이터를 소켓으로부터 받았는데 해당 데이터의 형에 따라서 데이터를 처리하는 핸들러 함수를 만들고 소켓으로부터 어떤 입력이 있을때 자동으로 실행된다면 이것을 콜백함수라고 부르죠.
가장 쉽게 이해하실려면 시그널 핸들러와 비슷한 개념이라고 생각하시면 됩니다.
========================================
* The truth will set you free.
보통 call이라함은 사용자 프로세스가 어떤 시스템(주로 운영체제겠지요?)에게 임의의 서비스를 호출하는 것을 의미합니다. 즉, 처리루틴은 시스템에 있고, 사용자 프로세스는 그것을 호출한다는 의미지요.
callback : call에서는 사용자==>시스템 이었는데 이제는 거꾸로 호출해주는 것입니다. 시스템이 사용자의 루틴을 호출해주는것이지요. 호출의 시점이 시스템에서 사용자로 가는것에 유의해주시길. 즉, 사용자 프로그램루틴을 사용자가 호출하는것이 아니라, 이벤트처리루틴등에 의해 시스템이 사용자 프로그램을 호출해 주는 것을 의미합니다.
upcall : call은 보통 상위에서 하위(기반)시스템에게 호출이 일어나는데, 마이크로커널같은 구조에서는 커널에 서비스 루틴이 있지 않고, 사용자 레벨에 이런 서비스루틴이 존재하는 경우가 있습니다. 심지어 메모리 관리자도 사용자 수준에 있지요. 따라서, 다음과 같은 시나리오를 그려볼 수 있습니다.
사용자 =(call)==> 시스템 =(upcall)=>라이브러리커널=(return)=>시스템=(return)=>사용자
시그날 핸들러의 작동 방식과 비슷할 듯 하네요. 시그날 핸들러를 우리 코딩에서 직접 콜을 하지는 않잖아요. 시그날이 왔을때 핸들러가 콜이 되기를 바라면서 등록을 해놓으면 시그날이 도착하면 커널로 부터 콜이 되는 방식이지요.
사족 : 자바에서 interface 의 메소드들을 구현하는 클래스들도 callback 의 기능으로 사용될수 있죠. jdbc 드라이버를 예로 들면 이미 다른 클래스들에서는 interface 에서 정의된 method 를 콜 하도록 만들어 져 있을때 dbms 회사(ex:oracle) 에서 자기네 db를 핸들링할수 있도록 interface 를 나름대로 구현해서 제공을 하는 것이지요. 그럼 그것은 외부 다른 클래스에서 적당히 call 을 당하게 되어 있지요..
1. 소스를 받아 config후에 Makefile에 CFLAG에 -g를 추가
2. 컴파일 후 demos/bios 로 이동
3 컴파일 후 saccept를 실행.
4. gdb로 sconnect를 들어간 후 main에 break 후
*ssl을 display 함니다.
여기서 ssl이란 객체는 출력되는 자료구조를 보면
~callback 이란 상당수의 함수포인터 들을 가지고 있습니다.
첨에 ssl내부를 보면 null pointer로 되 있을 겁니다.
코드가 진행되면서 상황에 맞는 컬백과 기타 정보가
세팅되죠 . 아래처럼 ..
5. 중간에 가령 57라인에 BIO_set_conn_hostname(ssl ~)
단계에서 step명령으로 해당 함수로 들어가면
패러미터로 가지고 온 ssl객체의 자료구조중 특정 플래그
상태 (at bio_lib.c:306에서 ssl의 method의 값들)를
확인하며, ssl에 그에 해당하는 함수 포인터등을 설정
합니다.
6. 5와 같은 함수나 그 아래의 ssl_connect 등의 함수를
step하여 들어가면 ssl구조체내의 컬백함수를 호출하죠.
어쩔땐 자기 배속을 들어다 보며 자신을 호출하는? 거 같은
기분이 들곤 했었죠 . ^^; recursive한..
위에서 callback에 정의를 잘 말씀들 해주셔서 전 실제 응용사례
에 대해 글을 올렸습니다 .
참고로 openssl의 샘플코드를 디버깅하면서 관찰하면,
곧바로 callback관련 구현도 가능하리라 확신합니다 ^^
수거여 ~ ^^
Re: [질문] CALLBACK 함수의 개념.............
콜백이란 운영체제 뿐만 아니라 광범위하게 사용되는 의미입니다. 특정 작업(프로세스나 메커니즘)이 발생했을때 그 핸들러를 처리하는것을 콜백이라고 합니다. 예를 들어서 어떤 데이터를 소켓으로부터 받았는데 해당 데이터의 형에 따라서 데이터를 처리하는 핸들러 함수를 만들고 소켓으로부터 어떤 입력이 있을때 자동으로 실행된다면 이것을 콜백함수라고 부르죠.
가장 쉽게 이해하실려면 시그널 핸들러와 비슷한 개념이라고 생각하시면 됩니다.
========================================
* The truth will set you free.
콜백이라...
1.CALLBACK 함수의 정의.?
저도 예전에 윈도API 공부할 때 많이 애먹었던 개념이였던 기억이 나내요.
일단, 콜백은 위분이 설명한것 처럼 운영체제가 님이 만들어 놓으신 함수를
호출하는 것이죠. 일반적으로 우리가 시스템 골 함수를 불러 트랩이 발생되어
커널모드로 변경되는 것과는 다르죠.
님이 만들어 놓으신 함수의 엔트리 포인트들이 function map에 추가되어
있다가 어떠한 이벤트가 발생되면 OS가 그 맵을 뒤져서 해당되는 함수를
호출해 준다는 식으로 이해하면 될것 같네요.
장황하게 설명하긴 좀 그렇기 때문에 호출규약(calling convention)을
우선 보시기 바랍니다. :lol:
2. C언어에서 일반 함수와 콜백 함수의 차이점과 장단점.
일단 일반함수와 시스템콜과의 차이점을 아시는게 좋을것 같은데요.
http://tacstar.iwebschool.net/study/view.php?comment=num&number=5
참고하시길...
3. 콜백함수가 사용된 예(수행 절차)를 알고 싶습니다.
일반적인 X윈도 프로그래밍에서 많이 쓰고 있습니다.
Glade나 Qt 등등... 해상 싸이트의 소스를 보시면 될것 같습니다.
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
call callback and upcall
호출하는 측과 호출받는 측의 개념으로 이해하세요
보통 call이라함은 사용자 프로세스가 어떤 시스템(주로 운영체제겠지요?)에게 임의의 서비스를 호출하는 것을 의미합니다. 즉, 처리루틴은 시스템에 있고, 사용자 프로세스는 그것을 호출한다는 의미지요.
callback : call에서는 사용자==>시스템 이었는데 이제는 거꾸로 호출해주는 것입니다. 시스템이 사용자의 루틴을 호출해주는것이지요. 호출의 시점이 시스템에서 사용자로 가는것에 유의해주시길. 즉, 사용자 프로그램루틴을 사용자가 호출하는것이 아니라, 이벤트처리루틴등에 의해 시스템이 사용자 프로그램을 호출해 주는 것을 의미합니다.
upcall : call은 보통 상위에서 하위(기반)시스템에게 호출이 일어나는데, 마이크로커널같은 구조에서는 커널에 서비스 루틴이 있지 않고, 사용자 레벨에 이런 서비스루틴이 존재하는 경우가 있습니다. 심지어 메모리 관리자도 사용자 수준에 있지요. 따라서, 다음과 같은 시나리오를 그려볼 수 있습니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
시그날 핸들러의 작동 방식과 비슷할 듯 하네요. 시그날 핸들러를 우리 코
시그날 핸들러의 작동 방식과 비슷할 듯 하네요. 시그날 핸들러를 우리 코딩에서 직접 콜을 하지는 않잖아요. 시그날이 왔을때 핸들러가 콜이 되기를 바라면서 등록을 해놓으면 시그날이 도착하면 커널로 부터 콜이 되는 방식이지요.
사족 : 자바에서 interface 의 메소드들을 구현하는 클래스들도 callback 의 기능으로 사용될수 있죠. jdbc 드라이버를 예로 들면 이미 다른 클래스들에서는 interface 에서 정의된 method 를 콜 하도록 만들어 져 있을때 dbms 회사(ex:oracle) 에서 자기네 db를 핸들링할수 있도록 interface 를 나름대로 구현해서 제공을 하는 것이지요. 그럼 그것은 외부 다른 클래스에서 적당히 call 을 당하게 되어 있지요..
/** 주워 들은 것도 내 것이다. 많이 주워 들어야지*/
콜백을 가장 잘써먹는 것은 미들웨어입니다.
미들웨어를 보시면 대부분 콜백처리를 하는 것을 볼 수 있습니다.
그 외에도 많은 통신프로그램이 콜백이 존재하죠.
간단하게 생각하심 어려운 개념은 아닙니다. 특정 이벤트가 일어나면 그에 따라서 일어나는 후속이벤트라고 생각하심 아주 깔끔하게 이해가 됩니다.
========================================
* The truth will set you free.
사족이지만....C++의 virtual function을 잘 이용
사족이지만....
C++의 virtual function을 잘 이용하는 것도
callback 기능을 이용하는 것이라고 생각하시면 됩니다.
언어적으로 보면, 실행시간 바인딩이라는 상당히 포장된 언어를 사용하지만,
눈감고 잘생각해보시면, 절차 위주의 callback function 일반적으로 따라오는
argument 를 객체화한 개념이라고 생각하시면 됩니다.
callback function은 어려운 부분이라고 생각하시어이해하기를 포기(?)하지 마시고 (포기안하시겠지만.. :)) 언어의 상당한 부분에 광범위하게 이용됩니다.
---
http://coolengineer.com
openssl 소스를 권장합니다. [응용예로서]
openssl 이 callback함수를 많이 사용하던걸로 기억합니다.
혹시나 소스를 이해?하면서 그런건 엄두도 내지 마세요 -,-;; 큼니다.
단적인 예를 들어 보일게요.
http://openssl.org
위에서 callback에 정의를 잘 말씀들 해주셔서 전 실제 응용사례
에 대해 글을 올렸습니다 .
참고로 openssl의 샘플코드를 디버깅하면서 관찰하면,
곧바로 callback관련 구현도 가능하리라 확신합니다 ^^
수거여 ~ ^^
\\(^^ )^^)// **
댓글 달기