IT
-
프로세스가 fork 되면IT/Linux C 2012. 1. 22.
프로세스 fork가 일어나게 되면, 프로세스가 가지고 있는 명령어 셋과 fd(file descriptor)들은 그대로 함께 복제 되어 진다.\ 또한, 부모 프로세스가 가지고 있던 memory lock, mutex, timer등은 복제되지 않는다. 이러한 이야기를 하게 되는 이유는 최근 서버 클라이언트의 통신 구조에서 클라이언트가 재 시작되는데, 서버에서는 해당 클라이언트가 연결 종료됨을 인지 못하는 문제점에 만난적이 있다. 문제의 원인을 파악하기 위하여 검증을 해보다가 어느 순간에만 연결 종료를 인지하지 못하게 되었다. 클라이언트 프로그램에서 exec 함수를 호출할 때(exec함수는 내부적으로 fork를 합니다) 해당 문제점이 발생하였다. 문제의 원인으로 fork를 통해서 socket을 가리키는 파일 디..
-
Evernote clearlyIT/Tools 2012. 1. 21.
evernote에서 여러개의 서비스가 더 나왔습니다. 그 중에서 Clearly 라는 서비스를 소개하기 위한 글을 적는다. evernote란 많은 사람들이 사용하고 있는 웹 노트로써, 예전에 포스팅한 내용이 있다. evernote에 대해서 아예 모르시는 분은 아래의 내용을 보시면 친숙해질 수 있다. 2011/08/02 - [생산성(Productivity)] - 언제 어디서나, 웹노트 evenote 자 본론으로 들어가서, clearly 서비스란 웹 브라우져에 플로그인 형태로 설치하여 웹의 컨텐츠의 내용만 깨끗하게 볼 수 있게 해주는 프로그램이라 할 수 있다. 마치 책을 보는 것 처럼 웹 페이지 컨텐츠만을 깔끔하게 보여줍니다. 인터넷 웹 페이지는 최초에는 열려있는 웹 페이지와 관련 없는 광고나 링크들은 없었겠..
-
System Hang이란?IT/Linux Kernel 2012. 1. 16.
System Hang 이란 친구가 삶에 껴들어와서 사전적인 의미를 알아보고 정리해보는 시간을 가져보았다. hang or freeze라고 불리기도 하는 System Hang이란, 아무런 반응을 하지 않은 상태로써 시스템 운영이 불가능한 상태를 의미한다. 이 상태에서는 input에 대해서 아무런 응답을 하지도 않고 input이 없더라도 시스템 process들을 처리하지 >못하고 있을 것이다. 이러한 hang을 유발 시키는 요인은 하드웨어적과 소프트웨어적으로 볼 수 있다. 하드웨어 1) missmatched 하드웨어 2) 환경적인 요인으로 인한 하드웨어 열 데미지 3) 메모리(RAM) 부족 4) 하드웨어 fault 소프트웨어 1) infinite loop 또는 race condition 2) dead lock..
-
pthread 종료 핸들러(pthread_cleanup_push, pthread_cleanup_pop)IT/Linux C 2012. 1. 13.
얼마전에 thead를 중간에 종료 시키는 방법에 대해서 이야기 했었다. 2012/01/12 - [리눅스(Linux)/개발(Developemnt)] - 생성된 pthread를 중간에 종료시키자.(pthread_cancel) 만약 thread에서 자원을 할당받아 사용 중이라면, thread가 종료 될 때 자원을 반환을 해줘야 할 필요가 있다. 물론 thread 내부 로직을 통하여 할당받은 자원(mutex, heap memory, fd,...)을 알맞게 반환하면 좋겠지만, 중간에 종료되는 경우에는 thread가 종료되기 때문에 자원 반환에 어려움이 있다. 결론적으로 pthread_cleanup_push를 통하여 callback 함수를 등록하면 thread가 종료될 때 등록된 callback 함수를 호출하여 자..
-
생성된 pthread를 중간에 종료시키자.(pthread_cancel)IT/Linux C 2012. 1. 12.
pthraed_create를 통해서 만들어진 thread는 중간에 종료시켜야 할 필요가 있을 때 pthread_cancel를 사용하여 실행중인 thread를 종료 시킬 수 있다. #include int pthread_cancel(pthread_t thread); 간단히 작성한 코드를 작성하여 strace한 결과를 보면, clone 함수를 통해서 thread를 만들고(thread id:2104) 나중에 pthread_cancel이 호출되는 부분에서 tgkill 함수에 thread id를 넘겨 줌으로써 해당 thread를 취소시킨다. 사실 취소라는 말 보다는 시그널을 전달하여 종료시킨다라고 할 수 있다. ... clone(child_stack=0xb782b494, flags=CLONE_VM|CLONE_FS|..
-
pthread 자원 해제에 대한 이야기(pthread_detach, pthread_attr_setdetachstate)IT/Linux C 2012. 1. 11.
일반적으로 pthread_create를 통해서 쓰레드가 생성되고 다 사용된 쓰레드는 해당 쓰레드를 호출한 곳에서 pthread_join을 통하여 해당 쓰레드의 자원을 해제하여 종료하는 흐름을 갖는다. 만약 생성된 쓰레드를 pthread_join으로 처리하지 않는다면 아무리 쓰레드가 종료되었다고 해도 자원이 반환되지 않는다. 이렇게 남겨진 자원은 메모리릭으로 간주되기 때문에 pthread_join은 쓰레드간의 동기작업과 자원 해제를 위해 필수적이다. 하지만 pthread_join을 하지 않고도, 생성된 쓰레드가 종료될 때 알아서 자원을 시스템에게 반환하는 detach 옵션이 있다. 말 그대로 독립적으로 운용하게 하라라는 의미로 생각되며(물론 자원적인면에서만), detach 옵션을 주는 방법은 두가지가 있다..
-
likely, unlikely 함수란?IT/Linux Kernel 2012. 1. 6.
리눅스 커널코드를 보면, likely와 unlikely란 함수를 종종 발견하곤 한다. 컴파일러는 작성된 함수와 코드들에 대해서 최적화 작업을 하여 성능을 향상시킨다. 여기서 갑자기 컴파일러 이야기를 하는 이유는 해당 함수들(정확히 말하자면 매크로이긴 합니다만)은 컴파일러와 관련이 있다. likely와 unlikely는 if 분기문에서 likely를 주면 컴파일러에게 해당 분기문에서 참인 경우가 더 많을 것이라는 정보를 주어 성능을 추가적으로 성능시키는 함수이다. 반대로 if 분기문 안에 unlikely를 주면 거짓인 경우가 더 많을 것이라는 정보를 준다. 실제로 정의된 매크로를 따라가면 __builtin_expect라는 함수가 사용됨을 볼 수 있다. __builtin_expect라는 이름이 좀 더 실제 ..
-
sizeof 함수의 리턴값은 어떤 타입인가??IT/Linux C 2012. 1. 5.
sizeof함수는 C와 C++에서 데이터 타입의 크기를 바이트 단위로 알아내는 많이들 혹은 흔히들 사용하는 시스템 함수이다. 개발을 하던 중에 sizeof의 결과를 함수의 인자로 받아야하는 경우가 생겼는데, 이때 갑작스렇게 혼란이 온 sizeof 함수의 리턴값은 어떤 타입인가 고민하게 되었다. 사이즈니깐 unsigned int라고 생각했는데, 완벽한 답은 아닌거 같았다. 위키피디아에서 검색해보니, 답은 size_t 이다. 예를 들어, 아래와 같이 데이터와 크기를 인자로 받아 전송하는 함수가 있다고 가정하였을 때, size_t 타입을 인자로 받아서 사용하는 것이 안전하다. int send_somedata(void* data,size_t size); int num=10; send_somedata(&num,s..