2012-08-25 5 views
0

프로세스 실행 중에 fork() ID가 호출되면 메모리 공간은 같지만 메모리 내용은 동일한 새 프로세스가 만들어집니다. 따라서 서로 다른 프로세스이므로 서로 다른 프로세스 설명 블록을 가지므로 스케줄링 알고리즘에 의해 주어진 기회에 따라 실행됩니다 (PCB는 프로그램 카운터 값을 보유합니다).다중 스레드 실행

그러나 프로세스가 다른 스레드를 Pawn 할 때 스레드는 해당 주소 공간을 공유합니다. 제 질문은이 스레드 실행에 관한 것입니다 : - 스레드가 다음에 실행할 다른 프로그램 카운터 값 및 스케줄링 알고리즘 스케줄을 사용하여 별도의 PCB를 제공합니까? 예인 경우, 다음 스레드는 할당 된 기능이 실행을 마친 직후에 실행을 중지합니다. 그 함수는 자식 스레드의 스택에있는 유일한 함수이고 반환 할 때 다른 함수가 없기 때문에이 무엇입니까?

답변

1

일반적으로 스케줄러/발송자는 스레드를 처리합니다. 스레드는 실행 및 스레드 제어 블록 (또는 OS에 관계없이 호출되는 시스템 객체)이며, 자체 스택을 가지며, 레지스터 저장 (특히 스택 포인터, 즉 PC가 인터럽트시 푸시되는 곳), 스레드 우선 순위 , 다른 스레드 특정 데이터 및 스레드가 속한 프로세스에 대한 PCB 포인터. PCB에는 메모리 관리 데이터, 액세스 제어 데이터, 사용 권한 등이 있습니다. 프로세스에 특정한 데이터. 프로세스는 적어도 하나의 스레드 (일반적으로 프로세스가 생성 될 때 로더에 의해 생성 된 스레드)를 소유해야하는 경우를 제외하고는 어떤 실행도 수행하지 않습니다.

스레드 코드가 생성시 사용 된 최상위 함수에서 반환 됨으로써 종료되는 경우 (스레드가 종료되는 가장 일반적인 방법은 아닙니다) 배치 된 반환 주소가 튀어 나옵니다 생성시 스택에 "TerminateThread"(또는 무엇이든) 시스템 호출을 만들어서 자살하게 만듭니다.

분명히 '일반적인'OS에 대한 매우 광범위한 개요입니다. 세부 정보는 OS에 따라 다르며 실제로 릴리스별로 다릅니다.

관련 문제