2016년 2월 10일 수요일

프로세스(Process)와 쓰레드(Thread)

1) 프레세스 개념


 1-1. 일반적인 정의는 "실행 중인 프로그램" 이다.
  - 디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제의 제어를     받는 상태
  - 해당 프로세스가 사용하고 있는 메모리 영역(자신의 주소 공간)이 존재함을 의미
  - 프로세서 할당(점유) 시간과 메 리모 , 파일, 입출력장치 등의 자원이 필 하며 요 , 자원은     프로세스 생성
    및 실행 시 할당됨
  - 현재의 활동 상태를 나타내는 프로그램 카운터와 프로세서의 현재 활동(레지스터 내용)     포함

 1-2. 프로그램과 달리 프로세스는 메모리에 주소 공간을 갖는 능동적인 개체
  - 실행 스택(Stack)
    : 호출된 프로시저(함수)의 복귀 주소와 지역 변수 등의 일시적인 데이터 저장하는 영역
  - 실행 힙(Heap)
    : 텍스트(코드) 영역과는 별도로 유지되는 자유 영역
  - 데이터(정적 변수)
    : 프로세스 실행 중 동적으로 할당 받는 영역, 전역 또는 정적 변수 저장
  - 텍스트(코드)
    : 프로세서가 실행하는 코드 저장

2) 프로세스 종류


 2-1. 운영체제 프로세스
   - 커널 프로세스 또는 시스템 프로세스라 부름.
   - 프로세스 실행 순서 제어, 사용하고 있는 프로세스가 다른 사용자나 운영체제 영역을        침범하지 못하게 감시하는 기능 담당
   - 사용자 프로세스 생성, 입출력 프로세스 등 시스템 운영에 필요한 작업 수행

 2-2. 사용자 프로세스
   - 사용자 코드 수행

 2-3. 병행 프로세스
   : 프로세스 여러 개가 동시에 실행되며, 독립 프로세스와 협동 프로세스로 구분
   1. 독립 프로세스
    - 프로세스 여러 개가 병행하여 수행 시 주어진 초기값에 따라 항상 같은 결과를 보여줌
    - 서로 독립적으로 실행되어 다른 프로세스에 영향을 받지 않고, 데이터를 공유하지않음
   2. 협동 프로세스
    - 다른 프로세스에 영향을 주거나 다른 프로세스에 의해 영향을 받음
    - 컴퓨터 시스템의 제한된 자원을 공유하는 프로세스들이 통제되어 상호 작용해야 하는       경우 발생
    - 컴퓨터 시스템의 제한된 자원을 공유하는 프로세스들이 통제되어 상호 작용해야 하는       경우 발생
    - 서로 협동해야 하는 경우, 통신을 위한 수단과 동기화 기능이 필요


3) 프로세스 상태 

     :실행과 비실행 프로세스로 구분.

 3-1. 프로세스는 실행되며 상태가 변하므로 운영체제는 프로세스 제어에 필요한 프로세스
       상태를 점검해야 함
   - 운영체제가 프로세스를 새로 생성하면 비실행 상태로 초기화되어 실행을 기다림
   - 실행 중인 프로세스 종료 또는 인터럽트 발생 시 비실행 프로세스 중 선택된 프로세스        가 실행 상태로 변하고(dispatch) 인터럽트 된 프로세스는 비실행 상태로 변경

 3-2.실행 상태 프로세스
   - 실행 : 명령어가 실행되는 상태, 즉 프로세스가 프로세서를 점유한 상태
   - 대기 또는 보류 : 프로세서가 이벤트(입출력 종료와 같은 외부 신호)가 일어나길 기다리      는 상태
   - 준비 : 프로세스가 프로세서를 할당 받기 위해 기다리는 상태

 3-3.  대부분의 프로세스는 준비나 대기(보류) 상태이며, 어느 한 순간에 한 프로세스만 실         행 상태가 됨

4) 프로세스 상태 변화

- 시스템의 모든 프로세스는 종료되어 시스템을 떠날 때까지 준비,실행, 대기(보류) 상태로
변화되며 실행되는 과정을 반복
- 운영체제는 프로세서 스케줄러를 이용해 프로세스 상태 변화를 관리

 4-1작업 스케줄러
   - 스풀러가 디스크에 저장한 작업들 중 실행할 작업을 선정, 준비 리스트에 삽입
   - 이를 통해 다중 프로그래밍의 정도를 결정하는 핵심적인 역할 수행
   - 선정한 작업에 대한 프로세스의 생성에서 종료까지의 과정 수행을 위해 [그림 3-5]와 같
     은 상태 변화를 일으킴

4-2 프로세스 상태 변화([그림])
   - 실행 프로세스가 자발적으로 프로세서 반환 전 할당된
     시간이 경과하면 준비상태로 변경
   - 실행 프로세스가 실행하다 입출력 명령이 발생 시 대기
     (보류) 상태로 변경
   - 대기 프로세스는 보류 이유가 제거되면 준비 상태로 변경.
   - 준비 프로세스는 디스패처(Dispatcher Dispatcher)가 프로세서를
     할당하면 다시 실행상태로 변경


 4-2-1. 준비 → 실행
   - 디스패치(Dispatch)
      : 준비 리스트 맨 앞에 있던 프로세스가 프로세서를 선택(배당되어 실행)하는 것
      dispatch(프로세스명) : 준비 → 실행
    - 시간 할당
      : 실행 프로세스가 프로세서를 일정 시간만 사용할 수 있도록 시간을 제한
      : 특정 프로세스가 프로세서를 계속 독점하는 것을 방지


 4-2-2 실행 → 준비
   - 프로세스가 프로세서를 점유한 상태를 “프로세스가 실행 상태에 있다”라고 함
   - 운영체제는 프로세스의 독점을 방지하기 위해 Interrupt Clock을 둠
     : 특정 프로세스가 일정 시간이 지나도(timeout) 프로세서를 반환하지 않으면 Clock이
     인터럽트를 발생, OS가 프로세서 제어권을 가짐.
   - OS가 제어권을 가지면 실행 중인 프로세스는 ready 상태로 변화, ready list의 첫 프로
     세스가 running 상태로 변경.
     :  timeout(프로세스명) : 실행 → 준비
 4-2-3 실행 → 대기(보류)
   - 실행 프로세스가 지정 시간 전에 입출력 연산 등이 필요하거나 새로운 자원 요청 등의        문제발생 시 스스로 프로세서를 양도하고 대기 상태로 변경
     : bl k(프로세스명) : 실행 대기(보류)
 4-2-4 대기(보류) → 준비
   깨움( ) 프로세스의 마지막 상태 변화로 입출력 작업이 끝났을 때 발생
   : block(프로세스명) : 실행 → 대기(보류)
- 깨움(Wake up) : 프로세스의 마지막 상태 변화로 입출력 작업이 끝났을 때 발생
   : wakeup(프로세스명) : 대기(보류) → 준비

※ 프로세스 상태 변화 중 프로세스 스스로 하는 것은 보류뿐, 나머지는 외부 조건에 의해 발생

5) 스레드(Thread) 개요

  
 5-1.프로세스에서 실행 제어만 분리한 실행 단위
   - 경량 프로세스(LWP, Light Weight Process)라고도 부름
     : 중량 프로세스(HWP, Heavy Weight Process)는 스레드를 하나 가진 작업
   - 프로세서를 사용하는 기본 단위이며, 명령어를 독립적으로 실행할 수 있는 하나의 제어      흐름
   - 작업 : 스레드의 그룹 환경
     : 같은 그룹의 스레드와 코드, 주소 공간, 운영체제의 자원(파일, 신호) 등을 공유
※ 작업에 스레드가 없으면 아무 일도 할 수 없으므로 반드시 스레드가 있어야 함

 5-2 프로세스는 스레드를 하나 이상 가지며, 각 스레드는 아래 내용을 포함
   - 스레드 실행 시의 상태(실행, 준비 등)
   - 실행 스택
   - 지역 변수와 스레드의 특정 데이터를
     저장하기 위한 스레드별 정적 저장소
   - 프로세스의 다른 스레드가 공유하는
     프로세스의 메모리와 자원에 대한
     접근 등의 스레드 실행 환경 정보


6) 스레드의 장점


 6-1. 프로세스에 포함된 스레드들은 공통의 목적 달성을 위해 병렬로 수행 
   - 자원을 공유하여 한 프로세스에서 동시 작업 가능
 6-2. 시스템 성능과 효율 향상

   - 하나의 프로세스가 서로 다른 프로세서에서 프로그램의 다른 부분을 동시에 실행 가능
   - 응용 프로그램 하나가 비슷한 작업들을 여러 개 수행

 6-3. 스레드를 이용하여 다음과 같은 이점을 얻을 수 있음
   - 사용자에 대한 응답성 증가
     : 응용 프로그램의 일부분이 봉쇄 또는 긴 작업 수        행 시에도 프로그램 실행을 계속 허용하여 사용        자에 대한 응답성이 증가
   - 프로세스의 자원과 메모리 공유 가능
     : 스레드는 그들이 속한 프로세스의 자원과 메모리       를 공유하므로, 응용 프로그램 하나가 같은 주소         공간에서 여러 개의 스레드를 실행, 시스템 성능         향상과 편리함 제공
   - 경제성
     : 한 프로세스의 자원을 공유하므로 프로세스를 생       성하는 것보다 오버헤드를 줄일 수 있음
   - 다중 프로세서 구조 활용 가능
     : 다중 프로세서 구조에서 각 스레드는 다른 프로세서에서
       병렬로 실행될 수 있음

7) 단일 스레드와 다중 스레드

   : 운영체제는 단일 프로세스에서 단일 스레드 실행과 다중 스레드 실행을 지원

 7-1. 단일 스레드 프로세스
   - 프로세스 하나에 스레드 하나가 실행되는 전통적인 방식으로 스레드의 개념이불확실함
   - MS-DOS
 7-2. 다중 스레드 프로세스
   - 프로세스 하나에 여러 스레 를드 실행하는 것을 지원
   - 윈도우 NT/XP, 솔라리스 등

8)  다중 스레드의 특징


   - 각 스레드를 별도의 프로세서에서 실행하는 측면 다중 프로세싱(프로세서)와 같은 의미
   - 동일 프로세스 내 스레드는 메모리와 파일을 공유하므로 프로세스 하나에 다수의실행
     단위로 구분된 자원을 공유
   - 자원 생성과 관리의 중복성을 최소화하여 실행 능력 향상
   - 각 스레드는 kernel 개입 없이 서로 통신이 가능하여 독립적으로 실행
   - 서버에서 많은 요청을 효과적으로 처리할 수 있는 환경
   - 프로세스를 새로 생성하는 것보다 기존 프로세스에서 스레드를 생성하는 것이 빠르고,
     같은 프로세스 내 스레드 간 교환이나 스레드 종료 역시 빠름
   - 프로세스의 상대적인 무게를 줄여 효율을 극대화하는 것이 목표
   - 프로그램 변경 없이 프로세서의 개수에 따라 스레드를 병렬로 처리 가능
   - 같은 그룹의 스레드에 프로세서를 할당 또는 스레드 생성 시 중량 프로세서들 사이의
   문맥 교환과 비교하여 더 경제적임


9) 단일 스레드와 다중 스레드 모델


 9-1. 단일 스레드 프로세스 모델
   - 프로세스를 하나의 스레드, 스레드가 가진 레지스터와 스택으로 표현

 9-2. 다중 스레드 프로세스 모델
   - 프로세스를 각각의 스레 와드 고유의 레지스터, 스택으로 표현, 프로세스 주소 영역을        모든 스레드가 공유
   - 프로세스의 모든 스레드는 해당 프로세스의 자원과 상태를 공유, 같은 주소 공간에 존        재하며 동일한 데이터에 접근



10) 스레드 용법


 10-1. 단일 사용자 다중 처리 시스템 환경
   - 시스템 호출이 아닌 사용자 라이브러리 수준에서 스레드 개념을 제공, 빠른 속도
   - 프로그램에 비동기적 요소를 구현 가능
   - 실행 중인 스레드를 대기 상태로 변경, 다른 스레드로 제어를 이동시키는 상태 변화는
     하나의 서버가 많은 요청을 받아들여 처리하는 효과적인 방법

 10-2. 공유 메모리 형태의 다중 프로세서 시스템 환경
   - 프로그램을 공유 메모리에 저장, 스레드를 각 프로세서에 할당, 병렬 처리하여 프로세서
     성능을 매우 향상시킬 수 있음

 10-3. 스레드의 단점
   - 사용자 수준 스레드는 커널 자체가 스레드 하나로 구성, 시스템 호출 실행 시 해당
     스레드가 포함된 전체 작업이 시스템 호출 결과가 돌아올 때까지 대기


11) 스레드의 상태 변화


 11-1. 스레드의 특징
   - 준비, 실행, 대기, 종료 상태로 구분, 프로세서를 함께 사용하며 항상 스레드 하나만 실        행됨.
   - 한 프로세스에 있는 스레드는 순차적으로 실행, 자신의 정보를 위한 프로그램 카운터와
     스택을 가짐
   - 스레드 생성 시 운영체제는 부모 프로세스와 공유할 자원을 초기화하지 않음
   - 프로세스 내 스레드는 해당 프로세스에서 다른 스레드를 생성, 새로 형성된 스레드를       위한 스택과 레지스터를 제공함으로 프로세스의 생성및 종료 과정보다 오버헤드가 적음
   - 하나의 스레드가 대기 상태로 변할 때 전체 프로세스를 대기 상태로 변화시키지 않음
     : 하나의 스레드가 대기 상태일 경우 다른 스레드 실행 가능
   - 서로 독립적이지 않음
     : 한 작업에 있는 모든 스레드는 작업의 모든 주소에 접근 가능
   - 보호 문제
     : 프로세서는 다수의 사용자에게서 발생, 경쟁적인 자원 요구와 서로 다른 관계 유지
     : 스레드는 한 명의 사용자가 여러 스레드를 가진 작업 하나를 소유

12) 스레드의 상태


   - 대기
     : 스레드가 이벤트를 기다릴 때, 즉 입출력 작업 등이 완료될 때까지 대기(보류) 상태
     : 자신의 정보(프로그램 카운터, 스택 포인터 등)를 실행 스택에 저장
   - 준비
     : 스레드가 프로세서에 의해 실행될 수 있는 상태
     : 스레드를 대기시킨 이벤트 발생 시 해당 스레드는 준비 리스트에 삽입됨
   - 실행
     : 스레드가 프로세서를 점유하여 실행 중인 활성화 상태
   - 종료
     : 스레드가 작업을 종료하면 자원을 해제, 레지스터 문맥과 스택 할당 제거



* supplement

 1.프로세스 개념
   - 운영체제의 주 기능은 프로세스의 생성과 종료
   - 프로세스는 실행 중인 프로그램으로 실행되는 프로세스는 독립적 혹은 협조적일수있음
   - 협조적 프로세스는 논리적 주소 공간을 직접 공유 또는 파일을 통해서만 데이터 공유        가능

 2. 프로세스 상태
   - 프로세스 상태는 프로세스의 현재 활동에 의해 정의되며, 각 프로세스는 생성, 준비, 실
     행, 대기, 종료 상태로 구분, 실행하면서 상태 변경
   - 프로세스 제어블록(PCB)에 의해 OS에서 표현되며, 프로세스의 일시 정지( d suspend)
     상태를 이용하여 다중 프로그래밍 환경에서 프로세스 유휴 시간(idle time) 발생을 해결      가능함

 3. 문맥 교환
   - 프로세스 전환 시 이전 프로세스 상태 레지스터 내용을 보관, 또 다른 프로세스의 레지
     스터를 적재하는 문맥교환 과정을 거침 

 4. 프로세스와 스레드
   - 운영체제는 프로세스를 자원의 소유, 스레드를 실행 단위로 개념을 분리
   - 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유, 자원의 생성과 관리의
     중복성을 최소화하여 수행 능력 향상

 5. 스레드 상태
   - 준비, 실행 대기, 종료 상태로 구분
   - 한 프로세스에 있는 스레드는 순차적으로 실행, 자신의 정보를 위한 프로그램 카운터와
     스택을 각각 가짐

Share:

0 개의 댓글:

댓글 쓰기