[OS]프로세스와 쓰레드
📚프로세스
📄프로세스의 개요
프로세스는 실행 중인 프로그램을 말한다. 프로그램은 디스크 안에 파일로 존재하는 정적인 개체이다. 프로그램이 실행되려면 운영체제로부터 자원을 할당받아 동작을 시작해야한다.
실행에 들어간 프로그램이 프로세스이고, 프로세스는 정적인 프로그램과 달리 능동적인 개체이다. 프로세스에는 사용자 프로세스와 시스템 프로세스가 있다.
프로세스 동작은 CPU가 프로세스의 명령들을 실행하는 것이다. 운영체제는 프로세스들이 적절하게 CPU를 배정받아 작업을 처리할 수 있도록 관리한다. 또한 프로세스를 생성하고 종료시키기 위한 다양한 작업과 스케줄링 작업을 처리한다.
📄프로세스의 구성
프로세스는 크게 메모리 구조와 프로세스 제어 블록을 나뉜다.
- 메모리구조
- 코드 영역: 코드 영역은 프로세스의 프로그램 자체를 가진다. 이 코드 영역에서 명령을 하나씩 꺼내 CPU가 명령을 처리하게 된다.
- 데이터 영역: 프로세스가 사용하는 상수, 변수, 서브프로그램의 호출 상태 등 프로그램 실행 시 필요한 데이터를 가진다. 데이터 영역은 정적 데이터 영역, 스택 영역, 힙 영역으로 나눌 수 있다.
- 프로세스 제어 블록(PCB)
-
프로세스 번호(PID): 프로세스 구분 기준이 되는 식별자
-
프로세스 상태: 실행, 준비 등 프로세스의 현재 상태
-
프로그램 카운터(PC): 프로세스 수행을 위해 다음에 실행할 명령의 주소를 나타낸다.
-
레지스터: CPU 레지스터에 해당하는 정보. 프로세스가 실행 상태에서 다른 상태로 전이되는 경우 CPU의 레지스터 정보를 이곳에 저장하여 나중에 다시 실행 상태로 전이될 때 복구시켜 프로세스의 정확한 수행을 유지.
-
메모리 관리 정보: 가상주소와 실주소의 사상(매핑) 정보, 기준 레지스터와 경계 레지스터 등의 정보를 나타낸다.
-
프로세스 우선순위: 운영체제가 스케줄링할 때 어떤 프로세스를 선택할 것인가 결정하는데 필요한 프로세스의 우선순위 정보를 나타낸다.
-
회계정보: CPU 사용시간, 프로세스의 시스템 존재시간, 메모리 사용량, 보조기억장치 사용량, 기타 시스템 프로그램 사용 실태 등의 정보를 나타낸다.
-
📄프로세스 상태 관리
생성, 준비, 실행, 대기, 종료 총 다섯 가지 상태가 있다. 프로세스는 다섯 가지 상태 중 하나의 상태에 있게 된다.
-
생성상태: 처음 작업이 시스템에 주어진 상태이다. 운영체제가 작업에 대한 프로세스 제어 블록을 생성하고 작업 큐에 넣는다. 이때 프로세스 번호(PID)가 결정된다. 프로세스 메모리 구조가 준비되면 준비상태로 전이된다.
-
준비상태: 프로세스가 실행 준비된 상태로 CPU 할당을 기다리는 상태이다. 프로세는 준비 큐에서 기다리고 있다가 스케줄러에 의해 선택되어 CPU를 할당받으면 실행상태로 전이된다. 프로세스에 CPU를 할당하는 과정을 디스패치라고 한다.
-
실행상태: CPU가 프로세스의 명령들을 처리하는 상태이다. 프로세스가 실행되다가 스케줄러가 다른 프로세스를 준비 큐에서 선택하면, 실행상태의 프로세스는 CPU를 회수당하고 준비상태로 전이된다. 또한 프로세스가 입출력을 요구하는 작업이나 페이지 교환을 요구하는 작업 등을 만나면 대기상태로 전이된다.
-
대기상태: 프로세스가 입출력 작업이 끝나거나 특정 자원을 할당받을 때까지 보류되는 상태이다. 프로세스는 대기상태에서 입출력 작업이 끝났거나 자원을 할당받았다는 이벤트가 발생하면 준비상태로 전이된다.
-
종료상태: 프로세스가 끝난 상태이다. 이 단계에서 프로세스에 할당되었던 자원은 운영체제가 회수한다. 프로세스의 모든 처리가 완료되면 프로세스는 종료상태로 전이된다. 또는 에러 등의 이유로 프로세스가 강제 종료되는 경우에도 종료상태로 전이된다.
📄부모 프로세스와 자식 프로세스
사용자가 프로그램을 실행시켜 프로세스를 생성하는 방법도 있지만 프로세스가 다른 프로세스를 생성하는 방법도 있습니다. 프로세스 생성 시스템 호출을 이용하여 프로세스가 다른 프로세스를 생성합니다. 시스템 호출을 하는 프로세스를 부모 프로세스, 생성된 프로세스를 자식 프로세스라고 합니다.
프로세스가 모든 작업을 완료하고 정상적으로 종료되는 경우도 있지만 부모 프로세스에 의해 자식 프로세스가 강제 종료되는 경우도 있다. 자식 프로세스의 프로세스 번호를 이용하여 부모 프로세스가 프로세스 종료 시스템 호출을 통해 자식 프로세스를 강제 종료시킬 수 있다.
부모 프로세스가 종료되는 경우 운영체제가 자식 프로세스를 모두 종료시킬 수 있다. 자식 프로세스가 종료되면 실행 결과를 부모 프로세스에게 되돌려 준다.
📚쓰레드
전통적으로 프로세스는 프로그램을 실행하기 위한 기본적인 단위이다. 또한 프로세스는 자원 소유의 단위인 동시에 디스패칭의 단위입니다.
전통적인 프로세스는 하나의 메모리 구조를 갖고 하나의 제어흐름을 갖는다. 따라서 프로세스 내에서 다중처리가 불가능하다.
쓰레드는 프로세스 내에서 다중처리를 위해 제안된 개념이다. 전통적인 프로세스와 달리 최근의 운영체제에서는 자원 소유의 단위는 프로세스로 두고 디스패칭의 단위는 쓰레드로 둔다. 하나의 프로세스 안에 하나 이상의 쓰레드를 두어 제어 흐름이 하나 이상 될 수 있도록 한 것이다.
쓰레드는 실행에 필요한 최소한의 정보만 가진다. 프로그램 카운터, 레지스터 값, 스택 영역을 가진다. 그리고 쓰레드도 프로세스와 마찬가지로 다섯 가지 상태를 가진다.
프로세스가 멀티쓰레드(다중 쓰레드)로 구성된 경우 컴퓨터에 여러 개의 CPU가 있거나 CPU에 여러 개의 코어가 있다면 멀티쓰레드를 병렬로 처리할 수 있다는 장점이 있다.
쓰레드들이 다 다른 작업을 수행하도록 되어 있는 경우, 어떤 쓰레드에서 속도가 느린 작업을 하더라도 다른 쓰레드들이 기다릴 필요가 없어 효율적으로 처리가 가능하다.
출처: https://en.wikipedia.org/wiki/Thread_(computing)
Leave a comment