CS전공지식(스레드, CPU 스케줄링 알고리즘)

박정호·2022년 8월 6일
0

CS

목록 보기
12/18
post-thumbnail

스레드

  • 프로세스의 실행 가능한 가장 작은 단위
  • 코드, 데이터, 스택, 힙을 스레드끼리 서로 공유, 그외의 영역은 각각 생성
    -> 프로세스끼리는 각자 생성, 그 안에 멀티스레드가 코드,데이터,스택,힙을 공유하는 것

멀티스레딩

  • 프로세스 내 작업을 여러개 스레드, 멀티스레드로 처리하는 기법
  • 스레드끼리 서로 자원을 공유하여 효율성이 높다
  • 동시성이라는 장점
    ex) 웹 요청을 처리할 때 새 프로레스를 생성하는 대신 스레드를 사용하는 웹 서버의 경우 훨씬 적은 리소스를 소비. 또한 한 스레드가 중단되어도 다른 스레드는 실행 상태일 수 있기 때문에 중단되지 않고 빠른 처리가 가능
  • 한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 프로세스에도 영향을 줄 수 있는 단점

ex) 멀티스레드 - 웹 브라우저 렌더러 프로세스(메인 스레드,워커 스레드, 컴포지터 스레드, 레스터 스레드 존재)

공유자원과 임계영역

공유자원

  • 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리 파일, 데이터 등의 자원이나 변수 등을 의미
  • 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 '경쟁상태(race condition)'라고 한다
    -> 동시에 접근 시도 시 접근의 타이밍이나 순서 등이 결괏값에 영향을 줄 수 있는 상태

ex) 프로세스A와 프로세스B가 동시에 접근하여 타이밍이 꼬여 결괏값이 200으로 출력되버린다

임계 영역

  • 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 영역을 임계영역

임계 영역 해결방법

  • 뮤텍스, 세마포어, 모니터(상호 배제, 한정 대기, 융통성이라는 조건 만족)
    -> 이 방법에 토대가 되는 메커니즘이 잠금(lock)
    : 화장실을 쓸때 문을 잠그면 다음 사람은 잠금이 풀려야 다음부터 사용가능

잠깐) 상호 배제 & 한정대기 & 융통성
상호 배제: 한 프로세스가 임계 영역애 들어갔을 때 다른 프로세스는 들어갈 수 없다
한정 대기: 특정 프로세스가 영원히 임계 영역에 들어가지 못하면 안된다
융통성: 한 프로세스가 다른 프로세스의 일을 방해해서는 안된다

뮤텍스

- 리소스에 대한 접근을 동기화하는데 사용되는 잠금 메커니즘
- 공유 자원을 사용하기 전에 설정하고 사용한 후에 해체하는 잠금

  • 잠금이 설정되면 다른 스레드는 잠긴 코드 영역에는 접근 불가
  • 뮤텍스는 하나의 상태(잠금 또는 잠금해제)만 가진다

세마포어

- 신호를 기반으로 상호 배제가 일어나는 신호 메커니즘
- 일반화된 뮤텍스

  • 간단한 정수 값과 두 가지 함수 wait 및 signal로 공유 자원에 대한 접근을 처리
  • 세마포어에는 조건 변수가 없다
  • 프로세스가 세마포어 값을 수정할 때 다른 프로세스는 동시에 세마포어 값을 정할 수 없다.

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

  1. 프로세스가 공유 자원에 접근
  2. 세마포어에서 wait()작업을 수행
  3. 프로세스가 자원을 해제
  4. 세마포어에서 signal()작업을 수행

바이너리 세마포어

  • 0과 1의 두가지 값만 가질 수 있는 세마포어
    -> 뮤텍스가 두가지 값만 가지는 바이너리 세마포어라고 할 수 있다
    but, 뮤텍스는 리소스에 대한 접근을 기반, 세마포어는 신호를 기반

ex) 노래를 듣다가 전화가 오면 노래가 중단되고 통화 처리 작업을 하는 과정

카운팅 세마포어

  • 여러개의 값을 가질 수 있는 세마포어
  • 여러 자원에 대한 접근을 제어하는데 사용

모니터

  • 둘 이상의 스레드나 포르세스가 공유 자원에 안전하게 접근할 수 있도록 공유 자원을 숨기고 해당 접근에 대한 인터페이스만 제공
  • 모니터는 모니터큐를 통해 공유 자원에 대한 작업들을 순차적으로 처리
  • 모니터는 세마포어보다 구현하기 쉽다
  • 상호 배제는 자동

교착상태(deadlock)

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

교착상태 원인

상호배제

  • 한 프로세스가 자원을 독점하고 있으며 다른 프로세스들은 접근이 불가능

점유 대기

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

비선점

  • 다른 프로세스의 자원을 강제적으로 가져올 수 없다

환형 대기

  • 프로세스 A는 프로세스 B의 자원을 요구하고 프로세스 B는 프로세스 A의 자원을 요규하는 서로가 서로의 자원을 요구하는 상황

교착상태 해결방법

예방

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

회피

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

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

탐지

  • 교착 상태가 발생하면 사이클이 있는지 찾아보고 이에 관련된 프로세스를 한개씩 지운다

회복

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

CPU 스케줄링 알고리즘

  • CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당
  • 프로그램이 실행될 때는 CPU 스케줄링 알고리즘이 어떤 프로그램에 CPU 소유권을 줄 것인지 결정
    -> 이 알고리즘은 CPU 이용률은 높게, 주어진 시간에 많은 일을 하게, 준비큐에 있는 프로세스는 적게, 응답 시간은 짧게 설정하는 것을 목표로 한다

비선점형 방식

  • 프로세스가 스스로 CPU 소유권을 포기하는 방식

  • 강제로 프로세스를 중지시키지 않는다 -> 컨텍스트 스위칭으로 인한 부하가 적다

    FCFS(First Come, First Served)

  • 가장 먼저 온 것을 가장 먼저 처리하는 알고리즘

  • 길게 수행되는 프로세스 때문에 '준비 큐에서 오래 기다리는 현상' 발생하는 단점

SJF(Shortest Job First)

  • 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행하는 알고리즘
  • 긴 시간을 가진 프로세스가 실행되지 않은 현상 발생 -> 평균 대기시간이 짧다
  • 실제로는 실행 시간을 알 수 없기 때문에 과거의 실행했던 시간을 토대로 추측해서 사용

우선순위

  • 기존 SJF 스케줄링의 실행되지 않는 현상을 보완하여 오래된 작업일 수록 '우선순위을 높이는 방법(aging)'을 사용

선점형 방식

  • 현대 운영체제가 쓰는 방식
  • 지금 사용하고 있는 프로세스를 알고리즘에 의해 중단시켜 버리고 강제로 다른 프로세스에 CPU 소유권을 할당하는 방식

라운드로빈(RR)

  • 현대 컴퓨터가 쓰는 스케줄링인 우선순위 스케줄링의 일종
  • 각 프로세스는 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비 큐의 뒤로 가는 알고리즘

SRF

  • 중간에 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행하는 알고리즘 (<-> SJF는 기존 짧은 작업 모두 수행하고 그 다음 짧은 작업 수행)

다단계큐

  • 우선순위에 따른 준비큐를 여러 개 사용하고 큐마다 라운드로빈이나 FCFS 등 다른 스케줄링 알고리즘을 적용하는 것
  • 큐 간의 프로세스 이동이 안되므로 스케줄링 부담이 적지만 유연성이 떨어진다
profile
기록하여 기억하고, 계획하여 실천하자. will be a FE developer (HOME버튼을 클릭하여 Notion으로 놀러오세요!)

0개의 댓글