CS Operating System - Segmentation & Pagenation

Huisu·2025년 2월 11일
0

CS

목록 보기
22/25
post-thumbnail

Segmentation & Pagenatio

세그멘테이션과 페이징의 차이점은 무엇인가요?

두 개 모두 메모리 관리 기법 중에서도 불연속 메모리 할당 기법에 해당하는방식이다. 프로세스가 메모리 상 여러 영역에 분산되어 적재된다. 실제 가상 메모리는 두 가지 방식 중 하나를 채택해 구현된다.

공통적인 장점은 메모리 공간을 효율적으로 사용할 수 있다는 것이다. 연속성의 제약이 없어, 어디든 할당 가능한 여유 공간이라면 적재할 수 있기 때문이다.

페이징

프로세스를 페이지라고 하는 고정된 크기로 나누는 방식이다. 단점은 내부 단편화가 발생할 수 있다는 것이다. 페이지 단위로 나누어 떨어지지 않는 경우에 프로세스가 할당받은 공간 내부에 사용하지 못하는 빈 공간이 발생한다.

페이지 테이블

각 프로세스는 페이지와 프레임의 매핑 정보를 담은 페이지 테이블을 가지고 있다. 이는 논리적 주소를 물리적 주소로 변환하기 위해 필요한 정보로, 메인 메모리에 저장되어 있다. 주요 정보로는 프레임 (페이지에 할당된 물리 메모리 공간)의 시작 주소, 유효 비트가 있다.

세그멘테이션

프로세스를 세그멘트라고 하는 의미론적 가변 단위 크기로 나누는 방식이다. 장점은 단위별 보호와 공유가 가능하다는 것이다. 단점은 메모리 할당 및 회수가 빈번히 발생한다면 프로세스가 할당받은 공간의 외부에 사용하지 못하고 남는 공간이 생기는 외부 단편화가 발생할 수 있다.

세그먼트 테이블

각 프로세스는 세그먼트와 프레임의 매핑 정보를 담은 세그먼트 테이블을 가진다. 물리 정보에는 물리 메모리 상의 세그먼트 시작 주소, 세그먼트 크기, 유효비트, 권한 비트가 있다.

페이지와 프레임의 차이에 대해 설명해 주세요.

  • 페이지: 프로세스의 논리 주소 공간을 일정한 크기로 나눈 단위
  • 프레임: 물리 메모리를 일정한 크기로 나눈 단위

페이지와 프레임은 크기가 동일하며, 페이지를 프레임에 매핑하여 사용한다.

내부 단편화와, 외부 단편화에 대해 설명해 주세요.

내부 단편화

고정 크기의 블록을 할당할 때, 필요한 크기보다 더 큰 블록이 할당되면서 발생하는 메모리 낭비를 말한다.

외부 단편화

가변 크기의 블록을 할당할 때 전체적으로 작은 빈 공간이 존재하여 큰 프로세스를 할당할 수 없는 현상이다.

페이지에서 실제 주소를 어떻게 가져올 수 있는지 설명해 주세요.

가상 주소는 페이지 번호와 페이지 오프셋으로 구성된다.

가상 주소 = 페이지 번호+ 페이지 오프셋

페이지 테이블에서 페이지 번호를 조회하여 프레임 번호를 찾아낸다.

프레임 번호와 오프셋을 더해 실제 데이터가 저장되어 있는 물리 주소를 계산한다.

물리 주소 = (프레임 번호 * 페이지 크기) + 오프셋

어떤 주소공간이 있을 때, 이 공간이 수정 가능한지 확인할 수 있는 방법이 있나요?

운영페제는 페이지 테이블의 엔트리에 읽기/쓰기/실행 권한 비트를 저장한다.

  • 읽기 가능 여부: R 비트 확인
  • 쓰기 가능 여부: W 비트 확인
  • 실행 가능 여부: X 비트 확인
  • 페이지 보호: 커널 모드에서만 접근 가능하도록 설정 가능

32비트에서, 페이지의 크기가 1kb 이라면 페이지 테이블의 최대 크기는 몇 개일까요?

  • 32비트 주소 공간 = 2 ^ 32
  • 페이지 크기 = 1 KB = 2 ^ 10
  • 총 페이지 개수 = (2 ^ 32) / (2 ^ 10) = 2 ^ 22
  • 페이지 테이블 엔트리 크기가 2 ^ 32 라면 페이지 테이블 크기 = (2 ^ 22) * (2 ^ 32) = 16 MB

32비트 운영체제는 램을 최대 4G 까지 사용할 수 있습니다. 이 이유를 페이징과 연관 지어서 설명해 주세요.

  • 32비트 주소 공간은 최대 2 ^ 32 바이트(=4GB) 크기의 가상 주소를 표현 가능
  • 페이징을 사용하면 가상 주소를 물리 주소로 매핑하지만, 물리 주소를 표현할 수 있는 범위도 4GB로 제한

C/C++ 개발을 하게 되면 Segmentation Fault 라는 에러를 접할 수 있을텐데, 이 에러는 세그멘테이션/페이징과 어떤 관계가 있을까요?

Segmentation Fault는 잘못된 메모리 접근으로 발생하는 오류이다. 페이징과 세그멘테이션이 메모리 보호 기능을 제공하면서 잘못된 접근을 차단하는 과정에서 해당 오류가 발생한다.

  1. 잘못된 주소 접근
    • 페이지 테이블에 존재하지 않는 주소에 접근할 경우 페이지 폴트 발생
    • 유효하지 않은 세그먼트에 접근하는 경우
  2. 권한 위반
    • 읽기 전용 페이지에 스기 시도
    • 실행 불가능한 영역실행 시도

0개의 댓글