백엔드 신입 면접 대비 - Operation System

Jay Lee·2022년 12월 26일
0

Interview

목록 보기
2/7

💡 Process의 구조에 대해 설명해주세요.

프로세스는 크게 code, data, heap, stack 영역으로 나누어져 있습니다.
code 영역은 컴파일된 소스 코드가 저장되는 영역입니다.
data 영역은 전역 변수 및 초기화된 데이터가 저장되는 영역입니다.
heap 영역은 코드에서 동적으로 생성되는 데이터가 저장되는 영역입니다.
stack 영역은 함수 호출 시 발생되는 데이터 또는 로컬 변수 등 임시데이터가 저장되는 영역입니다.


💡 Stack 영역과 Heap 영역의 차이에 대해 설명해주세요.


💡 Process와 Thread에 대해 설명해주세요.

프로세스는 운영체제로부터 시스템 자원을 할당 받아 실행되고 있는 프로그램을 의미하고 쓰레드는 프로세스 내에서 실질적인 작업을 담당하는 단위를 뜻합니다. 프로세스는 OS로 부터 독립된 메모리 영역을 할당받고 스레드는 프로세스 내에서 Stack과 Register만 따로 할당받고 나머지 영역은 공유합니다.

  • Register:

💡 Multi-Process 방식과 Multi-Thread 방식을 비교해주세요.

Multi-Process 방식은 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 방식입니다. 이는 Google Chrome과 같이 여러 프로세스 중 하나에 문제가 발생하더라도, 다른 프로세스에는 영향을 미치지 않는다는 장점이 있지만 프로세스 간의 Context Switching에 의한 Overhead가 발생하고, 프로세스간 통신 비용이 많이 든다는 단점이 있습니다.
Multi-Thread 방식의 경우 하나의 응용프로그램을 여러 개의 스레드로 구성하여 각 스레드가 하나의 작업을 처리하도록 하는 방식입니다. multi-thread의 경우 한 프로세스 내에서 동작하기 때문에 시스템 자원을 절약할 수 있으며, thread간의 heap 영역을 공유하기 때문에 통신 비용이 적고 context switching 비용 또한 적습니다. 하지만 multi-thread의 경우 설계하기가 어렵고 동기화 문제를 신경써야하며 하나의 스레드에 문제가 발생하면 전체 프로세스에 영향을 미친다는 단점이 있습니다.


💡 동시성과 병렬성의 차이에 대해 설명해주세요.

동시성(Concurrency)은 하나의 CPU가 빠르게 여러 프로세스를 번갈아 가며 실행시켜 마치 동시에 실행되는 것 같이 보이는 것을 의미합니다. 반면 병렬성(Parrallelism)은 실제로 멀티코어 환경에서 여러 작업이 동시에 처리되는 것을 의미합니다.


💡 Multi-Thread 환경의 주의사항을 설명해주세요.


💡 Java에서의 Multi-Thread 방식을 설명해주세요.


💡 Context Switching에 대해 설명해주세요.

Context Switching이란 CPU가 현재 진행하고 있는 Task(Process or Thread)의 상태를 Register에 PCB 형태로 저장하고, 다음 Task의 PCB 정보를 읽어 적용하는 과정을 의미합니다.


💡 PCB 구조에 대해 설명해주세요.

Process Id: 프로세스의 ID값
Process State: 프로세스의 상태
Process Counter: 다음 실행할 명령어의 주소값
Register Information: 레지스터 관련 정보
Scheduling Information: 스케줄링 및 프로세스 우선 순위
Memory Related Information: 할당된 자원 정보
Accounting Information: CPU 사용시간, 실제 사용 시간
Status Information related I/O: 입출력 상태 정보


💡 Thread-Safe에 대해 설명해주세요.

Thread-Safe란 Multi-Thread/Multi-Process 환경에서 어떤 자원에 여러 스레드에서 접근해도 문제가 없음을 의미합니다. 즉, 멀티 스레드 환경에서도 정상적으로 동작하는 코드를 Thread-Safe하다고 말합니다.


💡 Critical Section에 대해 설명해주세요.

Critical Section이란 Multi-Thread/Multi-Process 환경에서 프로세스간에 공유 자원을 접근하는데 있어 문제가 발생하지 않도록 한번에 하나의 프로세스만 이용하게끔 보장해줘야 하는 영역을 의미합니다.
임계 영역 문제를 해결하기 위해서는 3가지 조건을 충족해야합니다.

1. 상호 배제 (Mutual Exclution) - 하나의 프로세스가 임계 영역에 접근했을 때, 나머지 프로세스들은 접근할 수 없어야 한다.
2. 진행 (Progress) - 임계 영역에 접근 중인 프로세스가 없는 상태에서 여러 프로세스가 접근하고자 하면 그 중 하나를 결정 할 수 있어야 한다.
3. 한정 대기 (Bounded Waiting) - 다른 프로세스의 Starvation을 방지하기 위해, 한번 임계 구역에 접근한 프로세스는 패널티를 받아야 한다.


💡 Mutex와 Semaphore의 차이점 대해서 설명해주세요.

Mutex와 Semaphore의 가장 큰 차이점은 동기화 대상의 개수입니다. Mutex의 경우 Key 역할을 하는 하나의 Object를 생성하고 해당 Object를 획득한 프로세스만 해당 Critical Section에 접근할 수 있도록 하는 반면 Semaphore의 경우 가용 가능한 동기화 대상을 의미하는 변수 하나를 두고 해당 공통으로 관리하여 다른 프로세스의 접근을 방지합니다.


💡 동기와 비동기의 차이에 대해 설명해주세요.

profile
Data Engineer

0개의 댓글