가상메모리
프로그램은 프로세스를 실행하기 위해 디스크에서 메모리로 가져와야한다.
메인메모리와 레지스터는 CPU가 직접 접근할 수 있다.
CPU에 내장되어있는 레지스터들은 일반적으로CPU클록의 1사이클 내에 접근 가능
주 메모리의 접근을 완료하기 위해서는 많은 CPU 클록 틱 사이클이 소요
이 경우 CPU가 필용한 데이터가 없어서 명령어를 실행하지 못하고 지연되는 stall현상 발생
이러한 상황은 주 메모리의 접근이 빈번하게 일어나는 경우 용납될 수 없음
- 해결방법은 CPU와 주 메모리 사이 cache, 추가 속도 차이 완화
- 올바른 연산을 위해서 메모리의 보호를 가짐.
: base 와 limit의 두개 레지스터들을 사용하여 보호기법 제공
-
메모리 공간의 보호는 CPU 하드웨어가 사용자 모드에서 만들어진 모든 주소와 레지스터를
-
비교함으로써 이루어 진다.
-
커널모드에서 실행되는 운영체제는 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 어떠한 제약도 받지 않는다.
-
CPU가 생성하는 주소를 일반적으로 논리 주소라 하며, 반면에 메모리가 취급하게되는 주소(MAR)는 일반적으로 물리주소라고 한다.
-
컴파일시 바인딩과 적재시 바인딩은 논리,물리 주소가 같다.
그러나 실행시간 바인딩 기법에서는 논리,물리 주소가 다르다.
-
이러한 경우 논리 주소를 가상주소라 한다.
-
논리주소 집합-논리 주소 공간, 물리주소 집합=물리 주소 공간
-
논리주소를 -> 물리주소로(MMU,Memory Manangement Unit)
base register을 realocation register라고부른다.
사용자 프로그램은 실제적인 물리주소를 절대 알수 없다.
메모리 공간의 이용률을 높이기 위해서는 동적적재를 해야한다.
실제 호출되기 전까지 메모리에 올라오지 않고 재배치 가능한 상태로 디스크에서 대기하고 있다.
장점 : 사용되지 않는 루틴의 경우 절대로 미리 적재되지 않는다.
실행되고 있는 코드는 반드시 물리 메모리에 존재해야한다. 전체 프로세스를 메모리로 올려야함, 항상 프로그램 전체가 메모리에 올라오는 경우는 드물다. 같은시간에 전체올라올 필요 없음.
-
프로그램에는 잘 발생하지 않는 오류 상황을 처리하는 코드가 종종 존재한다. 실제로 거의 발생하지 않으며 실행 잘 안됨.
-
배열,리스트,테이블 등 필요 이상으로 공간을 낭비하는 경우가 있다.
-
프로그램 내의 어떤 옵션이나 기능들은 거의 사용되지 않는다.
프로그램을 이부분만 메모리에 올려놓고 실행
-
프로그램은 물리메모리에 대한 제한을 더 이상 제약을 받지 않는다.
-
프로그램은 더 작은 메모리를 차지하므로 더 많은 프로그램을 동시에 실행할 수 있게 됨.
-
응답시간은 늘어나지 않으면서 CPU이용률과 처리율이 높아진다.
-
프로그램을 메모리에 올리고 스왑하는데 필요한 횟수가 줄어들기 때문에 빨라짐.
가상메모리는 실제 메모리와 논리 메모리를 분리한 것.
-
. 메모리에서 실행을위해 프로그램의 한부분만 필요하다.
-
. 논리 주소공간은 물리 메모리보다 커야한다.
-
. 몇 개의 프로세스에 의해 주소 공간이 공유하는 것을 허락한다.
-
. 효율적인 프로세스 생성을 허락한다.
- . 프로그램들은 동시에 실행하는 것을 허락
-
. 프로세스 스왑이나 적재가 줄어든다.
논리적인 페이지를 물리적인 페이지 프레임으로 사상하는 것 메모리관리장치 (mmu)
-
힙 또는 스택이 확장되어야만 실제 물리 페이지를 요구하게 될 것이다.
-
공백을 포함하는 주소공간을 sparse address space라고 한다.
-
sparse address space의 공백은 스택이나 힙 세그먼트가 확장될 때 사용되거나 프로그램 실행 중 동적으로 라이브러리를 링크할 필요가 있을 때 사용된다.
-
시스템 라이브러리는 여러 프로세스들 사이에 공유 될 수 있다.
-
가상 메모리는 프로세스들이 메모리를 공유하는 것을 가능하게 한다. 영역을 만들어줌.
-
페이지는 fork()함수를 통해 프로세스 생성과정에서 페이지들이 공유되는 것을 가능하게함
-
이에따라 프로세스의 생성속도를 빠르게 할 수 있다.
Demand Paging
-
프로그램 실행 시작 시 프로세스 전체를 메모리로 가져온다.
-
또는 필요로 할 때마다 메모리로 페이지를 가져온다.
- 더 적은 메모리 필요, I/O필요 적어지거나 불필요
- 빠른 응답
-
. 페이지의 필요 -> 주소를 가져옴
-
불필요한 주소 -> 중지
-
메모리에 없음 -> 메모리로 가져옴
Lazy swapper
-
페이지가 필요하지 않는 한 메모리에 적재하지 않는다.
-
스왑퍼는 전체 프로세스를 관리하는 반면 페이저pager는 프로세스 내의 개별 페이지들을 관리한다.
- 따라서 요구 페이징과 관련해서는 스왑퍼보다 페이저용어