운영체제 아주 쉬운 세가지 이야기- 1주차 스터디

2025. 9. 2. 15:58개념 공부

 

1) 운영체제는 무엇을 하는가?

프로그램은 기본적으로 명령어를 가져와(fetch) 해석(decode)하고 실행(execute)합니다. 하지만 사용자는 여러 프로그램을 동시에 실행하고, 파일을 읽고/쓰고, 장치를 쉽게 다루고 싶습니다. 이 복잡한 요구를 대신 해결해 주는 소프트웨어가 바로 운영체제(OS)입니다.

  • OS는 하드웨어(CPU·메모리·디스크)를 가상화하여, 쓰기에 편한 가상 자원으로 제공합니다.
  • 응용 프로그램은 OS가 제공하는 시스템 콜(API)로 실행/메모리/파일 접근을 요청합니다.
핵심: 운영체제 = 가상화 + 병행성 관리 + 영속성 보장을 수행하는 자원 관리자.

2) CPU 가상화 — 하나의 CPU를 여러 프로그램이 나눠 쓰는 법

OS는 스케줄링을 통해 하나(or 소수)의 CPU를 마치 여러 개처럼 보이게 만듭니다.

  • 정책(Policy): 지금 누가 CPU를 쓸지 결정 (예: 공정성/응답성/처리량 목표).
  • 기법(Mechanism): 실제로 문맥 전환을 수행하여 선택된 프로세스를 실행.
예시 보기 — “줄갈이 출력”
여러 프로그램(A/B/C/D)을 실행하면 각자의 출력이 교차해 보입니다. CPU가 아주 짧은 시간 단위로 번갈아 할당되기 때문입니다. 사용자는 “동시에 도는 것처럼” 느끼죠.

3) 메모리 가상화 — 각 프로세스마다 독립된 주소 공간

여러 프로그램이 동시에 돌아도, 각 프로그램은 자신만의 가상 주소 공간을 갖는 것처럼 동작합니다.

  • OS가 가상 주소 → 물리 메모리매핑을 관리합니다.
  • 서로 다른 프로그램이 같은 “가상 주소(예: 0x00200000)”를 써도, 실제로는 다른 물리 메모리를 사용하므로 간섭하지 않습니다.
  • 이 격리 덕분에 보호/안정성이 확보됩니다.
Tip: 실제로는 물리 메모리는 공유 자원이며, OS가 페이지 테이블 등으로 프로세스별 매핑을 관리합니다.

4) 병행성 — 동시에 실행될 때 생기는 문제를 다루는 기술

멀티프로세스/멀티스레드 환경에서 같은 데이터를 함께 다루면 레이스 컨디션이 발생할 수 있습니다.

  • counter++ 같은 단순 연산도 내부적으로는 읽기→증가→쓰기여러 단계입니다.
  • 두 스레드가 동시에 수행하면 서로 덮어써서 결과가 틀려질 수 있습니다.
  • 락(lock), 원자적 연산, 조건 변수 등 동기화 도구로 해결합니다.

5) 영속성 & 파일 시스템 — 전원이 꺼져도 남게 하기

메모리는 휘발성이므로, 데이터는 디스크/SSD에 영속적으로 저장해야 합니다. 이를 담당하는 것이 파일 시스템입니다.

  • 기본 시스템 콜: openwriteclose
  • 파일 시스템은 어디에 쓸지 배치하고, 메타데이터/자료구조를 갱신하며, 장치 드라이버를 통해 I/O를 수행합니다.
  • 신뢰성을 위해 저널링·카피-온-라이트(COW) 등 기법을 사용해 일관성성능을 함께 잡습니다.

6) 운영체제 설계 목표

  • 추상화: 하드웨어 복잡성을 감추고, 쓰기 쉬운 인터페이스 제공
  • 성능: 가상화/보호의 오버헤드를 최소화
  • 보호/격리: 프로세스 간·커널/사용자 간 안전한 분리
  • 신뢰성: 시스템 전체를 안정적으로 유지
  • 기타: 보안, 에너지 효율, 이식성/이동성

※ 실제 시스템 설계는 목표 간 절충이 필수입니다(예: 성능 vs. 보호).

7) 아주 짧은 역사 — Unix의 영향

  • 초기: 단순한 입출력 보조 수준에서 출발
  • 시스템 콜/트랩로 보호 개념 도입, 멀티프로그래밍 확산
  • Unix: 작고 강력한 도구들을 조합해 쓰는 철학, C 언어/쉘/파이프를 통해 개발자 친화적 환경 제공
  • 현대: 데스크톱·모바일·클라우드 전반에서 보안·동시성·안정성·성능을 균형 있게 추구

8) 한 장 요약 & 핵심 키워드

  • 가상화: CPU(스케줄링), 메모리(주소 공간), 디스크(파일 시스템)
  • 병행성: 동시에 실행해도 올바른 결과를 보장(락/원자성/조건변수)
  • 영속성: 전원이 꺼져도 데이터가 남도록 설계(저널링·COW 등)
  • 설계 목표: 추상화 · 성능 · 보호/격리 · 신뢰성 (+ 보안/에너지/이식성)

9) 복습 체크리스트

  • CPU 가상화에서 정책기법의 차이를 설명할 수 있는가?
  • “같은 가상 주소인데도 간섭이 없는 이유”를 한 문장으로 설명할 수 있는가?
  • counter++가 왜 레이스 컨디션이 되는지 단계별로 말할 수 있는가?
  • 파일 시스템이 open→write→close를 받았을 때 내부에서 어떤 일이 일어나는지 큰 흐름을 말할 수 있는가?
  • 추상화·성능·격리·신뢰성 사이의 절충 사례를 하나 떠올릴 수 있는가?

10) 복습 퀴즈

  1. 운영체제가 가상화를 한다는 말은 무엇을 의미할까?
  2. CPU 스케줄러의 정책기법을 각각 한 문장으로 정의해보자.
  3. 두 개의 스레드가 동시에 counter++를 실행하면 어떤 문제가 생기며, 왜 그런가?
  4. 가상 메모리에서 서로 다른 프로세스가 같은 가상 주소를 사용해도 안전한 이유는?
  5. 파일 시스템이 데이터 일관성을 지키기 위해 쓰는 대표적 기법 두 가지는?
정답 보기
  1. 물리 자원(CPU·메모리·디스크)을 추상화해 사용하기 쉬운 가상 자원처럼 제공하는 것.
  2. 정책: 누가/언제 CPU를 쓸지 결정하는 원칙. / 기법: 그 결정을 실제로 실행(문맥 전환 등).
  3. 레이스 컨디션. counter++는 읽기→증가→쓰기의 여러 단계로 이뤄져, 동시에 수행 시 서로 덮어쓸 수 있음.
  4. OS가 프로세스별로 가상 주소→물리 메모리 매핑을 분리해 관리(페이지 테이블 등)하기 때문.
  5. 저널링, 카피-온-라이트(COW) 등.

11) 다음 학습 가이드

  • CPU 가상화 심화: 스케줄링(FCFS/RR/SJF/멀티레벨 등), 문맥 전환 오버헤드
  • 메모리: 페이징, 세그멘테이션, TLB, 페이지 교체 알고리즘(LRU 등)
  • 병행성: 락/세마포어/조건변수, 데드락 조건과 회피
  • 파일 시스템: 인덱스 노드, 저널링, 디스크 스케줄링, RAID 개념