[OS(2)]Memory Management 3

이유정·2024년 5월 22일
0

운영체제

목록 보기
44/49

Multilevel Paging and Performance


Page table을 2단계로만 사용하는 것이 아니라, 다단계로도 사용할 수 있다.

아무래도 프로그램 주소공간이 굉장히 넓기 때문에 3단계, 4단계... 점점 더 여러 단계의 page table을 사용하는게 가능함.

table을 위한 공간을 줄일 수 있지만, 하지만 한번 주소 변환하려고 할 때 page table을 여러번 거쳐야 하고, page table이라는게 물리적 메모리상에 있기 때문에 메모리에 한번 접근하기 위해서 주소 변환을 위해서 메모리를 4번 접근해야함. (page table이 메모리에 있기 때문에) 주소 변환을 하고 실제 원하는 data에 접근하기 위해서 또 메모리 접근을 해야함. (총 5번 메모리 접근)


인 경우
다섯번 접근하면 500ns
시간 overhead가 큼.
하지만,
TLB (주소 변환을 전담해주는 일종의 cache 메모리.) 를 사용하면 메모리 접근 시간을 줄일 수 있다.

Valid (v)/ Invalid (i) Bit in a Page Table


프로그램마다 주어지는 logical memory


physical memory


주소 변환하는 page table

사실, page table에 주소변환 정보만 들어있는 것이 아니고
부가적인 비트가 entry마다 저장이 되어있음
=> valid-invalid bit

현재 logical memory에는 6번 7번 page가 없음.
그런데 page table에는 6번 7번이 있음.
이유: 프로그램이 가질 수 있는 maximum 사이즈만큼 이 page table entry는 생겨야함
=> table 자료구조 특성상 위에서부터 index로 접근해야 하기 때문임.
하지만 사용이 안되기 때문에 invalid로 표시


0번 page가 2번 프레임에 실제로 올라와 있다는 뜻.

Memory Protection

Protection bit
자기 자신이 자기 page에 접근하는 것이기 때문에 누군가의 접근을 막는 의미가 아님.

  • 연산 권한 문제

page table

  • 프로그램의 code 부분을 담고 있는 page도 있고,
    • code 부분은 그 내용이 바뀌지 않아야 한다. read-only
  • 프로그램의 data나 stack을 담고 잇는 page도 있다.
    • data를 쓰고, update 가능 read/write

Inverted Page Table

page table의 문제

  • 굉장히 큰 용량 차지
    => 공간 overhead를 막아보자는 차원에서 나온 page table Inverted Page Table

Inverted Page Table Architecture


그동안의 page table을 역발상으로 뒤집어놓음.

원래 page table

  • 프로세스마다 존재.

inverted page table

  • 시스템 안에 page table이 딱 하나 존재
    • page table의 entry가 프로세스의 page 개수만큼 존재하는게 아님.
    • 물리적인 메모리의 프레임 개수만큼 존재.

1) 물리적 메모리에 올라가있는 page frame 의 f번째 entry를 가면
2) page table에서 logical memory의 page 번호 (p)가 나오게 한다.

physical address를 보고 logical address를 바꿀 수 있는 table임.

  • table 구조는 배열로서 바로 index를 찾아가는 재미가 있는데, 이 Inverted Page Table은 p page 번호가 주어지면 page table entry 전부를 다 검색해야지만 주소 변환을 할 수 있음.

왜 써야 할까?

  • page table을 위한 공간을 줄이기 위함.
  • 시간적 overhead가 있음.
    • 한번에 주소 변환 x, page table을 전부 다 search를 해봐야지만 이 page p가 어떤 프레임에 있는지를 알 수 있음.

page table에 저장하는 요소

  • p : 논리적인 page 번호
  • pid : page 번호 p가 어떤 process의 p번째 page인지 나타내는 id


inverted page table은 시간적 overhead가 너무큼

  • 위에서부터 순차적으로 검색함.
  • TLB에서 설명했듯이, associative register를 사용해서 이 entry들을 병렬적으로 검색할 수 있게 한다.

Shared Page


프로그램을 구성하는 page들 중에는 다른 process들하고 공유할 수 있는 page가 있다.

  • 재진입 코드(Re-entrant Code)


이런식으로 물리적 메모리 안에 logical address가 적혀있다.
그렇기 때문에 shared code는 모든 프로세스의 "logical address space"에서 동일한 위치에 있어야 한다.
예를들어)

여기서는 1번, 2번, 3번 동일한 logical address임.

예전에)shared memory를 이용해서 프로세스간에 IPC 하는 방법과 조금 다르다.

  • 프로세스간 통신을 목적으로 어떤 Page를 여러 프로세스의 주소 공간을 같이 mapping
  • read-wirte이 가능
  • communication 목적

shared pages

  • read-only만 가능
  • 프로세스가 내용을 접근하다가 다른 프로세스한테 영향을 미치는 문제를 배제한 코드.
  • 코드를 공유하는 것.

Shared Pages Example


공유할 수 있는 코드는 별도로 올리는게 아니라 같은 물리적 메모리 frame으로 mapping을 시켜서 메모리에 한 카피만 올릴 수 있다.

Segmentation

paging 기법 : 프로그램을 구성하는 address space 를 같은 크기의 page단위로 쪼갠것
segmentation 기법: 프로세스를 구성하는 주소 공간을 의미 단위로 쪼갠것.

  • segment를 더 잘게 쪼개고 싶을 때 code 중에서도 함수별로, main 함수 ... 등 별도의 segment로 구성 가능함.

Segmentation Architecture


segmentation 기법의 주소변환은 paging 기법이랑 비슷한 측면이 있음.

  • logical address : segment-numberoffset (segment안에서 얼마나 떨어져 있는지 나타냄.)
  • Segment table: 각 segment 별로 서로 다른 물리적 메모리 주소 위치로 올라갈 수 있기 때문에 segment 별로 주소변환을 해야돼서 생김
    • 주소 변환을 위해 있는 register
      • base-register : segment-table의 시작위치를 나타내는 용도
      • limit-register : segment-table의 길이를 나타내는 용도

Segmentataion Hardware


segmentation 기법을 통한 주소변환을 보여주는 그림.

cpu가 논리주소를 주게되면 두 부분으로 나뉜다.

  • segment 번호
  • segment 내에서 떨어진 offset


segment-table의 시작위치는 register가 갖고 있음.

거기서 segment 번호만큼 떨어진 곳에 entry에가면


이 segment가 물리적인 메모리에 어떤 번지에 올라가 있는지를 가지고 있음. (base)


그런데 , segmentation 기법은 paging과 다르게 entry에 두가지 정보를 가지고 있음.

  • base: 물리적 메모리의 시작위치.
  • limit: segment의 길이를 나타냄.
    segmentation 기법은 의미 단위로 자르기 때문에 크기가 균일하지 않을 수 있어서 길이가 얼마인지를 segment table에 같이 가지고 있어야함.


1) 논리주소의 segment 번호가 STLR 즉, 프로그램이 사용하는 segment의 수보다 작은지 확인해서, 만약 그 값보다 큰 segment 번호를 요청했다고 하면은 잘못된 시도 trap 걸림.



2) 이 segment의 길이가 예를 들어 1000 바이트인데 segment안에서 떨어진 위치(d : offset)를 2000바이트로 요청했다? => trap



만약 정상적인 요구라고 하면 주소 변환을 하게 되는데 주소 변환은 segment의 시작위치 base에다가 offset인 d를 더해서 주소 변환을 하는 것.

  • 공유나 보안은 의미 단위로 자르는게 좋음
  • 할당할 때 segmentation 기법으로는 외부조각 생기는 문제 발생.

profile
강의 기록 블로그

0개의 댓글