프로세스와 스레드의 기본 개념
위 내용은, 유튜브 "널널한 개발자 TV" 의 "Process 와 Thread 의 차이" 영상을 듣고 정리한 내용이며
기록을 위해 포스팅을 했음을 알려드립니다.
먼저 프로세스라는 것은, 어떤 일련의 작업들을 묶어서 프로세스라고 하는데요. 이 프로세스 단위를 기준으로, OS 에서는 가상메모리(Virtual Memory) 를 생성합니다. 그러면 가상메모리(Virtual Memory) 란 무엇일까요?
가상 메모리(Virtual Memory)란?
가상 메모리는 컴퓨터 시스템에서 실제 물리적 메모리(RAM)와 보조 저장 장치(HDD 또는 SSD)를 추상화한 개념입니다. 이를 통해 프로그램은 연속된 메모리 주소 공간을 사용하는 것처럼 보이지만, 실제로는 물리 메모리와 보조 저장 장치 간에 데이터를 적절히 배치하여 관리합니다. 가상 메모리는 다음과 같은 주요 기능과 이점을 제공합니다.
가상 메모리의 기능과 이점
- 추상화:
- 가상 메모리는 프로그램이 사용하는 주소 공간을 추상화하여 물리적 메모리의 제한을 숨깁니다. 프로그램은 전체 주소 공간을 자유롭게 사용할 수 있는 것처럼 보이지만, 실제로는 운영 체제가 물리적 메모리와 보조 저장 장치 간의 데이터를 관리합니다.
- 메모리 보호:
- 각 프로세스는 독립된 가상 메모리 공간을 가지며, 다른 프로세스의 메모리 영역에 접근할 수 없습니다. 이를 통해 프로그램 간의 메모리 보호가 이루어집니다.
- 효율적인 메모리 사용:
- 실제로 필요한 데이터만 물리 메모리에 적재하고, 사용하지 않는 데이터는 보조 저장 장치에 보관하여 메모리를 효율적으로 사용할 수 있습니다. 이를 통해 물리적 메모리의 크기를 초과하는 큰 프로그램도 실행할 수 있습니다.
- 페이징과 스와핑:
- 가상 메모리는 페이징(paging) 기법을 사용하여 물리 메모리와 보조 저장 장치 간에 데이터를 주고받습니다. 필요한 데이터가 물리 메모리에 없을 경우 페이지 폴트가 발생하며, 운영 체제는 필요한 데이터를 보조 저장 장치에서 물리 메모리로 로드합니다. 스와핑(swap)은 물리 메모리가 부족할 때 사용하지 않는 데이터를 보조 저장 장치로 이동시키는 과정입니다.
요약
- 가상 메모리는 RAM과 HDD/SSD를 추상화한 개념입니다.
- 프로그램은 연속된 메모리 주소 공간을 사용하는 것처럼 보이지만, 실제로는 운영 체제가 물리적 메모리와 보조 저장 장치 간의 데이터를 적절히 관리합니다.
- 가상 메모리는 메모리 보호, 효율적인 메모리 사용, 그리고 페이징과 스와핑 기법을 통해 시스템 성능과 안정성을 높입니다.
프로세스와 스레드
먼저 우리가 Process 라는 단어를 쓴다는 것 자체가, OS 가 존재한다는 대전제를 의미합니다.
각 프로그램들은, 많은 프로세스들을 거치게 됩니다.
하나의 프로그램 내에서도, 1개 이상의 다양한 프로세스가 존재합니다.
- 프로세스:
- 프로세스는 운영체제에서 실행 중인 프로그램의 인스턴스입니다.
- 각 프로세스는 독립적인 메모리 공간(가상 메모리 Virtual Memory)을 갖습니다.
- 프로세스 간의 메모리는 기본적으로 분리되어 있어 다른 프로세스가 접근할 수 없습니다.
- 스레드:
- 스레드는 프로세스 내에서 실행되는 작업의 단위입니다.
- 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 각 스레드는 프로세스의 메모리 공간을 공유합니다.
메모리 구조
- 가상 메모리:
- 각 프로세스는 고유의 가상 메모리 공간을 가집니다.
- 이 가상 메모리 공간에는 코드, 데이터, 힙, 스택 등이 포함됩니다.
- 스레드 로컬 스토리지 (Thread Local Storage):
- 각 스레드는 독립적인 스택을 가지고 있습니다.
- 이 스택은 함수 호출과 지역 변수 저장을 위해 사용됩니다.
- 힙 (Heap):
- 힙은 프로세스 내에서 동적으로 할당된 메모리를 저장하는 공간입니다.
- 힙은 여러 스레드가 공유할 수 있으며, 동기화 문제가 발생할 수 있습니다.
멀티 스레딩
- 동시성:
- 동시성은 여러 스레드가 동시에 실행되는 것을 의미합니다.
- 멀티 스레딩을 통해 동시성을 구현할 수 있으며, 이를 통해 프로그램의 성능을 향상시킬 수 있습니다.
- 동기화 문제:
- 여러 스레드가 동일한 자원에 접근할 때 동기화 문제가 발생할 수 있습니다.
- 이를 해결하기 위해 뮤텍스, 세마포어 등의 동기화 기법을 사용합니다.
비유
- 프로세스는 한 가구: 각 프로세스는 독립적인 집처럼 고유의 메모리 공간을 갖습니다.
- 스레드는 세대원: 각 스레드는 가구의 구성원처럼 프로세스 내에서 함께 일합니다.
- 방(스레드 로컬 스토리지): 각 스레드는 자신의 스택을 가지고 있어 독립적으로 동작할 수 있습니다.
- 공용 공간(힙): 여러 스레드가 함께 사용할 수 있는 힙 메모리는 공용 공간입니다.
위 내용은, 유튜브 "널널한 개발자 TV" 의 "Process 와 Thread 의 차이" 영상을 듣고 정리한 내용이며
기록을 위해 포스팅을 했음을 알려드립니다.
요즘 서버 관련 개념이나, CS 전공 지식 관련해서 많이 참고해서 보고 있는 채널입니다 ㅎㅎ
개발 단계에서의 서비스 로직에 대해서, 어떤 것을 하나의 프로세스로 생각할 것인지에 대해 갑을논박이 많다고 합니다.
1, 2, 3 의 작업이 존재한다고 할때, 하나의 프로세스 내에서 3개의 쓰레드로 볼 것인지
3가지 작업을 각각 3개의 프로세스로 생각하고, 다른 프로세스로 생각 할 것인지는
어떻게 보면, 해당 서비스의 기능이나 최적화를 기준으로 해석해봐야 알 것 같습니다.
그 해석도 결국 사람마다 다 달라지겠지만, 결국 올바른 서비스를 제공하는게 중요한 것 아니겠습니까 ㅎㅎ
참고 자료
https://youtu.be/x-Lp-h_pf9Q?si=5pxfHvkft-eA1n7a
'Computer Science' 카테고리의 다른 글
[컴퓨터구조와 운영체제] [Chapter 03] 명령어 (0) | 2023.09.14 |
---|---|
[컴퓨터구조와 운영체제] [Chapter 01] 컴퓨터 구조 시작하기 (0) | 2023.09.14 |
[컴퓨터구조와 운영체제] [Chapter 09]운영체제 시작하기 (0) | 2023.09.13 |
[Git Hub 기초(1)] git 설정! setting 하기 ! 및 강의를 들으며 (1) | 2023.04.13 |
[Git Hub 기초(2)] 깃 허브에 push 해보기! (3) | 2023.04.13 |