본문 바로가기
기타

프로세스

by 코끼리_땃쥐 2023. 2. 27.
반응형

프로세스(process)는 실행 중인 프로그램이다. 프로그램을 실행(명령어 입력 또는 더블클릭) 시키면 이 프로그램 코드가 메모리 주소 공간에 적지되고 첫 명령어 위치로 프로그램 카운터(PC, Program Counter)를 옮기게 된다. 이러한 프로세스는 운영체제 프로세스와 사용자 프로세스로 나눌 수 있다. 운영체제 프로세스는 커널 프로세스 또는 시스템 프로세스라 불린다. 반면에 사용자 프로세스는 사용자 코드를 수행하는 프로세스이다. 운영체제 프로세스는 시스템 운영에 필요한 내용 관리, 프로세스 실행 순서 제어, 프로세스 영역 감시, 사용자 프로세스 생성, 입출력 프로세스 관리등의 역할을 수행한다.

다중 프로그래밍 환경에서는 프로세스 여러개가 동시에 실행될 수 있다.

이러한 프로세스들을 병행 프로세스라 부른다. 병행 프로세스 중에서 데이터를 공유하지 않는 경우 독립 프로세스라 부른다.

반면에 프로세스 결과가 다른 프로세스 영향을 끼친다면, 협동 프로세스라 부른다.

 

프로세스 상태

모든 프로세스는 종료될 때까지 준비, 실행, 대기(보류) 상태로 변화되며 실행되는 과정을 반복한다. 이러한 과정은 작업 스케줄(또는 CPU 스케줄러)가 관리한다. 대부분의 프로세스는 준비 큐에 대기 하고 있으며, 실행 상태에는 하나의 프로세스만 존재할 수 있다. 스케줄러는 준비 큐의 맨 앞에 있던 프로세스를 선택하여 CPU자원을 쓸 수 있도록 한다. 실행 상태의 프로세스는  CPU를 점유하여 사용하고 있는 상태이다. 운영체제는 한 프로세스가 CPU를 독점하지 않도록 인터럽트 클록(Interrupt Clock)을 둔다. 인터럽트 클록은 한 프로세스가 CPU를 사용할 수 있는 시간을 제한한다. 특정 프로세스가 일정 시간이 지나도(timeout) CPU를 반환하지 않으면, 클록(Clock)이 인터럽트를 발생하고 운영체제가 CPU사용 권한을 빼앗는다.

 

프로세스 제어 블록(PCB, Process Control Block)은 프로세스 관리를 위해 유지되는 레코드 데이터 블록이다. 프로세스 생성 시 만들어지고 메인 메모리에 유지된다. 실행 중인 프로세스가 다른 프로세스로 CPU 제어를 넘겨줄 때, CPU의 레지스터 내용 등의 자원을 저장해야 한다. 저장되는 정보는 PCB이며 프로세스 상태를 표현한다. 이렇게 .CPU에서 수행하던 프로세스가 바뀔때는 PCB를 저장하기 위해서 문맥 교환(Context Switching)이 발생한다. 프로세스 교환은 운영체제가 다른 프로세스를 실행 상태로 변경하고 해당 프로세스에 제어를 넘겨주는 과정을 말한다. 문맥 교환은 프로세스를 다른프로세스로 교환하기 위해 이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터를 적재하는 이련의 과정을 말한다.

 

프로세스의 실행

 

프로세스는 고유의 식별자 (PID)를 가지고 있다. 프로세스 생성 시스템을 호출을 통하여 새로운 프로세스를 생성 가능하며 일정한 구조체를 가지고 있다. 프로세스들은 서로 연결 리스트 관계를 유지한다.

프로세스는 운영체제 또는 다른 사용자들의 응용프로그램 요청에 의해 생성된다. 운영체제가 새로운 프로세스를 생성/추가 하려면 프로세스 제어 블록(PCB)을 만든 후 프로세스에 주소 공간을 할당해야 한다. 새로운 프로세스에 프로세스 식별잘를 할당한다. 그리고, 프로세스의 모든 구성 요소를 할당할 수 있는 공간을 주소 공간 할당한다. PCB 정보에서 프로세스의 상태 정보, 프로그램 카운터, 스택 포인터등을 초기화하고, 작업 대기 큐에 삽입한다.

 

프로세스 생성 시에 브모/자식 관계를 유지하며 계층적으로 생성된다. 생성하는 프로세스를 부모 프로세스(Parent Process)라 부르고, 생성되는 프로세스를 자식 프로세스(Child Process) 또는 서브 프로세스 (Sub Process)라 부른다. 프로세스가 명령 실행 후 종료되고 운영체제에 프로세스 삭제 요청하게 된다. 프로세스가 삭제되면 프로세스를 메모리에서 제거하고 프로세스에 속한 자원을 반납한다.

 

프로세스는 프로그램 실행 자원과 실행되는 제어의 흐름으로 설명할 수 있다. 스레드(Thread)는 CPU를 사용하는 기본단위로 볼 수 있다. 이것은 프로그램 내 명령어를 실행할 수 있는 제어 흐름을 표현한다. 스레드를 경량 프로세스(LWP, Light Weight Process)라고도 한다. 스레드는 코드, 주소 공간, 운영체제의 자원 등을 공유한다. 하나의 작업은 적어도 하나의 스레드가 있어야 한다. 즉 프로세스는 하나 이상의 스레드를 가질 수 있다. 또한, 하나의 프로세스에서 다중 스레드를 수행할 수 있다. 스레드에는 스레드의 실행 상태, 스택, 정적 저장소(TLS, Thread Local Storage), 스레드 실행 환경 정보 등을 포함하고 있다.

 

다중 스레드를 사용할 경우 여러 가지 장점이 있다. 프로세스의 자원과 메모리를 공유하므로 자원의 오버헤드를 줄여서 자원 이용률을 높인다. 각 스레드는 다른 CPU에서 병렬 수행이 가능하므로 처리 속도를 향상 시킬 수 있다. 스레드마다 실행 상태가 달라지므로 고유한 레지스터와 스택 정보를 가지고 있어야 한다.

반응형

'기타' 카테고리의 다른 글

Modbus 란?  (0) 2023.09.21
물고기 성능 테스트  (0) 2023.03.06
데이터 표현 단위  (0) 2023.02.27
서비스 프로세스  (0) 2022.10.25
직접적인 디버거 탐지 방법, 간접적인 디버거 탐지 방법  (0) 2022.09.29

댓글