✔️ 프로세스란?
- 프로세스는 운영 체제에서 실행 중인 프로그램을 나타내는 단위입니다.
- 프로세스 내부에는 최소 하나의 스레드(thread)를 가지고 있는데, 실제로는 스레드(thread) 단위로 스케줄링을 한다.
- 각 프로세스는 독립된 메모리 공간을 할당받아 실행되며, 운영 체제는 프로세스를 생성, 제어, 종료하고 여러 프로세스 간의 상호작용을 관리합니다.
- 프로세스의 메모리 영역은 Code, Data, Heap, Stack 등을 가지고 있습니다.
✔️ 프로세스의 상태
- 실행(Running) : 현재 CPU에서 실행중인 상태입니다.
- 준비(Ready) : 실행 가능한 상태로, CPU를 할당받기 위해 대기 중인 상태입니다.
- 대기(Blocked, Waiting, Sleep)
- 특정 이벤트 발생을 기다리는 상태로, 예를 들어 입출력 완료를 기다리거나 락(lock)을 획득하기 위해 대기하는 상태입니다.
- CPU를 주어도 당장 instruction 을 수행할 수 없는 상태입니다. - 종료(Terminated) : 실행이 완료된 상태로, 운영 체제에 의해 자원이 해제되고 종료되는 상태입니다.
✔️ PCB(Process Control Block)
- 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체입니다.
- 프로세스 상태 관리와 문맥 교환(Context Switching)을 위해 필요합니다.
- PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지된다.
✔️ PCB의 구조
- 프로세스 식별자(Process ID) : 각 프로세스가 갖는 고유한 식별자입니다.
- 프로세스 상태(Process State) : 프로세스는 실행 중, 대기 중, 준비 중 등의 여러 상태를 갖고 PCB는 현재 프로세스 상태를 추적합니다.
- 레지스터 상태(Register State) : 프로세스가 실행되는 동안 레지스터에 저장되는 값들은 프로세스 상태의 일부입니다. PCB는 프로그램 카운터 (Program Counter), 스택 포인터 (Stack Pointer), 누산기 (Accumulator) 등의 레지스터 상태를 유지합니다.
- 프로세스 우선순위(Process Priority) : 운영체제는 프로세스에 우선순위를 할당합니다. PCB는 프로세스의 우선순위를 포함하고 이를 기반으로 스케줄링을 수행합니다.
✔️ 문맥 교환(Context Switch)
- Context switch는 운영체제에서 실행 중인 프로세스 또는 스레드의 상태를 저장하고, 다른 프로세스 또는 스레드로 전환하는 과정을 말합니다. 또한, 멀티태스킹 환경에서 CPU 시간을 공유하고 여러 프로세스 또는 스레드가 동시에 실행될 수 있도록 합니다.
- 현재 프로세스 A 가 CPU 를CPU를 사용하고 있는 상황에서 CPU 사용시간이 끝나, 다음 프로세스에게 CPU를 넘겨주어야 합니다. 스케줄링 알고리즘에 의해 다음 CPU 를 받을 프로세스 B 가 선택되었고, 타이머 인터럽트가 발생해 CPU 제어권이 운영체제 커널에 넘어가게 됩니다.
- ex) 카카오톡을 켜놓고 유투브로 영상을 보면서 웹서핑을 하는 것은 사용자 입장에서 동시에 일어나는 일처럼 보이지만 실제로는 그렇지 않음.
- 위와 같은 현상을 동시성이라고 부릅니다. 동시성(Concurreny)과 병렬성(Parallelism)의 차이는 아래 포스트 참고하시기 바랍니다.
- https://yunchan97.tistory.com/61
- 프로세스가 실행 상태일 때, 시스템 콜이나 인터럽트가 발생하면 CPU의 제어권이 운영체제에게로 넘어와, 원래 실행 중이던 프로세스의 업무를 잠시 멈추고 운영체제의 코드가 실행된다.
- 위의 첫 번째 이미지의 경우는 원래 실행중이던 프로세스와 다시 실행된 프로세스가 같기 때문에 문맥교환이 아닌 경우입니다.
- 위의 두 번째 이미지의 경우는 원래 실행중이던 프로세스와 다른 프로세스로 변경되었기 때문에 문맥교환이라고 할 수 있습니다.
✔️ 스레드란?
- 스레드는 프로세스 내에서 실행되는 단위입니다.
- 스레드는 프로세스의 일부로서 독립적인 실행 경로를 가지며, 프로세스의 자원을 공유하여 병렬적 또는 동시에 실행될 수 있습니다.
- 스레드는 프로세스의 주소 공간, 파일 핸들, 열린 파일 등과 같은 자원을 공유하기 때문에, 스레드 간의 통신과 데이터 공유가 비교적 쉽습니다.
- 스레드 간의 전환 (Context Switch) 시에는 프로세스 전환보다 비용이 적게 듭니다.
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유합니다.
✔️ 스레드의 장점
1. 응답성 향상: 여러 스레드가 동시에 작업을 수행할 수 있으므로, 사용자 인터페이스와 같은 대화형 응용 프로그램에서 응답성이 향상될 수 있습니다. 한 스레드가 블로킹되어도 다른 스레드는 계속 작업할 수 있기 때문입니다.
2. 자원 공유: 스레드는 같은 프로세스 내에서 실행되므로, 프로세스의 자원을 공유할 수 있습니다. 이를 통해 데이터 공유와 효율적인 통신이 가능해지며, 동기화를 통해 공유 자원에 대한 충돌을 방지할 수 있습니다.
3. 경제성: 스레드 간의 전환은 프로세스 간의 전환보다 훨씬 경제적입니다. 스레드 간의 전환은 레지스터 상태와 스택 상태만 변경하면 되기 때문에, 프로세스 간의 전환보다 시간과 자원을 절약할 수 있습니다.
✔️ 멀티 프로세스(Multi Process)와 멀티 스레드(Multi Thread)
- 멀티 프로세스란 : 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.
- 멀티 스레드란 : 하나의 프로세스가 여러 작업을 여러 스레드를 사용해 동시에 처리하는 것을 의미한다.
✔️ 멀티 프로세스 vs 멀티 스레드
- 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료 될 위험을 갖고 있다.
- 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리공간과 CPU 시간을 차지하는 단점이 있다.
- 두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있으므로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용해야 한다.
✔️ 멀티 스레드의 장점
- 자원의 효율성 증가.
- 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
- 처리 비용 감소 및 응답 시간 단축
- 스레드는 자원을 공유하기 때문에 Context Switching시 비용이 적고 스레드 간의 통신이기때문에 시간이 단축된다.
- 멀티 스레드를 사용할 때 동기화를 주의해야한다. 동기화에 관련된 내용은 아래 포스트를 참고하세요.
#Reference
- https://velog.io/@aeong98/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C#2-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98-%EC%83%81%ED%83%9Cstate
- https://jhnyang.tistory.com/33
- https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
(이미지 출처: https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html )
'운영체제' 카테고리의 다른 글
[Pintos-Kaist] Project2 - Argument Passing (1) | 2023.06.05 |
---|---|
[운영체제] 인터럽트 & 시스템 콜(Interrupt, System Call) (0) | 2023.06.02 |
[Pintos-Kaist] Project 1 - Threads 1주차 학습 (0) | 2023.06.02 |
[운영체제] 스핀락(Spinlock),뮤텍스(Mutex),세마포어(Semaphore) (0) | 2023.05.29 |
[운영체제] 동시성(Concurrency)과 병렬성(Parallelism) (0) | 2023.05.27 |