제로 페이지
Zero page제로 페이지 또는 베이스 페이지는 컴퓨터 주소 공간의 맨 처음에 있는 메모리 블록, 즉 시작 주소가 0인 페이지다.페이지 크기는 컨텍스트에 따라 달라지며, 제로 페이지 메모리 대 더 높은 어드레싱 메모리의 중요성은 머신 아키텍처에 크게 의존한다.예를 들어, Motorola 6800과 MOS Technology 6502 프로세서 제품군은 첫 256바이트의 메모리를 특별히 취급하지만,[1] 다른 많은 프로세서는 그렇지 않다.
더 현대적인 하드웨어와는 달리, 1970년대에 컴퓨터 RAM은 CPU만큼 빠르거나 빨랐다.따라서 레지스터가 거의 없고 메인 메모리를 확장된 추가 레지스터 풀로 사용하는 것이 타당했다.비교적 넓은 16비트 주소 버스와 비교적 좁은 8비트 데이터 버스를 사용하는 기계에서는 제로 페이지 위치에 접근하는 것이 다른 위치에 접근하는 것보다 더 빠를 수 있다.
제로 페이지 어드레싱은 대부분 역사적 의미가 있는데, 통합 회로 기술의 발전으로 CPU에 더 많은 레지스터를 추가하는 것이 RAM 액세스보다 훨씬 더 빠르고 비용이 적게 들기 때문이다.
크기
0페이지의 실제 크기(바이트)는 마이크로프로세서 설계와 구형 설계에서 결정되며, 종종 프로세서의 색인 레지스터가 참조할 수 있는 가장 큰 값과 같다.예를 들어 앞서 언급한 8비트 프로세서는 8비트 인덱스 레지스터와 페이지 크기가 256바이트에 이른다.따라서 0 페이지는 주소 0에서 주소 255까지 확장된다.
CPU 레지스터가 거의 없는 시스템
PDP-8을 포함한 초기 컴퓨터에서는 제로 페이지가 특별한 빠른 어드레싱 모드를 가지고 있어서 데이터의 임시 저장에 용이하게 사용할 수 있었고 CPU 레지스터의 상대적 부족을 보상했다.PDP-8은 레지스터가 한 개뿐이어서 페이지 주소 지정이 전혀 필요 없었다.
더 현대적인 하드웨어와는 달리, 1970년대에 컴퓨터 RAM은 CPU만큼 빠르거나 빨랐다.따라서 레지스터가 거의 없고 메인 메모리를 확장된 추가 레지스터 풀로 사용하는 것이 타당했다.비교적 넓은 16비트 주소 버스와 비교적 좁은 8비트 데이터 버스를 사용하는 기계에서는 제로 페이지 위치에 접근하는 것이 다른 위치에 접근하는 것보다 더 빠를 수 있다.제로 페이지 위치는 단일 바이트로 처리할 수 있으므로, 페이지에 접근하는 지시사항은 더 작고 더 빠른 로딩이 될 수 있다.
예를 들어, MOS Technology 6502에는 하나의 범용 레지스터(축전지)만 있다.이러한 약점을 상쇄하고 성능 우위를 점하기 위해 0 페이지를 특별히 활용하도록 설계되어 보다 작은 특별 지침을 제공함으로써 메모리 가져오기 주기가 적고 실행 속도가 빨라진다.많은 지침은 페이지 0과 페이지 0이 아닌 주소에 대해 다르게 코딩되며, 이를 6502 용어로 제로 페이지 주소 지정이라고 한다(6800 용어로 직접 주소 지정이라고 함).
LDA $00 ; 0페이지 LDA $0000 ; 0이 아닌 페이지
위의 두 가지 지침은 모두 동일한 것을 성취한다: 그들은 에 메모리 위치 $00의 값을 로딩한다.레지스터(누적기)그러나 첫 번째 지시의 길이는 2바이트에 불과하며 세 번의 클럭 사이클이 있어야 완성된다.두 번째 지침은 길이가 3바이트로, 실행하기 위해서는 4번의 클럭 사이클이 필요하다.이러한 실행 시간의 차이는 반복 코드에서 현저하게 될 수 있다.
Motorola 6809와 같은 일부 CPU는 256바이트 페이지 즉, 특별 8비트 "Direct Page" (DP) 레지스터에 의해 선택되는 페이지에 대한 빠른 액세스를 허용함으로써 이 개념을 확장한다.이를 직접 페이지 주소 지정이라고 한다.
Null 포인터
제로 페이지의 원래 우선 사용과는 달리, FreeBSD, Linux, Microsoft Windows와[2] 같은 일부 현대적인 운영 체제는 제로 페이지를 실제로 null 포인터의 사용을 트랩하기 위해 접근할 수 없게 만든다.이러한 포인터 값은 초기화되지 않은 값이나 송신 노드를 합법적으로 나타낼 수 있지만 유효한 개체를 가리키지는 않는다.버기 코드는 null 포인터를 통해 개체에 액세스를 시도할 수 있으며, 이는 메모리 액세스 위반으로 운영 체제 수준에 갇힐 수 있다.
인터럽트 벡터
그러나 일부 컴퓨터 아키텍처는 여전히 다른 목적을 위해 주소 공간의 시작을 예약한다. 예를 들어, Intel x86 시스템은 인터럽트 벡터 테이블(IVT)을 위해 처음 256개의 주소 공간의 이중 단어를 실제 모드로 실행할 경우 예비한다.
하드웨어 관련 벡터에 제로 페이지를 사용하는 유사한 기법이 ARM 아키텍처에 채택되었다.잘못 작성된 프로그램에서 이것은 프로그램이 의도하지 않은 메모리 영역에서 정보를 읽으려 하고 실행 가능한 코드를 데이터로 처리하거나 그 반대로 처리하는 "ofla" 행동을 유발할 수 있다.이는 특히 제로 페이지 영역을 사용하여 시스템 점프 벡터를 저장하고 펌웨어가 이를 덮어쓰도록 속인 경우 문제가 된다.[3]
CP/M
8비트 CP/M에서는 실행 중인 프로그램과 운영체제 간의 통신에 제로 페이지를 사용한다.
페이지 주소 지정
인텔 4004 4비트 프로세서의 그것과 같은 일부 프로세서 아키텍처에서는 메모리가 (256바이트) 페이지로 나뉘었고, 제어 흐름이 페이지 경계를 넘을 때 특별한 주의사항을 취해야만 했는데, 어떤 기계 지침은 페이지의 마지막 몇 가지 지침에 위치하면 다른 행동을 보여서 지침이 거의 없었다.페이지 사이를 건너뛰는 것이 좋다.[4]
참고 항목
- 메모리 부족 – DOS에서 처음 64KB의 메모리(세그먼트 0)
- 페이지 경계 재배치
참조
- ^ Sjödin, Tomas; Jonsson, Johan (2006). Student Papers in Computer Architecture (PDF). Umeå, Sweden. p. 29. Archived from the original (PDF) on 2019-03-09. Retrieved 2019-08-21.
- ^ "Managing Virtual Memory". Microsoft. 2014-12-05. Retrieved 2014-12-05.
- ^ "ARM 'security hole' is ofla cousin". drobe.co.uk. 2007-04-24. Retrieved 2008-10-22.
- ^ "4.1 Crossing Page Boundaries". MCS-4 Assembly Language Programming Manual - The INTELLEC 4 Microcomputer System Programming Manual (PDF) (Preliminary ed.). Santa Clara, California, USA: Intel Corporation. December 1973. pp. 2-4, 2-14, 3-41, 4-1. MCS-030-1273-1. Archived (PDF) from the original on 2020-03-01. Retrieved 2020-03-02.
[…] certain instructions function differently when located in the last byte (or bytes) of a page than when located elsewhere. […] Two addresses are on the same page if the highest order hexadecimal digit of their addresses are equal. […] If the JIN instruction is located in the last location of a page in memory, the highest 4 bits of the program counter are incremented by one, causing control to be transferred to the corresponding location on the next page. […] If […] the JIN had been located at address 255 decimal (0FF hexadecimai), control would have been transferred to address 115 hexadecimal, not 015 hexadecimal. This is dangerous programming practice, and should be avoided whenever possible. […] programs are held in either ROM or program RAM, both of which are divided into pages. Each page consists of 256 8-bit locations. Addresses 0 through 255 comprise the first page, 256-511 comprise the second page, and so on. In general, it is good programming practice to never allow program flow to cross a page boundary except by using a JUN or JMS instruction. […]
추가 읽기
- Bray, Andrew C.; Dickens, Adrian C.; Holmes, Mark A. (1983). The Advanced User Guide for the BBC Microcomputer (3 ed.). The Cambridge Microcomputer Centre. ISBN 0-946827-00-1.
- Roth, Richard L. (February 1978) [1977]. "Relocation Is Not Just Moving Programs". Dr. Dobb's. Vol. 3, no. 2. Ridgefield, CA, USA: People's Computer Company. pp. 14–20 (70–76). ISBN 0-8104-5490-4. #22. Archived from the original on 2019-04-20. Retrieved 2019-04-19.
- "1. Introduction: Segment Alignment". 8086 Family Utilities - User's Guide for 8080/8085-Based Development Systems (PDF). Revision E (A620/5821 6K DD ed.). Santa Clara, California, USA: Intel Corporation. May 1982 [1980, 1978]. p. 1-6. Order Number: 9800639-04. Archived (PDF) from the original on 2020-02-29. Retrieved 2020-02-29.