내가 보려고 정리한 면접리스트..!(라고 쓰고 다시 한번 머리속에 정리하는 그냥 정리본일 수도👀)
모두 기술면접은 당황하지 말고 잘 풀렸으면 좋겠어요!!
IPC란 무엇인가요?
답변 : IPC는 프로세스들 간에 데이터를 주고받으며 통신하는 것을 말합니다. 우리가 사용하는 프로세스들은 모두 사용자 공간에서 각각 운영체제로부터 할당받은 독립된 공간에 있습니다. 독립된 공간이기 때문에 서로 다른 프로세스의 영향을 받지 않는다는 장점이 있는 반면, 서로 협력이 필요한 상황에서는 통신이 힘들다는 단점이 있습니다.
이를 해결하고자 커널 영영에서 IPC라는 프로세스 간 통신을 제공하고 있습니다.
IPC가 통신하는 방식에는 어떤 것이 있나요? 아는 대로 말해주세요.
답변 :
공유메모리 방식이 있습니다. 공유메모리는 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용합니다. 따라서 프로세스가 공유 메모리 할당을 커널에 요청하면, 커널은 해당 프로세스에 메모리 공간을 할당해주고 이 후 모든 프로세스는 해당 메모리 공간에 접근이 가능합니다.
장점으로는 중개자 없이 바로 메모리에 접근이 가능하므로 IPC방식 중 가장 빠릅니다.
익명 PIPE 방식이 있습니다. 파이프는 두 개의 프로세스를 연결하며 하나의 프로세스는 데이터를 WRITE, 다른 하나는 READ만 가능한 단방향 통신입니다. 구현이 매우 간단하지만 양방향 통신을 위해서는 2개를 만들어야 하므로 복잡해질 수도 있다는 단점이 있습니다.
Named PIPE방식이 있습니다. 익명 파이프는 통신할 프로세스를 명확히 알 수 있는 경우에 사용합니다. 하지만 이름이 있는 파일을 사용하기 때문에 Named 파이프는 전혀 모르는 상태의 프로세스들 사이 통신에 사용합니다. 하지만 Named 파이프 방식 또한 WRITE, READ를 동시에 할 수 없습니다. 단점도 역시 익명 PIPE방식과 동일합니다.
Message Queue방식이 있습니다. 입출력 방식은 Named PIPE와 동일하지만, 다른점은 파이프처럼 데이터의 흐름 개념이 아니라 메모리 공간으로 쓰입니다. 사용할 데이터에 번호를 붙여가며 여러 프로세스가 동시에 데이터를 다룰 수 있습니다.
메모리 맵 방식이 있습니다. 메모리 맵은 열린 파일을 메모리에 맵핑시켜서 공유하는 방식입니다. 따라서 공유 매개체는 파일과 메모리로 볼 수 있습니다. 주로 대용량 데이터를 파일로 공유하고자 할 때 사용하는 방식입니다.
소켓 방식이 있습니다. 클라이언트와 서버가 네트워크 소켓 통신을 통해 소통하는 방식(포트 번호 이용!)으로, 원격으로 데이터를 공유할 때 사용합니다.
메세지 큐와 파이프 방식이 유사해보이는데, 각각 어떤 상황에서 쓸 수 있을 까요?
답변 : 파이프 방식은 용량 제한이 있고 단방향 통신이므로, 단순한 데이터 흐름에 적합합니다. 메세지 큐는 큐에 넣은 후 나중에 처리할 수 있습니다. 따라서 방대한 데이터 처리량이 있을 때 비동기로 해결이 가능합니다. 하지만 데이터가 많이 쌓일 수록 추가적인 메모리 자원이 필요하므로 주의해야 합니다.
공유메모리 방식으로 IPC통신을 할 경우, 데이터 일관성 문제가 생길 것 같은데 어떻게 생각하는지?
답변 : 네, 별도의 접근 제어 방법이 필요하며 임계구역을 통한 Race condition제어, Semaphore/Mutex가 있습니다.
Race Condition은 여러 프로세스가 동시에 공유 데이터에 접근 시 데이터 최종 연산 결과에 영향을 미치는 현상을 말합니다. 따라서 공유 데이터에 접근을 제어하는 임계구역이 있습니다. 하나의 프로세스가 임계구역에 있을 시, 다른 모든 프로세는 해당 임계 구역에 접근이 불가합니다.
뮤텍스는 lock과 release를 통해 하나의 프로세스만이 공유자원에 접근하도록 통제하는 것을 말하며, 세마포어는 최대 허용치를 정해 동기화 대상이 여러 개일때도 통제가 가능한 방식을 말합니다.
스케줄링이란 무엇인가요?
답변 : 여러 프로세스가 있고, 이 프로세스들이 자원(CPU등..)을 동시에 요구하는데 자원은 제한이 된 상황에서 스케줄링을 합니다. 제한된 자원들을 어떻게 여러 프로세스에게 나누어 줄 것인지에 대한 정책을 말합니다.
스케줄링의 목표는 무엇인가요?
답변 : 스케줄링은 가능하면 기한에 맞추어 많은 일을 수행(batch system)하고, 빠른 응답과 적은 대기 시간을 보장하는 것이 목표입니다.
CPU스케줄링의 성능 척도에는 어떤 것들이 있나요?
답변 : CPU 이용률/처리량/대기시간/처리시간/응답 시간등이 있습니다.
CPU이용률은 전체 시간 중 CPU가 일한 시간입니다.
CPU처리량은 단위 시간당의 처리한 양을 말합니다.
대기시간은 프로세스가 Ready Queue에서 기다린 전체 시간의 합을 말합니다.
소요시간은 CPU를 사용한 시간과 대기시간의 합을 말합니다.
응답시간은 프로세스가 Ready Queue에 들어가서 최초로 CPU를 배정받기까지의 시간을 말합니다.
선점과 비선점 스케줄링의 의미가 무엇인가요?
답변 : 선점스케줄링은 운영체제가 CPU의 사용권을 선점하는 경우입니다. 따라서 CPU의 사용권을 강제적으로 회수가 가능하다는 장점이 있지만 처리시간을 예측하기 힘들다는 단점이 있습니다. 비선점스케줄링은 프로세스 종료나 입출력등의 이벤트가 있을 때까지 실행을 보장하는 것을 말하며 처리시간을 예측하기 쉽다는 장점이 있습니다.
CPU스케줄링에는 어떤 것들이 있나요?
답변: 먼저 CPU스케줄링은 선점과 비선점으로 나누어 말할 수 있습니다.
선점스케줄링에는 우선순위 스케줄링, 라운드로빈, 멀티레벨 큐, 멀티레벨-피트백 큐 등이 있습니다.
우선순위 스케줄링 : 우선순위가 높은 순서대로 처리하는 방식, 따라서 우선순위가 낮으면 프로세스가 무한정 기다리는 기아문제가 일어날 수 있습니다. Aging방법으로 기아문제를 해결할 수 있습니다.
라운드로빈: 동일한 시간의 타임퀀텀(실행의 최소 시간 단위)을 정한 그 만큼 CPU를 할당받는 방식, 하지만 타임퀀텀이 너무 크면 FCFS와 같게 되고 너무 작으면 Context Switching이 잦아져 오버헤드가 발생할 수 있습니다.
멀티레벨 큐 : 작업들을 여러 종류의 그룹으로 나누어 여러개의 큐를 이용하는 방법, 우선순위가 낮은 큐가 실행되지 못하는 것을 막고자, 각 큐마다 다른 타임퀀텀을 설정해준다는 특징을 가집니다. 우선순위가 높은 큐는 작은 타임퀀텀을 할당하고, 우선순위가 낮은 큐는 큰 타임퀀텀을 할당합니다.
멀티 피드백 큐 : 멀티레벨 큐에서 자신의 타임퀀텀을 다 채운 프로세스는 밑의 큐로 내려가고, 반대로 타임퀀텀을 다 채우지 못한 프로세스는 원래 큐에 그대로 머무는 방식, 따라서 처리 시간이 짧은 프로세스를 먼저 처리하므로 소요시간(Turnaround Time)이 짧다는 장점이 있습니다.
비선점스케줄링에는 FCFS, SJF, HRN 등이 있습니다.
FCFS : First Come First Served의 약자. 큐에 도착한 순서대로 CPU를 할당받는 방식. 실행시간이 짧은 것이 뒤로 가면 평균 대기 시간이 길어진다는 단점이 있습니다.
SJF : Shortest Job First의 약자. 수행시간이 짧은 순서대로 수행하는 방식. FCFS보다 평균 대기시간이 줄어들며, 짧은 작업이 있을때 유리합니다.
HRN ; Highest Response-ratio Next의 약자. 우선순위를 계산하여 점유 불평들을 해소한 방식. SJF의 단점을 해소하였으며, 우선순위 계산은 (대기시간 + 실행시간 ) / (실행시간) 이므로, 대기시간이 긴 프로세스일 수록 우선순위가 높아진다.