**CPU의 활용률(Utilization)을 극대화
사용자에게 빠른 응답을 제공
보다 많은 Program을 Memory에 올려서 실행 (Multi-Programming)
여러 Program을 동시에 실행시키기 위한 Scheduling 기법 등장
여러 Program이 동시에 Memory에 적재되어 실행되면서, Memory를 공유할 필요가 생김
Computer의 Memory는 한정된 자원
실행하는 Program이 많아지면 Memory 요구량이 증가
Process에서 참조할 수 있는 주소들의 범위(집합)
Processdhk 1:1 관계
사용자 Thread는 주소 공간을 공유함
**CPU의 주소 버스(Address Bus)의 크기에 의존
주소 버스가 32bit인 System에서 주소 공간의 크기
개의 서로 다른 주소에 대한 식별자를 만들 수 있으므로, 0부터 ()까지의 주소 범위를 Addressing 할 수 있음
32bit 주소 버스를 가진 System이 주소 1개당 1Byte의 Memory를 접근할 수 있다면, 이 System이 Address할 수 있는 주소공간의 크기는?
컴퓨터의 메인 메모리를 접근할 때 사용되는 주소
기억 장치의 주소 레지스터에 적재되는 주소
Process의 관점에서 사용하는 주소
CPU 관점의 주소는 물리 주소도, 가상 주소도 될 수 있음
어느 Memory Model을 사용하느냐에 따라 잘라짐
Logical이기 때문에 주소 공간을 의미 있는 단위로 나누어 사용하지 않음
Compiler는 Process가 물리 Memory에서 실행되는 주소를 Compile Time에 알아서 절대 코드를 생성한다.
시작 주소의 위치가 바뀔 경우에는 다시 Compile을 해야 한다.
Compiler가 Symbol Table을 만들고 주소는 Symbol Table Relative한 주소로 이루어짐
**Compile된 Object파일은 주소 0부터 시작함 (Relocatable)
Object 파일들과 System에서 제공하는 Library들을 묶어서 Symbol Table에 의존적이지 않은 주소를 만들어 냄
Link의 결과로 하나의 Executable파일이 만들어진 주소는 0부터 시작함 (아직도 논리주소로...)
Executable은 하나의 주소 공간으로 0부터 시작함

Program의 실행을 위해 Loader는 Executable을 Memory로 Load한다.
주소 공간 전체가 Memory에 올라간다면, Load 시에 물리 주소에 대한 Binding이 일어난다.
Program은 Relocatable 주소로 되어 있기 때문에 Base Register를 통해서 물리 주소로 바꾸어 실행하게 된다.
만일 Program의 시작 주소를 바꾸려면, 다시 Load를 해야한다.
Process가 실행 될 때 물리 주소가 바뀌는 경우, 물리 주소에 대한 Binding은 Process가 실행될 때 일어난다.
이러한 형태의 주소 결정 방법을 사용하기 위해서 MMU와 같은 특별한 H/W가 필요하게 된다.
대부분 General Purpose 운영체제에서는 이 방식을 사용한다
Program 내 Instruction들의 주소를 시작 주소(Base Address)로 부터의 상대적인 Offset으로 표현하는 방법
시작 주소가 결정되면 시작 주소(Base Address) + 상대 주소의 합으로 절대 주소를 생성할 수 있다.


Translation의 속도가 중요한 요소가 된다.




보통 1 Page의 크기는 4KB로 나누어 사용
프레임(Frame)
물리 Memory를 고정된 크기로 나누었을 때, 하나의 Block
페이지(Page)
가상 Memory를 고정된 크기로 나누었을 때, 하나의 Block
각각의 프레임 크기와 페이지 크기는 같다.
(프레임과 페이지는 물리 메모리, 가상 메모리에서 부르는 용어의 차이)
Page 번호
각 Process가 가진 Page 각각에 부여된 번호
ex) 1번 Process는 0부터 63까지의 Page를 가지고 있음
Page 주소
각 Page의 내부 주소를 가리킴
ex) 1번 Process 12번 Page의 34번째 Data

각 Process의 Page 정보를 저장함
Process마다 하나의 Page Table을 가짐
index: Page 번호
내용: 해당 Page에 할당된 물리 Memory(Frame)의 시작 주소
이 시작 주소와 Page 주소를 결합하여 원하는 Data가 있는 물리 Memory 주소를 알 수 있음
Page Table은 물리 Memory에 위치함
(PTBR로 접근)
Page Table 기준 레지스터(PTBR: Page Table Base Register)가 물리 Memory 내의 Page Table을 가리킴
Page Table 길이 레지스터(PTLR: Page Table Length Register)가 Page Table의 Size를 나타냄

page table의 인덱스는 page 번호
page table의 내용은 물리 Memory(Frame)의 시작 주소

Page Base Address
해당 Page에 할당된 Frame의 시작 주소
Flag Bits
Page Table을 이용해 변환된 주소를 TLB에 저장해 둠
다음 접근 시에는 TLB에 저장된 값을 이용하여 빠르게 변환된 주소를 얻을 수 있음
TLB는 Register(CPU내에 존재)이기 때문에, 빠른 수행이 가능함
TLB Hit Ratio
TLB 내에서 원하는 주소를 찾을 수 있는 확률 (높을수록 Memory 접근 속도를 향상시킬 수 있음)

위의 사진과 달리 Page Table에 접근하기 전, TLB에 먼저 접근하는 것을 볼 수 있다
32bit 가상 주소 공간을 가지는 System에서 Page의 크기가 4KB이면, 페이지에 접근하기 위한 Bit의 수는 20bit(= 1MB)이고, (12bit는 page offset) PTE는 보통 4B의 크기를 가짐.
=> page table은 4MB의 크기를 가지게 됨.
프로세스마다 페이지를 소유하고 있기 때문에 (+ 페이지는 물리 메모리에 존재하기 때문에) 100개의 프로세스가 떠있다면, 물리 메모리에 페이지 테이블을 위해서 400MB가 할당되어야 함






Page Table Index : Frame의 번호
Page Table 내용 : Process 번호(PID)와 Page 번호, Page 주소를 함께 넣음
-> Multilevel로도 페이지 테이블의 용량을 줄일 수 있기에... 그렇게 많이 사용하는 방식은 아닌듯

Valid하다는 것은 page가 Secondary Storage가 아닌, 메모리에 올라와 있다는 것을 의미함
**실행을 위한 물리 Memory 구성의 시간이 줄어든다
Process의 전체 이미지를 Memory에 올리지 않기 때문에, 실제 필요한 전체 물리 Memory의 양을 줄일 수 있다
새로운 Frame을 할당 받음
Backing Storage에서 Page의 내용을 다시 Frame에 불러들인다
Page Table을 재구성한다
Process의 작업을 재시작한다

