본문 바로가기

Computer Science

[운영체제] CS 질문 리스트 정리

반응형
SMALL

 

면접 준비 과정에서 여러 블로그 글을 참고하여 모은 운영체제 질문들과 나름대로 공부하고 답을 달아본 목록들이다.

이번 포스팅만큼은 공유의 목적보다는 개인이 과거의 공부 기록을 복습해보는 느낌으로 참고해주기 바란다!

 

🗂️ 프로세스와 스레드의 차이에 대해 설명해주세요.

프로세스는 실행 중인 프로그램으로, 독립적인 특징을 가지고 있어 메모리 영역을 다른 프로세스와 공유하지 않습니다.
스레드는 프로세스 내 실행되는 여러 흐름의 단위로, 스택(stack)을 제외한 메모리 영역을 다른 스레드와 공유합니다.

 

✍️ 프로세스는 최소 1개의 스레드를 가지고 있고, 스레드는 프로세스 내에서 프로세스가 할당받는 자원을 이용한다.

 

 

스레드가 스택만 공유하지 않는 이유는 무엇인가요?

스택은 함수 호출 시 전달되는 인자, 복귀 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간입니다. 스레드도 작업의 단위이므로, 최소한의 독립적인 실행을 가능하게 하기 위해 스택은 독립적으로 할당합니다.

 

 

프로세스 간에 데이터를 공유하기 위해서는 어떻게 해야할까요?

프로세스가 다른 프로세스에게 접근하기 위해 IPC를 사용합니다.

 

 

IPC에 대해 설명해주세요.

Inner Process Communication의 약어로, 프로세스 간 통신을 위한 방법입니다.
종류로는 익명 파이프, 네임드 파이프, 메시지 큐, 공유 메모리, 소켓 등이 있습니다.

 

✍️ 익명 파이프: 두 프로세스가 통신할 수 있게 하는 전달자로서 단방향 통신만을 허용한다. (같은 부모 프로세스를 가지는 범위에서만 가능)

✍️ 네임드(Named) 파이프: 익명 파이프를 확장한 것으로, 서로 다른 프로세스들이 파이프의 이름만 알면 통신이 가능하다. (읽기/쓰기 동시 불가능)

✍️ 메시지 큐(Message Queue): Queue를 사용하며, 데이터에 번호를 붙여 여러 프로세스가 동시에 데이터를 사용할 수 있게 한다.

✍️ 공유 메모리: 여러 프로세스가 함께 사용하는 메모리로, IPC 중 가장 빠르다.

✍️ 소켓: 동일한 호스트 운영 체제에서 실행되는 프로세스 간 데이터를 교환하기 위한 데이터 통신 엔드 포인트이다. (원격에서 사용)

 

 

메모리 구조에 대해 설명해주세요.

메모리 구조는 코드(Code), 데이터(Data), 스택(Stack), 힙(Heap)으로 구성됩니다.

 

✍️ Code: 소스코드 저장

✍️ Data: 정적변수와 전역변수 할당 (프로그램의 시작과 함께 할당되고, 종료와 함께 소멸)

✍️ Stack: 함수의 호출 정보, 지역 변수, 매개 변수 등 저장 (컴파일 시점에 크기 결정)

✍️ Heap: 사용자에 의해 동적으로 데이터 할당 (런타임 시점에 크기 결정)

 

 


🗂️ 멀티 프로세스와 멀티 스레드의 특징에 대해 설명해주세요.

멀티 프로세스는 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향이 가지 않는다는 장점이 있습니다. 하지만 작업량이 많아지면 오버헤드가 발생하고, 프로세스 간 복잡한 통신이 필요하다는 단점도 있습니다.

멀티 스레드는 자원을 공유하여 비용이 절감되고, 컨텍스트 스위칭이 빠르다는 장점이 있습니다. 하지만 하나의 스레드의 장애가 다른 스레드에 영향을 줄 수 있고, 자원 공유에 대해 동기화 작업이 필요하다는 단점도 있습니다.

 

 

컨텍스트 스위칭(Context Switching)에 대해 설명해주세요.

기존 프로세스의 컨텍스트(Context)를 저장하고, 다음 프로세스를 실행할 수 있도록 컨텍스트(Context)를 교체하는 작업입니다.

 

 

컨텍스트(Context)는 무엇인가요?

CPU, 메모리에서의 프로세스 또는 스레드의 상태를 의미합니다.

 

 

컨텍스트 스위칭은 언제 발생하나요?

다른 프로세스가 실행될 때, 즉 기존 프로세스에 대한 인터럽트(interrupt)가 일어날 때 발생합니다.

 

 

멀티 스레드의 동시성과 병렬성에 대해 설명해주세요.

동시성은 멀티 작업을 위해 싱글 코어에서 여러 개의 스레드가 번갈아 실행되는 것입니다.
병렬성은 멀티 작업을 위해 멀티 코어에서 1개 이상의 스레드를 포함하는 각 코어들을 동시에 실행하는 것입니다.

 

 

멀티 스레드 환경에서의 주의사항은 어떤 것이 있을까요?

다수의 스레드가 동시에 공유 자원에 접근할 때 데드락 또는 동시성 문제가 발생하지 않도록 주의해야 합니다. 문제를 피하는 방법으로 상호배제와 동기화 기법이 있습니다.

 


🗂️ 데드락에 대해 설명해주세요.

둘 이상의 프로세스가 자원을 점유한 상태로 서로 다른 프로세스가 점유하는 자원을 요구하며 무한정 기다리는 상황입니다.

 

✍️ 예시로, 자원 A를 가진 프로세스 P1자원 B를 가진 프로세스 P2가 있을 때, P1은 자원 B를, P2는 자원 A를 필요로 하여 서로 기다리는 상황이 있습니다.

 

 

데드락의 발생 조건에 대해 설명해주세요.

상호 배제, 점유 대기, 비선점, 순환 대기가 있습니다.

상호 배제는 한 번에 한 프로세스만 공유 자원에 접근 가능한 것입니다.
점유 대기는 공유 자원에 대한 접근 권한을 가진 채로, 다른 자원에 대한 접근 권한을 요구하는 것입니다.
비선점은 다른 프로세스의 자원을 뺏을 수 없는 것입니다.
순환 대기는 둘 이상의 프로세스가 자원 접근을 기다릴 때, 그 관계가 순환적인 구조인 것입니다.

 

✍️ 상호 배제: 한 번에 하나씩!

✍️ 점유 대기: 일단 하나 가지고 있긴 한데, 다른 하나도 필요해.

✍️ 비선점: 다른 P가 가지고 있는 자원은 못 가져.

✍️ 순환 대기: 둥글게 둥글게 서로 가진 자원을 탐내는 중.

 


🗂️ 콘보이 현상(Convoy Effect) 현상에 대해 설명해주세요.

작업 시간이 긴 프로세스가 먼저 도착하여, 다른 프로세스의 실행 시간이 전체적으로 늦춰져 전체 효율성이 떨어지는 현상입니다.

 

 

콘보이 현상이 일어나는 스케줄링 기법은 무엇이 있을까요?

FCFS 스케줄링 기법이 있습니다. 큐에 먼저 들어온 순서부터 실행되기 때문에, 작업 시간이 긴 프로세스가 짧은 프로세스보다 먼저 들어온다면, 전체적인 실행시간이 길어지면서 콘보이 현상이 발생합니다.

 


🗂️ 선점형 스케줄링과 비선점형 스케줄링의 차이를 설명해주세요.

선점형 스케줄링은 하나의 프로세스가 다른 프로세스를 대신하여 CPU를 차지할 수 있고,
비선점형 스케줄링은 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없는 것입니다.

 


🗂️ 동기와 비동기의 차이를 설명해주세요.

동기는 순차적, 직렬적으로 작업을 수행하고,
비동기는 병렬적으로 작업을 수행합니다.

 

✍️ 예를 들어, 서버에서 데이터를 가져와 화면에 표시할 때, 동기는 서버에 데이터를 요청하고 데이터가 응답할 때까지 이후 작업들은 블로킹됩니다. 비동기는 데이터가 응답할 때까지 기다리지 않고, 즉시 다음 작업을 계속 수행합니다.

✍️ 동기: 연관된 작업 수행

✍️ 비동기: 독립적으로 작업 각자 수행

 


🗂️ 임계영역(Critical Section)에 대해 설명해주세요.

프로세스 간에 공유 자원에 접근하는 데 있어, 문제가 발생하지 않도록 한 번에 한 프로세스만 이용하도록 보장해주는 영역입니다.

 

 

임계영역 문제를 해결하기 위한 조건에 대해 설명해주세요.

상호배제, 진행, 한정 대기가 있습니다.

상호배제는 하나의 프로세스가 임계영역 내에 있다면, 다른 프로세스는 들어갈 수 없는 것입니다.
진행은 임계영역 내에 프로세스가 없는 상태에서 어떤 대기 중인 프로세스가 들어갈지 결정해주는 것입니다.
한정 대기는 다른 프로세스의 기아를 막기 위해 한 번 임계영역에 들어간 프로세스는 재진입에 제한을 두는 것입니다.

 

 

뮤텍스(Mutex)와 세마포어(Semaphore)의 차이를 설명해주세요.

뮤텍스는 락(lock)을 사용하여 프로세스 또는 스레드가 단독으로 실행하게 합니다.
세마포어는 공유 자원에 세마포어 변수만큼의 프로세스 또는 스레드가 접근할 수 있도록 합니다.

 

✍️ 뮤텍스: 0과 1의 값만 갖는 이진 세마포어 역할과 같다. (락 사용)

✍️ 세마포어: 0과 1 외의 값도 가질 수 있는 것으로, 2개 이상의 값을 가지면 카운팅 세마포어라고 한다. (변수 값 사용)

 


🗂️ 페이지 교체 알고리즘에 대해 설명해주세요.

페이징 기법을 사용하여 메모리를 관리하는 운영체제에서 페이징 부재가 발생했을 때, 어떤 페이지 프레임을 선택하여 교체할 것인지 결정하는 방법입니다.

 

 

페이지 교체 알고리즘 종류에는 어떤 것들이 있나요?

FIFO 알고리즘은 메모리에 올라온 페이지 중 가장 오래된 것을 교체합니다.
최적화(Optional) 알고리즘은 가장 오랫동안 사용되지 않을 페이지를 교체합니다. 미래를 예측해야 하기 때문에 주로 연구에서 많이 사용됩니다.
LRU 알고리즘은 가장 오랫동안 사용되지 않은 페이지를 교체합니다.
LFU 알고리즘은 참조 횟수가 가장 적은 페이지를 교체합니다.
MFU 알고리즘은 참조 횟수가 가장 많은 페이지를 교체합니다.

 


🗂️ 경쟁상태가 무엇인지 설명해주세요.

2개 이상의 프로세스 또는 스레드들이 하나의 자원에 동시에 접근하여 경쟁하는 상태입니다.

 


Refrences

https://velog.io/@woody_/%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EC%8A%A4%EC%9C%84%EC%B9%ADcontext-switching

https://won-percent.tistory.com/150

https://velog.io/@bagt/%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%8A%A4%EB%A0%88%EB%93%9C%EC%99%80-context-switching#-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EC%8A%A4%EC%9C%84%EC%B9%AD-context-switching

https://csj000714.tistory.com/693

https://m.blog.naver.com/demonic3540/221671407431

https://ikcoo.tistory.com/83

https://so-kyte.tistory.com/95

반응형
LIST