면접질문

[면접질문] OS 면접 질문 정리

따봉치치 2024. 2. 26. 18:54
728x90

프로세스 vs 스레드

Q. 프로세스는 무엇인가요?

A. 프로세스는 OS 입장에서 실행중인 작업의 단위입니다. 모든 프로세스는 독립적인 메모리 공간을 가지며, 최소 한 개의 메인스레드를 포함합니다.

 

Q. 스레드는 무엇인가요?

A. 하나의 프로세스 내에서 하나 이상으로 쪼개지는 작업의 단위입니다.

 

 

Q. 프로세스와 스레드의 차이에 대해 설명해주실래요?

A. 프로세스는 각 프로세스마다 독립적인 메모리 공간을 가지고 있기 때문에 프로세스 간 자원공유가 어렵습니다. 하지만 스레드는 프로세스 내에서 stack외에 메모리 공간을 공유하기 때문에 자원공유가 쉽습니다.

또한, 프로세스는 현재 실행중인 프로세스를 교체할 때 상대적으로 높은 context switching 비용이 발생합니다

 

Q. 멀티프로세싱과 멀티스레딩에 대해 설명해주세요.

 

PCB & Context Switching

Q. PCB에는 어떠한 정보들이 담겨져있나요?

A. PCB는 운영체제가 프로세스 관리를 위해 프로세스 정보를 저장하는 자료구조입니다.

따라서 프로세스 아이디, 프로세스 상태값, PC 레지스터를 포함한 레지스터 값 등이 저장되어 있습니다.

 

Q. Context Switching은 무엇이고 어떨 때 발생하나요?

A. 멀티태스킹 환경에서 CPU가 현재 프로세스를 중단하고 새로운 프로세스로 전환하는 과정입니다.

프로세스가 종료되거나 I/O 인터럽트가 발생할때 context switching이 발생합니다.

CPU Scheduling

Q. Process Scheduler의 종류에 대해서 설명해주세요.

Longterm Sceduler와 Shortterm Sceduler가 있습니다. 먼저 롱텀 스케쥴러는 레다 큐에 어떤 작업을 언제 옮길 작업을 결정합니다. 숏텀 스케쥴러는 메세지 큐에 존재하는 작업들 중 CPU에 올려 실행할 작업을 스케쥴링합니다.

 

Q. CPU Scheduling이 필요한 경우에 대해 이야기해주세요.

멀티 태스킹 환경에서 CPU 시간을 공정하게 배분해야 하고, CPU와 같은 자원의 활용도를 최대화해 효율적으로 사용하기 위함입니다.

 

Q. 선점과 비선점이 무엇인지 이야기해주세요.

선점은 어떤 프로세스가 자원을 가지고 있을 때 다른 프로세스가 해당 자원을 빼앗을 수 있습니다.

비선점은 어떤 프로세스도 한 프로세스가 종료될 때 까지 소유하고 있는 자원을 빼앗을 수 없습니다.

Interrupt

Q. Interrupt 대해 설명해주세요.

인터럽트는 컴퓨터에서 실행 중인 프로그램의 흐름을 일시적으로 중단시키고 특정 조건이나 사건에 대해 처리할 수 있도록 하는 매커니즘입니다.

 

Q. System Call이 무엇인지 설명해주세요.

시스템콜은 사용자 프로그램이 커널 모드에서 실행되는 기능을 요청할 수 있는  OS제공하는 인터페이스 입니다.

 

DeadLock

Q. DeadLock이 무엇인지 설명해보세요

A. 두 개 이상의 프로세스가 필요한 자원 할당을 받기 위해 무한정으로 대기하는 현상입니다.

각 프로세스가 서로 필요한 자원을 이미 선점하고 있기 때문에 서로 필요한 자원에 대해 할당 받기 위해 대기합니다.

 

Q. DeadLock의 발생조건 4가지에 대해 설명해보세요

A. 교착상태의 발생조건은 다음과 같습니다.

첫번째 상호 배제입니다. 한 프로세스가 사용하는 자원을 다른 프로세스는 사용할 수 없는 상태입니다.

두번째는 점유와 대기입니다. 자원을 할당받은 프로세스가 다른 자원을 할당 받기를 대기하는 상태입니다.

세번째로 비선점입니다. 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못하는 상태입니다.

마지막으로 원형 대기입니다. 프로세스가 원의 형태로 자원을 대기하고 있는 상태를 뜻합니다

 

 

Q. 안전상태와 불안전상태에 대해 설명해보세요

A. 안전상태는 안전순서율을 가지고 있어 교착 상태가 일어나지 않는 상태 즉, 모든 프로세스가 자원을 할당 받고 종료될 수 있는 상태입니다. 그에 반해 불안전상태는 안전순서율을 가지고 있지 않아 교착 상태가 발생할 수 있는 상태입니다.

 

Q. DeadLock 회피 기법인 은행원 알고리즘에 대해 설명해보세요

A. 항상 안전상태를 유지하는 알고리즘입니다.

 

 

IPC

Q. IPC에 대해 설명해보세요

A. 프로세스는 각자 독립된 주소 공간을 가지고 있기 때문에 독립적입니다. 하지만 프로세스간 통신이 필요할 경우가 있고 이를 위해 커널이 제공하는 IPC 를 통해 프로세스간 통신과 데이터 전달이 가능합니다.

즉, IPC는 프로세스의 통신을 가능하게 해주는 매커니즘입니다.

 

Q. IPC의 종류에 대해 크게 두가지로 나눠서 설명해보세요

A. IPC는 크게 메세지 전달과 공유 메모리 방식으로 나누어 집니다. 먼저, 메세지 전달방식은 커널 내부의 공유 공간에서 자원이나 데이터를 공유하는 방식입니다. 커널을 이용하기 때문에 구현이 쉽지만 시스템콜이 필요하여 오버헤드가 발생한다는 단점이 있습니다. 또한, 운영체제의 개입으로 동기화 문제가 발생하지 않습니다.

공유 메모리 방식은 메모리 내부에 공유 공간을 만들어 해당 공간에서 자원이나 데이터를 공유하는 방식입니다. 커널을 통하지 않기 때문에 속도가 빠르고 통신이 자유롭다는 장점이 있지만 그렇기 때문에 동기화 문제가 발생하곤 합니다.

 

Q. 공유 메모리 방식에서 semaphore가 필요한 이유를 설명해주세요

A. 공유 메모리 방식은 커널을 통하지 않기 때문에 공유되는 데이터나 자원에 대해 동기화 문제가 발생합니다. 이러한 동기화 문제를 해결할 수 있는것이 세마포어입니다. 세마포어는 특정 자원이나 데이터에 대한 접근을 제어하는 매커니즘입니다. 

 

Q. 소켓을 사용하면 좋은 점에 대해 설명해주세요

A. 소켓은 네트워크 상에서의 프로세스 통신을 가능하게 해줍니다. 소켓을 사용하면 원격 통신도 가능하다는 장점이 있습니다.

 

Race Condition

Q. 동기화가 필요한 이유는 무엇인가요?

A. 동기화는 Race condition을 막고 자원의 일관성을 유지하기 위해 필요합니다. 

 

Q. 임계 구역에 대해 설명해보세요

A. 임계 구역이란 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역입니다.

 

Q. Race Condition이 무엇인지 설명해보세요

A. Race Condition이란 여러 프로세스들이 동시에 데이터에 접근하는 상황에서 어떤 순서로 데이터에 접근하는지에 따라 실행 결과 값이 달라질 수 있는 상황입니다. 따라서 이러한 상황을 막기 위해 동기화가 필요합니다.

 

Q. Race Condition이 발생하는 상황 예시를 들어 설명해보세요

A. 커널 모드에서 데이터를 로드해 실행 중에 인터럽트가 발생해 같은 데이터를 조작하는 경우 발생합니다. 해당 상황에서 인터럽트의 실행 결과값이 덮어씌어지는 오류가 발생할 수 있습니다. 이러한 상황을 막기 위해 커널모드에 작업을 수행하는 동안에는 인터럽트를 disable 시켜 CPU 제어권을 가져가지 못하게 할 수 있습니다.

 

Q. 임계 구역 해결법에 대해 설명해보세요

임계 구역 해결법에는 크게 세가지가 있습니다. 먼저 상호배제입니다. 한 프로세스가 임계 구역에 있으면 다른 프로세스는 임계구역에 들어올 수 없습니다. 다음으로 진행입니다. 만약 임계 구역에 프로세스가 존재하지 않고, 임계구역에 가고자 하는 프로세스가 존재하면 해당 프로세스는 임계 구역에 진입할 수 있어야 합니다. 마지막으로 유한 대기입니다. 임계구역에 들어오기 위해 무한정으로 대기하면 안됩니다.

세마포어 & 뮤텍스

Q. 뮤텍스 락에 대해 설명해보세요

A. 뮤텍스 락이란 상호 배제 동기화를 위한 도구입니다. 보통 공유 자원이 하나일 때 사용하며, lock 전역변수와 wait, release 함수로 구현됩니다. 만약 임계영역에 들어가고 싶은 경우 while문을 통해 lock이 false인지 확인한 후, 임계영역에 도달하면 lock을 true로 처리, 임계 영역에서의 처리가 종료되면 lock을 false로 처리합니다.

하지만, 이러한 방식은 바쁜 대기가 발생할 수 있습니다.

 

Q. 세마포어에 대해 설명해보세요

A. 세마포어도 동기화를 위한 도구중 하나로 상호배제 동기화 뿐만 아니라 실행 순서 제어 동기화에 사용할 수 있습니다. 또한, 여러 개의 공유 자원이 있는 경우에도 사용이 가능합니다. 세마포어는 사용 가능한 공유 자원의 개수를 저장하는 변수 S와 임계 구역에 들어가도 되는지 확인하는 wait 함수, 임계구역 앞에서 가라는 신호를 주는 signal 함수로 구현됩니다.

세마포어도 바쁜 대기가 발생할 수 있지만 block&wakeup 방식으로 구현하면 바쁜 대기 없이 동기화를 처리할 수 있습니다.

 

Q. 실행 순서 제어를 동기화할 수 있는 방법에 대해 설명해보세요

A. 세마포어를 사용하여 실행 순서 제어 동기화를 할 수 있습니다. 세마포어 변수 S를 0으로 초기화하고 먼저 실행할 프로세스 뒤에 signal 함수를, 나중에 실행해야 할 프로세스 앞에 wait 함수를 두면 실행 순서를 제어할 수 있습니다.

 

메모리 관리

Q. OS가 메모리 관리를 해야하는 이유에 대해 설명해주시고, 메모리 관리를 위해 어떤 전략을 사용하는지 설명해주세요.

A. 제한된 메모리로 여러 프로그램을 실행 가능하게 메모리를 효율적으로 사용해야 하기 때문입니다.

메모리 관리에는 스와핑, 페이징, 세그먼테이션과 같은 기법들이 있습니다.

 

Q. 논리적 주소와 물리적 주소에 대해 설명해주세요.

A. 논리적 주소란 프로세스의 독립적인 주소이고 물리적 주소란 실제 메모리 상의 주소입니다.

 

Q. MMU에 의해 논리적 주소가 물리적 주소로 변환되는 과정을 간단히 설명해보실래요?

A. MMU에 의해 논리적 주소에 base 레지스터에 저장된 베이스 주소 값을 더해 물리적 주소로 변환됩니다.

페이징과 스와핑

Q. 스와핑은 무엇인가요?

A. 스와핑은 메모리 관리 기법 중 하나로 디스크 내의 프로그램을 메모리로 올리는 '스왑인(swap-in)' 과 메모리 내의 프로세스를 디스크로 내리는 '스왑아웃(swap-out)'이 있습니다.

스와핑을 통해 사용하지 않는 프로그램은 디스크로 보내고 사용할 프로그램은 메모리로 올려 사용할 수 있습니다.

 

Q. 페이징에 대해 한 번 설명해주실래요?

A. 페이징은 비연속 할당 방식 중 하나로 프로세스가 메모리로 로드될 때 이 페이지들을 메모리의 프레임에 매핑하여 메모리 할당을 관리하는 기법입니다.

각 프로세스마다 1개의 페이지 테이블을 가지게 되며 페이지 테이블에는 페이지의 번호와 매핑된 프레임의 정보가 저장되어 있습니다. 

가상 메모리

Q. Demand Paging의 장점을 이야기해주세요.

A. 디멘드 페이징이란 필요한 페이지만 실제 메모리에 적재하여 사용하는 방식입니다. 실행에 필요한 페이지만 적재하기 때문에 메모리를 효율적으로 사용해 실제 응답속도가 빨라지고 멀티 프로그래밍 체감이 높아집니다.

 

Q. Page Fault이 무엇이고 어떻게 판단하는지에 대해 설명해주세요.

A. page fault란 CPU가 참조하려는 페이지가 메모리에 존재하지 않을 때 발생합니다. 참조하는 페이지가 존재하는지 여부는 페이지 테이블의 valid-invalid bit를 참조하여 알 수 있습니다. 만약 bit가 i라면 메모리 내에 존재하지 않고 v라면 존재하는 것을 알 수 있습니다.

 

Q. Page Fault 발생시, 수행 과정에 대해서 알려주세요.

A. 먼저, 빈공간이 있는 프레임이 있는지 확인합니다. 만약 모든 프레임이 꽉 차있다면 victim frame을 찾습니다. 이는 페이지 교체 알고리즘을 사용해 찾을 수 있습니다. victim frame을 찾으면 swap out 을 시키고 새롭게 필요한 페이지를 swap in 시킵니다. 그 다음 페이지 테이블을 초기화 시키고 프로세스를 재시작합니다.

 

페이지 교체 알고리즘

Q. Victim Frame을 정하는 알고리즘에 대해서 아는대로 이야기해주세요.

A. 페이지 교체 알고리즘에는 FIFO, LRU, Optimal 등이 있습니다.

FIFO는 가장 처음에 들어온 페이지를 내보내는 방식입니다.

LRU는 최근에 가장 사용하지 않은  페이지를 내보내는 방식입니다.

Optimal은 미래에 가장 사용하지 않을 페이지를 내보내는 방식입니다. 가장 효율적인 알고리즘이지만 현실적으로 미래의 페이지 사용 여부를 알 수 없기 때문에 구현할 수는 없습니다.

 

Q. LRU 알고리즘의 구현 방법과 각 방법의 단점에 대해 이야기해주세요.

A. LRU 알고리즘은 두 가지 방법으로 구현할 수 있습니다.

첫번째는 counter  변수를 사용하여 구현할 수 있습니다. 모든 페이지는 counter  변수를 갖고 만약 각 시점에 해당 페이지를 사용하지 않으면 +1을 증가시켜주고 사용이 되면 0으로 초기화 시킵니다. 가장 큰 counter 값을 가지고 있는 페이지를 내보냅니다. 이 방법은 탐색이 필요하고 매번 couter 값을 증가시켜 시간이 오래걸리는 단점이 있습니다.

두번째는 stack을 사용해 구현할 수 있습니다. 스택은 이중 연결 리스트를 사용해 구현합니다. 항상 가장 아래에 존재하는 페이지를 내보내 탐색이 필요하지 않지만 매번 모든 포인터를 업데이트 시켜야 한다는 단점이 있습니다.

728x90