[운영체제] 21. Memory Management 4

이건회·2022년 3월 22일
0

운영체제

목록 보기
20/27

  • 세그먼트 테이블은 엔트리 갯수가 세그먼트의 갯수와 같다.
  • 세그먼트는 크기가 균일하지 않으므로 세그먼트의 길이가 얼마인지를 세그먼트 테이블 엔트리가 limit에 담고 있다. 이는 페이징 기법과의 차이다. offset 값이 limit 보다 작아야만 합당한 메모리 참조이다.
  • 요청한 세그먼트 번호가 현재 세그먼트의 갯수를 의미하는 STLR보다 작아야 한다. 만약 크면 trap을 발생시켜 주소 변환을 막는다

  • 세그먼트 기법은 의미 단위로 나누기 때문에 공유와 보안성 측면에서 페이징 기법과 비교하여 더 우수하다.
  • 그러나 외부 공간이 발생하는 측면에서는 페이징 기법보다 좋지 않다.
  • 또 세그먼트 테이블 갯수가 많지 않으므로 페이징보다 테이블의 메모리 공간을 절약할 수 있다.
  • 위의 그림은 여러가지 함수들과 서브루틴, 스택 등이 세그먼트로 나뉘어 있다. 0번 세그먼트가 1400부터 1000만큼 할당되어 2400까지 존재하는 것을 볼 수 있다.

  • 세그먼트를 서로 다른 두 프로세스가 공유하는 모습이다. 코드를 담고 있는 0번 세그먼트는 공유하는 shared segment이다. 같은 논리적/물리적 메모리 주소를 가진다. (세그먼트0,43062~68348)

  • 마지막으로 세그먼데이션과 페이징 두 가지 기법을 혼합할 수 있는 방법이 있다. 세그먼트 하나를 여러 개의 페이지로 구성하는 기법이다.

  • 먼저 세그먼트에 대한 주소변환을 한다.각 프로그램이 가지는 논리적 주소는 세그먼트 번호와 오프셋으로 구성 되고, 세그먼트 테이블에서 페이지 테이블 위치주소를 찾을 수 있다. 의미 단위로는 세그먼트 테이블에서 자르고, 실제로 메모리에 올라갈 때는 페이지 단위로 올라간다.
  • 세그멘테이션에 대한 주소변환을 하면 페이지 테이블의 시작 위치가 나오므로, 세그먼트 당 각각의 페이지 테이블이 존재한다. 페이지 테이블에 가면 세그먼트를 구성하는 페이지 테이블의 시작 위치가 나온다. segment length가 곧 페이지 테이블의 엔트리 갯수다. 따라서 그 segment length를 벗어나는 offset 요청에 대해서는 trap을 발생 시킨다.
  • 테이블에 대한 주소변환을 위해 세그먼트의 offset인 d를 다시 잘라 앞부분을 페이지 번호(p)로 사용하고 페이지 안에서 얼마나 떨어져 있는지 사용하는 페이지 offset(d 프라임)으로 사용한다.
  • 따라서 페이지 테이블의 시작 위치로부터 p만큼 떨어진 엔트리에 가면 물리적 메모리의 몇 번째 프레임인지에 대한 주소(f)가 나올 것이고, 페이지 안에서의 오프셋(d 프라임을)그대로 넘겨 주면 물리적 메모리의 주소가 된다.

  • 여태까지 배운 물리적 메모리 관리에서 운영체제의 주 역할은 주소 변환을 할 때 전혀 없다. 모두 하드웨어가 하는 역할이다.

  • 그 이유는 어떤 프로세스가 cpu를 잡고 실행하면서 주소 요청을 하면 메모리 참조를 해야 하는데, 어떤 프로세스가 cpu를 잡으면서 메모리 접근을 하는 것은 운영체제의 도움을 전혀 받지 않는다. 주소변환을 할 때마다 운영체제의 개입이 있으면 cpu가 운영체제로 계속 넘어가야 하기 때문이다. 따라서 주소변환은 무조건 하드웨어적으로 일어나고, i/o 장치를 접근할 때만 운영체제가 끼어든다.
profile
하마드

0개의 댓글