메모리 계층 구조와 메모리 핵심 관리
1) 메모리 계층 구조
- 메모리는 컴퓨터 시스템 여러 곳에 계층적으로 존재
- cpu 레지스터 - cpu 캐시 - 메인 메모리 - 보조기억장치 보조기억장치로 갈수록 용량 증가, 가격 저렴, 속도 저하가 있음
- 메모리 계층화의 목적 : CPU의 메모리 엑세스 시간을 줄여 빠른 프로그램 실행
CPU 레지스터 L1/L2 캐시 L3 캐시 메인 메모리 보조기억장치
용도 | 몇 개의 명령과 데이터 저장 | 한 코어에서 실행되는 명령과 데이터 저장 | 멀티 코어에 의해 공유, 명령과 데이터 저장 | 실행 중인 전체 프로세스들의 코드와 입출력 중인 파일 블록 저장 | 파일이나 데이터베이스, 메모리에 적재된 프로세스의 코드와 데이터 일시 저장 |
용량 | 바이트 단위 | KB 단위 | MB 단위 | GB 단위 | TB 단위 |
타입 | SRAM | SRAM | DRAM | 마그네틱 필드나 플래시 메모리 | |
속도 | <1ns | <5ns | <5ns | <50ns | <20ms |
가격 | 고가 | 고가 | 보통 | 저가 | |
휘발성 | 휘발성 | 휘발성 | 휘발성 | 휘발성 | 비휘발성 |
2) 계층화 과정
- cpu 성능 향상 → 더 빠른 메모리 요구 → 작지만 빠른 off-chip 캐시 등장 → 더 빠른 엑세스를 위한 on-chip 캐시 등장 → 멀티코어에 적합한 L1/L2/L3 캐시 등장 ( 메모리 계층화 과정 )
- 컴퓨터 성능 향상 → 처리할 데이터 양 증가 → 저장 장치의 대형화 → 빠른 저장 장치 요구 → SSD 등장
- 계층화의 성공 이유 ( 참조의 지역성 )
- 코드나 데이터, 자원 등이 아주 짧은 시간 내에 다시 사용되는 프로그램 특성
- cpu의 작은 캐시 메모리에 로딩된 코드와 데이터로 한동안 실행
- 캐시를 채우는 시간의 손해보다 빠른 캐시를 이용하는 이득이 큼
- 계층화의 미래
- 메모리와 하드디스크 사이에 또 다른 형태의 메모리 구현 중
3) 메모리 관리
#1 메모리의 역할
- 메모리는 실행하고자 하는 프로그램 코드와 데이터 적재
- cpu는 메모리에 적재된 코드와 데이터만 처리
#2 메모리 관리가 필요한 이유
- 메모리는 공유 자원
- 메모리 보호
- 메모리 용량 한계 극복
- 메모리 효율성 증대
메모리 주소
1) 물리 주소와 논리 주소
- 메모리는 오직 주소로만 접근
#1 물리 주소
- 물리 메모리에 매겨진 주소, 하드웨어에 의해 고정된 메모리 주소
- 0부터 시작하여 연속된 주소 체계
- 메모리는 시스템 주소 버스를 통해 물리 주소의 신호를 받음
#2 논리 주소
- 개발자나 프로세스가 프로세스 내에서 사용하는 주소, 코드나 변수 등에 대한 주소
- cpu가 프로세스를 실행하는 동안 다루는 모든 주소
- 프로세스 내에 매겨진 상대 주소
- 컴파일러와 링커에 의해 매겨진 주소
- 사용자나 프로세스는 물리 주소를 알 수 없음
#3 MMU(Memory Management Unit)
- 논리 주소를 물리 주소로 바꾸는 하드웨어 장치
- 오늘날 MMU는 CPU안에 내장
#4 ASLR(Address Space Layout Randomization)
- 해커들의 메모리 공격에 대한 대비책, 오늘날의 대부분 운영체제가 활용
- 주소 공간의 랜덤 배치
- 프로세스 주소 공간 내에서 스택이나 힙, 라이브러리 영역의 랜덤 배치
- 코드나 전역 변수가 적재되는 데이터 영역의 논리 주소는 변경되지 않음
물리 메모리 관리
1) 메모리 할당
- 운영체제가 새 프로세스를 실행시키거나 실행 중인 프로세스가 메모리를 필요로 할 때, 물리 메모리 할당
- 프로세스의 실행은 할당된 물리 메모리에서 이루어짐
2) 메모리 할당 기법
#1 연속 메모리 할당 기법
- 프로세스별로 연속된 한 덩어리의 메모리 할당
- 고정 크기 할당 시
- 메모리를 고정 크기의 파티션으로 나누고 프로세스당 하나의 파티션 할당
- 가변 크기 할당 시
- 가변 크기의 파티션으로 나누고 프로세스당 하나의 파티션 할당
#2 분할 메모리 할당 기법
- 프로세스를 여러 덩어리로 나눈 후, 각 덩어리 별로 메모리 할당
- 고정 크기 할당 시
- 고정 크기의 동일한 덩이리 메모리 분산 할당 : 세그먼테이션
- 가변 크기 할당 시
- 가변 크기의 동일한 덩어리 메모리 분산 할당 : 페이징
연속 메모리 할당
1) 연속 메모리 할당
- 각 프로세스의 영역을 연속된 메모리 공간에 배치
- 초기 운영체제에서 사용
2) 단편화
- 프로세스에게 할당할 수 없는 조각 메모리들이 생기는 현상, 조각 메모리를 홀이라고 부름
- 내부 단편화
- 할당된 메모리 내부에 사용할 수 없는 홀이 생기는 현상 → 고정 크기 할당에서 발생
- 외부 단편화
- 할당된 메모리들 사이에 사용할 수 없는 홀이 생기는 현상 → 가변 크기 할당에서 발생
3) 연속 메모리 할당의 장단점
- 장점
- 논리 주소를 물리 주소로 바꾸는 과정이 단순, cpu 엑세스 속도 빠름
- 운영체제가 관리할 정보량이 적어서 부담이 덜함
- 단점
- 메모리 할당의 유연성이 떨어짐, 작은 홀들을 합쳐 충분한 크기의 메모리가 있음에도 메모리를 할당하지 못하는 경우 발생
4) 홀 선택 알고리즘 / 동적 메모리 할당
- 운영체제는 할당 리스트 유지
- 할당 요청이 발생하였을 때 홀 선택 전략 3가지
- 최초 적합 : 비어 있는 파티션 중 맨 앞에 요청 크기보다 큰 파티션 선택 할당 속도 빠름 / 단편화 발생 가능성
- 최적 적합 : 비어 있는 파티션 중 요청을 수용하는 가장 작은 파티션 선택 크기 별로 파티션이 정렬되어 있지 않을 경우 전부 검색 가장 작은 홀 생성
- 최악 적합: 비어 있는 파티션 중 요청을 수용하는 가장 큰 파티션 선택 가장 큰 홀 생성
세그먼테이션 메모리 관리
1) 세그먼테이션
- 세그먼트 : 개발자의 관점에서 보는 프로그램의 논리적 구성 단위
- 프로그램을 구성하는 일반적인 세그먼트 종류 (코드/데이터/스택/힙 세그먼트)
- 세그먼테이션 기법
- 프로세스를 논리 세그먼트 크기로 나누고, 각 논리 세그먼트를 한 덩어리의 물리 메모리에 할당하고 관리하는 메모리 관리 기법
- 외부 단편화 발생 : 세그먼트들의 크기가 같지 않기 때문에 세그먼트와 세그먼트 사이에 발생하는 작은 크기의 홀
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제] 가상 메모리 (0) | 2023.07.24 |
---|---|
[운영체제] 페이징 메모리 관리 (0) | 2023.07.23 |
[운영체제] 교착상태 (0) | 2023.07.17 |
[운영체제] 스레드 동기화 (0) | 2023.07.16 |
First Come First Served (FCFS) 구현 (0) | 2023.07.11 |