WIPIVERSE

TSS (운영 체제)

TSS (Task State Segment)

개요

Task State Segment(작업 상태 세그먼트, TSS)는 x86 아키텍처에서 정의된 특수한 메모리 구조로, CPU가 태스크(작업) 전환 시 필요로 하는 레지스터 내용 및 시스템 상태 정보를 저장한다. 주로 운영 체제 커널이 다중 작업(multi-tasking)을 구현하기 위해 사용한다. TSS는 하드웨어 수준에서 지원되며, 보호 모드(protected mode)와 가상 8086 모드(V86 mode)에서 중요한 역할을 한다.

주요 기능

  1. 프로세서 상태 저장
    • 일반 목적 레지스터(EAX, EBX 등), 세그먼트 레지스터(CS, DS 등), 플래그 레지스터(EFLAGS) 등 현재 실행 중인 태스크의 상태를 보관한다.
  2. 프로세스 전환 지원
    • 인터럽트나 시스템 콜 발생 시, 현재 태스크의 상태를 TSS에 저장하고 새 태스크의 상태를 로드함으로써 빠르고 일관된 전환을 가능하게 한다.
  3. I/O 포트 권한 관리
    • TSS 구조체 내 I/O 바이트맵(I/O bitmap)을 통해 특정 태스크가 접근 가능한 I/O 포트를 정의한다. 이는 하드웨어 직접 접근을 제한하여 보안을 강화한다.

구조

TSS는 104바이트(32비트 모드) 또는 104+16N 바이트(64비트 모드) 크기의 데이터 구조이며, 주요 필드는 다음과 같다.

오프셋 (32비트) 필드 설명
0x00 prev_task_link 이전 TSS 세그먼트 선택자(링크드 리스트 형태)
0x04 esp0 / ss0 커널 모드 전환 시 사용되는 스택 포인터/세그먼트
0x0C esp1 / ss1 권한 레벨 1(시스템) 전환용 스택
0x14 esp2 / ss2 권한 레벨 2 전환용 스택
0x1C cr3 페이지 디렉터리 베이스 레지스터 값
0x20 eip 다음 실행될 명령 주소
0x24 eflags 플래그 레지스터
0x28‑0x3C 일반 레지스터 (EAX, ECX, …) 현재 레지스터 값
0x44‑0x4C 세그먼트 레지스터 (ES, CS, SS, DS, FS, GS) 현재 세그먼트 선택자
0x5C ldt_selector 로컬 디스크립터 테이블(LDT) 선택자
0x60 t 트랩 플래그(디버깅용)
0x64 io_map_base I/O 비트맵 시작 오프셋

64비트 모드에서는 추가 필드(rsp0·rsp1·rsp2 등)와 확장된 레지스터가 포함된다.

운영 체제에서의 활용

  • Linux: 초기 x86 커널은 TSS를 사용해 사용자 모드 → 커널 모드 전환 시 커널 스택(esp0)을 지정하였다. 현재는 각 CPU마다 하나의 TSS를 유지하며, CPU 별로 별도의 커널 스택을 관리한다.
  • Windows: Windows NT 계열은 TSS를 이용해 보호 모드에서의 태스크 전환과 I/O 포트 권한을 제어한다.
  • FreeBSD·OpenBSD 등 BSD 계열 역시 TSS를 활용해 커널 스택 전환 및 하드웨어 인터럽트 처리를 수행한다.

역사 및 표준

  • 인텔: 80286부터 보호 모드에서 태스크 전환을 지원하기 위해 TSS가 도입되었다. 이후 80386, 80486, Pentium 계열에서도 일관되게 지원된다. 인텔의 System Programming Guide와 Software Developer’s Manual에서 상세히 정의되어 있다.
  • AMD: AMD64 아키텍처에서도 TSS를 지원한다. 64비트 모드에서는 TSS가 주로 커널 스택 포인터(rsp0)와 I/O 비트맵을 위한 용도로 사용된다.

제한점 및 현대적 대체

  • 기존 TSS 기반 하드웨어 태스크 전환은 비용이 높고 복잡하여, 현대 운영 체제는 대부분 소프트웨어 기반 스케줄링(예: 컨텍스트 스위치)을 구현한다.
  • TSS는 여전히 커널 스택 전환 및 I/O 권한 관리 등 제한된 목적으로 유지되며, 완전한 하드웨어 태스크 전환 메커니즘으로서는 거의 사용되지 않는다.

참고 문헌

  1. Intel® 64 and IA‑32 Architectures Software Developer’s Manual, Volume 3: System Programming Guide.
  2. AMD64 Architecture Programmer’s Manual, Volume 2: System Programming.
  3. Linux Kernel Documentation – x86 TSS handling.
  4. "Operating System Concepts" (Silberschatz, Galvin, Gagne), 10th Edition – Chapter on CPU scheduling and hardware support.

이 문서는 공개된 기술 문서와 운영 체제 소스 코드에 기반한 객관적인 정보를 제공한다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기