TSS (Task State Segment)
개요
Task State Segment(작업 상태 세그먼트, TSS)는 x86 아키텍처에서 정의된 특수한 메모리 구조로, CPU가 태스크(작업) 전환 시 필요로 하는 레지스터 내용 및 시스템 상태 정보를 저장한다. 주로 운영 체제 커널이 다중 작업(multi-tasking)을 구현하기 위해 사용한다. TSS는 하드웨어 수준에서 지원되며, 보호 모드(protected mode)와 가상 8086 모드(V86 mode)에서 중요한 역할을 한다.
주요 기능
- 프로세서 상태 저장
- 일반 목적 레지스터(EAX, EBX 등), 세그먼트 레지스터(CS, DS 등), 플래그 레지스터(EFLAGS) 등 현재 실행 중인 태스크의 상태를 보관한다.
- 프로세스 전환 지원
- 인터럽트나 시스템 콜 발생 시, 현재 태스크의 상태를 TSS에 저장하고 새 태스크의 상태를 로드함으로써 빠르고 일관된 전환을 가능하게 한다.
- 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 권한 관리 등 제한된 목적으로 유지되며, 완전한 하드웨어 태스크 전환 메커니즘으로서는 거의 사용되지 않는다.
참고 문헌
- Intel® 64 and IA‑32 Architectures Software Developer’s Manual, Volume 3: System Programming Guide.
- AMD64 Architecture Programmer’s Manual, Volume 2: System Programming.
- Linux Kernel Documentation – x86 TSS handling.
- "Operating System Concepts" (Silberschatz, Galvin, Gagne), 10th Edition – Chapter on CPU scheduling and hardware support.
이 문서는 공개된 기술 문서와 운영 체제 소스 코드에 기반한 객관적인 정보를 제공한다.