1 minute read

프로세스

프로세스는 실행중인 프로그램을 말한다.
프로세스의 현재 상태를 나타내는데 필요한 모든 요소를 프로세스의 문맥(context)이라 한다.

프로세스의 상태

프로세스는 상태(state)가 변경되며 수행된다.

  • running
    cpu를 잡고 인스트럭션을 수행중인 상태
  • ready
    다른 모든 조건을 완료한 채 cpu를 기다리는 상태
  • blocked
    cpu를 줘도 당장 인스트럭션을 수행할 수 없는 상태
    (I/O 작업등을 처리중인 상태)
  • suspended
    외부적인 이유로 프로세스의 중지 상태
    메모리를 통째로 빼앗긴 상태
    중기 스케줄러에 의해 디스크로 스왑 아웃된 상태

blocked는 I/O같이 오래걸리는 작업을 하는 동안에 CPU를 낭비하게 되니 CPU를 반납하고 큐로 들어간 상태를 말한다. I/O작업 동안에 device queue에 있다가 끝나면 인터럽트 후 ready queue에서 ready상태가 된다.
반면에 suspended는 잠시 중지되어 있다가 외부에서 재개시켜줘야 ready상태가 된다.

running, ready, blocked는 프로세스 입장에서 일을 하고 있는 상태이지만 suspended는 메모리를 빼앗기고 정지된 상태이다.

  • job queue
    현재 시스템 내에 있는 모든 프로세스의 집합
  • ready queue
    CPU를 기다리는 프로세스의 집합
  • device queue
    I/O 장치의 처리를 기다리는 프로세스의 집합

PCB(Process Control Block)

운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보를 말한다.
주소공간의 data에 PCB가 들어있다.

문맥 교한 (context switch)

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정이다.
사용자 프로그램에서 또 다른 사용자 프로그램으로 넘어가는 과정이 문맥 교환이다.
CPU가 다른 프로세스로 넘어갈 때 운영체제가 넘어가는 프로세스의 상태를 읽어서 특정 상태에서 시작하게 하고 넘기는 프로세스의 상태를 저장해서 다시 돌아왔을 때 현재의 상태에서 다시 시작할 수 있도록 한다.
CPU의 레지스터에 저장되어 있던 값을 해당 프로세스의 PCB에 저장한다.

스케줄러

  • 장기 스케줄러
    시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정한다.
    메모리에 올라간 프로그램의 수를 제어한다.
    지금은 거의 사용되지 않고 프로세스 시작 시 바로 메모리를 할당해 무조건 ready queue로 보낸다.

  • 중기 스케줄러
    여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아낸다.
    장기 스케줄러 대신에 메모리에 올라간 프로그램의 수를 제어한다.
    쫓겨난 프로세스는 suspended 상태가 된다.

  • 단기 스케줄러
    어떤 프로세스를 다음번에 running시킬지 결정한다.
    프로세스에 CPU를 주는 문제를 맏는다.

프로세스 상태도

쓰레드 (thread)

쓰레드는 프로세스의 실행 단위이다.
하나의 프로세스는 여러개의 쓰레드로 구성할 수 있다.
하나의 주소공간에 stack, data, code가 있을 때 스택에 쓰레드1의 스택, 쓰레드2의 스택…이렇게 여러개의 스택으로 구성할 수 있다.

쓰레드들은 하나의 프로세스에 할당된 자원을 공유한다.
각각의 쓰레드들은 독립된 스택, PC레지스터를 가지고 있다.

빠른 응답성과 자원 절약이 장점이다.

커널의 지원을 받으면 커널 스레드, 커널의 지원을 받지 않고 사용자 수준에서 스레드를 구현하면 유저 스레드라고 한다.

Leave a comment