[OS(2)]Memory Management 4

이유정·2024년 6월 4일
0

운영체제

목록 보기
45/49
post-custom-banner

지난시간

Segmentation 기법은

  • 프로세스 주소 공간을 동일한 page가 아닌 의미 단위로 나눠서 관리 하는 방법
  • 물리적인 메모리에는 segment 단위로 올라간다.
  • 주소변환도 각각 segment 별로 이뤄질 수 있도록 segment table이용
  • cpu가 논리 주소를 주게되면 => segment table를 통해 => 물리적 주소
  • 논리 주소는 segment에 해당하는 번호, segment 안에서 떨어지는 offset 부분
  • segment table의 entry의 개수는 이 프로그램이 사용하는 segment 개수로 정해짐.
  • segment가 물리적인 메모리에 어느 부분에 올라가있는가? 는 주소변환임. :base라는 시작위치 + offset
  • segment는 크기가 균일하지 않아서 segment의 길이가 얼마인지 이 table의 entry(limit)에 각각 담고 잇음

  • page는 개수가 대단히 많지만, segmentation은 개수가 몇개 안됨.
    • table을 위한 메모리 낭비가 심한 쪽은 paging 쪽 임.
      - 일반적으로 4kb로 나누기 때문임.

  • 프로그램을 구성하는 segment가 5개인 경우
  • main 함수, sqrt 함수, subroutine 함수, stack, symbol table segment를 형성, 각각의 segment 주소 변화을 위한 테이블이 있음.

Sharing of Segments

  • segment를 서로 다른 두개의 프로세스가 공유하고 잇는 경우
  • 같은 segment를 공유하기도 하고, 안하기도 하는 것을 그림으로 확인해보자.

Segmentation with Paging

둘을 혼합해서 사용하는 경우를 한번 봐보자.


예전에 봤던, 슬라이드임
사용자 프로세스 영역의 할당 방법 중
=> Noncontiguous allocation
이 방법이 또 3개로
1) Paging
2) Segmentation
3) Paged Segmentation
이중 3번째 방식이 혼합 방식임 !!!

Paged Segmentation: segment로 갖다가 여러 page로 구성하는 기법 !

  • allocation 문제 안생김: 물리적 메모리에 올렷을 때 외부 조각 안생김.
    • 물리적 메모리에 올라가는건 page단위로 올라감. 따라서 segment라는 것은 page개수의 배수로 이뤄짐.

실제로 original segmentation 을 쓰는 메모리 시스템은 사실 현실적으로 없음
segmentation을 쓰더라도 내부에서 paging을 같이 써줘야만 관리가 쉬움.


그래서 2단계 paging기법처럼 주소 변환을 2단계 거쳐야 하는데,

여기서 segmentation을 위한 주소 변환을 해주게 되면
=> page table의 시작위치가 나온다.
segment하나가 여러개의 page로 구성된다고 했죠?
그러니, 각각의 page별로 주소 변환을 해야됨.
그러니, segment당 page table이 존재하는 것.


segment 시작 위치, offset


page 번호, offset


frame 번호, offset

정리

우리가 그동안 배운건 메모리 관리 중에서도 물리적 메모리 관리였음.
이 챕터에서 중요한 건 주소 변환이였음.

  • 프로세스가 논리적인 주소를 가지고 있고, cpu가 논리적인 주소를 주면, 그걸 물리적인 주소로 변환해서 메모리 참조를 하게 된다는 내용.

주소 변환에 있어서 운영체제의 역할은 무엇인가?

  • 사실 이 챕터에서는 운영체제의 역할은 없음. 다 하드웨어가 해줘야 함.
    • 주소변환을 위한 MMU 하드웨어

왜 그런걸까?

이거가 프로세스 하나임.

  • 이 프로세스가 CPU를 잡고 실행하고 있으면서

    이 프로세스의 이 주소 요청을 한 것임.

그러면 메모리 참조를 해야하는데
어떤 프로세스가 CPU를 가지고 있으면서 메모리 접근을 하는 것은 운영체제의 도움을 받는가?
=> 전혀 안받음.
주소 변환을 할 때마다 운영체제가 개입을 해야 한다면 CPU가 해당 프로세스로부터 운영체제로 계속 넘어가야함. => 말이 안됨.

프로세스가 CPU를 가지고 있었으면, 매 클럭 사이클마다 메모리에서 어떤 instruction을 읽어와서 cpu에서 실행을 하고 필요시, 데이터를 cpu로 읽어드려서 실행을 하고 이러한 모든 과정은 주소 변환을 통해서 메모리 접근이 이루어짐. 그런 주소 변환 때마다 운영체제가 필요하냐 ? 그렇게 되면 cpu가 운영체제로 넘어갔다 사용자 프로세스로 넘어갔다 이런건 말이 안됨. 그래서 주소 변환은 하드웨어적으로 이루어지는 일임. 운영체제가 끼어들어야 되는 경우는 언젠가? 메모리 접근이 아니라 i/o 장치로의 접근일 때이다. 그때는 이 프로세스가 직접 i/o 접근을 못하기 때문에 운영체제한테 대신 해달라고 요청.

profile
강의 기록 블로그
post-custom-banner

0개의 댓글