본문 바로가기

CS/Computer Science

프로세스/스레드 메모리 구조 및 동기화 정리

  • 애플리케이션 : 일반 사용자가 사용할 기능을 제공하는 컴퓨터가 실행할 수 있는 명령어들의 집합
  • 메모리 : 실행 될 애플리케이션이 상주할 공간
  • CPU: 메모리를 실행하는 주체
  • 메모리 구조
    • 애플리케이션에 할당되는 메모리는 내부적으로 여러영역으로 나뉨
    • 그 중 stack메모리 heap 메모리가 있음
    • stack 메모리: 함수나 메서드의 지역변수(local variable)와 매개변수(parameter)가 저장됨 함수나 메서드가 호출 될때 마다 스택 프레임(stack frame)이 쌓임
    • heap 메모리: 객체가 저장됨(java)
  • race condigiton(경쟁상태)
    • 여러 프로세스/스레드가 동시에 같은 데이터를 조작할때 타이밍이나 조작 순서에 따라 결과가 달라 질수 있는 상황
  • 동기화(synchronization)
    • 여러 프로세스/스레드를 종시에 실행해도 공유 데이터의 일관성을 유지
  • 임계 영역(critical section)
    • 공유 데이터의 일관성을 보장하기 위해 하나의 프로세스/스레드만 접근(mutal exclusion) 실행 가능한 영역
  • 동기화를 관리하기 위해 락(lock) 사용
  • lock을 관리하는 Test and Set은 CPU atomic 명령어
    • 실행 중간에 간섭 받거나 중단 되지 않는다
    • 같은 메모리 영역에 대해 동시에 실행 되지 않는다
  • 스핀락(spin lock)
    • 락을 가질 수 있을 때까지 반복해서 시도 -> 기다리는 동안 CPU 낭비 발생
  • 뮤텍스(mutex)
    • 락을 가질수 있을 때까지 휴식
  • 멀티코어 환경인 경우, critical section 에서의 작동이 컨텍스트 스위칭 발생보다 더 빨리 끝나면 스핀락이 뮤텍스보다 더 이점이 있다.
  • 세마포어(sema phore)
    • signal mechanism을 가진, 하나이상의 프로세스/스레드가 critical section에 접근 가능하도록 하는 장치
  • 뮤텍스는 락을 가져야만 락을 해제 할수 있지만 세마포어는 그렇지 않다.
  • 뮤텍스는 priority inheritance 속성을 가진다 그러나 세마포어는 그렇지 않다.
  • 상호 배제만 필요하다면 뮤텍스로 작업간의 실행 순서 동기화가 필요하다면 세마포어를 권장.