본문 바로가기
리눅스/일반 운영체제론

동기화[1] - 개념

by [Akashic Records] 개발의선지자 2024. 8. 7.

※ 해당 글은 개인 공부 기록을 남겨놓는 것이 목적임으로 오류가 발생할수 있습니다.

    오류 또는 업데이트된 사항이 있다면 댓글로 알려주시면 감사하겠습니다.

개념 정리

: 프로그램은 저장 장치에 저장되어 있는, 실행 가능한 코드의 정적인 집합입니다. 프로그램은 디스크와 같은 비휘발성 메모리에 저장되며, 사용자가 요청할 때까지 실행되지 않습니다. 프로그램은 소프트웨어 개발자에 의해 작성되고, 컴퓨터에서 실행될 수 있는 명령어들과 데이터를 포함

프로세스(Process) 

: 컴퓨터 내에서 실행 중인 프로그램의 요소

프로세스는 1. 프로세스명과 프로세스 아이디(PID)로 나타낸다.

프로세스는 프로그램 카운터, 스택, 데이터 섹션 등 실행에 필요한 다양한 정보를 포함하며, 운영체제가 관리한다.

프로세스가 실행 중 자신에게 종속적인 프로세스를 둘수 있다. 원래 프로세스를  부모 프로세스(parent), 

종속적인 프로세스를 자신 프로세스(child)라고 한다. 

 

쓰레드(Thread)

: 프로세스(process) 내에서 실제로 작업을 수행하는 실행 흐름

모든 프로세스에는 동시에 실행되는 여러개의 흐름(스레드)가 존재하여 작업을 수행합니다.

스레드는 이러한 프로세스 내에서 독립적인 실행 경로를 형성하며, 각각 별도의 프로그램 카운터, 레지스터 세트 및 스택을 가진다. 하지만 같은 프로세스내의 스레드들은 "코드, 데이터, 힙, 열린파일, 프로세스 상태"와 같은 자원을 공유합니다.

두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 합니다.

 

 

스케쥴링(Scheduling)

다중 프로그래밍을 가능하게 하는 운영 체제의 동작 기법.  멀티태스킹 환경에서 CPU 자원을 공정하고 효율적으로 사용할 수 있도록 관리하는 과정이다. 시스템의 성능을 최적화하여 이를 통해 실행 순서를 결정하고 CPU 시간을 할당한다.

스케줄링은 "스케줄러"라는 소프트웨어가 해당 기법을 컨트롤 한다.

 

프로세스 스케줄링  알고리즘

얼마나 자주 스케줄링이 동작하는지에 따라  

  • 장기 스케줄러(작업 스케줄러)
  • 중기 스케줄러(스와핑)
  • 단기 스케줄러(디스패치)

 

다른 프로세스가 작업 중일 때 CPU 점유 가능 여부에 따라

  • 비선점형 스케줄링  : 하나의 프로세스가 CPU를 할당 받으면, 작업 종료 후 CPU 반환 시까지 다른 프로세스가 CPU를 점유할 수 없는 스케줄링 방식
  • 선점형 스케줄링 : 하나의 프로세스(쓰레드)가 CPU를 차지하고 있을 때, 우선 순위가 높은 다른 프로세스 (쓰레드)가 현재 프로세스 (쓰레드)를 중단시키고 CPU를 점유하는 방식

 

쓰레드 스케줄링 알고리즘

  • 라운드 로빈 알고리즘 
  • 우선순위 기반 알고리즘
  • 최소남은시간 우선 알고리즘  

 

동기화

프로세스 또는 쓰레드의 실행순서를 제어하고 동시에 접근할 수 없는 자원에 하나의 프로세스 또는 쓰레드만 접근 가능하도록 하여 데이터의 일관성을 유지하는 것.

 

동기화 필요한 대표적인 경우

  1. 동일한 메모리 영역으로의 동시접근이 발생
  2. 동일한 메모리 영역에 접근하는 쓰레드의 실행 순서를 지정

임계 구역(Critical Section)

 

서로 다른 두 프로세스, 혹은 스레드 등의 처리 단위가 같이 접근해서는 안 되는 공유 영역을 뜻한다.

보호되지 않는 임계 구역에 두 처리 단위가 동시에 접근할 때 발생하는 문제를 '임계 구역 문제'라고 한다

 

동기화 문제

  • Race Condition(경쟁 조건) : 멀티 프로세스 또는 멀티 스레드 환경에서 두 개 이상의 프로세스 또는 쓰레드가 공유 자원에 동시에 접근하여고 할 때 , 프로세스 또는 쓰레드들 사이의 실행순서에 따라 공유 자원의 최종상태가 달라질수 다. 이는 예측 불가능한 결과나 시스템의 오류를 가져올 수 있다.  
    • Critical Condition(임계 영역) : 경쟁조건을 발생시키는 코드 영역
  • Starvation(기아상태) : 특정 프로세스 또는 쓰레드들에게 우선 순위가 부여될 때, 우선순위가 낮아서 원하는 자원을 영원히 할당 받지 못하는 상태
  • Deadlock(교착상태) : 멀티 프로세스 또는 멀티 스레드 환경에서 대기중인 두개 이상의 프로세스 또는 쓰레드가 서로의 작업이 완료 되기를 기다리는 상태
  • Livelock(라이브락) : 쓰레드들이 동시에 실행 되면서 락의 해제와 획득을 반복적으로 실행하지만, 아무 자원도 획득 하지 못하고 무한 동작중인 상태  
  • Spinlock(스핀 락) :  임계 구역(critical section)에 진입이 불가능할 때 진입이 가능할 때까지 루프를 돌면서 재시도하는 는 상태