Operating-System 기술 면접 분석
기술 면접 대비 핵심 질문
카테고리: Operating-System
Q. 프로세스(Process)와 스레드(Thread)의 차이를 메모리 관점에서 설명해주세요.
핵심 답변
프로세스는 운영체제로부터 메모리와 자원을 할당받아 실행되는 독립적인 프로그램의 단위입니다. 각 프로세스는 독립된 코드, 데이터, 스택, 힙 영역을 가집니다. 반면, 스레드는 프로세스 내에서 실행되는 흐름의 단위로 프로세스의 스택 영역만 개별적으로 가지고 힙, 데이터, 코드 영역을 서로 공유합니다.
꼬리 질문
- Q. 멀티 스레드 프로그래밍 시 발생할 수 있는 문제점과 해결책은 무엇이 있나요?
- A: 공유 자원에 동시에 접근하면서 발생하는 경쟁 상태(Race Condition)와 데드락(Deadlock)이 있습니다. 이를 막기 위해 뮤텍스(Mutex), 세마포어(Semaphore) 등을 사용해 임계 구역(Critical Section)에 대한 동기화 처리를 진행합니다.
Q. 프로세스와 스레드의 차이는?
핵심 답변
프로세스는 OS로부터 공간에 메모리를 할당받아 디스크에서 나와 실제 실행되고 있는 고독하고 거대한 프로그램의 자체 단독 실행 덩어리(메모리 독립 격리 영역: 스택, 힙, 영역 개별 탑재체) 단위입니다. 반면 스레드는 프로세스의 거대 안방 내부에 기생하여 자원(코드, 데이터, 힙 파이프)들을 공용으로 공유한 채 CPU 핵심 타임 슬롯만 쪼개 빼다 쓰는 더 가볍고 미세한 논리 실행 흐름 갈래 최소 단위 유닛을 뜻합니다.
꼬리 질문
- Q. 왜 크롬 브라우저는 주요 각 창 브라우저 탭들을 띄울 때 스레드로 편하게 안 묶고 무식하게 크고 무거운 단독 메모리 분할 멀티 프로세스 정책을 선호하나요?
- A: 스레드는 가벼운 반면 안방을 통째로 쉐어하기에 한 놈 버그가 터지면 형제 스레드, 나아가 본체 프로세스가 전체 감염 다운(All Death) 먹는 연쇄 파멸 구조라 그렇습니다. 브라우저는 어떤 하나의 렌더링 탭 창이 악성 스크립트로 폭주 에러를 뱉어도, 옆에서 결제 중이던 나머지 탭은 안전하게 생존 살려놔야 하는 고립 강건성(Robustness)이 최우선이므로 공간을 포기하고 분단 아키텍쳐를 씁니다.
Q. 동기화 문제를 해결하는 방법은?
핵심 답변
경쟁 상태 데이터 불일치 격리 오류를 다스리기 위한 무결성 코딩락 메커니즘을 적용합니다. 가볍게 **스핀락(Spin Lock)**으로 빙빙 순회 조회 무한 대기로 락 확인 무식 처리 대조 진입방식이 있고, 핵심 구간 타깃에 1개 열쇠만 부여하여 절대 단일 방어 접근을 취하는 뮤텍스(Mutex) 권한, 그리고 은행 창구 방식처럼 보유 열쇠 구역 통계 잔량을 남겨 여러 개의 구단 쓰레드 통행 범주 제약을 방역 지정 컨트롤 하는 세마포어(Semaphore) 기술 제재를 칩니다. 프로그래밍 플랫폼 단에선 더 세밀 모니터(Monitor)락 기법의 최적화를 걸어 튜닝합니다.
꼬리 질문
- Q. 스핀락(무한 루핑 대기 상태 대기조) 통제가 무조건 안 좋은 거대 낭비 기법인가요, 아니면 스핀 대기 체제가 뮤텍스 세마포어보다 성능이 압도할 순간이 있나요?
- A: CPU 연산을 까먹으며 빙빙 대조하지만, 임계 점검 구문 돌파 처리 로직 자체가 극히 짧아 1초면 풀리는 상황이라면 스핀락 채택이 무조건 압살입니다. 만일 뮤텍스로 블록 걸리면 스레드 본체를 자체 휴면 슬립시켰다, 문열릴때 다시 락 깨고 모셔와 연관 깨우는 Context Switch 오버헤드 전환 타임이 끔찍하게 크기때문에 연산이 미친듯이 찰나면 빙빙 대기가 킹왕짱 효율을 발휘합니다.
Q. 멀티프로세스 vs 멀티스레드 차이는?
핵심 답변
모두 작업 처리를 효율 병렬 처리하기 위한 기법입니다.
- 멀티프로세스: 각각 개별 분단 독립적 메모리 파티션을 부여받았기에 서로 영향 간섭이 철저하고 안정성이 매우 견고하지만 공유 데이터 분기 통신(IPC 파이프 등) 비용이 비상식적으로 높고, CPU 스위칭 부담 오버헤드가 극렬 큽니다.
- 멀티스레드: 스레드간 자간 메모리 공유 구역이 확보돼 찰나에 고립 데이터 전환이 가벼우며 빠르고 효율이 좋지만, 락(Lock) 무결 제어 코드가 어렵고 하나가 터지면 프로세스 전체 폭발이라는 안정성 딜레마를 갖고 있습니다.
꼬리 질문
- Q. 자원과 정보를 공유할 때(IPC 기법 등) 두 구조의 차이점은?
- A: 멀티스레드는 단순히 동일한 프로세스 공용 객체 전역 힙 주소 깡 참조로 끝납니다. 반면 멀티 프로세스는 완전 단절이라 소켓 통신, 파이프 매핑, 메시지 큐 등 지저분하고 무거운 OS 강제 중개 로직 통로를 열어 주어야 정보 공유가 가능합니다.
Q. 컨텍스트 스위칭이란?
핵심 답변
CPU 코어가 처리하고 있는 거점 로직 타겟을 기존 프로세스(혹은 스레드) A에서, 새로 스케쥴링 대기하던 다음 자원 B로 교대하여 넘겨 전환 헌납하는 기술 메커니즘을 뜻합니다. 이전 실행 제어 상태(각종 CPU 레지스터, PC 주소값 등) 뭉치를 PCB(혹은 TCB)라는 임시 저장 블록에 잽싸게 피신 저장하고, 진입할 B의 블록 정보를 CPU에 덮어버린 채 다시 달달 털어 돌리기 시작하는 물리적 전환 코스트 비용 상태입니다.
꼬리 질문
- Q. 스레드 스위칭과 프로세스 스위칭 중 어느 것이 오버헤드가 훨씬 극심한가요?
- A: 무조건 프로세스 스위칭입니다. 프로세스 스위칭 시 메모리 단절 문제로 공유되던 물리 가상 메모리 테이블 영역 렌더 매핑을 뜯어고쳐야 하고, CPU의 강력한 효율 저장구역인 TLB(고속 캐시)가 모조리 비워져 버려(Cache Clear 현상) 퍼포먼스가 처참하게 깎이기 때문입니다. (스레드 전환은 이 가상 공간 공유를 지키느라 해당 지워짐 피해가 적습니다.)
Q. 데드락(Deadlock)이란?
핵심 답변
둘 이상의 프로세스(또는 동기화 스레드)가 자원 열쇠 락(Lock)을 배타적으로 틀어쥔 상태에서 서로 무한히 요구하고 버티며 대치, 아무도 락을 풀지도 전진하지도 못하는 교착 정지 고장 상태를 데드락이라 부릅니다. 꽉 막힌 외나무다리 차선 교차 사고 상황에 주로 비유합니다.
꼬리 질문
- Q. 현업 OS는 데드락을 원천 예방 차단하나요, 아니면 방치 후 회복하나요?
- A: 방관 무시 후 사용자 종료를 요구하거나, 주기 파악 후 복구합니다. 이론상으론 예방이나 은행원 알고리즘 등 회피 기법이 존재하나 성능 튜닝에 요구되는 검증 파동 부하량이 너무 치명적 비효율이기 때문에, 현대 OS(Windows, Linux 등)는 타조 알고리즘 수준으로 어느정도 교착을 무시하고 사용자 강제 프로세스 셧다운 버튼(
Kill)을 누르도록 유도 방관하는 기법을 기본 탑재하고 있습니다.
- A: 방관 무시 후 사용자 종료를 요구하거나, 주기 파악 후 복구합니다. 이론상으론 예방이나 은행원 알고리즘 등 회피 기법이 존재하나 성능 튜닝에 요구되는 검증 파동 부하량이 너무 치명적 비효율이기 때문에, 현대 OS(Windows, Linux 등)는 타조 알고리즘 수준으로 어느정도 교착을 무시하고 사용자 강제 프로세스 셧다운 버튼(
Q. 데드락 발생 조건은?
핵심 답변
4가지 발생 논리 조건 중 무조건 4개가 다 얽혀 모여야만 파멸 시스템 데드락이 수립 발동합니다.
- 상호 배제 (Mutual Exclusion): 한 번에 한 놈 스레드만 공유 자원 권한을 배타적으로 독점 사용하는 성질
- 점유 대기 (Hold and Wait): 이미 자신이 하나 이상의 자원을 붙잡아 손에 쥐었는데 그걸 쥐고 놓아주지도 않으면서, 남이 가진 걸 무한 요청 요구 발동 대기하는 뻔뻔한 상태
- 비선점 (No Preemption): 다른 프로세스가 쥔 자원을 OS 힘을 빌려 외부에서 강제로 빼앗아 뺏을 수 없는 특성
- 순환 대기 고리 (Circular Wait): 대기 요구 프로세스 스레드들 간의 갈퀴 사슬 집단 꼬임 족보가 사이클(서로 꼬리 물림) 트리로 물리적 무한 순환을 그리는 고장 구조 결함
꼬리 질문
- Q. 그렇다면 데드락의 완전 예방 해결을 위한 프로그래밍 기법 해결책은 뭔가요?
- A: 위 4대 조건 중 무관용 하나라도 확실하게 영구 제거하거나 차단 예방 격리하면 무적 해결됩니다. 예를 들어 상호 배제를 포기해 트랜잭터를 다중으로 풀어 주거나(
read-only유도), 모든 자원의 Lock 획득 방향 순서 일환 규율 지정을 사전에 정열 튜닝해버려서 꼬리물기(순환 대기 고리 구조) 조건 위상을 전면 깨고 억제하는 방지 패턴 설계를 주력 세우는 편입니다.
- A: 위 4대 조건 중 무관용 하나라도 확실하게 영구 제거하거나 차단 예방 격리하면 무적 해결됩니다. 예를 들어 상호 배제를 포기해 트랜잭터를 다중으로 풀어 주거나(
Q. 메모리 구조(스택, 힙 등)를 설명해주세요.
핵심 답변
프로세스가 OS 메모리 공간에 격리 탑승 구동될 때 배분되는 큰 파티션 영역들로 4분할 구조로 할당됩니다.
- 코드(Code/Text): 컴파일된 프로그램 원본 명령어 머신 코드 구문 텍스트들이 박힌 정적 불변 영역.
- 데이터(Data/BSS): 글로벌 전역 변수나 정적 지역 구문들이 박힌 구역.
- 힙(Heap): 런타임 진행하며 스케일이 마구잡이로 동적 생성, 메모리 생성(new 배열 체계 등 GC 대상) 등을 마주해 변동 분배할 거대 가변 유동 메모리 영역.
- 스택(Stack): 코딩 함수들의 빈번한 지역 구문 변동 콜스택 연산과 LIFO 후입선출 프레임들이 적재돼 함수 처리에 순환 생성 파기 소비되는 국소적 구역.
꼬리 질문
- Q. 스택 영역과 힙 영역의 데이터 생명주기 및 충돌 이슈(Overflow)는?
- A: 힙은 낮은 거점 주소에서 위로 덩치를 불리고 스택은 높은 거점 주소 거탑에서 최상단 아래로 자라면서 충돌 병합 이슈를 회피합니다. 무한 재귀로 인해 스택이 폭주하면
StackOverflow가 생기고 참조 누수 실패 방관으로 힙에 쓰레기가 차면OutOfMemory뻗음 파동이 발생합니다.
- A: 힙은 낮은 거점 주소에서 위로 덩치를 불리고 스택은 높은 거점 주소 거탑에서 최상단 아래로 자라면서 충돌 병합 이슈를 회피합니다. 무한 재귀로 인해 스택이 폭주하면
Q. 가상 메모리란 무엇인가요?
핵심 답변
모든 물리 하드웨어 RAM 환경 사이즈 제약 크기를 뛰어넘어, 프로세스 입장에서 램의 크기가 기만하게 논리적으로 무한정 넉넉하게 뚫려있다고 상상 착각하도록 거대 주소 공간을 선 부여하고 매핑 환상 방식을 걸어두는 OS 기만 설계 운영 메커니즘입니다. 핵심은 지금 당장 급하게 돌아가는 메모리 페이징 조각 내용만 RAM에 적재 채우고, 당장 쉰다고 판단되는 거대 파편 블록 공간들은 디스크 구석지 공간(Swap area)에 재수감 몰아쳐서 최적화 RAM 공간의 극대화를 이끌어냅니다.
꼬리 질문
- Q. 페이징 부재(Page Fault)란 무엇이며, 자주 일어나면 어떤 단점(Thrashing 현상)이 발생하나요?
- A: 가상 메모리를 긁어 CPU가 데이터를 탐조 조회하려는데 실제 RAM 위에 아직 데이터가 없어 디스크 창고로 긴급 수작업을 요청 올리는 상태입니다. 공간 부족으로 이게 극심해져서, OS가 연산 진행을 제치고 CPU 연산 로드는 다 내다 던진 채 오로지 디스크랑 RAM간 데이터 상하차 이동 이주 매핑(페이징 스왑)에만 연산율 99%를 폭삭 갈아 박느라 시스템이 벽돌 프리징 되는걸 '스레싱 현상'이라 합니다.
Q. 페이징과 세그멘테이션 차이는?
핵심 답변
프로세스를 잘게 산산조각 내어 비연속적인 가상 메모리 빈자리에 테트리스 박기 위한 단위 파티션 분절 책략 규격 차이입니다.
- 페이징(Paging): 프로그램 성질과 무관하게 무지성 '고정 획일성 크기(주로 4KB 배구역)'로 바둑판 마냥 공산 조각 분배 분할하는 방식. 다 끼워넣기 좋아서 외부 단편화(짜투리 공간 버려짐)는 적지만 조각 내부의 자투리 폐기율 쪼임(내부 단편화) 문제가 발생합니다.
- 세그멘테이션(Segmentation): '함수, 스택, 공용 객체'같은 논리 단위 체계 덩어리에 강제로 맞춰서 각각 불규칙 거대 크기로 모양내서 파편을 절단하는 기법입니다. 유연성은 최고이나 메모리 할당 반납 이사 후 빈 공간이 크기에 안 맞아 파편들이 무책임 구멍으로 버려지는 외부 단편화 문제에 취약합니다.
꼬리 질문
- Q. 그렇다면 현대 OS는 어느 쪽 정책을 주로 혼용해 취하고 있나요?
- A: 두 기능의 무적 장점을 결합한 통합 '포괄 세그먼트를 씌운 페이징'(Paged Segmentation) 방식을 혼용 구성합니다. 논리 권한 제어나 스크립트 격리가 타당한 거대 보호 장막 씌움 통제는 세그멘트 격리로 논리 파티션 랩핑하고 그 세그멘트 보호 장막 안은 죄다 촘촘한 페이징 스케일로 바둑판 구현, 가상화 물리 성능 극적인 향상을 끌냅니다.
Q. CPU 스케줄링 알고리즘 종류는?
핵심 답변
어떤 프로세스 파편에 CPU 자원 권한을 언제 효율 배분해 줄지 정하는 전략 방식입니다. 비선점 타입(빼앗기 통제 불가능): 먼저 진입 도착하면 뚝심 일편 처리 FCFS 구조, 처리 시간이 매우 짧은 새끼만 무조건 골라 먼저 넘기는 강행 SJF 등이 존재합니다. 선점 탑재 타입(할당 시간 제약 뺏기 가능형): 각자 무조건 짧은 타임 슬라이스(시간 분배 양자)만 평등 부여받아 돌고 돌아 CPU 제어율 파이널 통과를 그리는 RR(라운드 로빈), 짧은 작업 큐로 우선순위 특전 가점 돌리기로 처리해주는 SRF, 레벨 계열 우선순위를 줘서 다단계 양자 큐 다발 다중 피드백 MLFQ 규격 등 방대합니다.
꼬리 질문
- Q. 기아 현상(Starvation)이란 무언이며 에이징(Aging) 해결법 기법은?
- A: CPU 선점 경쟁 알고리즘 상 무겁거나 우선순위가 떨어지는 영세 롱타임 작업 지표 프로세스는 단기 놈들에게 계속 밀려 평생 CPU 사용권을 부여 지분받지 못해 굶어죽는 멸망 방치 현상입니다. '에이징'은 이를 조율하기 위해 머문 지체 시간이 오래 경과된 지옥 프로세스들에 한해 주기 보너스 포인트를 점차 계속 올려 결국 최상위 우선 대기 줄 선점으로 자동 구조 구출할 수 있게끔 끌어올리는 복지 튜닝 체계입니다.