CPU 내부 구조 — 레지스터
CPU 내부에는 레지스터(Register) 라는 초고속 소형 메모리가 있다. 속도 순서:
레지스터 > 캐시 > 메인 메모리 > 보조기억장치사용자 가시 레지스터 (프로그램에서 직접 사용 가능)
| 종류 | 설명 |
|---|---|
| 데이터 레지스터 | 연산할 데이터 저장, ALU 계산에 사용 |
| 기준 주소 레지스터 | 메모리 시작 위치(Base Address) 저장 |
| 인덱스 레지스터 | 배열·반복 접근 시 특정 위치 계산에 사용 |
| 스택 포인터 레지스터 | LIFO 구조 스택의 현재 위치 저장 |
사용자 불가시 레지스터 (OS·CPU 내부 전용)
| 종류 | 설명 |
|---|---|
| 프로그램 카운터(PC) | 다음에 실행할 명령어의 주소 저장 |
| 명령어 레지스터 | 현재 실행 중인 명령어 저장 |
| 누산기(Accumulator) | ALU 연산 결과 저장 |
| 메모리 주소 레지스터(MAR) | 접근할 메모리 주소 저장 |
| 메모리 버퍼 레지스터(MBR) | 메모리에서 읽어온 데이터 임시 저장 |
메모리 계층 구조
← 속도↑ / 용량↓ / 가격↑
레지스터 (CPU 내부, 가장 빠름)
캐시 (CPU ↔ 메인 메모리 완충)
메인 메모리 (RAM, 휘발성)
보조기억장치(HDD·SSD, 비휘발성)
← 속도↓ / 용량↑ / 가격↓- 캐싱(Caching): 자주 쓰는 데이터를 캐시에 잠깐 보관하는 것
- 캐시 히트: 캐시에 원하는 데이터가 있을 때 → 빠르게 반환
- 캐시 미스: 캐시에 없을 때 → 메인 메모리 접근
캐시의 지역성 (Locality)
캐시 블록 크기가 성능을 좌우하는 이유 — 프로그램은 다음 두 가지 경향을 가짐:
| 종류 | 설명 |
|---|---|
| 공간적 지역성(Spatial Locality) | 방금 참조한 주소와 인접한 주소를 곧 참조하는 경향 (배열 순차 접근 등) |
| 시간적 지역성(Temporal Locality) | 한 번 참조한 주소를 곧 다시 참조하는 경향 (루프 변수 등) |
→ 블록이 크면 히트율이 올라가지만, 전송 부담과 교체 작업도 증가하므로 무작정 늘릴 수 없음
시스템 버스 (System Bus)
CPU, 메인 메모리, 주변장치를 물리적으로 연결하여 데이터를 주고받는 통로.
프로세서(CPU) ──┬── 메인 메모리
├── 주변장치 (디스크, 키보드, 모니터 등)
└── 시스템 버스로 연결| 버스 종류 | 역할 |
|---|---|
| 데이터 버스 | 실제 데이터 전송. 배선 수 = 프로세서가 한 번에 전송할 수 있는 비트 수(워드 크기) |
| 주소 버스 | 주소 정보 전송. 배선 수 = 접근 가능한 메인 메모리 최대 용량 결정 |
| 제어 버스 | 읽기/쓰기 동작, 연산 종류 등 제어 신호 전송 |
주소 (Address)
- 논리적 주소: 프로그램이 사용하는 주소 (컴파일 후 생성)
- 물리적 주소: 실제 메모리 위치
- 논리 주소 → 물리 주소 변환은 운영체제가 수행
메모리 동작
- Memory Reading/Writing Cycle: 메모리 읽기·쓰기 과정 전체를 cycle이라 함
- 접근 시간(Access Time): 데이터를 찾아서 읽어오기까지 걸리는 시간
명령어 구조와 실행
명령어 기본 구조: 연산 코드 + 데이터 (예: ADD X Y)
운영체제마다 명령어 구조가 다름 → 운영체제를 플랫폼이라고도 부름
- Java는 플랫폼 프리 언어: 한 번 작성하면 여러 OS에서 실행 가능
명령어 실행 과정:
시작 → 인출(Fetch: 메모리에서 명령어 가져옴) → 실행(Execute) → 종료인터럽트 (Interrupt)
프로그램 실행 중 갑자기 발생하는 외부 이벤트.
현재 작업 중단 → 인터럽트 처리 → 다시 작업 재개예: 프린터 종이 없음, 키보드 입력, 오류 발생, 장치 오류
운영체제의 정의
사용자와 하드웨어 사이의 중간 매개체로,
자원을 할당·관리하고 입출력 제어 및 데이터 관리 서비스를 제공하는 소프트웨어
- 투명성(Transparency): 사용자가 운영체제의 존재를 느끼지 못하게 동작하는 것 → OS 핵심 기반 기술
- 예: 크롬으로 웹 접속할 때, 내부에서 OS가 네트워크·메모리·파일 시스템을 모두 처리하지만 사용자는 모름
운영체제의 발전 목적
- 편리성: GUI, 마우스 등 → 사용자가 쉽게 사용
- 효율성: CPU·메모리를 효율적으로 활용
- 제어 서비스 향상: 새로운 입출력·네트워크 장치 등장 시 제어
운영체제의 역할과 기능
자원 관리 (대상: 메모리, 프로세스, 주변장치, 파일)
- 여러 프로그램이 동시에 실행될 때 CPU 분배
- 파일 접근 제어 (예: 병원 시스템에서 여러 의사가 같은 환자 데이터 동시 수정 방지)
시스템 관리
- 사용자 권한 부여
- 통신 관리 (TCP/IP가 OS 내부에 내장됨)
- 명령 해석기 (대화형 커맨드, 배치형)
교수님 비유: UN이 국가 간 통신 규칙(Protocol)을 만들듯, TCP/IP는 인터넷의 표준 규칙이다.
메모리 관리
| 종류 | 휘발성 | 역할 |
|---|---|---|
| 메인 메모리 (RAM) | ✅ 휘발성 | 실행 중인 프로그램 저장, CPU는 여기서만 실행 가능 |
| EPROM | ❌ 비휘발성 | BIOS·펌웨어 저장, 전원 켜면 가장 먼저 실행 (부팅 담당) |
| 보조기억장치 (HDD 등) | ❌ 비휘발성 | 운영체제·파일 저장 |
부팅 과정: EPROM(BIOS) → 키보드·메모리 확인 → 운영체제를 RAM으로 로드
프로세스 관리
- 프로세스: 프로그램이 RAM에 적재되어 실행 중인 상태
- 자원은 프로세스 생성 시 제공하거나 실행 중에도 할당 가능
- 프로세스 스케줄링: CPU는 하나인데 프로세스는 여러 개 → CPU 사용 순서를 결정하는 것
커널 (Kernel)
운영체제 프로그램 중 가장 기본 기능만 모아놓은 핵심 부분
운영체제 = 커널 + 여러 유틸리티 프로그램
커널 기능: 프로세스 관리, 메모리 관리, 장치 관리
명령 해석기 종류:
- 대화형 커맨드: 사용자와 실시간 상호작용 (터미널, 웹 브라우저)
- 배치형(일괄 처리): 명령을 모아서 한 번에 처리 (카드 청구서 발송 등)
버퍼링과 스풀링
프로세서(CPU)와 입출력 장치는 속도 차이가 매우 크다. 이 차이를 해소하기 위한 두 가지 기법:
| 구분 | 버퍼링 | 스풀링 |
|---|---|---|
| 저장 위치 | 메모리(RAM) | 디스크(HDD 등) |
| 개념 | 중간 메모리(버퍼)에 임시 저장 | 저장 매체에 저장 후 순차 처리 |
| 예 | 동영상 스트리밍 버퍼 | 이메일, 프린터 출력, 카카오톡 |
운영체제의 발전 과정
| 연도 | 운영체제 형태 | 주요 특징 |
|---|---|---|
| 1940년대 | 운영체제 없음 | 기계어로 직접 프로그래밍, 작업별 순차 처리 |
| 1950년대 | 일괄 처리 시스템 | IBM 701 등장(OS 효시), 버퍼링·스풀링 도입 |
| 1960년대 | 다중 프로그래밍·시분할·다중 처리·실시간 | 가상 기억장치 등장, OS를 고급 언어로 작성 |
| 1970년대 초반 | 다중 모드·범용 시스템 | TCP/IP 통신 표준 활성화, 네트워크·보안 영역으로 발전 |
| 1970년대 중반 | 분산 처리 시스템 | 네트워크 기술 발전, 펌웨어 개념 등장 |
| 1990년대 | 병렬·분산 계산 | WWW 등장, GUI 강화, 개인용·서버용 OS 보편화 |
| 2000년대 이후 | 모바일·임베디드·가상화·클라우드 | 서버 가상화, 클라우드 컴퓨팅 등장 |
운영체제 유형
| 유형 | 설명 |
|---|---|
| 일괄 처리 시스템 | 들어온 순서대로 처리, 순서 변경 없음 |
| 다중 프로그래밍 시스템 | 여러 프로그램이 동시에 실행되는 것처럼 동작 |
| 다중 처리 시스템 | 프로세서 2개 이상으로 여러 작업 병렬 처리 |
| 시분할 시스템 | CPU 시간을 여러 사용자에게 균등 분배 (현재 일반 OS에 사용) |
| 실시간 처리 시스템 | 지연 없이 즉시 처리 (항공·무기 시스템) |
| 분산 처리 시스템 | 여러 컴퓨터가 하나의 작업을 나눠 처리 |
현재 OS에는 일괄처리·시분할·다중처리 기능이 이미 구현돼 있으며, 작업 성격에 따라 방식이 결정된다.
주요 개념
- 레지스터: CPU 내부 초고속 임시 저장 장치
- 캐시 메모리: CPU와 메인 메모리 속도 차이를 줄이는 중간 메모리
- PC(Program Counter): 다음 실행할 명령어 주소를 가리키는 레지스터
- 논리 주소 vs 물리 주소: 프로그램이 사용하는 주소와 실제 메모리 주소는 다름
- 인터럽트: 실행 중 외부 사건으로 CPU가 현재 작업을 잠시 멈추는 것
- 투명성: 사용자가 OS의 개입을 느끼지 못하게 하는 것 — OS의 핵심 설계 원칙
- 커널: OS의 핵심. 직접 하드웨어를 제어하며 사용자 프로그램이 건드릴 수 없음
- 버퍼링 vs 스풀링: 둘 다 속도 차이 해결이지만, 저장 위치가 메모리냐 디스크냐로 구분
- 시분할 시스템: 빠르게 번갈아가며 CPU를 사용해 동시에 실행되는 것처럼 보이게 함
다시 보기
Q. 논리 주소와 물리 주소는 왜 다른가?
- 여러 프로그램이 동시에 실행될 때, 각 프로그램은 자기가 메모리 0번지부터 시작하는 것처럼 동작한다(논리 주소). 실제 메모리에는 이미 다른 프로그램들이 올라와 있으므로, 운영체제가 논리 주소를 실제 위치(물리 주소)로 변환해 준다.
Q. 스택 포인터가 LIFO 구조라는 게 무슨 의미인가?
- 탄창처럼 마지막에 넣은 것이 먼저 나온다(Last In, First Out). 함수 호출 시 복귀 주소·지역 변수 등을 스택에 쌓고, 함수가 끝나면 역순으로 꺼낸다.
Q. 캐시 히트/미스가 성능에 얼마나 영향을 미치나?
- 캐시 접근은 수 나노초, 메인 메모리 접근은 수십~수백 나노초로 차이가 크다. 캐시 히트율이 높을수록 프로그램 전체 실행 속도가 크게 올라간다.
Q. EPROM과 RAM이 둘 다 메모리인데 왜 다른가?
- EPROM은 전원이 꺼져도 데이터가 유지되는 비휘발성 메모리로, BIOS 같은 기본 부팅 프로그램이 저장된다. RAM은 전원이 꺼지면 사라지는 휘발성 메모리로, 실행 중인 프로그램을 담는 공간이다.
Q. 버퍼링과 스풀링은 거의 같아 보이는데 실제 차이는?
- 버퍼링은 메모리에 임시 저장하고 CPU가 기다리지 않고 다른 작업을 할 수 있게 한다. 스풀링은 디스크에 저장하고 나중에 순서대로 처리한다는 점이 다르다. 이메일은 상대가 받을 때까지 서버 디스크에 저장되므로 스풀링의 예다.
Q. 시분할 시스템이면 실제로는 동시에 실행이 안 되는 건가?
- 맞다. 물리적으로는 CPU가 하나씩 처리하지만, 전환이 너무 빨라서(밀리초 단위) 사람 눈에는 동시에 보인다. 각 프로세스에게 주는 시간 조각을 퀀텀(Quantum)이라 한다.
'운영체제' 카테고리의 다른 글
| [운영체제] 스케줄링 알고리즘과 메모리 관리 — FIFO부터 페이징까지 (0) | 2026.04.17 |
|---|---|
| [운영체제] 세마포와 모니터 — P·V 연산으로 구현하는 동기화 (1) | 2026.04.17 |
| [운영체제] 병행 프로세스와 상호배제 — Dekker 알고리즘과 임계 영역 (1) | 2026.04.17 |
| [운영체제] 운영체제란 무엇인가 — 정의·커널·버퍼링·발전 과정 (2) | 2026.04.17 |