메모리 세그멘테이션
Memory segmentation메모리 분할은 컴퓨터의 프라이머리 메모리를 세그먼트 또는 섹션으로 분할하는 운영체제 메모리 관리 기술입니다.세그먼트화를 사용하는 컴퓨터 시스템에서 메모리 로케이션에 대한 참조는 세그먼트 및 세그먼트 내의 오프셋(메모리 로케이션)을 식별하는 값을 포함한다.세그먼트 또는 섹션은 컴파일된 프로그램이 프로그램 이미지로 함께 연결되고 이미지가 메모리에 로드될 때 컴파일된 프로그램의 객체 파일에서도 사용됩니다.
세그먼트(segment)는 보통[1] 개별 루틴이나 데이터 테이블과 같은 프로그램의 자연스러운 분할에 대응하므로 일반적으로 분할은 단독으로 [2]페이징하는 것보다 프로그래머가 더 잘 볼 수 있습니다.세그먼트(segment)는 프로그램 모듈 또는 코드 및 데이터 [3]세그먼트와 같은 메모리 사용 클래스에 대해 생성할 수 있습니다.특정 세그먼트는 프로그램 [1][2]간에 공유될 수 있습니다.
세그멘테이션은 원래 시스템소프트웨어가 소프트웨어 프로세스(태스크)와 소프트웨어 프로세스(태스크)가 사용하고 있는 데이터를 분리할 수 있는 방법으로 개발되었습니다.이는 여러 프로세스를 [4]동시에 실행하는 시스템의 신뢰성을 높이기 위한 것입니다.x86-64 아키텍처에서는 레거시로 간주되며 대부분의 x86-64 기반 최신 시스템 소프트웨어는 메모리 세그멘테이션을 사용하지 않습니다.대신 메모리 보호의 한 방법으로도 기능하는 메모리 페이징을 활용하여 프로그램과 데이터를 처리합니다.그러나 대부분의 x86-64 구현에서는 하위 호환성을 이유로 [4]여전히 이 기능을 지원합니다.
하드웨어 구현
분할을 사용하는 시스템에서 컴퓨터 메모리 주소는 세그먼트 ID와 세그먼트 [3]내의 오프셋으로 구성됩니다.하드웨어 메모리 관리 유닛(MMU)은, 세그먼트와 오프셋을 물리 주소로 변환해, 변환을 실시할 수 있는 것, 및 그 세그먼트와 오프셋에 대한 참조가 허가되고 있는 것을 확인하기 위한 체크를 실시합니다.
각 세그먼트에는 [3]길이와 일련의 권한(읽기, 쓰기, 실행 등)이 관련되어 있습니다.참조 유형이 권한에 의해 허용되고 세그먼트 내의 오프셋이 세그먼트 길이로 지정된 범위 내에 있는 경우에만 프로세스가 참조를 세그먼트로 만들 수 있습니다.그렇지 않으면 세그멘테이션 장애와 같은 하드웨어 예외가 발생합니다.
세그먼트를 사용하여 가상 메모리를 구현할 수도 있습니다.이 경우 각 세그먼트에는 메인 메모리에 있는지 여부를 나타내는 관련 플래그가 있습니다.메인 메모리에 없는 세그먼트에 액세스 하면 예외가 발생하고 운영체제는 그 세그먼트를 세컨더리 스토리지에서 메모리로 읽습니다.
세그먼트화는 메모리 보호를 구현하는 [5]방법 중 하나입니다.페이징은 또 다른 것으로, 조합할 수 있습니다.메모리 세그먼트의 크기는 일반적으로 고정되어 있지 않으며 [6]1바이트만큼 작을 수 있습니다.
세그먼트화는 페이징 유무에 관계없이 다양한 하드웨어에 몇 가지 방법으로 구현되어 있습니다.인텔 x86 메모리 세그멘테이션은, 어느 모델에도 대응하고 있지 않습니다.아래에서 개별적으로 설명합니다.또, 상세한 것에 대하여는, 별도 기사를 참조해 주세요.
페이징 없는 세그멘테이션
각 세그먼트에는 세그먼트(segment base)가 메모리 내에 있는 위치를 나타내는 정보가 관련지어집니다.프로그램이 메모리 위치를 참조할 때 오프셋이 세그먼트 베이스에 추가되어 물리적 메모리 주소가 생성됩니다.
페이징 없이 세그멘테이션을 사용하여 시스템에 가상 메모리를 구현하려면 전체 세그먼트를 메인 메모리와 세컨더리 스토리지 간에 서로 교환해야 합니다.세그먼트가 스왑 인되면 운영체제는 세그먼트 전체를 유지할 수 있을 만큼 충분한 빈 메모리를 할당해야 합니다.메모리 플래그멘테이션은, 합계하면 충분한 메모리가 있어도, 충분한 연속 메모리가 없는 경우에 발생하는 경우가 많습니다.
페이징을 사용한 세그멘테이션
세그먼트 정보는, 메모리 위치 대신에, 세그먼트용의 페이지 테이블의 주소를 포함한다.프로그램이 메모리 위치를 참조할 때 오프셋은 페이지 테이블을 사용하여 메모리 주소로 변환됩니다.세그먼트는 다른 메모리 페이지를 할당하고 세그먼트 페이지 테이블에 추가함으로써 확장할 수 있습니다.
페이징과 함께 세그멘테이션을 사용하는 시스템에서 가상 메모리를 구현하면 보통 페이징된 비세그먼트 시스템과 마찬가지로 메인 메모리와 세컨더리 스토리지 사이에서 개별 페이지만 앞뒤로 이동합니다.세그먼트의 페이지는 메인 메모리의 임의의 장소에 배치할 수 있기 때문에, 연속할 필요는 없습니다.이것에 의해, 통상, 프라이머리 스토리지와 세컨더리 스토리지간의 입출력량이 감소해, 메모리 플래그멘테이션이 감소합니다.
역사
Burroughs Corporation B5000 컴퓨터는 세그멘테이션을 최초로 구현한 컴퓨터 중 하나이며, 세그멘테이션을 기반으로 한 "가상 [7]메모리를 제공하는 최초의 상용 컴퓨터"일 수도 있습니다.최신의 B6500 컴퓨터도 세그먼트화를 실장했습니다.이 아키텍처의 버전은 현재 Unisys ClearPath Libra 서버에서 사용되고 있습니다.
GE-635의 수정판인 GE-645 컴퓨터는 1964년에 멀티틱스를 지원하도록 설계되었습니다.
1975년에 시작된 인텔 iAPX [8]432는 마이크로프로세서에 메모리 보호를 갖춘 진정한 세그먼트(segment) 아키텍처를 구현하려고 했습니다.
인텔 i960 프로세서의 960MX 버전은 로드 및 저장 명령을 지원하며 소스 또는 수신처가 객체의 "액세스 디스크립터"가 되고, 액세스 디스크립터가 32비트 레지스터에 포함되며, 다음 레지스터의 베이스 오프셋과 추가 오프셋에서 계산되며,명령어로 지정된 인덱스 레지스터.액세스 디스크립터는 권한 비트와 26비트 오브젝트 인덱스를 포함한다.오브젝트 인덱스는 오브젝트 디스크립터 테이블 내의 인덱스이며 오브젝트의 데이터, 오브젝트의 페이지 테이블 또는 오브젝트의 2레벨 페이지 테이블의 최상위 페이지 테이블을 오브젝트에 따라 제공한다.입력해 주세요.[9]
Prime, Stratus, Apollo, IBM System/38 및 IBM AS/400(IBM i 포함) 컴퓨터는 메모리 세분화를 사용합니다.
예
S/370 아키텍처
가상 스토리지[10][11](DAT) 및 24비트 주소를 사용하는 IBM System/370[a] 모델에서 제어 레지스터 0은 세그먼트 크기를 64KiB 또는 1MiB로 지정하고 페이지 크기를 2KiB 또는 4KiB로 지정합니다. 제어 레지스터 1은 세그먼트 테이블의 길이와 실제 주소를 지정하는 STD(Segment Table Designator)를 포함합니다.각 세그먼트 테이블 엔트리에는 페이지 테이블 위치, 페이지 테이블 길이 및 비활성 비트가 포함됩니다.이후 IBM은 주소 크기를 31비트로 확장하고 세그먼트 테이블 엔트리에 2비트를 추가했습니다.
- 세그먼트 보호 비트
- 세그먼트는 읽기 전용입니다.
- 공통 세그먼트 비트
- 세그먼트는 주소 공간 간에 공유됩니다.이 비트는 TLB 사용을 최적화하도록 설정됩니다.
IBM의 각 DAT 구현에는 변환 캐시가 포함되어 있으며, 이를 IBM은 TLB(Translation Lookaside Buffer)라고 합니다.운용원칙은 일반적인 용어로 TLB에 대해 설명하지만 자세한 내용은 아키텍처의 일부가 아니며 모델에 따라 다릅니다.
그 3031,3032과 3033 프로세서 단지부터 IBM프로그램을 번역해 테이블 간의 두 주소 공간을 전환할 수 있도록 하는 기능 Dual-address Space[11]:5-13–5-17, Dual-Address-Space 컨트롤:5-17–5-20, 자료 수집 체제 권한 부여 메커니즘:5-21–5-24, PC-Number 번역(다스)[12]라고 불리우는 초등이라고 제안했다. 주소 공간과 2차 주소 공간(CR7)(CR1)고 주소 공간 보호 키에 신하의 사이의 데이터를 이동합니다.DAS는 16비트 Address Space Number(ASN; 어드레스 스페이스 번호)를 STD로 변환하기 위한 변환 테이블을 지원하며, STD를 CR1(프라이머리) 또는 CR7(세컨더리)에 로드하기 위한 특권 명령을 제공합니다.
x86 아키텍처
인텔 8086 이후의 초기 x86 프로세서에서 사용되는 메모리 세그멘테이션은 보호 기능을 제공하지 않습니다.이러한 프로세서에서 실행되는 프로그램은 제한 없이 모든 세그먼트에 액세스할 수 있습니다.세그먼트는 시작 위치로만 식별되며 길이 확인은 이루어지지 않습니다.세그먼트 개시 주소의 입도는 16 바이트, 오프셋은 16 비트입니다.세그먼트 사이즈는 최대 64 KiB까지 지원되므로 세그먼트는 오버랩할 수 있고(많은 경우), 각 물리 주소는 4096개의 세그먼트-오프셋쌍(주소 오프셋랩 어라운드 가능)으로 나타낼 수 있습니다.
인텔 80286 이후의 세그멘테이션은 보호를 제공합니다.80286의 도입으로 인텔은 이전 x86 CPU 모델의 유일한 동작 모드를 「리얼 모드」라고 명명하고, 보호 기능을 갖춘 새로운 「프로텍트 모드」를 도입했습니다.하위 호환성을 위해 모든 x86 CPU는 메모리 보호 없이 64KiB 세그먼트 고정 및 20비트(1024KiB) 주소 지정만 없는 "실제 모드"로 시작합니다.80286 이후 프로세서의 풀주소 공간과 고도의 MMU 기능을 사용하려면 소프트웨어에 의해 다른 모드로 전환해야 합니다.
인텔 80386 이후의 프로세서에서는, 페이징도 서포트하고 있습니다.이러한 프로세서에서는, 세그먼트(segment)의 페이지(page) 테이블을 가리키지 않고, 세그먼트(segment)의 주소를 리니어 메모리에 격납합니다.페이징이 유효하게 되어 있는 경우, 리니어 메모리내의 주소는, 다른 페이지 테이블을 사용해 물리 주소에 매핑 됩니다.
x86-64 아키텍처에서는 롱 모드(64비트 모드)[13]에서는 세그멘테이션을 사용하지 않습니다.x86-64 아키텍처에서는 레거시로 간주되며 대부분의 x86-64 기반 최신 시스템 소프트웨어는 메모리 세그멘테이션을 사용하지 않습니다.대신 메모리 보호의 한 방법으로도 기능하는 메모리 페이징을 활용하여 프로그램과 데이터를 처리합니다.대부분의 x86-64 구현은 하위 호환성을 이유로 여전히 [4]이 기능을 지원합니다.세그먼트 레지스터의 4개(CS, SS, DS 및 ES)는 강제적으로0, 제한은 2로 설정됩니다64.세그먼트 레지스터 FS 및 GS는 여전히 0이 아닌 기본 주소를 가질 수 있습니다.이것에 의해, operating system은 이러한 세그먼트를 특별한 목적으로 사용할 수 있습니다.
「 」를 참조해 주세요.
메모들
- ^ 모델 115, 125, 135, 138, 145, 148, 155 II, 158, 165 II 및 168
레퍼런스
- ^ a b Holt, Anatol W. (1961). "Program Organization and Record Keeping for Dynamic Storage Allocation". Communications of the ACM. 4 (10): 422–431. doi:10.1145/366786.366795. S2CID 18973700.
- ^ a b Englander, Irv (2003). The architecture of computer hardware and systems software (3rd ed.). Wiley. ISBN 0-471-07325-3.
- ^ a b c Glaser, Edward L.; Couleur, John F.; Oliver, G. A. (1965). System Design of a Computer for Time Sharing Applications. 1965 Fall Joint Computer Conference.
- ^ a b c "1.2 Memory Management". AMD64 Technology AMD64 Architecture Programmer's Manual Volume 2: System Programming (PDF). Vol. 2. Advanced Micro Devices. 2018. p. 5.
- ^ Arpaci-Dusseau, Remzi H.; Arpaci-Dusseau, Andrea C. (2014). "Segmentation" (PDF). Operating Systems: Three Easy Pieces. Arpaci-Dusseau Books.
- ^ Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3 (3A, 3B & 3C): System Programming Guide (PDF). Intel Corporation. 2012. pp. 3–13.
- ^ Mayer, Alastair J. W. "The Architecture of the Burroughs B5000 - 20 Years Later and Still Ahead of the Times?". Retrieved 2012-03-15.
- ^ Introduction to the IAPX 432 Architecture (PDF). Intel Corporation. 1981. p. 78.
- ^ BiiN CPU Architecture Reference Manual (PDF). BiiN. July 1998.
- ^ "Dynamic Address Translation" (PDF). IBM System/370 Principles of Operation (PDF). Systems (Fourth ed.). IBM. September 1974. pp. 57–68. GA22-7000-4.
- ^ a b "Dynamic Address Translation". IBM System/370 Principles of Operation (Eleventh ed.). IBM. September 1987. pp. 3-20–3-38. GA22-7000-10.
- ^ "Address spaces" (PDF). IBM System/370 Extended Architecture Principles of Operation (PDF) (Second ed.). IBM. January 1987. pp. 3-13–3-14. SA22-7085-1.
- ^ AMD64 Technology AMD64 Architecture Programmer's Manual Volume 2: System Programming (PDF). Vol. 2. Advanced Micro Devices. 2018.
외부 링크
- IA-32 인텔 아키텍처 소프트웨어 개발자 매뉴얼 제3A권: 시스템 프로그래밍 가이드http://www.intel.com/products/processor/manuals/index.htm 를 참조해 주세요.
- 운영 체제:William Stallings의 Internals and Design Principle.출판사: 프렌티스 홀.ISBN 0-13-147954-7.ISBN 978-0-13-147954-8.