[OS] 운영체제의 스레드, CPU 스케줄링
스레드
스레드 개념
- 프로세스 내에서 실행되는 흐름의 단위 혹은 CPU 스케줄링의 기본 단위
- 한 프로세스를 여러개의 스레드로 동시 실행할 수 있다. (멀티스레드 프로세스)
멀티스레드의 구조
- 각 스레드는 자신의 register와 stack 영역을 가지며, 동일한 프로세스의 code, data, heap영역을 공유한다.
멀티 프로세스 vs 멀티 스레드
- 멀티 프로세스
- 한 프로그램을 여러 프로세스로 구성한다.
- 멀티 스레드보다 많은 메모리를 사용하고 CPU 점유시간을 가지며, 이로 인해 context switching 발생시 오버헤드가 크다.
- 프로세스간 통신이 까다롭다. (복잡한 IPC 사용)
- 자식 프로세스 중 하나에 문제가 발생하면 해당 프로세스에만 이상이 생기고 타 프로세스에는 영향을 주지 않는다.
- 멀티 스레드
- 한 프로세스를 여러 스레드로 구성한다.
- 자원을 공유하므로 시스템 자원 소모가 감소하며 자원의 효율적인 관리가 가능하다.
- 스레드 간 통신이 간단하다. (프로세스 내 공유영역)
- 동기화 문제가 발생할 수 있다. (프로세스 내 공유영역)
- 병목현상 혹은 교착 상태 발생
- 디버깅이 까다롭다.
CPU 스케줄링
- 운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하기 위해 시행함
- 비선점 스케줄링 방식과 선점 스케줄링 방식이 있다.
- 비선점 스케줄링 방식에서는 프로세스가 자원을 할당 받았을 경우, 자원을 스스로 반납할 때까지 계속 그 자원을 사용하도록 허용한다.
- FCFS(First-Come-First-Served), SJF(Shortest Job First)
- 선점 스케줄링 방식에서는 우선순위를 부여해 이에 대해 오름차순으로 시행한다.
- 우선순위가 높은 프로세스가 실행되면 현 실행 프로세스에서 강제로 CPU를 회수한다.
- 유닉스 계열 운영체제에서는
ps -el
명령어를 통해 프로세스 우선순위를 확인할 수 있다. - Round Robin, Shortest Remaining Time, 다단계 큐
장기 스케줄링
- 어떤 프로세스를 준비 큐에 넣을 것인지 결정한다. (=작업 스케줄러)
- 디스크에 작업을 적재한 뒤, 필요할 때 실행할 작업을 가져와 커널(준비 큐)에 등록할지 결정
- 메모리에 동시에 올라가 있는 프로세스의 수를 조정
중기 스케줄링
- 메모리에 적재된 프로세스 수를 관리 ( = 준비 큐 관리)
-
너무 많은 프로스스에게 메모리를 할당해 시스템의 성능이 저하되는 현상을 해결하기 위해 메모리에 적재된 프로세스의 수를 동적으로 조절한다.
- 스왑 아웃
- 프로세스가 메모리에서 일정 시간 동안 실행되고 있는 상태에서 메모리에서 제거되어 디스크에 저장되는 것을 의미한다.
- 중기 스케줄링은 프로세스의 상태에 중지 상태(Suspended, stopped)가 추가되며, 중지 상태의 프로세스는 메모리를 통째로 빼앗기고 디스크로 스왑 아웃된다.
단기 스케줄링
- 어떤 프로세스에 CPU를 할당해 줄 것인지 결정한다. (=CPU 스케쥴러)
- 미리 정한 스케줄링 알고리즘에 따라 CPU를 할당할 프로세스를 선택한다. (선점 혹은 비선점)
- 빈번하게 호출되기 때문에 수행 속도가 충분히 빨라야 한다.
Leave a comment