1. 프로세스의 개념
프로세스란 레지스터, 스택, 포인터, 실행 중인 프로그램, 데이터 등의 집합체라고 할 수 있다. 실행 중인 프로세스가 가장 보편적인 정의로, 프로세서에 의해 수행되는 프로그램 단위로 현재 실행 중이거나 곧 실행 가능한 PCB(Process Control Bloack)를 가진 프로그램이다.
그렇다면 여기서 스레드의 개념도 짚고 넘어가면 좋다. 왜냐면, 스레드의 개념이 프로세스와 유사하기 때문이다. [프로세스] - [실행 기능] = [스레드]가 성립한다. 스레드는 제어의 흐름을 의미하는 것으로, 프로세스에서 실행의 개념만을 분리한 것이다. 프로세스의 구성을 크게 제어의 흐름 부분(=실행 단위)과 실행 환경 부분으로 나눌 때, 스레드는 프로세스의 실행 부분을 담당함으로써 실행의 기본 단위가 되는 것이다.
스레드와 프로세스의 차이점은 아래의 표를 통해 기본적인 내용을 기술하였다.
다만 예외적인 사항에 대해 하나 첨언한다면, 스레드가 프로세스의 작업 부하에 비해 더 큰 작업 부하를 처리하는 경우, 스레드를 종료하는 데 더 많은 시간이 걸릴 수 있다. 그러나 이는 극히 드문 상황이기에 그럴 수 있다고만 이해하고 넘어가면 될 일이다.
구분 | 스레드 | 프로세스 |
상호통신 | Library Call 요청 스레드만 블로킹 |
System Call Call 종료 시까지 전체 자원 블로킹 |
처리방식 | CPU를 이용하는 기본 작업 단위로 구분 |
자원 할당을 위한 기본 구분 단위 |
부하 | 프로세스보다 상대적으로 부하 발생이 적다. | 문맥 교환으로 인한 부하 발생한다. 프로세스 자원을 할당할 때에도 부하가 발생한다. |
시간 | 생성과 종료에 시간이 덜 걸리는 편이다. | 생성과 종료에 시간이 더 걸리는 편이다. |
통신 효율성 | 통신 측면에서 더욱 효율적이다. | 통신 측면에서 효율성이 떨어진다. |
차단 시 영향 | 사용자 수준 스레드가 차단되면, 다른 모든 사용자 수준의 스레드도 차단된다. | 하나의 프로세스가 차단되어도, 다른 프로세스의 실행에는 영향을 미치지 않는다. |
변경 시 영향 | 동일한 프로세스의 모든 스레드는 주소 공간과 기타 리소스를 공유하므로, 기본 스레드를 변경하면 프로세스의 다른 스레드 동작에 영향을 미칠 수 있다. | 상위 프로세스에 대한 변경 사항은 하위 프로세스에 영향을 주지 않는다. |
시스템 호출 | 시스템 호출은 포함되지 않으며, API를 사용하여 생성한다. | 시스템 호출이 포함된다. |
데이터 공유 | 스레드는 서로 데이터를 공유한다. | 프로세스는 서로 데이터를 공유하지 않는다. |
2. 프로세스 상태전이(Process State Transition)
운영체제-프로세스 시행 제어, 프로세스에 대한 정보 유지 등을 담당한다.
프로세스 실행 결정 및 필요한 시스템 자원을 할당하는 과정으로도 볼 수 있다.
프로세스 상태 변환을 위해 O/S는 작업 스케줄러, 프로세스 스케줄러 두 종류의 CPU 스케줄러를 사용한다.
2.1 프로세스 상태전이도(Process State Transition Diagram)
프로세스가 실행되면 모든 프로세스는 준비상태의 준비 큐(FIFO)로 들어간다. 준비 큐의 프로세스는 CPU 스케줄리 알고리즘에 의해 CPU를 점유하게 되고, 프로세스를 실행한다. CPU에서 실행 중인 프로세스가 Time Out이 되면 다시 준비 큐의 뒤로 들어가고 CPU를 점유할 때까지 대기한다.
만약 실행 중인 프로세스가 디스크 입출력과 같은 작업이 발생하면 대기 상태가 되고, 입출력을 수행한다. 입출력이 완료되면 다시 프로세스는 준비상태로 들어가 대기하게 된다. 이렇게 프로세스가 CPU를 점유하는 과정을 프로세스 상태전이라 한다.
Active 모드에서의 프로세스 상태 변환은 아래 표와 같다.
* 대기 단계는 슬립 단계로 표현하기도 한다.
상태 | 설명 | |
Admit | 생성 → 준비 | 준비 큐가 비어 있을 때의 과정으로, 작업 스케줄러가 담당한다. |
Dispatch | 준비 → 실행 | 준비 큐에 있는 하나의 프로세스를 선택하여 CPU를 할당한다. 여기서는 프로세스 스케줄러가 담당한다. |
Timer Runout | 실행 → 준비 | CPU를 할당 받은 프로세스가 CPU의 제한된 사용 시간을 모두 쓴 경우 발생한다. CPU 스케줄링 정책에 따라 우선순위가 높은 프로세스에게 CPU를 양보할 때, 운영체제의 자체 CPU 서비스 요청 시 전이된다. 이것을 선점이라 한다. |
Blocked | 실행 → 대기 | CPU를 할당 받은 프로세스가 I/O를 요구, 다른 자원 요구 등 CPU 이외의 서비스 작업을 원할 때 발생한다. |
Wake up | 대기 → 준비 | 대기 중이던 사건의 처리가 끝났을 때 발생한다. |
Release | 실행 → 종료 | 프로세스의 정상/비정상 종료 시 발생한다. |
2.2 문맥 교환(Context Switching)
CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정이다.
프로세스가 준비 → 실행, 실행 → 준비, 실행 → 대기 등으로 상태가 변경될 때 발생한다.
문맥 교환은 인터럽트가 발생하였거나, 실행 중인 프로세스가 CPU 사용을 허가받은 시간을 모두 소모한 경우, I/O 입출력을 위해 대기해야 하는 경우에 발생한다. 산점형 스케줄러를 사용하는 운영체제는 실행 중인 프로세스보다 높은 우선순위를 가진 프로세스가 도착한 경우에도 문맥 교환이 발생한다.
2개 이상의 프로그램을 메인 메모리에 기억시키고, CPU를 번갈아 사용하면서 컴퓨터 자원을 최대로 활용하는 멀티프로그래밍 환경에서 문맥 교환 과정이 이루어지며, 병행처리를 수행한다.
※ PCB란?
PCB는 Process Control Block으로, 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳이다. 프로세스의 상태 정보를 저장하는 구조체라고 보면 된다. 이는 프로세스 상태 관리와 문맥 교환을 위해 필수적이라 할 수 있는데, PCB는 프로세스 생성 시 만들어지며, 메인 메모리에 유지된다.
PCB에서 유지되는 정보로는 PID(프로세스의 고유 ID), 포인터(다음 실행될 프로세스의 포인터), 상태(준비, 대기, 실행 등의 상태), Register save area(레지스터 관련 정보), Priority(스케줄링 및 프로세스 우선순위), Account(CPU 사용시간, 실제 사용된 시간), Memory Pointers(메모리 관리 정보), 입출력 상태 정보, 할당된 자원 정보 등이 있다.
PCB는 정상적인 프로세스 액세스로부터 보호되는 메모리 영역에 보관되어야 한다. 일부 운영체제에서는 PCB가 프로세스 스택의 제일 아래에 배치된다.
'보안 > 개념' 카테고리의 다른 글
스펨 메일 차단 총정리 (1) | 2023.12.23 |
---|---|
CPU 스케줄링 기법 총정리 (1) | 2023.12.21 |
Sendmail 보안 총정리 (0) | 2023.12.19 |
정보보호 거버넌스 체계 총정리 (1) | 2023.12.17 |
운영체제(OS) 총정리 (2) | 2023.12.16 |