2010-05-11 9 views
1

저는 리눅스에서 프로세스와 스레드의 차이점을 묻기로했습니다. 리눅스 용 스레드는 아버지와 공유하는 "작업"일 뿐이라는 공통점 (주소 공간 및 기타 중요한 정보)이 필요하다는 것을 알고 있습니다. 나는 또한 두 함수가 동일한 함수 ('clone()')를 호출하는 것을 알고 있지만 여전히 누락 된 것이있다. 스레드가 종료 될 때 실제로 어떤 일이 발생 하는가? 어떤 함수가 리눅스 커널 내부에서 호출됩니까? 프로세스가 do_exit 함수를 호출 할 때 프로세스가 종료 될 때 여기 또는 다른 곳에서 프로세스가 종료되거나 전체 프로세스인지 이해할 수있는 방법을 알아야합니다. 이 일을 설명하거나 교과서로 리디렉션 할 수 있습니까 ?? 나는 'Linux 커널 이해하기'를 시도했지만 만족하지 못했습니다. task_struct 구조체에 물건을 추가해야하기 때문에이 것을 묻고 싶습니다. 그러나 프로세스와 그 자식에 대한 정보를 관리하는 방법을 차별화해야합니다.리눅스에서 커널 스레드 종료

감사합니다.

답변

2

exit() syscall은 단일 스레드를 종료하고 exit_group() syscall은 전체 POSIX 프로세스 ("스레드 그룹")를 종료합니다.

+0

좋아,하지만 리눅스 커널이 커널 측에서 스레드 종료 (종료)를 처리하는 방법에 대한 정보를 찾고있었습니다. 특히, 커널 내부의 함수 코드를 살펴봄으로써 커널 코드를 추가 할 수 있도록 커널의 기능을 자세히 이해하는 데 관심이 있습니다. 커널의 do_exit 함수가 실?? – Raffo

+0

@Raffo : 네, 그렇습니다. – caf

1

프로세스와 스레드의 주된 차이점은 프로세스가 다른 모든 프로세스를 제외하고 자체 가상 메모리 공간에서 실행된다는 점입니다. 이는 두 프로세스가 서로의 데이터에 액세스 할 수 없음을 의미합니다. 두 프로세스가 상호 작용할 수있는 유일한 방법은 운영 체제를 통한 것입니다 (공유 메모리 섹션, 세마포어, 소켓 등).

스레드는 모두 생성 프로세스 내에 있습니다. 이는 스레드가 같은 프로세스의 다른 스레드와 동일한 모든 데이터 (변수, 포인터, 핸들 등)에 액세스 할 수 있음을 의미합니다. 그것은 주요 차이점입니다.

여기에는 몇 가지 의미가 있습니다. 예를 들어 어떤 이유로 프로세스가 종료 될 때 모두 스레드가 함께 있습니다. 또한 스레드에서 데이터가 찢어진 것처럼 다중 처리 오류를 얻는 것이 훨씬 쉽습니다. 실제로 사용해야하는 OS 동기화 기능을 사용하지 않아도되기 때문에.