프로세스
프로세스는 실행중인 프로그램을 의미합니다. 프로그램이 memory에 적재되어 cpu를 할당받아 실행되는 것을 프로세스라 합니다
memory는 cpu가 직접 접근할 수 있는 컴퓨터 내부의 기억장치 입니다. cpu는 하드디스크에 직접 접근할 수 없습니다.
하드 디스크에 저장되어 있는 프로그램은 메모리에 적재되어 cpu를 할당받아야 실행이 될 수 있습니다.
폰 노이만 구조는 실행되는 모든 프로그램은 메모리에 적재되어야 한다는 구조, 폰 노이만 구조 전에는 프로세스를 변경하려면 외부 전선을 변경해 주었어야 하는데 등장 후에는 메모리상의 프로그램만 변경해주면 된다(추후 수정 예정)
프로세스는 코드, 데이터, 힙, 스택으로 구성되어 있습니다.
코드에는 실제 코드
데이터 영역에는 전역변수와 할당이 되지 않은 변수들이 위치 하게 되는데 이 둘은 데이터 영역 내에서 서로 다른 part에 위치하게 됩니다.
힙에는 런타임 중에 메모리를 동적으로 할당하는 영역입니다.
스택에는 함수 호출시 생성되는 지역변수, 매개변수들이 임시로 저장됩니다.
cpu는 다음에 읽어야 하는 코드의 위치를 pc(program) register에 저장해 둡니다. 그래서 이 레지스터의 값을 토대로 다음에 읽어야할 코드의 주소값을 알 수 있습니다.
프로세스의 스택과 힙 사이에는 여유 메모리 영역이 있는데
멀티 스레드 작업의 경우 이 영역에 스레드를 할당합니다.
스레드
스레드는 한 프로세스내에서 실행되는 동작(함수)의 단위입니다.
프로세스 내의 각 스레드는 스택 메모리 영역을 제외한 나머지 memory 영역(data, code, heap)을 공유할 수 있습니다.
스레드는 함수의 동작을 의미하기 때문에 각자의 stack 영역을 가지게 됩니다.
스레드에는 stack memory와 PC(Program Counter)가 필요하게 되는 것이지요
함수의 실행에는 매개변수, 함수의 return address, 함수 내의 지역변수 등을 저장하기 위한 영역이 필요하고 이 영역은 프로세스 내의 stack 영역입니다.
thread는 process 내에서 독립적인 기능을 수행합니다. 각 thread가 독립적인 기능을 수행한다는 것은 독립적으로 함수를 호출함을 의미합니다. 그러므로 독립적으로 thread가 실행되기 위해서는 각 thread는 자신만의 stack 영역을 가지고 있어야 합니다.
둘의 차이
process는 운영체제로 부터 자원을 할당받는 작업의 단위, thread는 process가 할당받은 자원을 이용하는 실행의 단위 입니다.
process는 프로그램이 메모리에 적재되어 cpu를 할당받아 실행되는 것이고 thread는 프로세스 내에서 실행되는 동작의 단위입니다(함수의 실행과 같이)
process는 memory 공간에 code, data, heap, stack 영역이 있습니다.
thread는 process 내에서 stack영역을 제외한 code, data, heap 영역을 공유합니다.
'CS' 카테고리의 다른 글
디자인 패턴/싱글턴 패턴 🆘 (0) | 2022.04.20 |
---|---|
멀티 프로세스, 싱글 스레드, 멀티 스레드 🔥 (0) | 2022.03.30 |
CQS 원칙 - Command Query Separation (0) | 2022.03.29 |
컴퓨터는 어떻게 켜질까?[컴퓨터 부팅 과정] (2) | 2021.12.12 |