본문 바로가기
개인 공부/TIL

[ TIL - CS ] 면접을 위한 CS 공부 2편 - 운영체제 -

by 킴도비 2024. 11. 1.

🚌 2024년 10월 28일~ 2024년 11월 2일까지의 주제는 운영체제다.

 

💡 공통으로 준비한 질문

1️⃣ 첫번째 접은 글은 내 말로 풀어쓴 정답
2️⃣ 두번째 접은 글은 해석 또는 공부한 내용 또는 추가적으로 궁금한 내용

 

1. Blocking과 Non-Blocking에 대해 설명해주세요.

더보기
  • blocking과  non-blocking은 주로 IO의 읽기,쓰기에서 사용된다.
  • blocking이란?
    • 요청한 작업을 마칠 때까지 계속 대기한다. 
    • 즉시 return 하고, return 값을 받아야 끝난다.
    • Thread 관점으로 본다면, 요청한 작업을 마칠 때까지 계속 대기하며 return 값을 받을 때까지 한 Thread를 계속 사용/대기 한다.
  • non-blockin이란?
    • 요청한 작업을 즉시 마칠 수 없다면 즉시 return한다.
    • 즉시 리턴하지 않는다.(일을 못하게 막는다.)
    • Thread 관점으로 본다면, 하나의 Thread가 여러 개의 IO를 처리 가능하다.
더보기

 

 

2. Race Condition과 Critical Section이 무엇이고, 경쟁상태를 막기 위해 어떤 방법을 사용하는지 설명해주세요.

더보기
  • Race Condition(경쟁 상태)이란?
    • 공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태
    • 동시 접근 시 자료의 일관성을 해치는 결과가 나타남
  • Critical Section(임계 구역)이란?
    • 둘 이상의 스레드가 동시에 실행될 경우 생길 수 있는 경쟁 조건을 발생시킬 수 있는 코드 블록
  • 해결 방법
    • 상호 배제(mutual exclusion) : 한 프로세스가 임계구역에 들어가 있으면 다른 프로세스는 들어갈 수 없다.
    • 한정 대기(bounded waiting) : 상호 배제 때문에 기다리게 되는 프로세스가 무한 대기하지 않아야 한다. 즉, 특정 프로세스가 임계구역에 진입하지 못하면 안 된다.
    • 진행의 융통성(progress flexibility, progress) : 임계구역에 프로세스가 없다면 어떠한 프로세스라도 들어가서 자원을 활용할 수 있다. 즉, 두 프로세스가 자원을 번갈아 쓴다고 가정할 때 한쪽에서 자원을 안쓰고 있다고 해서 다른 한 쪽 프로세스가 자원을 쓰고 싶어도 자신의 turn이 아니라고 기다리는 것은 효율적이지 못하다는 것이다.
  • 위 3가지 이다.
더보기

1. 내용 살짝 참고만

 

[운영체제] 경쟁 조건(Race Condition)과 임계 구역(Critical Section)

프로세스 간 메시지를 전송하거나, 공유메모리를 통해 공유된 자원에 여러 개의 프로세스가 동시에 접근하면 임계 구역(Critical Section) 안에서 경쟁 조건(Race Condition)이 생길 수 있다. 이를 해결하

brightstarit.tistory.com

 

2. 그림으로 이해하는 

 

process synchronization : 임계구역 (critical section) & 경쟁상태 (race condition)

목차process synchronization : 임계 구역 (critical section) & 경쟁상태 (race condition)공유 데이터(shared data)의 동시 접근(concurrent access)은 데이터의 불일치 문제(inconsistency)를 발생시킬 수 있습니다.process synch

yoongrammer.tistory.com

 

3. 코드를 참고할

 

Critical Section과 Race Condition

프로세스와 쓰레드 프로세스(Process)는 실행 중인 프로그램의 추상화이며, 한 개 이상의 쓰레드(Thread)로 이루어집니다. 쓰레드는 프로세스의 실행 단위입니다. 프로세스와 쓰레드는 거의 비슷하

velog.io

 

4. 경쟁 상태가 발생하는 3가지 이유

 

경쟁 상태(Race Condition) | 👨🏻‍💻 Tech Interview

경쟁 상태(Race Condition) 공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태 동시 접근 시 자료의 일관성을 해치는 결과가 나타남 Race Condition이 발생하는 경우

gyoogle.dev

 

 

3. CPU Scheduling이 무엇인지 설명하고, CPU 스케줄링의 종류에 대해 설명해주세요.

더보기
  • CPU 스케줄링이란 CPU를 잘 사용하기 위해 프로세스를 잘 배정하는 알고리즘이며, 조건은 오버헤드를 낮추고, 사용률을 높이고, 기아 현상을 낮추는 것이 조건입니다.
  • CPU 스케줄링에는 2가지 종류의 스케줄링이 있습니다. 선점과 비선점 스케줄링입니다.
  • 선점 스케줄링이란?
    • OS가 CPU의 사용권을 선점할 수 있는 경우에 강제로 회수하는 경우입니다. 처리시간 예측이 어렵습니다.
    • Priority Scheduling : 정적/동적으로 우선순위를 부여하여 우선순위가 높은 순서대로 처리. 우선 순위가 낮은 프로세스가 무한정 기다리는 starvation이 생길 수 있으나 Aging 방법으로 문제가 해결 가능
    • Round Robin : FCFS에 의해 프로세스가 들여보내지면 각 프로세스는 동일한 시간의 Time Quantum만큼 CPU를 할당 받는다. 
    • Multilevel-Queue(다단계 큐) :  작업들을 여러 종류의 그룹으로 나누어 여러 개의 큐를 이용하는 방법.
    • Multilevel-FeedBack-Queue : 다단계 큐에서 자신의 Time Quantum을 다 채운 프로세스는 밑으로 내려가고 자신의 Time Quantum을 다 채우지 못한 프로세스는 원래 큐 그대로다.
  • 비선점 스케줄링이란? 
    • 프로세스 종료 또는 I/O 등의 이벤트가 있을 때까지 실행을 보장합니다. 처리시간 예측이 용이합니다.
    • FCFS(First Come First Served) : 큐에 도착한 순서대로 CPU 할당, 실행 시간이 짧은게 뒤로 가면 평균 대기 시간이 길어짐
    • SJF(Shortest Job First) : 수행시간이 가장 짧다고 판단되는 작업을 먼저 수행, FCFS보다 평균 대기 시간 감소, 짧은 작업에 유리
    • HRN(Hightest Response-ratio Next) : 우선순위를 계산하여 점유 불평등을 보완하는 방법(SJF의 단점 보완). 우선순위 = (대기시간 + 실행시간) / (실행시간)
더보기

 

4. 메모리의 종류에 대해 설명하고, 종류가 여러가지인 이유에 대해 설명해주세요.

더보기
  • CPU에 가까운 순서대로 레지스터, 캐시, 주기억장치, 보조기억장치가 있습니다.
  • 물리적 메모리의 종류가 많은 이유는, 접근 속도에 따른 차이를 두기 위해서입니다. (레지스터 > 캐시 > 주기억장치 > 보조기억장치)
더보기

 

❔ 개인으로 준비한 질문

1. IPC에 대해 설명해주세요.

더보기
  • IPC(Inter Process Communication)프로세스는 독립적으로 실행되고, 프로세스 간의 통신을 해야 하는데 이를 가능하도록 해주는 통신이다.
더보기
  • 커널이란?
    • 운영체제의 핵심적인 부분으로, 다른 모든 부분에 여러 기본적인 서비스를 제공해준다.
  • 프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스간 통신을 할 수 있게 된다.

 

1. IPC가 필요한 이유

 

IPC(Inter-Process Communication)란?

프로세스(Process)의 개요 👀 프로세스(Process)는 프로그램이 구동될 때 주 메모리에 적재되며, 메모리 상에서 실행되는 작업의 단위를 말한다. 즉, 컴퓨터가 연속적으로 실행하고 있는 컴퓨터 프

y-oni.tistory.com

 

 

2. IPC 종류에 대해 설명해 주세요.(최근에는 글이 몇 개 없지만 추가로 알아두는 느낌으로)

더보기
  • IPC는 다음과 같은 종류들이 있습니다.
    • 익명 PIPE 
      • 파이프는 두 개의 프로세스를 연결하는데 하나의 프로세스는 데이터를 쓰기만 하고, 다른 하나는 데이터를 읽기만 할 수 있다. 한쪽 방향으로만 통신이 가능한 반이중 통신이라고 부른다.
      • 따라서 양쪽으로 모두 송/수신을 하고 싶으면 2개의 파이프를 만들어야 한다.
      • 매우 간단하게 사용할 수 있는 장점이 있고, 단순한 데이터 흐름을 가질 땐 파이프를 사용하는 것이 효율적이다. 단점으로는 전이중 통신을 위해 2개를 만들어야 할 때는 구현이 복잡해지게 된다.
      • 통신할 프로세스를 명확히 알 수 있는 경우에 사용한다.
    • Named PIPE(FIFO)
      • Named 파이프는 전혀 모르는 상태의 프로세스들 사이 통신에 사용한다.
      • 즉, 익명 파이프의 확장된 상태로 부모 프로세스와 무관한 다른 프로세스도 통신이 가능한 것
      • 하지만, Named 파이프 역시 읽기/쓰기 동시에 불가능하다. 따라서 전이중 통신을 위해서는 익명 파이프처럼 2개를 만들어야 가능하다.
    • Message Queue
      • 입출력 방식은 Named 파이프와 동일하다.
      • 다른 점은 메시지 큐는 파이프처럼 데이터의 흐름이 아니라 메모리 공간이다.
      • 사용할 데이터에 번호를 붙이면서 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.
    • 공유 메모리
      • 위 방법들이 통신을 이용한 설비라면, 공유 메모리는 데이터 자체를 공유하도록 지원하는 설비다.
      • 프로세스의 메모리 영역은 독립적으로 가지며 다른 프로세스가 접근하지 못하도록 반드시 보호되어야 한다.
      • 하지만 다른 프로세스가 데이터를 사용하도록 해야 하는 상황도 필요할 것이다. 파이프를 이용해 통신을 통해 데이터 전달도 가능하지만, 스레드처럼 메모리를 공유하도록 해준다면 더욱 편할 것이다.
      • 공유 메모리는 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용해준다.
      • 프로세스가 공유 메모리 할당을 커널에 요청하면, 커널은 해당 프로세스에 메모리 공간을 할당해주고 이후 모든 프로세스는 해당 메모리 영역에 접근할 수 있게 된다.
      • 중개자 없이 곧바로 메모리에 접근할 수 있어서  IPC 중 가장 빠르게 작동한다.
    • 메모리 맵
      • 공유 메모리처럼 메모리를 공유해준다. 메모리 맵은 열린 파일을 메모리에 맵핑시켜서 공유하는 방식이다.
      • 주로 파일로 대용량 데이터를 공유해야 할 때 사용한다.
    • 소켓
      • 네트워크 소켓 통신을 통해 데이터를 공유한다.
      • 클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용한다.
더보기

 

3. Thrashing에 대해 설명해주세요.

더보기
  • Thrashing이란?
    • 가상 메모리 크기 = 물리 메모리 + 스왑 영역(하드 디스크에 존재 또는 메모리 관리자가 관리하는 영역)
    • 메모리에 페이지 부재율이 높은 것, 심각한 성능 저하를 초래한다. 
    • 하드디스크의 입출력이 너무 많아져서 잦은 페이지 부재로 작업이 멈춘 것 같은 상태이다.
  • 페이지 부재란?
    • 프로세스가 페이지를 요청했을 때 그 페이지가 메모리에 없는 상황

 

4. 페이지 교체 알고리즘에 대해 설명해주세요.

더보기
  • 페이지 교체 알고리즘이란?
    • 페이지 부재가 발생할 때 새로운 페이지를 할당해야 하고, 현재 할당된 페이지 중 어떤 것을 교체할지 결정하는 방법입니다.
    • FIFO 알고리즘 : First In First Out 알고리즘. 가장 간단한 방법으로, 특히 초기화 코드에 적절한 코드이다.
    • OPT 알고리즘 : Optimal 알고리즘. 앞으로 가장 사용하지 않을 페이지를 가장 우선적으로 내보내는 알고리즘. FIFO에 비해 페이지 결함의 횟수를 많이 감소시킬 수 있다.
    • LRU 알고리즘 : Least-Recently-Used 알고리즘. 최근에 사용하지 않은 페이지를 가장 먼저 내려보내는 알고리즘. 최근에 사용하지 않았으면, 나중에도 사용되지 않을거라는 아이디어에 기반한 알고리즘. 실제로 사용할 수 있는 페이지 교체 알고리즘에서는 가장 좋은 방법 중 하나
더보기