운영 체제 도입 (Operating System Introduction)

변재현 (Jaehyun Byun)·2025년 7월 18일
0

Computer Science

목록 보기
5/6
post-thumbnail

1. 컴퓨터 구조 (Computer Architecture)

1-1. 폰 노이만 구조 (von Neumann Architecture)

핵심 아이디어: CPU(연산 담당)와 Memory(저장 담당)를 따로 분리하고, 실행해야 할 명령어와 데이터를 모두 메모리에 저장해 두는 구조.

즉, 필요한 순간에 CPU가 메모리에서 명령어를 읽어와 실행한다. 이 구조 덕분에, 하드웨어를 갈아끼우지 않아도 프로그램(소프트웨어)만 바꾸면 새로운 기능을 수행할 수 있게 됨.

💡: 예전에는 계산기처럼 ‘버튼 누르면 정해진 연산만 하는 기계’였지만, 폰 노이만 구조는 ‘필요한 계산 방법(프로그램)을 책(메모리)에 써놓고, 그때그때 읽어서 계산하는 사람(CPU)’ 같은 것.

작동 과정

  1. Program Memory에 작업 순서를 미리 저장해 둔다. (예: “1+2 계산하기”라는 프로그램이 ①더하기 ②저장 이런 식으로 저장됨)
  2. CPU가 메모리에서 명령어를 가져옴 (Fetch): 가져온 명령어를 해석 (Decode) — 이게 덧셈인지, 곱셈인지, 메모리 이동인지 확인.
  3. 명령어 실행 (Execute) — 예: 실제로 더하기 연산 수행.
  4. 결과를 메모리나 레지스터에 저장 (Store).
  5. 다음 명령어를 찾아서 다시 2번부터 반복.

장점

소프트웨어만 바꿔도 새로운 작업 가능 → 하드웨어를 다시 만들 필요 없음. 세계 최초의 프로그램 내장 방식 컴퓨터인 EDSAC이 이 구조를 사용.

문제점

CPU는 매우 빠르게 계산 가능하지만, 메모리에서 명령어/데이터를 가져오는 속도가 상대적으로 느림. 즉, CPU가 “다음 명령어 줘!” 하고 기다려야 하는 상황이 자주 발생 → 전체 속도 저하.

이를 폰 노이만 병목(von Neumann bottleneck)이라고 함.

💡: CPU = 빨리 일하는 요리사, 메모리 = 재료 창고. 요리사가 아무리 빨라도 재료를 창고에서 늦게 가져오면 전체 요리 속도가 느려짐.

해결책

캐시 메모리(Cache): CPU 안에 자주 쓰는 데이터/명령어를 미리 저장해 두는 초고속 메모리.
멀티코어(Multi-core): CPU 안에 코어 여러 개를 넣어 여러 명령을 동시에 처리.
병렬처리(Massively Parallel Processing): 여러 CPU 또는 코어가 동시에 작업을 나눠서 수행.

1-2. 전형적인 컴퓨터 시스템 구성 (Hardware Organization of a Typical Computing System)

우리가 쓰는 컴퓨터는 여러 하드웨어 부품이 연결되어 하나의 시스템을 이룸. 이 부품들은 버스(Bus)라는 통로를 통해 서로 데이터를 주고받음.

구성 요소별 역할

CPU (Central Processing Unit): 컴퓨터의 ‘두뇌’. 명령어 해석과 연산을 수행.

  • ALU (Arithmetic Logic Unit): 사칙연산과 논리연산 수행.
  • 레지스터(Register): 초고속 임시 저장 공간.
  • 제어장치(Control Unit): 명령어의 실행 순서를 관리.

Main Memory (주기억장치): 프로그램과 데이터를 저장.

  • 전원이 꺼지면 데이터가 사라지는 휘발성 메모리(RAM).
  • CPU가 직접 접근 가능.

Bus (버스): 하드웨어 장치 간 데이터를 이동시키는 통로.

  • 데이터 버스(Data Bus): 실제 데이터 이동.
  • 주소 버스(Address Bus): 데이터가 어디에 있는지 주소 전달.
  • 제어 버스(Control Bus): 읽기/쓰기 등 제어 신호 전달.

주변 장치 컨트롤러 (Controller): 외부 장치를 CPU·메모리와 연결해주는 ‘중간 관리자’.

  • USB Controller: USB 장치 연결 관리.
  • Graphics Adapter (GPU): 화면 출력 관리.
  • Disk Controller: HDD, SSD 등 저장 장치와 데이터 주고받음.

작동 흐름 예시

디스크(HDD/SSD)에서 프로그램 파일을 읽음 → Disk Controller가 데이터 전달
Main Memory에 프로그램 로드
CPU가 버스를 통해 명령어를 하나씩 읽어 실행
GPU로 그래픽 데이터 전송 → 화면 출력

1-3. 저장장치 계층 구조 (Storage Hierarchy)

컴퓨터에는 여러 단계의 저장장치가 있고
CPU와 가까울수록 → 속도는 빠르지만 용량이 작고 비쌈
CPU에서 멀수록 → 속도는 느리지만 용량이 크고 저렴함

이런 구조는 속도와 용량의 균형을 맞추기 위해 설계됨.

계층별 특징

계층위치속도용량휘발성 여부예시
레지스터(Register)CPU 내부매우 빠름매우 작음 (수십~수백 B)휘발성연산 중간 값 저장
캐시(Cache)CPU 칩 위빠름작음 (MB 단위)휘발성자주 쓰는 변수·명령어
RAM(Main Memory)CPU 외부, 메인보드중간큼 (GB 단위)휘발성실행 중인 프로그램
보조기억장치(Secondary Storage)메인보드/외부느림매우 큼 (GB~TB)비휘발성HDD, SSD
외부 저장장치(Removable)외부 연결느림~중간다양비휘발성USB, 외장 HDD

속도–용량 관계

용량이 커질수록 → 속도는 느려지고 가격은 저렴해짐.
용량이 작을수록 → 속도는 빨라지고 가격은 비싸짐.

2. 멀티코어 프로세서 (Multi-Core Processors)

하나의 CPU 칩 안에 여러 개의 독립적인 처리 장치(코어, Core)를 넣은 구조. 각 코어는 하나의 CPU처럼 명령어를 해석하고 실행할 수 있음.
코어가 많아지면 동시에 더 많은 작업(스레드)을 처리 가능.

병렬 처리(Parallel Processing) 가능 → 전체 처리량 증가.

코어 1개 = 보통 1개의 스레드를 동시에 실행 가능.
(하이퍼스레딩 사용 시, 1코어에서 2스레드 실행 가능)

코어 수가 많다고 무조건 빠른 건 아님
클럭 속도(Clock Speed)와의 균형 중요.

코어 수 ↑: 병렬 작업에 유리.
클럭 속도 ↑: 단일 작업 속도 향상.

장점

여러 작업을 동시에 처리 → 멀티태스킹 효율 향상.
CPU 사용률 분산 → 발열 관리와 전력 효율 개선 가능.
고성능 작업(영상 편집, 3D 렌더링, 과학 연산 등)에 유리.

단점/주의점

모든 프로그램이 멀티코어 성능을 100% 활용하지 못함.
(단일 스레드 기반 프로그램은 코어 수 증가 효과가 적음)
코어 수와 클럭 속도, 발열, 전력 소모 간의 트레이드오프 존재.

3. 운영체제가 하는 일 (What Operating Systems Do)

3-1. 프로세스 관리 (Process Management)

프로세스(Process): 실행 중인 프로그램.

프로그램이 저장 장치(HDD/SSD)에 있을 때는 단순한 ‘코드 덩어리’일 뿐. 메모리에 올라와서 CPU 자원을 할당받아 실행될 때 → 프로세스가 됨.

운영체제(OS)는 이 프로세스들이 CPU, 메모리, I/O 장치 같은 한정된 자원을 효율적으로 사용하도록 관리.

프로세스의 상태

프로세스는 실행되는 동안 여러 상태를 오감.

New: 생성 중 (메모리에 로드 중)
Ready: 실행할 준비 완료, CPU 할당 대기
Running: CPU에서 명령어 실행 중
Waiting: I/O 요청 등으로 CPU 외 장치 작업 대기
Terminated: 실행 종료

OS의 프로세스 관리 역할

생성(Create): 새 프로세스를 메모리에 올려 실행 준비.
스케줄링(Scheduling): 어떤 프로세스에 CPU를 먼저 줄지 결정.
동기화(Synchronization): 여러 프로세스가 자원을 동시에 쓰는 상황에서 순서 조정.
종료(Termination): 작업이 끝난 프로세스를 메모리에서 제거.

프로세스 관리가 중요한 이유

자원 한정성: CPU, 메모리, 디스크 I/O 등은 수가 한정돼 있음 → 효율적 배분 필요.
공정성: 특정 프로세스가 자원을 독점하면 다른 작업이 멈출 수 있음.
응답 속도: 사용자 경험(UX)에 직결.

3-2. 스레드 (Thread)

스레드(Thread): CPU가 실제로 작업을 수행하는 최소 실행 단위.

하나의 프로세스 안에 여러 스레드가 있을 수 있으며,
같은 프로세스 안의 스레드들은 코드·데이터·메모리 영역을 공유.

멀티스레딩(Multi-threading)

하나의 프로세스를 여러 실행 흐름(스레드)으로 나누어 동시에 작업.

장점: 자원 공유: 메모리, 파일 핸들 등을 공유 → 효율적. 응답성 향상: 한 스레드가 대기 상태여도 다른 스레드가 계속 실행 가능.

단점: 동기화 문제: 여러 스레드가 같은 데이터에 동시에 접근 시 충돌 가능. 디버깅 어려움: 실행 순서가 매번 달라질 수 있음.

워드프로세서 실행 중:

스레드 1: 화면에 글자 표시
스레드 2: 키보드 입력 처리
스레드 3: 맞춤법 검사

→ 세 스레드가 동시에 실행되며 사용자 경험 부드러움.

3-3. 프로세스 스케줄링 (Process Scheduling)

Scheduler(스케줄러): CPU를 언제, 어떤 프로세스에 할당할지 결정하는 OS 모듈. CPU 효율 극대화, 응답 시간 최소화, 공정성 유지.

  • 장기 스케줄링(Long-term): 어떤 프로세스를 메모리에 올릴지 결정 (메모리 적재 속도 조절)

  • 중기 스케줄링(Mid-term): 메모리 부담 완화를 위해 일부 프로세스를 일시적으로 중단(Suspend)

  • 단기 스케줄링(Short-term / CPU 스케줄링): CPU를 어떤 프로세스에 바로 줄지 결정 (ms 단위)

FCFS(First Come First Served): 먼저 온 순서대로 실행.

SJF(Shortest Job First): 실행 시간이 짧은 프로세스 먼저.

Round Robin: 시간 할당량만큼 번갈아 실행.

노트북에서 브라우저, 음악 플레이어, 문서 작성 세 작업을 동시에 실행할 때: 스케줄러가 10ms 단위로 CPU를 번갈아 할당 → 사용자에게는 동시에 동작하는 것처럼 보임.

3-4. 프로세스 동기화 (Process Synchronization)

여러 프로세스 또는 스레드가 공유 자원(파일, 변수, 메모리 영역 등)에 동시에 접근하면 문제 발생 가능. 이러한 공유 자원 접근 구역을 임계 구역(Critical Section)이라고 함.

동기화(Synchronization): 임계 구역 접근을 제어하여 데이터의 일관성 유지.

문제점
경쟁 조건(Race Condition): 여러 스레드가 동시에 데이터를 수정하려 할 때 결과가 예측 불가. 예: 은행 계좌 입출금 동시 처리 → 잔액 오류 가능.

해결 방법
뮤텍스(Mutex): 한 번에 하나의 스레드만 접근 가능하도록 잠금(Lock) 제공.
세마포어(Semaphore): 허용 가능한 동시 접근 개수를 제한.
모니터(Monitor): 동기화와 조건 변수를 함께 제공하는 고급 기법.

3-4. 스토리지 관리 (Storage Management)

3-5. 파일 관리 (File Management)

0개의 댓글