프로세스와 쓰레드
프로그램은 특정한 작업을 수행하기 위한 일련의 지침이라고 한다.
일반적으로 저장매체에 저장되는 정적인 엔티티다. 프로그램은 실행이 될 때 프로세스가 된다.
프로그램이 동작을 하면 운영체제는 해당 프로그램을 디스크에서 시스템 메로리로 로드를 하고 실행한다. 프로그램의 실행 중인 인스턴스를 프로세스라고 한다.
그리고 프로그램은 정적이지만 프로세스는 동적이다. 그리고 프로세스는 프로그램이 시작될 때 생성되고 실행이 끝날 때 종료가 된다.
워드 프로세스를 예시로 생각하면
워드가 설치되어 있지만 실행은 하지 않은 상태가 프로그램 상태이다.
워드를 실행을 하면 운영 체제는 저장매체에 있는 워드 프로그램을 시스템 메모리로 로드를 하고 실행을 하게 된다.
실행을 하게되면 워드는 메모리 상에서 동작하는 활성화 상태, 즉 프로세스로 변환된다. 이 프로세스는 메모리를 소모하며, 사용자가 문서를 편집할 수 있도록 인터페이스와 다양한 기능을 제공한다.
재밌는 부분은 여기서 동일한 워드 프로세스를 여러 번 실행이 가능하다는 점이다.
예를 들어 워드 프로그램을 이용해서 다건의 문서를 작업 한다고 가정을 하면, 각 문서는 독립적인 워드 프로세스로 메모리에서 실행을 한다.
이는 각 실행 인스턴스가 독립적인 메모리 공간과 시스템 자원을 활용하여 동작을 한다는 것을 의미한다.
프로세스
자체 메모리 공간이 있는 독립적인 엔티티로 어플리케이션에 대한 격리, 보안을 제공
쓰레드
프로세스 내 가변운 공유 메모리 단위로 작업의 효율적인 병렬 실행을 가능하게 한다.
프로세스의 하위 집합이며 경량 프로세스라고 부르기도 한다.

프로세스의 구조는 text, data, stack, heap 이렇게 구성되어 있다.
이 구조에서 함수를 실행하게 되면 결과가 리턴될 주소가 스택에 위치하게 되며 지역 변수들이 순서대로 스택에 쌓이게 된다.
그리고 다 실행이 되면 스택에 있던 데이터들이 제거되며, 스택에 있던 리턴될 주소 또한 제가가 되면서 해당 주소로 이동하게 된다.

쓰레드는 프로세스 내 실행되는 여러 흐름이다.
쓰레드는 프로세스 내 각각 stack만 할당을 받고 text, data, heap영역은 공유가 된다. 그리고 하나의 프로세스 내 동작되는 여러 실행의 흐름이며 프로세스 내 주소 공간이나 자원 등 같은 프로세스 내에 쓰레드 끼리만 공유하면서 실행이 된다.

하나의 프로세스 내의 모든 쓰레드는 서로 연관되어 있가. 쓰레드에는 피어 쓰레드와 공유가 되는 데이터 세그먼트, 코드 세그먼트, 파일 등 몇가지 공통된 정보가 있다. 그러나 자체 레지스터, 스택 및 카운터를 포함하낟.
멀티 프로세스 (Multiprocessing)
멀티 프로세싱은 여러 프로세스를 사용하여 여러 작업을 동시에 처리하는 방법이다. 이는 각 프로세스가 독립적인 메모리 공간을 갖고 있으며, 동일한 어플리케이션의 복수 인스턴스일 수 있고 닿흔 어플리케이션의 인스턴스일 수 있다.
멀티 쓰레드 (Multithreading)
멀티 쓰레딩은 하나의 프로세스 내 여러 쓰레드를 사용하여 여러 작업을 동시에 처리하는 방법이다. 이는 프로세스 내 실행코드의 흐름을 나타낸다. 모든 쓰레드는 부모 프로세스의 메모리를 공유한다.
CPU 에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정을 Context Switching라고 한다.
다시 말해 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작을 하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 의미한다.

컨텍스트 스위칭 과정
멀티 프로세스와 연관성
멀티 프로세스 환경에서 각 프로세스는 독립된 메모리 공간을 가지므로, 컨텍스트 스위칭 시 프로세스 각각의 PCB 정볼를 저장하고 불러와야 한다.
프로세스 간 전환은 상대적으로 비용이 많이 들어가는 작업이다.
멀티 프로세스 방식에서 상당한 오버헤드가 발생된다.
멀티 쓰레드와 연관성
멀티 쓰레딩 환경에서는 모든 쓰레드가 같은 프로세스의 메모리 공간을 공유를 한다. 이 점으로 인하여 쓰레드는 각 컨텍스트 스위칭은 프로세스 간 전환보다 더 빠르고 효율적이다.
쓰레드들은 대부분의 메모리 공간을 공유하기 때문에 주로 CPU 레지스터와 스택에 대한 정보만 각각 다르게 관리를 하면 된다.
컨텍스트 스위칭은 멀티 프로세싱 및 멀티 쓰레딩과 밀접한 관련이 있으며, 병렬 처리 기능에 큰 영향을 미칠 수 있다.
멀티 쓰레딩은 멀티 프로세싱에 비래 컨텍스트 스위칭 비용이 적게 들기 때문에 고성능이 필요한 응용 프로그램에서 자주 사용이 된다. 하지만 쓰레드 간 자원 공유로 동기화 문제가 발생할 수 있기에 주의가 필요하다.