전공/운영체제

가상메모리

러비코스믹 2025. 5. 15. 16:10

Virtual address 

 

// start 0x00~

공유메모리O // fork()

+ sparse (부족한) -> 동적 link lib

 

Demand Paging 

Prgram(Disk) -> Virtual -> 실제 필요한(demand) 일부(page)  -> Physical  

 ㄴ Physical에서..

    if) 유효 X  abort

    if) 메모리에 X -> Swap

// Lazy swapper : 필요할때(page fault) 까지 swapX

 

 

Invaild bit : i  -> Disk(Backing store)

  ㄴ MMU 가 접근시 : page fault 

매우 중요

 

1. 명령어가 in메모리 참조 -> logical -> MMU -> PageTable-> invaild bit : i(0)

     > Page fault 발생!  (trap)

2. OS)

      if) Invaild in Disk : abort

      if) vaild        "        : Swap

3. Free Frame을 찾아 넣어줌

4. PageTable -> vaild (bit : v(1)) 로 수정

5. 명령어 재실행

 

Free frame list : 부팅시 free frame: 0으로 초기화
  ㄴ RAM) 휘발성 -> 부팅시 똥값 -> 0으로

 

Pure Demand Paging : 물리 Memory에 Any Page X -> Process 시작

  ㄴ Multi Page fault

    ㄴ locality로 해결

 

  if) Pa -> page fault 

      ㄴ C/S -> Pa: wait 

        ㄴPb -> Page fault -> 처리 -> Pa 처리 할경우..

        ㄴ 시간 낭비 심함

 

Page Fault Rate : 0 < p < 1

   • if p = 0 : no page faults

   • if p = 1, every reference is a fault

Effective Access Time (EAT)

        EAT = (1 – p) x memory access + p x (page fault overhead + swap page in/out)

 

e.g.) Demand paging Time

Memory access time = 200 ns

// 이상적인 메모리접근 시간

Average page-fault service time = 8 ms = 8000000ns

// page fault overhead + swap page in/out

 

EAT = ((1 – p)  x 200) + (p x 8,000,000) // [ns]

        = 7,999,800 p + 200

  if) p가 천번마다 한번 : p = 0.001

         EAT = 8200 ns =8.2 ms

>>> 200 ns <> 8200 ns :  41배 느려짐!!

 

if want)

10% > 성능저하 

// 10% 미만의 성능저하를 원한다면

220 > 200 + 7,999,800 x p

// 200의 10%성능저하 : 220

20 > 7,999,800 x p

  ㄴ  p < 0.0000025  = 1/400,000

>> 400,000번 마다 Fage Fault 발생하도록 해야함

 

 

Demand page optimization

1. (속도) swap space I/O > File system I/O 

2. (주의)

     if) 메모리O <> Yet No in File system 

     if) stack,heap (anonymous memory) 

     >> swap 공간이 필요할수있음 -> 최적화 X

3. Mobile system : RO 

 

Copy on Write (COW)

child는 parent를 공유메모리처럼 쓰다가..

  ㄴ 수정시 해당 page를 copy 후 free page에 분리해서 write함

 

 

if) many page를 COW.. 

      ㄴ 각각의 process 마다 update -> 속도느림 

>> vfork() : 메모리 공유 개념 X <> 진짜로 같이씀

     ㄴ parent) suspend

     ㄴ child  ) 필요한 메모리를 받아옴    

'전공 > 운영체제' 카테고리의 다른 글

I/O systems  (0) 2025.06.05
Virtual memory-2  (0) 2025.05.23
메모리-4  (0) 2025.05.11
메모리-3  (0) 2025.05.10
메모리-2  (0) 2025.05.09