OS

벼락치기 - 운영체제 9

haerangssa 2024. 6. 9. 21:30

w9. 물리메모리 관리

메모리 할당 방법에는 크게 두가지가 있음. 

1. 연속 메모리 할당-> 단일, 다중-> 고정, 가변분할(다중)

2. 불연속(분산) 메모리 할당-> 페이징(고정), 세그먼테이션(가변) / segmentation-paging 혼용기법


🚶‍♀️ 연속 메모리 할당 / external, internal 발생가능

1. 단일프로그래밍

상대주소 사용. MMU의 base register 이용해서 물리주소 계산 후 메모리에 전달.  (다중프밍도마찬가지)

 

2. 다중프로그래밍

i)  고정분할: 프로세스의 크기에 상관없이 미리 메모리 공간을 나눠놓는데, 이때 공간의 크기는 다를 수도 있음. 

- 하나의 분할에는 하나의 프로세스 실행 가능

- 동시에 메모리에 올릴 수 있는 프로그램 수가 고정됨.

  •     장점

           일정한 크기로 분할하여 메모리 관리가 수월

  •     단점

            자투리 공간이 생겨 낭비가 됨.

       -> internal fragmentation. 내부 단편화. / 분할된 공간에 프로세스가 들어가고 남는 자투리 공간.(합칠 수 없음)

       -> external fragmentation. 외부 단편화. / 분할을 너무 작게 해서 아예 프로세스가 들어가지 못 하고 남는 경우. 

 

ii) 가변분할: 프로세스의 크기에 따라 메모리를 나눔. 들어오는 대로 자리 차지. 

- 프로세스의 실행 순서대로 메모리를 할당함.

- 고정된 경계를 없애고 각 프로세스의 크기만큼 할당함.

- limit register(경계레지스터)로 해당 프로세스 내부의 코드에 대한 접근인지 판단.

/ 원하는 메모리가 포함된 주소에 접근하는지 확인. -> 다른 메모리 주소로 넘어가면 안되니까. => limit register(경계 레지스터)는 base register(기준 레지스터)값과 해당 프로세스 주소의 끝값 사이를 계산.(최대크기)

  •     장점

           하나의 프로세스를 연속된 공간에 배치할 수 있음.

  •     단점

   1. 실행되던 프로세스가 종료되고, 각 프로세스 크기의 빈공간이 생김. 이때 빈공간보다 큰 프로세스가 들어오면 메모리를 배정하지 못함.         => 외부단편화 ( external fragmentation)가 발생함. // 미리 잘라놓는 것이 아니기에 internal fragmentation은 발생하지 X.

 

   2. 자투리 공간을 하나로 합치는 작업(compaction)이 필요할 수 있음 => 큰 프로세스 들어올 수 있게

   (이 과정에서 다른 프로세스의 자리도 옮겨야 함) run time binding-주소가 계속 바뀌어야 함.(주소 합치기)


🏃‍♂️ 가변분할의 메모리 배치 방식 (연속메모리할당- 다중프로그래밍)

프로세스가 빠져나간 후 생긴 external fragmentation을 해결하기 위해서

메모리 배치 방식을 고려하고, compaction을 통해 자투리 공간들을 하나의 덩어리로 만듦.

 

  • 메모리 배치 방식

1. first fit(최초배치)

처음 발견한 빈공간에 자리가 있다면 프로세스를 배치함. 없다면 다음 빈공간으로 이동 후 배치.

=> 단점: 공간 활용률 떨어질 수 있음.

 

2. best fit(최적배치)

메모리의 빈공간을 모두 확인한 후, 들어갈 수 있는 크기 가운데 가장 작은 공간에 배치. 

=> 단점: 검색시간 오래걸림(빈공간 모두 확인), 딱맞는 공간 없을 땐 아주 작은 자투리 공간이 생김.

 

3. worst fit(최악배치)

빈공간을 보두 확인한 후, 들어갈 수 있는 크기 가운데 가장 큰 공간에 배치. 

=> 장점: 최적배치보다 메모리 활용 면에서는 더 유용할 수도 있음. 메모리 들어가고 남는 부분에 또다른 프로세스 할당 가능. 

=> 단점: 검색시간 오래걸림(빈공간 모두 확인). 

 

  • compaction(조각모음)

이미 배치된 프로세스를 옮겨 빈 공간들을 하나의 큰 덩어리로 만드는 작업.

 

1. 프로세스의 동작을 멈춤

2. 프로세스를 적당한 위치로 이동. (이동하니까 상대주소값을 변경)

3. compaction 마친 후,  해당 프로세스 작업 재개


🚴‍♀️  다중프로그래밍에서의 메모리 보호 

cpu가 메모리에 접근할 때, 접근하려는 프로세스가 아닌 다른 프로세스의 주소로 넘어가는 것을 방지하기 위해 메모리 보호가 필요함. 

->  base register와 limit register이용! 

 

      base register: 가장 낮은 주소보다 큰지 확인

      limit register: 가장 높은 주소보다 작은지 확인

 

이 과정을 통해 접근하려는 프로새스 내부의 코드에 대한 접근인지 판단함.

 

 

w10. 가상 메모리의 기초 1

- vitual M의 개요

- paging

- segmentation

- segmentation-paging 혼용기법

 

Virtual Memory System

virtual 메모리

각 process에 자신만의 가상 메모리공간 제공(HHD에 존재). / 주소 0번지부터 시작. 

0번지부터 시작한다는 것만 알면 되기 때문에, 프로그래머들은 메모리에 올라갈 주소공간을 고려하지 않아도 된다는 장점이 있음.

 

virtual memory 구성

virtual M영역: cpu가 바라보는 메모리 영역

+

physical M영역: 실제 물리적인 메모리 영역 / MMU의 관리 O

+

swap 영역: 물리적 메모리에서 벗어난(쫓겨난) 프로세스 모아두는 영역 / MMU의 관리 O

==> MMU가 사용할 수 있는 메모리의 전체 크기


🚶‍♀️ 불연속 메모리 할당 - paging 기법의 구현

/ internal 발생가능, external은 X

 

paging: 고정분할 방식을 이용한 Virtual M 관리기법

#frame
물리메모리 주소공간을 고정된 같은 크기로 나눠 사용
physical M의 분할된 각 영역을 번호 매겨 관리.

#page
가상메모리 주소공간을 고정된 같은 크기로 나눠 사용.
virtual M의 분할된 각 영역을 번호 매겨 관리.
* page와 frame의 크기는 동일. > page는 어디에나 배치될 수 있음.

#page table
어떤 페이지가 어떤 프레임에 있는지에 대한 매핑 정보 저장
프로세스마다 하나씩 존재.(physical M안에 존재)

 

CPU가 physical M의 특정 주소로 접근하는 방법

1. logical 주소에(in virtual M) 나와있는 page 번호를 확인

2. page table로 이동 후, 해당 page 번호에 따른 frame 번호를 확인 .

3. 해당 frame 번호를 가진 physical M의 주소로 이동.


🏃‍♂️ paging 시스템의 하드웨어 구조 

* d만큼 떨어진 부분은 page에서나 frame에서나 동일하게 적용됨.

1. cpu는 virtualM의 페이지 4에서 d만큼 떨어진 부분을 접근하길 원함. 

 

2. MMU로 이동해 logical 주소를 physical 주소로 변환.

page 번호를 확인하고, 페이지테이블의 4번 entry로 이동 후, frame 번호 1 확인. (d는 동일) =>physical 주소로 변환 성공

 

3. 변환된 physical 주소를 바탕으로 physical M의 1번 frame으로 접근. 

4. 1번 frame에서 d만큼 떨어져 있는 주소를 CPU에게 전달.


🚴‍♀️  paging 기법의 주소 변환

가상주소 VA=<P,D>
VA: 가상주소
P: 페이지
D: 거리(=offset, 페이지의 처음위치에서 해당 주소까지의 거리)

물리주소 PA=<F,D>
PA: 물리주소(실제주소)
F: 프레임
D: 거리(=offset, 프레임의 처음위치에서 해당 주소까지의 거리)

 

page table 이용해서 P->F (D는 그대로)

*D는 page와 frame의 크기를 동일하게 나눠서 변경하지 않음.

 

Ex)

1. 한 페이지의 크기가 10byte인 virtualM에서 가상주소 24번지(접근하려는 주소)

*가상주소/ 페이지크기 => 몫: P, 나머지:D

24/10=> P: 2, D: 4

VA=<2,4>

 

2. 한 페이지의 크기가 10byte인 가상주소 30번지

30/10=> P:3, D:0

VA=<3,0>

 

3. 한 페이지의 크기가 2의 10승(1024)인 가상주소 980번지

980/1024=> P:0, D:980

VA=<0,980>

 

〰️

<MEMORY 주소>

 

4Gbyte인 메모리를 4Kbyte크기로 나누면 몇개의 block?

4G= 2의 32승

4K= 2의 12승

=> 나누면 2의 20승개의 block 생김.

 

〰️

<16bit 컴퓨터에서의 예제> 

- p: 6bit

- d: 10bit

 

16bit CPU의 컴퓨터에서, 한 page의 크기가 2의 10승 byte일때 

* 2의 16승/ 2의 10승 = 2의 6승

=> 전체 page수는 2의 6승(64)개

 

3. 한 페이지의 크기가 2의 10승(1024)인 가상주소 980번지 - 다시 ( in 16 bit com)

980/1024=> P:0, D:980

VA=<0,980>

 

980= 0000 0011 1101 0100(2) - 16bit

 

p(6bit): 000000

d(10bit): 1111010100 (980)


🚶 page table 관리 (in physical M)

각 page table의 시작주소: Page Table Base Register (PTBR, page table 기준레지스터)

각 page table의 크기.길이주소: Page Table Length Register(PTLR, 끝 위치 저장됨)

 

Physical M의 크기가 작을 때는 프로세스만 swap area로 옮겨지는 것 아니라, page table의 일부도 옮겨짐.

 

🚶‍♀️ page table의 mapping방식

1. direct mapping(직접매핑)

page table 전체가 Physical M의 운영체제 영역에 존재. 부가작업 없이 바로 주소변환 가능

2. associative mapping(연관매핑)

- 동적주소할당의 성능향상을 시키는 방법. 일반적으로 TLB(cache M) 사용

- 일부 내용만 무작위로 accociative M으로 가져오는데, 무작위라서 page번호와 frame번호 둘 다 표시.

- 주소변환 방법

   1. associative M(TLB) 내의 page table 모두 검색

   2. 원하는 frame 번호를 얻지 못하면 main M에 있는 전체 page table 검색.

   => 검색 실패 시 main M에서 다시 검색해서 시간낭비임

 

- TLB: translation look-ahead buffer, 주소 변환을 위한 캐쉬 메모리. -MMU 내

   TLB hit: cpu가 TLB에 주소 갖는지 요청하고, 있다면 TLB에서 cpu로 주소 전달 후 메모리의 해당주소로 이동함. => 매우 빠름 

   TLB miss: 원하는 page번호가 없다면, main M에 저장된 direct mapping table(page table) 사용해 frame 번호로 변환 

 

   TLB 단점: miss가 빈번할 경우 시스템 성능의 저하가 발생. 

                   랜덤으로 페이지 테이블의 일부를 가짐=> 검색시간 필요. 

                   모든 TLB를 검색한 후에야 원하는 page가 TLB에 없다는 것을 알 수 O

- parallel searching(병렬탐색) 방법의 TLB를 연관 레지스터라고도 함. 

 

* parallel searching 효과

1. TLB searching 시간 감소

2. TLB miss일 땐 TLB를 모두 찾는 시간을 줄일 수 O

 

3. set-associative mapping(집합-연관매핑)

page table을 같은 크기로 여러묶음으로 나누고,

set(directory table)을 새로 만들어 각 묶음의 시작주소를 넣어둠. - 해당 묶음이 현재 TLB에 있는지, main M에 있는지 알 수 O

디렉토리 테이블(set)을 살펴보면 원하는 table 묶음의 위치를 알 수 있기에, 전체 table 보지 않아도 TLB miss를 바로 알 수 있음. 

🏃 Set-associative mapping과 associative mapping 비교

associative mapping

Physical M의 데이터가 무작위로 associative M(TLB)로 올라옴.

=> 원하는 frame 번호 얻기 위해 모든 page table 검색해야 하는 문제 존재. 

 

set - associative mapping

(=directory mapping. SET과 TLB로 나눔)

- page table을 일정한 set으로 자르고, 자른 집합의 단위로 physical M에 가져옴

- page table을 n개씩 자르고 관리하는 page table을 하나 더 생성. 

- 새로 생성한 set table 내용

   일정하게 자른 page table의 위치정보(TLB/ Physical M) 표시

=> set table을 통해 원하는 page table entry의 위치 정보를 쉽게 파악 가능~!

 

 

🏃‍➡️ Set-associative mapping의 가상주소

형태: VA=<P1(set), P2(set안의 위치정보-묶음), D>

page table이 일정 크기의 묶음으로 나뉘어서 세개의 요소 필요.

프로세스가 특정 주소를 요구 => VA=<P1,P2,D>로 변환 => P1을 이용해 directory table(set table)에서 주소 찾음

i(invalid) - TLB miss

원하는 table이 physical M에 있다면 묶음 table의 시작 주소가 명시되어 있음.


'OS' 카테고리의 다른 글

벼락치기 - 운영체제 12  (0) 2024.06.10
벼락치기 - 운영체제 11  (0) 2024.06.09
벼락치기 - 운영체제 10  (0) 2024.06.09