■스레드
-프로세스를 사용하는 기본 단위
-프로그램을 실행하는 프로세스 내에 명령어를 독립적으로 실행할 수 있는 흐름
■내가 좀 더 알아본 스레드 정의
-프로세스 내에서 실행되는 여러 흐름의 단위
-프로세스의 특정한 수행 경로
-프로세스가 할당받은 자원을 이용하는 실행의 단위
■경량 프로세스 = 스레드 라고 보면 된다.
■중량 프로세스
-스레드 하나에 프로세스 하나인 전통적인 경우
■ 동일 프로세스의 여러 스레드는 코드 영역, 데이터 영역, 운영체제 자원(예: 열린 파일, 시그널)을 공유.
-아래의 그림을 참고하자.
■ 프로세스가 다수의 제어 스레드를 가진다면, 프로 세스는 동시에 하나 이상의 작업을 실행할 수 있음
-예를 들면, 한컴 문서(하나의 프로세스) 중에 인쇄도 하면서 타자도 치고 있다.
-하나의 폴더(프로세스) 내에서 새로운 파일을 복사해서 넣기도 하고, 또 삭제할 수도 있다.
-즉 제어의 흐름이 2개가 된다.
■ 결론정리!
-하나의 프로세스에서 제어 부분만 동떨어져서, 우리가 묶어서 이야기하는걸 스레드라고 함.
-하나의 프로세스는 여러개의 스레드가 존재할 수 있다.
-경량, 중량 프로세스로 나눠 볼 수 있다.
-같은 프로세스의 스레드끼리, 동일한 주소공간을 공유해서 공간을 효율적으로 쓴다.
-같은 프로세스의 여러 스레드는 코드,데이터,OS자원을 공유
-동시에 하나 이상의 작업을 수행할 수 있다.
■ 스레드 병렬 수행의 개념
■ 스레드 병렬 수행의 장점
-응답성 증가 : 일 하나만 하는게 아닌, 동시에 처리해줘서 응답이 빨라!
-자원,메모리 공유 : 응용 프로그램 하나가 같은 주소 공간에서 여러 스레드를 실행해서 성능,관리를 향상시킬 수 있다.
-경제적 : A스레드와 B스레드가 문맥교환(정보교환)을 안해도 된다. 서로 공유하니까.
-다중처리로 성능과 효율 증가 : 각 스레드는 다른 프로세스에서 병렬적으로 계속해서 수행될 수 있기 때문에 효과
■ 단일 스레드 : 프로세스1개에 1개의 스레드.대표적으로 DOS가 있다.
■ 다중 스레드 : 프로세스1개에 여러개의 스레드가 있다. 예를들어 윈도우, 솔라리스 등
■ code, data, file, registers, stack 등은 모두 PCB정보 라고 보면 된다.
■ 한마디로, 제어해주는 애들이 정보들도 서로 공유해서 효과적으로 일처리를 해준다. 라는 뜻 같다.
■ 스레드의 이용 예시
■ 한마디로 하나의 프로세스 안에 일꾼들이 많으니 일처리가 동시에 되서 효율적이다.
■ 단일 스레드 웹 서버
-A 클라이언트의 요청오면 처리 / 근데 B클라이언트는 기다려야함 / C도 대기 / D도 대기.
-너무 오래 기다린다...
■다중 프로세스 웹 서버
-스레드가 일반화 되기 전
-새로운 프로세스를 생성해서 A클라이언트의 요청 처리하면서 B클라이언트도 처리해줌. 근데 C클라언트도 처리해달라네? 어? D도 해달라고?
-새로운 프로세스가 계속 생성되니 서버에 과부하가 걸림.
■다중 스레드 웹 서버
-안돼겠다! 프로세스를 너무 많이 만드니까 서버가 힘들어해!
-프로세스보다 작은 스레드(노예1,2,3,4)으로 처리하자!
-일단 프로세스를 여러개 말들지 말고, 하나의 장소로 통합시켜! (A,B,C,D 클라이언트들의 요청은 모두 비슷하니 같은 프로세스로 통합시켜. )
-1,2,3,4번 노예를 한 프로세스에 대기시켜.
-그리고 비슷한 일이잖아? 정보를 공유시키니 노예1,2,3,4들의 일처리 속도가 빠르다!
■ 인터럽트 (프로세스의 실행 > 비실행 상태를 말)
■ 다중 스레드 프로그램의 장점
■ 확장성 - 다중 프로세서 구조의 활용
-CPU가 여러개인 시스템의 경우 더 많은 일을 할 수 있어 확장성이 좋다.
-한마디로, CPU를 여러개 붙인다고 서로 각자 무시하는게 아닌, 서로 협업한다는 뜻!
■ 사용자 스레드 : 사용자가 프로그래밍할 때 쓰는 스레드라 생각하자.
■ 커널 스레드 : 운영체제의 지원을 받는 스레
■ 사용자 스레드는 운영체제가 개입하지 않기 때문에 빠르다.
■ 사용자 스레드 : 커널 위에서 작용되므로 커널의 지원 없이 관리!
■ 커널스레드 : 운영체제 커널에 의해 지원,관리받음
■ 사용자 스레드와 커널 스레드의 관계
■ N사용자 스레드 > 1커널스레
■ 한 번에 하나의 스레드만이 커널에 접근할 수 있기 때문에, 다중 스레드가 다중 프로세서에서 돌아도 병렬로 작동할 수 없음
■ 1사용자 스레드 > 1커널스레드
■ 다대일 모델보다 더 많은 병렬성을 제공함 (다대일보단 낫)
■ 일대일 모델 사용시, 너무 많이 스레드를 생성하지 않도록 해야한다.
■ N사용자 스레드 > N커널 스레드
■ 응용은 원하는 수 만큼의 사용자 스레드들을 생성하고 이들에 대응하는 커널 스레드들이 다중 처리기에서 병렬로 수행될 수 있음
■ 운영체제가 충분한 수의 커널 스레드를 생성하도록 함
■ 다대다 스레드 모델 예시
■ 프로세서 함께 사용, 항상 하나만 실행
■ 한 프로세스에 있는 스레드는 순차적 실행, 해당 스레드의 정보 저장 (레지스터, 스택)
■ 프로세스의 생성과 종료보다는 오버헤드 훨씬 적음
■ 실행 상태의 스레드가 대기 상태가 되면 다른 스레드 실행 가능(서로 독립적이지는 않음)
■ 스레드 제어 블록 (TCB)
-PCB와 같은 개념이라 보면 된다.
■ 스레드도 상태정보를 가진다. 그래서 스케줄링 정보가 필요하다.
학습정리
스레드의 개념
- 프로세스의 특성인 자원과 제어에서 제어만 분리한 실행 단위이다.
- 프로세스 하나는 스레드 한 개 이상으로 나눌 수 있다.
- 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보 공유한다.
- 다른 프로시저를 호출하고 다른 실행을 기록한다.(별도 스택 필요)
- 관련 자원과 함께 메모리 공유 가능하므로 손상된 데이터나 스레드의 이상 동작을 고려한다.
- 경량 프로세스 LWP는 프로세스의 속성 중 일부가 들어 있는 것이다.
- 중량 프로세스 HWP는 스레드 하나에 프로세스 하나인 전통적인 경우이다.
- 같은 프로세스의 스레드들은 동일한 주소 공간 공유한다.
- 동일 프로세스의 여러 스레드는 코드 영역, 데이터 영역, 운영체제 자원(예: 열린 파일, 시그널)을 공유한다.
- 프로세스가 다수의 제어 스레드를 가진다면, 프로세스는 동시에 하나 이상의 작업을 실행할 수 있다.
단일 스레드와 다중 스레드
- 단일 스레드는 프로세스 하나에 스레드 하나가 실행되는 전통적인 방식으로 스레드의 개념이 불확실하다.
- 다중 스레드는 프로그램 하나를 여러 실행 단위로 쪼개어 실행한다는 측면에서 다중 처리(다중 프로세싱)와 비슷하다.
- 다중 스레드 프로그램은 반응성, 자원공유, 경제성, 확장성의 장점이 있다.
- 다중 스레드 모델에는 사용자 스레드(user thread)와 커널 스레드(kernel thread)가 있다.
스레드의 상태변화
- 프로세서 함께 사용하며 항상 하나만 실행한다.
- 한 프로세스에 있는 스레드는 순차적 실행한다. (해당 스레드의 정보 저장레지스터, 스택)
- 프로세스 생성하면 해당 프로세스의 스레드도 함께 생성된다. 단, 스레드 생성에서는 운영체제가 부모 프로세스와 공유할 자원 초기화 필요 없다.
- 프로세스의 생성과 종료보다는 오버헤드 훨씬 적다.
- 스레드 한 개가 대기 상태로 변환 시 전체 프로세스 대기 상태로 변환하지 않는다.
- 실행 상태의 스레드가 대기 상태가 되면 다른 스레드 실행 가능하다.(서로 독립적이지 않다.)
- 프로세스 하나에 있는 전체 스레드는 프로세스의 모든 주소에 접근 가능하여 스레드 한 개가 다른 스레드의 스택 읽기나 덮어 쓰기 가능하다.
- 프로세서는 여러 사용자가 생성하여 서로 경쟁적으로 자원을 요구하고 서로 다른 관계를 유지해야 하지만 스레드는 사용자 한 명이 여러 스레드로 개인 프로세스 하나 소유한다.
'컴퓨터공학 > 운영체제' 카테고리의 다른 글
6. 스케쥴링 알고리즘 (0) | 2024.06.25 |
---|---|
5. 프로세서 스케쥴링 (0) | 2024.06.12 |
3. 프로세스의 개념 (0) | 2024.05.26 |
2. 운영체제의 기능과 서비스 (1) | 2024.05.22 |
1. 운영체제 개요 (2) | 2024.05.21 |