- 프로세스 최초 실행 시 논리 주소 생성되고 필요한 부분만 실제 물리 주소에 올라가서 실행된다
- 물리 메모리의 어떤 주소에 올라갈지 결정하는 주소 바인딩 과정이 필요하다
- 프로그래머 입장에서는 심볼로 된 주소를 사용하고 컴파일되면 숫자 주소로 바뀐다
- 실행파일의 인스트럭션이 가리키는 주소는 논리 주소이기 때문에 CPU도 논리 주소를 참조한다
- 따라서 CPU가 요청하는 논리 주소에 대응되는 물리 메모리의 주소를 매번 제공받아야 한다(주소 변환)
- relocation register(base register): 물리 메모리 주소의 시작지점 저장 -> 요청받은 논리 주소에 이 값을 더해 변환
- limit register: 해당 프로세스의 최대 주소 번지 저장 -> 악성 프로세스 필터링(다른 프로그램 침범 방지)
- 현대의 메모리 관리는 OS차원에서 페이징 기법으로 하는 것이다 ↔ dynamic loading: 프로그래머의 명시적인 관리
- 요즘에는 두 개념을 같은 의미로 사용하기도 한다
- 예전에 한 프로세스조차도 전체적으로 메모리에 올라갈 수 없었을 때 사용
- 모두 직접 코드로 구현해야 했으므로 매우 복잡
- 프로세스 전체가 쫓겨나는 것 (요즘의 페이징 기법에서는 일부 페이지들만 쫓겨나는 것도 swap out 되었다고 한다)
- dynamic linking으로 메모리 낭비를 줄일 수 있다
- 지금까지 설명된 이론들은 모두 연속 할당을 기반으로 한 것들이다 (현대의 시스템은 불연속 할당)
- 분할 2 < 프로그램 B < 분할 3 의 상황으로 인해
- 외부 조각: 사용되지 않은 공간(분할2), 내부 조각: 분할3 내부의 남는 조각
- paging: 프로세스의 가상 메모리를 일정하게 나누어 일부만 물리 메모리에 저장
- 주소변환이 더 복잡함
- segmentation: 의미단위로 나누어 일부만 물리 메모리에 저장 (예: code, stack, data)
- 크기가 일정하지 않음
출처: https://core.ewha.ac.kr/publicview/C0101020140425151219100144?vmode=f
'CS > OS' 카테고리의 다른 글
20. Memory Management 3 (0) | 2022.04.04 |
---|---|
19. Memory Management 2 (0) | 2022.04.04 |
17. Deadlocks 2 (0) | 2022.03.30 |
16. Deadlock 1 (0) | 2022.03.30 |
15. Process Synchronization 4 (0) | 2022.03.29 |