leeyang의 개발 성장기
프로세스(process)와 스레드(thread) 차이 본문
안녕하세요 리양입니다 :)
컴퓨터공학 기초 지식이 필요해서 공부하는 중에 정리한 내용을 공유하고자 올립니다. ^_^
프로세스(Process)
프로세스란? 가장 일반적인 것은 '실행 중인 프로그램' 입니다.
실행중인 프로그램은 디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제의 제어를 받는 상태
즉, 프로세스가 사용하고 있는 메모리 영역이 존재함을 의미합니다.
주소공간구조
프로세스가 실행 중인 프로그램의 역할을 수행하려면 자원이 필요합니다. 프로세스는 능동적인 개체이기 때문에 주소공간도 알아둘 필요가 있습니다:)
- 스택(Stack): 프로시저(함수)의 복귀 주소와 지역변수처럼 일시적인 데이터 저장, 프로시저를 호출할 수록 커지고 반환할 때 줄어든다.
- 힙(Heap): 자유영역, 시스템 호출을 통해 사용되다 해지되는 자유 영역
- 데이터: 동적으로 할당받는 영역, 전역 또는 정적 변수를 저장, 읽고 쓰기 가능
- 텍스트: 프로세서가 실행되는 코드를 저장
여기서 프로그램은 텍스트 부분만을 갖는 수동적인 개체랍니다.
종류
- 운영체제 프로세스: 실행순서 제어, 다른 사용자나 운영체제 영역을 침범못하게 감시, 사용자 프로세스 생성, 입출력 프로세스 생성, 다른말로 커널 프로세스 또는 시스템 프로세스라고 불린다.
- 사용자 프로세스: 사용자 코드를 수행
- 병행 프로세스: 프로세스 여러개가 동시에 실행
1) 독립 프로세스: 초기값에 따라 항상 같은 결과를 보여주는 프로세스, 다른 프로세스에 영향을 받지 않고, 데이터 공유도 하지 않음
2) 협동 프로세스: 다른 프로세스에 영향을 받고, 제한된 자원을 공유해서 상호 작용이 발생.
상태와 변화
운영체제는 프로세스 제어를 해야하기 때문에 프로세스 상태를 점검해야합니다.
상태는 실행, 대기또는 보류, 준비가 존재합니다.
상태변화를 알아봅시다 :)
- 준비 -> 실행
dispatch라고 불린다. 프로세스가 프로세서를 선택 하는것, 다중 프로그래밍에서 일정시간만 사용할 수 있도록 시간을 제한하는 것을 시간 할당이라고 합니다. 독점하는 것을 방지하기 위해서이죠
- 실행 -> 준비
프로세스의 실행이 다 끝나서 종료가 되거나 독점을 맞기 위해 타임아웃의 이유로 실행이 끝나는 것을 의미합니다.
인터럽트 클록(Interrupt Clock)에서 관리
- 실행 -> 보류
입출력 연상이 필요하거나 새로운 자원 요청(프로세스 스스로 행동함)
- 대기 -> 준비
깨우는 과정이다.
스레드(Thread)
프로세스에서 실행제어만 분리한 실행단위입니다. 그래서 경량 프로세스라고도 불리기도 하죠
즉, 명령어를 독립적으로 실행할 수 있는 하나의 제어 흐름입니다.
스레드는 같은 그룹의 스레드와 코드, 주소 공간, 운영체제의 자원을 공유합니다.
그리고 프로세스는 스레드를 하나 이상 가집니다.
구조
- 스레드 상태
- 스택
- 지역변수와 스레드의 특정 데이터를 저장하기 위한 스레드 별 정적 저장소
- 다른 스레드가 공유하는 프로세스의 메모리와 자원에 대한 접근 같으 스레드 실행 환경 정보(문맥정보)
사용 이점
- 사용자에 대한 응답성 증가
- 프로세스의 자원과 메모리 공유 가능
- 자원을 공유하기 때문에 스레드를 생성하여 문맥 교환하는 것이 오버헤드를 줄인다.
- 병렬로 실행 가능
상태와 변화
프로세스처럼 준비, 실행, 대기, 종료 상태로 구분, 다만 자신의 정보를 위한 프로그램 카운터와 스택을 가지고 있다.
- 대기: 스레드가 이벤트를 기다릴 때, 스레드를 대기 상태, 자신의 정보(프로그램 카운터, 스택 포인터 등)를 스택에 저장
- 준비: 스레드 이벤트가 완료되면 실행 될 수 있는 상태, 준비 리스트에 삽입
- 실행: 스레드가 프로세서를 점유하여 실행 중인 활성화 상태
- 종료: 자원을 해제하고 레지스터 문맥과 스택 할당이 제거
하나의 스레드가 대기 상태로 변할 때 전체 프로세스를 대기 상태로 변화시키지 않는 다는 점이 스레드의 유연적인 장점
프로세스와 달리 독립적이지 않아서 모든 스레드는 모든 작업에 접근 할 수 있다.
멀티프로세스(MultiProcess)와 멀티스레드(MultiThread)
멀티프로세스
하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것입니다.
부모-자식 관계라고 해도 독립적인 자신만의 메모리 영역을 가집니다.
fork를 통해 프로세스를 복사합니다.
프로세스 간의 통신을 하려면 IPC(Inter Process Communication; 세마포어, 큐, 공유메모리)를 통해야합니다.
장점
여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식만 죽어서 영향이 확산 되지 않는다
단점
- Context Switching의 오버헤드: 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되어 발생
- 프로세스 사이에 공유하는 메모리가 없어서 모든 데이터를 리셋해야하기 때문이다.
- IPC의 기법이 복잡하다.
멀티스레드
하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하나의 작업을 처리
공유 메모리를 가지고 있다.
장점
- Context Switching 시 공유 메모리만큼 시간 손실이 줄어든다.
- 시스템 자원 소모 감소
단점
-디버깅이 까다롭습니다.
- 단일 프로세스 시스템의 경우 효과를 기대하기 어렵습니다.
- 자원 공유의 문제가 발생합니다.
- 하나의 스레드 문제가 발생하면 전체 프로세스의 영향을 받습니다.
출처:
'컴공기초지식' 카테고리의 다른 글
세마포어 뮤텍스 차이 (0) | 2020.01.01 |
---|---|
Http header를 알아봅시다! (0) | 2019.12.03 |