1 minute read

스레드

스레드 개념

  • 프로세스 내에서 실행되는 흐름의 단위 혹은 CPU 스케줄링의 기본 단위
  • 한 프로세스를 여러개의 스레드로 동시 실행할 수 있다. (멀티스레드 프로세스)

멀티스레드의 구조

  • 각 스레드는 자신의 registerstack 영역을 가지며, 동일한 프로세스의 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