스레드가 생성되면 초기 컨텍스트는 어떻게 결정됩니까? [닫은] 0x9000, ecx =

스레드 생성시 스레드의 초기 컨텍스트 (레지스터 상태)는 어떻게 결정됩니까?

예 : 현재 스레드 컨텍스트 eax = 0x4, ebx = 0x9000, ecx = 0xfff 등 … 0xbfbfbf에서 실행을 시작하기 위해 스레드 작성이 호출됩니다. 스레드의 eip가 0xbfbfbf로 설정되지만 다른 레지스터는 어떻습니까? 현재 스레드에서 복사 되었습니까? 그들은 0x00000000으로 설정되어 있습니까? 스택 포인터가 동일합니까? 스레드 생성시 초기 스레드 컨텍스트에 어떤 일이 발생하는지 알고 싶습니다. Google 및 OS 내부 서적을 확인했지만 원하는 것을 찾지 못했습니다.

또한 다른 OS, 특히 Linux 및 Windows에서 동일한 프로세스입니까?



답변

새 스레드가 실행을 시작하면 이미 실행 된 스레드와 마찬가지로 저장된 컨텍스트에서 레지스터가로드됩니다. 스레드를 작성하는 스레드는 새 스레드의 컨텍스트 구조를 채울 수 있지만 운영 체제의 실행중인 스레드 테이블에 추가하기 전에 선호합니다.

기본적으로 다음과 같이 작동합니다.

  1. 새로운 작업 구조가 할당됩니다.

  2. 새 작업 구조의 필드는 원하는대로 채워집니다. 여기에는 레지스터, 스택 포인터 등이 포함됩니다.

  3. 작업 구조는 실행 준비 완료로 표시되고 스케줄러의 작업 목록에 추가됩니다.

  4. 스케줄러는 새 스레드를 예약하기로 결정하고 작업 구조에서 컨텍스트를로드 한 다음 해당 스레드로 전환합니다.

  5. 스레드는 이제 생성 스레드가 채워진 레지스터, 스택 및 명령어 포인터를 갖습니다.


답변