CS - 운영체제(9) 메모리관리(2)

김영현·2023년 7월 10일
0

CS

목록 보기
11/32

Multilevel paging, Perfomance

전에 설명했던 동적 메모리 할당 기법불연속 할당 기법중 paging이 있었다.
단순하게 page table하나만 활용하는 것이 아닌, 내부 테이블외부 테이블을 활용하는 Two-level paging이 있었는데, 사실 주소 공간이 커지면 테이블을 더 많이 만들 수 있다

페이징 기법은 공간을 얻고 시간을 조금 더 쓰는 기법이었다. 이를 보완하기 위한것이 TLB(캐시) 였다. 자주 쓰이는 페이지 테이블 엔트리(번호)를 저장해두고, 사용하는것이었다.
다단계 페이징 기법에도 TLB를 적극 활용해 시간 낭비를 줄일 수 있다.

paging table with bit

page table엔 사실 물리적 메모리에 탑재된 page 번호만 매핑되어있는 것이 아니다.
추가적인 bit가 들어가있다.

  • ProtectionBit : 해당 page에 대한 연산에 대한 권한
  • valid-invalid bit : 아래 설명.

프로세스의 페이지가 적어도(사용 메모리가 적어도) 프로세스가 최대로 가질 수 있는 페이지의 개수(메모리 / pageOffset) 만큼 page table에 엔트리가 존재해야한다
=> 인덱스를 사용하는 배열이기에, 순서대로 번호를 메겨야해서
따라서 사용하지 않는 페이지를 구별하기 위해 유효성 검사를 위한 비트를 하나 추가한다.
그것이 valid-invalid bit이다


Inverted Page Table(역 페이지 테이블)

페이징 기법은 한 프로세스당 하나씩 적용된다. 만약 프로세스가 100만개라면, page table도 100만개나 생성될 것이다. 이를 묶어서 한번에 관리하기 위한것이 Inverted Page table이다.
=> 시간복잡도는 O(n)임. 완전탐색 해야 어떤 프로세스의 페이지가 어디있는지 알기 때문에. 프로세스 하나당 테이블을 사용하면, O(1)임.


Shared Page

각 프로세스는 공유하는 코드가 있을 수 있다.
데이터는 별도로 가져야 하기에, 다른 frame에 매핑하고, 공유하는 코드는 중복되게 올리지 않고 하나만 올려서 공유한다. 단, Read-only여야하고 동일한 Logical address를 가져야 한다
아래 그림을 보면 바로 알수있다. ed1, ed2, ed3은 동일한 logical address를 갖고있다


Segmentation(부분)

잠깐 사설이 있다. 저번에 불연속할당이라 했는데, 알고보니 분산 할당이었다. 앞으로 계속 분산 할당이라고 하겠다.
sementation는 일반적으로 code, data, stack단위로 쪼갠다.(heap 어디갔지?)
기본적인 동작 방식은, page기법과 유사하지만 다른부분이 있다.

비슷한점

  • 메모리를 잘게 쪼갠다
  • 테이블을 활용한다

다른점

  • page table의 길이는 프로세스가 가질 수 있는 최대 page길이지만, segementation table은 길이 s만큼만 가져도 된다.
  • 길이가 균일하지 않기에 길이정보도 table에 들어가야 한다.
  • MMU에서 사용하는 limit+base register로 주소 길이를 연산해서 컨디션을 적용해야 함.

예를들어, 3개의 Segement가 있다. cpu에서 받은 값이 5라면, Segement-Table-Length- Register(STLR)과condition check를 통해 trap을 발생시킨다(소프트웨어적 인터럽트)

위와 같이 세그먼트가 할당-해제된다. 어디서 많이 본 그림인데, 연속 할당가변 분할과 비슷해보인다. 실제로 Segmentationhole(단편화)가 발생한다. 따라서 first-fit이나 best-fit 알고리즘으로 hole을 처리해야다

Segementation의 구조

Segement는 의미 단위로 쪼갰기에, 의미가 없는 Page보다 공유와 보안에 훨씬 효과적.
다만 external fragmentation(외부 단편화)를 발생시킨다.

Paged Segmentation

Paging 기법과 Segmentation기법을 합쳤다!
SegementPage로 잘게 쪼갠다. 사알짝 복잡하다.
또한 Segment tablesegment의 번호를 나타내는게 아닌, segment를 구성하는 page 의 table 시작 주소를 가지고 있다

보통 이 기법을 많이 사용한다!

=>흠. 근데 이러면, page table이 너무 많아지는 것 아닌가?


메모리 관리 챕터는 사실 운영체제가 관여하는 부분이 딱히 없다
MMU를 이용해 하드웨어적으로 주소 변환을 한 것.
주소변환을 할때마다 프로세스 - OS 간 컨텍스트 스위칭을 해야한다면, 굉장한 낭비다.

이번 챕터에선 심화된 과정과, segment를 배웠다.

profile
모르는 것을 모른다고 하기

0개의 댓글