[OS] Discontiguous Memory Allocation : Paging, Segmentation

parkheeddong·2023년 5월 29일
0

Operating System

목록 보기
41/63
post-thumbnail

Discontiguous Memory Allocation

프로세스의 Image를 여러 조각으로 분할하여 비연속적으로 흩어져서 메모리에 할당하는 기법 !



1. Paging 기법

한 프로세스에 address space가 메모리에 배치될 때 noncontiguous 할 수 있도록 만드는 기법

하드웨어와 운영체제가 closely integrate 됨으로써 가능하다.

🔔 Logical Memory

📌 페이지

Logical Memory(Process의 이미지)를 같은 사이즈의 블록으로 나눈 것

Paging 기법에서는 나뉘어진 조각을 '페이지'라고 한다.
페이지의 크기는 모두 동일하다 ❗

예를 들어 18KB 프로세스라면, 페이지는 총 4KB씩 5개가 있으며 마지막 페이지는 2KB는 사용하지 않는 형태이다.

페이지 사이즈는 주로 2의 거듭제곱 형태이다.(2의 k승)


🔔 Physical Memory

📌 페이지 프레임

Physical Memory(주기억장치)를 고정된 사이즈의 블록으로 나눈 것

Logical Memory의 페이지를 Physical Memory의 페이지 프레임에 맵핑시키는 '맵핑 테이블'이 필요하다.



💚 Logical Address : v = (p, d)

(Page Number, Page Offset(=displacement))

(페이지 번호, 해당 페이지의 시작주소부터의 거리)

예를 들어 페이지가 4개씩 4KB라면, 한 페이지당 4096 주소가 있을 것이다. 페이지 0은 0부터 4095번 주소까지, 페이지 1는 4096부터 8191까지, 페이지 2은 8192부터 ~ 이어질 것이다.
그렇다면 9000번지 주소는 (2, 808) 로 나타낼 수 있다.



👇 Address Mapping 방법

Discontiguous Allocation은 메모리에 페이지가 흩어져 있기 때문에 Load Time Binding이 굉장히 복잡하다.

따라서 Discontiguous Allocation 은 'Address Mapping'을 통해, Runtime Binding을 할 수밖에 없다 ❗❗

1) Process가 Address Generation을 할 때 Logical Address는 (p, d)이다.

2) Page Table에서 해당 page를 찾고, Physical Address를 만든다.

3) Main Memory에서 해당 주소에 접근한다.

⭕ OS와 MMU(Memory Management Unit) ⭕이 이를 담당한다. MMU는 위 Logical Address를 Physical Address로 Mapping해주는 것을 말한다.



🌱 Page Table Implementation

프로세스마다 페이지 테이블이 있는데, 이는 메모리 커널 공간 내 프로세스의 PCB에 저장될 수 있다.

그러나 이 경우 페이지 테이블 접근을 위해 매번 메모리 접근을 해야하므로, 프로세스의 Address Mapping을 빠르게 하기 위해서 다음과 같은 방법을 이용한다.

1) CPU 전용 레지스터 이용 (Dedicated CPU Register)

2) TLB (Translation Look-aside Buffer) : Associative Memory이다.

고속으로 접근할 수 있는 기억장치이다. 이 안에 페이지 테이블을 저장해놓고 고속으로 접근가능하게 할 수 있다.





2. Segmentation 기법

프로세스의 이미지를 조각내어 메모리에 불연속적으로 배치한다. 그러나 각 조각의 크기는 서로 다르게 분할되며, 'segment'라고 부른다.


📌 어떤 기준으로 조각을 내는가?!

프로세스의 이미지는 text(code), data(glboal variables), heap, stack, shared memory로 이뤄진다.

text영역, data영역, heap영역, stack영역, shared memory 영역으로 구분해서 segment를 만드는 경우가 많다.



🔔 Logical Address : v = (s, d)

(segment number, offset(displacement))



🔔 Physical Address

5개의 Logical Segment를 메모리에 로딩한 실제 Physical Address를 Segment Table의 Base Address로 저장한다.
또한 각 Logical Segment의 사이즈를 Segment Table의 Limit으로 저장한다.

예를 들어, 0번 segment는 1400번지부터 1000바이트에 걸쳐서 저장되어 있다는 의미이다.



🔔 Address Mapping

Process가 segment0부터 n-1개 가지고 있다고 가정해보자.
Logical Address (s, d)라고 할 때 segment table에 가보면 해당 프로세스는 Physical Memory의 b번지에 위치하고, 그 크기가 l인 것이다.

더불어 displacement가 d이므로, d가 l(전체 사이즈)보다 작은지 확인한다. 만약 작지 않다면, error를 발생시킨다.
만약 작다면, d + b를 더하여 해당 프로세스가 접근하려고 했던 주소에 접근할 수 있다.

=> 역시 OS와 MMU가 해당 과정을 담당한다.

0개의 댓글