블로그 이미지
LanSaid

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Recent Post

Recent Comment

Recent Trackback

Archive

2012. 3. 23. 17:17 Study/운영체제

1. 스레드 개요
 * 프로세스에서 실행 제어만 분리한 실행단위.
  1) 경량 프로세스 라고도 불림
    etc> 중량 프로세스는 스레드를 하나 가진 작업
  2) 작업 : 스레드의 그룹 환경
    - 같은 그룹의 스레드와 코드, 주소공간, OS의 자원 등을 공유

 * 스레드의 장점
  1) 프로세스에 포함된 스레드들은 공통의 목적을 위해 병렬로 수행 -> 자원을 공유 / 한 프로세스에서 동시 작업 가능
  2) 시스템 성능과 효율 향상
   - 하나의 프로세스가 서로 다른 프로세서에서 프로그램의 다른 부분을 동시 실행 가능 ex> 웹브라우저
   - 응용 프로그램 하나가 비슷한 작업들을 여러개 수행.
  3) 스레드를 이용하여 다음과 같은 이점을 얻을수 있음
   - 사용자에 대한 응답성 증가 ex> 웹 브라우저
   - 프로세스의 자원과 메모리 공유 가능
   - 경제성 -> 위 항목에 의하여 오버헤드 감소 
   - 다중 프로세서 구조 활용 가능

2. 단일 스레드와 다중 스레드
 * 단일 스레드
 * 다중 스레드
  1) 각 스레드를 별도의 프로세서에서 실행하는 측면 -> 다중 프로세싱 과 유사
  2) 동일 프로세스 내의 스레드는 자원을 공유하므로, 프로세스 하나에 다수의 실행 단위로 구분된 자원을 공유 -> 경제성
  3) 2)항목에 의하여 중복을 최소화 하므로 실행 능력 향상
  4) 각 스레드는 커널 개입 없이 서로 통신이 가능 / 독립적으로 실행
  5) 서버에서 많은 요청을 효과적으로 처리할 수 있는 환경
  6) 프로세스 새로 생성보다 기존 프로세스에서 스레드를 생성하는 것이 빠르다 / 같은 프로세스 내의 스레드 간 교환이나 스레드 종료도 빠르다.

3. 스레드 용법
 * 단일 사용자 다중 처리 시스템 환경
  1) 시스템 호출이 아닌 사용자 라이브러리 수준에서 스레드 개념을 제공 -> 빠른속도
  2) 프로그램에 비동기적 요소를 구현가능.  명령 요청과는 별도로 타 작업 수행 가능
  3)
 * 공유 메모리형태의 다중 프로세서 시스템 환경
  1) 프로그램을 공유 메모리에 저장, 스레드를 각 프로세서에 할당, 병렬 처리하여 프로세서 의 시간 대비 작업 효율을 매우 향상 시킬수 있다. -> 하이퍼 스레딩 기법 관련

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

4. 스레드의 상태 변화
 * 스레드의 특징
  1) 준비,실행,대기,종료 상태로 구분, 프로세서를 함께 사용하며 항상 스레드 하나만 실행 됨.
  2) 한 프로세스에 있는 스레드는 순차적으로 실행, 자신의 정보를 위한 PC와 스택을 가짐.
  3) 스레드 생성시 OS는 부모 프로세스와 공유할 자원을 초기화하지 않음.
  4) 프로세스 내 스레드는 해당 프로세스에서 다른 스레드를 생성 -> 새로 형성된 스레드를 위한 스택과 레지스터를 제공함 -> 프로세스 생성 종료과정 보다 오버헤드가 적음
  5) 하나의 스레드가 대기 상태로 변할 때 전체 프로세스를 대기 상태로 변화시키지 않음. -> 하나의 스레드가 대기 상태일 경우 다른 스레드 실행 가능.
  6) 서로 독립적이지 않다.
  7)
 * 스레드의 상태
  1) 대기
  2) 준비
  3) 실행
  4) 종료

5. 스레드 구현
 * 사용자 수준 스레드
  1) 커널 스레드를 지원하지 않는 OS에서 사용
  2) 사용자수준 : 커널스레드 = 1 : N 으로 매핑되는 방식 -> 다대일 스레드
  3) 다중 스레드 프로세스에 대해 프로세서(실행 문맥)하나를 할당 -> 다대일 스레드
  4) 스레드 라이브러리
   -  스레드 생성, 종료, 문맥 교환을 위한코드, 동기화, 메모리 할당, 스레드 간 메시지 전달, 스레드 실행 스케쥴링 등의 정보를 포함
   - 생성 유틸리티를 통해 스레드가 생성, 제어는 프로시저 호출을 통해 해당 유틸리티로 이동하여 수행
  5) 사용자 수준 스레드의 장점
   - 커널 도움 없이 사용자 주소 공간에 구현된 스레드 패키지로 스레드 연산실행.
   - 커널은 연산 과정은 모르고 프로세스를 계속 하나의 단위로 스케쥴하고 하나의 실행 상태를 할당 
   - 커널과 상관 없이

  6) 여러 수준에서 스레드 구현 가능
  7) 사용자 수준 스레드 이용 시 시스템의 장점
   - 높은 이식성 : 기본 커널 변경 없이 모든 OS에 적용 가능
   - 오버헤드 감소 : 스레드 관리를 위한 모든 데이터 구조가 프로세스의 사용자 주소 공간에 있어 커널의 도움 없이 스레드 교환 가능
   - 스케줄링의 유연성 : 스레드 라이브러리에서 스레드 스케줄링을 제어 -> 스케줄링이 응용 프로그램에 맞게 적절히 구성됨
  8) 사용자 수준 스레드 이용시 시스템의 단점
   - 시스템의 동시성 지원 불가 : 한번에 하나의 스레드만 커널에 접근 가능 -> 여러 스레드가 시스템 호출을 동시에 사용 불가
   - 시스템 규모 확장제약 : 커널이 프로세서 내부의 다중 스레드를 프로세스 하나로 관리, 다중 처리 환경에서 여러 프로세스를 이용한 분산 처리를 할수 없음
     -> "프로세서-OS-프로세스-스레드" 로 연결 되기 때문에 프로세서에서 스레드로 직접 연결 되지 않으므로 1CPU : 1스레드가 매핑 되지 않음.
  9) 스레드 간 보호가 어려움 : 스레드간의 보호에 커널의 보호 기법 사용 불가. 스레드 라이브러리에서 스레드 간 보호를 제공 해아함 -> 프로세스 수준에서 보호 

 * 커널 수준 스레드
  1) 사용자 수준 스레드의 한계를 해결을 목적으로 함.
   - 사용자 스레드마다 프로세서(실행 문맥윽)를 매핑하는 1:1 스레드 매핑을 지원
  2) 커널에 의해 생성, 삭제됨 / 커널의 텍스트와 전역 데이터를 공유 / 자신만의 커널 스택 보유
  3) 사용자 영역에는 스레드 관리를 위한 코드가 없음.
  4) 커널 지원 부족 문제 해결
   - 커널에 의한 직접적인 스케줄링과 실행 -> 사용자 수준 스레드의 문제 해결 -> 시스템 성능 향상
  5) 병렬 실행 가능
   - 하나가 시스템 호출 시 다른 스레드가 중단되는 다대일 방식의 문제를 해결 가능 -> 다중 프로세서에서 다중 스레드를 병렬로 실행 가능
   - 시스템 규모 확장이 쉬우며 처리량을 늘릴 수 있음.
  6) 커널 모드 전환 오버헤드
   - "커널 스레드 생성으로 인한 오버헤드 증가 -> 성능저하 발생" 하므로 시스템이 지원 스레드 수를 제한해야 함
   - 사용자 수준 스레드 보다 스케줄링과 동기화를 위해 자원이 더 필요함.
   - 시스템이 모든 스레드를 관리하므로 오버헤드 증가
  7) 이식성이 떨어짐
   - 시스템 변경시 제공되는 스레드 API에 맞게 수정이 필요하므로 응용 프로그램 실행에서 항상 최적의 해결책은 아니다.

 * 혼합형 스레드 지원
  1) 스레드 생성은 사용자 영역 / 여러 개의 사용자 수준 스레드 : 여러개의 커널 스레드 = N : N 이 되는 다대다 매핑.
  2) 자원과 입출력 대기를 위한 대기가 경량 프로세스 단위로 이루어짐
  3) 스레드 라이브러리가최적의 성능을 지원
   - 경량 프로세스의 수를 동적으로 조절, 사용자 수준 스레드와 커널 수준 스레드를 다대다 스레드 매핑
   - 다대다 스레드 매핑은 스레드 풀링 기법을 통해 일대일 매핑에서의 오버헤드를 줄여줌
  4) 스레드 활용 운영체제의 예
   - 매크(Mach)
   - 유닉스 커널
posted by LanSaid