2016-10-25 8 views
0

ESP 및 SS는 무엇을 참조합니까? 예를 들어, 컨텍스트 스위치가 완료된 후 링 0의 특권 레벨로 TASK_1에서 링 0의 동일한 특권 레벨 (ESP 및 SS) 또는 (SS0 및 ESP0)으로 다른 TASK_2로 태스크를 전환하는 경우 .x86-32에서 작업 전환

1- 작업 내 "스택"스위치의 경우에만 SS0, SS1, SS2가 사용됩니까?

2 SS가 임의의 권한 레벨의 스택 세그먼트를 보유 할 수 있습니까, 아니면 링 3 전용으로 스택 세그먼트 전용입니까?

답변

4

다양한 목적으로 CPU에서 사용하는 메모리의 구조 인 32 비트 TSS (Task State Segment)에 대해 이야기하고 있다고 가정합니다. ESP 및 SS 필드는 CPU가 이전 작업의 ESP 및 SS를 저장하고 CPU 관리 작업 전환 중에 새 작업의 ESP 및 SS 값을 복원하는 곳입니다. 이 필드는 다른 일반 용도 및 세그먼트 레지스터 필드 (예 : EAX 또는 DS)와 마찬가지로 작업 전환 중에 저장되고 복원됩니다.

ESP0, ESP1, ESP2, SS0, SS1, SS2 필드는 작업 전환 중에 사용되지 않습니다. 인터럽트 또는 예외로 인해 동일한 태스크 내에서 더 많은 권한 레벨이 변경 될 때만 사용됩니다. 스택 스위치가 발생하면 현재 TSS의 적절한 ESP # 및 SS # 값이 ESP 및 SS 레지스터에로드되고 이전 ESP 및 SS 값이 새 스택에 저장됩니다. 이러한 TSS 필드는 CPU에 의해 절대로 변경되지 않습니다. 인터럽트 처리기가 권한이 적은 코드로 돌아 오면 CPU는 저장된 ESP 및 SS 값을 스택에서 복원합니다.

작업 스위치로 인해 CPU의 권한 수준이 변경 될 수 있지만 결코 작업의 권한 수준이 변경되지 않습니다. 새 태스크는 이전에 실행 중이던 것과 동일한 권한 레벨에서 실행을 재개합니다.

32 비트 보호 모드에서는 기본적으로 OS가 TSS를 설정해야하지만 OS가 작업 전환을 위해 TSSes를 사용할 필요는 없습니다. 또한 OS가 자체 메커니즘을 사용하여 수동으로 작업을 전환 할 수 있으며, 대부분의 32 비트 x86 운영 체제가 어떻게 작동 하는지를 볼 수 있습니다. (CPU가 64 비트 긴 모드에서 작업 전환 메커니즘을 제공하지 않기 때문에 모든 64 비트 x86 OS가 작동하는 방식입니다.)