면접리스트_4

지영·2023년 11월 9일
0

CS

목록 보기
77/77

경쟁상태

  • 경쟁상태란 무엇이고, 어떤 상황에서 경쟁상태가 일어날 수 있나요?
    답변 : 경쟁상태란 공유 자원에 대해서 여러 프로세스가 동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태를 말합니다. 따라서 동시 접근 시 자료의 일관성을 해칠 수 있는 위험이 있는 상황에서 경쟁상태가 일어납니다.

  • 경쟁상태가 일어날 수 있는 경우에 대한 케이스를 말해주세요.
    답변 :

    • 커널모드에서 데이터를 load하는 작업 중 인터럽트가 발생하여 같은 데이터를 조작하는 경우
      • 해결방안 : 커널모드에서 작업을 수행하는 동안에는 인터럽트가 발생하지 못하도록 강제로 CPU제어권을 주지 않는 방법이 있습니다.
    • 프로세스가 시스템콜로 커널모드에 진입하여 작업을 수행하는 도중 Context Switching이 일어나는 경우
      • 해결방안 : 프로세스가 커널모드에서 작업을 하는 경우에는 시간초과(타임퀀텀보다 길게)가 되어도 CPU제어권이 다른 프로세스에게 넘어가지 않도록 하는 방법이 있습니다.
    • 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근하는 경우
      • 해결방안 : 커널 내부에 있는 각 공유 데이터에 접근시, 해당 데이터에 대한 LOCK/UNLOCK 처리를 하는 방법이 있습니다.
  • 커널이라는 단어가 많이 나오는데, 커널은 무엇인지 설명해주세요
    답변 : 커널은 메모리에 상주하는 운영체제의 핵심부분이빈다. 운영체제가 워낙 큰 프로그램이기 때문에 메인메모리에 다 적재되지 못하여 핵심 부분만 따로 커널이라는 메인 메모리 공간에 적재합니다.
  • 공유자원이 존재하는 구간으로 경쟁상태가 일어날 수 있는 부분을 무엇이라 부르며 이를 해결하기 위한 방법은 무엇이 있나요?
    답변: 경쟁상태가 일어날 수도 있는 부분을 Critical Section(임계영역)이라고 합니다. 이러한 임계영역에 대한 경쟁상태를 제거하기 위해 세마포어와 뮤텍스같은 상호배제를 이용할 수 있습니다.

세마포어와 뮤텍스

  • 뮤텍스와 세마포어의 차이점을 간단히 말해주세요
    답변 :
    • 뮤텍스 : 오직 1개의 스레드(프로세스)만 접근이 가능, 1개만 접근 가능하므로 반드시 락을 획득한 스레드(프로세스)는 작업을 마친 뒤 락을 해제해주어야 합니다. 이진 세마포어라고 불리기도 합니다 .
    • 세마포어 : 세마포어의 변수만큼의 스레드(프로세스)만 접근 가능, 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법입니다.
  • 뮤텍스 알고리즘 중 하나만 설명해주세요
    답변 :
    • 데커 알고리즘 : flag와 turn변수를 이용하여 임계구역에 들어갈 프로세스(스레드)를 결정하는 방식. flag는 프로세스 중 누가 임계구역에 들어갈 것인질르 나타내는 변수이며, turn은 이제 임계구역에 들어갈 차례를 나타내는 변수입니다. 이외에 데커와 유사하지만, turn변수를 양보하는 피터슨 알고리즘도 있습니다.
    • 제과점 알고리즘 : 가장 작은 수의 번호표를 가지고 있는 프로세스 순으로 임계구역에 진입합니다. 따라서 여러 프로세스(스레드)에 대한 처리가 가능한 알고리즘입니다.

페이징과 세그먼테이션

  • 페이징과 세그먼테이션에 대해 설명해주세요
    답변 :

    • 페이징 : 프로세스를 동일한 크기의 페이지로 분리한 후, 메모리를 해당 페이지 크기의 프레임으로 분리합니다. 이 페이지를 메모리에 불연속적으로 저장하는 방식을 페이징이라고 합니다. 페이지가 4MB이면 프레임도 4MB인데, 프로세스가 13MB면 한 페이지가 1MB가 남습니다. 이렇게 되면 3MB의 내부단편화가 발생합니다.
    • 세그먼테이션 : 프로세스를 가변적인 크기의 세그먼트로 분리한 후, 메모리에 적재하는 방식입니다. 주로 논리적 단위의 블록으로 나누므로 Code, Data, Stack&Heap으로 분리됩니다. 메모리 크기에서 이미 사용중인 크기를 뺐을 때의 크기가 새로운 세그먼트보다 작다면 외부 단편화가 발생합니다.
  • 페이징과 세그먼테이션 기법을 쓰는 이유는 무엇인가요?
    답변 : 다중 프로그래밍 시스템에서 여러 프로세스를 수용하기 위해서 입니다. 따라서 주기억장치를 동적으로 분할하는 메모리 관리 작업을 해야 합니다.

  • 메모리 관리 기법에는 어떤 방법이 있나요?
    답변 : 연속 메모리 관리와 불연속 메모리 관리로 나눌 수 있습니다. 연속 메모리 관리는 프로그램 전체가 하나의 큰 공간에 연속적으로 할당되는 기법입니다.
    불연속 메모리 관리는 프로그램 일부가 서로 다른 주소 공간에 할당될 수 있는 기법입니다.

  • 단순 메모리가 아닌 가상 메모리에서 위의 기법을 썼을 때 어떤 점이 달라질까요?
    답변 :

  • 가상 메모리 페이징의 경우, 단순 페이징과 비교하여 필요한 페이지가 있으면 나중에 자동으로 불러들여지므로 페이지 전부를 로드시킬 필요가 없습니다. 하지만 복장한 메모리 관리로 오버헤드가 발생할 수도 있습니다.

  • 가상 메모리 세그먼테이션의 경우, 페이징과 같이 필요한 세그먼트가 있을 때 나중에 메모리를 불러들이므로 필요하지 않은 세그먼트는 로드하지 않아도 됩니다. 하지만 가상메모리 페이징처럼 복잡한 관리로 인한 오버헤드가 발생할 수 있습니다.

profile
꾸준함의 힘을 아는 개발자📍

0개의 댓글