이번 문서의 목표: 이 파일을 다 읽으면 프로세스 스케줄링·동기화·교착상태·가상메모리·파일시스템·분산 시스템이 뒤섞인 통합형 문항을 만났을 때, 어느 개념을 먼저 확인하고 어떤 순서로 계산해야 하는지 스스로 설계할 수 있다.
왜 통합형 문항이 나오는가
독학사 4단계 통합컴퓨터시스템은 이름 그대로 “통합”을 시험한다. 13편부터 19편까지 프로세스·스레드(13편), CPU 스케줄링(14편), 동기화와 교착상태(15편), 메모리 관리(16편), 가상메모리·페이징(17편), 파일 시스템(18편), 멀티프로세서·분산(19편)을 각각 따로 배웠다면, 이 편은 그 조각들을 한 시나리오 안에서 동시에 다루는 훈련이다.
쉽게 말하면: 지금까지 부품별로 뜯어봤던 자동차를, 이제는 조립된 상태로 놓고 “브레이크를 밟았을 때 엔진과 변속기가 각각 어떻게 반응하는가”를 통째로 설명하는 단계다.
실제 4단계 기출에서는 “다음 시나리오에서 옳은 것을 모두 고르시오”, “각 자원 관리 기법이 서로 어떤 영향을 주는지 서술하시오” 같은 형태로 여러 영역을 한 문항에 묶는다. 이런 문제에서 실수하는 가장 흔한 원인은 한 영역의 계산에 집중하다가 다른 영역의 전제 조건을 놓치는 것이다. 예컨대 페이지 교체 계산에는 맞게 답했지만, 그 계산의 전제가 되는 프로세스가 애초에 교착상태에 빠져 있었다는 사실을 놓치는 식이다.
이 편은 하나의 통합 시나리오를 만들고, 그 안에서 (1) 프로세스·스케줄링·동기화, (2) 가상메모리·파일시스템, (3) 분산 관점의 판단을 순서대로 짚어가며 실제 서술·계산형 문제를 어떻게 분해해서 푸는지 보여준다.
통합 시나리오: 3노드 로그 처리 클러스터
다음 시나리오를 이 편 전체에서 계속 사용한다.
웹 서비스 회사가 접속 로그를 처리하기 위해 노드 A, B, C 세 대의 서버로 클러스터(cluster, 여러 컴퓨터를 하나처럼 묶어 쓰는 구성)를 구성했다. 각 노드는 여러 개의 프로세스를 돌리며, 공유 파일 시스템에 로그를 기록하고, 일부 데이터는 각 노드가 캐시로 들고 있다.
이 시나리오 하나에 13~19편의 개념이 전부 걸려 있다. 아래에서 영역별로 쪼개어 판단한다.
1단계 — 프로세스·스케줄링·동기화 관점
요약(13·14편): 프로세스는 실행 중인 프로그램의 인스턴스이며 PCB(Process Control Block)로 상태를 관리한다. CPU 스케줄링은 대기 중인 프로세스 중 누구에게 CPU를 줄지 결정한다. 자세한 알고리즘 계산은 14편을 참고한다.
노드 A에는 로그를 파일에 쓰는 프로세스 Writer와, 그 로그를 읽어 통계를 내는 프로세스 Reader가 있다. 둘은 같은 공유 버퍼(shared buffer)를 두고 생산자–소비자(producer–consumer) 관계다.
동기화 판단(15편 요약): Writer와 Reader가 버퍼에 동시에 접근하면 경쟁 상태(race condition)가 발생할 수 있으므로, 세마포어(semaphore) 두 개로 제어한다.
empty: 비어 있는 슬롯 수 (초기값 5)full: 채워진 슬롯 수 (초기값 0)
Writer는 wait(empty) 후 기록하고 signal(full)을 호출하며, Reader는 wait(full) 후 읽고 signal(empty)를 호출한다. 이 순서를 지키지 않고 signal과 wait을 바꿔 쓰면 두 프로세스가 서로의 신호를 기다리며 영원히 멈추는 교착상태가 될 수 있다 — 이것이 다음 단계의 판단으로 이어진다.
교착상태 판단(15편 요약): 교착상태가 성립하려면 Coffman의 4조건(상호 배제, 점유 대기, 비선점, 순환 대기)이 모두 동시에 성립해야 한다. 이 클러스터에서 노드 A의 프로세스 셋 {P1, P2, P3}이 자원 {R1, R2}를 다음과 같이 요청한다고 하자.
| 프로세스 | 보유 자원 | 요청 자원 |
|---|---|---|
| P1 | R1 | R2 |
| P2 | R2 | R1 |
| P3 | 없음 | R1 |
P1은 R1을 들고 R2를 요청하고, P2는 R2를 들고 R1을 요청한다. 자원 할당 그래프를 그리면 P1 → R2 → P2 → R1 → P1으로 순환(cycle)이 생긴다. 각 자원이 인스턴스를 하나씩만 가지고 있다면 이 순환은 곧 교착상태다. P3은 이 순환에 끼어 있지 않으므로(R1을 요청하지만 순환의 일부가 아니라 단순 대기), P3의 존재 자체는 교착상태 여부를 바꾸지 않는다 — 순환 대기에 실제로 포함된 프로세스만 교착상태에 걸린다는 점이 자주 틀리는 포인트다.
자주 틀리는 점: “자원 할당 그래프에 순환이 있으면 무조건 교착상태”라고 외우면 자원 인스턴스가 여러 개인 경우 틀린다. 자원 종류당 인스턴스가 하나뿐일 때만 순환 = 교착상태가 성립하고, 인스턴스가 여러 개면 순환이 있어도 교착상태가 아닐 수 있다(다른 인스턴스로 요청이 해소될 수 있기 때문). 시험에서는 문제에 “각 자원의 인스턴스 수”가 주어지는지 반드시 확인한다.
이 단계의 결론: 이 클러스터를 설계할 때는 Writer/Reader 세마포어 순서를 지키는 것(동기화)과, R1·R2 같은 자원을 여러 프로세스가 상호 배타적으로 점유하지 않도록 자원 할당 순서를 고정하는 것(교착상태 예방의 대표 기법인 순서화, ordering)을 함께 설계해야 한다.
2단계 — 가상메모리·파일시스템 관점
요약(17편): 가상메모리는 프로세스가 실제 물리 메모리보다 큰 주소 공간을 쓸 수 있게 하는 기법이며, 페이지 부재가 나면 페이지 교체 알고리즘으로 어떤 페이지를 내보낼지 정한다.
노드 B는 물리 프레임이 3개뿐인데, LogAnalyzer 프로세스가 다음과 같은 순서로 페이지를 참조한다.
참조열: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5FIFO(First-In First-Out)로 페이지 교체를 계산한다. 참조 순서대로 프레임 상태 변화를 단계별로 추적한다.
- 1 → 부재. 프레임
{1} - 2 → 부재. 프레임
{1,2} - 3 → 부재. 프레임
{1,2,3}(가득 참, 들어온 순서 1→2→3) - 4 → 부재. 가장 먼저 들어온 1을 내보낸다. 프레임
{2,3,4} - 1 → 부재. 가장 먼저 들어온 2를 내보낸다. 프레임
{3,4,1} - 2 → 부재. 가장 먼저 들어온 3을 내보낸다. 프레임
{4,1,2} - 5 → 부재. 가장 먼저 들어온 4를 내보낸다. 프레임
{1,2,5} - 1 → 적중 (프레임에 있음)
- 2 → 적중
- 3 → 부재. 가장 먼저 들어온 1을 내보낸다. 프레임
{2,5,3} - 4 → 부재. 가장 먼저 들어온 2를 내보낸다. 프레임
{5,3,4} - 5 → 적중
총 참조 12회 중 부재는 1,2,3,4,1,2,5,3,4 = 9회, 적중은 1,2,5 = 3회다.
같은 참조열을 LRU(Least Recently Used, 가장 오래전에 쓰인 것을 교체)로 다시 계산하면 결과가 달라진다.
- 1,2,3 → 순서대로 부재 3회. 프레임
{1,2,3} - 4 → 부재. 가장 최근 사용이 오래된 1을 내보낸다. 프레임
{2,3,4} - 1 → 부재. 가장 오래된 2를 내보낸다. 프레임
{3,4,1} - 2 → 부재. 가장 오래된 3을 내보낸다. 프레임
{4,1,2} - 5 → 부재. 가장 오래된 4를 내보낸다. 프레임
{1,2,5} - 1 → 적중 (가장 최근 사용으로 갱신)
- 2 → 적중
- 3 → 부재. 가장 오래된 5를 내보낸다. 프레임
{1,2,3} - 4 → 부재. 가장 오래된 1을 내보낸다. 프레임
{2,3,4} - 5 → 부재. 가장 오래된 2를 내보낸다. 프레임
{3,4,5}
부재 10회, 적중 2회다.
결과 해석: 이 특정 참조열에서는 프레임이 3개뿐인 좁은 조건이라 FIFO가 오히려 LRU보다 부재가 적게 나왔다. “LRU가 항상 FIFO보다 좋다”는 명제는 일반적으로 참이 아니다 — 참조 패턴에 따라 역전될 수 있다는 점, 그리고 FIFO는 프레임 수를 늘렸는데 오히려 부재가 늘어나는 벨레이디의 변칙(Belady’s anomaly)이 생길 수 있다는 점을 함께 기억해야 한다(LRU는 이 변칙에서 자유롭다).
파일시스템 연결(18편 요약): LogAnalyzer가 분석한 결과는 다시 공유 파일에 기록되는데, 이 파일이 커지면서 디스크에 연속되지 않은 블록으로 흩어져 저장될 수 있다. 인덱스 할당(indexed allocation, 대표적으로 inode 방식)을 쓰면 파일이 흩어져 있어도 인덱스 블록만 읽으면 전체 블록 위치를 알 수 있어 이런 성장하는 로그 파일에 유리하다. 반대로 연속 할당(contiguous allocation)은 순차 접근은 빠르지만 파일이 커질 때마다 재배치가 필요할 수 있다 — 통합 문항에서는 “이런 워크로드에 어떤 할당 방식이 유리한가”를 직접 서술하게 하는 경우가 많다.
3단계 — 분산 시스템 관점
요약(19편): 멀티프로세서 구조는 노드 안에서 여러 프로세서가 메모리를 공유하는 SMP(Symmetric Multi-Processing), 노드 간에 메모리를 공유하지 않고 메시지로 통신하는 MPP(Massively Parallel Processing)로 크게 나뉜다. 분산 시스템은 물리적으로 떨어진 여러 컴퓨터가 네트워크로 협력해 하나의 시스템처럼 동작하는 구성이다.
이 클러스터에서 노드 A, B, C가 같은 로그 파일의 일부를 각자 캐시에 들고 있다면, 한 노드가 파일을 수정했을 때 다른 노드의 캐시가 낡은 값을 들고 있는 캐시 일관성(cache coherence) 문제가 생긴다. 단일 노드 안의 캐시 일관성(MESI 프로토콜 등)은 09·10편의 하드웨어 캐시 논의와 이어지지만, 노드 간 캐시 일관성은 분산 캐시 무효화(distributed cache invalidation) 메시지를 노드끼리 주고받는 방식으로 해결한다는 점이 다르다 — “같은 이름의 문제라도 범위(단일 노드 내부 vs 노드 간)에 따라 해결 기법이 달라진다”는 것이 통합형 문항에서 자주 확인하는 포인트다.
| 비교 항목 | SMP | MPP / 분산 |
|---|---|---|
| 메모리 | 여러 프로세서가 공유 | 노드마다 독립(공유하지 않음) |
| 통신 방식 | 공유 메모리 접근 | 네트워크 메시지 전달 |
| 확장성 | 프로세서 수 늘리기에 한계 있음 | 노드 추가로 비교적 유연하게 확장 |
| 장애 영향 | 한 프로세서 장애가 전체에 영향 크게 미칠 수 있음 | 노드 단위 장애 격리가 상대적으로 쉬움 |
| 대표 예 | 한 서버 내 다중 코어 | 서버 클러스터, 네트워크 파일시스템(NFS) |
이 클러스터가 네트워크 파일시스템(NFS 유사 구성)으로 로그 파일을 공유한다면, 가용성(availability, 시스템이 요청에 응답 가능한 상태를 유지하는 비율)을 높이기 위해 로그를 여러 노드에 복제할 수 있다. 이때 5편에서 배운 시스템 성능 지표 중 신뢰성·가용성 개념이 다시 등장한다 — 복제본이 늘어날수록 가용성은 올라가지만, 모든 복제본을 동시에 갱신해야 하므로 쓰기 성능(스루풋)은 내려가는 트레이드오프(trade-off, 하나를 얻으면 다른 하나를 잃는 관계)가 생긴다.
통합형 문항 풀이 전략 정리
시나리오에 등장하는 자원과 프로세스를 표로 먼저 정리한다
문장으로만 읽으면 놓치는 조건(자원 인스턴스 수, 프레임 수, 노드 수)을 표로 그리면 계산 실수가 줄어든다.
어떤 영역의 계산이 필요한지 순서를 정한다
이 편의 예시처럼 스케줄링/동기화 → 메모리/파일 → 분산 순서로 하나씩 확정해야, 앞 단계의 잘못된 가정이 뒤 단계 계산까지 오염시키는 것을 막을 수 있다.
각 계산의 전제 조건을 다시 확인한다
교착상태 판단이라면 “자원 인스턴스 수”, 페이지 교체라면 “프레임 수와 참조열”, 분산 판단이라면 “노드 간 공유 여부”를 항상 문제 지문에서 다시 확인한다.
서술형 문항은 원인 → 결과 → 대안 순서로 답안을 구성한다
“왜 이 문제가 생기는가(원인) → 이 시나리오에서 어떤 영향을 주는가(결과) → 어떻게 완화할 수 있는가(대안)“의 3단 구성이 독학사 4단계 서술형 채점 기준과 잘 맞는다.
핵심 정리
- 통합형 문항은 13~19편에서 배운 개별 개념을 한 시나리오 안에서 동시에 판단하게 한다. 각 개념 자체는 이미 배운 것이므로, 이 편의 핵심은 어느 순서로, 어떤 전제 조건을 확인하며 풀 것인가다.
- 교착상태는 자원 인스턴스 수를 반드시 확인해야 하고, 순환 대기에 실제로 포함된 프로세스만 교착상태에 걸린다.
- 페이지 교체 알고리즘의 우열은 참조 패턴에 따라 달라질 수 있으며, FIFO는 벨레이디의 변칙에서 자유롭지 않다.
- 단일 노드 내부의 캐시 일관성과 노드 간(분산) 캐시 일관성은 이름은 같지만 해결 기법이 다르다.
- 복제·가용성을 높이면 쓰기 성능이 떨어지는 트레이드오프가 분산 시스템 설계의 핵심 판단 지점이다.
마무리 복습
참고 자료
- Silberschatz et al., Operating System Concepts(9판 강의노트·챕터 요약) — 프로세스·동기화·교착상태·가상메모리·파일시스템 표준 정리
- 대학 운영체제 강의노트 – CPU 스케줄링 & 데드락(공개 강의노트 PDF) — 자원 할당 그래프와 교착상태 조건 정리
- 대학 운영체제 강의노트 – 가상메모리·페이징·페이지 교체(운영체제 강의용 PDF/슬라이드) — 페이지 교체 알고리즘 예제
- 국가평생교육진흥원 독학학위제: https://bdes.nile.or.kr