✔️ 프로세스(Process)란?
프로세스를 알아보려면 먼저 프로그램에 대해 알아야 합니다.
프로그램이란 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태를 말합니다.
즉, 작업을 위해 실행할 수 있는 파일입니다. (윈도우의 .exe, 맥os의 .dmg)
💡 프로그램을 실행하는 순간 해당 파일은 컴퓨터 메모리에 올라가게 되고, 이 상태를 동적인 상태라고 부릅니다.
이 동적인 상태의 프로그램이 바로 프로세스입니다.
프로세스는 크게 코드 영역(code), 데이터 영역(data), 스택 영역(stack), 힙 영역(heap)으로 이루어져 있습니다.
- 코드 영역(code) : 코드 자체를 구성하는 메모리 영역 (프로그램 명령)
- 데이터 영역(data) : 전역 변수, 정적 변수, 배열 등 코드가 실행되면서 사용한 변수나 파일들의 각종 데이터
- 스택 영역(stack) :
호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현할 때 사용 - 힙 영역(heap) : 동적으로 할당되는 데이터들을 위해 존재하는 공간
운영체제는 프로그램을 실행하기 위해 프로그램을 메모리의 적당한 위치로 가져옵니다. 이와 동시에 운영체제는 프로세스를 관리하기 위해 PCB(Process Control Block)을 생성합니다.
PCB(Process Control Block)
운영체제에서 프로세스에 대한 정보를 저장하기 위한 자료구조
운영체제는 PCB를 이용하여 프로그램을 프로세스로 만들어 실행합니다. 이렇게 프로그램이 프로세스로 변환되고 실행이 끝나면 프로그램으로 돌아가는 과정을 프로세스 상태라고 합니다.
프로세스 상태는 크게 5가지로 나누어져 있습니다.
- 생성 상태 : 프로그램을 메모리에 가져와 실행 준비가 완료된 상태, PCB 생성
- 준비 상태 : 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태
- 실행 상태 : 선택된 프로세스가 CPU를 사용하는 상태
- 대기 상태 : 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
- 완료 상태 : 프로세스가 종료된 상태, PCB가 삭제됨
✔️ 스레드(Thread)란?
스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 하나에 자원을 공유하면서 일련의 과정을 동시에 실행시킬 수 있는 것을 말합니다.
스레드는 한 프로세스 내에 주소 공간이나 자원들을 대부분 공유합니다.
기본적으로 하나의 프로세스가 생성되면 하나의 스레드가 같이 생성되고, 이를 메인 스레드라고 부릅니다. 스레드를 추가로 생성하지 않으면 하나의 프로그램의 모든 프로그램 코드는 메인 스레드에서 실행됩니다.
📍 멀티 프로세스와 멀티 스레드
멀티 프로세스는 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것입니다.
안정성이 높지만 각각 독립된 메모리 영역을 가지고 있어 작업량이 많을수록 오버헤드가 발생되며, Context Switching으로 인한 성능 저하가 발생될 수 있습니다.
Context Switching (문맥 교환)
한 프로세스가 CPU를 사용 중일 때 다른 프로세스가 CPU를 사용하기 위해
이전의 프로세스의 상태를 보관하고, 새로운 프로세스 상태를 CPU에 적재하는 것
멀티 스레드는 하나의 응용 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것입니다.
프로그램의 응답 시간이 단축되며, 시스템의 처리율이 향상되고, 자원 소모가 감소한다는 장점이 있습니다.
그러나, 여러 개의 스레드를 사용하는 경우 시간차나 잘못된 변수를 공유함으로 써 오류가 발생할 수 있습니다. 이러한 오류를 방지하기 위해 충돌 문제가 발생하지 않도록 동기화를 신경 써야 합니다.
References
'🗂 Study > 운영체제' 카테고리의 다른 글
[OS] 시스템 콜 🔔 (0) | 2021.09.07 |
---|---|
[OS] 인터럽트 (Interrupt) 🚨 (0) | 2021.08.25 |
[OS] 프로세스의 주소 공간 (0) | 2021.08.20 |
댓글