본문 바로가기
linux

스레드

by 상레알 2010. 8. 17.
리눅스에서 프로세스들은 서로 협동할 수 있으며, 메시지를 주고 받을 수 있고, 한 프로세스가 다른 프로세스를 가로챌 수 있다. 더 나아가서 프로세스들이 동일한 메모리 영역을 공유하는 것도 가능하다. 그렇긴 하지만, 운영체제 안에서 프로세스들은 본질적으로 각자 개별적인 개체들이다. 그렇기 떄문에 프로세스들이 변수를 공유하게 만들기는 쉽지 않다.

여러 UNIX와 리눅스 시스템들에서 사용할 수 있는 프로세스 보다 작은 실행 단위로 스레드 라는 것이 있다. 스레드를 프로그래밍하는게 쉬운 일은 아니지만, 응용 분야에 따라서는 스레드가 대단히 유용하다.(이를테면 다중 스레드 데이터베이스 서버 등). 리눅스에서(그리고 일반적으로 유닉스에서 )다중 스레드 프로그래밍이 다중 프로세스 프로그래밍만큼 많이 쓰이지는 않는다. 리눅스의 프로세스들이 상당히 가볍고, 다중 프로세스 프로그래밍이 다중 스레드 프로그래밍보다 훨씬 쉽기 때문이다.

신호

신호는 유닉스와 리눅스 시스템이 어떤 조건에 따라 발생시키는 사건(EVENT)이다. 시스템이 특정 사건에 반응해서 특정 프로세스에게 신호를 보내면 신호를 받은 프로세스는 그에 맞는 행동을 취하게 된다. 신호를 발생하는 것은 흔히 일으킨다(raise)라고 칭하며, 프로세스가 신호를 감지해서 반응하는 것은 잡는다(catch)로 칭하곤 한다. 신호는 이를테면 메모리 세그멘테이션 위반이나 부동 소수점 프로세서 오류, 잘못된 CPU 명령 등에 의해서 발생한다. 셸이나 터미널 처리부가 프로그램의 실행을 가로채기 위해 신호를 일으키기도 하고, 한 프로세스가 다른 프로세스에게 정보를 전달하거나 다른 프로세스의 행동을 수정하기 위해 명시적으로 신호를 보내기도 한다. 이 모든 경우에서 프로그래밍 인터페이스는 동일하다. 프로세스는 신호를 일으키거나, 잡거나, 처리하거나, 경우에 따라서는 무시할 수도 있다. 신호들의 이름은 헤더 파일 singal.h에 정의되어 있다.

'linux' 카테고리의 다른 글

make: warning: Clock skew detected. Your build may be incomplete.  (0) 2011.02.25
Make File 만들기  (0) 2011.02.17
/etc/shadow ,존더 리퍼 [ John the Ripper ]  (0) 2010.12.15
레이스 컨디션  (0) 2010.12.13
데몬(demon) 슈퍼데몬 (xinnetd)  (0) 2010.12.08
입출력 재지정  (0) 2010.08.17
좀비 프로세스  (0) 2010.08.17
프로세스 이미지 복제  (0) 2010.08.15
프로세스 이미지 대체하기  (0) 2010.08.15
새 프로세스 시작하기  (0) 2010.08.15