[운영체제] 2. 프로세스와 스레드

nnm·2020년 2월 20일
0

운영체제

목록 보기
2/10
post-thumbnail

OS? Oh Yes! 책을 바탕으로 학습한 내용입니다.

프로세스

수행중인 프로그램, 프로그램과 데이터를 기본으로 정상적인 실행을 위해 필요한 환경을 시스템으로부터 부여받은 능동적인 존재

PCB(Process Control Block)

PCB는 테이블 모양의 자료구조에 하나의 프로세스에 대한 모든 정보를 담고있는 것이다. 따라서 프로세스 관리는 PCB의 생성, 수정, 삭제와 같은 것이다. 또한 PCB에 대한 작업은 빈번하기 때문에 기본적으로 메모리에 저장한다. PCB는 다음과 같은 정보를 가지고 있다.

  • 프로세스 번호
  • 프로세스의 상태
  • 프로세스의 우선순위
  • 프로그램 카운터 값
  • 메모리 포인터
  • 문맥 데이터
  • 할당받은 자원들에 대한 목록
  • 계정 정보
  • 입출력 정보

프로세스의 상태와 변화

  • 생성 상태
    사용자 요청 작업이 커널에 등록되어 PCB가 만들어진 상태, 프로세스 생성 후 메모리 공간이 충분하면 준비 상태로 그렇지 않으면 보류 준비 상태로 변경한다.

  • 활성 상태
    실행될 프로그램과 데이터 등을 위해 메모리 공간을 부여받은 상태, 메모리 부족등의 이유로 메모리를 회수하는 경우 보류 상태로 넘어간다.

    • 준비 상태
      CPU를 할당받기 위해 기다리고 있는 상태, 메모리에 적재되어 큐에서 CPU 스케쥴링에 따른 CPU 할당을 기다리고 있다.
    • 실행 상태
      CPU를 할당받아 실행중인 상태, 인터럽트의 종류에 따라 준비 또는 대기 상태로 변화할 수 있다. 타임아웃으로 인한 준비 상태로의 변화, 입출력 처리 시스템 콜로 인한 대기 상태로의 변화 등이 있다.
    • 대기 상태
      입출력 처리 요청 또는 바로 확보 불가한 자원을 요청할시 CPU를 양도하고 요청한 일이 완료되기를 기다리는 상태, 대기 큐에서 요청한 일이 완료되면 다시 준비 상태로 변화하여 준비 큐에 들어간다.
  • 종료 상태
    모든 자원들이 회수되고 PCB만 커널에 남아있는 상태, 운영체제가 프로세스의 흔적들을 최종 정리하고 PCB를 삭제하면 프로세스가 완전히 사라지게 된다.

  • 보류 상태
    Swapped Out 프로세스가 메모리 공간을 뺏기고 디스크로 나감, Swapped In 프로세스가 다시 메모리로 들어옴,

    보류 상태의 목적은 일차적으로 메모리 확보다. 하지만 프로세스의 현재 결과가 오류일 때, 시스템에 위해를 가할 수 있는 수상한 행동을 보일 때, 주기적인 일이라서 다음 주기의 실행 때까지 메모리를 회수해도 문제되지 않는 경우에도 보류 상태를 활용한다.

    • 보류 준비 상태
      생성된 프로세스가 바로 메모리를 받지 못하거나, 준비 또는 실행 상태에서 메모리를 잃은 상태, CPU의 유휴상태를 방지하기 위해 대기 상태의 프로세스를 보류 대기 상태로 만들고 메모리를 확보한 후 보류 준비 상태의 프로세스를 준비 상태로 변환한다.
    • 보류 대기 상태
      대기 상태일 때 메모리 공간을 잃은 상태, 보류 대기의 프로세스는 특별한 경우가 아니면 입출력이나 기다리던 사건의 종료 시 보류 준비 상태가 된다.

문맥교환

  • Mode Switching
    인터럽트 처리 전후의 프로세스가 같은 경우 사용자 모드에서 인터럽트 처리를 위해 커널 모드로 바뀌고 처리가 끝난 후 다시 사용자 모드로 바뀐다.
  • Process Switching
    인터럽트 처리 전후의 프로세스가 다른 경우, 모드 스위칭에 비해 해주어야 할 일이 더 많다.

스레드

프로세스 내부에서 더 작게 세분된 스케쥴링의 단위, 한 프로세스에 속한 각각의 스레드들은 프로세스가 가지는 자원을 공유하며 각 스레드는 자신의 실행 환경(스레드 제어 블록, 스택)을 가진다.

  • 사용자 레벨 스레드
    스레드 라이브러리에 의해 관리되며 스레드와 관련된 모든 행위는 사용자 공간에서 이루어지므로 커널은 스레드의 존재를 알지 못 한다. 커널은 해당 스레드가 속한 프로세스의 행위로 인식한다. 또한 스레드 스위칭에 커널의 개입이 필요 없으며 스케쥴링 또한 스레드 라이브러리에서 독자적으로 처리한다.

    특정 스레드의 대기가 자신이 소속된 프로세스 내의 모든 스레드들의 대기를 초래하며, CPU가 프로세스 단위로 할당되기 때문에 다중처리의 환경이 주어진다 해도 스레드 단위의 다중처리가 불가하다.

  • 커널 레벨 스레드
    모든 스레드의 관리를 커널이 하는 경우, 스케쥴링이 커널에 의해 스레드 단위로 이루어진다. 따라서 다중처리 환경에서 스레드의 병렬 실행이 가능하며 한 스레드의 대기 시 같은 프로세스에 속한 다른 스레드로 스위칭이 가능하다.

    하지만, 같은 프로세스에 속한 스레드 간의 스위칭에도 커널의 개입이 필요하므로 모드 스위칭이 요구된다.

멀티스레딩

하나의 프로세스를 다수의 스레드로 만들어 실행하는 것, 자원의 생성과 관리가 중복되는 것을 줄일 수 있다. 또한 프로세스 간의 통신에는 커널의 개입이 필요하지만 한 프로세스 내의 스레드 간 통신은 커널의 개입이 필요없다.

profile
그냥 개발자

0개의 댓글