프로세스

프로세스는 수 많은 요소들로 구성된 개체로 생각될 수 있습니다. 프로세스의 두 필수적인 요소는 프로그램 코드, 코드와 연계된 데이터의 집합입니다. 처리기가 프로그램 코드를 수행한다고 가정하면, 그 수행중인 개체가 프로세스입니다.

- 수행 중인 프로그램

- 컴퓨터 상에 수행 중인 프로그램의 인스턴스

- 처리기에 할당되어 수행될 수 있는 개체

- 명령들의 순차 수행, 현재 상태, 연계된 시스템 자원들의 집합 등에 의해 특징지어지는 활동 단위

- 프로세스는 여러개의 스레드를 가질 수 있습니다. (다중 프로세스라고 가정할 때)

- 자원 소유권 : 자신의 이미지를 위한 가상 주소 공간을 포함합니다.

 + 프로세스 이미지 : 프로세스 제어 블록에 정의되어 있는 프로그램, 데이터, 스택 등의 집합

 + 주기억장치, 입출력 채널, 입출력 장치, 파일과 같은 자원들에 대한 제어와 소유권을 프로세스에 할당할 수 있음

 + 불필요한 간섭은 운영체제가 보호

- 스케줄링/수행 : 프로세스 수행은 하나 이상의 프로그램을 통과하는 수행 경로를 따릅니다. 한 프로세스는 다른 프로세스들과 번갈아가면서 수행(인터리빙)될 수 있습니다.



스레드

프로세스의 실행 흐름(디스패칭) 단위를 스레드라고 합니다. 프로세스 안에서 코드, 데이터, 힙을 공유하고 스택만 별도로 가지고 있습니다. 프로세스간 이동이 발생할 경우 스택만 바꾸면 되므로 전환 속도가 빠릅니다.

- 스레드는 프로세스 내에서 각각의 스택 공간을 제외한 나머지 공간과 시스템 자원을 함께 공유합니다.

- 프로세스를 이용해 동시에 처리하던 일을 스레드로 구현한다면 메모리 공간과 시스템 자원 소모도 줄어들게 됩니다.

- 스레드는 프로세스 내부에서 동작하는 독립된 프로그램 카운터로 보기도 합니다.

- 스레드 간 자원 공유가 가능합니다. 반면, 공유자원에 대한 관리 문제가 발생하게 됩니다.

- 각 스레드는 아래의 사항들을 포함합니다.

 + 스레드 수행 상태

 + 수행 중이 아닐 때 저장되어 있는 스레드 문맥

 + 수행 스택

 + 지역 변수 저장을 위해 각 스레드가 사용하는 어떤 정적 저장소

 + 프로세스 메모리 및 자원에 대한 접근, 메모리 및 자원은 프로세스 내의 모든 스레드에 의해 공유


- 스레드의 장점

 + 시스템의 자원 소모가 줄어든다.

 + 프로그램 응답 시간이 단축된다.

 + 프로세스간 통신보다 스레드간 통신 방법이 훨씬 간단하다.

- 스레드의 단점

 + 프로세스 밖에서는 스레드 각각을 제어할 수 없습니다.

 + 여러 개의 스레드를 이용하는 프로그램을 작성하는 경우에는 주의 깊게 설계해야 합니다. 미묘한 시간차나 잘못된 변수를 공유함으로써 오류가 발생할 수 있습니다.

 + 프로그램의 디버깅이 어렵습니다. (어떤 스레드가 먼저돌아가는지 알 수 없기 때문, 실행순서가 없음)

 + 단일 프로세서 단일 스레드라면 효과를 기대할 수 없습니다.



프로세스와 스레드

- 여러 흐름이 동시에 실행되는 공통점을 가지고 있습니다.

- 새로운 프로세스를 생성하는 시간보다 기존 프로세스 내에서 새로운 스레드를 생성하는 시간이 더 짧습니다.

- 프로세스 종료시간보다 스레드 종료시간이 더 짧습니다.

- 프로세스간 교환보다 같은 프로세스에 있는 두 스레드 간 교환이 효율적입니다.

- 같은 프로세스 내의 스레드들은 메모리 및 파일을 공유하기 때문에 커널을 호출하지 않고도 서로 통신할 수 있습니다.

- 프로세스는 문맥교환 시 보존해야 할 정보가 많아 스레드에 비해 상대적으로 문맥교환 시간이 오래걸립니다.

- 어떤 스레드가 먼저 실행되는지 알 수 없기 때문에 프로세스에 비해 디버깅이 어렵습니다.

- 프로세스는 독립적으로 메모리를 갖고 있고 프로세스간 메모리 공유가 불가하지만 스레드는 같은 프로세스 내에서 메모리 공유가 가능합니다.


같은 말이 계속 반복되어서 나옵니다. 일부러 중복되는줄 알지만 그냥 적었습니다.

그런 부분을 유심히 보신다면 도움이 되실 겁니다.

Posted by 긍정왕오킹