50
세그멘테이션과 페이징 쿠재아이 김재경

Segmentation and Paging

Embed Size (px)

Citation preview

Page 1: Segmentation and Paging

세그멘테이션과 페이징

쿠재아이김재경

Page 2: Segmentation and Paging
Page 3: Segmentation and Paging

이 주제를 선택한 계기

어느 날 스택 프레임 코드를 보다가…

나머지는 알겠는데…es?

이게 뭐지?

Page 4: Segmentation and Paging

1. 인터넷 검색 시작2. 세그먼트 레지스터라고 나옴3. 그건 또 뭔데…4. 계속 검색5. 최종 종착지

Intel® 64 and IA-32 ArchitecturesSoftware Developer’s Manual

이 주제를 선택한 계기

Page 5: Segmentation and Paging

이걸 읽을 정도로 호기심이 많지 않았다. 더 이상 알아보지 않고 포기

이 주제를 선택한 계기

Page 6: Segmentation and Paging

이 주제를 선택한 계기

시간이 지나고 학교에서운영체제 강의를 들음

이거 어디서 봤던 건데?

예전에 알아본 거네!

Page 7: Segmentation and Paging

이 주제를 선택한 계기

이렇게 해서 발표까지 오게 되었으나 내 개인적인 동기일 뿐

듣는 이에게 조금 더 동기부여를 하고자 몇 가지 질문을 준비했습니다

Page 8: Segmentation and Paging

의문점 1

int a에 99를 넣고 실행한 프로세스 주소

다른 프로세스의 같은 주소

Page 9: Segmentation and Paging

의문점 1

주소는 같은데 값은 왜 다르죠?

프로세스마다 독립된 메모리 공간을 할당받기 때문

주소가 같은데 어떻게 다른 위치란 걸 알아요?

… OS가 알아서 잘…

Page 10: Segmentation and Paging

의문점 2

이론적으로 0x00000000 ~ 0xFFFFFFFF(4GB)의 메모리를 할당 가능

예전 컴퓨터 사양은 RAM이 4GB를넘지 못했다

그럼 위에 있는 4GB 메모리를 전부할당하면?

… 터지나?

아니면 전부 할당을 못하나?

Page 11: Segmentation and Paging

동기부여가 되셨습니까?

질문에 대한 답이 궁금하다면 오늘 주제는 의미가 있을 듯

안 궁금하다면…아 몰랑!

본격적으로 들어가 봅시다

Page 12: Segmentation and Paging

옛날 옛적 Segment

1978년 인텔은 8086 CPU를 출시

세그멘트 레지스터(16bit)로 메모리를 세그멘트 단위(64KB)로 관리

그런데 어드레스 버스가 20bit

0xFFFF 이상의 주소를 어떻게 표현하지…?

세그멘트 레지스터 + 오프셋으로 접근

Page 13: Segmentation and Paging

옛날 옛적 Segment

DS:FF79H

만약 DS(Data Segment) 레지스터에 0x1000 값이들어 있으면 왼쪽으로 한 번 쉬프트해서 더한다

최종 주소는 0x1FF79

16bit 레지스터와 16bit 오프셋으로 20bit의 주소를 표현

Page 14: Segmentation and Paging

옛날 옛적 Segment

Page 15: Segmentation and Paging

옛날 옛적 Segment

1982년 인텔은 80286 CPU를 출시

Proteced Mode(보호 모드) 추가

어드레스 버스 24bit, 16MB 메모리 사용 가능

세그먼트 디스크립터가 추가- 세그먼트 레지스터가 세그먼트 셀렉터 바뀜

가상 메모리 관리 가능 -세그먼트 limit 체크Read-only and execute-only 세그먼트 옵션4단계 권한 레벨

Page 16: Segmentation and Paging

옛날 옛적 Segment

1985년 인텔은 80386 CPU를 출시

레지스터, 어드레스 버스 모두 32bit

4GB의 물리 메모리 지원

MMU(Memory Management Unit) 포함- 메모리 관리 및 메모리 할당을 하드웨어에서 어느정도 제공

Page 17: Segmentation and Paging

옛날 옛적 Segment

Page 18: Segmentation and Paging

옛날 옛적 Segment

Page 19: Segmentation and Paging

세그멘테이션Segmentation

Page 20: Segmentation and Paging

Segment Selector

Index : 8192개의 세그멘트 디스크립터 중 하나를 선택한다. Index * 8을 GDT의 Base 주소에 더함

TI : 이 셀렉터가 가리키는 세그먼트 디스크립터가 GDT에 있는지, LDT에 있는지를 나타낸다

RPL : 특권 레벨

Page 21: Segmentation and Paging

Privilege Level

Page 22: Segmentation and Paging

Segment Descriptor

Page 23: Segmentation and Paging

Segment Descriptor

Base Address : 세그먼트의 시작 주소

Page 24: Segmentation and Paging

Segment Descriptor

Segment Limit : 세그먼트의 한계 주소

Page 25: Segmentation and Paging

Segment Descriptor

Granularity : 비트가 세팅 (1) 되어 있을 경우 단위가 4KB가 되어세그먼트 한계 주소는 4GB 가 된다. 반대로 G 비트가 클리어 (0) 되었을 경우 단위는 1Bit가 되어 최대 1MB 의 한계 값을 가진다.

Page 26: Segmentation and Paging

Segment Descriptor

Present : 세팅 (1) 되어 있을 경우 해당 세그먼트는 물리 메모리에 올라와 있어 접근 가능함을 의미클리어 (0) 되었을 경우 해당 세그먼트 디스크립터가 가리키는 메모리는 접근할 수 없다

Page 27: Segmentation and Paging

Segment Descriptor

default operation size/default stack pointer size and/or upper bound

이전 프로세서들과의 호환성을 위한 특징 중 하나386의 보호모드에서 286 코드가 실행되는 것을 가능하게 하는데 만약 세그먼트를 코드가 사용하고이 때 D 비트가 0인 경우 프로세서는 그 코드의 내용을 16비트 코드로 해석. 1이면 32비트 코드로 해석

데이터 혹은 스택 세그먼트로 사용되어질 경우 D 비트가 0인 스택 세그먼트에서는 16비트 폭으로 SP가 증가,감소하게 되며 1일 경우 32비트 폭으로 증가, 감소하게 된다

Page 28: Segmentation and Paging

Segment Descriptor

Type : 시스템(S) 비트 연관되어 해당 세그먼트의 특성을 나타내는 역할을 한다. S 비트가Clear ( 0 ) 되어 있으면 해당 세그먼트는 시스템 세그먼트로 사용되고, Set ( 1 ) 되어 있으면 해당 세그먼트는 코드 또는 데이터 세그먼트로 사용된다.Type Field 의 최상위 비트는 해당 세그먼트가 데이터 세그먼트인지 ( 0 ) 코드 세그먼트인지 ( 1 ) 나타낸다.

Page 29: Segmentation and Paging

Segment Descriptor

Page 30: Segmentation and Paging

Global Descriptor Table(GDT)

세그먼트 디스크립터는 모든 Task에 전역적으로 존재할 수 있는 그룹과 어떤 한 Task에 종속적으로 존재할 수 있는 그룹이 있을 수 있으며이러한 그룹을 디스크립터 테이블(DT)라 부른다

DT에는 여러 디스크립터들이 순차적인 배열 형태로 저장되어 있다

GDT : 모든 프로그램이 참조할 수 있는 세그먼트 디스크립터들의 모임

LDT : 멀티태스킹 환경에서 각 Task 단위로 정의할 수 있는 것

Page 31: Segmentation and Paging

Global Descriptor Table Register(GDTR)

Page 32: Segmentation and Paging

Segmentation 결과

Page 33: Segmentation and Paging

페이징Paging

Page 34: Segmentation and Paging

Paging 종류

Page 35: Segmentation and Paging

CR(Control Register)3

Page 36: Segmentation and Paging

CR(Control Register)3

Windows 운영체제뿐만 아니라 멀티스레딩을 지원하는 운영체제에서CR3 레지스터는 매우 중요한 역할을 하게 되는데, 바로 이 레지스터에의하여 각각의 프로세스가 독립적인 메모리 주소 공간을 가질 수 있기때문이다

즉, Windows에서는 프로세스의 스위칭이 일어날 때마다 CR3 레지스터의 페이지 디렉토리 주소를 바꿔줌으로써 해당 프로세스가 사용하는 가상 메모리를 전혀 다른 물리적 주소와 매핑시킬 수 있게 한다

Page 37: Segmentation and Paging

Page Directory

32비트의 엔트리 정보를 1024개만큼 가지고 있는 배열 형태의 구조

하나의 프로세스에는 반드시 하나의 페이지 디렉토리가 존재해야 함

Page 38: Segmentation and Paging

Page Directory

Page 39: Segmentation and Paging

Page Directory

P (Present) : 이 페이지 디렉토리가 메모리에 존재하는지,아니면 존재하지 않는지를 의미한다. 0이면 사용할 수 없다.

Page 40: Segmentation and Paging

Page Directory

R/W (Read/Write) : 해당 페이지의 속성을 나타낸다.

읽기만 가능하다 ( 0 ) , 읽기와 쓰기 가능하다 ( 1 )

Page 41: Segmentation and Paging

Page Directory

U/S (User / Supervisor) - 1로 세팅되어있을 경우 Ring 0, Ring 3에서모두 접근 가능하지만 0으로 세팅 되어있을 경우 해당 페이지는 Ring 0에서만 접근 가능하다

Page 42: Segmentation and Paging

Page Directory

A (Accessed) - 이 항목이 선형 주소 변환을 위해 사용되었는지 나타냄

Page 43: Segmentation and Paging

Page Directory

PS : 4KB 페이징에서는 항상 0이다.

If CR4.PSE = 1, must be 0(otherwise, this entry maps a 4-MByte page)otherwise, ignored

Page 44: Segmentation and Paging

Page Table

Page 45: Segmentation and Paging

Page Table

D (Dirty) : 해당 페이지의 내용이 수정될 경우 자동으로 세트된다.

indicates whether software has written to the 4-KByte page referenced by this entry

Page 46: Segmentation and Paging

Page Table

PAT : PAT 플래그가 세팅되어 있으면 메모리 타입을 결정할 수 있다

If the PAT is supported, indirectly determines the memory type used to access the 4-KByte page referenced by this entry. otherwise, reserved (must be 0)

Page 47: Segmentation and Paging

Page Table

G (Global) : if CR4.PGE = 1, determines whether the translation is global (see Section 4.10); ignored otherwise

Page 48: Segmentation and Paging

Page Table

G (Global) : 이 비트와 CR4의 PGE(Page Gloal Enable) 플래그가 세트되어 있을 경우 운영체제에서 CR3 레지스터를 변경하여 메모리 변환에사용되는 페이지 디렉토리를 변경한다 할지라도 TLB의 내용에서 이 페이지에 대한 정보를 리셋하지 않도록 해준다.

이러한 행위는 커널 코드와 같이 모든 프로세스에서 공통적으로 사용되는 내용에 대하여 새로운 TLB의 내용으로 갱신을 수행하지 않게 하므로프로세스의 메모리 변환을 보다 효율적으로 만들어주게 된다.

Page 49: Segmentation and Paging

결론

Page 50: Segmentation and Paging