CS 공부

[IT기술 면접]Operating System - OS 면접 질문

미 성 2024. 5. 15. 18:43

 

 

안녕하세요 ! 오늘은 OS 분야 관련
아래의 내용들을 함께 살펴보겠습니다 ! 🌟


📍미리보기 : 프로세스, 스레드, 컨텍스트 스위칭(context switching), 교착상태(dead lock), 은행원 알고리즘, 식사하는 철학자 문제

 

 


 

 

- 프로그램 : 프로그램은 하드디스크에 실행 가능한 파일의 형태로 저장되어 있는 상태.

- 프로세스 : 프로세스는 프로그램이 메모리에 로드되어 실행되고 있는 상태.

 

 

 

 

1. 프로세스와 스레드의 차이

 

 

- 프로세스(process) : 현재 실행 중인 프로그램을 의미.

os가 각 프로세스에 별도의 메모리 공간을 할당하여 생성 ( 고유한 공간과 자원을 할당받아 사용) 

프로세스는 독립적으로 실행되며, 다른 프로세스와 데이터를 공유하지 않음

 

* 일반적 프로그램의 메모리 구조 : 코드, 데이터, 힙, 스택(함수 호출 정보) *

 

 

- 스레드(thread) : 프로세스 내에서 실제로 작업을 수행하는 실행 단위를 의미.

한 프로세스는 여러 스레드를 가질 수 있으며, 이 스레드들은 프로세스의 자원과 메모리를 공유함. 

코드, 데이터, 힙 영역을 공유하지만, 각 스레드는 자신만의 스택을 가짐.

이미 할당된 메모리 공간내에서 실행되기 때문에, 프로세스 생성보다 생성 작업이 가벼움.

자원 공유와 통신이 용이하지만, 오류로 인한 영향 범위가 프로세스 전체로 확장될 수 있음.   

 

 

 


 

 

2. 멀티 스레드 vs 멀티 프로세스

( : 이 둘은 동시에 여러 작업을 수행하는 방법. )

 


 

 

- 멀티 프로세스

 

각각 독립된 메모리 영역을 가진 여러 프로세스가 동시 실행하는 것을 의미

프로세스 간 통신(IPC)을 위한 별도의 메커니즘이 필요

필요에 따라 통신은 가능하지만, 프로세스 간의 독립성이 높아 서로 영향을 미치지 X 

컨텍스트 스위치 시간이 상대적으로 김

프로세스를 새로 만들고, 각각의 메모리 공간을 할당하는 데에는 시간과 자원이 많이 듦.

 

- 멀티 스레드

 

하나의 프로세스 내에서 여러 스레드를 생성하여 동시에 작업을 수행하는 것

스레드 간 통신이 용이하고 리소스 사용이 효율적

하나의 스레드에서 생긴 문제가 다른 스레드에도 영향을 미칠 수 있음

컨텍스트 스위치가 빠름

 

요약 : 멀티 프로세스는 높은 독립성/안정성 but 리소스 사용 및 관리 비용이 높음

멀티 스레드는 리소스 공유와 효율적인 작업이 가능하지만, 전체 프로세스에 영향을 줄 수 있는 위험이 있음.  

 

 

 


 

 

 

3. 스택을 스레드마다 독립적으로 할당하는 이유

 

스택은 함수 호출 시 전달되는 인자, 복귀 주소값 및 함수의 로컬 변수 등을 저장하기 위해 사용되는 메모리 공간. 

스택 메모리 공간이 독립적이다 = 독립적인 함수 호출이 가능하다 = 독립적인 실행 흐름이 가능하다

 

따라서 스레드의 정의에 따라, 독립적인 실행 흐름을 추가하기 위한 최소조건으로 독립된 스택을 할당하는 것이다.   

 

 

 


 

 

 

 

4. PC 레지스터를 스레드마다 독립적으로 할당하는 이유

 

PC(program counter) 레지스터는 다음에 실행할 명령어 주소를 저장하는 역할. 

스레드는 CPU를 할당받았다가 스케줄러에 의해 다시 선점당한다. 즉, os가 스레드 간에 context switch를 수행할 때, 각 스레드의 현재 실행 위치를 정확히 기억해야 추후에 복원할 수 있기 때문.

요약 : 각 스레드가 독립적으로 실행 흐름을 유지할 수 있도록 하기 위함. 

 

 

 

 


 

 

 

 

5. 멀티 프로세스 대신 멀티 스레드를 사용하는 이유

 

* 하나의 프로그램 안에서 여러 작업을 해결하는 것이 더욱 효율적이기 때문 

* context switching 시, 스레드는 stack 영역만 초기화하면 되기 때문에 더 빠름

* 서로 모든 메모리를 공유하기 때문에 데이터 전달이 간단

* 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있음.

(시스템 콜 : 커널 모드로 전환되면서 시간 낭비 발생)

 

 

 

 


 

 

 

 

6. 컨텍스트 스위칭(context switching)이란 무엇인가?

 

 

운영 체제가 현재 실행 중인 프로세스에서 다른 프로세스로 CPU 제어권을 전환하는 과정

 

( 멀티 테스킹이 가능하게 하는 핵심 기능 )

 


 

 

 

 

  

7. context switching의 과정

 

- 현재 상태 저장 (현재 프로세스의 상태를 PCB에 저장)

- 다음 프로세스 선택 : 스케줄러가 결정

- context 불러오기 : (PCB에 저장된) 선택된 다음 프로세스의 저장된 정보를 CPU에 불러옴

- CPU가 새로운 프로세스의 실행을 시작

 

 

 

 

 


 

 

 

8. 교착상태(Dead Lock)란 무엇인가?

 

: 공유 자원을 여러 곳에서 사용하려고 할 때 발생하는 문제.

해당 프로세스들이 서로의 실행을 모두 계속해서 진행할 수 없게 하는 상태

 

컴퓨터 시스템에서 여러 프로세스가 특정 자원을 독점하려고 서로 대기하는 상태. 이렇게 되면 프로세스는 자신이 요구하는 자원을 얻지 못하고 영원히 대기 상태에 머물게 되어 시스템의 효율성이 떨어지게 됨. 

 

 

 


 

 

 

 

9. 데드락 발생 조건 (4가지 조건이 동시에 충족될 때 데드락 발생)

 

* 상호 배제 : 자원은 한 번에 한 프로세스만 사용할 수 있음

* 점유 대기 : 프로세스가 이미 일부 자원을 점유하고 있으면서 다른 프로세스가 점유하고 있는 자원을 추가로 요구하고 대기하는 상황

* 비선점 : 한 프로세스가 점유하는 자원을 다른 프로세스가 강제로 빼앗을 수 없음

* 환형 대기 : 프로세스 A,B,C가 있을 때 A가 B의 자원을, B가 C의 자원을, C가 A의 자원을 대기하는 상황.

 

ex ) 예를 들어, 프로세스 A가 프린터를 사용 중이고(점유), 동시에 디스크 드라이브를 기다리고 있으며(대기), 프로세스 B가 디스크 드라이브를 사용 중이고(점유) 프린터를 기다리고 있다면(대기), 두 프로세스는 서로가 점유한 자원을 기다리며 영원히 진행될 수 없는 상태, 즉 교착 상태에 빠지게 됩니다.

 

- 모든 프로세스가 추가 자원을 기다리는 상태가 되면, 시스템이 멈추게 됨.

 

  

 


 

 

 

 

 

 

10. 교착 상태를 해결하는 방법

 

- 예방 ( prevention )

( 4개중 적어도 하나가 만족되지 않도록 함 )

* 상호 배제 방지 : 여러 프로세스가 공유 자원 사용

* 점유 대기 방지 : 프로세스가 실행되기 전에 필요한 모든 자원을 한 번에 할당받도록 함

* 비선점 방지 : 자원 점유 중인 프로세스가 다른 자원을 요구할 때, 가진 자원을 반납하기.

* 순환 대기 방지 : 모든 자원에 고유한 번호를 할당하고, 순차적으로만 자원을 요청하도록 함.

 

 

- 회피 ( avoidance )

: 시스템이 교착 상태에 빠질 가능성이 있는 상태를 피하도록 알고리즘을 사용하는 방법

대표적인 알고리즘 ) 은행원 알고리즘

: 시스템의 안전 상태를 유지함으로써 교착 상태 발생 가능성을 회피함. ( 한정된 자원을 안전하게 할당하기 위해 설계됨. )

* 시스템의 자원 할당 상태를 검사하여 안전 상태에서만 자원을 할당.

 

 

-> 현재 시스템에 남아있는 자원이 각 프로세스의 요청 자원 합보다 크거나 같은 상태를 의미

안전 상태 : 현재의 자원 요청이 모든 프로세스가 최대 요구 자원량 내에서 자원을 사용할 수 있도록 할당할 수 있는 상태

 

 

- 발견 및 회복 ( detection and recovery)

: 교착 상태를 탐지한 후, 교착상태일 경우 *프로세스 종료* 혹은 *자원 선점*을 통해 해결

 

 

- 무시 ( ignoring )

: 많은 운영 체제는 교착상태를 일으킬 수 있는 조건을 방지하거나 회피하는 복잡한 메커니즘을 구현하는 대신, 교착상태가 매우 드물게 발생한다는 점을 고려하여 교착상태 문제를 무시하기로 결정. 만약 교착상태가 발생하면 시스템을 재시작하는 것으로 대응

 

 

 

 


 

 

 

11. 회피 기법인 은행원 알고리즘이 뭔지 설명해 보세요

 

- 은행원 알고리즘은 은행에서 현금을 할당하는 것에서 유래한 알고리즘.

 

프로세스가 자원을 요구할 때 자원을 할당한 후에도 안정 상태이면 자원을 할당하고, 그렇지 않으면 다른 자원이 해제될 때까지 대기했다가 자원을 할당함.    

 

 

 

 


 

 

 

 

12. 은행원 알고리즘의 단점

 

- 할당할 수 있는 자원 수가 일정해야 함

- 항상 불안전 상태를 방지해야 하므로 자원 이용도가 낮다

- 최대 자원 요구량을 미리 알아야 한다

- 프로세스들은 유한한 시간 안에 자원을 반납해야 한다

 

 

 

 


 

 

13. 기아상태를 설명하는 식사하는 철학자 문제에 대해 설명해 보세요.

 

  

 

1. 철학자들의 상태 : 철학자들은 생각하고, 배가 고프면 식사를 하려고 함. 철학자가 식사를 하기 위해서는 양 옆에 있는 두 젓가락을 모두 사용해야 함. ( = 프로세스가 작업을 수행하기 위해 여러 자원을 필요로 하는 상황 )

 

  

2. 젓가락의 배치 : 각 철학자 사이에는 하나의 젓가락이 놓여 있으며, 각 철학자는 자신의 오른쪽과 왼쪽에 있는 젓가락을 사용할 수 있음. ( 공유 자원과 그 자원에 대한 프로세스의 의존성을 나타냄 )

   

 

3. 식사 시도 : 만약 옆 철학자 중 하나가 젓가락을 사용 중이라면, 두 젓가락을 모두 잡을 수 없게 됨. 이는 프로세스가 자원을 기다리는 상태를 나타냄. 왼쪽이든 오른쪽이든 사용 가능하다면 집어듬. 양쪽의 젓가락을 잡으면 일정 시간만큼 식사를 함. 오른쪽 젓가락을 내려놓고, 왼쪽젓가락을 내려놓음. 그리고 다시 첫 단계로 돌아감.  

 

 

4. 데드락의 가능성 :

( 철학자 문제 교착상태 성립 조건 )

- 상호 배제

- 점유와 대기

- 비선점

- 환형 대기

 

ex ) 모든 철학자가 동시에 양 옆의 젓가락을 잡으려고 할 때, 아무도 식사를 시작할수 없는 상황에 도달할 수 있음. 이는 데드락 상태로, 모든 프로세스가 서로가 소유한 자원을 기다리는 상황임.

 

5. 기아 상태 (starvation) : 특정 철학자가 계속해서 젓가락을 잡지 못해 식사를 하지 못하는 상황. 자원 할당 정책이 공평하지 못해 일부 프로세스가 자원을 할당받지 못하는 상황을 나타냄   

 

 

 


 

 

14. 식사하는 철학자 문제 해결책

 

- 뮤텍스(Mutex) : 상호 배제의 약자. 

: 한 번에 하나의 스레드만 특정 공유 자원을 사용할 수 있도록 함.

 

ex) 어떤 철학자가 젓가락(또는 어떤 공유 자원)을 사용하고 싶을 때, 그 철학자는 먼저 뮤텍스를 '잠금' 상태로 만들어야 합니다. 만약 다른 철학자가 그 젓가락을 이미 사용 중이라면, 뮤텍스는 이미 잠겨 있기 때문에 해당 철학자는 대기해야 합니다. 사용이 끝나면, 젓가락을 사용했던 철학자는 뮤텍스를 '잠금 해제'하여 다른 철학자가 사용할 수 있도록 해야 합니다.

 

 

- 세마포어(Semaphore)

 

: 동시에 여러 스레드가 특정 자원을 사용할 수 있도록 하는 카운터 기반 메커니즘. 만일 세마포어의 카운트가 2라면, 최대 2개의 스레드가 동시에 자원에 접근 가능. 세마포어를 사용할 때, 스레드는 자원에 접근하기 전에 세마포어를 "감소(P연산)" 시키고, 자원 사용이 끝나면 "증가(V연산)"시켜서 다른 스레드도 해당 자원을 사용할 수 있도록 함. 

만일 세마포어의 값이 0이라면, 추가적인 스레드는 대기해야 하는 것.

 

 


 

 

 

15. 임계구역이란 무엇인가요?

 

 

특정 프로세스나 스레드만 접근할 수 있는 공유된 자원. 뮤텍스나 세마포어 같은 도구들이 임계구역에 대한 접근을 제어하는 데 사용될 수 있음.