개요
- 시스템의 프로세스는 cpu와 메인메모리를 다른 프로세스들과 공유하는데, 메모리를 공유하는건 특별한 문제들을 일으킴
- 만약, 매우 많은 프로세스가 많은 양의 메모리를 원한다면 그 중의 일부는 실행 자체를 못할 것임
- 또한 임의의 프로세스가 다른 프로세스의 메모리 영역에 접근하여 작성을 한다면 해당 프로세스의 작업은 이상하게 동작하게 될 것임
- 메모리를 에러 없이 더 효율적으로 관리하기 위해서 현대의 시스템은 메인 메모리에 대한 추상화로써 Virtual Memory를 제공함
- Main Memory의 세가지 중요한 기능
- main memory를 디스크에 저장된 주소들에 대한 캐시로 활용할 수 있게 해줌
- 각각의 프로세스에게 동일한 주소 공간을 제공해 줌으로써 메모리 관리를 단순화 시킴
- 각각의 프로세스의 주소 공간을 다른 프로세스로부터 보호해줌
- Virtual Memory에 대해 이해하면 좋은 이유들
- Virtual Memory는 컴퓨터 시스템의 모든 레벨에 대해 영향을 미친다. hardware exceptions, assemblers, linkers, loaders, shared objects, files, and processes들에 대해. 그래서 VM에 대해 이해하는 것이 시스템의 전반적인 동작원리를 이해하는데 도움을 준다
- Virtual Memory는 애플리케이션에 메모리를 생성하고 파괴하는 기능, 한 덩어리의 메모리를 disk 파일로 매핑하는 기능들을 제공해준다
- Application은 변수를 참조하고 포인터를 참조해제하고 malloc 같은 애들을 호출할 때 항상 Virtual Memory와 상호작용을 하기 때문에 이해하고 있어야 위험한 상황이 발생하지 않는다
- 잘못된 포인터를 가지고 있는 프로그램은 “Segmentation fault” 나 “Protection fault” 와 함께 터지게 될 수 있음