CS/OS

[OS] Memory Management(2) - 메모리 관리

JWonK 2023. 5. 29. 21:18
728x90
반응형

  • 하나의 프로세스 당 하나의 Page Table을 가지고 있기 때문에 이를 효율적으로 관리할 필요가 있음
  • 따라서 Page Table Structure에 따라 구분 가능

 

 

  • 페이지를 Hierarchical(계층적)으로 쪼갠 것
  • 간단한 기술의 예로는 2레벨 Page Table, 위처럼 큰 범주로 먼저 나누고 그 안에서 또 나누는 형태

 

 

  • 논리적 주소는 32비트, 4K 크기의 Page로 나뉜다.
    • 한 테이블 안에 20bit -> 100만개 entries
    • page offset은 12bit -> 4096, 4K
  •  그림에서 보이듯 page number는 10bit씩 2개로 나누고 page offset은 12bit로 표현
  • p1은 outer page table에 사용되는 주소값, p2는 다음 level에서 사용(다음 내용 이어서)

 

 

 

  • P1의 1K entries에서 먼저 찾고 이어서 P2에서 한 페이지 안에 displacement값- 한 페이지를 선택했으면 그 시작위치에서 몇 번째 값이냐 몇 번째 워드냐를 찾아가기 위해서 필요한 값 

 

 

 

  • 위 설명 과정을 그림으로 나타낸 것 : P1에서 먼저 찾고 그 값에서 찾은 displacement로 p2 찾고 거기서 찾은 것은 Frame Number(가운데 회색 모양)
  • 맨 마지막 12bit displacement값을 이용해서 찾은 mapping된 frame그 안에서 displacement값을 찾아가는 것

 

 

  • 논리적 주소를 나타냄
  • 32 bit 이상인 Addr 크기일 때 사용
  • Hash 함수 사용 알고리즘에서(Mod) 발생할 수 있는 같은 공간을 나타내는 문제가 발생할 수 있음 (121%10, 11%10)
  • 그래서 같은 결과를 나타내는 문제를 처리하기 위해서 포인터로 누구를 가리키는 형태로 표현함
  • q,s는 entries안 특정 page number값, 뒤에는 frame number값 이렇게 쌍으로 들어감 (r)
  • 그래서 찾은 frame number(r) + 원래 displacement 값 붙여서 physical address로 변환
  • 이 방법에서는 어떤 Hashing Algorithm을 쓰느냐가 중요

 

 

 

  1. logical addr의 p값을 hash function 입력값으로 주고 그 결과값을 hash table에서 찾아가면
  2. 1개가 아닌 여러 개로 있을 수 있기 때문에 포인터로 연결하여 찾으면 Page Number(p)와 Frame Number(r)값을 찾을 수 있다.
  3. Physical Addr로 변환

 

 

 

  • 반대로 Physical Memory영역에서 부터 시작
  • Physical Memory 안에 100개의 Frame 영역이 있으면 Page Table 또한 100개의 entries를 가지고 있어야 함
  • 메모리 공간 절약 가능, 우리가 필요한 Page Table은 1개만 있으면 됨
  • mapping해서 찾아야해서 시간이 오래 걸릴 수는 있음

 

  • CPU에서 logical Addr 정보가 나옴 [pid, p] + displacement
  • Page Table에서 해당하는 값을 찾음 -> 몇 번째 i frame인지 찾음
  • 찾은 i + displacement로 physical Addr로 변환

 

 

 

  • 공유 코드
    • 읽기 전용 - text editor, compiler, windows systems 등
    • 예) 같은 프로그램 내 다른 내용을 포함하고 있는 파일 여는 동작
    • 위 예를 한글이라고 하면 한글은 메모리에 공유되고 있는 것
  • 각각의 프로세스는 Private code와 data를 가짐

 

 

 

  • ed : editor프로그램
  • 위 그림은 3개의 Process와 그것들의 Pagr Table 존재
  • 같은 3개의 ed로 독립된 data를 가지고 있는 형태

 

 

  • 메모리를 볼 때 사용자 view를 돕는 기법
  • 한 프로그램 안에는 여러 구성 요소가 존재 (위에 있음)
  • 구성 요소 하나 하나를 Segment라고 함
  • 크기는 모두 다름 -> 하나의 단위로 묶어 연속적인 메모리를 할당해주되  그 안에선 서로 떨어져 있을 수 있음

 

 

  • 각각의 segment가 연속적인 하나의 공간안에 존재하지만 떨어져 있는 것을 나타내는 그림

 

 

 

  • 이러한 Segment구조를 메모리 상에서 관리해주어야 함
  •  Logical Addr는 [seg-number, offset] 형태로 구성
  • 그리고 Segment Table 존재
    • base - 어느 특정 Segment는 메모리 어디서부터 시작하는지 정보가 존재
    • limit - Segment 크기
  • Segment-Table이 어디있는지 찾아야 함 -> STBR(Segment-Table Base Register)
  • Segment-Table이 몇 개의 Segment로 구성되어있는지 정보 -> STLR(Segment-Table Length Register)
  • Segment-Number < STLR

 

 

 

  • CPU에서 Logical Addr 발생 두 Part [Segment Number | displacement]
  • Segment Table에서 알아내야 하는데 STBR에서 알 수 있음, 몇 개인지도 STLR로 알 수 있음
  • 위 마지막 조건, Segment-Number  < STRL 조건을 만족하지 않으면 trap : addrs error 발생
  • 만족하면 Physical Memory 접근

 

 

 

  • Segment 특성
    • Relocation
      • Segment Table에 의해 동적임
    • Sharing
      • 같은 Segment Number로 공유 가능
    • Allocation
      • First Fit or Best Fit
      • External Fragmentation 존재 : 어느 프로세스가 요구하는 만큼이 한 공간에 이어져 존재하는 것이 아닌 흩어져 뿌려져서 존재, 그래서 받을 수 없는 상태

 

 

 

 

  • Segment Table에 한 비트씩 추가해서 Valid 판별 가능
  • 전용 모드 (read/write/execute) 가능
  • 공유 단위도 Segment 단위
  • Segment 크기는 모두 다름 -> Dynamic storage-allocation problem 발생 가능

 

 

 

  • Segment 5개와 Table(limit, base) 나타냄

 

 

 

  • editor는 공유, data는 private
  • Table 값도 같으므로 공유 가능

 

 

  • MULTICS : Segmentation과 Paging 방법을 엮은 것, 운영체제에서 사용
  • 한 프로세스 내 여러 개 segment 존재, 크기가 page 단위보다 큼 -> 여러 개 segment를 다시 page 단위로 쪼갬
  • 사용자는 여러 개 segment가 하나의 단위로 묶여 연속된 공간에 할당된 것으로 인식되겠지만, 사실은 segment가 page 단위로 쪼개져서 physical memory에 비어있는 Field를 묶어 요청하는 메모리 공간을 제공
  • Logical Addr는 [Segment-number | displacement]로 존재
  • STBR로 위치를 제공해주고 더해서 특정 위치로 찾아감 -> [segment length | page-table base]로 존재

 

 

 

 

  • Segment length를 가져와서 displacement 값이 범위에 만족하는지 체크  (Segment Length > displacement)
  • 만족하면 해당 displacement 값이 [p | d]로 분해
  • page-table base값과 위에서 분해된 p값을 더하여 page table에서의 위치를 찾음
  • Frame Number를 찾아 d'와 함께 physical addr로 변환
  • 그래서 찾은 것이 3번 위치인데 이것이 Page형태로 5개로 나뉨
  • 맨 위의 d값이 7123이고 frame 크기가 2k라고 하자
  • 나눈 몫 : 3, 나머(d') : 979
  • 따라서 오른쪽 page 그림에서 위에서 3번째는 몫에 해당하는 값이고 네 번째가 979값
  • 사용자는 Segment가 이어진 하나의 공간에 존재한다고 인식하지만 사실은 Page로 나뉘어서 효율적으로 관리되고 있는 방식
728x90
반응형