운영체제 - 면접 질문 정리 (2)

코난·2025년 3월 11일
0

CS 면접 정리

목록 보기
69/76

동기와 비동기의 차이에 대해 설명해주세요

동기는 요청과 그 결과가 동시에 일어난다는 약속입니다. 요청을 하면 시간이 오래걸리더라도 요청한 자리에서 결과가 주어져야 합니다. 순서에 맞춰 진행된다는 장점이 있지만 여러가지 요청을 동시에 처리할 수 없습니다.

비동기는 요청과 결과가 동시에 일어나지 않을거라는 약속입니다. 하나의 요청에 따른 응답을 즉시 처리하지 않아도, 그 대기 시간동안 또 다른 요청에 대해 처리 가능한 방식입니다. 여러 개의 요청을 동시에 처리할 수 있는 장점이 있지만 동기 방식보다 속도가 떨어질 수 있습니다.

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

Blocking은 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것을 의미한다. 즉, 호출된 함수가 자신의 할 일을 모두 마칠때까지 제어권을 계속 가지고서 호출한 함수에게 바로 돌려주지 않는 상황을 의미한다.

Non-Blocking은 다른 주체의 작업에 관련없이 자신의 작업을 하는 것을 의미한다.
즉, 호출된 함수가 자신의 할 일을 모두 마치지 않았더라도 바로 제어권을 건네주어 호출한 함수가 다른 일을 진행할 수 있도록 해주는 상황을 의미한다.

프로세스의 종류는 무엇이 있는지 설명해주세요

init 프로세스는 최상위 프로세스로 부팅 시 가장 먼저 실행되어 시스템에 전반적인 설정을 초기화하는 프로세스입니다. 모든 프로세스의 init 프로세스의 자식 프로세스가 됩니다.

부모 프로세스는 1번 프로세스(init)를 제외한 프로세스가 다른 프로세스를 생성하고 '자식 프로세스'를 가지고 있는 프로세스입니다.

자식 프로세스는 부모 프로세스에 의해 생성된 프로세스로 작업을 완료하면 결과를 부모 프로세스에게 전달하고 종료합니다.

고아 프로세스는 자식 프로세스보다 먼저 부모 프로세스가 사라지거나 종료되었을 때 자식 프로세스가 고아 프로세스가 되어 최상위 계층인 init 프로세스가 관리하게 됩니다.

좀비 프로세스는 자식 프로세스의 종료 신호를 부모 프로세스가 처리하지 못할 경우 자식 프로세스가 좀비 프로세스가 됩니다. 실제로 사용되는 프로세스 공간이 작아지기 때문에 직접 종료해줘야 합니다.

데몬 프로세스는 사용자에게 특정 기능이나 서비스를 제공하는 프로그램입니다.

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

Race Condition(경쟁조건)은 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황을 말하며 공유 자원 접근 순서에 따라 실행 결과가 달라지는 상황을 말합니다.

Critical Section(임계 구역)이란 둘 이상의 스레드가 동시에 실행될 경우 생길 수 있는 경쟁 조건을 발생시킬 수 있는 코드 블록을 말합니다.

이러한 문제를 해결하기 위해서는 상호 배제(Mutual Exclusion)와 같은 동기화 작업을 사용합니다.

DeadLock(교착상태)에 대해 설명하고, 해결 방법에 대해 설명해주세요.

DeadLock(교착상태)은 두 개 이상의 프로세스가 서로의 작업이 끝나기만을 기다리고 있어 두 프로세스 모두 영원히 끝나지 않는 상황을 가리킵니다.

이 교착 상태의 4가지 필요조건은 다음과 같습니다.
1. 상호배제 : 한 리소스는 한 번에 한 프로세스만이 사용할 수 있다.
2. 점유와 대기 : 어떤 프로세스가 하나 이상의 리소스를 점유하고 있으면서 다른 프로세스가 가지고 있는 리소스를 기다리고 있다.
3. 비선점 : 프로세스가 태스크를 마친 후 리소스를 자발적으로 반환할 때까지 기다린다.
4. 환형 대기 : 점유와 대기 관계의 프로세스들이 원형으로 서로를 기다린다.

이 교착 상태를 해결할 수 있는 방법은 다음과 같습니다.
1. 방지 : 교착상태가 발생할 수 있는 요구조건을 만족시키지 않게 함으로써 교착상태를 방지한다.
2. 회피 : 교착상태가 발생할 가능성이 있는 자원 할당을 하지 않는다.
3. 탐지 및 회복 : 교착상태가 발생할 수 있도록 놔두고 교착상태가 발생할 경우 찾아내어 고친다.

'식사하는 철학자 문제'에서, DeadLock이 어떨 때 발생하는지 설명하고, 이를 해결하기 위한 방법을 제시해주세요.


"식사하는 철학자 문제"
다섯 명의 철학자가 원탁에 앉아 있고, 각자의 앞에는 스파게티가 있고 양옆에 포크가 하나씩 있습니다. 그리고 각각의 철학자는 다른 철학자에게 말을 할 수 없습니다. 이때 철학자가 스파게티를 먹기 위해서는 양 옆의 포크를 동시에 들어야 합니다. 철학자들은 다음의 과정을 통해 식사를 합니다.

  1. 일정 시간 생각을 한다.
  2. 왼쪽 포크가 사용 가능해질 때까지 대기한다. 만약 사용 가능하다면 집어든다.
  3. 오른쪽 포크가 사용 가능해질 때까지 대기한다. 만약 사용 가능하다면 집어든다.
  4. 양쪽의 포크를 잡으면 일정 시간만큼 식사를 한다.
  5. 오른쪽 포크를 내려놓는다.
  6. 왼쪽 포크를 내려놓는다.
  7. 다시 1번으로 돌아간다.

만약 모든 철학자들이 동시에 자신의 왼쪽 포크를 잡는다면, 모든 철학자들이 자기 오른쪽의 포크가 사용 가능해질 때까지 기다려야 합니다. 그런데 모든 철학자들이 그러기에 이 상태에서는 모든 철학자가 영원히 3번 상태에 머물러있어 아무것도 진행할 수가 없게 되는데, 이것이 교착(Deadlock)상태입니다.

1) 5명 모두 자신의 왼쪽 포크를 들고 있으므로 '점유대기'
2) 남이 포크를 뺏어주지 않음 '비선점'
3) 서로 오른쪽 포크를 놓기만을 기다림 '환형대기'
4) 각 포크에 대해 한 사람만 들 수 있음 '상호배제'

해결을 위해서는 카운팅 세마포어를 사용해야 합니다. 방에 대한 입장 정원을 카운팅 세마포어로 설계해, 최대 4명만 들어온다면 방 안의 모든 사람들이 왼쪽 포크를 든다 하더라도 DeadLock이 일어나지 않습니다.

Mutex(뮤텍스)와 Semaphore(세마포어)에 대해 설명해주세요.

Mutex는 공유 자원에 대한 접근을 동시에 하나의 스레드만 가능하게 제한합니다. 즉, 뮤텍스는 동기화 대상이 하나인게 특징입니다. 한 프로세스에 의해 소유될 수 있는 key 기반으로 한 상호배제 기법이고 key에 해당하는 객체가 있으며 이 객체를 소유한 스레드와 프로세스만이 공유자원에 접근할 수 있습니다.

Semaphore는 사용하고 있는 스레드와 프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성합니자. 공유 자원에 접근할 수 있는 프로세스의 최대 허용치만큼 스레드가 접근할 수 있으며, 각 프로세스는 세마포어 값을 확인하고 변경할 수 있습니다.

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

Ready Queue에 있는 프로세스 중, 다음에 CPU를 할당할 프로세스를 선택하는 알고리즘을 CPU Scheduling이라고 합니다.

  • 선점 스케쥴링
    • 라운드 로빈(Round Robin)
      프로세스마다 같은 크기의 CPU 시간을 할당
    • SRT(Shortest Remaining Time First)
      가장 짧은 시간이 소요되는 프로세스를 먼저 수행
    • 다단계 큐(Multi Level Queue)
      작업들을 여러 종류 그룹으로 분할, 여러 개의 큐를 이용하여 상위 단계 작업이 선점
    • 다단계 피드백 큐 (Multi Level Feedback Queue)
      FCFS와 라운드 로빈 기법혼합, 입출력 위주와 CPU 위주인 프로세스의 특성에 따라 큐마다 서로 다른 CPU 시간 할당량 부여
  • 비선점 스케쥴링
    • 우선순위(Priority)
      각 프로세스 별로 우선순위가 주어지고, 우선순위에 따라 CPU 할당
    • 기한부(Deadline)
      작업들이 명시된 기간이나 기한 내에 완료되도록 계획
    • FCFS 스케줄링 (First Come First Serve Scheduling)
      CPU를 먼저 요청한 프로세스가 먼저 CPU를 배정 받는 스케줄링 방법
    • SJF(Shortest Job First)
      프로세스가 도착하는 시점에 따라 그 당시 가장 작은 서비스 기간을 갖는 프로세스가 종료 시 까지 선점
    • HRN(Highest Response Ratio Next)
      대기 중인 프로세스 중 현재 Response Ratio가 가장 높은 것을 선택, (Response Ratio = (대기시간 + 서비스시간) / 서비스시간)

CPU의 성능 척도엔 무엇이 있는지 설명해주세요.

  • CPU Utilization(이용률) : CPU가 놀지 않고 일한 시간
  • Throughput(처리량) : 단위 시간당 처리량, CPU가 얼마나 많은 일을 했는지
  • Turnaround Time(소요시간, 반환시간) : CPU 사용 시간 + 기다린 시간
  • Waiting Time(대기시간) : 프로세스가 Ready Queue에서 기다린 전체 시간의 합
  • Response Time(응답시간) : 프로세스가 Ready Queue에 들어가서 최초로 CPU 얻기까지 걸린 시간

만약 효율성을 추구할 경우
CPU 사용률과 처리율은 최대화,
반환 시간, 대기 시간, 반응 시간은 최소화하는 것이 바람직.

만약 공평성을 추구할 경우
각 기준에 있어서 최적의 평균값과 이들 간의 편차의 최소화를 함께 고려하여 스케줄러를 선정하여야 함

대화형 시스템의 경우
반응 시간의 편차가 적은 스케줄러를 선정하는 것이 좋음.


참고

https://dev-coco.tistory.com/46
https://velog.io/@maketheworldwise/SyncAsync-BlockingNon-Blocking-%EB%AC%B4%EC%8A%A8-%EC%B0%A8%EC%9D%B4%EC%9D%BC%EA%B9%8C
https://m.blog.naver.com/seonjun92/221674556435
https://brightstarit.tistory.com/10
https://velog.io/@ohsol/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81-%EC%A2%85%EB%A5%98%EC%99%80-%EA%B8%B0%EB%B2%95

profile
몸은 커졌어도, 머리는 그대로... 하지만 불가능을 모르는 명탐정 현아! 진실은 언제나 하나!

0개의 댓글