일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- BOF
- packet filter
- cbpf
- .net core 7
- ioctl
- mvwin
- doupdate
- epoll
- rfc5508
- level trigger
- 어셈블리어
- DOCKER-USER
- C언어
- packet flow
- wrefresh
- wnourefresh
- .nret core 배포
- REDIS
- edge trigger
- NAPT
- Docker
- 취약점
- 풀이
- ncurses
- iptables
- architecture
- Compiler
- epoll_wait
- vtable
- LOB
- Today
- Total
Tuuna Computer Science
[OS]논리주소? 선형주소? 물리주소? 개념 이해하기 본문
메모리의 주소를 표현하기 위해 우리는 3가지의 단어를 사용한다.
논리주소, 선형주소(가상주소), 물리주소
이들 중에서 실제로 CPU가 인식할 수 있는 주소는 "물리주소"이다.
그럼 이 3가지의 주소가 무슨 의미인지 살펴보자.
논리주소 :: 프로그래머의 관점에서 본 주소. 주로 오프셋의 의미가 강하다.
선형주소 :: 논리주소를 GDT와 LDT를 통해 나온 주소를 의미한다.
물리주소 :: 선형주소를 페이징을 통해 나온 주소를 의미한다.
자 기본적으로 (논리주소 => 선형주소 => 물리주소) 변환하게 된다.
이 어셈코드를 보자
lea esi, [msgPMode]
"ESI레지스터에 msgPMode의 주소를 복사해라"는 의미를 지닌다.
그럼 ESI레지스터에는 msgPMode의 주소가 복사되는데 이 내용을 기계어의 코드로 자세히 살펴보자.
00000040 3E8D35[63000000] LEA ESI, [DS:msgPMode]
0x63주소에 있는 DS세그먼트의 msgPMode에 접근하려 한다.
(리틀 엔디안을 적용해야 한다.)
00000063 57652061726520696E- msgPMode DB "We are in Protected Mode", 0
0000006C 2050726F7465637465-
00000075 64204D6F646500
이 주소로 가보면 실제 문자열이 존재한다.
여기서 문자열이 있는 주소가 0x63임을 알 수 있다. 여기서 0x63은 0을 기준으로 떨어진 거리(오프셋)을 나타낸 것인데. 이 것이 논리주소이다.
이제 이 논리주소를 선형주소로 변환시켜 보자.
일단 msgPMode는 DS 세그먼트에 있다. 그럼 DS레지스터의 세그먼트 셀렉터를 뜯어보면 된다.
DS 레지스터를 뜯어보면
13비트의 INDEX와 1비트의 TI, 2비트의 RPL이 있다.
우린 여기서 13비트의 INDEX값을 참조하여 GDT에서 이 INDEX값에 해당하는 세그먼트를 찾아낸다.
찾아낸 후 이 세그먼트의 Limit과 논리주소의 값 0x63의 크기를 비교한다.
논리주소의 값이 더 작다면 이 논리주소에 32비트의 Base Address의 값을 더한다.
그럼 Base Address(0x100000) + 0x63 = 0x10063이 되는데 이 값이 선형주소이다.
여기서 페이징을 통해 선형주소가 물리주소로 바뀌는데 아직 안배웠으로 패스
만약 페이징이 없다면 이 선형주소가 그대로 물리주소가 된다 ㅎ
수정) 물론 논리주소에서 선형주소로의 변경은 세그멘테이션 기법임을 밝힌다.
현재 x64의 경우 세그멘테이션 기법을 사용하지 않고 flat memory model을 기반으로 함을 밝힘.
곧 이부분에 관해 공부해서 다시 올릴예정
'OS' 카테고리의 다른 글
멀티 스레드 환경에서의 성능 최적화 (0) | 2020.02.07 |
---|---|
[OS] 페이징이란 무엇인가? (메모리 효울적으로 사용하기) (0) | 2018.11.27 |
[OS 개발]보호모드의 하드웨어 인터럽트 처리과정 (0) | 2018.11.14 |
[OS]Protected Mode(보호모드)와 GDT (0) | 2018.11.10 |