Hope Everyone Is Happy

6. 스레드 본문

※ CS 스터디/운영체제

6. 스레드

J 크 2023. 11. 6. 22:37
728x90
반응형

본 게시글은  : 면접을 위한 CS 전공지식 노트 (출판사 : 길벗, 주홍철 지음) 을 참조하여 작성하였습니다. + 구글링


◆  프로세스와 스레드

프로세스

      --> 프로그램을 만들면 그 프로그램은 하드디스크에 저장

      --> 운영체제를 통해서 그 하드디스크에 저장된 파일들을 확인

      --> 운영체제가 제공하는 입출력을 통해서 (키보드, 마우스 등) 프로그램 실행

      --> 프로그램을 실행하기 위해 메모리에 실행에 필요한 데이터들이 올라감

      --> CPU에서 메모리에 올라온 데이터를 Read/Write하며 프로그램을 실행

      --> 이 때 CPU에서 동작 시키고 있는 것이 프로세스 (Process)

 

- 스레드

    : 프로세스 내에서 실행되는 여러 흐름의 단위 ( 작업의 단위)

    : 프로세스의 실행 가능한 가장 작은 단위, 프로세스는 여러 스레드를 가짐

    : 코드, 데이터, 스택, 힙을 각각 생성하는 프로세스와 달리 스레드는 코드, 데이터, 힙을 서로 공유

 

- 멀티 스레딩

    : 프로세스 내 작업을 여러 개의 스레드, 멀티 스레드로 처리하는 기법

    : 스레드끼리 서로 자원을 공유하기 때문에 효율성 보장

       ex) 웹 요청을 처리할 때 새 프로세스 생성 대신 스레드를 사용하는 웹 서버의 경우 훨씬 적은 리소스를 소비

    : 한 스레드가 중단되어도 다른 스레드는 실행 상태일 수 있기 때문에 중단되지 않은 빠른 처리가 가능

    : 동시성에도 큰 장점

         => ( 동시성 :  서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것처럼 보여주는 것 )

    : 하지만 한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 프로세스에 영향을 줄 수 있는 단점 존재

      ex) 멀티스레드의 예시,  웹 브라우저의 렌더러 프로세스

               => 이 프로세스 내에는 메인 스레드, 워커 스레드, 컴포지터 스레드, 레스터 스레드가 존재


◆  공유 자원과 임계 영역

- 공유 자원 (shared resource)

    : 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 메모리, 파일, 데이터 등의 자원이나 변수 등을 의미

    : 공유 자원을 2개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태 (race condition)로 정의

    : 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태

 

     ex) 코인 100개라는 자원에

          프로세스 A와 프로세스 B에서 동시에 코인 100개 확인, 코인 100개 추가 라는 작업이 들어왔을 때,

          코인 100개 추가가 동시에 이루어져 결과값이 코인 300개가 아닌, 코인 200개로 출력 될 수 있다.  

 

- 임계 영역 (critical section)

    : 둘 이상의 프로세스, 스레드가 공유 자원에 접근할 때 순서 등의 이유로 달라지는 코드 영역

    : 임계 영역을 해결하기 위한 방법은 크게 뮤텍스, 세마포어, 모니터 세 가지 존재

    : 위 3가지 방법은 상호 배제, 한정 대기, 융통성이라는 조건을 만족

·상호 배제 = 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없다.

·한정 대기 = 특정 프로세스가 영원히 임계 영역에 들어가지 못하면 안된다.

·융통성 = 한 프로세스가 다른 프로세스의 일을 방해해서는 안된다.

    : 토대가 되는  메커니즘은 잠금(lock)

       ex) A의 작업이 끝날 때까지 잠그고, 작업이 끝나면 잠금 해제 후 다른 작업 B 를 진행

 

- 뮤텍스 (mutex)

    : 프로세스나 스레드가 공유자원을 lock()을 통해 잠금  설정하고 사용한 후에 unlock()을 통해 잠금 해제하는 객체

    : 잠금이 설정되면 다른 프로세스나 스레드는 잠긴 코드 영역에 접근 불가, 해제 후 접근 가능

    : 뮤텍스는 잠금 or 잠금 해제

 

- 세마포어 (semaphore)

    : 일반화된 뮤텍스로 간단한 정수값과 두 가지 함수 wait(or P) 및 signal(or V)로 공유 자원에 대한 접근을 처리

    : wait()은 자신의 차례가 올 때 까지 기다리는 함수이며, signal()은 다음 프로세스로 순서를 넘겨주는 함수

       1. 프로세스나 스레드가 공유 자원에 접근 하면 세마포어에서 wait() 작업을 수행

       2. 작업을 수행 완료 후 프로세스나 스레드가 공유 자원을 해제하면 세마 포어에서 singal()작업을 수행

    : 세마포어에는 조건 변수 X

    : 프로세스나 스레드가 세마포어 값을 수정할 때 다른 프로세스나 스레드는 동시에 세마포어 값을 수정 불가

 

- 바이너리 세마포어

    : 0과 1의 두 가지 값만 가질 수 있는 세마포어 (0이면 잠금, 1이면 해제)

    : 뮤텍스는 잠금을 기반으로 상호배제가 일어나는 '잠금 메커니즘'

       => 오직 하나의 쓰레드만이 동일한 시점에 뮤텍스를 얻고, 이 쓰레드만이 임계 영역에서 뮤텍스를 해제 

      바이너리 세마포어는 신호를 기반으로 상호 배제가 일어나는 '신호 메커니즘'

       => 락을 걸지 않은 쓰레드도 Signal을 보내 락을 해제 가능

        ex) 휴대폰에서 노래를 듣다가 전화가 오면, 노래가 중지되고 통화 작업 진행

 

- 카운팅 세마포어

    : 여러 개의 값을 가질 수 있는 세마포어, 여러 자원에 대한 접근을 제어

 

- 모니터

    : 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록

       공유 자원을 숨기고 해당 접근에 대한 인터페이스만 제공

 

    : 위와 같이 모니터큐에 공유 자원에 대한 작업들을 큐 구조로 저장하여 FIFO 형태로 작업들을 처리

    : 모니터는 세마포어보다 구현이 쉬움

    : 모니터에서 상호 배제는 자동인 반면에, 세마포어에서는 상호 배제를 명시적으로 구현해야하는 차이점 존재


◆  교착 상태

- 교착 상태 (deadlock)

    : 두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태

        ex) 프로세스 A가 프로세스 B의 자원을 요청할 때,

              프로세스 B도 프로세스 A가 점유하고 있는 자원을 요청 

 

- 교착 상태의 원인

    · 상호 배제 : 한 프로세스가 자원을 독점하고 있으며 다른 프로세스들은 접근이 불가

    · 점유 대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태

    · 비선점 : 다른 프로세스의 자원을 강제적으로 가져올 수 없음

    · 환형 대기 : 프로세스 A는 프로세스 B의 자원을 요구하고, 프로세스 B는 프로세스 A의 자원을 요구하는 등 서로가                                서로의 자원의 상황을 요구하는 상황

 

- 교착 상태의 해결 방법

    1. 자원을 할당할 때 애초에 조건이 성립되지 않도록 설계

    2. 교착 상태 가능성이 없을 때만 자원 할당되며, 프로세스당 요청할 자원들의 최대치를 통해 자원 할당 가능 여부를 파           악하는 '은행원 알고리즘' 사용

    3. 교착 상태가 발생하면 사이클이 있는지 탐색 후, 이에 관한 프로세스를 한 개씩 삭제

    4. 교착 상태는 매우 드물게 일어나기 때문에 이를 처리하는 비용이 더 커서 교착 상태가 발생하면 사용자가 작업을 종료

        ex) 프로세스를 실행하다 '응답 없음' 발생

 

은행원 알고리즘
- 총 자원의 양과 현재 할당한 자원의 양을 기준을 안정 또는 불안정 상태로 나누고 
  안정 상태로 가도록 자원을 할당하는 알고리즘

 


위의 글과 관련하여 추가적인 내용이나 피드백은 언제나 환영입니다 :)

 

'※ CS 스터디 > 운영체제' 카테고리의 다른 글

7. CPU 스케줄링  (0) 2023.11.07
5. 프로세스  (0) 2023.09.19
4. 메모리 관리  (0) 2023.09.13
3. 메모리 계층  (0) 2023.09.12
2. 컴퓨터의 요소  (0) 2023.09.10