일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- level trigger
- packet flow
- .nret core 배포
- wrefresh
- Compiler
- ncurses
- packet filter
- 어셈블리어
- rfc5508
- ioctl
- iptables
- 취약점
- DOCKER-USER
- NAPT
- C언어
- epoll_wait
- epoll
- architecture
- REDIS
- wnourefresh
- Docker
- edge trigger
- BOF
- 풀이
- LOB
- .net core 7
- doupdate
- cbpf
- vtable
- mvwin
- Today
- Total
Tuuna Computer Science
[OS] 페이징이란 무엇인가? (메모리 효울적으로 사용하기) 본문
[ 메모리 1MB 어떻게 접근하죠?]
8086에서는 1MB까지의 메모리를 사용가능한데 메모리지정 방식은 0x0000:0000 ~ 0xFFFF:FFFF 이다.
즉, 0xFFFF:FFFF를 물리주소형식으로 변환하면 0x10FFEF다. 이는 1MB를 초과한다.
그럼 이 초과되는 것은 어디에 기록되는 걸까 이 초과되는 것은 메모리의 0x0000:0000에서 부터 다시 기록된다.
즉, 이전의 데이터가 겹쳐진다는 것이다!
그래서 펜티엄4의 어드레스 라인이 32개 있는데 그중 어드레스 라인 20번, A20번을 키보드 컨트롤러와 AND연산을 진행한다.
그래서 키보드 컨트롤러의 특정 핀을 1로 세트해야만 A20번이 1로 세트되었을 때 그 값이 1로 RAM에게 전달 될 수 있다.
이 A20와 키보드 컨트롤러를 킴으로써 1MB이상의 주소에 접근할 수 있게 되었다.
여기서 궁금한게 있을텐데 왜 Intel은 Real-Mode를 없애지 않았냐는 것이다.
Intel이 16비트의 8086에서 32비트의 Protected Mode 80286을 출시했었을 때 대부분의 프로그램(부트로더 포함)은 8086에서 돌아가는 것이였고 이를 호환시키게 하기 위해서는 Real Mode라는 방식을 추가적으로 둘 수 밖에 없었다.
80286의 경우 24개의 어드레스 라인이 있었는데 그중 20번째 어드레스라인을 키보드 컨트롤러 칩인 8042의 하나의 핀과 함께 AND 게이트로 묶었다.
'OS' 카테고리의 다른 글
멀티 스레드 환경에서의 성능 최적화 (0) | 2020.02.07 |
---|---|
[OS]논리주소? 선형주소? 물리주소? 개념 이해하기 (1) | 2018.11.15 |
[OS 개발]보호모드의 하드웨어 인터럽트 처리과정 (0) | 2018.11.14 |
[OS]Protected Mode(보호모드)와 GDT (0) | 2018.11.10 |