[OS] 프로세스와 스레드

2016. 11. 9. 23:31Basic/OS

반응형

프로세스

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

- 수행 중인 프로그램

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

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

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

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

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

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

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

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

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



스레드

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

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

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

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

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

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

 + 스레드 수행 상태

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

 + 수행 스택

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

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


스레드의 장점

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

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

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

스레드의 단점

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

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

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

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



프로세스와 스레드

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

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

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

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

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

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

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

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


출처 : http://wonjayk.tistory.com/239

반응형