프로세스는 기억장치에 할당 되어 저장된다. 그러면 프로세스는 어떤한 방식으로 기억장치에 할당되는걸까??
1. 배경: 컴퓨터 시스템에서 기억장치의 역할

● 기억장치(DRAM)
- 주소를 가진 워드 또는 바이트 단위로 구성됨
- 프로그램이 실행되기 위해선 반드시 기억장치에 적재되어야 함
- 적재된 프로그램은 **프로세스(process)**가 됨
● 프로세스의 실행 흐름
- **PC(프로그램 카운터)**가 명령어 주소 지정
- CPU가 명령어를 가져와(fetch) 해독하고(decode) 실행(execute)
- 결과를 다시 기억장치에 저장(store)
2. 주소 바인딩(Address Binding)
● 개념
- 프로그램의 명령어와 데이터를 기억장치에 적재할 때, 어떤 주소를 가질지 결정하는 과정
- 소스코드에서 사용한 변수나 함수는 실제 실행 시 주소를 알아야 함
● 바인딩의 시점에 따른 분류
| 종류 | 설명 |
| 컴파일 시(Compile Time) | 실행 파일에 절대 주소를 포함. 적재 위치가 고정됨 |
| 적재 시(Load Time) | 실행 시 위치에 따라 재배치 주소를 절대 주소로 바꿈 |
| 실행 시(Execution Time) | 실행 도중에도 주소 변경 가능. 예: 페이징, 세그먼트 등 |
3. 동적 적재(Dynamic Loading) & 동적 연결(Dynamic Linking)
● 동적 적재
- 필요한 함수만 호출 시 메모리에 적재
- 사용하지 않는 함수는 적재되지 않음 → 메모리 절약
● 동적 연결
- 라이브러리를 실행 중에 연결
- 실행 파일 크기를 줄이고, 라이브러리를 여러 프로그램이 공유 가능
4. 논리 주소 vs 물리 주소
| 용어 | 정의 |
| 논리 주소 (Logical Address) | CPU가 생성한 주소 = 가상 주소 |
| 물리 주소 (Physical Address) | 실제 DRAM의 주소 |
● 주소 공간
- 논리 주소 공간: 모든 논리 주소의 집합
- 물리 주소 공간: 대응되는 실제 주소의 집합
5. MMU (Memory Management Unit)

- 주소 변환을 담당하는 하드웨어 장치
- 논리 주소 + 재배치 레지스터 → 물리 주소 계산
- 운영체제가 CPU를 할당할 때 MMU에 시작 주소를 세팅
6. 기억장치 할당 기법
● 4가지할당기법
- 연속 할당 기법
- 페이징
- 세그먼테이션
- 페이지화된 세그먼테이션
1) 연속 할당 (Contiguous Allocation)

- 프로세스를 연속된 공간에 적재
- 외부 단편화(External Fragmentation) 발생
- 할당 전략:
- 최초 적합(First-fit): 첫 번째 맞는 공간
- 최적 적합(Best-fit): 가장 작은 적절 공간
- 최악 적합(Worst-fit): 가장 큰 공간
2) 단편화(Fragmentation)
| 구분 | 설명 |
| 외부 단편화 | 남은 공간이 분산되어 연속되지 않아 사용 불가 |
| 내부 단편화 | 할당받은 공간 중 사용하지 않는 부분 |
| 압축(Compaction) | 프로그램을 이동시켜 연속 공간 확보 (실행 시 바인딩 필요) |
7. 페이징(Paging)

● 핵심 개념
- 프로세스를 고정 크기 단위인 **페이지(page)**로 분할
- 메모리는 같은 크기의 **프레임(frame)**으로 나눔
- 페이지 하나는 프레임 하나에 적재됨 (페이지 크키 = 프레임 크기)
● 장점 & 단점
| 장점 | 단점 |
| 외부 단편화 없음 | 내부 단편화 발생 가능 |
| 주소 공간이 유연해짐 | 주소 변환 필요 → 오버헤드 발생 |
8. 주소 변환 in Paging

● 페이지 테이블(Page Table)
- 논리 주소를 물리 주소로 매핑
- 각 프로세스마다 하나씩 존재
- 운영체제가 페이지 테이블 시작 주소를 MMU에 등록
● 논리 주소 구성


- 논리 주소 = (페이지 번호 p, 페이지 변위 d)
- 빨간색 숫자가 페이지 번호(p)
- 나머지 숫자가 페이지 변위(d) - 논리 주소 공간 크기 = 2^m, 페이지 크기 = 2^n →
- 상위 (m−n)비트: 페이지 번호(p)
- 하위 n비트: 페이지 변위(d)
예시:
- 논리 주소 공간: 2¹² (12바이트)
- 페이지 크기: 2² = 4바이트
- 주소 10 (이진수 1010) →
- 상위 2비트: 페이지 번호 10 = 2
- 하위 2비트: 변위 10 = 2
- ⇒ (p, d) = (2, 2)
'OS' 카테고리의 다른 글
| [운영체제] 페이지 테이블 구조 란?? (0) | 2025.05.19 |
|---|---|
| [운영체제] 페이징 과 TLB (0) | 2025.05.14 |
| [운영체제] 교착상태 란?? (0) | 2025.05.05 |
| [운영체제] 임계 구역 문제 란?? (0) | 2025.04.30 |
| [운영체제] 프로세스의 동기화( 생산자 - 소비자 )란? (0) | 2025.04.23 |