기술면접 - 운영체제

개나뇽·2025년 1월 7일

기술면접

목록 보기
4/8
post-thumbnail

프로세스와 스레드 차이

프로세스

  • 메모리에 로드되어 실행되고 있는 프로그램의 인스턴스
  • OS에게 독립된 메모리 영역을 할당 받음(다른 프로세스 자원에 접근 불가)
  • 프로세스는 최소 1개의 메인 스레드를 가짐

스레드

  • 프로세스에게 할당 받은 메모리로 동작하는 실행 단위
  • 스레드는 프로세스에게 Stack영역을 할당 받고 Code, Data, Heap영역은 공유
  • 프로세의 자원을 공유해 다른 스레드에 의한 결과를 즉시 확인 가능
  • 프로세스 내에 존재하며 프로세스가 할당받은 자원으로 실행

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

멀티 프로세스

  • 하나의 프로그램을 여러 프로세스로 구성해 각 프로세스가 1개의 작업을 처리
  • 1개의 프로세스가 죽어도 자식 프로세스 이외의 다른 프로세스들은 계속 실행
  • Context Switching을 위한 오버헤드(캐시 초기화, 인터럽트 등) 발생
  • 프로세스는 독립적인 메모리을 할당 받기에 통신이 어려움

멀티 스레드

  • 하나의 프로그램을 여러 스레드로 구성해 각 스레드가 1개의 작업을 처리
  • 프로세스를 위해 자원을 할당하는 시스템콜이나 Context Switching의 오버헤드를 줄임
  • 스레드는 메모리 공유로 통신이 용이하고, 효율적인 자원 사용 가능
  • 하나의 스레드에 문제가 생기면 전체 프로세스에 영향
  • 여러 스레드가 하나의 자원에 동시 접근시 자원 공유 문제(동기화) 발생

레이스 컨디션으로 인한 문제

  • 여러 실행 주체가 하나의 자원에 동시 접근시 경쟁하는 상태(레이스 컨디션)
  • 자원 동기화 문제로 교착 상태(데드락), 프로세스 충돌 등의 문제 발생

데드락과 임계 영역

데드락

  • 한정된 자원을 여러 프로세스가 사용하고자 할 때 발생하는 상황
  • 프로세스가 자원을 얻기 위해 무한 대기하는 상태

임계 영역

  • 여러 실행 주체가 동시에 접근해서 안되는 영역
  • 동시 접근으로 데드락 발생 등의 문제를 예방하기 위해 뮤텍스나 세마포어 등 사용

멀티 스레드 프로그래밍 유의점

  • 다수의 스레드가 공유 데이터에 동시 접근시 상호 배제를 제거해 교착 상태를 예방
  • 동기화 기법을 통해 동시성 문제 예방

세마포어와 뮤텍스 차이

세마포어

  • 리소스에 동시 접근 허용이 가능한 스레드의 수를 제어하는데 사용
  • 소유 권한이 없어 LOCK을 획득하지 않은 스레드도 signal 연산으로 LOCK 해제 가능
  • 초기 값 설정이 가능하며, 해당 값은 허용 가능한 동시 엑세스 수를 나타냄

뮤텍스

  • 임계 영역을 보호해 데이터 무결성 보장
  • 소유 권한을 가져, LOCK을 획득한 스레드만 LOCK 해제 가능
  • 주로 이진 세마포어로 초기화되며, 두 가지 상태(잠금 상태, 잠금 해제 상태)만 가짐
  • lock과 unlock 연산을 통해 제어

Context Switching

  • OS가 하나의 프로세스 또는 스레드에서 다른 프로세스나 스레드로 전환하는 과정

과정

  1. 현 프로세스 저장
  2. 새 프로세스 로드
  3. 프로세스 실행

문제점

  • 오버헤드 : 스위칭시 시간과 자원이 소모
  • 데이터 일관성 : 프로세스의 상태 저장-복원중 데이터 일관성이 깨질 수 있음
  • 동기화 : 공유 자원 접근 시 경쟁 조건으로 인한 문제 발생 가능

출처

https://mangkyu.tistory.com/92
감사합니다!

profile
정신차려 이 각박한 세상속에서!!!

0개의 댓글