Blog
Anki
운영체제

Mutex Lock과 Semaphore의 차이에 대해서 설명하고 어느 상황에 쓰는게 적절한지 설명해주세요

답 보기
  • 🔒 Mutex Lock vs Semaphore 비교
구분Mutex LockSemaphore
목적상호 배제 (Mutual Exclusion)리소스 접근 제어 및 동기화
값 범위0 또는 1 (Binary)0 이상의 정수 (Counting)
소유권락을 획득한 스레드만 해제 가능소유권 개념 없음 (다른 스레드가 signal 가능)
구현 방식주로 Spin Lock 사용Block Queue 또는 Spinlock 활용
Context Switching발생하지 않음 (Busy Waiting)발생함 (Blocked Queue 사용 시)
  • 📋 Semaphore의 두 가지 유형
유형설명사용 예시
Counting Semaphore정수 값을 0 이상으로 가지며, 동시에 접근 가능한 리소스의 개수를 의미프린터 3대 → 초기값 3
Binary Semaphore0 또는 1의 값을 가지며, Mutex와 유사하게 동작단일 리소스 보호
  • 🎯 적절한 사용 상황

    • Mutex Lock을 사용해야 하는 경우:

      • Critical Section이 매우 짧은 경우 (마이크로초 단위)
      • Context Switching 비용을 피하고 싶은 경우
      • 단순한 상호 배제만 필요한 경우
      • 실시간 시스템에서 예측 가능한 성능이 필요한 경우
    • Semaphore를 사용해야 하는 경우:

      • 여러 개의 동일한 리소스를 관리해야 하는 경우 (데이터베이스 커넥션 풀, 프린터 등)
      • Critical Section이 긴 경우 (밀리초 이상)
      • CPU 사용률을 효율적으로 관리하고 싶은 경우 (Blocked Queue 사용)
      • Producer-Consumer 패턴 구현 시
      • 스레드 간 동기화 신호가 필요한 경우
  • ⚡ 성능 고려사항

    • Critical Section 길이에 따른 선택:

      • 짧은 CS: Mutex (Spin Lock) > Semaphore
        • Context Switching 비용이 더 클 수 있음
      • 긴 CS: Semaphore (Block Queue) > Mutex
        • CPU를 점유하지 않아 다른 스레드가 작업 가능
    • 구현 시 고려사항:

      • OS 레벨에서는 block queue 또는 spinlock을 활용해 구현
      • 스레드가 리소스를 기다릴 때, ready queue가 아닌 blocked queue에 들어감
      • Context Switching은 운영체제 스케줄러가 결정함 (Semaphore 자체 기능이 아님)

DMA(Direct Memory Access)란 무엇인가요?

꼬리 질문
  • DMA가 등장하게 된 배경과 해결하려는 문제는 무엇인가요?
  • Cycle Stealing이란 무엇이고 왜 필요한가요?
  • 입출력 처리 방식의 4가지 종류를 성능 순으로 설명해주세요.
  • DMA Controller(DMAC)의 역할과 CPU와의 관계를 설명해주세요.
  • 네트워킹에서 DMA가 어떻게 활용되는지 설명해주세요.
답변 보기

DMA의 정의와 핵심 개념

  • DMA(Direct Memory Access)는 CPU의 개입 없이 주변장치와 주기억장치 간에 직접 데이터를 전송하는 기법 ⚡
  • CPU를 대신하여 I/O장치와 Memory 사이의 데이터 전송을 담당하는 전용 하드웨어 장치
  • 시스템 버스를 통해 메모리에 직접 접근하여 데이터 이동 처리

DMA의 주요 특징

  • CPU는 데이터 전송 과정에서 완전히 배제되고 다른 작업 수행 가능 🚀
  • 상태정보와 제어정보만 CPU와 교환하며 실제 데이터는 직접 전송
  • 인터럽트 발생 횟수를 최소화하여 시스템 효율성 극대화
  • 속도가 빠른 디스크, 테이프, 네트워크 카드 등에서 주로 사용
  • 전송 완료 시에만 CPU에게 인터럽트 신호 전송

시스템 버스 사용권 관리

  • DMA는 Cycle Stealing을 통해 CPU로부터 시스템 버스 사용권을 일시적으로 획득
  • 시스템 버스에 대한 우선순위: DMA > CPU
  • DMA Controller와 CPU가 시스템 버스를 공유하며 협력적으로 동작

꼬리질문: DMA가 등장하게 된 배경과 해결하려는 문제는 무엇인가요?

기존 방식의 문제점

  • 프로그램에 의한 I/O: CPU가 입출력 완료까지 대기하며 자원 낭비 발생 😴
  • 인터럽트 방식: 데이터 전송마다 CPU 개입 필요로 빈번한 Context Switching 발생
  • 고속 저장장치와 네트워크 환경에서 CPU 부하 급증

DMA의 해결책

  • CPU를 데이터 전송 과정에서 완전히 해방시켜 연산 작업에 집중 가능
  • 대용량 데이터 전송 시 성능 향상 효과 극대화
  • 멀티태스킹 환경에서 시스템 전체 처리량 향상

꼬리질문: Cycle Stealing이란 무엇이고 왜 필요한가요?

Cycle Stealing의 개념

  • DMA가 메모리 접근을 위해 CPU로부터 시스템 버스 사용권을 일시적으로 "훔치는" 기법 🔄
  • CPU의 메모리 접근 사이클 중 사용하지 않는 틈을 활용
  • DMA가 CPU보다 높은 우선순위를 가져 필요 시 즉시 버스 사용권 획득

필요한 이유

  • 시스템 버스는 한 번에 하나의 장치만 사용 가능한 공유 자원
  • 실시간 데이터 전송을 위해 DMA에게 우선권 부여 필요
  • CPU는 캐시 메모리를 주로 사용하므로 버스 사용 빈도가 상대적으로 낮음

꼬리질문: 입출력 처리 방식의 4가지 종류를 성능 순으로 설명해주세요.

1위: 채널에 의한 I/O 🥇

  • DMA 개념을 확장한 입출력 전용 처리장치
  • CPU처럼 독자적으로 명령어 처리 능력 보유
  • CPU 개입 없이 완전 자율적 입출력 처리

2위: 메모리 직접 접근 I/O (DMA) 🥈

  • CPU는 전송 시작과 끝에만 관여
  • 한 번에 전체 데이터 블록 직접 전송
  • 전송 완료 시에만 인터럽트 발생

3위: 인터럽트 처리에 의한 I/O 🥉

  • 데이터마다 Context Switching 발생
  • CPU가 다른 작업 수행 가능하지만 빈번한 인터럽트 처리 필요
  • 프로그램 방식보다는 효율적

4위: 프로그램에 의한 I/O

  • CPU가 입출력 완료까지 폴링하며 대기
  • 가장 단순하지만 CPU 자원 낭비 심각
  • 현대 시스템에서는 거의 사용되지 않음

꼬리질문: DMA Controller(DMAC)의 역할과 CPU와의 관계를 설명해주세요.DMAC의 핵심 역할

  • CPU로부터 전송 명령과 제어 정보를 받아 실제 데이터 전송 수행 🎛️
  • 메모리 주소 관리, 전송 카운트 추적, 버스 중재 기능 담당
  • 에러 검출 및 처리, 전송 완료 알림 기능

CPU와의 협력 관계

  • CPU의 역할: DMAC 초기화, 전송 시작 명령, 완료 인터럽트 처리
  • DMAC의 역할: 실제 데이터 이동, 주소 증가, 전송량 관리
  • 분업 체계: CPU는 고수준 제어, DMAC는 저수준 데이터 이동 담당
  • 동시 작업: CPU는 연산 작업, DMAC는 I/O 작업 병렬 수행

꼬리질문: 네트워킹에서 DMA가 어떻게 활용되는지 설명해주세요.네트워크 카드에서의 DMA 활용

  • 패킷 수신: NIC가 DMA를 통해 수신 패킷을 직접 메모리의 링 버퍼에 기록 📨
  • 패킷 전송: sk_buff 데이터를 DMA로 NIC의 전송 버퍼에 직접 복사
  • CPU 부하 감소: 고속 네트워크에서 CPU가 패킷 복사 작업에서 해방

고성능 네트워킹 구현

  • 링 버퍼 구조: 송수신 버퍼를 링 형태로 구성하여 효율적 메모리 사용
  • 배치 처리: 여러 패킷을 한 번에 처리하여 인터럽트 횟수 최소화
  • NAPI 연동: 폴링 방식과 결합하여 대용량 트래픽 처리 최적화 ⚡
  • Zero-Copy: 사용자 공간에서 네트워크까지 불필요한 복사 작업 제거