일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 코딩테스트
- AI
- 코딩
- 운영체제
- 백준
- google coding competition
- nlp
- 알고리즘
- 동적 프로그래밍
- 프로그래밍
- CSS
- 브루트포스
- 동적프로그래밍
- 딥러닝
- 코딩 테스트
- PYTHON
- DFS
- 그래프
- 파이썬
- 네트워크
- 구글 킥스타트
- dp
- BFS
- 리눅스
- kick start
- OS
- linux
- 순열
- 킥스타트
- 프로그래머스
- Today
- Total
오뚝이개발자
[OS]CH8. 메모리 관리(Memory management) 본문
본 글은 HPC Lab의 youtube 강의를 듣고 요약한 것입니다. 모든 이미지 출처 역시 HPC Lab의 pdf 수업자료입니다.
메모리의 종류
레지스터-캐시-메인메모리(주기억장치)-하드디스크(보조기억장치)
Block과 Word
Block : 주기억장치-보조기억장치 사이의 데이터 전송 단위
Word : 주기억장치-레지스터 사이의 데이터 전송 단위(일반적으로 32bit, 64bit 컴퓨터는 이 word를 말한다)
Address binding이란?
프로그램의 논리 주소를 물리 주소로 매핑(mapping)하는 작업
Binding 시점에 따라 세 가지로 구분
- Compile time binding
- Load time binding
- Run time binding
- Address binding을 프로그램 수행시간까지 연기
- HW 도움 필요
- MMU : Memory Management Unit
- 대부분의 OS가 사용
Dynamic Loading
- 모든 routine(function)을 교체 가능한 형태로 디스크에 저장
- 실제 호출 전까지는 루틴을 적재하지 않음
- 메인 프로그램만 메모리에 적재하여 수행
- 루틴의 호출 시점에 address binding 수행
- 장점 : 메모리 공간의 효율적 사용(사용할 것만 메모리에 올리므로)
Swapping
- swap-out : 프로세서 할당이 끝나고 완료된 프로세스는 swap-device로 보냄
- swap-in : 새롭게 시작하는 프로세스 메모리에 적재
Memory allocation
하나의 프로세스가 메모리에 적재된 형태가 연속적/비연속적인지에 따라 구분
Continuous memory allocation : 프로그램을 하나의 연속된 메모리 공간에 적재(메모리에 동시에 올라갈 수 있는 프로세스 수 = multi-programming degree)
Non-continuous memory allocation : 프로그램을 여러 부분으로 나누어 실행 시 필요한 부분만 메모리에 적재
- Continuous memory allocation
- Uni-programming(multiprogramming degree가 1인 경우)
- Multi-programming
- FPM(Fixed partition) 혹은 SPM(Static partition)
- VPM(Variable partition) 혹은 DPM(Dynamic partition)
- Non-continuous memory allocation(Virtual storage)
- Paging system
- Segmentation system
- Hybrid(Paging + Segmentation) system
Fragmentation(단편화)
Internal fragmentation(내부 단편화) : Partition 크기 > Process 크기
External fragmentation(외부 단편화) : 남은 메모리 크기 > Process 크기지만, 연속된 공간 X
Uni-Programming
- 메모리 상에 하나의 프로세스만 존재(가장 간단)
- 문제점
- 프로그램의 크기 > 메모리 크기인 경우 문제!(overlay structure로 필요한 영역만 적재해 해결)
- 커널 보호(boundary register 사용으로 해결)
- 단점
- losw resource utilization(프로그램 하나만 적재하고 남은 공간 waste) -> multi-programming으로 해결
Multiprogramming - FPM
메모리 공간을 고정된 크기로 분할
- 각 프로세스는 하나의 partition에 적재(Process:Partition=1:1)
- Partition의 수 = K라면 multiprogramming degree=K
- Internal/External fragmentation
- 역시 커널 및 각 파티션 간의 영역 보호 문제가 존재->boundary register로 해결
Multiprogramming - VPM
프로세스를 처리하는 과정에서 메모리 공간이 (필요한만큼) 동적으로 분할
- Internal fragmentation X
- External fragmentation O
배치전략(Placement strategies)
First-fit(최초적합)
- 충분한 크기를 가진 첫 번째 partition 선택
- simple & low overhead
- 공간활용율이 떨어질 수 있음
Best-fit(최적접합)
- 프로세스가 들어갈 수 있는 partition 중 가장 작은 곳 선택
- 탐색시간 overhead(모든 partition 살펴봐야 함)
- 크기가 큰 partition을 유지할 수 있음
- But 작은 크기의 partition이 많이 발생(활용하기엔 너무 작은)
Worst-fit(최악적합)
- 프로세스가 들어갈 수 있는 partition 중 가장 큰 곳 선택
- 탐색시간 overhead
- 작은 크기의 partition 발생을 줄일 수 있음
- But 큰 크기의 partition 확보 어려움(큰 프로세스에게 필요한)
Next-fit(순차최초적합)
- First-fit과 유사
- State table에서 마지막으로 탐색한 위치부터 탐색
- 메모리 영역을 고르게 사용할 수 있음
- Low overhead
External Fragmentation 해결법
- Coalescing holes(공간 통합)
- Storage compaction(메모리 압축)
Coalescing holes
- 인접한 빈 영역을 하나의 partition으로 통합
- 수행 시기 : 프로세스가 memory를 release하고 나가면 수행
Storage compaction
- 모든 빈 공간을 하나로 통합
- 수행 시기 : 프로세스 처리에 필요한 적재 공간 확보가 필요할 때 수행
- High overhead : 모든 프로세스 재배치(프로세스 중지) -> 자주 하면 X, 가끔씩 O
'CS 기초 > OS' 카테고리의 다른 글
[OS]CH10. 가상 메모리 관리(Virtual memory management) (0) | 2020.10.20 |
---|---|
[OS]CH9. 가상 메모리 (Virtual memory) (0) | 2020.10.20 |
[OS]CH7. Deadlock(교착상태) (0) | 2020.10.19 |
[OS]CH6. 프로세스 동기화(Synchronization) & 상호배제(Mutual Exclusion) (0) | 2020.10.16 |
[OS]CH5. 프로세스 스케쥴링 (0) | 2020.10.12 |