241105 CS세션 - 멀티 쓰레딩

LIHA·2024년 11월 4일
0

내일배움캠프

목록 보기
102/117
post-thumbnail

프로세스와 쓰레드

참고 블로그

  • 프로세스: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
    메모리에 올라와 실행되고 있는 프로그램의 인스턴스
    운영체제로부터 시스템 자원을 할당받는 작업의 단위
  • 쓰레드: 프로세스 내에서 실행되는 여러 흐름의 단위
    프로세스의 특정한 수행경로
    프로세스가 할당받은 자원을 이용하는 실행의 단위

메모리 영역(힙, 코드, 스택, 데이터)

  • 쓰레드는 프로세스 내에서 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.

Stack: 함수 호출 시 생성되는 지역변수, 매개변수가 저장되는 영역으로, 프로그램이 자동으로 사용하는 임시 메모리 영역.
Heap: Stack과 비슷하지만 사용자에 의해 관리되는 임시 메모리 영역.
즉, 사용자가 필요에 의해 동적으로 메모리를 할당할 때 사용된다.

컨텍스트 스위칭

참고 블로그

  • 컨텍스트 스위칭: CPU/코어에서 프로세스/쓰레드가 다른 프로세스/쓰레드로 교체되는 것
    컨텍스트? 프로세스/쓰레드의 '상태'를 의미
    상태? CPU, 메모리에서의 상태
  • 컨텍스트 스위칭이 필요한 이유?
    여러 프로세스와 스레드를 동시에 실행시키기 위해
    여러 프로세스와 스레드들이 공정하게 CPU 시간을 나눠갖기 위해
    높은 우선순위의 작업이 빠르게 처리될 수 있게

레이스 컨디션

참고 블로그

  • 레이스 컨디션? 두 개 이상의 프로세스 혹은 쓰레드가 공유 자원을 서로 사용하려고 경합(Race) 하는 현상

세마포어와 뮤택스

참고 블로그

프로세스 간 메시지를 전송하거나, 공유메모리를 통해 특정 데이터를 공유하게 되는 경우 문제가 발생할 수 있다.

즉, 공유된 자원에 여러 개의 프로세스가 동시에 접근하면서 문제가 발생하는 것으로, 공유된 자원 속 하나의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한해 두어야 하는데 -> 이를 위하여 고안된 것이 세마포어라고.

  • 임계구역(Critical Section): 여러 프로세스가 데이터를 공유하며 수행될 때, 공유 데이터를 접근하는 프로그램 코드 부분을 말한다.

  • 세마포어: 공유된 자원의 데이터 혹은 임계영역 등에 여러 프로세스 혹은 쓰레드가 접근하는 것을 막아줌. (=동기화 대상이 하나 이상)

  • 뮤텍스: 공유된 자원의 데이터 혹은 임계영역 등에 하나의 프로세스 혹은 쓰레드가 접근하는 것을 막아줌. (=동기화 대상이 하나)

데드락

참고 블로그

  • 데드락?: 교착 상태. 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태.

데드락 발생조건
1. 상호 배제: 자원은 한번에 한 프로세스만 사용할 수 있다
2. 점유 대기: 최소 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야함
3. 비선점: 다른 프로세스에 할당된 자원은 사용이 끝날때까지 강제로 빼앗아 올 수 없음
4. 순환 대기: 프로세스의 집합에서 순환 형태로 자원을 대기하고 있어야 함


241107 수업내용 보충

컨텍스트 스위칭 - 작업을 빠르게 전환해서 동시에 처리하는 것 처럼 보이게 한다

프로세스와 스레드

  • 프로세스는 운영체제에서 실행되는 프로그램의 인스턴스를 말한다. 메모리 공간과 시스템 리소스를 할당받아 독립적으로 실행된다.
    각 프로세스는 독립된 주소공간을 가지므로, 다른 프로세스에 직접 접근하거나 간섭하지 않는다. 예를 들어 크롬과 메모장이 동시에 실행중일 때, 각 프로그램은 서로 다른 프로세스로 실행된다.

  • 쓰레드는 프로세스 내부의 실행단위로, 프로세스가 가지고 있는 자원을 공유하면서 독립적으로 실행된다.
    여러 쓰레드는 하나의 프로세스에 속하며, 같은 메모리 공간을 공유하면서 병렬로 작업을 수행할 수 있다. 크롬 탭을 여러개 열어두는 상황이라 가정하면, 각 탭은 독립적인 쓰레드로 구현될 수 있다.

프로세스 컨텍스트 스위칭

프로세스 간의 컨텍스트 스위칭은 운영체제의 멀티태스킹 기능을 통해 여러 프로그램을 동시에 실행하는 것 처럼 보이도록 한다.
하지만 CPU는 실제로는 한번에 하나의 프로세스만 처리할 수 있으므로, 일정 주기로 빠르게 전환하며 여러 프로세스가 번갈아가며 실행된다.

프로세스 컨텍스트 스위칭 단계

1. 현제 프로세스 상태 저장

현재 실행중인 프로세스의 모든 CPU 레지스터와 메모리 관련 정보가 저장된다. 이 정보는 PCB에 저장되며, 프로세스의 모든 중요한 상태를 보관하는 데이터 구조.

2. CPU 스케줄러 작동

CPU 스케줄러가 다음에 실행할 프로세스를 선택한다. 이 과정에서 우선순위 기반 알고리즘이나 라운드 로빈같은 스케줄링 알고리즘 사용. 스케줄러는 준비 상태의 프로세스 중에서

3. 새로운 프로세스 상태 복원

PCB와 컨텍스트 스위칭 단계

컨텍스트 스위칭이 발생할 때, 운영체제는 현재 프로세스의 상태를 PCB에 저장하고 다음 프로세스의 PCB에서 상태를 불러와 CPU에 할당한다.
이 과정을 통해 프로세스는 마치 중단된 지점에서 다시 실행되는 것처럼 이어질 수 있다.
PCB는 각각 프로세스에 대해 고유하게 존재하며, PCB간 전환이 정확하게 이루어져야 프로세스의 실행이 연속적이고 안정적으로 유지될 수 있다.

PCB에는 다음과 같은 주요 정보가 포함된다.

1.프로세스 ID: 프로세스 식별용 고유 ID
2. 프로세스 상태: 프로세스가 실행중인지 준비상태인지 대기 상태인지 등 현재 상태를 나타냄
3. 레지스터 상태: CPU 레지스터의 값들. 현재 명령을 수행하는데 필요한 데이터 저장. 레지스터 값은 컨텍스트 스위칭 시 저장되었다가 나중에 복원됨
4. 프로그램 카운터: 다음에 실행될 명령의 주소를 가치키며, 프로세스가 중단된 위치를 기록
5. 메모리 관리 정보:
6. I/O 상태 정보:
7. 스케줄링 정보:

프로세스 컨텍스트 스위칭의 오버헤드

프로세스 간 전환에는 오버헤드가 발생한다. 프로세스는 독립된 메모리 공간을 사용하므로, 각 프로세스의 메모리 페이지 테이블을 전환하는 과정도 필요하며 시간적 비용이 발생하게 된다. 또한, 캐시된 데이터가 새로운 프로세스로 전환되면서 자주 초기화되기 때문에 캐시 미스가 발생할 가능성도 높다.

쓰레드 컨텍스트 스위칭

같은 프로세스 내에서 공유자원(메모리, 파일 등)을 사용하기 때문에, 쓰레드 간 컨텍스트 스위칭은 프로세스 간 컨텍스트 스위칭보다는 비용이 낮다. 쓰레드간 컨텍스트 스위칭에서는 메모리 주소 공간 전환이 필요하지 않기 때문.

쓰레드 컨텍스트 스위칭 단계

프로세스 컨텍스트 스위칭과 비슷하지만 좀더 효율적이다.

1. 쓰레드 상태 저장

현재 쓰레드의 레지스터 값과 스택 포인터가 저장됨. 이 값은 TCB에 저장.

2. 스케줄러 작동

스케줄러가 프로세스 내에서 다음에 실행할 쓰레드 선택. 스케줄링은 프로세스 내부의 여러 쓰레드 간에 적용될 수 있다.

3. 새로운 쓰레드 상태 복원

선택된 쓰레드의 상태를 복원하여 중단된 지점에서 다시 시작할 수 있게 한다.

데드락 예방 방법 - 4가지 조건 중 한개라도 제거하면 발생 안함

그러나 부작용이 있다. 자원 낭비나 기아 현상 등의 문제가 있음. 예방만 이 아니라 회피도 있음.

데드락 회피 기법

  • 뱅커스 알고리즘 :
    프로세스는 3개로 고정. 이 상태는 안전한가? 시뮬레이션을 돌리는 것. 안전하면 실행, 아니면 보류.
    -> 항상 시스템의 상태를 감시하여 오버헤드가 높음.
    ->

DBMS의 데드락 회피
wound-wait
타임스탬프 이용
자신보다 우선순위가 낮은 (타임스탬프가 작은) 트랜잭션 종료
종료된 트랜잭션은

데드락 탐지

  • 자원 할당 그래프(RAG) 에서 간선을 하나씩 제거해본다.

데드락 복구 작업

  • 프로세스 종료
    교착 상태를 형성한 프로세스들 중 몇 개를 강제종료
    -자원 선점
    필요한 자원을 갖고있는 프로세스부터 강제로 뺏기
    -> 교착상태와는 전혀 상관이 없는 프로세스의 자원도 뺏어올 수 있다!

profile
갑자기 왜 춤춰?

0개의 댓글