항목 |
정의 및 특히 |
동시성 |
정의: 동시성은 하나의 CPU에서 여러 작업(프로세스 또는 스레드)이 동시에 실행되는 것처럼 보이게 하는 개념 |
- 여러 작업을 빠르게 전환하며 실행
- 여러 작업이 동일한 CPU와 메모리를 공유하며 동작
- 스케줄링을 통해 작업 실행 순서를 조정하여 멀티태스킹을 구현
- I/O 중심 작업(예: 파일 입출력, 네트워크 처리)에서 효과적 → CPU가 기다리는 시간이 긴 작업들
- 효율적인 시스템 자원 활용과 사용자 경험 개선에 핵심적인 역할 |
| 스레드풀
(Thread Pool) | 정의: 미리 스레드를 만들어 놓고 재활용한다
- 매번 스레드를 만드는 것이 비용면에서 비효율적이다
- 스레드 오버해드 줄인다 |
| 컨텍스트 스위칭 | 정의: 운영체제가 멀티태스킹을 구현하기 위해 중요한 개념
- CPU가 실행 중인 프로세스(또는 스레드)의 상태(Context)를 저장하고, 새로운 프로세스의 상태를 복원하는 과정
- 컨택스트에 프로세스 ID, 우선순위, 스케줄링 정보, CPU 레지스터 상태, 메모리 상태 저장됨 |
| | |
| 스케줄 | 정의: 스케줄러는 운영체제의 핵심 구성 요소로, CPU와 같은 시스템 자원을 적절히 분배하기 위해 프로세스나 스레드의 실행 순서를 관리하는 역할
- 작업 선택: 실행 가능한 작업(프로세스 또는 스레드) 중에서 **어떤 작업을 실행할지 결정
- 자원 분배:** CPU와 같은 제한된 자원을 여러 작업이 **공평하게 사용할 수 있도록 분배
- 컨텍스트 스위칭 관리:** 작업 간 전환 시, 이전 작업의 상태(레지스터, 프로그램 카운터 등)를 저장하고, 새로운 작업의 상태를 복원하여 작업이 중단 없이 진행
- 멀티스레딩 환경에서는 여러 스레드가 공유 리소스에 접근할 때 동기화(Synchronization)가 필요 |
| 스케줄러의 종류 | 1. 장기 스케줄러: 디스크에서 메모리로 로드할 작업을 선택해서 시스템의 전체적인 작업 부하를 조절
2. 중기 스케줄러: 메모리에 있는 작업 중 어떤 작업을 임시로 중단(스왑)할지 결정.
3. 단기 스케줄러: 실행 가능한 작업 중 다음에 CPU를 사용할 작업을 결정, 컨텍스트 스위칭이 발생. |
| 스케줄러가 필요한 이유 | - CPU를 자주 사용하여 성능을 극대화
- 단위 시간 동안 처리 가능한 작업의 수를 증가시켜 시스템 처리량을 최적화
- 작업의 시작부터 종료까지 걸리는 시간을 줄여 효율적으로 작업 완료
- 작업이 대기열에서 기다리는 시간을 줄여 자원의 빠른 순환 지원
- 작업이 시작된 후 첫 번째 응답까지 걸리는 시간을 줄여 빠른 사용자 피드백 제공 |
| 비선점형 스케쥴링 | - 실행 중인 프로세스가 자발적으로 종료하거나 I/O 작업을 수행해야 다른 프로세스가 실행됨
- 컨텍스트 스위칭 빈도가 낮아 오버헤드가 적음
- FCFS(First Come First Serve), SJF(Shortest Job First, 비선점형) |
| 선점형 스케줄링 | - 실행 중인 프로세스를 강제로 중단하고 다른 프로세스를 실행할 수 있음
- 컨텍스트 스위칭이 자주 발생하여 오버헤드 증가
- 예: 라운드 로빈, SJF(Shortest Job First, 선점형), 우선순위 스케줄링(선점형) |
| 라운드로빈 스케쥴링 | 정의: 시분할 시스템을 위해 설계된 선점형 스케줄링의 하나로서, 프로세스들 사이에 우선순위를 두지 않고, 순서대로 시간단위(Time Quantum/Slice)로 CPU를 할당하는 방식
- 대표적인 스케줄링 기법
- 컴퓨터 자원을 사용할 수 있는 기회를 프로그램 프로세스들에게 공정하게 부여 |
| 시분할 시스템 | 정의: 여러 사용자가 동시에 컴퓨터 시스템을 공유할 수 있도록 CPU 시간을 분할하여 각 사용자에게 할당하는 운영체제 방식 |
| 콘보이 현상 | 정의: 작업시간이 긴 프로세스를 우선적으로 처리하느라, 작업시간이 짧은 프로세스가 오랜 기간을 대기하며 평균 대기시간이 높아져 비효율적으로 작업하게 되는 것
- 비선점형(Non-Preemptive) 스케줄링
- FCFS (First Come First Serve) 스케줄링
- 해결방법: 선점형 스케줄링 사용 |
| 기아현상 | 정의: 우선순위 기반 스케줄링에서 낮은 우선순위를 가진 프로세스가 계속 CPU를 할당받지 못하는 현상
- 해결방법: 에이징(Aging) 기법 → 정 시간이 지나면 낮은 우선순위 프로세스의 우선순위를 자동으로 높이는 방식 |
| | |
| 병렬성 | 정의: 여러 CPU 코어로 여러 스레드와 프로세스를 물리적으로 실제로 동시에 실행하는 개념
- 연산 중심 작업, 실시간 처리와 대규모 데이터 처리할 때 유용하다 |
| 암달의 법칙 | 정의: 컴퓨터 시스템의 일부를 개선할 때 전체적으로 얼마만큼의 최대 성능 향상이 있는지 계산
- Speedup = 1 / [(1 - P) + (P / S)]
Speedup : 전체 작업에 대한 속도 향상 비율
P : 전체 작업 중 개선된 부분이 차지하는 비율
S : 개선된 부분에 대한 성능(속도) 향상 비율 |
| c10k 문제 | 정의: 동시 접속자 10,000개를 처리하는 데 발생하는 성능 문제
- 원인: 전통적인 스레드/프로세스 기반 아키텍처, 블로킹 I/O 방식
- 해결: 멀티플렉싱 기반 I/O 모델 도입, 비동기 & 논블로킹 I/O |
1️⃣ 동시성과 병렬성의 차이 (멀티 쓰레드 환경에서의 동시성과 병렬성)
- 싱글코어 일때는, 동시성으로 인해 여러 쓰레드가 실행되지만, 실제로는 하나의 코어에서 번갈아 가며 실행된다.
- 멀티코어 일때는, 일부 스레드는 같은 코어에서 동시성으로 번갈아 가며 실행되고, 일부는 다른 코어에서 병렬성으로 동시에 실행된다.
2️⃣ 텍스트 스위칭이 발생할 때 생기는 부정적인 영향
- 컨텍스트 스위칭이 많아질수록 CPU가 실제 연산보다는 문맥 전환 자체에 시간을 소비
- 과도한 컨텍스트 스위칭은 시스템의 전체적인 응답 속도를 저하
3️⃣ 스레드풀을 사용하는 이유와 장단점에 대해서 설명해주세요
- 스레드풀은 미리 생성된 일정 개수의 스레드를 관리하는 풀로 작업(Task)이 발생하면 새로운 스레드를 생성하는 대신 기존의 스레드를 재사용하고 작업이 끝나면 스레드는 종료되지 않고 풀에 반환되어 새로운 작업을 기다린다.
- 장점:
- 스레드를 생성할 때는 메모리 할당, 스택 공간 확보, OS 리소스 등록 등 비용이 많이 발생하는 것을 방지
- 너무 많은 스레드가 생성되면 CPU가 문맥 전환(Context Switching)을 자주 수행해야 하므로 성능이 저하를 스레드 풀로 스레드의 개수 제한하면 해결 가능
- 단점:
- 스레드풀의 크기가 너무 작으면 요청이 많아질 때 새로운 작업이 대기 상태가 될 수 있다
- 스레드풀을 사용하더라도 너무 큰 풀을 사용하면 스레드 관리(Idle 상태 유지, 작업 분배 등)에 대한 오버헤드가 발생할 수 있다.
- 스레드풀을 사용하면 멀티쓰레딩 환경에서 발생하는 동기화 문제(레이스 컨디션, 데드락 등)를 추적하기 어려움.
4️⃣ 프로세스 스케쥴링과 스레드 스케쥴링의 차이점
프로세스는 실행 중인 프로그램의 인스턴스로 각 프로세스는 독립적인 메모리 공간(코드, 데이터, 스택, 힙)을 가진다. 스레드는 프로세스 내에서 실행되는 작업 단위로 같은 프로세스 내에서 코드, 데이터, 힙 영역을 공유하지만, 개별적인 스택을 가진다.
컨텍스트 스위칭 비용 측면에서는 프로세스 간 문맥 전환은 독립적인 주소 공간을 변경해야 하므로 비용이 높지만 스레드는 같은 프로세스 내에서 실행되므로 문맥 전환 비용이 상대적으로 낮다.
실행 단위로는 프로세스는 독립적으로 실행되고, 스레드는 프로세스 내에서 병렬로 실행될 수 있다.