[운영체제] 공룡책 - 메모리 관리 Memory Management 요약
728x90
반응형
메모리(기억 장치 종류)
- 레지스터 -> 캐시 -> 메인 메모리 -> 보조기억장치 (계층 구조)
- 왼쪽으로 갈수록 비싸지고 용량이 작고 빠르다
- I/O 병목현상 해결하기 위한 계층구조이다
- 레지스터와 캐시는 CPU 내부에 존재하여 HW가 관리하고 나머지 메모리 종류는 SW(OS)가 관리한다.
- Block단위
- 하드디스크 (보조 기억장치)에서 메모리로 데이터를 올릴 때 1비트를 읽더라도 효율성을 위해 해당 1비트만 가가져오는 것이 아니라 block단위로 데이터를 읽어온다. (보통 1~ 4kb)
- word 단위
- 메인 메모리에서 레지스터로 데이터를 word 단위로 읽어온다.
- 컴퓨터에서 32비트, 64비트 시스템은 워드 단위이다.
Address Binding
- 프로그램의 논리 주소(cpu가 생성하는 주소)를 실제 메모리의 물리주소로 매핑하는 작업이다.
- binding 시점에 따라
- compile time binding
- load time binding
- run time binding 으로 구분한다
- compile time binding
- 컴파일러가 프로세스가 메모리 어느 위치에 들어갈 지 미리 알고 있다.
- 한 번 정해진 위치를 계속 쓴다.
- 프로그램 전체가 메모리에 올라가야 한다.
- MS-DOS.COM
- load time binding
- 컴파일 단계에서 메모리 적재 위치를 모르면 상대주소를 생성한다.
- 적재시점에 시작 주소 + 상대 주소를 반영하여 사용장의 주소를 재설정한다.
- 시작주소가 400이고 상대주소가 300이면 700으로 재설정한다.
- 프로그램 전체가 메모리에 올라가야 한다.
- run time binding
- 수행시간까지 address binding을 연기한다.
- 컴파일타임, 로드 타임 바인딩에서는 논리주소와 물리주소가 같게 생성되는데 실행시간 바인딩은 다르게 생성된다. 이 때 논리 주소가 가상 주소라고 하는데 일대일 매칭을 하드웨어 디바이스인 mmu가 담당한다.
- hw의 도움이 필요하다 (MMU: memory management unit)
- 대부분의 OS가 사용한다
Dynamic Loading
- 모든 루틴을 교체가능한 형태로 디스크에 저장한다
- 실제 호출 전까지 루틴을 적재하지 않는다. (메인 프로그램만 메모리 적재)
- 루틴의 호출 시점에 address binding 을 수행한다.
- 메모리 공간을 효율적으로 쓸 수 있다
Swapping
- 프로세서 할당이 끝나고 수행 완료된 프로세스는 swap-device로 보냄 (swap out)
- 새롭게 시작하는 프로세스는 메모리에 적재 (swap-in)
Memory Allocation
- Continuous memory allocation (연속할당)
- Non-continuous memory allocation(비연속 할당)
연속 할당 (고정 분할 방식, 가변 분할 방식)
- 프로세스를 하나의 연속된 메모리 공간에 할당하는 정책
- 코드, 데이터, 스택
- Uni-programming
- 문제 발생하는 경우 : 프로그램크기 > 메모리 크기 일때
- 해결법: overlay 구조 적용
- 메모리에 현재 필요한 영역만 적재
- 통째로 올리기 때문에 os가 잘라주지 못해 사용자가 해줘야 한다.
- 문제점: 커널 보호 (프로그램 공간을 자르다가 다른 메모리 공간 침범할 수 있다)
- 해결방법: 경계 레지스터로 메모리를 보호한다.
- 단점
- 시스템, 자원 활용도가 낮다
- 해결법
- 멀티 프로그래밍
- Multi-Programming
- Fixed Partition Multiprogramming 고정분할(FPM)
- 메모리 공간 고정된 크기로 분할
- 각 프로세스는 하나의 partition에 적재된다
- 멀티프로그래밍 정도 = 파티션의 수 = K (분할하는 만큼 프로세스 넣을 수 있다)
- 단편화 발생
- 내부 단편화
- 파티션의 크기 > 프로세스 크기
- 메모리가 낭비된다
- 외부 단편화
- 남은 메모리크기> 프로세스 크기지만 남은 메모리들이 연속된 공간이 아님
- 메모리가 낭비된다
- 요약
- 고정된 크기로 메모리를 미리 분할한다
- 메모리 관리가 간편 (low overhead)
- 시스템 자원이 낭비된다
- 내부/외부 단편화 발생
- Variable Partition Multiprogramming 가변 분할 방식
- 초기에는 전체가 하나의 영역
- 프로세스 처리하는 과정에서 메모리 공간이 동적으로 분할된다
- 필요한 만큼 잘라주기 때문에 내부 단편화 없음
- 끝난 프로세스가 메모리에서 나가면서 중간중간 메모리가 비며 외부 단편화 발생
- 이후 다른 프로세스가 들어올 때 프로세스를 어떻게 배치할 것인가? => 배치 전략
배치 전략 Placement Strategies
First-fit 최초 적합
- 들어갈 수 있는 최초 파티션을 선택한다
- 단순하고 오버헤드 적다
- 공간 활용률이 떨어진다
Best-fit 최적 적합
- 프로세스가 들어갈 수 있는 파티션 중 가장 작은 곳을 선택한다
- 적합한 곳을 찾으므로 탐색시간이 오래 걸린다 => 오버헤드
- 크기가 큰 파티션 유지 가능, 작은 크기의 파티션 너무 많이 발생
Worst-fit 최악 적합
- 프로세스가 들어갈 수 있는 파티션 중 가장 큰 곳 선택
- 모든 파티션 살펴보므로 탐색 시간 오래걸림 => 오버헤드
- 작은 크기의 파티션 발생 줄일 수 있다
- 큰 크기의 파티션 확보 어렵다
Next-fit 순차 최초 적합
- state table에서 마지막으로 탐색한 위치부터 탐색한다
- 메모리 사용빈도 균등화 전략
- 오버헤드 적다
외부 단편화 발생시 새로운 프로세스 위해 메모리 공간을 확보하는 방법
공간 통합 Coalescing holes
- 인접한 빈 영역을 하나의 파티션으로 통합하는 방법
- 기존 프로세스가 메모리를 release하고 나가면 새로운 프로세스가 들어올 수 있다
- 오버헤드 적다
메모리 압축 Storage Compaction
- 띄엄 띄엄있는 빈 공간들을 하나로 통합
- 오버헤드 높다
- 기존의 프로세스들을 중지하고 재배치해야된다
- 많은 시스템 자원 소비
요약
- Address Binding: cpu가 생성하는 논리 주소를 실제 메모리의 물리주소로 매핑하는 작업. OS 대부분 runtime address binding을 사용하며 hw의 mmu가 담당한다.
- 메모리 연속 할당: 연속된 메모리를 할당하는 방법. 분할 방식은 고정분할 방식과 가변분할 방식이 있다.
- 내부 단편화 현상을 막을 수 있는 방법 : VPM 가변 분할 방식
- 교체 전략: first fit, best fit, worst fit
- 외부 단편화 문제: 공간 통합 (오버헤드 적음), 메모리 압축 (오버헤드 큼)
출처
유튜브 운영체제 강의
www.youtube.com/watch?v=W8q3TKB9Lbo&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=32
728x90
반응형
'운영체제(os)' 카테고리의 다른 글
[운영체제] 공룡책 - 데드락 (Deadlock) 요약 (0) | 2021.04.06 |
---|---|
[운영체제] 공룡책 - 가상 메모리 Virtual Storage 요약 (0) | 2021.04.06 |
[운영체제 1주차 스터디] 공룡책 2장 운영체제 구조 정리 (0) | 2021.03.13 |
multi 시리즈 (multi-processing, multi-threading, multi-programming) (0) | 2021.01.31 |
TAGS.