[운영체제] 4주차 스터디

톰톰·2023년 10월 6일
0

질문

  1. 병행성(동시성, Concurrency)에대해 설명해주세요.

    프로세스가 동시에 실행되는 것처럼 보이는 것을 말한다.

    • 단일 CPU 환경
      • 여러 프로세스가 time-sharing을 통해 일정 시간씩 CPU를 번갈아 사용한다.
      • CPU가 돌아가는 빈도는 초당 약 10억 회
        • 여러 프로그램이 짧은 시간(0.1초 이내로) 동안 CPU를 번갈아 사용하므로, 사용자 입장에서는 여러 프로그램들이 동시에 실행되는 것처럼 느낄 수 있도록 한다.
  1. 병렬성(Parellelism)에 대해 설명해주세요.

    MultiProcessor 환경에서 여러 프로세스가 서로 다른 CPU에서 동시에 실행되는 것을 말한다.

    • 다중 CPU 환경
  1. 프로세스 동기화에 대해 설명해 주세요.
    • 여러 프로세스가 공유 데이터를 동시 접근할 때 데이터의 불일치 문제를 발생시킬 수 있다. (Race Condition)
      • 프로세스의 데이터 공유 상황
        • 멀티 프로세서 환경에서 각 CPU가 같은 프로세스의 메모리 영역에 접근하는 경우
        • 프로세스들이 협력 매커니즘을 통해 메모리 일부를 공유하는 상황에서 공유 메모리 영역에 접근하는 경우
        • 커널모드에서 커널 메모리 영역에 접근하는 경우
    • 데이터 일관성을 유지하기 위해 프로세스들의 작업 순서를 정해주는 매커니즘이 필요한데 이것을 프로세스 동기화라 한다. (Process Synchronization)
  1. Critical Section(임계영역)에 대해 설명해주세요.

    프로세스가 공유 데이터 영역에 접근하는 코드를 말한다.

    • 여러 프로세스가 공유 데이터를 동시에 사용하기를 원하는 상황에서
    • 하나의 프로세스가 임계영역에 진입해 있다면 다른 모든 프로세스는 해당 영역에 접근할 수 없어야 한다.
      • 그러한 매커니즘을 프로세스 동기화라고 한다.
      • 소프트웨어적으로 직접 구현하는 방법, Semaphores를 이용하는 방법, Monitor를 이용하는 방법 등을 통해 동기화 문제를 해결한다.
  1. Race Condition이 무엇인가요?

    여러 프로세스들이 동시에 공유 데이터를 접근하는 상황에서

    데이터의 최종 연산 결과가 프로세스의 접근 순서 등에 의해 달라질 수 있는 상태를 말한다.

    • 예를 들어 변수 X에 1을 더해서 다시 X에 저장하는 고급 언어 코드가 있다고 해보자.
      • 우리 눈에 보이는 코드 자체는 X = X + 1 한 줄이지만
      • 기계어로 수행하기 위해서는 3단계를 거쳐야 한다.
        • X를 메모리에서 load 수행
        • X 값에 1을 더하는 연산 수행
        • 변수 X에 연산 결과 저장 수행
      • 변수 X가 프로세스1과 프로세스2가 공유하는 데이터라면
        • 프로세스1이 CPU를 잡아서 X를 메모리에서 load한 직후
        • 프로세스2에게 CPU가 넘어가서 프로세스2가 해당 연산을 먼저 수행할 수 있는데
        • 프로세스1이 다시 CPU를 잡으면 이전에 수행한 기계어 다음부터 수행하기 때문에 프로세스2에 의해 변경된 내역은 결과값에 반영되지 않게 된다.
    • 프로세스의 데이터 공유 상황
      • 멀티 프로세서 환경에서 각 CPU가 같은 프로세스의 메모리 영역에 접근하는 경우
      • 프로세스들이 협력 매커니즘을 통해 메모리 일부를 공유하는 상황에서 공유 메모리 영역에 접근하는 경우
      • 커널모드에서 커널 메모리 영역에 접근하는 경우
  1. Race Condition을 어떻게 해결할 수 있나요?

    공유 데이터에 접근하는 프로세스들을 동기화하여 해결할 수 있다.

    프로세스 동기화 방법에는 3가지 정도를 들 수 있다.

    • 프로그래머가 직접 소프트웨어적으로 동기화 코드를 구현해서 해결하는 방법
    • 세마포어를 이용하여 해결하는 방법
    • 모니터를 이용하여 해결하는 방법
  1. Mutual Exclusion에 대해 설명해주세요.

    상호 배제를 의미한다.

    • 프로세스1이 임계 영역을 수행 중이면 다른 모든 프로세스들은 해당 영역에 들어가면 안된다는 것
    • 프로세스 동기화를 위해서 필요한 요건의 하나
    • 기본적인 연산
      • 임계 영역 진입 전 다른 프로세스가 이미 존재하는 지 검사
        • 있으면 대기
        • 없으면 진입
      • 임계영역 작업 완료 후 후처리
        • 벗어남을 표시
  1. Mutual Exclusion을 할 수 있는 방법은?

    세마포어나 모니터를 이용하여 상호 배제를 구현할 수 있다.

    • 뮤텍스
      • 뮤텍스란 세마포어의 일종이지만, 세마포어 변수 값을 0 또는 1만 가지는 형태
      • 보통 뮤텍스를 이용하여 상호 배제 문제를 해결
      • 정수값을 통해 lock/unlock을 표시하여 프로세스가 동시에 임계영역에 접근할 수 없도록 한다.
    • 세마포어
      • 세마포어 변수 값을 자원의 갯수로 초기화 하여 사용하기도 함
      • 임계영역에 진입할 때마다 변수를 1씩 감소시켜서 여분이 없는 경우 프로세스가 진입할 수 없도록 제어한다.
    • 모니터
      • 모니터 내부에 공유 데이터를 두고, 내부에 정의된 함수를 통해서만 데이터 접근이 가능한 형태
      • 모니터 스스로가 내부에서 active하게 실행되는 프로세스를 하나로 제한하는 역할을 수행한다.
        • 따라서 세마포어를 활용하는 방식처럼 프로그래머가 따로 lock을 걸 필요가 없다.
        • 모니터 내부의 코드를 이용하면 알아서 동기화가 수행된다.
  1. 뮤텍스(Mutex)에 대해 설명해주세요.
    • 뮤텍스란 세마포어의 일종이지만, 세마포어 변수 값을 0 또는 1만 가지는 형태
    • 보통 뮤텍스를 이용하여 상호 배제 문제를 해결
    • 정수값을 통해 lock/unlock을 표시하여 프로세스가 동시에 임계영역에 접근할 수 없도록 한다.
  1. 세마포어에 대해 설명해주세요.

    프로세스를 동기화하기 위한 로직을 추상화시킨 자료형

    • OS, low-level 수준에서 지원 (모니터는 high-level 수준)
    • 정수형의 세마포어 변수가 정의되어 있다.
    • 해당 변수는 P연산과 V연산에 의해서만 이루어지며, 해당 연산은 모두 atomic하게 수행된다.
      • 왜 atomic? synchonization hardware : 하드웨어 자체에서 아토믹한 연산을 지원하는 기능을 사용
    • 세마포어 변수가 0,1만 가지는 경우엔 보통 상호 배제 문제를 해결하기 위해 사용되고, 자원의 갯수로 가지는 경우 자원의 여분을 관리하기 위해 사용됨
    • busy-wait 방식으로 구현된 세마포어, blocked/wakeup 방식으로 구현된 세마포어를 활용할 수 있음
      • busy-wait : P연산 시 자원의 여분이 없으면 while문에서 대기하며 여분이 생길 때까지 의미없는 기계어를 수행.. (CPU 낭비)
      • blocked/wakeup : P연산 시 자원의 여분이 없으면 리스트 형태의 변수에 해당 프로세스를 추가하고 blocked 상태로 만든다. 여분이 생기면 다시 wakeup 해서 임계영역 수행
  1. 뮤텍스(Mutex)와 이진 세마포어의 차이에 대해 설명해주세요.
  1. 모니터에 대해 설명해주세요.

    프로세스를 동기화하기 위한 로직을 구현해놓은 고수준의 구조체

    • high-level 수준에서 지원
    • 공유 데이터가 모니터 내부에 존재하고, 공유 데이터를 접근할 때는 모니터 안에 정의된 함수를 통해서만 접근할 수 있다.
    • 비교
      • 세마포어는 단순히 연산이 원자적으로 수행되는 것을 보장하는 것일 뿐, 프로그래머가 세마포어를 이용해서 동기화를 직접 구현해야 하는 책임이 있다.
      • 반면에 모니터는 스스로가 내부에서 active하게 실행되는 프로세스를 하나로 제한하는 역할을 수행하고, 프로그래머는 모니터의 함수를 호출해서 사용하기만 하면 되기 때문에 훨씬 편리하다.
  1. 데드락이 무엇인가요?
  1. 데드락 발생 조건 4가지를 설명해 주세요.
  1. 데드락 회피 방법은 무엇이 있나요?

회고

  1. 좋았던 점
    실제 개발하면서 동기화와 관련된 문제가 자주 등장하는데, 동기화에 대한 기틀을 튼튼히 할 수 있어서 앞으로 일을 하는데도 도움이 많이 될 것 같다.

  2. 아쉬운 점
    내용이 어려워서 이해하는데 많은 시간이 걸렸다..
    아직도 이해 못한 부분이 많은 데 나중에 시간내서 다시 살펴봐야겠다.

0개의 댓글