면접리스트_2

지영·2023년 10월 31일
0

CS

목록 보기
75/77

1. 인터럽트

  • 우선, 인터럽트란 무엇인가요?
    답변 : 인터럽트란, 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것을 말합니다.
    특히 현재 실행 중인 프로세스보다 더 중요한 일이 발생하면 그 일을 먼저 처리하고 나서 하던 일을 계속해야 합니다.

  • 인터럽트 기능이 없었다면, 어떤 방식을 처리할 수 있었을까요?
    답변 : 폴링방식으로 해결할 수 있습니다. 폴링이란 대상을 주기적으로 감시하면서 특정 상황이 발생하면 해당 처리 루틴을 실행하는 것입니다. 단점으로는 처리 루틴에 들어가면 다른 장치를 체크할 수 없으며, 장치의 상태를 읽는데에도 마이크로프로세서의 자원이 낭비됩니다.

  • 인터럽트와 폴링 방식에 대해서 차이점을 말씀해주세요.
    답변 : 인터럽트는 MCU자체가 변화를 체크하고 변화 시에만 동작합니다. 반면, 폴링방식은 사용자가 명령어를 통해 지속적으로 입력 핀의 값의 변화를 읽어와야 합니다.
    따라서, 인터럽트는 MCU라는 하드웨어 자원의 지원을 받아야 하지만 폴링 방식에 비해 발생 시기를 예측하기 힘든 경우에 신속한 대처가 가능하다는 장점이 있습니다.

  • 인터럽트가 발생하는 상황에 대해서 더 자세히 말씀해주세요.
    답변 : 일단 인터럽트는 크게 외부/내부 인터럽트와 소프트웨어 인터럽트로 나누어 발생합니다.
    외부/내부 인터럽트는 CPU의 하드웨어 신호에 의해 발생합니다.
    외부 인터럽트 예시로는 입출력 발생, 전원 이상 등이 있습니다.
    내부 인터럽트는 Trap이라고도 불리는데, 예시로는 0으로 나누기, 오버플로우, 명령어를 잘못 사용한 경우 등이 있습니다.
    소프트웨어 인터럽트는 명령어의 수행에 의해 발생합니다. 예시로는 시분할 처리를 위해서 자원 할당 동작으로 요청이 들어올 때 등이 있습니다.

  • 인터럽트와 시스템 콜의 차이점에 대해서 설명해주세요.
    답변 : 시스템 콜은 소프트웨어 인터럽트에 속합니다. 따라서 넓은 범주에서는 시스템 콜이 인터럽트안에 포함됩니다.
    하지만 시스템 콜이나 예외 상황은 모두 CPU의 제어권이 사용자에게서 운영체제로 넘어가서 처리됩니다. 즉 인터럽트를 발생시키는 주체가 하드웨어 장치가 아닌 소프트웨어 이므로 이들을 소프트웨어 인터럽트라고 부릅니다. (+인터럽트라고하면 대체로 하드웨어 인터럽트라고 부릅니다.)

2. 시스템 콜

  • 시스템콜에 대해 설명해주세요.
    답변 : 시스템콜은 커널과 사용자 사이의 인터페이스역할을 하는 것으로, 쉘에서 명령어나 서브루틴 형식으로 운영체제의 기능을 호출할 수 있습니다. 왜냐하면 사용자가 직접 커널에 접근할 수 없기 때문에 시스템콜을 활용합니다.

  • fork()과 vfork()의 차이점은?
    답변 : fork()는 부모 프로세스의 메모리를 복사해서 사용합니다. (하지만 프로세스 식별자인 pid값은 다릅니다.)
    vfork()는 부모 프로세스의 메모리를 공유할 뿐 복사하지 않습니다. 따라서 fork()보다 생성 속도가 빠르다는 장점이 있습니다. 하지만 자원을 공유하기 때문에 자원에 대한 race condition이 발생하지 않도록 하기 위해 부모 프로세스는 자식 프로세스가 exit하거나, execute가 되기 전까지 block됩니다.

  • fork()와 exec()의 차이점은?
    답변 : fork()는 동일한 프로세스를 여러번 동작하고자 할 때 사용합니다. exec()는 child에서 parent와 다른 동작을 하고 싶을 때 사용합니다.

  • 서브루틴과 시스템 콜의 차이는?
    답변 :순서에서 다르다는 것을 알 수 있습니다. 먼저 서브루틴이 시스템 콜을 호출하면, 시스템 콜이 수행한 결과를 서브루틴에 보내는 과정입니다. 즉 시스템 콜 호출 시 커널이 호출되면 커널이 자신의 결과 데이터를 시스템 콜에 다시 보내줍니다. 마지막으로 시스템 콜이 서브루틴에게 전달하는 방식입니다. (단, 실무에서는 api를 호출해서 사용하기 때무넹 둘의 큰 차이를 알기 힘듭니다.)

3. PCB & Context Switching

  • PCB(Process Control Block)가 무엇이고 왜 필요한지 설명해주세요.
    답변 : PCB란 프로세스의 메타데이터를 저장해놓는 곳이빈다. 따라서 PCB하나에 한 프로세스의 정보가 담기게 됩니다. 필요한 이유는 프로세스가 여러 개일때, CPU에서는 스케줄링을 통해 프로세스 교체를 관리해야 합니다. 이때 앞으로 수행할 대기 중인 프로세스에 관한 저장 값을 PCB에 저장하여 활용합니다.
  • PCB는 어떻게 관리되나요?
    답변 : Linked List방식으로 관리합니다. 따라서 새로운 PCB가 생성될 때 마다 PCB List Head에 붙게 됩니다. Linked List의 특징인 삽입/삭제가 용이하다는 장점으로 진행됩니다. (PCB의 생성은 프로세스 생성시, PCB의 삭제는 프로세스의 완료시 진행됩니다. )

  • PCB의 위치는 어디에 있을까요?
    답변 : 프로세스의 중요한 정보를 포함하고 있기 때문에, 사용자가 접근하지 못하도록 보호된 메모리 영역에 위치해 있다고 합니다. (일부 운영체제는 커널 스택에 위치해 있다고 합니다.)

  • Context Switching이란 무엇이며, 어떤 상황에서 발생하는 건가요?
    답변 : Context Switching이란, CPU가 이전의 프로세스 상테를 PCB에 보관하고 또 다른 프로세스의 정보를 PCB에 읽어 레지스터에 적재하는 과정을 말합니다. 즉, 프로세스가 Ready에서 Running으로 변화하는 것처럼 상태가 변화할 때 발생합니다.

  • 시스템콜이 일어났을 때 Context Switching일어나는 이유는 무엇일까요?
    답변 : 시스템콜은 kernel code입니다. 따라서 kernel code에 들어가기 위해서 인터럽트를 일으키고 현재 프로세스 상태를 보관하는 과정이 필요합니다.

  • Context Switching의 유의할 점이 있다면 무엇이 있을까요?
    답변 : 오버헤드의 비용이 과도하게 일어나지 않도록 조심해야 합니다. 하지만 프로세스 수행 중 인터럽트가 들어와 대기 상태로 전화시키면 CPU가 일을 수행하지 않게 됩니다. 이러한 비효율성을 피하기 위해서는 어느정도의 오버헤드는 감수하는 것이 맞다고 생각합니다.
profile
꾸준함의 힘을 아는 개발자📍

0개의 댓글