소프트웨어: 가상화의 여행 (4) 멀티 프로그래밍

H/W, OS, Virtual Machine, Container 부터 Cloud 까지(4)

SoniaComp
8 min readMay 6, 2021

🤔 이 글의 출발점

모든 S/W 는 세단계로 정의할 수 있습니다. Input 값과 Output 값, 그리고 Input 값을 원하는 Output 값으로 만들기 위한 알고리즘으로요!

이런식으로 여러 IT 기술들의 철학, 구성이 하나의 청사진(Blue Print)으로 수렴하는 경우가 많은 것 같습니다. 소프트웨어 시리즈 글은 컴퓨터를 공부하는 분들과 이런 인사이트를 공유하며 함께 생각해보고 싶어 작성했습니다. 그럼 이번 글도 고고띵~
(수정이 필요한 부분은 꼭 알려주시면 감사하겠습니다! 😊)

목차

[멀티프로그래밍]
- 멀티프로세스와 멀티스레드
[스케줄링]
- Criteria
- 스케줄러
- 스케줄링 알고리즘
- 멀티코어 Design Issue
[공유자원 제어]
- Race Condition
1. 공유자원 접근(Critical Section)
2. 동시성 제어
3. 동시성 제어로 인해 생길 수 있는 문제: 데드락
4. 데드락 을 처리하는 방법
[멀티컴포넌트 오케스트레이션(클라우드)]
- ROA
- 오케스트레이션

멀티프로그래밍

멀티프로세스와 멀티스레드

  • 멀티 프로세스
    😊 프로세스끼리 독립적으로 수행
    ❗️멀티스레드보다 많은 메모리 공간과 CPU 시간을 차지함
  • 멀티 스레드
    😊 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠름
    ❗️오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있음 & 동기화 문제(공유자원에 대한 동기화를 통해 작업 처리 순서를 컨트롤 하고 공유 자원에 대한 접근을 컨트롤 해야 한다 → 병목현상 주의)

스케줄링

시스템의 자원을 프로세스, 스레드에게 어떻게 할당할 것인지를 관리

Criteria

  • System Criteria: CPU Utilization & throughput(단위시간당 몇개의 job을 끝낼 수 있는지)
  • User Criteria: ResponseTime(turn-around time) (중요! 특히 PC에서는)

스케줄러

  • Long-term scheduler: 메모리와 디스크 사이의 스케줄링을 담당 (메인 메모리에 있는 프로세스의 양을 판단하고 멀티 프로그래밍의 정도를 결정)
    [ 프로세스의 상태: new → ready(in memory) ]
  • Mid-term scheduler: 메모리에 너무 많은 프로그램이 동시에 올라가는 것을 조절. Swapping 기법(프로세스를 메모리에서 디스크로 통째로 쫓아냄)을 사용해 프로세스 조절
    [프로세스의 상태: ready → suspended ]
  • Short-term scheduler: CPU 와 메모리 사이의 스케줄링을 담당. (메인 메모리의 준비 상태에 있는 작업 중 실행할 작업을 선택하여 CPU를 할당. 프로세서 스케줄러)
    → CPU에게 그 필요한 데이터를 확보 시켜주고 CPU를 할당
    → 디스패처 역할: 준비큐에 있는 첫번째 프로세스에게 CPU 할당
    [ 프로세스 상태: ready → running → waiting → ready ]

스케줄링 알고리즘

주의! Starvation 방지

  1. FIFO(First In First Out)
    Non-Preemptive
    ❗️소요시간이 긴 프로세스가 먼저 도달하여 효율성을 낮추는 현상(convoy effect)
  2. SJF(Shortest Job First)
    Non-Preemptive
    ❗️Starvation
  3. SRT(Shortest Remaining time First)
    Preemptive(새로운 프로세스가 도착할 때마다 새로운 스케줄링을 함)
    현재 수행중인 프로세스의 남은 burst time 보다 더 짧은 CPU burst time 을 가지는 새로운 프로세스가 도착하면 CPU 를 뺏긴다
    ❗️Starvation
  4. Priority Scheduling
    Preemptive or Non-Preemptive
    ❗️Starvation, Indefinite blocking → Aging (오래 기다리면 Priority ↑)
  5. Round Robin
    각 프로세스는 동일한 크기의 할당 시간(time quantum)을 갖게 된다.
    할당 시간이 지나면 프로세스는 선점 당하고 ready queue 의 제일 뒤로 감
    ❗️적당한 time quantum을 설정하는 것이 중요
    → time quantum이 너무 커지면 FIFO와 같아짐
    → time quantum이 너무 작아지면 잦은 context switch 로 overhead

멀티 코어 Design Issue

  1. Assigned of processes to processors
  2. The use of multiprogramming on individual processors
  3. Process dispatching — The actual selection of a process to run

공유자원 제어

Race Condition

공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태 (동시 접근 시 자료의 일관성을 해치는 결과가 나타남)

  1. 커널 작업을 수행하는 중 인터럽트 발생
    → 커널모드에서 작업을 수행하는 동안, 인터럽트를 disable
  2. 프로세스가 ‘System Call’을 하여 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환이 발생할 때
    → 프로세스가 커널모드에서 작업을 하는 경우 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 함
  3. 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근
    → 커널 내부에 있는 각 공유 데이터에 접근할 때마다, 그 데이터에 대한 lock/unlock을 하는 방법

1. 공유자원 접근(Critical Section)

[ Critical Section 이 만족해야 하는 조건]

  1. Mutual Exclusion: 이미 작업중인 임계영역에 다른 프로세스 접근 못함
  2. 진행: 여러개의 프로세스가 진입할 때, 하나의 프로세스만 허용
  3. 한정대기: 다른 프로세스가 임계 영역을 무한정 기다리는 상황을 방지하려면 임계 영역에 한 번 들어갔던 프로세스는 다음에 임계 영역에 다시 들어갈 때 제한을 둠

2. 동시성 제어

  • 세마포어 : 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법
    → P : 임계 구역 들어가기 전에 수행(자원의 개수(S)를 통해 결정)
    → V: 임계 구역에서 나올 때 수행(대기중인 프로세스 깨움)
  • 뮤텍스 : 임계 구역을 가진 스레드들의 실행시간이 서로 겹치지 않고 각각 단독으로 실행되게 하는 기술
    → lock : 현재 임계 구역에 들어갈 권한을 얻어옴
    → unlock : 현재 임계 구역을 모두 사용했음을 알림

3. 동시성 제어로 인해 생길 수 있는 문제: 데드락

[ 데드락 발생 조건 ]

  1. 상호배제(Mutual Exclusion)
  2. 점유와 대기(Hold and Wait)
  3. 비선점(Non-preemption)
  4. 환형 대기(Circular Wiat)

4. 데드락 을 처리하는 방법

[ Deadlock Prevention ] → 예시) 식사하는 철학자 문제

  • Hold and Wait Prevention: 필요한 자원이 모두 free 상태일때만 hold
    → 왼쪽 포크를 잡을 수 없을 때, 오른쪽 포크를 식탁 위에 내려놓음
  • No preemption: 모든 자원을 preemption. 선점으로 자원을 뺏는 방법은 CPU register나 메모리 공간만 적합한 방법이므로 범용적으로 사용되기는 어렵다.
    → 옆 사람의 포크를 뺏음
  • Circular Wait
    1) 자원에 번호를 매긴다.
    2) 해당 자원이 해지되기 전까지는 해당 자원보다 높은 번호만 요청가능
    → 포크에 우선순위를 매기는 방법

[ Deadlock Avoidance ]
resource request를 허용할건지, 안할건지 결정

  1. Process initiation denial: No process can claim more than toal amount of resources.
  2. Resource Allocation denial: 시스템의 state가 safe 한지 unsafe(데드락에 빠질 수 있는 상태) 한지 체크
    → 뱅커스 알고리즘: 은행은 최소한 한 명에게 대출해줄 수 있는 돈을 가지고 있어야 한다. (운영체제가 최소한 하나의 프로세스가 일을 수행할 수 있는 경우에만 요청을 허락하여 시스템의 자원을 할당해줌)

[ Deadlock Detection ]
Recovery from Deadlock
1) Process Termination: 교착상태에 빠지 모든 프로세스 종료
2) Resource Preemption: 여러 알고리즘에 의해 특정 프로세스의 자원 뺏음

멀티 컴포넌트 오케스트레이션 (클라우드)

ROA(Resource Oriented Architecture)

기존에 Action에 해당하는 API를 중심으로 처리하던 방식
→ 리소스의 그룹을 중심으로 처리하는 방식으로의 패러다임의 전환

오케스트레이션

  • 리소스들의 관계를 정의하고 구성을 자동화함
  • 사람의 판단과 수작업을 덜어줌

--

--

SoniaComp

Data Engineer interested in Data Infrastructure Powering Fintech Innovation (https://www.linkedin.com/in/sonia-comp/)