NOTICE


 운영 체제는 프로그램을 실행할 때 프로세스 단위로 관리합니다. 동작 중인 프로그램이 하나의 프로세스가 되는 것입니다. 운영 체제에서는 프로세스를 사용하여 실행 중인 다양한 응용 프로그램을 구분하고 스레드는 운영 체제에서 프로세서 시간을 할당하는 기본 단위가 됩니다.


※ 프로세스 구성 요소(메모리 구조)

 - Data 영역: 전역변수나 static 변수의 할당을 위해 존재하는 영역입니다.

 - Stack 영역: 지역변수 할당과 함수 호출 시 전달되는 인자 값들의 저장을 위해 존재합니다.

 - Heap 영역: 동적할당(malloc, calloc 함수에 의한 할당)을 위해 존재합니다. (프로그래머가 할당.)

 - Code 영역: 실행파일을 구성하는 명령어들이 올라가는 메모리 영역입니다.


 스레드는 프로세스 내에서 실행되는 흐름의 단위를 말합니다. 일반적으로 하나의 프로세스는 하나의 스레드를 가지고 있지만 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있습니다. 이러한 실행 방식을 멀티 스레드라고 합니다. 스레드가 여러개 실행될 경우 스케줄러는 각 스레드에게 시간을 할당하여 실행함으로써 사용자가 보기에 여러 스레드가 동시에 실행되는 것 처럼 보이게 됩니다.


※ 스레드 특징

 - 각 스레드는 독립적인 스택 영역을 가집니다.

 - 코드 영역을 공유합니다.

 - 데이터 영역 및 힙 영역을 공유합니다.(전역변수와 동적 할당된 메모리 공간도 공유가 가능합니다.)

 - 프로세스 핸들 테이블을 공유합니다. 프로세스 핸들 테이블에 대한 핸들 정보는 프로세스 내의 스레드들에게  

   공유되어 각 스레드가 그 핸들에 대해 접근이 가능합니다.

 - 결국 같은 프로세스 내의 스레드들은 스택 이외의 모든 것을 공유하게 됩니다.