Study/TIL(Today I Learned)

24.03.05 퀴즈, 운영체제

에린_1 2024. 3. 5. 23:54
728x90

퀴즈

1. 응용 프로그램을 구현할 때 multiprocess와 multithread 중 하나를 선택하는 기준은 어떤 것이 있는지 몇 가지 제시하세요.

  • 선택 기준
    • 안정성 vs 자원 사용 : 시스템의 안정성이 매우 중요한 경우, 멀티 프로세스가 선호된다. 리소스가 제한적인 환경에서는 멀티쓰레드가 더 효율적일 수 있다.
    • 구현의 복잡성 : 쓰레드는 공유 메모리로 인해 동기화 문제가 복잡해질 수 있으므로, 개발자의 동시성 제어에 대한 이해도가 중요하다.
    • 응답 시간 : 멀티쓰레드는 컨텍스트 스위칭이 빠르기 때문에, 더 빠른 응답 시간을 요구하는 경우 유리할 수 있다.
    • 플랫폼 및 언어 지원 : 사용 중인 프로그래밍 언어나 플랫폼이 멀티쓰레드 또는 멀티 프로세스 중 어느 쪽을 더 잘 지원하는지도 중요한 요소가 될 수 있다.

2. 데드락 해결하기 위한 전략을 두 가지 이상 설명하세요.

  • 데드락 해결 전략
    1. 데드락 예방(Deadlock Prevention)
      • 이 접근법은 데드락 발생을 원천적으로 차단한다. 데드락이 발생하는 네 가지 필수 조건(상호 배제, 점유 대기, 비선점, 순환 대기) 중 적어도 하나를 제거함으로써 데드락을 방지한다.
    2. 데드락 회피(Deadlock Avoidance)
      • 데드락 회피는 시스템이 데드락 상태로 진입하는 것을 회피하는 전략이다. 이를 위해 시스템은 리소스 할당 결정 시 데드락의 가능성을 고려한다. 가장 유명한 예는 뱅커스 알고리즘으로, 이는 프로세스에 리소스를 할당하기 전에 안전 상태를 유지할 수 있는지 확인한다. 만약 할당으로 인해 데드락이 발생할 위험이 있다면, 리소스는 할당되지 않는다.
    3. 데드락 탐지 및 회복(Deadlock Detection and Recovery)
      • 이 전략은 시스템이 데드락을 탐지하고, 이를 해결하기 위한 조치를 취하는 것을 포함한다. 데드락 탐지는 주기적으로 리소스 할당 그래프를 검사하여 순환 대기 조건을 찾는 것으로 이루어질 수 있다. 데드락이 탐지되면, 시스템은 프로세스를 중지하거나 리소스 할당을 롤백하여 데드락을 해결한다.

3. Semaphore와 Mutex의 특징과 주요 차이점은 무엇인가요?

  • Semaphore
    • 세마포어는 공유 자원에 대한 접근을 제한하는 데 사용되며, 이는 특정 숫자로 초기화된다. 이 숫자는 동시에 해당 자원에 접근할 수 있는 쓰레드의 최대 수를 나타낸다. 세마포어는 쓰레드가 차원을 사용할 때마다 감소하고, 자원을 해제할 때마다 증가한다.
  • Mutex
    • 뮤텍스는 공유 자원에 대한 접근을 단일 쓰레드에게만 허용한다. 이는 주로 데이터의 무결성을 보호하기 위해 사용되며, 한 번에 하나의 쓰레드만이 공유 자원에 접근할 수 있도록 한다. 뮤텍스는 소유권 개념을 가지고 있어, 잠금을 건 쓰레드 만이 잠금을 해제할 수 있다.
  • 두 가지 메커니즘은 모두 동시성을 관리하고 데이터 무결성을 보장하는 데 필수적이지만, 사용되는 상황과 목적에 따라 선택된다.
  • 뮤텍스는 보다 엄격한 제어가 필요할 때, 세마포어는 여러 자원에 대한 동시 접근을 허용할 때, 특히 카운팅 세마포어는 자원의 수량이 제한되어 있을 때 유용하다.

운영체제

9. 주소공간의 개념

9.1 초기 시스템

  • 운영체제는 메모리에 상주하는 루틴의 집합이었다. 물리메모리에 하나의 실행중인 프로그램(프로세스)이 존재하였고 나머지 메모리를 사용하였다.

9.2 멀티프로그래밍과 시분할

  • 여러 프로세스가 실행준비 상태에 있고 운영체제는 그들을 전환하면서 실행하였다. 이런 전환은 CPU 이용률을 증가시켰다. 당시에는 이런 효율성의 개선이 중요했다.
  • 많은 사람들이 일괄처리 방식 컴퓨팅의 한계를 인식하였다. 많은 사용자가 동시에 컴퓨터를 사용하고 현재 실행 중인 작업으로부터 즉시 응답을 원하기 때문에 대화식 이용(interactivity)의 개념이 중요하게 되었다.
  • 시분할을 구현하는 한 가지 방법은 하나의 프로세스를 짧은 시간동안 실행시키는 것이다. 해당 기간 동안 프로세스에게 모든 메모리를 접근할 권한이 주어진다. 그런후에, 이 프로세스를 중단하고 중단 시점의 모든 상태를 디스크 종류의 장치(모든 물리메모리를 포함)에 저장하고, 다른 프로세스의 상태를 탑재하고, 또 짧은 시간동안 실행시킨다.
  • 이 방법의 문제는 너무 느리게 동작하는 것이고, 특히 메모리가 커질수록 느리게 된다. 레지스터 상태를 저장하고 복원하는 것은 빠르지만 메모리의 내용 전체를 디스크에 저장하는 것은 엄청나게 느리다.

9.3 주소공간

  • 우리는 그런 위험한 행위를 하는 사용자를 염두에 두어야 한다. 그런 위험에 대비하여 운영체제는 사용하기 쉬운(easy to use) 메모리 개념을 만들어야 한다. 이 개념이 주소공간(address space)이다. 실행중인 프로그램이 가정하는 메모리의 모습이다.
  • 주소공간은 실행 프로그램의 모든 메모리 상태를 가지고 있다. 프로그램의 코드(Code, 명령어)는 반드시 메모리에 존재해야 하고, 따라서 주소 공간에 존재한다. 스택은 함수 호출 체인 상의 현재 위치, 지역 변수, 함수 인자와 반환 값 등을 저장하는데 사용된다. 마지막으로 힙(heap)은 동적으로 할당되는 메모리를 위해 사용된다.
  • 주소 공간을 설명할 때, 운영체제가 실행 중인 프로그램에게 제공하는 추상화(abstraction)을 설명한다. 실제로 프로그램이 물리주소 0에서 16KB 사이에 존재하는 것은 아니다. 실제로는 임의의 물리 주소에 탑재된다.
  • 운영체제가 이 일을 할 때, 우리는 운영체제가 메모리를 가상화(virtualizing memory)한다고 말한다. 왜냐하면 실행중인 프로그램은 자신의 특정 주소의 메모리에 탑재되고 매우 큰 주소공간을 가지고 있다고 생각하기 때문이다.
  • 프로세스 A가 주소 0으로부터 (우리는 이를 가상주소라고 볼 것이다.) load 연산을 수행할 때, 운영체제는 하드웨어의 지원을 통해 물리주소 0이 아니라 물리주소 320KB를 읽도록 보장한다.
  • 이것이 메모리 가상화의 열쇠이고, 현대 모든 컴퓨터 시스템의 기저를 이룬다.

9.4 목표

  • 가상 메모리 시스템의 목표는 투명성(transparency)이다. 운영체제는 실행중인 프로그램이 가상메모리의 존재를 인지하지 못하도록 가상메모리 시스템을 구현해야 한다. 프로그램은 메모리가 가상화 되었다는 사실을 인지해서는 안된다.
  • 두 번째 목표는 효율성(efficiency)이다. 운영체제는 가상화가 시간과 공간 측면에서 효율적이도록 해야 한다. 시간적으로는 프로그램이 너무 느리게 실행되서는 안되고 공간적으로는 가상화를 지원하기 위한 구조를 위해 너무 많은 메모리를 사용해서는 안된다. 시간-효율적인 가상화를 구현할 때, 운영체제는 TLB등의 하드웨어 기능을 포함하여 하드웨어의 지원을 받아야 한다.
  • 세 번째 목표는 보호(Protection)이다. 운영체제는 프로세스를 다른 프로세스로부터 보호해야 하고, 운영체제 자신도 프로세스로부터 보호해야 한다. 프로세스가 탑재, 저장 혹은 명령어 반입등을 실행할 때 어떤 방법으로든 다른 프로세스나 운영체제의 메모리 내용에 접근하거나 영향을 줄 수 있어서는 안된다. 즉, 자신의 주소공간 밖의 어느것도 접근 할 수 있어서는 안된다. 보호성질을 이용하여 우리는 프로세스들을 서로 격리(isolate) 시킬 수 있다. 각 프로세스는 잘못된 혹은 악성 프로세스로부터 안전한 자신만의 보호막 안에서 실행되어야한다.
728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.03.07 운영체제  (1) 2024.03.08
24.03.06 PintOS  (2) 2024.03.06
24.03.04 운영체제, 백준  (2) 2024.03.04
24.03.03 운영체제, 백준  (0) 2024.03.03
24.03.02 운영체제, 백준, PintOS  (0) 2024.03.03