2013-01-23 2 views
4

x86 아키텍처에는 SS, CS, DS, FS, GS와 같은 일부 세그먼트 레지스터가 있습니다.세그먼트 레지스터가 운영 체제에서 수정되는시기는 언제입니까?

이 16 비트 레지스터는 세그먼트 기본 + 오프셋 값을 계산하기 위해 LDT, GDT 항목 (세그먼트 선택기로) 및 MMU 참조 this (GDT, LDT)를 나타냅니다. 사용 권한을 확인하십시오 등

내가 궁금한 점은 : 누가 무엇을 기준으로 세그먼트 레지스터 내용을 채우고 있습니까? 커널 스케줄러?

그리고 응용 프로그램이 세그먼트 레지스터 값 자체를 변경하면 어떻게됩니까? 현재 CPU의 CPL이 있기 때문에 CS 만 변경할 수 없다는 것을 알고 있습니다. 하지만 다른 레지스터 (SS, DS ...)는 변경할 수 있습니다. 무엇을? (커널 스케줄러 ??)를 기반으로 세그먼트 레지스터 내용을 채 웁니다

답변

5

부트 로더는 않습니다. ISR 및 예외 처리기가 수행합니다. 시스템 호출 핸들러가합니다. 스케줄러는 않습니다. 다른 일부 부품은 필요할 수 있습니다. 레지스터는 비공개로 간주되어 다양한 컨텍스트 전환 중에 저장되고 복원되어야합니다. 물론, 그들은 사전에 너무 초기화되어야합니다.

이러한 레지스터에 있어야 할 사항을 기반으로합니다. 그들의 가치는 보편적으로 OS의 다른 부분과 다른 프로그램 사이에서 공유되지 않습니다.

응용 프로그램이 세그먼트 레지스터 값을 변경하면 어떻게됩니까? 현재의 CPU의 CPL이 있기 때문에 CS 만 변경할 수 없다는 것을 알고 있습니다. 다른 레지스터 (SS, DS ...)는 변경 될 수 있습니다.

어떻게됩니까? 거기에 아무도 없다거나 버그, 트리플 오류, CPU를 리셋하고, 전체 컴퓨터의 아마 재부팅의 경우는, 성공적으로 변경하거나 예외 (일반적으로, #GP)을 유발하고 예외 핸들러가하는 어떤 일이나 중.

현재 권한 수준에서로드 할 수있는 항목이 무엇인지 알면 세그먼트 레지스터를 변경할 수 있습니다. 프로그램이 레벨 3에 있고 OS가 DPL = 3을 설정 한 두 개의 코드 세그먼트가있는 경우 프로그램은 CS 레지스터에 둘 중 하나를 사용할 수 있습니다. 모르는 사람은 프로그램을 중단시킬 가능성이 큽니다.

x86 세그먼트 레지스터의 세부 사항을 알고 싶습니다.

은 자신의 사본을 얻기 읽기 :

인텔 ® 64 및 IA-32 아키텍처 소프트웨어 개발자 설명서 결합 볼륨 : 1, 2A, 2B, 3A 및 3B를.

관련 장 (메모리 관리, 인터럽트/예외 처리, 작업 전환)을 수행하거나 특정 레지스터 (예 : CS 또는 SS 또는 DS)를 검색하거나 특정 명령에 대한 설명 및 의사 코드를 볼 수 있습니다 .

이 막연한 질문에 대해 더 정확한 답변을 얻지 못할 것입니다.

+0

감사합니다. 그 매우 유용한 아직도 – daehee

관련 문제