[운영체제] 운영체제 반효경 교수님 2017년 - 10. 메모리 관리 III

June·2021년 5월 14일
0

Dynamic Relocation

왼쪽 아래처럼 각각의 프로세스마다 논리적인 메모리가 있고, 이게 물리적인 메모리에 올라간다. CPU는 논리적인 메모리로 달라하면 하드웨어가 주소를 반환해서 가져온다.
운영체제가 하는 것은 없다. 전적으로 하드웨어가 한다.

Allocation of Physical Memory

메모리 관리 방법이 연속할당과 불연속할당이 있는데, 연속할당은 프로그램이 통째로 올라가는데 프로세스의 0번째가 어디로 올라갈지를 레지스터 2개를 가지고 시작위치만 알면 주소 변환을 쉽게한다. 하지만 현대적인 운영체제는 통째로 올리지 않는다. 쪼개서 산발적으로 물리적인 메모리에 올라가는데, 쪼개진 조각이 어디에 가있는지를 관리해야한다. 그것이 불연속할당 페이징 기법이다.

페이징 기법은 동일한 크기의 페이지로 잘라서 올리는 기법이다.

Address Translation Architecture

논리적인 주소의 앞부분을 페이지 번호로 인식해서 물리적인 메모리의 어느 위치에 올라가있는가 변환하기 위해 페이지 별로 엔트리들이 따로 따로 존재한다. p번 페이지가 물리적인 메모리에 어디있는지 보려면 페이지 테이블에서 p번째 엔트리를 가면, 물리적인 메모리의 f번째 프레임에 올라가있다라고 알 수 있다.

Paging Example

각각의 프로세스마다 독자적인 logical memory를 가지고 있기 때문에, 페이지 테이블도 프로세스마다 존재해야 한다.

Two-Level Page Table

Two-Level Page Table

Two-Level Paging Example

Address-Translation Scheme

Multilevel Paging and Performance

여기까지 지난 강의에서 다뤘다.

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

예를 들어 code 영역에서 가져왔으면 read-only일 것이다.

Inverted Page Table Architecture

원래는 논리적인 메모리 주소에서 물리적인 메모리 주소를 얻었다. 그러다보니 메모리 공간 낭비가 심했다.

Inverted Page Table Architecture에는 물리적인 메모리 프레임 하나하나당 페이지 테이블이 존재한다. f번째 엔트리에는 p가 있는데, 이는 프로세스의 논리적인 공간에서 p번째의 페이지가 올라가있다는 것을 의미한다.

cpu가 논리적인 주소를 주면, p라는 번호가 page table에서 몇 번쨰 프레임에 있는지 하나씩 확인해야 한다. 또한 어느 프로세스의 페이지인지 표시하기 위해 pid도 가지고 있다.

하나씩 찾아보기 때문에 비효율적이다. 하지만 메모리 공간은 아낀다. 따라서 모든 위치를 병렬적으로 찾는 특별한 하드웨어를 사용한다.

Shared Page

Shared Pages Example

만약 3개의 프로세스가 동일한 프로그램 (에디터 프로그램)이라 생각해보자. 그러면 사실 코드 부분은 똑같다. 동일한 코드가 여러번 올라가면 낭비가 된다. 공유하는 부분은 한 카피만 올리는 기법이다.

shared 부분은 read-only이고 동일한 logical address를 가지고 있다.

Segmentation

이제 paging과 다른 기법인 segmentaion을 보자. segmantation은 의미 단위로 짜른다. 의미 단위로 자르기 때문에 크기가 다 다르다. segment table이 있따.

Segmentation Architecture

Segmentation Hardware

논리주소의 앞부분을 segment번호로 보고, 뒷부분을 보고 segment내에 얼마나 떨어져있는가 보자.

segment의 길이(limit)도 알아야하는데, 길이가 다르기 때문이다. 만약 길이보다 offset이 더 길다면, trap을 걸어서 메모리 접근 자체를 막아야한다.

주소 변환을 위해서 레지스터 2개를 쓰고 있는데, 연속할당에서는 base register와 limit register 로 썼고, paging 기법에서는 페이지 테이블의 시작위치와 페이지 테이블의 길이를 담는데 썼다. segmentation기법에서도 테이블의 시작위치와, 테이블의 길이가 얼마인지를 담는다.

세그먼트의 크기가 제각각이기 때문에 프로그램이 종료되고 빈 자리가 크기가 맞지않아 다른 프로세스가 못들어갈 수도 있다.

Example of Segmentation

Segmentation Architecture (Cont.)

paging과 비교해서 장점은 의미단위로 일할 때 유리하다. 예를 들어 공유나 보안이다. 예를 들어 stack segment는 함수를 호출하거나 리턴하기 때문에 read-write 모두 가능행야하고, code segment는 read-only로 해야 한다.

Sharing of Segments

여기서도 비슷하다. 공유하고 있다.

segment table은 entry수가 몇개 되지 않는다. 메모리 공간 낭비는 paging기법이 훨씬 심하다. 하지만 현실적으로 segmentation을 잘 쓰지는 않는다. 현실에서는 paging 기법을 근간으로 해서 쓰고 있다. 또는 혼합해서 쓰든가.

Segmentaion with Paging.

세그먼트가 여러개의 페이지로 이뤄지는 것이다. 세그먼트를 구성하는 페이지를 물리적인 메모리에 올린다.

0개의 댓글