운영체제 관련 면접 질문(1)

최동혁·2022년 12월 8일
0

면접 질문

목록 보기
1/9

스레드

스레드를 사용하는 이유는?

  • 높은 처리율(throughput)과 성능 향상.
  • 병렬성(parallerlism)을 높일 수 있음.

스레드마다 별도의 copy로 가지고 있는 것은?

  • Program Counter와 Register, stack

왜 별도로 가지고 있는가?

  • 각 스레드가 서로 다른 일을 하기 때문에, CPU 수행과 관련된 정보 필요하기 때문.

스레드의 장점 4가지

  • 응답성
    • 하나의 스레드로 일하는 것 보다, 여러 스레드로 일하는 것이 응답이 훨씬 빠르기 때문.
  • 자원 공유
    - code, data 그리고 각종 자원들을 공유해서 좀 더 효율적으로 사용 가능
    • 프로세스를 여러개 두면 전부 다 개별 자원이기 때문에 공간 낭비 심함.
  • 경제성
    - 프로세스 하나 만드는 overhead보다 스레드 하나 만드는 overhead가 훨씬 적음.(30배)
    • 그리고 프로세스끼리 context switch하는 것보다 스레드끼리 context switch 하는 것이 overhead가 훨씬 적음.(5배)
  • 효율성
    • 서로 다른 CPU에서 각 스레드가 병렬적으로 일 할 수 있음.

COW에 대해 설명

  • Copy-On-Write 라고 부름.
  • 메모리 낭비를 최소화하기 위해 자식 프로세스를 생성해도 자원을 전부 복사해서 생성하지 않음.
  • write가 발생했을 때 copy를 하는 것.

부모 스레드가 자식 스레드를 생성하는 과정부터 종료하는 과정 서술(fort(), wait(), exec(), exit()

  • 부모 스레드가 fork() 시스템 콜을 이용해 운영체제에게 자식 스레드 생성 부탁.
    • 부모 스레드는 자식스레드가 죽을 때까지 wait() 시스템콜로 인해 block 상태.
  • 자식 스레드는 fork() 시스템 콜 이후의 코드들을 전부 처리
    • 자식 스레드 안에 exec() 시스템 콜을 사용해 새로운 프로그램 실행
  • 만약 부모 스레드가 wait() 시스템 콜을 이용해 기다리고 있다면, 자식 프로세스는 exec() 시스템 콜을 사용해 다시 돌아올 수 없기 때문에 부모 프로세스 무한 대기?
  • 자식 스레드가 끝나면 block되어 있던 부모 프로세스는 다시 돌아와서 나머지 아래 코드 수행
  • exit() 시스템 콜이나, main 문이 끝나면 종료

프로세스간 협력 메커니즘 2가지

  • message passing
    • 커널을 통해 각 프로세스에게 메시지 전달해서 통신
  • shared memory
    • 서로 다른 프로세스 간에도 일부 주소 공간을 공유하는 메커니즘

message passing 하는 방법 2가지

  1. Direct Communication -> 통신하려는 프로세스의 이름 명시적 표시
  2. Indirect Communication -> mailbox 또는 port를 통해 메시지를 간접 전달

CPU burst와 I/O burst 설명

  • CPU burst는 CPU를 연속적으로 쓰면서 인스트럭션을 실행하는 단계
  • I/O burst는 I/O 작업을 실행하는 단계

CPU bound job보다 I/O bound job의 cpu burst 빈도수가 높은 이유는?

  • CPU bound job은 연속적으로 쓰기 때문에 CPU burst의 빈도가 높지 않음.
  • 그에 반해, I/O bound job은 CPU를 짧게 끊어서 쓰고, I/O 작업에 많은 시간을 쓰기 때문에.

preemptive와 nonpreemptive가 무엇인지 예를 들어 설명

  • nonpreemptive는 CPU의 주도권을 강제로 빼앗지 않고 자진 반납하는 것임.
    • Running -> Blocked
      • I/O 작업 요청을 하는 시스템 콜 같은 것을 했을때는 자진 반납.
    • Terminate
      • 더 이상 할 것이 없을때 자진 반납
  • preemptive는 CPU의 주도권을 강제로 빼앗기는것
    • Running -> Ready
      • CPU를 더 쓰고 싶은데 시간이 다 되어 time interrupt가 일어나서 빼앗김.
    • Blocked -> Ready
      • 여기서는 I/O 작업 같은 긴 작업이 끝나고 Ready 상태로 돌아갈 때 우선순위가 매우 높아서 바로 다시 CPU의 주도권을 가져와야 하는 경우가 해당됨.

profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글