SlideShare a Scribd company logo
1 of 50
Download to read offline
세그멘테이션과 페이징
쿠재아이
김재경
이 주제를 선택한 계기
어느 날 스택 프레임 코드를 보다가…
나머지는 알겠는데…
es?
이게 뭐지?
1. 인터넷 검색 시작
2. 세그먼트 레지스터라고 나옴
3. 그건 또 뭔데…
4. 계속 검색
5. 최종 종착지
Intel® 64 and IA-32 Architectures
Software Developer’s Manual
이 주제를 선택한 계기
이걸 읽을 정도로 호기심이 많지 않았다. 더 이상 알아보지 않고 포기
이 주제를 선택한 계기
이 주제를 선택한 계기
시간이 지나고 학교에서
운영체제 강의를 들음
이거 어디서 봤던 건데?
예전에 알아본 거네!
이 주제를 선택한 계기
이렇게 해서 발표까지 오게 되었으나 내 개인적인 동기일 뿐
듣는 이에게 조금 더 동기부여를 하고자 몇 가지 질문을 준비했습니다
의문점 1
int a에 99를 넣고 실행한 프로세스 주소
다른 프로세스의 같은 주소
의문점 1
주소는 같은데 값은 왜 다르죠?
프로세스마다 독립된 메모리 공간을 할당받기 때문
주소가 같은데 어떻게 다른 위치란 걸 알아요?
… OS가 알아서 잘…
의문점 2
이론적으로 0x00000000 ~ 0xFFFFFFFF(4GB)의 메모리를 할당 가능
예전 컴퓨터 사양은 RAM이 4GB를
넘지 못했다
그럼 위에 있는 4GB 메모리를 전부
할당하면?
… 터지나?
아니면 전부 할당을 못하나?
동기부여가 되셨습니까?
질문에 대한 답이 궁금하다면 오늘 주제는 의미가 있을 듯
안 궁금하다면… 아 몰랑!
본격적으로 들어가 봅시다
옛날 옛적 Segment
1978년 인텔은 8086 CPU를 출시
세그멘트 레지스터(16bit)로 메모리를 세그멘트 단위(64KB)로 관리
그런데 어드레스 버스가 20bit
0xFFFF 이상의 주소를 어떻게 표현하지…?
세그멘트 레지스터 + 오프셋으로 접근
옛날 옛적 Segment
DS:FF79H
만약 DS(Data Segment) 레지스터에 0x1000 값이
들어 있으면 왼쪽으로 한 번 쉬프트해서 더한다
최종 주소는 0x1FF79
16bit 레지스터와 16bit 오프셋으로 20bit의 주소를 표현
옛날 옛적 Segment
옛날 옛적 Segment
1982년 인텔은 80286 CPU를 출시
Proteced Mode(보호 모드) 추가
어드레스 버스 24bit, 16MB 메모리 사용 가능
세그먼트 디스크립터가 추가
- 세그먼트 레지스터가 세그먼트 셀렉터 바뀜
가상 메모리 관리 가능 -
세그먼트 limit 체크
Read-only and execute-only 세그먼트 옵션
4단계 권한 레벨
옛날 옛적 Segment
1985년 인텔은 80386 CPU를 출시
레지스터, 어드레스 버스 모두 32bit
4GB의 물리 메모리 지원
MMU(Memory Management Unit) 포함
- 메모리 관리 및 메모리 할당을 하드웨어에서 어느정도 제공
옛날 옛적 Segment
옛날 옛적 Segment
세그멘테이션
Segmentation
Segment Selector
Index : 8192개의 세그멘트 디스크립터 중 하나를 선택한다. Index * 8을 GDT의 Base 주소에 더함
TI : 이 셀렉터가 가리키는 세그먼트 디스크립터가 GDT에 있는지, LDT에 있는지를 나타낸다
RPL : 특권 레벨
Privilege Level
Segment Descriptor
Segment Descriptor
Base Address : 세그먼트의 시작 주소
Segment Descriptor
Segment Limit : 세그먼트의 한계 주소
Segment Descriptor
Granularity : 비트가 세팅 (1) 되어 있을 경우 단위가 4KB가 되어
세그먼트 한계 주소는 4GB 가 된다. 반대로 G 비트가 클리어 (0)
되었을 경우 단위는 1Bit가 되어 최대 1MB 의 한계 값을 가진다.
Segment Descriptor
Present : 세팅 (1) 되어 있을 경우 해당 세그먼트는 물리 메모리
에 올라와 있어 접근 가능함을 의미
클리어 (0) 되었을 경우 해당 세그먼트 디스크립터가 가리키는 메
모리는 접근할 수 없다
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비트 폭으로 증가, 감소하게 된다
Segment Descriptor
Type : 시스템(S) 비트 연관되어 해당 세그먼트의 특성을 나타내는 역할을 한다. S 비트가
Clear ( 0 ) 되어 있으면 해당 세그먼트는 시스템 세그먼트로 사용되고, Set ( 1 ) 되어 있
으면 해당 세그먼트는 코드 또는 데이터 세그먼트로 사용된다.
Type Field 의 최상위 비트는 해당 세그먼트가 데이터 세그먼트인지 ( 0 ) 코드 세그먼트
인지 ( 1 ) 나타낸다.
Segment Descriptor
Global Descriptor Table(GDT)
세그먼트 디스크립터는 모든 Task에 전역적으로 존재할 수 있는 그룹
과 어떤 한 Task에 종속적으로 존재할 수 있는 그룹이 있을 수 있으며
이러한 그룹을 디스크립터 테이블(DT)라 부른다
DT에는 여러 디스크립터들이 순차적인 배열 형태로 저장되어 있다
GDT : 모든 프로그램이 참조할 수 있는 세그먼트 디스크립터들의 모임
LDT : 멀티태스킹 환경에서 각 Task 단위로 정의할 수 있는 것
Global Descriptor Table Register(GDTR)
Segmentation 결과
페이징
Paging
Paging 종류
CR(Control Register)3
CR(Control Register)3
Windows 운영체제뿐만 아니라 멀티스레딩을 지원하는 운영체제에서
CR3 레지스터는 매우 중요한 역할을 하게 되는데, 바로 이 레지스터에
의하여 각각의 프로세스가 독립적인 메모리 주소 공간을 가질 수 있기
때문이다
즉, Windows에서는 프로세스의 스위칭이 일어날 때마다 CR3 레지스
터의 페이지 디렉토리 주소를 바꿔줌으로써 해당 프로세스가 사용하
는 가상 메모리를 전혀 다른 물리적 주소와 매핑시킬 수 있게 한다
Page Directory
32비트의 엔트리 정보를 1024개만큼 가지고 있는 배열 형태의 구조
하나의 프로세스에는 반드시 하나의 페이지 디렉토리가 존재해야 함
Page Directory
Page Directory
P (Present) : 이 페이지 디렉토리가 메모리에 존재하는지,
아니면 존재하지 않는지를 의미한다. 0이면 사용할 수 없다.
Page Directory
R/W (Read/Write) : 해당 페이지의 속성을 나타낸다.
읽기만 가능하다 ( 0 ) , 읽기와 쓰기 가능하다 ( 1 )
Page Directory
U/S (User / Supervisor) - 1로 세팅되어있을 경우 Ring 0, Ring 3에서
모두 접근 가능하지만 0으로 세팅 되어있을 경우 해당 페이지는 Ring 0
에서만 접근 가능하다
Page Directory
A (Accessed) - 이 항목이 선형 주소 변환을 위해 사용되었는지 나타냄
Page Directory
PS : 4KB 페이징에서는 항상 0이다.
If CR4.PSE = 1, must be 0
(otherwise, this entry maps a 4-MByte page)
otherwise, ignored
Page Table
Page Table
D (Dirty) : 해당 페이지의 내용이 수정될 경우 자동으로 세트된다.
indicates whether software has written to the 4-KByte page
referenced by this entry
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 Table
G (Global) : if CR4.PGE = 1, determines whether the translation
is global (see Section 4.10); ignored otherwise
Page Table
G (Global) : 이 비트와 CR4의 PGE(Page Gloal Enable) 플래그가 세트
되어 있을 경우 운영체제에서 CR3 레지스터를 변경하여 메모리 변환에
사용되는 페이지 디렉토리를 변경한다 할지라도 TLB의 내용에서 이 페이
지에 대한 정보를 리셋하지 않도록 해준다.
이러한 행위는 커널 코드와 같이 모든 프로세스에서 공통적으로 사용되
는 내용에 대하여 새로운 TLB의 내용으로 갱신을 수행하지 않게 하므로
프로세스의 메모리 변환을 보다 효율적으로 만들어주게 된다.
결론
Segmentation and Paging

More Related Content

Similar to Segmentation and Paging

백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나Daniel Shin
 
From Java code to Java heap_SYS4U I&C
From Java code to Java heap_SYS4U I&CFrom Java code to Java heap_SYS4U I&C
From Java code to Java heap_SYS4U I&Csys4u
 
Linux programming study
Linux programming studyLinux programming study
Linux programming studyYunseok Lee
 
하둡 타입과 포맷
하둡 타입과 포맷하둡 타입과 포맷
하둡 타입과 포맷진호 박
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기ChangKyu Song
 
Linux 강의자료 ed10
Linux 강의자료 ed10Linux 강의자료 ed10
Linux 강의자료 ed10hungrok
 
면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례Soochan Park
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍Yong Joon Moon
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxNeoClova
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기Jongwon Kim
 
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 APINAVER Engineering
 
Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)one_two_12
 
Introduction to Parallel Programming
Introduction to Parallel ProgrammingIntroduction to Parallel Programming
Introduction to Parallel ProgrammingUNIST
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드cranbe95
 
Java Class File Format
Java Class File FormatJava Class File Format
Java Class File FormatJongyoung Park
 
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은jieun kim
 

Similar to Segmentation and Paging (20)

백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나
 
From Java code to Java heap_SYS4U I&C
From Java code to Java heap_SYS4U I&CFrom Java code to Java heap_SYS4U I&C
From Java code to Java heap_SYS4U I&C
 
Linux programming study
Linux programming studyLinux programming study
Linux programming study
 
하둡 타입과 포맷
하둡 타입과 포맷하둡 타입과 포맷
하둡 타입과 포맷
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
 
System+os study 1
System+os study 1System+os study 1
System+os study 1
 
Linux 강의자료 ed10
Linux 강의자료 ed10Linux 강의자료 ed10
Linux 강의자료 ed10
 
면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docx
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
 
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
 
Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)
 
Nvidia architecture
Nvidia architectureNvidia architecture
Nvidia architecture
 
C++11
C++11C++11
C++11
 
Thread programming
Thread programmingThread programming
Thread programming
 
Introduction to Parallel Programming
Introduction to Parallel ProgrammingIntroduction to Parallel Programming
Introduction to Parallel Programming
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
Java Class File Format
Java Class File FormatJava Class File Format
Java Class File Format
 
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
 

More from QooJuice

리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
캐릭터 애니메이션
캐릭터 애니메이션캐릭터 애니메이션
캐릭터 애니메이션QooJuice
 
Screen space ambient occlusion
Screen space ambient occlusionScreen space ambient occlusion
Screen space ambient occlusionQooJuice
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage CollectionQooJuice
 
Compute shader
Compute shaderCompute shader
Compute shaderQooJuice
 
Game programming patterns 2
Game programming patterns 2Game programming patterns 2
Game programming patterns 2QooJuice
 
Game programming patterns
Game programming patternsGame programming patterns
Game programming patternsQooJuice
 
코루틴(Coroutine)
코루틴(Coroutine)코루틴(Coroutine)
코루틴(Coroutine)QooJuice
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
Direct x 12 초기화
Direct x 12 초기화Direct x 12 초기화
Direct x 12 초기화QooJuice
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)QooJuice
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍QooJuice
 
절차지향 vs 객체지향
절차지향 vs 객체지향절차지향 vs 객체지향
절차지향 vs 객체지향QooJuice
 
Move semantics
Move semanticsMove semantics
Move semanticsQooJuice
 

More from QooJuice (18)

리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
캐릭터 애니메이션
캐릭터 애니메이션캐릭터 애니메이션
캐릭터 애니메이션
 
Screen space ambient occlusion
Screen space ambient occlusionScreen space ambient occlusion
Screen space ambient occlusion
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage Collection
 
Compute shader
Compute shaderCompute shader
Compute shader
 
Game programming patterns 2
Game programming patterns 2Game programming patterns 2
Game programming patterns 2
 
Game programming patterns
Game programming patternsGame programming patterns
Game programming patterns
 
Picking
PickingPicking
Picking
 
코루틴(Coroutine)
코루틴(Coroutine)코루틴(Coroutine)
코루틴(Coroutine)
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
Direct x 12 초기화
Direct x 12 초기화Direct x 12 초기화
Direct x 12 초기화
 
행렬
행렬행렬
행렬
 
벡터
벡터벡터
벡터
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍
 
부팅
부팅부팅
부팅
 
절차지향 vs 객체지향
절차지향 vs 객체지향절차지향 vs 객체지향
절차지향 vs 객체지향
 
Move semantics
Move semanticsMove semantics
Move semantics
 

Segmentation and Paging

  • 2.
  • 3. 이 주제를 선택한 계기 어느 날 스택 프레임 코드를 보다가… 나머지는 알겠는데… es? 이게 뭐지?
  • 4. 1. 인터넷 검색 시작 2. 세그먼트 레지스터라고 나옴 3. 그건 또 뭔데… 4. 계속 검색 5. 최종 종착지 Intel® 64 and IA-32 Architectures Software Developer’s Manual 이 주제를 선택한 계기
  • 5. 이걸 읽을 정도로 호기심이 많지 않았다. 더 이상 알아보지 않고 포기 이 주제를 선택한 계기
  • 6. 이 주제를 선택한 계기 시간이 지나고 학교에서 운영체제 강의를 들음 이거 어디서 봤던 건데? 예전에 알아본 거네!
  • 7. 이 주제를 선택한 계기 이렇게 해서 발표까지 오게 되었으나 내 개인적인 동기일 뿐 듣는 이에게 조금 더 동기부여를 하고자 몇 가지 질문을 준비했습니다
  • 8. 의문점 1 int a에 99를 넣고 실행한 프로세스 주소 다른 프로세스의 같은 주소
  • 9. 의문점 1 주소는 같은데 값은 왜 다르죠? 프로세스마다 독립된 메모리 공간을 할당받기 때문 주소가 같은데 어떻게 다른 위치란 걸 알아요? … OS가 알아서 잘…
  • 10. 의문점 2 이론적으로 0x00000000 ~ 0xFFFFFFFF(4GB)의 메모리를 할당 가능 예전 컴퓨터 사양은 RAM이 4GB를 넘지 못했다 그럼 위에 있는 4GB 메모리를 전부 할당하면? … 터지나? 아니면 전부 할당을 못하나?
  • 11. 동기부여가 되셨습니까? 질문에 대한 답이 궁금하다면 오늘 주제는 의미가 있을 듯 안 궁금하다면… 아 몰랑! 본격적으로 들어가 봅시다
  • 12. 옛날 옛적 Segment 1978년 인텔은 8086 CPU를 출시 세그멘트 레지스터(16bit)로 메모리를 세그멘트 단위(64KB)로 관리 그런데 어드레스 버스가 20bit 0xFFFF 이상의 주소를 어떻게 표현하지…? 세그멘트 레지스터 + 오프셋으로 접근
  • 13. 옛날 옛적 Segment DS:FF79H 만약 DS(Data Segment) 레지스터에 0x1000 값이 들어 있으면 왼쪽으로 한 번 쉬프트해서 더한다 최종 주소는 0x1FF79 16bit 레지스터와 16bit 오프셋으로 20bit의 주소를 표현
  • 15. 옛날 옛적 Segment 1982년 인텔은 80286 CPU를 출시 Proteced Mode(보호 모드) 추가 어드레스 버스 24bit, 16MB 메모리 사용 가능 세그먼트 디스크립터가 추가 - 세그먼트 레지스터가 세그먼트 셀렉터 바뀜 가상 메모리 관리 가능 - 세그먼트 limit 체크 Read-only and execute-only 세그먼트 옵션 4단계 권한 레벨
  • 16. 옛날 옛적 Segment 1985년 인텔은 80386 CPU를 출시 레지스터, 어드레스 버스 모두 32bit 4GB의 물리 메모리 지원 MMU(Memory Management Unit) 포함 - 메모리 관리 및 메모리 할당을 하드웨어에서 어느정도 제공
  • 20. Segment Selector Index : 8192개의 세그멘트 디스크립터 중 하나를 선택한다. Index * 8을 GDT의 Base 주소에 더함 TI : 이 셀렉터가 가리키는 세그먼트 디스크립터가 GDT에 있는지, LDT에 있는지를 나타낸다 RPL : 특권 레벨
  • 23. Segment Descriptor Base Address : 세그먼트의 시작 주소
  • 24. Segment Descriptor Segment Limit : 세그먼트의 한계 주소
  • 25. Segment Descriptor Granularity : 비트가 세팅 (1) 되어 있을 경우 단위가 4KB가 되어 세그먼트 한계 주소는 4GB 가 된다. 반대로 G 비트가 클리어 (0) 되었을 경우 단위는 1Bit가 되어 최대 1MB 의 한계 값을 가진다.
  • 26. Segment Descriptor Present : 세팅 (1) 되어 있을 경우 해당 세그먼트는 물리 메모리 에 올라와 있어 접근 가능함을 의미 클리어 (0) 되었을 경우 해당 세그먼트 디스크립터가 가리키는 메 모리는 접근할 수 없다
  • 27. 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비트 폭으로 증가, 감소하게 된다
  • 28. Segment Descriptor Type : 시스템(S) 비트 연관되어 해당 세그먼트의 특성을 나타내는 역할을 한다. S 비트가 Clear ( 0 ) 되어 있으면 해당 세그먼트는 시스템 세그먼트로 사용되고, Set ( 1 ) 되어 있 으면 해당 세그먼트는 코드 또는 데이터 세그먼트로 사용된다. Type Field 의 최상위 비트는 해당 세그먼트가 데이터 세그먼트인지 ( 0 ) 코드 세그먼트 인지 ( 1 ) 나타낸다.
  • 30. Global Descriptor Table(GDT) 세그먼트 디스크립터는 모든 Task에 전역적으로 존재할 수 있는 그룹 과 어떤 한 Task에 종속적으로 존재할 수 있는 그룹이 있을 수 있으며 이러한 그룹을 디스크립터 테이블(DT)라 부른다 DT에는 여러 디스크립터들이 순차적인 배열 형태로 저장되어 있다 GDT : 모든 프로그램이 참조할 수 있는 세그먼트 디스크립터들의 모임 LDT : 멀티태스킹 환경에서 각 Task 단위로 정의할 수 있는 것
  • 31. Global Descriptor Table Register(GDTR)
  • 36. CR(Control Register)3 Windows 운영체제뿐만 아니라 멀티스레딩을 지원하는 운영체제에서 CR3 레지스터는 매우 중요한 역할을 하게 되는데, 바로 이 레지스터에 의하여 각각의 프로세스가 독립적인 메모리 주소 공간을 가질 수 있기 때문이다 즉, Windows에서는 프로세스의 스위칭이 일어날 때마다 CR3 레지스 터의 페이지 디렉토리 주소를 바꿔줌으로써 해당 프로세스가 사용하 는 가상 메모리를 전혀 다른 물리적 주소와 매핑시킬 수 있게 한다
  • 37. Page Directory 32비트의 엔트리 정보를 1024개만큼 가지고 있는 배열 형태의 구조 하나의 프로세스에는 반드시 하나의 페이지 디렉토리가 존재해야 함
  • 39. Page Directory P (Present) : 이 페이지 디렉토리가 메모리에 존재하는지, 아니면 존재하지 않는지를 의미한다. 0이면 사용할 수 없다.
  • 40. Page Directory R/W (Read/Write) : 해당 페이지의 속성을 나타낸다. 읽기만 가능하다 ( 0 ) , 읽기와 쓰기 가능하다 ( 1 )
  • 41. Page Directory U/S (User / Supervisor) - 1로 세팅되어있을 경우 Ring 0, Ring 3에서 모두 접근 가능하지만 0으로 세팅 되어있을 경우 해당 페이지는 Ring 0 에서만 접근 가능하다
  • 42. Page Directory A (Accessed) - 이 항목이 선형 주소 변환을 위해 사용되었는지 나타냄
  • 43. Page Directory PS : 4KB 페이징에서는 항상 0이다. If CR4.PSE = 1, must be 0 (otherwise, this entry maps a 4-MByte page) otherwise, ignored
  • 45. Page Table D (Dirty) : 해당 페이지의 내용이 수정될 경우 자동으로 세트된다. indicates whether software has written to the 4-KByte page referenced by this entry
  • 46. 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)
  • 47. Page Table G (Global) : if CR4.PGE = 1, determines whether the translation is global (see Section 4.10); ignored otherwise
  • 48. Page Table G (Global) : 이 비트와 CR4의 PGE(Page Gloal Enable) 플래그가 세트 되어 있을 경우 운영체제에서 CR3 레지스터를 변경하여 메모리 변환에 사용되는 페이지 디렉토리를 변경한다 할지라도 TLB의 내용에서 이 페이 지에 대한 정보를 리셋하지 않도록 해준다. 이러한 행위는 커널 코드와 같이 모든 프로세스에서 공통적으로 사용되 는 내용에 대하여 새로운 TLB의 내용으로 갱신을 수행하지 않게 하므로 프로세스의 메모리 변환을 보다 효율적으로 만들어주게 된다.