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)
- 유닉스 커널
'Study > 운영체제' 카테고리의 다른 글
[운영체제] 120406 챕터5. 교착상태와 기아상태 (0) | 2012.04.06 |
---|---|
세마포어에 관하여... (0) | 2012.04.06 |
[운영체제] 120330 상호배제와 동기화 (0) | 2012.03.30 |
[운영체제] 120330 병행프로세스 (0) | 2012.03.30 |
[운영체제] 120323 프로세스 (0) | 2012.03.23 |