본문 바로가기
컴퓨터공학/운영체제

4. 스레드의 개념

by meow0110 2024. 5. 26.

■스레드

-프로세스를 사용하는 기본 단위

-프로그램을 실행하는 프로세스 내에 명령어를 독립적으로 실행할 수 있는 흐름

 

■내가 좀 더 알아본 스레드 정의

-프로세스 내에서 실행되는 여러 흐름의 단위
-프로세스의 특정한 수행 경로
-프로세스가 할당받은 자원을 이용하는 실행의 단위

■경량 프로세스 = 스레드  라고 보면 된다.

 

■중량 프로세스

-스레드 하나에 프로세스 하나인 전통적인 경우

 

■ 동일 프로세스의 여러 스레드는 코드 영역, 데이터 영역, 운영체제 자원(예: 열린 파일, 시그널)을 공유.

-아래의 그림을 참고하자.

 

■ 프로세스가 다수의 제어 스레드를 가진다면, 프로 세스는 동시에 하나 이상의 작업을 실행할 수 있음

-예를 들면, 한컴 문서(하나의 프로세스) 중에 인쇄도 하면서 타자도 치고 있다.

-하나의 폴더(프로세스) 내에서 새로운 파일을 복사해서 넣기도 하고, 또 삭제할 수도 있다.

-즉 제어의 흐름이 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