프로세스란
프로세스는 프로세서에 의해 처리되고 있는 사용자 프로그램을 의미한다. 프로그램과 프로세스는 차이가 있는데, 프로그램은 실행 명령의 집합으로 주 기억 장치에 적재되지 않은 명령들을 말하고, 프로세스는 실행 중으로 주 기억 장치에 적재되어있는 명령을 말한다.
동기 & 비동기(Synchronous & Asynchronous)
동기(Synchronous)란 여러 명령들이 순서에 맞추어 일어나는 것을 말한다.
비동기(Asynchronous)란 여러 명령들이 순서를 갖지 않고 각각 일어나는 것을 말한다.
프로세스 제어 블록(PCB; Process Control Block)
운영체제에서 각 프로세스를 관리하기 위한 정보를 저장하는 곳이며 커널(Kernal)에 적재된다. 한 프로세스가 생성될 때 마다 PCB는 생성되며 프로세스 수행이 완료되면 PCB는 제거된다.
PCB는 프로세스를 관리하기 위한 여러가지 정보들이 있는데 대표적으로 아래와 같은 정보가 있다.
- 프로세스 상태(State)
- 프로세스 식별자(PID)
- 스케줄링 및 우선순위
- CPU 레지스터 정보
- 메모리 정보
- 입출력 상태 정보
- 계정 정보
프로세스 상태

프로세스는 위 사진과 같은 상태 전이를 거쳐 수행된다.
- 제출(Submit) 상태
사용자가 작업을 시스템에 요청한 상태
- 접수(Hold) 상태
시스템이 작업을 수용하고 보조 기억 장치에서 주 기억 장치로 프로그램을 적재
- 준비(Ready) 상태
주 기억 장치에 적재된 프로세스가 스케줄링 정책에 따라서 프로세서 할당을 대기하는 상태
- 실행(Run) 상태
프로세스가 프로세서 자원을 할당받아 처리 중인 상태
- 대기(Wait, Block) 상태
I/O 요청을 수행하기 위해 잠시 대기 중인 상태
- 종료(Terminated, Exit) 상태
프로세스가 수행이 끝나고 PCB가 삭제되는 상태
스레드(Thread)란
프로세스 내에서의 작업 단위이며 시스템의 여러 자원을 할당받아 실행하는 프로그램 단위
프로세스의 일부 특성을 갖고 있어 경량 프로세스라고도 부른다.
스레드는 운용 방법과 속도에 따라 크게 두 가지로 분류된다.
- 사용자 수준 스레드
사용자가 만든 라이브러리를 사용해 운용함.
사용자 수준 스레드 N개가 커널 수준 스레드 1개에 매핑되어 다대일 스레드 매핑.
이식성이 높으며 커널 영역 전환 오버헤드가 줄고 유연한 스케줄링 가능.
한 스레드가 대기 상태가 되면 모든 스레드를 실행시킬 수 없음.
속도는 빠르지만 구현이 어려움.
- 커널 수준 스레드
운영체제의 커널에 의해 운용됨.
사용자 수준 스레드와 커널 수준 스레드가 일대일 매핑됨.
커널이 직접 스케줄링하고 실행하여 관리 지원을 많이 받을 수 있으나 커널 호출이 오래 걸림.
속도는 느리지만 구현이 쉽다.
스레드를 사용하면 하나의 프로세스에서 병행성을 증진하고, 응용 프로그램의 응답시간 단축, 프로세스 상호 통신이 향상되며 기억장소의 낭비가 줄어든다.