5. 프로세스 및 스레드 관리(2) - 인터럽트 처리, 스레드
운영체제는 다양한 프로세스를 관리하며, 프로세스 실행 중 예기치 않은 문제가 발생할 수 있다.
이러한 문제를 해결하는 핵심 개념이 인터럽트(Interrupt)이며, 효율적인 작업 처리를 위해 스레드(Thread)가 활용된다.
이번 포스터에서는 인터럽트의 개념과 처리 과정, 그리고 스레드의 정의와 유형에 대해 알아보도록 하겠다.
1. 인터럽트(Interrupt)
1.1 인터럽트란?
인터럽트는 실행 중인 프로그램을 일시적으로 중단시키고, 운영체제가 특정 작업을 수행하도록 하는 신호이다. 이는 예상치 못한 이벤트가 발생할 때 시스템이 적절히 대응할 수 있도록 한다. 인터럽트는 시스템 성능을 향상시키는 중요한 기법이지만, 과도한 인터럽트는 성능 저하를 초래할 수 있다.
1.2 인터럽트의 종류
인터럽트는 발생 원인에 따라 여러 유형으로 분류된다.
- I/O 인터럽트: 키보드 입력, 마우스 클릭, 프린터 작업 완료 등 외부 장치와 관련된 이벤트가 발생할 때 발생
- 타이머 인터럽트: 시스템 클럭에 의해 주기적으로 발생하여 프로세스 스케줄링과 같은 시간 기반 작업을 수행할 때 사용
- 콘솔 인터럽트: 사용자 입력(예: 터미널 입력) 발생 시 시스템이 이를 처리하도록 하는 인터럽트
- 프로그램 체크 인터럽트: 잘못된 메모리 접근, 나누기 0 등의 프로그램 오류 발생 시 발생
- 머신 체크 인터럽트: CPU, 메모리 등 하드웨어 오류가 감지될 때 발생
- 프로세스 간 인터럽트: 프로세스 간 동기화 또는 통신이 필요할 때 발생
- 시스템 호출 인터럽트: 사용자 프로그램이 운영체제의 기능(파일 입출력, 네트워크 요청 등)을 요청할 때 발생
1.3 인터럽트 처리 과정
인터럽트가 발생하면 운영체제는 이를 처리하기 위해 다음과 같은 단계를 수행한다.

이를 더 자세하게 하면 다음 처럼 표현할 수 있다.

- 인터럽트 발생: 현재 실행 중인 프로세스가 중단되고, 인터럽트 핸들러가 호출됨
- 인터럽트 원인 분석: 인터럽트가 발생한 원인을 파악하고 적절한 처리 루틴을 선택
- 인터럽트 서비스 루틴(ISR) 실행: 해당 인터럽트에 대한 처리 수행
- 스케줄러 개입: 실행이 끝난 후, 다음에 실행할 프로세스를 결정
- 문맥 복원 및 실행 재개: 저장된 프로세스 상태를 복원하고, 해당 프로세스를 실행
이 과정에서 핵심 개념이 문맥 교환(Context Switching)이다.
2. 문맥 교환(Context Switching)
2.1 문맥 교환이란?
더 자세하게 말하자면 문맥 교환은 실행 중인 프로세스를 중단하고, 다른 프로세스로 전환하는 과정이다. 이를 통해 멀티태스킹이 가능해진다.
2.2 문맥 교환 과정
- 현재 프로세스의 컨텍스트 저장: CPU 레지스터, 스택, 프로그램 카운터 등의 상태를 저장
- 새로운 프로세스의 컨텍스트 로드: 다음 실행할 프로세스의 저장된 상태를 복원
2.3 문맥 교환의 비용
문맥 교환은 시스템 성능에 영향을 미치는 오버헤드가 발생할 수 있다. 이를 줄이기 위해 스레드(Thread)가 사용된다.
3. 스레드(Thread)
3.1 스레드란?

그렇다면 스레드란 무엇일까? 스레드는 프로세스 내부에서 독립적으로 실행되는 작은 실행 단위이다. 같은 프로세스 내의 여러 스레드는 주소 공간(Code, Data, Heap)을 공유하지만, 각각 독립적인 스택(Stack)과 레지스터(Registers)를 가진다.


3.2 스레드의 장점
- 병렬 처리 가능: 하나의 스레드가 지연되어도 다른 스레드는 실행 가능
- 자원 공유: 같은 프로세스 내에서 메모리를 공유하여 성능 향상
- 문맥 교환 비용 절감: 프로세스 간 전환보다 스레드 간 전환이 효율적
- 멀티코어 활용 최적화: 멀티코어 CPU 환경에서 성능 극대화 가능

이러한 스레드는 위의 방법 처럼 사용된다.
3.3 단일 스레드 vs 멀티 스레드
특징 | Single-thread | Multi-threads |
스레드 수 | 프로세스당 1개 | 프로세스당 여러개 |
주소 공간 | 프로세스에 고유 | 프로세스 내 스레드 간 공유 |
자원 공유 | 자원 공유 X | 프로세스 내 스레드 간 자원 공유 O |
장점 | 구조 단순, 디버깅 용이 | 자원 공유 효율적, 응답 속도 향상 |
단점 | 사용자 응답성 낮음, 자원 활용 비효율적 | 동기화 문제 발생 가능 |
3. 스레드의 유형과 운영 방식
스레드는 운영 방식에 따라 다음 세 가지로 나뉜다.
1) 사용자 수준의 스레드(User thread)

- 운영체제 개입 없이 사용자 영역에서 실행
- 빠른 실행과 낮은 문맥 교환 비용
- 단점: 하나의 스레드가 블로킹되면 전체 프로세스가 멈춤
- 예시: Java Green Thread, Python 일부 라이브러리
2) 커널 수준 스레드(Kernel thread)

- 운영체제가 직접 스레드를 생성하고 관리
- 안정적이며, 멀티코어 CPU 활용 가능
- 단점: 문맥 교환 비용이 사용자 수준 스레드보다 큼
- 예시: Windows Thread, Linux pthread(POSIX thread)
3) 혼합형(n:m) 스레드

- 사용자 수준 스레드와 커널 수준 스레드를 혼합하여 사용
- 효율적이면서도 유연한 실행 가능
- 단점: 구현이 복잡하고 커널과의 상호작용에 따라 성능이 다를 수 있음
- 예시: Solaris LWP, 일부 최신 Linux 스레드 모델
'Computer Science(컴퓨터 과학) > 운영체제' 카테고리의 다른 글
4. 프로세스 및 스레드 관리(1) - 프로세스 관리 (0) | 2025.03.28 |
---|---|
3. 운영체제 개요(2) - 구조와 기능 (0) | 2025.03.27 |
2. 운영체제 개요(1) - 역할과 구분 (0) | 2025.03.24 |
1. 운영체제와 컴퓨터 시스템 (0) | 2025.03.13 |