운영체제 - 면접

1. 운영체제

1) 운영체제란 무엇인가요

운영체제란 하드웨어 위에 설치되어 하드웨어 계층과 다른 소프트웨어 계층을 연결하는 소프트웨어 계층입니다. 컴퓨터 시스템의 자원을 관리하고, 사용자가 컴퓨터를 사용할 수 있는 환경을 제공하는 역할을 수행합니다.

2) CPU를 설명해주세요.

CPU는 컴퓨터의 뇌 역할을 한다고 볼 수 있으며, 컴퓨터에서 프로그램을 실행하는 데 필요한 연산을 처리하고 수행합니다. 다른 말로 프로세서라고도 합니다.

3) 메모리 계층 구조를 설명해 주세요.

메모리는 데이터를 저장하기 위한 기억장치로, 휘발성 메모리인 주 기억장치와 비휘발성 메모리인 보조 기억장치가 있습니다. 주 기억장치는 메인 메모리를 의미하며 일반적으로 RAM을 가르킵니다. 보조기억장치는 SSD, HDD등이 해당됩니다.

메모리의 계층구조는 레지스터>캐시>RAM>하드디스크가 있으며 레지스터가 속도가 가장 빠릅니다.

레지스터: CPU가 사용자 요청을 처리하는 데 필요한 데이터를 임시로 저장하는 기억장치다. CPU 내부에 존재하며 접근 속도가 빠릅니다.

캐시 메모리: CPU와 RAM 사이의 속도 차이를 해결하기 위한 기억장치다. CPU 내부에 위치하며 접근 속도가 레지스터 다음으로 빠르다.

RAM: 컴퓨터에서 프로그램을 실행할 때 필요한 정보를 저장한다. CPU에서 접근 속도가 하드 디스크보다 빠르고, 휘발성 기억장치다. 보통 메모리라고 할 때 RAM을 의미하는 경우가 많다.

하드 디스크: 사용자가 필요한 데이터와 프로그램을 저장하고, 비휘발성 기억장치이다.

2. 커널과 시스템 콜

1) 커널을 설명주세요.

커널은 OS의 핵심 요소로, 컴퓨터 하드웨어와 프로세스의 보안, 자원 관리, 하드웨어 추상화 같은 중요한 역할을 수행합니다. 특히 자원 관리를 위해 CPU 스케줄링, 메모리 관리, 입출력 관리, 파일 시스템 관리 등을 담당합니다.

2) 시스템 콜을 설명해 주세요.

시스템 콜을 커널 모드와 사용자 간에 필요한 정보를 주고받기 위해 호출하는 함수입니다. OS는 사용자가 하드웨어의 주요 자원에 쉽게 접근할 수 없게 커널 모드와 사용자 모드로 구분합니다. 그래서 프로세스에서 자원에 접근해 작업을 처리할 때는 시스템 콜로 필요한 요청을 하고 그에 대한 결과 값을 돌려 받게 됩니다.

3. 프로세스

1) 프로세스에 대해 설명해 주세요.

프로세스는 컴퓨터에서 실행중인 하나의 프로그램을 의미합니다. 프로그램은 특정한 작업을 수행하기 위한 명령어의 집합입니다. OS는 프로그램을 실행하면서 디스크에 저장된 데이터를 메모리로 로드합니다. 프로세스는 OS로부터 독립된 메모리 영역(코드, 데이터, 스택, 힙)을 할당받으며, 다른 프로세스의 메모리 영역에 접근할 수 없습니다.

2) 프로세스의 메모리 구조를 설명해 주세요.

프로세스의 메모리 영역은 스택, 힙, 데이터, 코드로 나눌 수 있습니다.

스택은 지역 변수와 함수의 매개변수가 저장되는 영역이고,

힙은 동적 메모리 할당이 일어나는 영역입니다.

데이터 영역에는 전역 변수, 정적 변수, 배열, 구조체 등이 저장됩니다. 데이터 영역은 다시 BSS 영역과 데이터 영역으로 나눌 수 있습니다.

마지막으로 코드 영역은 실행할 코드가 기계어로 컴파일되어 저장되는 공간입니다.

3) 프로세스와 스레드의 차이점을 설명해 주세요.

프로세스는 실행 중인 하나의 프로그램을 의미하며 실행의 단위라고 할 수 있습니다. 반면에 스레드는 프로세스 내에서 실행되는 흐름의 단위를 의미합니다. 그래서 프로세스는 독립적인 메모리 영역을 갖지만, 스레드는 스택 영역만 독립적이고, 그 외 영역은 다른 스레드와 공유합니다.

4) 스택 오버플로우와 힙 오버플로우에 관해 설명해 주세요.

스택 오버플로우는 메모리에서 스택 영역이 힙 영역을 침범할 때 발생합니다. 예시로 과도한 재귀호출이 있습니다. (스택 영역은 지역변수와 함수의 매개변수가 저장되는 영역)

힙 오버플로우는 힙 영역이 스택 영역을 침범하는 경우입니다. 예시로는 과도한 메모리 할당이 있습니다.

4. PCB

1) PCB가 무엇인지 설명해 주세요.

PCB는 Process Control Block의 약자로, 프로세스에 대한 정보를 저장하는 구조체입니다.

저장되는 정보로는 프로세스의 고유 아이디인 PID, 프로세스가 다음으로 실행해야 하는 명령어의 주소값인 PC, CPU의 레지스터에 저장되는 정보 등이 있습니다.

5. 프로세스와 스레드

1) 멀티 프로세스와 멀티 스레드의 차이점을 설명해 주세요.

멀티 프로세스는 응용 프로그램 하나를 프로세스 여러 개로 구성하는 것입니다.

반면에 멀티 스레드는 한 프로세스 안에서 여러 스레드로 작업을 처리하는 것입니다.

_

프로세스는 독립적인 메모리 영역을 갖기 때문에 자원 공유와 통신을 하려면 IPC를 활용해야 합니다.

스레드는 자원 공간을 공유하므로 스레드 간 통신과 자원 공유가 간단하고 프로세스에 비해 콘텍스트 스위칭 비용이 적게 들지만, 동기화가 필요합니다.

2) 동시성과 병렬성을 비교해 주세요.

동시성은 하나의 코어에서 작업을 번갈아 가면서 실행해 여러 작업을 처리하는 것을 의미합니다. 이 방식은 CPU에서 처리 중인 작업을 변경하기 위해 컨텍스트 스위칭이 일어나 오버헤드가 발생합니다. 반면에 병렬성은 여러 코어에서 여러 작업을 처리하는 것을 의미합니다. 즉, 물리적인 시간 관점에서 여러 작업이 동시에 처리되는 방식입니다.

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

컨텍스트 스위칭이란 CPU가 처리중인 프로세스를 변경하는 것을 의미합니다.

CPU는 하나의 프로세스만 처리할 수 있어 멀티 프로세스 환경에서는 컨텍스트 스위칭이 발생합니다.

CPU 스케줄러에 의해 인터럽트가 발생하면 실행 상태의 프로세스가 준비 또는 대기 상태로 전환되고, 다음에 실행할 프로세스가 실행 상태로 전환됩니다. 이 때 레지스터에 저장된 프로세스 정보가 바뀌면서 오버헤드가 발생하게 됩니다.

+ 멀티 프로세스의 단점인 오버헤드는 멀티 스레드로 보완할 수 있음

4) 멀티 프로세스에서 컨텍스트 스위칭과 멀티 스레드에서 컨텍스트 스위칭의 차이를 설명해 주세요.

가장 큰 차이점은 멀티 스레드에서 컨텍스트 스위칭 할 때 멀티 프로세스보다 오버헤드가 적게 발생한다는 점입니다. 멀티 프로세스는 프로세스별로 고유한 메모리 영역을 갖는 반면, 멀티 스레드는 스택 영역을 제외한 메모리 영역을 공유합니다. 그래서 레지스터에 로드해야 하는 데이터 양이 적어서 오버헤드가 적게 발생합니다.

6. 프로세스 동기화

1) 프로세스 동기화에 대해 설명해 주세요.

프로세스 동기화는 여러 프로세스 또는 스레드가 하나의 공유 자원에 접근해도 일관성을 유지하는 것을 의미합니다. 공유 자원에 접근하는 코드를 임계 영역이라고 하며, 임계 영역에 대한 상호배제 기법이 잘 이뤄져야 프로세스 동기화를 할 수 있습니다. 상호배제 기법으로는 뮤텍스와 세마포어가 있습니다.

2) 뮤텍스와 세마포어의 차이점을 설명해 수제요.

뮤텍스와 세마포어는 프로세스 동기화를 위한 상호배제 기법입니다. 이 중 뮤텍스는 락을 가진 하나의 프로세스만 임계 영역에 접근할 수 있게 하는 동기화 방식입니다. 이 방식을 사용하면 임계 영역에 접근하려는 프로세스는 반복문을 돌며 임계 영역에 접근 가능한지 확인하게 되는데, 이러한 현상을 스핀락이라고 합니다.

반면에 세마포어는 임계 영역에 특정 개수의 프로세스가 접근할 수 있게 제어하는 방식입니다. 임계 영역에 접근이 불가능하면 해당 프로세스는 대기 상태로 들어가고, 이후 임계 영역을 처리중이던 프로세스가 임계 영역을 나가면서 대기 상태인 프로세스를 깨우게 됩니다.

+ 뮤텍스와 세마포어의 목적은 동기화이다.

3) 스레드 안전의 의미가 무엇이며 이를 구현하는 방법은 무엇인가요?

스레드 안전은 하나의 자원 또는 객체에 여러 스레드가 접근해도 프로그램을 실행하는 데 문제가 없는 것을 의미합니다. Swift에서는 DispatchSemaphore, Custom Serial Queue, NSLock, Dispatch Barrier로 구현할 수 있습니다.

7. CPU 스케줄링 알고리즘

1) 비선점형 스케줄링 알고리즘과 선점형 스케줄링 알고리즘을 설명해 주세요.

비선점형 스케줄링은 하나의 프로세스가 실행 중이면 해당 프로세스가 종료될 때까지 다른 프로세스가 실행될 수 없습니다. FCFS 스케줄링과 SJF 스케줄링이 대표적인 예입니다.

선점형 스케줄링은 하나의 프로세스가 실행 중일 때 스케줄러가 실행중인 프로세스를 중단시키고 다른 프로세스를 실행할 수 있습니다. 대표적인 예로 RR 스케줄링과 SRTF 스케줄링이 있습니다.

8. 비연속적 메모리 할당

1) OS의 메모리 관리 전략 중 페이징과 세그먼테이션을 비교해서 설명해 주세요.

페이징과 세그먼테이션은 비연속 메모리 할당 방식으로, 프로세스가 메모리에 연속적으로 할당될 때 발생할 수 있는 문제를 보완하는 기법입니다.

페이징은 논리 메모리 영역과 물리 메모리 영역을 같은 크기로 나누고 각각의 영역을 페이지와 프레임이라고 일컫습니다. 이 기법은 메모리 할당 문제를 해결할 수 있지만, 내부 단편화가 발생할 수 있습니다.

반면에 세그먼테이션은 프로세스를 논리적 단위로 분할합니다. 프로세스의 메모리 영역을 분할했기 때문에 메모리 보호가 쉽지만 외부 단편화 문제가 발생할 수 있습니다.

9. 가상 메모리

1) 가상 메모리가 무엇인지 가상 메모리가 필요한 이유를 설명해 주세요.

가상 메모리는 프로세스 전체가 아닌 일부만 메모리 영역으로 옮기고 나머지는 보조 기억장치인 디스크에 옮겨 실제 메모리 영역보다 더 큰 영역을 사용하는 것처럼 보이게 하는 방식입니다. 가상 메모리는 한정된 메모리의 영향을 덜 받고 많은 프로세스를 실행하기 위해 필요합니다. 가상 메모리를 구현하는 방법으로는 요구 페이징이 있습니다.

2) 요구페이징이 무엇인지 설명해주세요.

프로세스에서 필요한 페이지만 메모리에 로드하는 방식으로, 페이지 폴트가 발생할 수 있습니다.

3) 페이지 폴트는 무엇인가요.

프로그램을 실행하다 물리 메모리에 필요한 페이지가 없을 때 이를 페이지 폴트라고 합니다.

4) 스레싱이 무엇인지 설명해 주세요.

스레싱이란 가상 메모리 환경에서 다중 프로그래밍 정도가 높아지면서 페이지 폴트가 빈번히 발생해 CPU 이용률이 오히려 낮아지는 증상을 의미합니다. 즉, 실제 시스템이 작동되는 시간보다 페이지 교체가 빈번히 일어나 발생하는 문제입니다. 이러한 문제를 예방하기 위해 워킹세트를 설정할 수 있습니다. 워킹 세트는 지역성을 기반으로 자주 사용되는 페이지를 저장해 두는 것을 의미합니다.

10.캐시 메모리

1) 캐시 메모리에 대해 설명해 주세요.

캐시 메모리는 CPU와 메모리 간 속도 차이를 좁히려고 사용하는데, CPU에서 자주 사용하는 데이터를 접근 속도가 빠른 캐시 메모리에 저장합니다. 이때 적중률을 높이기 위해 자주 사용하는 데이터를 저장하는 지역성 원리를 사용합니다.

Last updated