KR20220049026A - 메모리 네임스페이스에 대한 데이터 바인딩을 위한 메모리 시스템 - Google Patents
메모리 네임스페이스에 대한 데이터 바인딩을 위한 메모리 시스템 Download PDFInfo
- Publication number
- KR20220049026A KR20220049026A KR1020227008801A KR20227008801A KR20220049026A KR 20220049026 A KR20220049026 A KR 20220049026A KR 1020227008801 A KR1020227008801 A KR 1020227008801A KR 20227008801 A KR20227008801 A KR 20227008801A KR 20220049026 A KR20220049026 A KR 20220049026A
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- namespace
- data
- address
- memory device
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0625—Power saving in storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0626—Reducing size or complexity of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
- G06F3/0649—Lifecycle management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/068—Hybrid storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7202—Allocation control and policies
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Memory System (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
컴퓨터 시스템은 랜덤하게 액세스 가능한 데이터를 컴퓨터 시스템의 메인 메모리에 저장하는 상이한 유형들의 물리적 메모리 디바이스들을 포함한다. 하나의 접근법에서, 운영 체제는 애플리케이션에 의해 사용하기 위해 네임스페이스로부터 메모리를 할당한다. 네임스페이스는 물리적 어드레스가 정의된 물리적 메모리 디바이스에 대한 논리적 참조이다. 네임스페이스가 메모리 유형에 바인딩되어 있다. 네임스페이스를 메모리 유형에 바인딩한 것에 응답하여, 운영 체제는 페이지 테이블을 조정하여 네임스페이스의 논리적 메모리 어드레스를 메모리 유형의 메모리 디바이스에 맵핑한다.
Description
관련 출원
본 출원은 2019년 9월 17일자로 출원되고 발명의 명칭이 "메모리 네임스페이스에 대한 데이터 바인딩을 위한 메모리 시스템"인 미국 특허 출원 번호 제16/573,535호에 대한 우선권을 주장하며, 그 전체 개시는 본 출원에 참조로 포함된다.
기술 분야
본 출원에 개시된 적어도 일부 실시예는 전반적으로 메모리 시스템에 관한 것으로, 보다 상세하게는 메모리 네임스페이스에 대한 데이터 바인딩을 위한 메모리 시스템에 관한 것이나 이에 제한되지 않는다.
다양한 유형의 메모리 디바이스를 사용하여 컴퓨터 시스템의 메인 메모리에 데이터를 저장할 수 있다. 휘발성 메모리 디바이스의 한 유형은 DRAM(dynamic random access memory) 디바이스이다. 다양한 유형의 비휘발성 메모리 디바이스는 NAND 플래시 메모리 디바이스 또는 비휘발성 랜덤 액세스 메모리(NVRAM) 디바이스를 포함할 수 있다.
운영 체제에서 메모리 관리는 컴퓨터 시스템의 메인 메모리의 관리를 담당한다. 메모리 관리는 메인 메모리의 메모리 위치의 상태(예를 들어, 할당됨 또는 사용 가능 중 어느 하나의 메모리 상태)를 추적한다. 메모리 관리는 운영 체제에서 실행되는 다양한 프로세스 사이의 메모리 할당을 추가로 결정한다. 메모리가 프로세스에 할당되면 운영 체제는 프로세스에 할당할 메모리 위치를 결정한다.
한 가지 접근법에서 운영 체제는 페이지 할당을 사용하여 메인 메모리를 페이지 프레임이라고 지칭되는 고정 크기 단위로 분할한다. 소프트웨어 프로그램의 가상 어드레스 공간은 동일한 크기를 갖는 페이지로 분할된다. 하드웨어 메모리 관리 유닛은 페이지를 물리적 메모리의 프레임에 맵핑한다. 페이지 메모리 관리 접근법에서 각각의 프로세스는 전형적으로 그 고유한 어드레스 공간에서 실행된다.
일부 경우에, 메모리 관리 유닛(MMU)은 페이지 메모리 관리 유닛(PMMU)이라 지칭된다. MMU는 운영 체제에서 사용하는 모든 메모리 참조를 관리하고 가상 메모리 어드레스의 물리적 어드레스로의 변환을 수행한다. MMU는 전형적으로 프로세서에서 사용하는 어드레스 범위인 가상 어드레스 공간을 페이지로 분할한다.
일부 접근법에서, MMU는 페이지 테이블 엔트리를 함유하는 페이지 테이블을 사용하여 가상 페이지 번호를 메인 메모리의 물리적 페이지 번호에 맵핑한다. 일부 경우에는 가상 어드레스가 맵핑될 때 메인 메모리에 저장된 페이지 테이블에 액세스할 필요성을 피하기 위해 TLB(translation lookaside buffer)라고 지칭되는 페이지 테이블 엔트리의 캐시가 사용된다. 가상 메모리를 사용할 때 가상 어드레스의 연접(contiguous) 범위는 물리적 메모리의 여러 비연접 블록에 맵핑될 수 있다.
일부 경우에, 페이지 테이블 엔트리는 페이지 사용에 대한 정보를 포함할 수 있다. 다양한 예는 데이터가 페이지에 기록되었는지 여부, 페이지가 마지막으로 사용된 시기, 페이지를 판독 및 기록할 수 있는 프로세스의 유형(예를 들어, 사용자 모드 또는 감독자 모드), 페이지를 캐싱해야 하는지 여부에 관한 정보를 포함한다.
한 가지 접근법에서, TLB는 CAM(content-addressable memory)으로 구현된다. 검색 키는 가상 어드레스이고, 검색 결과는 물리적 어드레스이다. 요청된 어드레스가 TLB에 있는 경우, 검색에서 검색된 물리적 어드레스가 물리적 메모리 디바이스에 액세스하는 데 사용된다. 요청된 어드레스가 TLB에 없으면, 페이지 테이블이 메인 메모리에서 액세스된다.
일부 경우에, 가상 메모리 관리 시스템은 프로세스 식별자를 사용하여 각각의 페이지를 프로세스에 연관시킨다. 가상 페이지와 프로세스 식별자의 연관은 페이지-아웃할 페이지를 선택하는 데 도움이 될 수 있다. 예를 들어, 프로세스의 메인 코드 페이지가 페이지-아웃된 경우 해당 프로세스에 속한 다른 페이지가 즉시 필요할 가능성이 감소한다.
보다 일반적으로, 컴퓨터 시스템은 하나 이상의 메모리 서브시스템 가질 수 있다. 메모리 서브시스템은 DIMM(dual in-line memory module), SO-DIMM(small outline DIMM) 또는 NVDIMM(non-volatile dual in-line memory module)과 같은 메모리 모듈일 수 있다. 메모리 서브시스템은 데이터를 저장하는 하나 이상의 메모리 컴포넌트를 포함할 수 있다. 메모리 컴포넌트는, 예를 들어, 비휘발성 메모리 컴포넌트 및 휘발성 메모리 컴포넌트일 수 있다. 메모리 컴포넌트의 예는 메모리 집적 회로를 포함한다. 일부 메모리 집적 회로는 휘발성이며 저장된 데이터를 유지하기 위해 전력이 필요하다. 일부 메모리 집적 회로는 비휘발성이며 비급전시에도 저장된 데이터를 유지할 수 있다. 비휘발성 메모리의 예는 플래시 메모리, ROM(Read-Only Memory), PROM(Programmable Read-Only Memory), EPROM(Erasable Programmable Read-Only Memory) 및 EEPROM(Electronically Erasable Programmable Read-Only Memory) 메모리 등을 포함한다. 휘발성 메모리의 예는 DRAM(Dynamic Random-Access Memory) 및 SRAM(Static Random-Access Memory)을 포함한다. 일반적으로, 컴퓨터 시스템은 메모리 서브시스템을 이용하여 메모리 컴포넌트에 데이터를 저장하고 메모리 컴포넌트로부터 데이터를 검색할 수 있다.
예를 들어, 컴퓨터 시스템은 컴퓨터 시스템에 부착된 하나 이상의 메모리 서브시스템을 포함할 수 있다. 컴퓨터 시스템은 데이터 및 명령어를 저장 및/또는 검색하기 위해 하나 이상의 메모리 서브시스템과 통신하는 중앙 처리 유닛(CPU)을 가질 수 있다. 컴퓨터를 위한 명령어는 운영 체제, 디바이스 드라이버 및 애플리케이션 프로그램을 포함할 수 있다. 운영 체제는 컴퓨터의 자원을 관리하고 메모리 할당 및 자원의 시간 공유와 같은 애플리케이션 프로그램에 대한 공통 서비스를 제공한다. 디바이스 드라이버는 컴퓨터에서 특정 유형의 디바이스를 동작하거나 제어하고; 운영 체제는 디바이스 드라이버를 사용하여 디바이스 유형에 의해 제공되는 자원 및/또는 서비스를 제공한다. 컴퓨터 시스템의 중앙 처리 유닛(CPU)은 운영 체제 및 디바이스 드라이버를 실행하여 애플리케이션 프로그램에 서비스 및/또는 자원을 제공할 수 있다. 중앙 처리 유닛(CPU)은 서비스 및/또는 자원을 사용하는 애플리케이션 프로그램을 실행할 수 있다. 예를 들어, 일 유형의 애플리케이션을 구현하는 애플리케이션 프로그램은 메모리 서브시스템의 메모리 컴포넌트에 데이터를 저장하고 메모리 컴포넌트로부터 데이터를 검색하도록 중앙 처리 유닛(CPU)에 지시할 수 있다.
컴퓨터 시스템의 운영 체제는 애플리케이션 프로그램이 메모리의 가상 어드레스를 사용하여 컴퓨터 시스템의 하나 이상의 메모리 서브시스템의 메모리 컴포넌트에 데이터를 저장하거나 메모리 컴포넌트로부터 데이터를 검색하게 할 수 있다. 운영 체제는 가상 어드레스를 컴퓨터 시스템의 중앙 처리 유닛(CPU)에 연결된 하나 이상의 메모리 서브시스템의 물리적 어드레스에 맵핑한다. 운영 체제는 가상 어드레스에 지정된 메모리 액세스를 메모리 서브시스템의 물리적 어드레스로 변환한다.
가상 어드레스 공간은 페이지로 분할될 수 있다. 가상 메모리의 페이지는 메모리 서브시스템의 물리적 메모리 페이지에 맵핑될 수 있다. 운영 체제는 메모리 모듈의 메모리 페이지를 통해 저장 디바이스의 메모리 페이지에 액세스하기 위해 페이징 기술을 사용할 수 있다. 다른 시간 인스턴스에서, 메모리 모듈의 메모리의 동일한 가상 페이지는 저장 디바이스 또는 컴퓨터 시스템의 다른 저장 디바이스의 메모리의 상이한 물리적 페이지에 액세스하기 위해 프록시로 사용될 수 있다.
컴퓨터 시스템에는 가상 기계를 생성하거나 프로비저닝하기 위한 하이퍼바이저(또는 가상 기계 모니터)가 포함될 수 있다. 가상 기계는 컴퓨터 시스템에서 이용 가능한 자원과 서비스를 사용하여 가상으로 구현되는 컴퓨팅 디바이스이다. 하이퍼바이저는 가상 기계의 컴포넌트가 전용 물리적 컴포넌트인 것처럼 운영 체제에 가상 기계를 제공한다. 게스트 운영 체제는 컴퓨터 시스템에서 실행되는 호스트 운영 체제와 유사한 방식으로 가상 기계에서 이용 가능한 자원 및 서비스를 관리하기 위해 가상 기계에서 실행된다. 하이퍼바이저는 다수의 가상 기계가 컴퓨터 시스템의 자원을 공유할 수 있게 하고 가상 기계가 컴퓨터에서 서로 실질적으로 독립적으로 동작할 수 있게 한다.
실시예는 같은 참조 번호가 유사한 요소를 나타내는 첨부 도면의 도면에서 제한이 아니라 예시의 방식으로 예시된다.
도 1은 일부 실시예에 따른 메모리 서브시스템을 갖는 예시적인 컴퓨터 시스템을 예시한다.
도 2는 일부 실시예에 따른 메모리 버스를 사용하여 메모리 모듈의 상이한 유형의 메모리에 액세스하는 모바일 디바이스를 도시한다.
도 3은 일부 실시예에 따른 메모리 서브시스템의 메모리 디바이스에 액세스하는 데 사용되는 메타데이터를 저장하는 예시적인 컴퓨터 시스템을 예시한다.
도 4는 일부 실시예에 따른 메모리 모듈의 휘발성 및 비휘발성 메모리에 대한 호스트 컴퓨터 시스템에 의한 메모리 버스 액세스를 위해 구성된 메모리 모듈을 도시한다.
도 5는 적어도 일부 실시예에 따른, 메모리 버스 액세스를 사용하여 메모리 모듈에 액세스하는 호스트 운영 체제를 도시한다.
도 6은 일부 실시예에 따른 컴퓨터 시스템의 메모리 디바이스에 대한 물리적 어드레스와 어드레스 공간의 프로세스에 대한 가상 어드레스 범위를 연관시키는 저장된 메타데이터에 기초하여 컴퓨터 시스템의 어드레스 공간에서 프로세스에 대한 메모리를 관리하는 방법을 도시한다.
도 7은 본 개시의 실시예가 동작할 수 있는 예시적인 컴퓨터 시스템의 블록도이다.
도 8은 일부 실시예에 따른 메모리 버스 상의 메모리 디바이스에 액세스하기 위해 하나 이상의 페이지 테이블을 사용하는 예시적인 컴퓨터 시스템을 예시한다.
도 9는 일부 실시예에 따른 페이지 테이블 엔트리를 갖는 예시적인 페이지 테이블을 예시한다.
도 10은 일부 실시예에 따른, 가상 페이지의 가상 어드레스를 상이한 메모리 유형의 메모리 디바이스의 물리적 어드레스에 맵핑하기 위해 페이지 테이블 엔트리를 생성하기 위한 방법을 도시한다.
도 11은 일부 실시예에 따른 컴퓨터 시스템의 물리적 메모리에 대해 상이한 메모리 유형에 네임스페이스를 맵핑하기 위해 네임스페이스 테이블을 사용하는 예시적인 컴퓨터 시스템을 예시한다.
도 12는 일부 실시예에 따른 컴퓨터 시스템에 대한 상이한 유형의 메모리에 네임스페이스를 맵핑하는 레코드를 갖는 예시적인 네임스페이스 테이블을 예시한다.
도 13은 일부 실시예에 따른, 상이한 메모리 유형의 물리적 메모리를 갖는 메모리 시스템의 네임스페이스에 데이터를 바인딩하기 위한 방법을 도시한다.
도 1은 일부 실시예에 따른 메모리 서브시스템을 갖는 예시적인 컴퓨터 시스템을 예시한다.
도 2는 일부 실시예에 따른 메모리 버스를 사용하여 메모리 모듈의 상이한 유형의 메모리에 액세스하는 모바일 디바이스를 도시한다.
도 3은 일부 실시예에 따른 메모리 서브시스템의 메모리 디바이스에 액세스하는 데 사용되는 메타데이터를 저장하는 예시적인 컴퓨터 시스템을 예시한다.
도 4는 일부 실시예에 따른 메모리 모듈의 휘발성 및 비휘발성 메모리에 대한 호스트 컴퓨터 시스템에 의한 메모리 버스 액세스를 위해 구성된 메모리 모듈을 도시한다.
도 5는 적어도 일부 실시예에 따른, 메모리 버스 액세스를 사용하여 메모리 모듈에 액세스하는 호스트 운영 체제를 도시한다.
도 6은 일부 실시예에 따른 컴퓨터 시스템의 메모리 디바이스에 대한 물리적 어드레스와 어드레스 공간의 프로세스에 대한 가상 어드레스 범위를 연관시키는 저장된 메타데이터에 기초하여 컴퓨터 시스템의 어드레스 공간에서 프로세스에 대한 메모리를 관리하는 방법을 도시한다.
도 7은 본 개시의 실시예가 동작할 수 있는 예시적인 컴퓨터 시스템의 블록도이다.
도 8은 일부 실시예에 따른 메모리 버스 상의 메모리 디바이스에 액세스하기 위해 하나 이상의 페이지 테이블을 사용하는 예시적인 컴퓨터 시스템을 예시한다.
도 9는 일부 실시예에 따른 페이지 테이블 엔트리를 갖는 예시적인 페이지 테이블을 예시한다.
도 10은 일부 실시예에 따른, 가상 페이지의 가상 어드레스를 상이한 메모리 유형의 메모리 디바이스의 물리적 어드레스에 맵핑하기 위해 페이지 테이블 엔트리를 생성하기 위한 방법을 도시한다.
도 11은 일부 실시예에 따른 컴퓨터 시스템의 물리적 메모리에 대해 상이한 메모리 유형에 네임스페이스를 맵핑하기 위해 네임스페이스 테이블을 사용하는 예시적인 컴퓨터 시스템을 예시한다.
도 12는 일부 실시예에 따른 컴퓨터 시스템에 대한 상이한 유형의 메모리에 네임스페이스를 맵핑하는 레코드를 갖는 예시적인 네임스페이스 테이블을 예시한다.
도 13은 일부 실시예에 따른, 상이한 메모리 유형의 물리적 메모리를 갖는 메모리 시스템의 네임스페이스에 데이터를 바인딩하기 위한 방법을 도시한다.
본 출원의 적어도 일부 실시예는 데이터가 저장되는 메모리 시스템의 메모리 디바이스를 식별하기 위해 저장된 메타데이터에 액세스하는 것에 관한 것이다. 본 출원에 설명된 바와 같은 다양한 실시예에서, 메타데이터는 다양한 유형의 컴퓨터 시스템에 의해 저장 및 액세스될 수 있다. 일 예에서, 컴퓨터 시스템은 SoC 디바이스에서 실행되는 하나 이상의 프로세스에 의한 메모리 사용을 관리하기 위한 메타데이터를 저장하는 SoC(system-on-chip) 디바이스이다. 일 예에서, 모바일 디바이스는 모바일 디바이스에서 실행 중인 하나 이상의 애플리케이션에 대한 메인 메모리 할당을 관리하기 위해 SoC 디바이스를 사용한다.
다른 실시예는 가상 페이지의 가상 어드레스를 상이한 메모리 유형의 메모리 디바이스의 물리적 어드레스에 맵핑하는 페이지 테이블 엔트리에 관한 것이다. 이러한 실시예는 "메모리 유형에 대한 페이지 테이블 후크"라는 명칭의 아래 섹션에서 설명된다.
또 다른 실시예는 상이한 메모리 유형의 물리적 메모리를 갖는 메모리 시스템의 네임스페이스에 데이터를 바인딩하는 것에 관한 것이다. 이러한 실시예는 "네임스페이스에 대한 데이터 바인딩"이라는 명칭의 아래 섹션에 설명되어 있다.
종래의 컴퓨터 시스템은 종종 데이터를 저장하기 위해 상이한 유형의 메모리 디바이스를 사용한다. 전형적으로, 사용되는 메모리 디바이스의 한 유형은 DRAM이고, 이는 일반적으로, 고속 판독 및 기록 액세스를 제공하는 것으로 고려된다. DRAM은 일반적으로 컴퓨터 시스템의 메인 메모리에 데이터를 저장하는 데 사용된다.
플래시 메모리와 같은 다른 메모리 디바이스는 전형적으로 DRAM보다 느린 것으로 고려된다. 예를 들어, DRAM의 판독 또는 기록 액세스 레이턴시는 전형적으로 플래시 메모리의 판독 또는 기록 액세스 레이턴시보다 훨씬 더 적다. 특정 예로서, 일부 메모리 디바이스에 대한 기록 액세스 레이턴시는 DRAM 디바이스보다 수십 배 또는 심지어 수백 배 더 클 수 있다.
메인 메모리에 데이터를 저장하기 위해 상이한 유형의 물리적 메모리 디바이스를 사용하는 종래의 컴퓨터 시스템에서는 프로세서가 다양한 프로세스에 대한 메모리가 메모리 디바이스에 실제로 맵핑되는 방식을 인식하지 못하는 기술적 문제가 존재한다. 예를 들어, 프로세서는 가상 어드레스 범위를 프로세스에 할당할 수 있다. 그러나, 프로세서는 가상 어드레스 범위가 상이한 메모리 디바이스에 어떻게 맵핑되는지 알지 못한다.
일 예에서, 프로세스에 대한 가상 어드레스 범위가 다른 메모리 디바이스(예를 들어, DRAM)보다 훨씬 느린 물리적 메모리 디바이스(예를 들어, 플래시 메모리)에 맵핑되는 경우, 이때, 프로세스를 계속 실행하는 데 필요한 메인 메모리로부터의 데이터에 빠르게 액세스할 수 없음으로 인해 프로세스가 느리게 실행될 수 밖에 없다. 예를 들어, 프로세스는 데이터 계산 또는 기타 처리를 계속하기 위해 메인 메모리로부터의 응답(예를 들어, 프로세스가 실행되는 동안 필요한 데이터를 획득하기 위해 프로세서에 의해 이루어진 메인 메모리에 대한 판독 액세스 요청에 대한 데이터를 포함하는 응답)을 필요로 할 수 있다. 메인 메모리 디바이스에서 필요한 데이터가 실제로 느린 물리적 메모리 디바이스에 저장되어 있다면, 이때, 응답 대기 동안 처리가 상당히 지연된다.
본 개시의 다양한 실시예는 앞서 설명한 기술적 문제 중 하나 이상에 대한 기술적 해결책을 제공한다. 일부 실시예에서, 컴퓨터 시스템은 컴퓨터 시스템에 의해 사용되는 메모리 디바이스(예를 들어, 메인 메모리를 제공하는 데 사용되는 메모리 디바이스)의 레이턴시에 관한 데이터를 저장한다. 일 예에서, 컴퓨터 시스템의 프로세서에 가시적인 다양한 메모리 구역의 레이턴시는 알려져 있다(예를 들어, 아래에서 설명되는 바와 같이 저장된 메타데이터에서 수집 및/또는 집성된 정보로 표현됨).
일부 실시예에서, 프로세서, 운영 체제 및/또는 애플리케이션(소프트웨어 설계자에 의해 프로그래밍됨)은 느린 메모리 액세스로 인한 상당한 프로세스 지연을 피하기 위해 컴퓨터 시스템에 의한 작용을 개시 및/또는 수행할 수 있다. 예를 들어, 빠른 메모리 응답이 필요한 우선순위가 높은 프로세스는 DRAM에서 실행하도록 구성될 수 있다.
다른 예에서, 모바일 디바이스 상에서 실행되는 애플리케이션에 대한 우선순위가 모니터링될 수 있다. 애플리케이션의 우선순위가 증가하면(예를 들어, 낮음에서 높음으로 변경), 이때, 프로세서 및/또는 운영 체제는 느린 메모리 디바이스에 대응하는 메인 메모리의 어드레스 범위 밖으로 애플리케이션을 자동으로 전달하고, 애플리케이션을 빠른 메모리 디바이스에 대응하는 새로운 어드레스 범위로 이동시킬 수 있다.
일 예에서, 메모리 디바이스 유형은 DRAM, NVRAM 및 NAND 플래시를 포함한다. 프로세스의 우선순위는 프로세서에 의해(예를 들어, 프로세스의 사용 패턴에 기초하여) 결정된다. 이러한 메모리 디바이스 유형에 대한 어드레스 범위 맵핑에 관한 저장된 메타데이터를 기초로, 프로세서는 적절한 메모리 레이턴시를 갖는 어드레스 범위에 프로세스를 할당한다. 예를 들어, 프로세서는 프로세스가 낮음, 중간 또는 높음 우선순위 중 어떤 것을 갖는지를 결정할 수 있다. 프로세스가 중간 우선순위를 갖는다는 결정에 기초하여, 프로세스와 연관된 소프트웨어 및/또는 데이터는 중간 레이턴시를 갖는 NVRAM 메모리 디바이스 유형의 물리적 저장소에 대응하는 어드레스 범위에 저장된다.
일 예에서, NVRAM 디바이스 유형은 3D XPoint 메모리이다. 일 예에서, NVRAM 디바이스 유형은 저항성 랜덤 액세스 메모리, 자기저항 RAM, 상변화 RAM, 및/또는 강유전성 RAM일 수 있다. 일 예에서, NVRAM 칩은 컴퓨터 시스템(예를 들어, NVDIMM-P)의 메인 메모리로 사용된다. 일 예에서, NVRAM 디바이스는 DIMM 패키지의 비휘발성 3D XPoint 메모리를 사용하여 구현된다.
다른 예에서, 프로세서 및/또는 운영 체제가 우선순위 변경에 응답하여 애플리케이션을 다른 어드레스 범위로 자동으로 전달하도록 구성되지 않은 경우, 애플리케이션 자체의 소프트웨어 코드는 저장된 메타데이터에서 하나 이상의 값을 판독하도록 구성할 수 있다. 판독한 값을 기초로, 애플리케이션 자체가 데이터가 더 빠른 메모리 디바이스에 대응하는 어드레스 범위에 우선적으로 저장되도록 데이터 저장소를 관리할 수 있다. 일 예에서, 애플리케이션은 판독 또는 달리 제공된 저장된 메타데이터에 대한 액세스에 기초하여 컴퓨터 시스템에서 이용 가능한 메모리 디바이스의 상대적 레이턴시를 결정할 수 있다. 일 예에서, 저장된 메타데이터는 상이한 레이턴시를 갖는 다양한 상이한 메모리 디바이스 중 어떤 메모리 디바이스에 어떤 데이터가 있는지 지정한다. 이러한 방식으로, 메모리 디바이스를 지정함으로써 애플리케이션은 데이터를 저장하는 데 사용되는 메모리 디바이스에 따라 특정 데이터에 대한 액세스 레이턴시를 결정할 수 있다.
일 예에서, 모바일 디바이스 상의 애플리케이션은 (예를 들어, 시스템 온 칩 디바이스 상에서 실행되는) 운영 체제에 의한 메인 메모리 할당을 요청할 때 저장된 메타데이터를 판독한다. 일 예에서, 애플리케이션은 특정 유형의 메모리 디바이스 및/또는 메모리 판독 또는 기록 액세스와 연관된 특정 레이턴시에 대응하는 메인 메모리의 어드레스 범위를 요청한다.
일 예에서 애플리케이션은 저장된 메타데이터를 판독하거나 달리 액세스하여 어느 메모리가 빠르고 어느 메모리가 느린지를 결정한다. 모바일 디바이스의 제1 컨텍스트(context)에서, 애플리케이션은 빠른 메모리의 할당을 요청한다. 모바일 디바이스의 제2 컨텍스트에서, 애플리케이션은 느린 메모리의 할당을 요청한다. 일 예에서, 미리 결정된 컨텍스트의 검출에 응답하여, 애플리케이션은 메모리 할당의 변경에 대한 요청을 개시하거나 수행한다. 일 예에서, 애플리케이션은 (예를 들어, 프로세서에 의해) 저장된 메타데이터 및/또는 컴퓨터 시스템의 프로세서에 의해 애플리케이션에 제공되는 데이터(예를 들어, 모바일 디바이스의 동작 특성)에 대해 이루어지는 업데이트된 쿼리에 기초하여 컨텍스트의 변경을 결정한다.
하나의 실시예에서, 컴퓨터 시스템은 제1 메모리 디바이스(예를 들어, DRAM) 및 제2 메모리 디바이스(예를 들어, NVRAM 또는 NAND 플래시), 및 하나 이상의 처리 디바이스(예를 들어, CPU 또는 시스템 온 칩(SoC))를 포함한다. 컴퓨터 시스템은 명령어를 함유하는 메모리를 더 포함하고, 명령어는 하나 이상의 처리 디바이스에 운영 체제에 의해 유지되는 어드레스 공간의 메모리에 액세스하고- 액세스는 어드레스 공간의 어드레스를 사용하여 제1 메모리 디바이스 및 제2 메모리 디바이스에 액세스하는 것을 포함함 -; 어드레스 공간의 제1 어드레스 범위를 제1 메모리 디바이스와 연관시키고, 어드레스 공간의 제2 어드레스 범위를 제2 메모리 디바이스와 연관시키는 메타데이터를 저장하고; 및 저장된 메타데이터에 기초하여 운영 체제에 의해 제1 프로세스 및 제2 프로세스를 포함하는 프로세스를 관리하도록- 제1 프로세스에 대한 데이터는 제1 메모리 디바이스에 저장되고, 제2 프로세스에 대한 데이터는 제2 메모리 디바이스에 저장됨 - 지시하도록 구성된다.
하나의 실시예에서, 컴퓨터 시스템은 DRAM, NVRAM 및 NAND 플래시를 포함하는 메모리 디바이스 유형을 사용한다. 일 예에서, DRAM은 NVRAM보다 더 빠르고, NVRAM은 NAND 플래시보다 더 빠르다. 컴퓨터 시스템은 가상 메모리 어드레스를 사용하여 컴퓨터 시스템의 프로세서에서 모든 세 가지 다른 유형의 메모리가 직접 액세스될 수 있도록 구성된다. 일 예에서, 프로세서는 가상 대 물리적 어드레스 맵핑 시스템을 구현하기 위해 메모리 관리 유닛과 통신한다.
하나의 실시예에서, 애플리케이션은 상이한 유형의 메모리 디바이스에 기초한 메모리 할당의 최적화를 관리하거나 취급하도록 사전 프로그래밍 또는 달리 구성되지 않는다. 예를 들어, 이는 레거시 소프트웨어 프로그램에서 발생할 수 있다. 이러한 유형의 상황에서, 애플리케이션에 대한 메모리 할당 최적화를 관리하도록 운영 체제를 구성할 수 있다.
일 예에서, 운영 체제는 애플리케이션의 하나 이상의 특성을 검출하거나 달리 결정한다. 특성에 기초하여, 운영 체제는 저장된 메타데이터를 사용하여 메인 메모리의 하나 이상의 어드레스 범위를 애플리케이션에 할당한다. 일 예에서, 특성은 (예를 들어, 애플리케이션이 모바일 디바이스 상에서 런칭될 때) 애플리케이션 자체에 의해 제공되는 정보에 기초하여 결정된다. 다른 예에서, 특성은 애플리케이션이 실행되고 있는 컴퓨터 시스템 이외의 컴퓨팅 디바이스에 의해 제공된다. 일 예에서, 중앙 저장소는 데이터베이스 또는 애플리케이션의 특성 테이블을 저장하고 업데이트하는 데 사용된다. 일 예에서, 중앙 서버는 사용할 물리적 메모리의 유형에 관한 표시를 운영 체제에 제공한다.
하나의 실시예에서, 운영 체제는 컴퓨터 시스템 및/또는 애플리케이션의 실행과 연관된 컨텍스트를 결정한다. 이 컨텍스트를 기초로 운영 체제는 저장된 메타데이터를 사용하여 메인 메모리의 하나 이상의 어드레스 범위를 애플리케이션에 할당한다.
하나의 실시예에서, 저장된 메타데이터는 데이터가 저장된 디바이스를 식별하기 위해 사용된다. 메모리 서브시스템은 메모리 어드레스 공간에서 프로세서(예를 들어, SoC)에 의해 어드레스될 수 있는 다수의 물리적 메모리 디바이스(예를 들어, DRAM, NVRAM 및 NAND 플래시)를 가지고 있다. 메타데이터는 어떤 메모리 어드레스 구역이 어떤 물리적 메모리 디바이스에 맵핑되는지 지정하는 데 사용된다. 메타데이터는 어떤 데이터가 어떤 디바이스에 있는지를 결정하기 위해 DRAM 및/또는 프로세서에 로딩(예를 들어, 프로세서의 캐시에 로딩)될 수 있고, 및/또는 각각의 데이터에 대한 액세스의 레이턴시를 추정하는 데 사용될 수 있다.
하나의 실시예에서, 애플리케이션은 메인 메모리를 사용하는 프로세서를 갖는 모바일 디바이스 상에서 실행된다. 애플리케이션은 모바일 디바이스의 운영 체제에 애플리케이션이 사용할 메인 메모리의 일부를 할당하도록 요청한다. 할당된 메모리는 논리적/가상 메모리 공간에 있다(예를 들어, 프로그래머와 프로세서의 실행 유닛이 보는 메모리 어드레스는 가상적이다). 하나의 실시예에서, 가상 메모리 어드레스는 페이지 테이블에 의해 실제/물리적 메모리에 맵핑된다. 페이지 테이블에 있는 맵핑 데이터의 일부는 프로세서의 버퍼에 캐싱된다. 일 예에서, 버퍼는 TLB(translation lookaside buffer)이다.
하나의 실시예에서, 컴퓨터 시스템은 DRAM, NVRAM, 및 NAND 플래시 메모리 디바이스를 포함한다. 컴퓨터 시스템의 프로세서는 어드레스별로 메인 메모리에 무작위로 액세스한다. 메인 메모리 내의 어드레스는 이러한 세 가지 유형의 메모리 디바이스 상의 데이터 저장소의 물리적 위치에 대응한다. 일 예에서, 각각의 디바이스는 동기 메모리 버스를 사용하여 프로세서에 의해 액세스된다. 일 예에서, DRAM은 CPU와 메모리 제어기 허브 사이에서 데이터를 전달하는 시스템 버스와 동기화된 인터페이스를 갖는 동기식 동적 랜덤 액세스 메모리(SDRAM)이다.
도 1은 일부 실시예에 따른 메모리 서브시스템(110)을 갖는 예시적인 컴퓨팅 환경(100)을 예시한다. 메모리 서브시스템(110)은 메모리 컴포넌트(109A 내지 109N)와 같은 매체를 포함할 수 있다. 메모리 컴포넌트(109A 내지 109N)는 휘발성 메모리 컴포넌트, 비휘발성 메모리 컴포넌트, 또는 그 조합일 수 있다. 일부 실시예에서, 메모리 서브시스템(110)은 메모리 모듈이다. 메모리 모듈의 예로는 DIMM 및 NVDIMM을 포함한다. 일부 실시예에서, 메모리 서브시스템(110)은 하이브리드 메모리/저장소 서브시스템이다. 일반적으로, 컴퓨팅 환경(100)은 메모리 서브시스템(110)을 사용하는 컴퓨터 시스템(120)을 포함할 수 있다. 예를 들어, 컴퓨터 시스템(120)은 메모리 서브시스템(110)에 데이터를 기록하고 메모리 서브시스템(110)으로부터 데이터를 판독할 수 있다.
컴퓨터 시스템(120)은 컴퓨팅 디바이스, 예컨대, 모바일 디바이스, IoT 디바이스, 데스크탑 컴퓨터, 랩톱 컴퓨터, 네트워크 서버, 또는 메모리 및 처리 디바이스를 포함하는 이러한 컴퓨팅 디바이스일 수 있다. 컴퓨터 시스템(120)은 컴퓨터 시스템(120)이 메모리 서브시스템(110)으로부터 데이터를 판독하거나 메모리 서브시스템에 데이터를 기록할 수 있도록 메모리 서브시스템(110)을 포함하거나 이에 결합될 수 있다. 컴퓨터 시스템(120)은 물리적 호스트 인터페이스를 통해 메모리 서브시스템(110)에 결합될 수 있다. 본 출원에 사용될 때, "결합된(coupled to)"은 일반적으로 전기적, 광학적, 자기적, 전기적, 광학적, 자기적, 등 같은 연결을 비롯하여 유선이든 무선이든 간접 통신 연결 또는 직접 통신 연결(예를 들어, 개입 컴포넌트가 없음)일 수 있는, 컴포넌트들 사이의 연결을 일반적으로 지칭한다. 물리적 호스트 인터페이스의 예는 SATA(serial advanced technology attachment) 인터페이스, PCIe(peripheral component interconnect express) 인터페이스, USB(universal serial bus) 인터페이스, 파이버 채널, SAS(Serial Attached SCSI), DDR(double data rate) 메모리 버스 등을 포함하지만 이에 제한되지 않는다. 물리적 호스트 인터페이스는 컴퓨터 시스템(120)과 메모리 서브시스템(110) 사이에서 데이터를 송신하는 데 사용될 수 있다. 컴퓨터 시스템(120)은 메모리 서브시스템(110)이 PCIe 인터페이스에 의해 컴퓨터 시스템(120)과 결합될 때 메모리 컴포넌트(109A 내지 109N)에 액세스하기 위해 NVMe(NVM Express) 인터페이스를 추가로 이용할 수 있다. 물리적 호스트 인터페이스는 메모리 서브시스템(110)과 컴퓨터 시스템(120) 사이에 제어, 어드레스, 데이터 및 기타 신호를 전달하기 위한 인터페이스를 제공할 수 있다.
도 1은 예로서 메모리 서브시스템(110)을 예시한다. 일반적으로, 컴퓨터 시스템(120)은 공유 통신 연결, 다중 개별 통신 연결, 및/또는 통신 연결의 조합을 통해 다중 메모리 서브시스템에 액세스할 수 있다. 일 예에서, 각각의 메모리 서브시스템(110)은 메모리 버스를 통해 처리 디바이스(118)에 의해 무작위로 액세스되는 상이한 유형의 메모리 디바이스일 수 있다.
컴퓨터 시스템(120)은 처리 디바이스(118) 및 제어기(116)를 포함한다. 처리 디바이스(118)는 예를 들어 마이크로프로세서, 중앙 처리 유닛(CPU), 프로세서의 처리 코어, 실행 유닛 등일 수 있다. 일부 경우에, 제어기(116)는 메모리 제어기, 메모리 관리 유닛 및/또는 개시자로서 지칭될 수 있다. 일 예에서, 제어기(116)는 컴퓨터 시스템(120)과 하나 이상의 메모리 서브시스템(110) 사이에 결합된 버스를 통한 통신을 제어한다.
일반적으로, 제어기(116)는 메모리 컴포넌트(109A 내지 109N)에 대한 원하는 액세스를 위해 메모리 서브시스템(110)에 명령 또는 요청을 전송할 수 있다. 제어기(116)는 메모리 서브시스템(110)과 통신하기 위한 인터페이스 회로부를 더 포함할 수 있다. 인터페이스 회로부는 메모리 서브시스템(110)으로부터 수신된 응답을 컴퓨터 시스템(120)에 대한 정보로 변환할 수 있다.
컴퓨터 시스템(120)의 제어기(116)는 메모리 서브시스템(110)의 제어기(115)와 통신하여 메모리 컴포넌트(109A 내지 109N)에서 데이터 판독, 데이터 기록 또는 데이터 소거와 같은 동작 및 기타 이러한 동작을 수행할 수 있다. 일부 경우에, 제어기(116)는 처리 디바이스(118)의 동일한 패키지 내에 통합된다. 다른 경우에, 제어기(116)는 처리 디바이스(118)의 패키지와 별개이다. 제어기(116) 및/또는 처리 디바이스(118)는 하나 이상의 집적 회로 및/또는 이산 컴포넌트, 버퍼 메모리, 캐시 메모리, 또는 그 조합과 같은 하드웨어를 포함할 수 있다. 제어기(116) 및/또는 처리 디바이스(118)는 마이크로제어기, 특수 목적 로직 회로부(예를 들어, FPGA(field programmable gate array), ASIC(application specific integrated circuit) 등), 또는 다른 적절한 프로세서일 수 있다.
메모리 컴포넌트(109A 내지 109N)는 다양한 상이한 유형의 비휘발성 메모리 컴포넌트 및/또는 휘발성 메모리 컴포넌트의 임의의 조합을 포함할 수 있다. 비휘발성 메모리 컴포넌트의 예는 네거티브-AND(NAND) 유형 플래시 메모리를 포함한다. 일 예에서, 각각의 메모리 컴포넌트(109A 내지 109N)는 단일 레벨 셀(SLC) 또는 멀티 레벨 셀(MLC)(예를 들어, 트리플 레벨 셀(TLC) 또는 쿼드 레벨 셀(QLC))과 같은 하나 이상의 메모리 셀 어레이를 포함할 수 있다. 일부 실시예에서, 특정 메모리 컴포넌트는 메모리 셀의 SLC 부분 및 MLC 부분 모두를 포함할 수 있다. 각각의 메모리 셀은 컴퓨터 시스템(120)에 의해 사용되는 하나 이상의 데이터 비트(예를 들어, 데이터 블록)를 저장할 수 있다.
NAND 유형 플래시 메모리와 같은 비휘발성 메모리 컴포넌트가 하나의 예이지만, 메모리 컴포넌트(109A 내지 109N)는 휘발성 메모리와 같은 임의의 다른 유형의 메모리에 기초할 수 있다. 일부 실시예에서, 메모리 컴포넌트(109A 내지 109N)는 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 동적 랜덤 액세스 메모리(DRAM), 동기식 동적 랜덤 액세스 메모리(SDRAM), 상변화 메모리(PCM), 자기 랜덤 액세스 메모리(MRAM), 스핀 전달 토크(STT)-MRAM, 강유전체 트랜지스터 랜덤 액세스 메모리(FeTRAM), 강유전성 RAM(FeRAM), 전도성 브리지 RAM(CBRAM), 저항성 랜덤 액세스 메모리(RRAM), 산화물 기반 RRAM(OxRAM), 네거티브-or(NOR) 플래시 메모리, 전기적 소거 가능 프로그램 가능 판독 전용 메모리(EEPROM), 나노와이어 기반 비휘발성 메모리, 멤리스터 기술이 통합된 메모리 및 비휘발성 메모리 셀의 3D XPoint 어레이일 수 있지만 이에 제한되지 않는다. 비휘발성 메모리의 크로스 포인트 어레이는 스택형 크로스-그리드 데이터 액세스 어레이(stackable cross-gridded data access array)와 함께 벌크 저항의 변화에 기초하여 비트 저장을 수행할 수 있다. 추가적으로, 많은 플래시 기반 메모리와 달리 크로스-포인트 비휘발성 메모리는 기록 인플레이스 (in-place) 동작을 수행할 수 있고, 여기서, 비휘발성 메모리 셀은 비휘발성 메모리 셀이 사전에 소거되지 않고 프로그래밍될 수 있다. 더욱이, 메모리 컴포넌트(109A 내지 109N)의 메모리 셀은, 데이터를 저장하는 데 사용되는 메모리 컴포넌트의 단위를 의미할 수 있는, 메모리 페이지 또는 데이터 블록으로서 그룹화될 수 있다.
메모리 서브시스템(110)의 제어기(115)는 메모리 컴포넌트(109A 내지 109N)와 통신하여 (예를 들어, 제어기(116)에 의해 명령 버스에서 스케줄링된 명령에 응답하여) 메모리 컴포넌트(109A 내지 109N)에서 데이터 판독, 데이터 기록, 또는 데이터 소거와 같은 동작 및 기타 이러한 동작을 수행할 수 있다. 제어기(115)는 하나 이상의 집적 회로 및/또는 이산 컴포넌트, 버퍼 메모리, 또는 그 조합과 같은 하드웨어를 포함할 수 있다. 제어기(115)는 마이크로제어기, 특수 목적 로직 회로부(예를 들어, FPGA(field programmable gate array), ASIC(application specific integrated circuit) 등), 또는 다른 적절한 프로세서일 수 있다. 제어기(115)는 로컬 메모리(119)에 저장된 명령어를 실행하도록 구성된 처리 디바이스(117)(프로세서)를 포함할 수 있다. 예시된 예에서, 제어기(115)의 로컬 메모리(119)는 메모리 서브시스템(110)과 컴퓨터 시스템(120) 사이의 통신 처리를 비롯하여 메모리 서브시스템(110)의 동작을 제어하는 다양한 프로세스, 동작, 로직 플로우 및 루틴을 수행하기 위한 명령어를 저장하도록 구성된 임베디드 메모리를 포함한다. 일부 실시예에서, 로컬 메모리(119)는 메모리 포인터, 인출된 데이터 등을 저장하는 메모리 레지스터를 포함할 수 있다. 로컬 메모리(119)는 또한 마이크로코드를 저장하기 위한 판독 전용 메모리(ROM)를 포함할 수 있다. 도 1의 예시적인 메모리 서브시스템(110)이 제어기(115)를 포함하는 것으로 예시되었지만, 본 개시내용의 다른 실시예에서, 메모리 서브시스템(110)은 제어기(115)를 포함하지 않을 수 있고, 대신에 외부 제어(예를 들어, 외부 호스트 또는 메모리 서브시스템과 분리된 프로세서 또는 제어기에 의해 제공됨)에 의존할 수 있다.
일반적으로, 제어기(115)는 컴퓨터 시스템(120)으로부터 명령 또는 동작을 수신할 수 있고, 명령 또는 동작을 명령어 또는 적절한 명령로 변환하여 메모리 컴포넌트(109A 내지 109N)에 대한 원하는 액세스를 달성할 수 있다. 제어기(115)는 메모리 컴포넌트(109A 내지 109N)와 연관된 마모 평준화(wear leveling) 동작, 가비지 컬렉션 동작, 오류 검출 및 오류 정정 코드(ECC) 동작, 암호화 동작, 캐싱 동작, 논리적 블록 어드레스와 물리적 블록 어드레스 사이의 어드레스 변환과 같은 다른 동작을 담당할 수 있다. 제어기(115)는 물리적 호스트 인터페이스를 통해 컴퓨터 시스템(120)과 통신하기 위한 호스트 인터페이스 회로부를 더 포함할 수 있다. 호스트 인터페이스 회로부는 컴퓨터 시스템으로부터 수신된 명령를 명령 명령어로 변환하여 메모리 컴포넌트(109A 내지 109N)에 액세스할 수 있을 뿐만 아니라 메모리 컴포넌트(109A 내지 109N)와 연관된 응답을 컴퓨터 시스템(120)에 대한 정보로 변환할 수 있다.
메모리 서브시스템(110)은 또한 예시되지 않은 추가 회로부 또는 컴포넌트를 포함할 수 있다. 일부 실시예에서, 메모리 서브시스템(110)은 제어기(115)로부터 어드레스를 수신하고 메모리 컴포넌트(109A 내지 109N)에 액세스하기 위해 어드레스를 디코딩할 수 있는 캐시 또는 버퍼(121)(예를 들어, DRAM 또는 SRAM) 및 어드레스 회로부(예를 들어, 행 디코더 및 열 디코더)를 포함할 수 있다.
컴퓨팅 환경(100)은 (예를 들어, 위의 다양한 실시예에서 설명된 바와 같이) 데이터가 저장된 메모리 디바이스를 식별하는 데 사용되는 메타데이터를 저장하는 컴퓨터 시스템(120)의 메타데이터 컴포넌트(113)를 포함한다. 메타데이터 컴포넌트(113)의 일부는 컴퓨터 시스템(120) 및/또는 메모리 서브시스템(110)에 상주할 수 있다. 일 예에서, 메타데이터의 일부는 로컬 메모리(119) 및/또는 버퍼(121)에 저장된다. 일 예에서, 메타데이터의 일부는 대안적으로 및/또는 추가적으로 제어기(116)의 캐시에 저장된다(예를 들어, 변환 색인 버퍼(translation lookaside buffer)에 저장됨).
일 예에서, 메모리 서브시스템(110)은 DDR 또는 다른 유형의 동기 메모리 버스를 통해 상이한 유형의 메모리 디바이스에 있는 데이터에 대한 컴퓨터 시스템(120)에 대한 액세스를 제공할 수 있다. 하나의 실시예에서, DIMM 상의 NVRAM의 데이터 및 DRAM의 데이터에 대한 액세스가 제공된다. 일 예에서, 데이터는 DDR 메모리 버스를 통해 구성된 호스트 판독/기록 요청 동안 액세스를 위해 컴퓨터 시스템(120)의 랜덤 액세스 메모리 어드레스 공간에서 액세스 가능해진다.
일 예에서, 컴퓨터 시스템(120)은 제어기(115)에 (페이지에 대한 액세스를 위한) 페이지-인(page-in) 요청을 전송한다. 페이지-인 요청을 수신한 것에 응답하여, 제어기(115)는 비휘발성 메모리 디바이스와 같은 느린 매체로부터 휘발성 메모리 디바이스(예를 들어, 메모리 서브시스템(110) 상의 DRAM)로 페이지를 이동시킨다.
일 예에서, 컴퓨터 시스템(120)은 페이지-아웃(page-out) 요청을 제어기(115)에 전송한다. 페이지-아웃 요청을 수신한 것에 응답하여, 제어기(115)는 버퍼(121)를 통해 휘발성 메모리(예를 들어, 메모리 서브시스템(110) 상의 DRAM)에서 데이터를 비휘발성 메모리로 이동시킨다.
일부 실시예에서, 컴퓨터 시스템(120)의 제어기(116) 및/또는 처리 디바이스(118)는 메타데이터 컴포넌트(113)의 적어도 일부를 포함한다. 예를 들어, 제어기(116) 및/또는 처리 디바이스(118)는 메타데이터 컴포넌트(113)를 구현하는 로직 회로부를 포함할 수 있다. 예를 들어, 컴퓨터 시스템(120)의 처리 디바이스(118)(프로세서)는 본 출원에 설명된 바와 같이 메타데이터 컴포넌트(113)에 대한 디바이스 데이터가 저장되어 있는 디바이스를 식별하는 동작을 수행하기 위해 메모리에 저장된 명령어를 실행하도록 구성될 수 있다. 일부 실시예에서, 메타데이터 컴포넌트(113)는 컴퓨터 시스템(120)의 운영 체제, 디바이스 드라이버, 또는 애플리케이션(예를 들어, 컴퓨터 시스템(120)에서 실행되는 애플리케이션)의 일부이다.
일부 실시예에서, 메모리 서브시스템(110)의 제어기(115) 및/또는 처리 디바이스(117)는 메타데이터 컴포넌트(113)의 적어도 일부를 포함한다. 예를 들어, 제어기(115) 및/또는 처리 디바이스(117)는 메타데이터 컴포넌트(113)를 구현하는 로직 회로부를 포함할 수 있다.
일 예에서, 중앙 처리 유닛(CPU)은 CPU에 연결된 메모리 시스템의 메모리에 액세스할 수 있다. 예를 들어, 중앙 처리 유닛(CPU)은 메타데이터 컴포넌트(113)의 저장된 메타데이터에 대한 쿼리에 기초하여 메모리에 액세스하도록 구성될 수 있다.
도 2는 일부 실시예에 따른 메모리 버스(203)를 사용하여 메모리 모듈(205)의 상이한 유형의 메모리에 액세스하는 모바일 디바이스(200)를 도시한다. 도 2는 상이한 유형의 메모리를 갖는 컴퓨터 시스템을 도시한다. 도 2의 컴퓨터 시스템은 모바일 디바이스(200), 및 메모리 버스(203)를 통해 모바일 디바이스(200)에 연결된 메모리 모듈(205)을 포함한다. 메모리 모듈(205)은 도 1에 예시된 메모리 서브시스템(110)의 일 예이다.
모바일 디바이스(200)는 처리 디바이스(118)를 포함하고, 이는 중앙 처리 유닛 또는 하나 이상의 처리 코어를 갖는 마이크로프로세서일 수 있다. 모바일 디바이스(200)는 캐시 메모리(211)를 가질 수 있다. 캐시 메모리(211)의 적어도 일부는 처리 디바이스(118)의 동일한 집적 회로 패키지 내에 선택적으로 통합될 수 있다.
도 2에 예시된 메모리 모듈(205)은 다수의 유형의 메모리(예를 들어, 221 및 223)를 포함한다. 예를 들어, 유형 A의 메모리(221)(예를 들어, DRAM)는 유형 B의 메모리(223)(예를 들어, NVRAM)보다 더 빠르다. 예를 들어, 메모리 버스(203)는 더블 데이터 레이트 버스일 수 있다. 일반적으로, 여러 메모리 모듈(예를 들어, 205)이 메모리 버스(203)에 결합될 수 있다.
처리 디바이스(118)는 메타데이터 컴포넌트(113)를 사용하여 컴퓨터 시스템의 메모리의 일부에 액세스하기 위해 명령어(예를 들어, 운영 체제 및/또는 하나 이상의 디바이스 드라이버)를 통해 구성된다. 예를 들어, 메모리 모듈(205)의 유형 B(예를 들어, NVRAM)의 메모리(223)가 액세스될 수 있거나 메모리 모듈(205)의 유형 A의 메모리(221)(예를 들어, DRAM)가 액세스될 수 있다. 하나의 실시예에서, 메모리 모듈(205)의 유형 B의 메모리(223)는 메모리 모듈(205)의 유형 A의 메모리(221)를 어드레싱하는 것을 통해서만 액세스 가능하다.
제어기(227)는 유형 A의 메모리(221) 및 유형 B의 메모리(223)에 대한 데이터 액세스를 관리하기 위해 메모리 모듈(205)에 제공될 수 있다. 하나의 실시예에서, 제어기(227)는 버퍼(121)로 또는 버퍼로부터 데이터를 전달할 때 모바일 디바이스(200) 및 메모리 모듈(205)에 의한 DRAM 또는 NVRAM에 대한 액세스를 다중화한다. 일 예에서, 메모리 버스(203)는 모바일 디바이스(200)와 메모리 모듈(205) 사이의 DDR 인터페이스로서 호스트 DDR 채널을 제공한다. 일 예에서, 페이지가 NVRAM 메모리에서 버퍼(121)로 검색되면, 페이지는 통상적인 DDR4 슬롯(예를 들어, 호스트 DDR 채널)을 통해 모바일 디바이스에 의한 액세스를 위해 로딩될 수 있다.
일반적으로, 메모리 서브시스템(예를 들어, 205)은 메모리(예를 들어, 221, …, 223)와 같은 매체를 포함할 수 있다. 메모리(예를 들어, 221, …, 223)는 휘발성 메모리, 비휘발성 메모리(NVM), 및/또는 그 조합을 포함할 수 있다. 처리 디바이스(118)는 메모리 서브시스템(예를 들어, 메모리 모듈(205)) 각각에 데이터를 기록하고 메모리 서브시스템(예를 들어, 메모리 모듈(205))으로부터 데이터를 직접 또는 간접적으로 판독할 수 있다.
하나의 실시예에서, 메모리 모듈(205)은 버퍼(121)를 사용하여 비휘발성 메모리 또는 휘발성 메모리에 대한 메모리 버스 액세스를 제공한다. 일 예에서, 메모리 모듈(205)은 DDR 버스를 통해 모바일 디바이스(200)에 결합된 DIMM이다. 저장 매체는 예를 들어 크로스 포인트 메모리(cross point memory)이다.
하나의 실시예에서, 모바일 디바이스는(예를 들어, DDR4 버스를 사용하여) 판독/기록 동작을 위한 통신 채널을 통해 메모리 모듈과 통신한다. 모바일 디바이스는 메모리 모듈과 같은 컴퓨터 주변 디바이스가 컴퓨터 버스(예를 들어, SATA(Serial AT Attachment), 주변 디바이스 컴포넌트 인터커넥트(PCI), PCI 확장(PCI-X), PCI 익스프레스(PCIe))와 같은 인터커넥트, 통신 부분 및/또는 컴퓨터 네트워크를 통해 연결될 수 있는 하나 이상의 중앙 처리 유닛(CPU)을 가질 수 있다.
하나의 실시예에서, 메모리 모듈은 프로세서에 대한 데이터를 비휘발성 또는 휘발성 저장 매체에 저장하는 데 사용될 수 있다. 메모리 모듈은 통신 채널을 사용하여 모바일 디바이스와의 통신을 구현하는 호스트 인터페이스를 갖는다. 하나의 실시예에서, 메모리 모듈(205)은 처리 디바이스(118)로부터의 통신에 응답하여 동작을 수행하기 위해 예를 들어 펌웨어를 실행하는 제어기(227)를 갖는다. 일 예에서, 메모리 모듈은 휘발성 DRAM(Dynamic Random-Access Memory) 및 NVRAM을 포함한다. DRAM 및 NVRAM은 메모리 어드레스 공간에서 처리 디바이스(118)에 의해 액세스 가능한 데이터를 저장한다.
예시된 바와 같이, 도 2의 컴퓨터 시스템이 모바일 디바이스를 구현하는 데 사용된다. 처리 디바이스(118)는 메모리 서브시스템(예를 들어, 205)으로부터 데이터를 판독하거나 메모리 서브시스템에 데이터를 기록할 수 있다.
물리적 호스트 인터페이스는 처리 디바이스(118)와 메모리 서브시스템(예를 들어, 205) 사이에서 데이터를 송신하는 데 사용될 수 있다. 물리적 호스트 인터페이스는 메모리 서브시스템(예를 들어, 205)과 처리 디바이스(118) 사이에 제어, 어드레스, 데이터, 및 기타 신호를 전달하기 위한 인터페이스를 제공할 수 있다.
일반적으로, 메모리 서브시스템(예를 들어, 메모리 모듈(205))은 메모리(예를 들어, 221, …, 223)를 제공하는 메모리 집적 회로와 같은 메모리 디바이스의 세트를 연결하는 인쇄 회로 보드를 포함한다. 메모리 서브시스템(예를 들어, 205) 상의 메모리(예를 들어, 221, …, 223)는 상이한 유형의 비휘발성 메모리 디바이스 및/또는 휘발성 메모리 디바이스의 임의의 조합을 포함할 수 있다.
일부 구현에서, 메모리(예를 들어, 221, …, 223)는 RAM(random access memory), ROM(read-only memory), DRAM(dynamic random access memory), SRAM(static random access memory), SDRAM(synchronous dynamic random access memory), PCM(phase change memory), MRAM(magneto random access memory), NOR(negative-or) flash memory, EEPROM(electrically erasable programmable read-only memory) 및/또는 비휘발성 메모리 셀의 크로스 포인트 어레이를 포함할 수 있지만 이에 제한되지 않는다.
메모리 서브시스템(예를 들어, 메모리 모듈(205))은 메모리(예를 들어, 221, …, 223)와 통신하여 메모리(예를 들어, 221, …, 223)에서 데이터 판독, 데이터 기록 또는 데이터 소거 같은 동작 및 기타 이러한 동작을 처리 디바이스(118)로부터의 요청, 명령 또는 명령어에 응답하여 수행하는 제어기(예를 들어, 227)를 가질 수 있다. 제어기(예를 들어, 227)는 하나 이상의 집적 회로 및/또는 이산 컴포넌트, 버퍼 메모리, 또는 그 조합과 같은 하드웨어를 포함할 수 있다. 제어기(예를 들어, 227)는 마이크로제어기, 특수 목적 로직 회로부(예를 들어, FPGA(field programmable gate array), ASIC(application specific integrated circuit) 등), 또는 다른 적절한 프로세서일 수 있다. 제어기(예를 들어, 227)는 로컬 메모리에 저장된 명령어를 실행하도록 구성된 하나 이상의 프로세서(처리 디바이스)를 포함할 수 있다.
제어기(예를 들어, 227)의 로컬 메모리는 메모리 서브시스템(예를 들어, 205)과 처리 디바이스(118) 사이의 통신 및 아래에서 더 구체적으로 설명되는 다른 기능들을 취급하는 것을 비롯하여 메모리 서브시스템(예를 들어, 205)의 동작을 제어하는 다양한 프로세스, 동작, 로직 플로우 및 루틴을 수행하기 위한 명령어를 저장하도록 구성된 임베디드 메모리를 포함할 수 있다. 제어기의 로컬 메모리(예를 들어, 227)는 마이크로코드를 저장하기 위한 판독 전용 메모리(ROM) 및/또는 예를 들어 메모리 포인터, 인출된 데이터 등을 저장하는 메모리 레지스터를 포함할 수 있다.
도 2의 예시적인 메모리 서브시스템(205)이 제어기(227)를 포함하는 것으로 예시되었지만, 본 개시내용의 다른 실시예에서, 메모리 서브시스템(예를 들어, 205)은 제어기(예를 들어, 227)를 포함하지 않을 수 있고, 대신에 외부 제어(예를 들어, 외부 호스트 또는 메모리 서브시스템(예를 들어, 205)과 분리된 프로세서 또는 제어기에 의해 제공됨)에 의존할 수 있다.
일반적으로, 제어기(예를 들어, 227)는 통신 채널(예를 들어, 203)에 대한 표준 통신 프로토콜에 따라 처리 디바이스(118)로부터 명령, 요청 또는 명령어를 수신할 수 있고, 메모리(예를 들어, 221, …, 223)에 대한 원하는 액세스를 달성하기 위해 명령, 요청 또는 명령어를 표준 프로토콜에 따라 메모리 서브시스템(예를 들어, 205) 내의 상세 명령어 또는 적절한 명령로 변환할 수 있다. 예를 들어, 제어기(예를 들어, 227)는 메모리(예를 들어, 221, …, 223)와 연관된 논리적 어드레스와 물리적 어드레스 사이의 어드레스 변환과 같은 동작을 담당할 수 있다. 제어기(예를 들어, 227)는 물리적 호스트 인터페이스를 통해 처리 디바이스(118)와 통신하기 위한 호스트 인터페이스 회로부를 더 포함할 수 있다. 호스트 인터페이스 회로부는 처리 디바이스(118)로부터 수신된 명령를 메모리 디바이스(예를 들어, 221, …, 223)에 액세스하기 위한 명령 명령어로 변환할 수 있을 뿐만 아니라 메모리 디바이스(예를 들어, 221, …, 223)와 연관된 응답을 처리 디바이스(118)에 대한 정보로 변환할 수 있다.
메모리 서브시스템(예를 들어, 205)은 또한 예시되지 않은 추가 회로부 또는 컴포넌트를 포함할 수 있다. 일부 구현에서, 메모리 서브시스템(예를 들어, 205)은 캐시 또는 버퍼(예를 들어, DRAM) 및 어드레스 회로부(예를 들어, 행 디코더 및 열 디코더)를 포함할 수 있고, 어드레스 회로는 제어기(예를 들어, 227)로부터의 어드레스를 수신하고, 이 어드레스를 디코딩하여 메모리(예를 들어, 221, …, 223)에 액세스할 수 있다.
일 예에서, 메모리 버스(203)는 메모리 서브시스템(예를 들어, 205)에 전력을 제공하고/하거나 미리 결정된 프로토콜을 통해 메모리 서브시스템(예를 들어, 205)과 통신하기 위한 하나 이상의 커넥터를 갖고; 메모리 서브시스템(예를 들어, 205)은 처리 디바이스(118)로부터 전력, 데이터 및 명령를 수신하기 위한 하나 이상의 커넥터를 갖는다. 일 예에서, 처리 디바이스(118)는 컴퓨터 시스템의 메모리의 일부(예를 들어, NVRAM에 저장된 페이지)가 동기식 메모리 액세스를 사용하여 액세스되는 메모리 액세스를 포함하는 서비스를 제공하기 위해 하나 이상의 운영 체제를 실행할 수 있다.
도 3은 일부 실시예에 따른 메모리 서브시스템(302)의 메모리 디바이스에 액세스하는 데 사용되는 메타데이터(320)를 저장하는 예시적인 컴퓨터 시스템(300)을 예시한다. 메모리 서브시스템(302)에서 액세스되는 메모리 디바이스는 DRAM(304), NVRAM(306), 및 NAND 플래시(308)를 포함한다. 하나의 실시예에서, 컴퓨터 시스템(300)은 대안적으로 및/또는 추가적으로 메모리 디바이스에 액세스하기 위해 사용되는 DRAM(304)에 메타데이터(322)를 저장한다.
하나의 실시예에서, 컴퓨터 시스템(300)의 처리 디바이스(310)는 어드레스 공간의 메모리에 액세스한다. 일 예에서, 메모리는 하나 이상의 애플리케이션을 실행할 때 처리 디바이스(310)에 의해 사용되는 메인 메모리이다. 처리 디바이스(310)는 어드레스 공간의 어드레스를 사용하여 상이한 메모리 디바이스에 액세스한다.
하나의 실시예에서, 메타데이터(320, 322)는 어드레스 공간의 제1 어드레스 범위를 메모리 디바이스(예를 들어, DRAM(304))와 연관시키고 어드레스 공간의 제2 어드레스 범위를 상이한 메모리 디바이스(예를 들어, NVRAM(306) 또는 NAND 플래시(308))와 연관시킨다. 일 예에서, DRAM(304)의 레이턴시는 NVRAM(306) 및 NAND 플래시(308)의 레이턴시보다 더 작다.
처리 디바이스(310) 상에서 실행되는 애플리케이션은 애플리케이션(312)을 포함하고, 이는 메모리 유형(314)을 포함하도록 구성된다. 애플리케이션(312)이 초기에 런칭될 때, 애플리케이션(312)은 컴퓨터 시스템(300)의 메인 메모리에서의 메모리 할당에 대한 요청과 함께 메모리 유형(314)을 처리 디바이스(310)에 제공한다.
메모리 할당에 대한 요청에 응답하여, 처리 디바이스(310)는 메타데이터(320)에 대한 쿼리를 생성하고/하거나 메타데이터(322)에 쿼리를 전송한다. 이들 쿼리 중 하나 또는 양자 모두로부터의 결과에 기초하여, 처리 디바이스(310)는 어드레스 공간의 어드레스 범위를 애플리케이션(312)에 할당한다.
하나의 실시예에서, 애플리케이션(312)은 메모리 디바이스와 연관된 레이턴시의 표시를 위해 처리 디바이스(310)에 요청을 수행한다. 처리 디바이스(310)는 메타데이터(320, 322)에 액세스하여 결과를 획득하고, 이 결과에 기초하여 애플리케이션(312)에 레이턴시의 표시를 제공한다. 레이턴시 표시를 수신한 것에 응답하여, 애플리케이션(312)은 메모리 디바이스, 메모리 유형(314)에 대응하는 메모리 디바이스, 또는 적어도 하나 또는 그 이상의 미리 결정된 임계값 및/또는 요건을 충족하는 성능 특성을 갖는 메모리의 할당에 대한 요청 중 특정 하나에 대응하는 메모리 할당을 요청한다.
하나의 실시예에서, 메타데이터(322)는 가상 어드레스 공간의 어드레스 범위를 메모리 서브시스템(302)의 메모리 디바이스의 물리적 어드레스와 연관시키는 데이터를 저장한다. 일 예에서, 메타데이터(322)는 NVRAM에 대한 어드레스 범위(324) 및 NAND 플래시에 대한 어드레스 범위(326)를 저장한다. 일 예에서, 어드레스 범위(324)는 처리 디바이스(310)의 가상 또는 논리적 어드레스를 NVRAM(306)의 물리적 어드레스에 맵핑한다. 일 예에서, 어드레스 범위(326)는 처리 디바이스(310)의 가상 또는 논리적 어드레스를 NAND 플래시(308)의 물리적 어드레스에 맵핑한다. 하나의 실시예에서, 메타데이터(320 또는 322)는 DRAM(304)에 저장된 데이터에 대한 처리 디바이스(310)의 어드레스를 맵핑하는 하나 이상의 어드레스 범위를 저장한다.
하나의 실시예에서, 메타데이터(322)는 컴퓨터 시스템(300)의 메모리 관리 유닛(316)에 대한 물리적 어드레스에 대한 가상 어드레스의 맵핑을 제공하는 페이지 테이블(328)의 일부로서 저장된다. 처리 디바이스(310)는 메모리 관리 유닛(316)에 가상 어드레스를 제공하고, 이는 변환 색인 버퍼(318)에 액세스하여 메모리 서브시스템(302)의 메모리 디바이스 중 하나의 물리적 어드레스를 획득한다.
하나의 실시예에서, 변환 색인 버퍼(318)는 페이지 테이블(328)로부터의 데이터의 일부를 저장하는 캐시이다. 일 예에서, 버퍼(318)는 메타데이터(322)의 일부를 저장한다. 하나의 실시예에서, 컴퓨터 시스템(300)에 저장된 메타데이터(320)의 일부는 메모리 서브시스템(302)의 메모리 디바이스에 액세스할 때 메모리 관리 유닛(316)에 의한 액세스를 위해 변환 색인 버퍼(318)에 복사된다.
하나의 실시예에서, 처리 디바이스(310)는 애플리케이션(312)에 상이한 메모리 디바이스의 메모리 특성을 제공한다. 애플리케이션(312)은 제공된 메모리 특성에 기초하여 메모리 할당에 대한 요청을 수행한다.
하나의 실시예에서, 처리 디바이스(310)는 애플리케이션(312)으로부터 요청된 레이턴시를 수신한다. 요청된 레이턴시를 기초로 애플리케이션(312)에 어드레스 범위가 할당된다.
하나의 실시예에서, 처리 디바이스(310)는 애플리케이션(312)과 연관된 우선순위를 결정한다. 애플리케이션(312)에 할당된 어드레스 범위는 결정된 우선순위를 기초로 한다. 일 예에서, 결정된 우선순위와 함께 사용하기 위해 더 빠른 메모리 디바이스 유형이 선택된다. 처리 디바이스(310)는 선택된 더 빠른 메모리 디바이스 유형의 메모리 디바이스에 데이터를 물리적으로 저장하는 어드레스 범위를 선택하기 위해 메타데이터(320, 322)를 사용한다.
하나의 실시예에서, 처리 디바이스(310)는 애플리케이션(312)의 우선순위의 변경을 결정한다. 일 예에서, 애플리케이션(312)의 우선순위 증가에 기초하여, 처리 디바이스(310)는 어드레스 공간에서 애플리케이션(312)에 사용되는 메모리 할당을 변경한다. 일 예에서, 우선순위의 증가에 응답하여, 처리 디바이스(310)는 더 빠른 물리적 메모리 디바이스에 대응하는 어드레스 범위를 결정하기 위해 메타데이터(320, 322)에 액세스한다.
하나의 실시예에서, 처리 디바이스(310)는 어드레스 공간에서 애플리케이션(312)에 의한 데이터 액세스와 연관된 관찰 특성에 기초하여 애플리케이션(312)의 우선순위를 결정한다. 관찰된 특성은 애플리케이션(312)에 대한 메모리 사용을 할당하는 데 사용될 수 있다. 하나의 실시예에서, 처리 디바이스(310)는 물리적 메모리 디바이스와 연관된 하나 이상의 레이턴시를 결정한다. 메타데이터(320, 322)는 결정된 하나 이상의 레이턴시에 관한 데이터를 저장하며, 이는 메인 메모리의 할당을 초기에 할당 및/또는 변경할 때 처리 디바이스(310)에 의해 사용될 수 있다.
도 4는 일부 실시예에 따른 휘발성 메모리(402) 및 비휘발성 메모리(404)에 대한 호스트 컴퓨터 시스템(도시되지 않음)에 의한 메모리 버스 액세스를 위해 구성된 메모리 모듈(401)을 도시한다. 메모리 모듈(401)은 메모리 서브시스템(302) 또는 메모리 모듈(205)의 예이다. 일 예에서, 메모리 모듈(401)은 하이브리드 DIMM이다. 휘발성 메모리(402)는 예를 들어 DRAM이다.
메모리 모듈(401)은 메모리 제어기(416)에 의해 휘발성 메모리(402) 및 비휘발성 메모리(404)에 대한 액세스를 제공하기 위해 멀티플렉서(408)를 사용한다. 메모리 제어기(416)는 호스트 시스템에 의한 판독/기록 액세스를 취급하기 위해 호스트 인터페이스(406)에 결합된다. 하나의 실시예에서, 멀티플렉서(408)는 호스트 인터페이스(406)를 통해 호스트 시스템으로부터 판독 또는 기록 명령를 수신한 것에 응답하여 메모리 제어기(416)로부터 수신된 신호에 기초하여 제어된다.
일 예에서, 호스트 시스템은 메모리 모듈(401)(예를 들어, DIMM) 상의 메모리 공간(예를 들어, DRAM 메모리 어드레스 공간)에 액세스한다. DIMM은 그 자체를 DRAM의 채널로서 호스트에 노출시킨다. 하나의 실시예에서, 호스트 시스템의 하이퍼바이저는 DIMM 상의 데이터 이동을 제어한다. 예를 들어, DRAM 어드레스 공간 안팎으로 메모리 블록을 이동하고 호스트에서 실행되는 소프트웨어에 DRAM 페이지를 노출하라는 요청이 이루어진다. 예를 들어, 소프트웨어는 가상 기계(VM)에서 실행된다.
일 예에서, 현재 DRAM 또는 NVRAM에 있는 페이지를 요청하도록 드라이버를 위해 페이지-인/아웃 제어 경로가 제공된다. 일 예에서, NVRAM은 DRAM보다 훨씬 더 큰 용량을 가지고 있다.
일 예에서, 메모리 모듈(401)은 DIMM으로서 구현된다. 비휘발성 메모리(404)는 3D XPoint 메모리 패키지에 의해 제공된다. 일 예에서, 3D XPoint 메모리에서 획득한 데이터 페이지가 버퍼 안팎으로 복사된다(페이지-인/페이지-아웃).
일 예에서 호스트 시스템은 정상적인 DDR4 타이밍을 사용하여 임의의 DRAM 또는 NVRAM 어드레스에 대한 판독/기록 액세스 권한을 갖는다. 예를 들어, 호스트는 이들 시간 동안 DDR4 규칙에 따라 임의적인 트래픽을 생성할 수 있다.
일 예에서, 비휘발성 메모리(404)의 전체 DDR 어드레스 공간은 호스트 시스템에 노출된다. 다양한 실시예에 따르면, 컴퓨터 시스템(120)의 제어기(예를 들어, 제어기(116))는 통상적인 DRAM에 액세스하기 위한 것과 동일한 방식(예를 들어, 동일한 판독/기록 및 리프레시 타이밍 사이클)으로 동작할 수 있다.
도 5는 적어도 일부 실시예에 따른, 메모리 버스를 사용하여 메모리 모듈(502)에 액세스하는 호스트 운영 체제(241)를 도시한다. 메모리 모듈(502)은 버퍼(410)를 포함한다. 버퍼(410)는 버퍼(121)의 예이다. 일 예에서, 버퍼(410)는 메타데이터(322) 및/또는 페이지 테이블(328)의 적어도 일부를 저장한다. 명령 및 데이터는 호스트 인터페이스(406)를 통해 호스트 운영 체제(241)로부터 수신된다. 일 예에서, 호스트 운영 체제(241)는 컴퓨터 시스템(120 또는 300)에서 실행된다.
하나의 실시예에서, 디바이스 드라이버(247)(예를 들어, 백엔드 드라이버)는 하이퍼바이저(245)를 통한 메모리 액세스를 위해 구성된다. 일 예에서, 도 5의 시스템은 도 1 내지 도 3의 컴퓨터 시스템에서 구현된다.
일 예에서, 호스트 운영 체제(241)는 도 1 또는 도 2의 컴퓨터 시스템의 처리 디바이스(118) 또는 도 3의 처리 디바이스(310)에서 실행된다. 호스트 운영 체제(241)는 메모리 모듈(205) 또는 메모리 서브시스템(302)과 같은 메모리 서브시스템의 메모리(예를 들어, 221, …, 223)를 사용하여 메모리 서비스를 제공하는 하나 이상의 디바이스 드라이버(예를 들어, 247)를 포함한다.
하나의 실시예에서, 백엔드 드라이버(247)는 맵핑 테이블(246)을 유지한다. 예를 들어, 드라이버(247)는 DRAM(304), NVRAM(306) 및 NAND 플래시(308)에 저장된 데이터 페이지에 대한 맵핑을 포함하도록 맵핑 테이블(246)을 유지한다.
하나의 실시예에서, 호스트 운영 체제(241)는 가상 기계(249)를 프로비저닝하는 하이퍼바이저(245)를 포함한다. 가상 기계(249)는 도 1 내지 도 3의 컴퓨팅 시스템의 하드웨어를 사용하여 호스트 운영 체제(241)에 의해 제공되는 자원 및 서비스를 통해 구현되는 가상 하드웨어를 갖는다. 예를 들어, 하이퍼바이저(245)는 메모리 모듈(205)과 같은 메모리 서브시스템의 메모리(예를 들어, 221, …, 223)의 일부를 사용하여 가상 기계(249)의 일부로서 가상 메모리를 프로비저닝할 수 있다.
가상 기계(249)는 게스트 운영 체제(243)가 가상 기계에서 프로비저닝하는 것과 동일하거나 유사한 하드웨어 세트를 갖는 물리적 컴퓨팅 기계에서 실행되는 운영 체제(243)와 같은 방식으로 게스트 운영 체제(243)에서 실행되는 애플리케이션(예를 들어, 251, …, 253)에 자원 및/또는 서비스를 제공할 수 있게 한다. 하이퍼바이저(245)는 가상 기계에 프로비저닝된 가상 하드웨어와 호스트 운영 체제(241)에 의해 관리되는 컴퓨팅 시스템의 하드웨어 서비스 사이의 맵핑을 관리한다.
디바이스 드라이버(248)(예를 들어, 프론트엔드 드라이버)는 백엔드 드라이버(247)와 통신한다. 드라이버(247) 및 드라이버(248)는 추가적인 DDR 용량(예를 들어, DRAM 또는 NVRAM의 용량)이 이용 가능한 경우 메모리 벌루닝(memory ballooning)을 위해 통신할 수 있다.
도 5는 가상 기계(249)가 하이퍼바이저(245)에 의해 프로비저닝되는 인스턴스를 예시한다. 일반적으로, 하이퍼바이저(245)는 동일한 게스트 운영 체제(243) 또는 상이한 게스트 운영 체제를 실행할 수 있는 여러 가상 기계(예를 들어, 249)를 프로비저닝할 수 있다. 상이한 가상 기계를 사용하기 위해 상이한 사용자 및/또는 애플리케이션 프로그램의 세트를 할당할 수 있다.
일부 경우에, 호스트 운영 체제(241)는 가상 기계의 프로비저닝을 위한 서비스를 제공하도록 전문화되어 있고 다른 애플리케이션 프로그램을 실행하지 않는다. 대안적으로, 호스트 운영 체제(241)는 애플리케이션(예를 들어, 251, …, 253)과 같은 다른 애플리케이션 프로그램을 지원하기 위해 추가적인 서비스를 제공할 수 있다.
하나의 실시예에서, 디바이스 드라이버(247)는 가상 기계(249)에 의한 사용을 위해 더 느린 메모리(예를 들어, NVRAM)로부터 더 빠른 메모리(예를 들어, DRAM)로 페이지의 페이지-인을 요청하도록 구성될 수 있다. 이 요청은 애플리케이션(예를 들어, 도 3의 애플리케이션(312))으로부터의 요청에 응답하여 이루어질 수 있다. 페이지를 요청한 후, 페이지는 더 느린 메모리로부터 더 빠른 메모리로 데이터의 페이지를 로딩 및/또는 전달함으로써 더 빠른 메모리에서 이용 가능하게 된다. 일 예에서, 처리 디바이스(310)는 메타데이터(320, 322)로서 저장된 어드레스 범위 정보에 기초하여 더 느린 메모리로부터 더 빠른 메모리로 페이지를 이동시킨다. 일 예에서, 더 느린 메모리는 메모리 모듈(401)의 비휘발성 메모리(404)일 수 있고 더 빠른 메모리는 동일한 메모리 모듈(401)의 휘발성 메모리(402)일 수 있다.
하나의 실시예에서, 데이터의 전달(예를 들어, 호스트 운영 체제(241)에 의한 페이지-인 요청에 응답하여 수행됨)은 동일한 메모리 모듈(401) 내와 같은 동일한 메모리 서브시스템 내에서 수행되어 메모리 버스(203)와 같은 처리 디바이스(118)에 연결된 통신 채널의 혼잡을 방지하거나 감소시킨다. 예를 들어, 데이터는 디바이스 드라이버(247)로부터의 하나 이상의 명령, 요청, 및/또는 명령어에 응답하여 메모리 모듈(205)의 제어기(227)의 제어 하에 메모리 모듈(205)의 더 느린 메모리(223)(예를 들어, NVRAM 또는 NAND 플래시)로부터 메모리 모듈(205)의 더 빠른 메모리(221)(예를 들어, DRAM)로 복사될 수 있다.
하나의 실시예에서, 하이퍼바이저(245)는 메모리 서브시스템(예를 들어, 메모리 모듈(205))의 메모리(예를 들어, 221, …, 223)에 액세스할 것을 디바이스 드라이버(247)에 요청할 뿐만 아니라 또한 사용될 메모리(예를 들어, 221, …, 223, …, 또는 225)의 페이지를 관리하는 데 사용될 수 있는 정보를 디바이스 드라이버(247)에 제공한다. 일 예에서, 제공된 정보는 저장된 메타데이터(320 또는 322)를 포함한다.
일 예에서, 드라이버(247)는 메모리 모듈(502)(예를 들어, DIMM)의 메모리 어드레스 공간에 액세스하기 위해 사용되는 메모리 모드 드라이버이다. 드라이버(247)는 어느 페이지들이 어느 때든 한번에 DIMM의 휘발성 메모리에 있게 되는지를 제어한다. 한 가지 접근법에서, 예를 들어, 메모리 어드레스 공간은 게스트 운영 체제(243)에 노출된다. 이 하이퍼바이저 환경에서, 게스트 운영 체제(243)는 DIMM에서 비휘발성 메모리(예를 들어, NVRAM 및 DRAM)의 전체 저장 용량을 보게 된다.
일 예에서, DDR DRAM에 있는 다수의 페이지만이 호스트 운영 체제(241)를 통해 능동적으로 페이지-인 된다. 존재하지 않는 페이지에 대한 게스트 액세스가 있는 경우, 호스트 시스템의 메모리 관리 유닛(MMU)의 페이지 폴트 경로(page fault path)가 드라이버(247)를 트리거하여 페이지의 로딩(페이지-인)을 유발한다. 일 예에서, 페이지는 제어 레지스터를 통해 로딩된다. 페이지가 DDR DRAM에 실제로 존재하면, 이때, 드라이버(247)는 게스트 애플리케이션이 해당 데이터를 직접 판독하고 기록할 수 있도록 (맵핑 테이블(246)을 통해) MMU 맵핑을 설정할 수 있다.
일 예에서, 게스트의 프론트엔드 드라이버와 호스트의 백엔드 드라이버는 메모리 어드레스 공간에 대한 액세스와 관하여 통신한다. 일 예에서, 페이지가 활용도가 떨어진다고 결정할 때(예를 들어, 미리 결정된 임계값에 기초하여 자주 사용되지 않음), DDR 메모리 어드레스 공간에 현재 맵핑된 데이터의 일부를 NVRAM 메모리로 (예를 들어, SRAM 버퍼를 통해) 푸시백하도록 요청하여 다른 페이지가 페이지-인되도록 DRAM 메모리의 이용 가능한 공간을 형성한다. 백엔드 드라이버(247)는 DDR DRAM로부터 NVRAM 메모리로 데이터를 이동시키기 위해 페이지-아웃 요청을 통신한다.
하나의 실시예에서, 백엔드 드라이버(247)는 메모리 모드 드라이버로서 동작한다. 드라이버(247)가 로딩될 때까지, 메모리 모듈(502)의 NVRAM 메모리 용량에 대한 어떠한 액세스도 존재하지 않는다. 메모리 모드 드라이버로서의 이 동작 동안, 게스트 운영 체제(243)는 메모리를 정상으로 보고, 드라이버(247)는 페이지-인 및 페이지-아웃 동작을 위해 메모리 모듈에 DRAM 페이지를 예약한다.
드라이버(247)는 NVRAM 메모리를 게스트 운영 체제(243)에 노출하고, (예를 들어, 맵핑 테이블(246)에서) 페이지 맵핑을 유지한다. 예를 들어, 드라이버(247)는 현재 DRAM에 있는 페이지와 NVRAM 메모리에 있는 페이지 사이의 맵핑을 유지한다.
일 예에서, 드라이버(247)는 호스트 시스템에서 메모리 관리 유닛 맵핑 테이블을 설정하여 현재 DRAM에 저장된 임의의 페이지를 맵핑한다. 페이지-인 요청을 트리거하기 위해 맵핑된 페이지 외부에 대한 액세스가 존재하는 경우, 게스트의 페이지 폴트 경로를 사용할 수 있다. 페이지-아웃 요청은 DRAM의 일부 메모리 공간을 유지하기 위해 수행될 수 있다.
하나의 실시예에서, 동작은 메모리 모드로 제한되지 않는다. 드라이버(247)는 NVRAM 메모리가 블록 모드 저장소로서 노출되는 블록 모드 드라이버로도 동작할 수 있다.
하나의 실시예에서, 메모리 모듈(502)은 SRAM 버퍼(도시되지 않음)에 있는 페이지의 목록을 포함하는 그 자신의 맵핑 테이블을 유지한다. 메모리 모듈(502)은 페이지-인 완료를 반환할 수 있다. 이들은 호스트 시스템이 특정 페이지에 액세스하는 레이턴시의 감소를 허용한다. 드라이버(247)는 맵핑이 설정될 때까지 페이지-인 요청이 완료될 때까지 호스트가 해당 페이지(들)에 액세스하지 않는 것을 보장한다.
하나의 실시예에서, 드라이버(247)는 페이지-아웃 동작을 구현한다. 일 예에서 이 동작은 스레드로서 트리거된다. 이 동작은 DRAM 메모리의 외부로 프리(free) 페이지를 다시 트레이드하고 유효한 페이지의 맵핑을 변경한다.
도 6은 일부 실시예에 따른 컴퓨터 시스템의 메모리 디바이스에 대한 물리적 어드레스와 어드레스 공간의 프로세스에 대한 가상 어드레스 범위를 연관시키는 저장된 메타데이터에 기초하여 컴퓨터 시스템의 어드레스 공간에서 프로세스에 대한 메모리를 관리하는 방법을 도시한다. 예를 들어, 도 6의 방법은 도 1 내지 도 3의 시스템에서 구현될 수 있다.
도 6의 방법은 하드웨어(예를 들어, 처리 디바이스, 회로부, 전용 로직, 프로그램 가능 로직, 마이크로코드, 디바이스의 하드웨어, 집적 회로 등), 소프트웨어(예를 들어, 처리 디바이스 상에서 실시되거나 실행되는 명령어) 또는 그 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 일부 실시예에서, 도 6의 방법은 하나 이상의 처리 디바이스(예를 들어, 도 3의 처리 디바이스(310))에 의해 적어도 부분적으로 수행된다.
특정한 시퀀스나 순서로 도시되어 있지만 달리 명시되지 않는 한, 프로세스의 순서는 수정될 수 있다. 따라서, 예시된 실시예는 예시로서만 이해하여야 하며, 예시된 프로세스는 상이한 순서로 수행될 수 있고, 일부 프로세스는 병렬로 수행될 수 있다. 추가적으로, 다양한 실시예에서 하나 이상의 프로세스가 생략될 수 있다. 따라서, 모든 실시예에서 모든 프로세스가 필요한 것은 아니다. 다른 프로세스 흐름이 가능하다.
블록 601에서, 운영 체제는 어드레스 공간에서 메모리를 유지한다. 메모리는 어드레스 공간의 어드레스를 사용하여 제1 메모리 디바이스 및 제2 메모리 디바이스에 액세스하는 것을 포함하여 액세스된다. 일 예에서, 운영 체제는 도 3의 처리 디바이스(310)에서 실행된다. 일 예에서, 제1 메모리 디바이스는 DRAM(304)이고, 제2 메모리 디바이스는 NVRAM(306)이다. 일 예에서, 제1 메모리 디바이스는 NVRAM(306)이고, 제2 메모리 디바이스는 NAND 플래시(308)이다.
블록 603에서, 어드레스 공간의 제1 어드레스 범위를 제1 메모리 디바이스와 연관시키는 메타데이터가 저장된다. 메타데이터는 또한 어드레스 공간의 제2 어드레스 범위를 제2 메모리 디바이스와 연관시킨다. 일 예에서, 저장된 메타데이터는 도 3의 메타데이터(320 및/또는 322)이다. 일 예에서, 제1 어드레스 범위는 어드레스 범위 324이고, 제2 어드레스 범위는 어드레스 범위 326이다.
블록 605에서, 컴퓨터 시스템에서 실행되는 프로세스는 저장된 메타데이터에 기초하여 관리된다. 프로세스는 제1 프로세스 및 제2 프로세스를 포함한다. 제1 프로세스에 대한 데이터는 제1 메모리 디바이스에 저장되고, 제2 프로세스에 대한 데이터는 제2 메모리 디바이스에 저장된다. 일 예에서, 제1 프로세스에 대한 데이터는 어드레스 범위 324에 저장되고, 제2 프로세스에 대한 데이터는 어드레스 범위 326에 저장된다. 일 예에서, 제1 프로세스에 대한 데이터는 DRAM(304)의 물리적 메모리 저장소에 대응하는 메타데이터(320, 322)의 어드레스 범위에 저장된다. 일 예에서, 컴퓨터 시스템은 컴퓨터 시스템(120 또는 300)이다.
하나의 실시예에서, 방법은 컴퓨터 시스템의 처리 디바이스(예를 들어, 도 3의 처리 디바이스(310))에 의해 어드레스 공간의 메모리에 액세스하는 단계- 컴퓨터 시스템의 메모리 디바이스는 어드레스 공간의 어드레스를 사용하여 처리 디바이스에 의해 액세스됨 -; 어드레스 공간의 제1 어드레스 범위를 제1 메모리 디바이스(예를 들어, DRAM(304))와 연관시키고 어드레스 공간의 제2 어드레스 범위를 제2 메모리 디바이스(예를 들어, NVRAM 306)와 연관시키는 메타데이터(예를 들어, 메타데이터(320 및/또는 322))를 저장하는 단계- 제1 메모리 디바이스의 제1 레이턴시는 제2 메모리 디바이스의 제2 레이턴시와 상이함 -; 및 저장된 메타데이터에 기초하여, 컴퓨터 시스템 상에서 실행되는 애플리케이션(예를 들어, 애플리케이션(312))에 제1 어드레스 범위를 할당하는 단계를 포함한다.
하나의 실시예에서, 애플리케이션에 제1 어드레스 범위를 할당하는 단계는 애플리케이션에 의한 요청에 응답하여 수행된다.
하나의 실시예에서, 방법은 애플리케이션에 의한 제1 요청에 응답하여, 제1 레이턴시가 제2 레이턴시보다 더 크다는 표시를 제공하는 단계; 이 표시에 기초하여 애플리케이션에 의해 이루어진 제2 요청을 수신하는 단계; 및 제2 요청을 수신한 것에 응답하여, 제2 어드레스 범위를 애플리케이션에 할당하는 단계를 더 포함한다.
하나의 실시예에서, 제1 레이턴시는 제2 레이턴시보다 작고, 메타데이터는 제1 메모리 디바이스에 저장된다.
하나의 실시예에서, 컴퓨터 시스템은 메모리 버스를 사용하여 제1 메모리 디바이스 및 제2 메모리 디바이스에 액세스하고, 메타데이터는 제2 메모리 디바이스에 저장된다.
하나의 실시예에서, 메타데이터는 제1 메모리 디바이스에 저장되고, 방법은 메타데이터의 적어도 일부를 버퍼(예를 들어, 변환 색인 버퍼(318))에 로딩하는 단계를 더 포함하고, 처리 디바이스는 버퍼에 쿼리하여 제1 어드레스 범위의 가상 어드레스에 대응하는 물리적 어드레스를 결정한다.
하나의 실시예에서, 컴퓨터 시스템은 시스템 온 칩 디바이스이고, 버퍼는 변환 색인 버퍼이다.
하나의 실시예에서, 방법은 제1 메모리 디바이스 및 제2 메모리 디바이스의 메모리 특성을 애플리케이션에 제공하는 단계를 더 포함하고; 제1 어드레스 범위를 애플리케이션에 할당하는 단계는 제공된 메모리 특성에 기초하여 애플리케이션에 의해 이루어진 요청에 응답한 것이다.
하나의 실시예에서, 방법은 애플리케이션으로부터 요청된 레이턴시를 수신하는 단계를 더 포함하고, 제1 어드레스 범위를 애플리케이션에 할당하는 단계는 요청된 레이턴시에 추가로 기초한다.
하나의 실시예에서, 방법은 애플리케이션과 연관된 우선순위를 결정하는 단계를 더 포함하고, 제1 어드레스 범위를 애플리케이션에 할당하는 단계는 우선순위에 추가로 기초한다.
하나의 실시예에서, 제1 레이턴시는 제2 레이턴시보다 작고; 애플리케이션에 제1 어드레스 범위를 할당하기 전에, 애플리케이션이 제2 어드레스 범위에 할당되고; 제1 어드레스 범위를 애플리케이션에 할당하는 단계는 애플리케이션과 연관된 우선순위의 증가를 결정한 것에 응답하여 수행된다.
하나의 실시예에서, 애플리케이션과 연관된 우선순위의 증가를 결정하는 것은 어드레스 공간에서 애플리케이션에 의한 데이터 액세스에 관한 하나 이상의 관찰에 기초한다.
하나의 실시예에서, 방법은 처리 디바이스에 의해 메모리 디바이스와 연관된 레이턴시를 결정하는 단계를 더 포함하고, 메타데이터를 저장하는 단계는 결정된 레이턴시를 저장하는 단계를 더 포함한다.
하나의 실시예에서, 시스템은 제1 메모리 디바이스; 제2 메모리 디바이스; 적어도 하나의 처리 디바이스; 및 명령어를 함유하는 메모리를 포함하고, 명령어는 적어도 하나의 처리 디바이스에 운영 체제에 의해 유지되는 어드레스 공간의 메모리에 액세스하고- 액세스는 어드레스 공간의 어드레스를 사용하여 제1 메모리 디바이스 및 제2 메모리 디바이스에 액세스하는 것을 포함함 -; 어드레스 공간의 제1 어드레스 범위를 제1 메모리 디바이스와 연관시키고, 어드레스 공간의 제2 어드레스 범위를 제2 메모리 디바이스와 연관시키는 메타데이터를 저장하고; 및 저장된 메타데이터에 기초하여 운영 체제에 의해 제1 프로세스 및 제2 프로세스를 포함하는 프로세스를 관리하도록- 제1 프로세스에 대한 데이터는 제1 메모리 디바이스에 저장되고, 제2 프로세스에 대한 데이터는 제2 메모리 디바이스에 저장됨 - 지시하도록 구성된다.
하나의 실시예에서, 제1 프로세스는 제1 우선순위를 갖고, 제2 프로세스는 제2 우선순위를 갖고, 제1 메모리 디바이스는 제1 우선순위가 제2 우선순위보다 더 높다는 결정에 응답하여 제1 프로세스에 대한 데이터를 저장하도록 선택된다.
하나의 실시예에서, 제1 프로세스는 제1 애플리케이션에 대응하고; 명령어는 데이터를 저장하는 데 사용할 메모리의 유형을 나타내는 요청을 제1 애플리케이션으로부터 수신하도록 적어도 하나의 처리 디바이스에 지시하도록 추가로 구성되며; 제1 메모리 디바이스는 표시된 메모리 유형에 기초하여 제1 프로세스에 대한 데이터를 저장하도록 선택된다.
하나의 실시예에서, 시스템은 메타데이터를 저장하기 위한 버퍼를 더 포함하고, 운영 체제는 제1 프로세스로부터 제1 어드레스 범위의 가상 어드레스를 수신하고, 가상 어드레스에 대응하는 제1 메모리 디바이스의 물리적 어드레스를 결정하기 위해 버퍼에 액세스한다.
하나의 실시예에서, 제1 메모리 디바이스의 판독 레이턴시는 제2 메모리 디바이스의 판독 레이턴시보다 작고, 명령어는 메타데이터를 제1 메모리 디바이스에 저장하도록 적어도 하나의 처리 디바이스에 지시하도록 추가로 구성된다.
하나의 실시예에서, 시스템은 제1 프로세스에 대한 저장된 데이터에 액세스할 때 제1 어드레스 범위의 가상 어드레스를 제1 메모리 디바이스의 물리적 어드레스에 맵핑하도록 구성된 메모리 관리 유닛(예를 들어, 메모리 관리 유닛(316))을 더 포함한다.
하나의 실시예에서, 비일시적 기계 판독 가능 저장 매체는 명렁어를 저장하고, 이 명령어는 적어도 하나의 처리 디바이스 상에서 실행될 때 적어도 하나의 처리 디바이스로 하여금 적어도 어드레스 공간의 메모리에 액세스하고- 컴퓨터 시스템의 메모리 디바이스는 어드레스 공간의 어드레스를 사용하여 적어도 하나의 처리 디바이스에 의해 액세스됨 -; 어드레스 공간의 제1 어드레스 범위를 제1 메모리 디바이스와 연관시키고, 어드레스 공간의 제2 어드레스 범위를 제2 메모리 디바이스와 연관시키는 메타데이터를 저장하고; 컴퓨터 시스템 상에서 실행하는 애플리케이션에, 제1 메모리 디바이스의 제1 레이턴시가 제2 메모리 디바이스의 제2 레이턴시보다 더 작다는 것을 나타내는 제1 데이터를 제공하고; 제1 데이터를 애플리케이션에 제공한 것에 응답하여, 애플리케이션과 연관된 제2 데이터가 제1 메모리 디바이스에 저장되게 하는 요청을 애플리케이션으로부터 수신하고; 제2 데이터를 저장하기 위한 애플리케이션의 요청에 응답하여, 결과를 제공하기 위해 저장된 메타데이터를 쿼리하고; 이 결과에 기초하여, 제2 데이터를 제1 메모리 디바이스에 저장하게 한다.
도 7은 본 개시의 실시예가 동작할 수 있는 예시적인 컴퓨터 시스템의 블록도이다. 도 7은 기계가 본 출원에 설명된 방법론 중 어느 하나 이상을 수행하게 하기 위한 명령어 세트가 실행될 수 있는 컴퓨터 시스템(600)의 예시적인 기계를 예시한다. 일부 실시예에서, 컴퓨터 시스템(600)은 메모리 서브시스템(예를 들어, 도 1의 메모리 서브시스템(110))을 포함하거나, 그에 결합되거나, 그를 이용하는 호스트 시스템(예를 들어, 도 1의 컴퓨터 시스템(120))에 대응할 수 있거나 또는 메타데이터 컴포넌트(113)의 동작을 수행하기 위해(예를 들어, 도 1 내지 도 6을 참조하여 설명된 메타데이터 컴포넌트(113)에 대응하는 동작을 수행하기 위한 명령어를 실행하도록) 사용될 수 있다. 대안 실시예에서, 기계는 LAN, 인트라넷, 엑스트라넷, 및/또는 인터넷의 다른 기계에 연결(예를 들어, 네트워크 연결)될 수 있다. 기계는 클라이언트-서버 네트워크 환경의 서버 또는 클라이언트 기계의 자격으로, 피어-투-피어(또는 분산) 네트워크 환경의 피어 기계로서, 또는 클라우드 컴퓨팅 인프라구조 또는 환경의 서버 또는 클라이언트 기계로서 동작할 수 있다.
기계는 개인용 컴퓨터(PC), 태블릿 PC, 셋톱 박스(STB), 개인용 디지털 단말(PDA), 이동 전화, 웹 어플라이언스, 서버, 네트워크 라우터, 스위치 또는 브리지, 사물 인터넷(IOT) 디바이스 또는 해당 기계에서 수행할 작용을 지정하는 명령어 세트(순차적 또는 다른 방식)를 실행할 수 있는 임의의 기계일 수 있다. 또한, 단일 기계가 예시되어 있지만, "기계"라는 용어는 또한 본 출원에서 설명된 방법론 중 임의의 하나 이상을 수행하기 위해 명령어 세트(또는 다수의 세트)를 개별적으로 또는 공동으로 실행하는 임의의 기계 집합을 포함하는 것으로 고려되어야 한다.
예시적인 컴퓨터 시스템(600)은 처리 디바이스(602), 메인 메모리(604)(예를 들어, 판독 전용 메모리(ROM), 플래시 메모리, 동기 DRAM(SDRAM) 또는 램버스 DRAM(RDRAM)과 같은 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM) 등) 및 버스(630)(다중 버스를 포함할 수 있음)를 통해 서로 통신하는 데이터 저장 시스템(618)을 포함한다.
처리 디바이스(602)는 마이크로프로세서, 중앙 처리 유닛 등과 같은 하나 이상의 범용 처리 디바이스를 나타낸다. 더 구체적으로, 처리 디바이스는 복합 명령어 세트 컴퓨팅(CISC) 마이크로프로세서, 축약 명령어 세트 컴퓨팅(RISC) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 또는 다른 명령어 세트를 구현하는 프로세서 또는 명령어 세트의 조합을 구현하는 프로세서일 수 있다. 처리 디바이스(602)는 또한 주문형 집적 회로(ASIC), 필드 프로그램 가능 게이트 어레이(FPGA), 디지털 신호 프로세서(DSP), 네트워크 프로세서 등과 같은 하나 이상의 특수 목적 처리 디바이스일 수 있다. 처리 디바이스(602)는 본 출원에 설명된 동작 및 단계를 수행하기 위한 명령어(626)를 실행하도록 구성된다. 컴퓨터 시스템(600)은 네트워크(620)를 통해 통신하기 위한 네트워크 인터페이스 디바이스(608)를 더 포함할 수 있다.
데이터 저장 시스템(618)은 본 출원에 설명된 방법론 또는 기능 중 임의의 하나 이상을 구현하는 하나 이상의 명령어 세트(626) 또는 소프트웨어가 저장된 기계 판독 가능 저장 매체(624)(컴퓨터 판독 가능 매체라고도 알려짐)를 포함할 수 있다. 명령어(626)는 또한 역시 기계 판독 가능 저장 매체를 구성하는 컴퓨터 시스템(600), 메인 메모리(604) 및 처리 디바이스(602)에 의해 실행되는 동안 메인 메모리(604) 내에 및/또는 처리 디바이스(602) 내에 완전히 또는 적어도 부분적으로 상주할 수 있다. 기계 판독 가능 저장 매체(624), 데이터 저장 시스템(618) 및/또는 메인 메모리(604)는 도 1의 메모리 서브시스템(110)에 대응할 수 있다.
하나의 실시예에서, 명령어(626)는 메타데이터 컴포넌트(113)(예를 들어, 도 1 내지 도 6을 참조하여 설명된 메타데이터 컴포넌트(113))에 대응하는 기능을 구현하기 위한 명령어를 포함한다. 기계 판독 가능 저장 매체(624)는 예시적인 실시예에서 단일 매체인 것으로 도시되어 있지만, "기계 판독 가능 저장 매체"라는 용어는 하나 이상의 명령어 세트를 저장하는 단일 매체 또는 다중 매체를 포함하는 것으로 고려되어야 한다.
메모리 유형에 대한 페이지 테이블 후크
가상 페이지의 가상 어드레스를 상이한 메모리 유형의 메모리 디바이스의 물리적 어드레스에 맵핑하는 페이지 테이블 엔트리와 관련된 다양한 실시예가 이제 아래에 설명된다. 다음 설명의 일반성은 앞서 설명된 다양한 실시예에 의해 제한되지 않는다.
데이터를 저장하기 위해 상이한 유형의 물리적 메모리 디바이스를 사용하는 컴퓨터 시스템의 종래의 메모리 관리 유닛에서는 다양한 가상 페이지에 대한 메모리가 어떻게 상이한 유형의 메모리 디바이스에 물리적으로 맵핑되는지(예를 들어, 가상 페이지가 DRAM 대 NVRAM 또는 플래시 메모리 중 어느 것의 물리적 어드레스에 맵핑되는지)를 MMU가 알지 못한다는 기술적 문제가 존재한다. 예를 들어, MMU는 각각의 가상 페이지가 상이한 유형의 메모리 디바이스에 맵핑되는 방식에 관한 데이터를 저장하지 않는다. 또한, 메모리 유형 무지는 단지 하나의 제한일 뿐이다. 상이한 물리적 어드레스는 심지어 동종 메모리 시스템(예를 들어, NUMA 아키텍처에서)에서도 액세스 특성의 차이(MMU가 알지 못함)를 가질 수 있다.
일 예에서, 프로세스에 대한 가상 페이지가 다른 메모리 디바이스(예를 들어, DRAM)보다 훨씬 느린 물리적 메모리 디바이스(예를 들어, 플래시 메모리)에 맵핑되는 경우, 이때, 데이터에 빠르게 액세스할 수 없음으로 인해 프로세스가 느리게 실행될 수 밖에 없다. 예를 들어, 프로세스는 처리를 계속하기 위해 메인 메모리의 가상 페이지가 필요할 수 있다. 필요한 가상 페이지가 실제로 느린 물리적 메모리 디바이스에 저장되어 있으면, 이때, 가상 페이지에 대한 액세스를 대기하는 동안 프로세스가 상당히 지연된다.
아래에 설명된 다양한 실시예는 위의 기술적 문제 중 하나 이상에 대한 기술적 해결책을 제공한다. 하나의 실시예에서, 방법은 적어도 하나의 처리 디바이스(예를 들어, CPU 및/또는 MMU)에 의해, 가상 페이지를 제1 메모리 유형과 연관시키는 단계; 가상 페이지의 가상 어드레스를 제1 메모리 유형의 제1 메모리 디바이스의 물리적 어드레스에 맵핑하기 위한 페이지 테이블 엔트리를 생성하는 단계; 및 페이지 테이블 엔트리를 사용하여, 제1 메모리 디바이스의 물리적 어드레스에 가상 페이지를 저장하는 단계를 포함한다. 일 예에서, 페이지 테이블 엔트리는 메모리 관리 유닛 및/또는 마이크로프로세서의 캐시에 복사되었다. 일 예에서, 페이지 테이블 엔트리는 중앙 처리 유닛의 메인 메모리에 가상 페이지를 저장할 때 메모리 관리 유닛에 의해 사용되는 TLB(translation lookaside buffer)에 복사되었다.
하나의 실시예에서, 모바일 디바이스의 운영 체제는 메모리 유형과 연관된 가상 페이지의 위치를 관리한다. 예를 들어, 메모리 유형은 DRAM, NVRAM 또는 NAND 플래시일 수 있다. 가상 페이지가 특정 메모리 유형과 연관되면, 운영 체제는 가상 페이지의 논리적 어드레스를 대응 메모리 유형에 맵핑하기 위해 페이지 테이블 엔트리를 생성한다. 프로세서는 메모리 유형을 변경하여 메모리 페이지가 다른 유형의 메모리로 전달되도록 요청할 수 있다.
일 예에서, 컴퓨팅 디바이스 상에서 실행되는 애플리케이션 또는 다른 소프트웨어는 애플리케이션 또는 다른 소프트웨어가 처리를 위해 사용하기를 원하는 메모리 유형을 식별하는 정보를 운영 체제에 제공한다. 이에 응답하여, 운영 체제는 애플리케이션 또는 소프트웨어에 의해 요청된 식별된 메모리 유형에 대응하는 물리적 메모리 디바이스와 애플리케이션 또는 소프트웨어의 하나 이상의 가상 페이지를 연관시킨다. 예를 들어, NVRAM 메모리 유형에 대한 애플리케이션의 요청에 응답하여, 가상 페이지가 애플리케이션에 할당된다. 할당된 가상 페이지에 대응하는 물리적 어드레스는 NVRAM 디바이스(예를 들어, 크로스 포인트 메모리 디바이스)에 데이터를 저장하는 데 사용된다.
도 8은 일부 실시예에 따른 메모리 버스(812) 상의 메모리 디바이스에 액세스하기 위해 하나 이상의 페이지 테이블(804, 806)을 사용하는 예시적인 컴퓨터 시스템(800)을 예시한다. 메모리 디바이스는 메모리 서브시스템(802)의 DRAM(304), NVRAM(306), 및 NAND 플래시(308)를 포함할 수 있다.
컴퓨터 시스템(800)은 도 3의 컴퓨터 시스템(300)의 예이다. 메모리 서브시스템(802)은 도 3의 메모리 서브시스템(302)의 예이다. 메모리 버스(812)는 도 2의 메모리 버스(203)의 예이다.
운영 체제(808)는 처리 디바이스(310)에서 실행된다. 운영 체제(808)는 처리 디바이스(310)의 메인 메모리를 다양한 애플리케이션에 할당한다. 이러한 애플리케이션은 메모리 유형(314)을 갖는 애플리케이션(312)을 포함한다. 일 예에서, 메모리 유형(314)은 애플리케이션(312)의 코드에 임베딩된다. 일 예에서, 메모리 유형(314)은 상이한 컴퓨팅 디바이스(도시되지 않음)에 의해 처리 디바이스(310)에 제공된다. 일 예에서, 상이한 컴퓨팅 디바이스는 메모리 할당을 위한 애플리케이션(312)에 의한 요청과 관련하여 메모리 유형(314)을 제공하는 서버이다.
운영 체제(808)는 메모리 관리 유닛(MMU)(316)을 사용하여 컴퓨터 시스템(800)을 위한 메모리를 관리한다. 하나의 실시예에서, 애플리케이션(312)을 포함하는 애플리케이션과 연관된 가상 페이지는 메모리 서브시스템(802)에 상주하는 물리적 메모리에 맵핑된다. MMU(316)는 애플리케이션이 액세스해야 하는 가상 페이지에 대응하는 메모리의 물리적 어드레스를 결정하기 위해 페이지 테이블 엔트리에 액세스한다.
페이지 테이블 엔트리는 페이지 테이블(804) 및/또는 페이지 테이블(806)에 저장될 수 있다. 일 예에서, MMU(316)는 가상 페이지에 대응하는 가상 어드레스를 제공함으로써 페이지 테이블(804, 806)에 쿼리한다. 쿼리의 결과는 메모리 디바이스(예를 들어, DRAM(304))의 물리적 어드레스이다.
하나의 실시예에서, 페이지 테이블(804)은 DRAM(304)에 저장된다. 하나의 실시예에서, 페이지 테이블(806)은 컴퓨터 시스템(800)의 메모리에 저장된다. 일 예에서, MMU(316)는 페이지 테이블 엔트리가 컴퓨터 시스템(800)에 존재하지 않을 때 페이지 테이블(804)에 액세스한다. 일 예에서, 페이지 테이블 엔트리는 페이지 테이블(804)과 페이지 테이블(806) 사이에서 분할된다. 일 예에서, 페이지 테이블(806)의 페이지 테이블 엔트리는 더 높은 우선순위를 갖는 프로세스에 대응한다. 일 예에서, 처리 디바이스(310)는 애플리케이션에 대응하는 처리 디바이스(310)에 의해 수신된 메모리 유형에 기초하여 애플리케이션에 대응하는 프로세스에 우선순위를 할당한다.
하나의 실시예에서, MMU(316)는 메모리 관리를 위해 페이지 테이블(804) 및 메타데이터(322) 양자 모두를 사용한다. 일 예에서, MMU(316)는 가상 페이지에 대응하는 데이터를 저장하기 위한 메모리 디바이스를 선택하기 위해 메타데이터(322)를 사용한다. 선택된 메모리 디바이스는 요청된 메모리 유형(예를 들어, 메모리 유형(314))에 대응할 수 있다. 다른 실시예에서, MMU(316)는 메모리 관리를 위해 페이지 테이블(806)과 메타데이터(320) 양자 모두를 사용한다.
하나의 실시예에서, 페이지 테이블(804, 806)로부터의 페이지 테이블 엔트리 중 일부는 변환 색인 버퍼(TLB)(810)에 복사된다. 가상 어드레스를 물리적 어드레스에 맵핑할 때, MMU(316)는 먼저 가상 어드레스에 대응하는 페이지 테이블 엔트리에 대해 TLB(810)를 검사한다. TLB(810)의 페이지 테이블 엔트리는 메타데이터(320, 322)로부터 복사된 데이터도 포함할 수 있다.
하나의 실시예에서, 애플리케이션(312)은 처리 디바이스(310)에 의해 메모리 할당을 요청한다. 이에 응답하여, 운영 체제(808)는 MMU(316)를 사용하여 애플리케이션(312)에 대한 가상 페이지의 가상 어드레스를 메모리 디바이스의 물리적 어드레스에 맵핑하기 위한 페이지 테이블 엔트리를 생성한다. 메모리 디바이스는 메모리 유형(314)으로 되도록 선택된다. 하나의 실시예에서, 메타데이터(322)는 메모리 디바이스를 선택하는 데 사용된다. 하나의 실시예에서, 페이지 테이블 엔트리를 생성한 후, 페이지 테이블 엔트리의 사본이 TLB(810)에 저장되고/되거나 메타데이터(320, 322)가 업데이트된다.
하나의 실시예에서, 처리 디바이스(310)는 애플리케이션(312)과 연관된 변경을 결정한다. 일 예에서, 변경은 애플리케이션(312)에 의해 수행되는 하나 이상의 기능의 우선순위 변경이다. 일 예에서, 변경은 보안 컨텍스트 등과 같은 애플리케이션(312)과 연관된 컨텍스트의 변경이다.
변경 결정에 응답하여, 운영 체제(808)는 애플리케이션(312)의 하나 이상의 가상 페이지를 새로운 메모리 유형과 연관시킨다. 예를 들어, 애플리케이션(312)에 대한 더 높은 우선순위를 결정한 것에 응답하여 애플리케이션(312)에 대한 메모리 유형은 NVRAM으로부터 DRAM으로 변경될 수 있다. 새로운 메모리 유형에 대한 변경에 응답하여, 페이지 테이블 엔트리가 업데이트되어 가상 페이지의 가상 어드레스를 새로운 메모리 유형의 새로운 메모리 디바이스의 물리적 어드레스에 맵핑한다. 그 다음, MMU(316)는 업데이트된 페이지 테이블 엔트리를 사용하여 현재 사용되는 메모리 디바이스로부터 새로운 메모리 디바이스로 가상 페이지를 전달한다.
하나의 실시예에서, 컴퓨터 시스템(800) 및/또는 처리 디바이스(310)는 시스템 온 칩(SoC)이다. 일 예에서, SoC는 컴퓨팅 디바이스의 임의의 2개 이상의 컴포넌트를 통합하는 집적 회로 또는 칩이거나 이를 포함할 수 있다. 2개 이상의 컴포넌트는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 메모리, 입력/출력 포트, 및 보조 저장소 중 적어도 하나 이상을 포함할 수 있다. 예를 들어, SoC는 단일 회로 다이 상에 CPU, GPU, 그래픽 및 메모리 인터페이스, 하드 디스크, USB 연결, 랜덤 액세스 메모리, 판독 전용 메모리, 보조 저장소 또는 그 임의의 조합을 포함할 수 있다. 또한, 프로세서 칩이 SoC인 경우 SoC는 적어도 CPU 및/또는 GPU를 포함할 수 있다.
SoC의 일 예에서 2개 이상의 컴포넌트는 단일 기판 또는 마이크로칩(칩)에 임베딩될 수 있다. 일반적으로, SoC는 마더보드가 분리 또는 교체 가능한 컴포넌트를 수용하고 연결하는 반면, SoC는 모든 컴포넌트를 단일 집적 회로에 통합한다는 점에서 통상적인 마더보드 기반 아키텍처와 다르다. 2개 이상의 컴포넌트가 단일 기판이나 칩에 통합되어 있기 때문에 SoC는 동일한 기능을 가진 다중 칩 설계보다 전력을 덜 소비하고 면적을 훨씬 적게 차지한다. 일부 실시예에서, 본 출원에 설명된 메모리 시스템 또는 서브시스템은 (스마트폰과 같은) 모바일 컴퓨팅 디바이스, 임베디드 시스템, 및 사물 인터넷(IoT) 디바이스에서 SoC와 연결되거나 그 일부일 수 있다. 하나의 실시예에서, 메모리 서브시스템(802)은 SoC일 수 있거나 그에 포함될 수 있다. 또한, 메모리 서브시스템(802)이 SoC인 경우, SoC는 적어도 데이터 처리 유닛을 포함할 수 있다.
도 9는 일부 실시예에 따른 페이지 테이블 엔트리(902, 904)를 갖는 예시적인 페이지 테이블(900)을 예시한다. 각각의 페이지 테이블 엔트리(902, 904)는 가상 어드레스, 대응하는 물리적 어드레스, 및 메모리 유형을 포함한다. 일 예에서 메모리 유형은 메모리 유형 314이다. 일 예에서, 메모리 유형(314)은 프로세스에 대한 메인 메모리의 새로운 할당 또는 할당 변경에 응답하여 페이지 테이블 엔트리를 업데이트하는 데 사용된다. 다양한 실시예에서, 각각의 엔트리(902, 904)는 프로세스 식별자, 사용 데이터, 및/또는 메모리 디바이스 식별자를 더 포함할 수 있다. 페이지 테이블 900은 페이지 테이블 804 또는 806의 예이다.
하나의 실시예에서, 각각의 페이지 테이블 엔트리에 대해, 가상 어드레스는 애플리케이션(312)과 같은 애플리케이션의 가상 페이지에 대응한다. 물리적 어드레스는 메모리 서브시스템(802)의 메모리 디바이스의 위치에 대응한다. 메모리 유형은 물리적 어드레스의 메모리 디바이스의 유형에 대응한다.
하나의 실시예에서, 각각의 페이지 테이블 엔트리에 대한 프로세스 식별자는 가상 어드레스에서 가상 페이지를 사용하는 처리 디바이스(310) 상에서 실행되는 프로세스를 식별하기 위해 사용된다. 예를 들어, 프로세스 식별자는 컴퓨터 시스템(800)에서 실행되는 각각의 프로세스에 대한 고유 식별자이다.
하나의 실시예에서, 각각의 페이지 테이블 엔트리에 대한 사용 데이터는 페이지 테이블 엔트리의 가상 어드레스에서 가상 페이지에 저장된 데이터와 연관된 액세스 또는 다른 사용에 관한 데이터에 대응할 수 있다. 일 예에서, 사용 데이터는 가상 페이지의 사용 패턴과 관련된다. 일 예에서, 사용 패턴은 가상 페이지의 데이터에 대한 액세스 빈도이다. 일 예에서, 액세스 빈도는 판독 및/또는 기록 액세스에 대한 것일 수 있다. 일 예에서, 사용 데이터는 가상 페이지에서 데이터의 최종 사용 시간과 관련된다.
하나의 실시예에서, 각각의 페이지 테이블 엔트리는 메모리 디바이스 식별자를 포함할 수 있다. 일 예에서, 메모리 디바이스 식별자는 가상 어드레스에 대응하는 데이터가 저장되는 물리적 메모리 디바이스를 고유하게 식별한다. 일 예에서, 메모리 디바이스 식별자는 DRAM(304) 또는 NVRAM(306)에 고유하게 대응한다.
하나의 실시예에서, 각각의 페이지 테이블 엔트리는 메타데이터(320 및/또는 322)의 적어도 일부를 더 포함할 수 있다. 일 예에서, 포함된 메타데이터는 물리적 메모리 디바이스에 대한 어드레스 범위일 수 있다.
도 10은 일부 실시예에 따른, 가상 페이지의 가상 어드레스를 상이한 메모리 유형의 메모리 디바이스의 물리적 어드레스에 맵핑하기 위해 페이지 테이블 엔트리를 생성하기 위한 방법을 도시한다. 예를 들어, 도 10의 방법은 도 8의 시스템 또는 도 7의 컴퓨터 시스템(600)에서 구현될 수 있다.
도 10의 방법은 하드웨어(예를 들어, 처리 디바이스, 회로부, 전용 로직, 프로그램 가능 로직, 마이크로코드, 디바이스의 하드웨어, 집적 회로 등), 소프트웨어(예를 들어, 처리 디바이스 상에서 실시되거나 실행되는 명령어) 또는 그 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 일부 실시예에서, 도 10의 방법은 하나 이상의 처리 디바이스(예를 들어, 도 8의 처리 디바이스(310))에 의해 적어도 부분적으로 수행된다.
특정한 시퀀스나 순서로 도시되어 있지만 달리 명시되지 않는 한, 프로세스의 순서는 수정될 수 있다. 따라서, 예시된 실시예는 예시로서만 이해하여야 하며, 예시된 프로세스는 상이한 순서로 수행될 수 있고, 일부 프로세스는 병렬로 수행될 수 있다. 추가적으로, 다양한 실시예에서 하나 이상의 프로세스가 생략될 수 있다. 따라서, 모든 실시예에서 모든 프로세스가 필요한 것은 아니다. 다른 프로세스 흐름이 가능하다.
블록 1001에서, 가상 페이지는 제1 메모리 유형과 연관된다. 일 예에서, 제1 메모리 유형은 DRAM, NVRAM, 또는 플래시 메모리이다. 일 예에서, 가상 페이지는 애플리케이션(312)에 대응한다. 일 예에서, 가상 페이지는 처리 디바이스(310)에 의해 사용되는 메인 메모리의 할당에 대한 요청에 응답하여 애플리케이션(312)에 할당된 메모리에 대응한다.
블록 1003에서, 페이지 테이블 엔트리가 생성된다. 페이지 테이블 엔트리는 가상 페이지의 가상 어드레스를 제1 메모리 유형의 메모리 디바이스의 물리적 어드레스에 맵핑한다. 일 예에서, 페이지 테이블 엔트리는 페이지 테이블(804 또는 806)에 상주한다. 일 예에서, 메모리 디바이스는 DRAM(304), NVRAM(306), 또는 NAND 플래시(308)이다.
블록 1005에서, 페이지 테이블 엔트리를 사용하여, 가상 페이지는 메모리 디바이스의 물리적 어드레스에 저장된다. 일 예에서, 메모리 관리 유닛(316)은 변환 색인 버퍼(810)에 캐싱된 페이지 테이블 엔트리를 사용하여 가상 페이지를 저장한다.
하나의 실시예에서, 방법은 적어도 하나의 처리 디바이스(예를 들어, 처리 디바이스(310) 및/또는 메모리 관리 유닛(316))에 의해, 가상 페이지를 제1 메모리 유형과 연관시키는 단계; 가상 페이지의 가상 어드레스를 제1 메모리 유형의 제1 메모리 디바이스(예를 들어, DRAM(304))의 물리적 어드레스에 맵핑하기 위해 페이지 테이블 엔트리(예를 들어, 페이지 테이블 엔트리(902))를 생성하는 단계; 및 페이지 테이블 엔트리를 사용하여, 제1 메모리 디바이스의 물리적 어드레스에 가상 페이지를 저장하는 단계를 포함한다.
하나의 실시예에서, 방법은 적어도 하나의 처리 디바이스에 의해, 가상 페이지를 제2 메모리 유형과 연관시키는 단계; 가상 페이지의 가상 어드레스를 제2 메모리 유형의 제2 메모리 디바이스(예를 들어, NVRAM(306))의 물리적 어드레스에 맵핑하기 위해 페이지 테이블 엔트리를 업데이트하는 단계; 및 업데이트된 페이지 테이블 엔트리를 사용하여, 제1 메모리 디바이스로부터 제2 메모리 디바이스로 가상 페이지를 전달하는 단계를 더 포함한다.
하나의 실시예에서, 운영 체제(예를 들어, 운영 체제(808))는 적어도 하나의 처리 디바이스에서 실행되고, 페이지 테이블 엔트리를 생성하는 단계는 가상 페이지를 제1 메모리 유형과 연관시키는 단계에 응답하여 운영 체제에 의해 수행된다.
하나의 실시예에서, 가상 페이지를 제1 메모리 유형과 연관시키는 단계는 애플리케이션(예를 들어, 애플리케이션(312))으로부터 운영 체제에 의해 수신된 요청에 응답하여 수행된다.
하나의 실시예에서, 제1 메모리 유형(예를 들어, 메모리 유형(314))은 애플리케이션으로부터의 요청과 함께 제공된다.
하나의 실시예에서, 방법은 컴퓨팅 디바이스의 운영 체제에 의해 메모리 디바이스에 저장된 가상 페이지에 대한 물리적 위치를 관리하는 단계를 더 포함하고, 메모리 디바이스는 제1 메모리 디바이스 및 제2 메모리 유형의 제2 메모리 디바이스를 포함하고, 그리고 제1 메모리 디바이스의 레이턴시는 제2 메모리 디바이스의 레이턴시보다 작다.
하나의 실시예에서, 제1 및 제2 메모리 디바이스 사이에 레이턴시 이외에 및/또는 그에 더하여 차이들이 존재할 수 있다. 일 예에서, 제1 메모리 디바이스의 전력 및/또는 성능 특성은 저전력 메모리 및/또는 더 내구성 있는 메모리를 갖는 제2 메모리 디바이스와 상이하다. 상이한 메모리 디바이스 또는 유형 또는 메모리 사이의 메모리 특성의 차이의 예는 성능, 전력, 내구성, 오류율, 및/또는 그 조합을 포함할 수 있다. 일부 경우에, 예를 들어, 동일한 메모리 유형의 디바이스 사이에 이러한 차이가 존재할 수 있다(예를 들어, 프로세스에 대한 데이터를 저장하는 데 사용되는 동일한 메모리 유형의 상이한 칩들에 대해 오류율이 변한다).
하나의 실시예에서, 제1 메모리 유형은 동적 랜덤 액세스 메모리이고, 제2 메모리 유형은 비휘발성 랜덤 액세스 메모리 또는 플래시 메모리이다.
하나의 실시예에서, 방법은 운영 체제에 의해, 적어도 하나의 처리 디바이스에서 실행되는 애플리케이션을 모니터링하는 단계; 및 모니터링에 기초하여, 가상 페이지의 가상 어드레스를 제2 메모리 유형의 제2 메모리 디바이스의 물리적 어드레스에 맵핑하기 위해 페이지 테이블 엔트리를 업데이트하는 단계를 더 포함한다.
하나의 실시예에서, 방법은 적어도 하나의 처리 디바이스와 연관된 동작의 컨텍스트를 결정하는 단계; 결정된 컨텍스트에 기초하여, 제2 메모리 유형을 선택하는 단계; 및 제2 메모리 유형을 선택한 것에 응답하여, 가상 페이지의 가상 어드레스를 제2 메모리 유형의 제2 메모리 디바이스의 물리적 어드레스에 맵핑하기 위해 페이지 테이블 엔트리를 업데이트하는 단계를 더 포함한다.
하나의 실시예에서, 방법은 적어도 하나의 처리 디바이스에 의해, 가상 페이지를 제2 메모리 유형과 연관시키는 단계; 가상 페이지를 제2 메모리 유형과 연관시키는 것에 응답하여, 변환 색인 버퍼(예를 들어, TLB(810))에서 맵핑 데이터를 업데이트하는 단계; 및 메모리 관리 유닛이 변환 색인 버퍼의 업데이트된 맵핑 데이터에 액세스하는 것에 기초하여, 제1 메모리 디바이스로부터 제2 메모리 디바이스로 가상 페이지를 전달하는 단계를 더 포함한다.
하나의 실시예에서, 프로세스는 적어도 하나의 처리 디바이스 상에서 실행되고, 페이지 테이블 엔트리는 가상 페이지를 사용하는 제1 프로세스에 대한 프로세스 식별자를 포함한다.
하나의 실시예에서, 페이지 테이블 엔트리는 적어도 하나의 처리 디바이스에서 실행되는 하나 이상의 애플리케이션에 의한 사용 패턴에 관한 데이터를 포함한다.
하나의 실시예에서, 사용 패턴에 관한 데이터는 사용 빈도 또는 최종 사용 시간 중 적어도 하나이다.
하나의 실시예에서, 시스템은 제1 메모리 디바이스; 가상 어드레스를 상이한 메모리 유형의 메모리 디바이스의 물리적 어드레스에 맵핑하는 페이지 테이블 엔트리를 저장하는 페이지 테이블- 메모리 디바이스는 제1 메모리 디바이스를 포함함 -; 적어도 하나의 처리 디바이스; 및 명령어를 함유하는 메모리를 포함하고, 명령어는 적어도 하나의 처리 디바이스에 제1 메모리 유형에 대한 가상 페이지의 연관을 결정하고; 제1 메모리 디바이스가 제1 메모리 유형에 대응한다고 결정하고; 가상 페이지의 가상 어드레스를 제1 메모리 디바이스의 제1 물리적 어드레스에 맵핑하기 위한 페이지 테이블 엔트리를 생성하도록 지시하도록 구성된다.
하나의 실시예에서, 적어도 하나의 처리 디바이스는 메모리 디바이스 상에 저장된 데이터를 갖는 메인 메모리를 사용하고, 제1 메모리 유형에 대한 가상 페이지의 연관을 결정하는 것은 메인 메모리의 할당을 위한 애플리케이션에 의한 요청에 응답하여 수행된다.
하나의 실시예에서, 명령어는 적어도 하나의 처리 디바이스에 메인 메모리의 어드레스 범위를 메모리 디바이스의 물리적 어드레스와 연관시키는 메타데이터(예를 들어, 메타데이터(320, 322))를 저장하도록 지시하도록 추가로 구성되고; 제1 메모리 디바이스가 제1 메모리 유형에 대응한다고 결정하는 것은 저장된 메타데이터에 기초한다.
하나의 실시예에서, 명령어는 페이지 테이블 엔트리를 사용하여 가상 페이지를 제1 메모리 디바이스의 제1 물리적 어드레스에 저장하도록 적어도 하나의 처리 디바이스에 지시하도록 추가로 구성된다.
하나의 실시예에서, 시스템은 메모리 관리 유닛(예를 들어, 메모리 관리 유닛(316)) 및 변환 색인 버퍼를 더 포함하고, 명령어는 적어도 하나의 처리 디바이스에 제1 메모리 유형에서 제2 메모리 유형으로의 가상 페이지와 연관된 메모리 유형의 변경에 기초하여 변환 색인 버퍼의 맵핑 데이터를 업데이트하고; 업데이트된 맵핑 데이터에 기초하여 메모리 관리 유닛에 의해, 제1 메모리 디바이스로부터 제2 메모리 유형의 제2 메모리 디바이스로 가상 페이지를 전달하도록 지시하도록 추가로 구성된다.
하나의 실시예에서, 메모리 유형의 변경은 적어도 하나의 처리 디바이스 상에서 실행하는 애플리케이션에 의한 요청에 응답하여, 또는 프로세스 또는 애플리케이션의 우선순위가 변경되었다는 적어도 하나의 처리 디바이스에 의한 결정에 응답하여 수행된다.
하나의 실시예에서, 비일시적 기계 판독 가능 저장 매체는 명렁어를 저장하고, 이 명령어는 적어도 하나의 처리 디바이스 상에서 실행될 때 적어도 하나의 처리 디바이스로 하여금 적어도 가상 페이지를 제1 메모리 유형과 연관시키고; 가상 페이지의 가상 어드레스를 제1 메모리 유형의 제1 메모리 디바이스의 물리적 어드레스에 맵핑하기 위한 페이지 테이블 엔트리를 생성하고; 페이지 테이블 엔트리를 사용하여, 가상 페이지를 제1 메모리 디바이스의 물리적 어드레스에 저장하게 한다.
네임스페이스에 대한 데이터 바인딩(Binding Data to a Namespace)
상이한 메모리 유형의 물리적 메모리를 갖는 메모리 시스템에서 네임스페이스에 데이터를 바인딩하는 것과 관련된 다양한 실시예가 이제 아래에 설명된다. 다음 설명의 일반성은 앞서 설명된 다양한 실시예에 의해 제한되지 않는다.
종래의 메모리 시스템에서, 메인 메모리는 운영 체제에 의해 애플리케이션에 액세스 가능하게 되며 단일 로직 어드레스 공간(예를 들어, 어드레스 공간의 가상 어드레스)로부터 할당된다. 특히, 운영 체제는 임의의 맵핑 제어를 애플리케이션이 액세스할 수 있게 하지 않으며, 따라서, 애플리케이션은 데이터를 저장하는 데 어떤 메모리 유형이 사용되는 지를 제어할 수 없다. 대신, 운영 체제 및/또는 프로세서는 페이지 테이블 및 변환 색인 버퍼를 통해 맵핑을 제어한다. 페이지 테이블은 논리적 어드레스 페이지와 컴퓨터 시스템의 메모리 디바이스에 있는 물리적 메모리 유닛의 페이지 사이의 맵핑을 정의한다. 페이지 테이블의 전체 크기는 비교적 크다. 따라서, 대부분의 페이지 테이블은 메모리(예를 들어, 메인 메모리의 DRAM)에 저장된다. 물리적 메모리 어드레스를 찾는 데 현재 사용되는 페이지 테이블로부터의 데이터 일부는 프로세서/메모리 제어기의 변환 색인 버퍼에 캐싱된다.
종래의 메모리 시스템에 대한 앞서 설명한 상황은 데이터를 저장하는 실제 물리적 메모리 디바이스의 레이턴시가 크기 때문에 애플리케이션이 특정 데이터에 적시에 액세스할 수 없는 기술적인 문제를 생성한다. 따라서, 애플리케이션의 실행이 장기간 보류될 수 있다. 일부 경우에, 이러한 지연은 인해 적시 응답이나 다른 작용이 필요한 시스템 장애를 야기할 수 있다. 예를 들어, 실시간 제어 시스템은 메인 메모리으로부터의 느린 데이터 액세스로 인해 실패할 수 있다. 일 예에서, 중요한 데이터가 저장되는 메인 메모리 부분의 과도한 레이턴시로 인해 자율주행 차량의 내비게이션 제어가 실패할 수 있다.
특정 물리적 메모리 디바이스에 대한 메인 메모리 사용의 맵핑을 제어할 수 없는 애플리케이션은 또한 애플리케이션이 더 높은 신뢰성을 갖는 메모리를 선택하지 못하게 한다. 이는 메모리의 기능적 장애(예를 들어, 보다 더 높은 장애율을 갖는 물리적 메모리 디바이스로부터의 데이터 액세스의 장애)로 인해 중요한 데이터가 손실될 수 있는 기술적인 문제를 생성한다.
아래에 설명된 다양한 실시예는 위의 기술적 문제 중 하나 이상에 대한 기술적 해결책을 제공한다. 하나의 실시예에서, 애플리케이션은 데이터가 저장될 메모리 유형을 지정함으로써 랜덤 메모리 액세스를 위해 운영 체제에 의해 사용되는 물리적 메모리 디바이스에 대한 맵핑을 관리한다. 애플리케이션은 (예를 들어, 운영 체제에 대한 애플리케이션의 요청을 기초로) 운영 체제를 사용하여 메모리의 일부를 할당하고, 메모리 유닛에 대한 메모리 어드레스를 기초로 지정된 메모리 유형의 메모리 유닛을 사용한다. 일 예에서, 운영 체제는 지정된 메모리 유형에 대응하는 가상 메모리 어드레스 범위를 애플리케이션에 알린다.
하나의 실시예에서, 데이터 액세스는 운영 체제에 의해 관리되는 네임스페이스 테이블을 통해 운영 체제에 의해 수행된다. 하나의 실시예에서, 네임스페이스 테이블은 메인 메모리의 메모리 어드레스에 네임이 할당한다. 하나의 실시예에서, 네임은 애플리케이션에 의해 사용되는 메인 메모리의 어드레스 공간에서 가상 어드레스의 범위에 할당된다. 하나의 실시예에서, 네임스페이스는 네임스페이스 식별자에 의해 식별된다(예를 들어, 임의의 식별자 네임스페이스 A, 네임스페이스 B, 및 네임스페이스 C를 사용하고, 여기서, 각각의 식별자는 상이한 유형의 메모리와 연관된다).
하나의 실시예에서, 네임스페이스는 메모리 액세스를 위해 사용된다. 각각의 네임스페이스는 메모리 어드레스가 정의된 메모리 유닛 세트에 대한 명명된 논리적 참조이다. 애플리케이션은 네임스페이스로부터 메모리를 할당한다. 운영 체제는 특정 유형의 메모리(예를 들어, DRAM, NVRAM, NAND 플래시)에 네임스페이스를 바인딩 및/또는 재바인딩하기 위해 애플리케이션에서 호출할 수 있는 서비스를 제공한다. 네임스페이스가 메모리 유형에 바인딩되면 운영 체제는 하나 이상의 페이지 테이블을 조절하여 네임스페이스의 논리적 메모리 어드레스를 컴퓨터 시스템의 특정 메모리 유형의 물리적 메모리 유닛에 맵핑한다. 네임스페이스의 논리적 어드레스를 통해 메모리 유닛이 액세스될 때, 하나 이상의 페이지 테이블로부터의 데이터는 물리적 메모리 어드레스로의 변환을 위해 프로세서/메모리 제어기의 변환 색인 버퍼에 로딩되고 캐싱된다.
하나의 실시예에서, 네임스페이스는 다양한 유형의 메모리 디바이스(예를 들어, DRAM, NVRAM 및 NAND 플래시)에서 생성된다. 애플리케이션은 데이터 세트와 네임스페이스 사이의 바인딩을 동적으로 변경하여 데이터를 원하는 메모리 디바이스로 이동시킬 수 있다. 하나의 실시예에서, 운영 체제는 바인딩의 변경을 검출하고 데이터가 이동될 수 있게 한다. 하나의 실시예에서, 운영 체제는 데이터가 현재 사용되는 메모리 디바이스로부터 원하는 메모리 디바이스로 이동되도록 메모리 관리 유닛이 페이지 테이블을 업데이트하게 한다.
하나의 실시예에서, 메인 메모리로서 랜덤 액세스를 위해 저장된 데이터는 다양한 가상 어드레스 범위에 의해 조직화된다. 가상 어드레스 범위 세트는 네임스페이스 식별자와 연관될 수 있다.
하나의 실시예에서, 운영 체제의 커널은 펌웨어 및 디바이스 드라이버의 도움으로 컴퓨터 시스템의 모든 하드웨어 디바이스를 제어한다. 커널은 RAM(random access memory)의 프로그램에 대한 메모리 액세스를 관리하고 특정 하드웨어 자원에 액세스할 수 있는 프로그램을 결정한다.
운영 체제는 애플리케이션 프로그램과 컴퓨터 시스템의 컴퓨터 하드웨어 사이의 인터페이스를 제공한다. 애플리케이션 프로그램은 운영 체제에서 관리하는 절차에 기초하여 하드웨어와 상호 작용한다. 운영 체제는 또한 애플리케이션 프로그램에 서비스를 제공한다. 애플리케이션 프로그램이 실행되면, 운영 체제의 커널에서 프로세스를 생성한다. 커널은 메모리 공간과 프로세스의 우선순위를 할당하고 프로그램 바이너리 코드를 메모리에 로딩하며 애플리케이션 프로그램의 실행을 개시한다.
하나의 실시예에서, 커널에 의한 메모리 공간의 할당은 애플리케이션으로부터 제공되는 네임스페이스 데이터에 적어도 부분적으로 기초한다. 일 예에서, 애플리케이션은 메모리 유형에 대응하는 네임스페이스를 제공한다. 이에 대한 응답하여, 커널은 해당 메모리 유형의 물리적 메모리 디바이스에 대응하는 메모리 공간을 할당한다. 일 예에서, 커널은 가상 메모리 어드레싱(예를 들어, 페이징 또는 분할)을 사용하여 각각의 프로그램이 임의의 주어진 시간에 액세스할 수 있는 메모리를 결정한다.
도 11은 일부 실시예에 따른 컴퓨터 시스템의 물리적 메모리에 대한 상이한 메모리 유형에 네임스페이스를 맵핑하기 위해 네임스페이스 테이블(1104)을 사용하는 예시적인 컴퓨터 시스템을 예시한다. 물리적 메모리는 메모리 버스(812)를 통해 컴퓨터 시스템(1100)에 의해 액세스 가능한 랜덤 액세스 메모리를 제공하는 데 사용된다. 메모리 서브시스템(1102)은 랜덤 액세스 메모리로서 사용되고 메모리 관리 유닛(316)을 사용하여 처리 디바이스(310)에 의해 액세스되는 물리적 메모리를 제공한다. 일 예에서, 컴퓨터 시스템(1100) 및 메모리 서브시스템(1102)은 동일한 집적 회로(IC) 칩 상에 또는 상이한 IC 칩 상에 있다. 일 예에서, 컴퓨터 시스템(1100) 및 메모리 서브시스템(1102)은 각각 동일한 SoC(system on a chip)의 일부이다.
컴퓨터 시스템(1100)은 도 8의 컴퓨터 시스템(800)의 예이다. 메모리 서브시스템(1102)은 도 8의 메모리 서브시스템(802)의 예이다.
물리적 메모리는 DRAM(304), NVRAM(306) 및 NAND 플래시(308)를 포함하는 다양한 메모리 유형의 메모리 디바이스에 의해 제공된다. 다른 실시예에서, 다양한 다른 유형의 메모리 및/또는 메모리 유형의 다른 조합이 사용될 수 있다.
각각의 메모리 디바이스는 네임스페이스 식별자에 대응한다. 예를 들어, DRAM(304)은 식별자 "네임스페이스 A"에 대응한다. NVRAM(306)은 식별자 "네임스페이스 B"에 대응한다. NAND 플래시(308)는 식별자 "네임스페이스 C"에 대응한다.
하나의 실시예에서, 각각의 메모리 디바이스는 할당된 네임스페이스와 연관된 다양한 데이터를 저장할 수 있다. 각각의 네임스페이스 데이터가 도 11에 "네임스페이스 A 데이터", "네임스페이스 B 데이터" 및 "네임스페이스 C 데이터"로 나타나 있다. 일 예에서, 네임스페이스 데이터는 네임스페이스 식별자를 포함한다. 일 예에서, 네임스페이스 데이터는 DRAM(304)에 대응하는 물리적 어드레스 범위를 포함한다. 일 예에서, 네임스페이스 데이터는 메타데이터(320, 322)로부터의 데이터의 일부를 포함한다. 일 예에서, 네임스페이스 데이터는 페이지 테이블(804)의 데이터 일부를 포함한다.
하나의 실시예에서, 네임스페이스 테이블(1104)은 컴퓨터 시스템(1100)의 메모리에 저장된다. 네임스페이스 테이블(1104)은 네임스페이스 식별자와 메모리 유형 사이의 맵핑을 제공한다. 예를 들어, 네임스페이스 식별자 "네임스페이스 A"는 DRAM의 메모리 유형에 맵핑된다.
하나의 실시예에서, 애플리케이션(312)이 랜덤 액세스 메모리의 할당을 위해 처리 디바이스(310)에 요청할 때, 운영 체제(808)는 네임스페이스 식별자를 생성하고, 메모리 유형을 네임스페이스 식별자와 연관시킨다. 네임스페이스 테이블(1104)은 이 연관을 저장하도록 업데이트된다. 일 예에서, 메모리 유형은 애플리케이션(312)에 의해 제공되는 메모리 유형(314)이다. 일 예에서, 운영 체제(808)는 애플리케이션(312)과 연관된 특성에 기초하여 메모리 유형을 결정한다. 일 예에서, 운영 체제(808)는 애플리케이션(312)에 대한 우선순위에 기초하여 메모리 유형을 결정한다.
하나의 실시예에서, 애플리케이션(312)은 메모리 관리와 관련된 운영 체제(808)에 요청을 제공한다. 요청은 식별된 데이터와 관련되거나 연관된 네임스페이스 식별자를 포함한다. 요청 수신에 응답하여, 운영 체제(808)는 식별된 데이터와 연관된 하나 이상의 다양한 작용 또는 동작들을 수행하기 위해 네임스페이스 테이블(1104)에 액세스한다. 일 예에서, 운영 체제(808)는 식별된 데이터를 한 메모리 유형의 기존 메모리 디바이스로부터 수신된 네임스페이스 식별자에 대응하는 다른 메모리 유형의 새로운 메모리 디바이스로 이동시킨다. 일 예에서, 운영 체제(808)는 식별된 데이터에 대해 하나 이상의 동작을 수행하고 요청과 함께 제공된 네임스페이스와 연관된 메모리 유형에 동작의 결과를 저장한다. 일 예에서, 운영 체제(808)는 애플리케이션(312)에 작용 완료의 확인을 제공한다.
하나의 실시예에서, 메모리는 애플리케이션(312)에 의한 사용을 위해 할당된다. 메모리는 네임스페이스로부터 할당된다. 일 예에서, 네임스페이스는 이미 네임스페이스 테이블(1104)에 존재한다. 다른 예에서, 네임스페이스는 메모리 할당 요청에 대한 응답으로 생성된다. 생성된 네임스페이스는 네임스페이스 테이블(1104)에 저장된다.
기존 또는 새로 생성된 네임스페이스는 메모리 유형에 바인딩된다. 네임스페이스를 메모리 유형에 바인딩한 것에 응답하여, 논리적 메모리 어드레스 및 네임스페이스를 메모리 유형의 메모리 디바이스에 맵핑하도록 하나 이상의 페이지 테이블이 조절된다. 일 예에서, 페이지 테이블(806) 및/또는 페이지 테이블(804)은 네임스페이스를 메모리 유형에 바인딩한 것에 응답하여 업데이트된다.
하나의 실시예에서, 운영 체제(808)는 메모리 디바이스에 대한 네임스페이스를 생성한다. 데이터는 네임스페이스에 바인딩된다. 일 예에서, 데이터는 가상 어드레스 범위에 의해 식별된다. 데이터를 네임스페이스에 바인딩한 것에 응답하여, 데이터는 생성된 네임스페이스와 연관된 메모리 디바이스에 저장된다. 일 예에서, 데이터를 네임스페이스에 바인딩하는 것은 네임스페이스의 가상 어드레스와 메모리 디바이스의 물리적 어드레스 사이의 맵핑을 저장하는 것을 포함한다.
하나의 실시예에서, 네임스페이스의 하나 이상의 가상 어드레스는 페이지 테이블(804)을 사용하여 운영 체제(808)에 의해 관리되는 프로세스의 가상 페이지에 대응한다. 일 예에서, 페이지 테이블(804)은 네임스페이스의 가상 어드레스를 메모리 디바이스의 물리적 어드레스에 맵핑하는 페이지 테이블 엔트리를 포함한다.
도 12는 일부 실시예에 따른 컴퓨터 시스템에 대한 상이한 유형의 메모리에 네임스페이스를 맵핑하는 레코드(1202, 1204, 1206)를 갖는 예시적인 네임스페이스 테이블(1200)을 예시한다. 일 예에서, 컴퓨터 시스템은 컴퓨터 시스템 1100이다. 네임스페이스 테이블 1200은 네임스페이스 테이블(1104)의 예이다.
각각의 레코드는 메모리 유형(예를 들어, DRAM 또는 NVRAM)과 연관된 네임스페이스 식별자(예를 들어, 네임스페이스 A)를 포함한다. 일 예에서, 레코드(1202)의 메모리 유형의 변경은 페이지 테이블 엔트리(902)가 일치하는 메모리 유형을 갖도록 페이지 테이블(900)이 업데이트되게 한다.
각각의 레코드는 가상 어드레스, 물리적 어드레스 및/또는 데이터 식별자를 더 포함할 수 있다. 일 예에서, 가상 어드레스는 레코드의 메모리 유형에 대응하는 가상 어드레스 범위일 수 있다. 일 예에서, 물리적 어드레스는 레코드의 메모리 유형의 하나 이상의 메모리 디바이스에 대응하는 물리적 어드레스 범위일 수 있다.
일 예에서, 데이터 식별자는 네임스페이스 식별자와 연관된 데이터를 식별한다. 일 예에서, 데이터 식별자는 처리 디바이스(310)의 어드레스 공간의 어드레스 범위이다. 일 예에서, 데이터 식별자는 레코드의 메모리 유형의 하나 이상의 메모리 디바이스에 저장된 데이터에 대한 물리적 어드레스 범위이다.
하나의 실시예에서, 저장된 메타데이터(320, 322)로부터의 데이터의 일부가 네임스페이스 테이블(1200)의 레코드에 복사된다. 일 예에서, 이 데이터의 일부는 레코드의 네임스페이스 식별자와 연관된 메모리 유형의 변경에 응답하여 복사된다. 일 예에서, 이 데이터의 일부는 레코드와 연관된 가상 어드레스, 물리적 어드레스 및/또는 데이터 식별자의 변경에 응답하여 복사된다.
도 13은 일부 실시예에 따른, 상이한 메모리 유형의 물리적 메모리를 갖는 메모리 시스템의 네임스페이스에 데이터를 바인딩하기 위한 방법을 도시한다. 예를 들어, 도 13의 방법은 도 11의 시스템에서 구현될 수 있다.
도 13의 방법은 하드웨어(예를 들어, 처리 디바이스, 회로부, 전용 로직, 프로그램 가능 로직, 마이크로코드, 디바이스의 하드웨어, 집적 회로 등), 소프트웨어(예를 들어, 처리 디바이스 상에서 실시되거나 실행되는 명령어) 또는 그 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 일부 실시예에서, 도 13의 방법은 하나 이상의 처리 디바이스(예를 들어, 도 11의 처리 디바이스(310))에 의해 적어도 부분적으로 수행된다.
특정한 시퀀스나 순서로 도시되어 있지만 달리 명시되지 않는 한, 프로세스의 순서는 수정될 수 있다. 따라서, 예시된 실시예는 예시로서만 이해하여야 하며, 예시된 프로세스는 상이한 순서로 수행될 수 있고, 일부 프로세스는 병렬로 수행될 수 있다. 추가적으로, 다양한 실시예에서 하나 이상의 프로세스가 생략될 수 있다. 따라서, 모든 실시예에서 모든 프로세스가 필요한 것은 아니다. 다른 프로세스 흐름이 가능하다.
블록 1301에서, 애플리케이션에 의한 사용을 위해 네임스페이스로부터 메모리가 할당된다. 네임스페이스는 물리적 어드레스가 정의된 하나 이상의 물리적 메모리 디바이스에 대한 논리적 참조이다. 일 예에서, 물리적 어드레스는 운영 체제(808)에 의해 정의된다. 일 예에서, 애플리케이션은 애플리케이션 312이다.
블록 1303에서, 네임스페이스는 메모리 유형에 바인딩된다. 일 예에서, 네임스페이스는 메모리 유형 314에 바인딩된다. 일 예에서, 메모리 유형에 대한 네임스페이스의 바인딩은 네임스페이스 테이블(1104)에 저장된다.
블록 1305에서, 네임스페이스를 메모리 유형에 바인딩한 것에 응답하여, 네임스페이스의 논리적 메모리 어드레스를 메모리 유형의 메모리 디바이스에 맵핑하도록 페이지 테이블이 조절된다. 일 예에서, 페이지 테이블(804) 및/또는 페이지 테이블(806)이 조절된다. 일 예에서, 논리적 메모리 어드레스는 애플리케이션(312)의 가상 페이지의 가상 어드레스이다. 일 예에서, 메모리 디바이스는 DRAM(304)이다.
하나의 실시예에서, 방법은 적어도 하나의 처리 디바이스(예를 들어, 처리 디바이스(310) 및/또는 메모리 관리 유닛(316))에 의해, 상이한 메모리 유형의 메모리 디바이스(예를 들어, DRAM(304), NVRAM(306), 및 NAND 플래시(308))를 위한 네임스페이스를 생성하는 단계- 네임스페이스는 제1 메모리 유형의 제1 메모리 디바이스에 대한 제1 네임스페이스(예를 들어, "네임스페이스 A") 및 제2 메모리 유형의 제2 메모리 디바이스에 대한 제2 네임스페이스(예를 들어, "네임스페이스 B")를 포함함 -; 데이터를 제1 네임스페이스에 바인딩하는 단계(예를 들어, 바인딩을 네임스페이스 테이블(1104)에 저장함); 및 데이터를 제1 네임스페이스에 바인딩하는 단계에 응답하여, 데이터를 제1 메모리 디바이스에 저장하는 단계를 포함한다.
하나의 실시예에서, 제1 메모리 디바이스에 데이터를 저장하는 단계는 데이터를 제2 메모리 디바이스로부터 제1 메모리 디바이스로 이동시키는 단계를 포함한다.
하나의 실시예에서, 데이터를 제1 네임스페이스에 바인딩하는 것은 데이터를 제2 네임스페이스로부터 제1 네임스페이스로 바인딩하는 변경을 포함한다.
하나의 실시예에서, 운영 체제(예를 들어, 운영 체제(808))는 적어도 하나의 처리 디바이스에서 실행되고, 데이터를 제1 네임스페이스에 바인딩하는 것은 애플리케이션(예를 들어, 애플리케이션(312))에 의한 요청에 응답하여 운영 체제에 의해 수행된다.
하나의 실시예에서, 제1 네임스페이스는 애플리케이션에 의한 요청에 응답하여 운영 체제에 의해 생성된다.
하나의 실시예에서, 네임스페이스를 생성하는 것은 각각의 가상 어드레스(예를 들어, 페이지 테이블(804, 806)의 가상 어드레스; 메타데이터(320, 322)의 가상 어드레스)를 각각의 네임스페이스에 연관시키는 것을 포함한다.
하나의 실시예에서, 데이터를 제1 네임스페이스에 바인딩하는 것은 제1 네임스페이스의 가상 어드레스(예를 들어, 페이지 테이블(804, 806)의 가상 어드레스; 메타데이터(320, 322)의 가상 어드레스) 및 제1 메모리 디바이스의 제1 물리적 어드레스 사이의 맵핑을 저장하는 것을 포함한다.
하나의 실시예에서, 제1 네임스페이스의 가상 어드레스는 하나의 처리 디바이스의 어드레스 공간의 제1 어드레스 범위에 있고, 그리고 맵핑을 저장하는 것은 제1 어드레스 범위를 제1 메모리 디바이스와 연관시키는 메타데이터(예를 들어, 메타데이터(320, 322))를 저장하는 것을 포함한다.
하나의 실시예에서, 제1 네임스페이스의 가상 어드레스는 페이지 테이블(예를 들어, 페이지 테이블(804, 806))을 사용하여 운영 체제에 의해 관리되는 프로세스의 가상 페이지에 대응하고, 맵핑을 저장하는 것은 제1 네임스페이스의 가상 어드레스를 제1 물리적 어드레스에 맵핑하는 페이지 테이블 엔트리를 페이지 테이블에 생성하는 것을 포함한다.
하나의 실시예에서, 방법은 운영 체제에 의한 메모리에 네임스페이스와 네임스페이스에 바인딩된 데이터 세트 사이의 연관(예를 들어, 네임스페이스 테이블(1104)의 레코드에 대한 바인딩)을 저장하는 단계를 더 포함한다.
하나의 실시예에서, 방법은 하나의 처리 디바이스 상에서 실행되는 애플리케이션에 대한 우선순위의 증가를 결정하는 단계를 더 포함하고; 제1 네임스페이스에 데이터를 바인딩하는 것은 우선순위의 증가를 결정한 것에 응답하여 수행되고, 데이터를 제1 네임스페이스에 바인딩하는 것은 제2 네임스페이스에서 제1 네임스페이스로의 바인딩 변경을 포함하고, 제1 메모리 디바이스(예를 들어, DRAM(304))의 레이턴시는 제2 메모리 디바이스(예를 들어, NVRAM(306) 또는 NAND 플래시(308))의 레이턴시보다 더 작다.
일 실시예에서, (제1 메모리 디바이스의 레이턴시가 더 작은) 제1 네임스페이스에 데이터를 바인딩하는 것으로 귀결되는 우선순위의 증가를 결정하는 대신에, 시스템은, 프로세스가 상당히 기록 집약적인 것으로(예를 들어, 미리 결정된 양 및/또는 기록 빈도를 초과한다고) 결정되면, 예를 들어, 더 내구성 메모리에 의해 지지되는 네임스페이스에 데이터를 바인딩할 수 있다. 또 다른 예에서, 시스템은 프로세스가 미션 크리티컬(mission critical)한 것으로 결정되면 (또는 프로세스가 덜 중요하거나 중요하지 않다고 결정되면 덜 탄력적인 메모리에 의해) 더 탄력적인 메모리에 의해 지지되는 네임스페이스에 데이터를 바인딩할 수 있다.
일 실시예에서, 프로세스는 하나 이상의 특정 특성들(예를 들어, 우선순위, 결과, 상호 작용(interactivity), 대역폭/전력 소비 등)을 갖는 것으로 결정될 수 있다. 이러한 결정에 기초하여, 프로세스와 연관된 데이터는 결정된 하나 이상의 특성들에 대응하고/하거나 더 적합한 상보적 특성들을 갖는 메모리에 의해 지지되는 네임스페이스에 바인딩된다.
하나의 실시예에서, 제1 네임스페이스를 생성하는 것은 제1 메모리 디바이스의 메모리에 제1 네임스페이스의 신원을 저장하는 것(예를 들어, 도 11의 "네임스페이스 A 데이터"의 일부로서 네임스페이스 식별자 및/또는 다른 신원을 저장하는 것)을 포함한다.
하나의 실시예에서, 방법은 애플리케이션으로부터 메모리 할당에 대한 요청을 수신하는 단계를 더 포함하고, 요청은 데이터가 제1 메모리 유형(예를 들어, DRAM)의 물리적 메모리에 저장되도록 지정한다.
하나의 실시예에서, 시스템은 제1 메모리 유형의 제1 메모리 디바이스; 적어도 하나의 처리 디바이스; 및 명령어를 함유하는 메모리를 포함하고, 명령어는 하나의 처리 디바이스에 운영 체제에 의해 애플리케이션에서 사용하기 위해 네임스페이스에서 메모리를 할당하고- 네임스페이스는 물리적 어드레스가 정의된 하나 이상의 물리적 메모리 디바이스에 대한 논리적 참조임 -; 네임스페이스를 제1 메모리 유형에 바인딩하고; 네임스페이스를 제1 메모리 유형에 바인딩한 것에 응답하여, 운영 체제에 의해, 네임스페이스의 논리적 메모리 어드레스를 제1 메모리 디바이스에 맵핑하도록 페이지 테이블을 조절하도록 지시하도록 구성된다.
하나의 실시예에서, 명령어는 페이지 테이블로부터의 데이터를 사용하여 네임스페이스의 논리적 메모리 어드레스에 대응하는 제1 메모리 디바이스의 제1 물리적 어드레스의 데이터에 액세스하도록 하나의 처리 디바이스에 지시하도록 추가로 구성된다.
하나의 실시예에서, 페이지 테이블로부터의 데이터는 변환 색인 버퍼(예를 들어, TLB(810))에 캐싱되고, 메모리 관리 유닛(예를 들어, MMU(316))은 논리적 메모리 어드레스를 제1 물리적 어드레스로 변환하기 위해 변환 색인 버퍼에 액세스한다.
하나의 실시예에서, 시스템은 제2 메모리 유형의 제2 메모리 디바이스를 더 포함하고, 명령어는 데이터를 제2 메모리 유형의 제2 메모리 디바이스로부터 제1 메모리 디바이스로 이동시킴으로써 페이지 테이블로부터의 데이터를 사용하여 제1 메모리 디바이스에 데이터를 저장하도록 적어도 하나의 처리 디바이스에 지시하도록 추가로 구성된다.
하나의 실시예에서, 비일시적 기계 판독 가능 저장 매체는 명렁어를 저장하고, 이 명령어는 적어도 하나의 처리 디바이스 상에서 실행될 때 적어도 하나의 처리 디바이스로 하여금 적어도 상이한 메모리 유형의 메모리 디바이스에 대한 네임스페이스를 생성하고- 네임스페이스는 제1 메모리 유형의 제1 메모리 디바이스에 대한 제1 네임스페이스 및 제2 메모리 유형의 제2 메모리 디바이스에 대한 제2 네임스페이스를 포함함; 데이터를 제1 네임스페이스에 바인딩하고; 데이터를 제1 네임스페이스에 바인딩한 것에 응답하여, 데이터를 제1 메모리 디바이스에 저장하게 한다.
하나의 실시예에서, 데이터를 제1 네임스페이스에 바인딩하는 것은 애플리케이션으로부터 수신된 제1 메모리 유형(예를 들어, 메모리 유형(314))에 대한 요청에 응답하여 수행되고; 데이터를 제1 네임스페이스에 바인딩하는 것은 제2 네임스페이스로부터 제1 네임스페이스로의 데이터 바인딩의 변경을 포함하고; 제1 메모리 디바이스의 레이턴시는 제2 메모리 디바이스의 레이턴시보다 더 작다.
하나의 실시예에서, 데이터를 제1 네임스페이스에 바인딩하는 것은 제1 네임스페이스의 가상 어드레스 범위 및 제1 메모리 디바이스의 제1 물리적 어드레스 사이의 맵핑을 저장하는 것을 포함하고; 맵핑을 저장하는 것은 가상 어드레스 범위를 제1 메모리 디바이스와 연관시키는 메타데이터(예를 들어, 메타데이터(320, 322))를 저장하는 것을 포함한다.
맺음말
본 개시는 이러한 방법을 수행하는 데이터 처리 시스템, 및 데이터 처리 시스템 상에서 실행될 때 시스템으로 하여금 이러한 방법을 수행하게 하는 명령어를 함유하는 컴퓨터 판독 가능 매체를 비롯하여, 이러한 방법을 수행하고 앞서 설명된 시스템을 구현하는 다양한 디바이스를 포함한다.
설명 및 도면은 예시적이며 제한으로서 해석되어서는 안 된다. 철저한 이해를 제공하기 위해 다수의 구체적인 세부사항이 설명되어 있다. 그러나, 특정 경우에, 설명을 모호하게 하는 것을 피하기 위해 잘 알려진 또는 통상적인 세부사항을 설명하지 않는다. 본 개시에서 하나의 또는 일 실시예라는 언급은 반드시 동일한 실시예에 대한 언급은 아니며; 그리고 이러한 언급은 적어도 하나를 의미한다.
본 명세서에서 "하나의 실시예" 또는 "일 실시예"에 대한 참조는 하나의 실시예와 관련하여 설명된 특정 특징, 구조 또는 특성이 본 개시의 적어도 하나의 실시예에 포함된다는 것을 의미한다. 명세서의 다양한 위치에서 "하나의 실시예에서"라는 문구의 출현은 반드시 모두 동일한 실시예를 지칭하는 것도 다른 실시예와 상호 배타적인 별개의 또는 대안 실시예를 지칭하는 것도 아니다. 더욱이, 일부 실시예에서 나타나고 다른 실시예에서는 나타나지 않을 수 있는 다양한 특징이 설명된다. 유사하게, 일부 실시예에 대한 요건이 될 수 있지만 다른 실시예에서는 요건이 아닐 수 있는 다양한 요건이 설명된다.
본 설명에서, 설명을 단순화하기 위해 다양한 기능 및 동작을 소프트웨어 코드에 의해 수행되거나 야기되는 것으로 설명할 수 있다. 그러나, 본 기술 분야의 숙련자는 이러한 표현이 의미하는 바가 기능이 마이크로프로세서, ASIC(Application-Specific Integrated Circuit), 그래픽 프로세서 및/또는 FPGA(Field-Programmable Gate Array) 같은 하나 이상의 프로세서에 의한 코드의 실행의 결과로 얻어진다는 것임을 인식할 것이다. 대안적으로, 또는 조합하여, 기능 및 동작은 소프트웨어 명령어 없이 또는 그와 함께 특수 목적 회로부(예를 들어, 로직 회로부)를 사용하여 구현될 수 있다. 실시예는 소프트웨어 명령어 없이 또는 소프트웨어 명령어와 조합하여 하드와이어드 회로부를 사용하여 구현될 수 있다. 따라서, 기술은 하드웨어 회로부 및 소프트웨어의 임의의 특정 조합이나 컴퓨팅 디바이스에 의해 실행되는 명령어에 대한 임의의 특정 소스로 제한되지 않는다.
일부 실시예는 완전히 기능하는 컴퓨터 및 컴퓨터 시스템에서 구현될 수 있지만, 다양한 실시예는 다양한 형태의 컴퓨팅 제품으로서 배포될 수 있고, 배포를 실제로 실행하는 데 사용되는 특정 유형의 기계 또는 컴퓨터 판독 가능 매체와 무관하게 적용될 수 있다.
개시된 적어도 일부 양태는 적어도 부분적으로 소프트웨어로 구현될 수 있다. 즉, 기술은 마이크로프로세서 같은 그 프로세서가 ROM, 휘발성 RAM, 비휘발성 메모리, 캐시 또는 원격 저장 디바이스 같은 메모리에 함유된 명령어의 시퀀스를 실행한 것에 응답하여 컴퓨팅 디바이스 또는 다른 시스템에서 수행될 수 있다.
실시예를 구현하기 위해 실행되는 루틴은 운영 체제, 미들웨어, 서비스 제공 플랫폼, 소프트웨어 개발 키트(SDK) 컴포넌트, 웹 서비스, 또는 기타 특정 애플리케이션, 컴포넌트, 프로그램, 객체, 모듈 또는 "컴퓨터 프로그램"으로 지칭되는 명령어 시퀀스의 일부로 구현될 수 있다. 이러한 루틴에 대한 호출 인터페이스는 애플리케이션 프로그래밍 인터페이스(API)로서 소프트웨어 개발 커뮤니티에게 노출될 수 있다. 컴퓨터 프로그램은 전형적으로 컴퓨터의 다양한 메모리 및 저장 디바이스에 다양한 시간에 설정된 하나 이상의 명령어로 구성되며, 컴퓨터의 하나 이상의 프로세서에 의해 판독되고 실행될 때 컴퓨터가 다양한 양태를 수반하는 요소를 실행하는 데 필요한 동작을 수행하게 한다.
기계 판독 가능 매체는 컴퓨팅 디바이스에 의해 실행될 때 디바이스가 다양한 방법을 수행하게 하는 소프트웨어 및 데이터를 저장하는 데 사용될 수 있다. 실행 가능한 소프트웨어 및 데이터는 예를 들어 ROM, 휘발성 RAM, 비휘발성 메모리 및/또는 캐시를 비롯한 다양한 위치에 저장될 수 있다. 이러한 소프트웨어 및/또는 데이터의 부분은 이러한 저장 디바이스 중 임의의 하나에 저장될 수 있다. 또한, 중앙 집중식 서버 또는 피어 투 피어 네트워크에서 데이터와 명령어를 획득할 수 있다. 데이터 및 명령어의 상이한 부분이 상이한 시간에 상이한 통신 세션에서 또는 동일한 통신 세션에서 상이한 중앙 집중식 서버 및/또는 피어 투 피어 네트워크에서 획득될 수 있다. 데이터 및 명령어는 애플리케이션 실행 전에 전체적으로 획득할 수 있다. 대안적으로, 실행에 필요할 때 데이터 및 명령어의 일부는 동적으로 적시에 획득될 수 있다. 따라서, 데이터 및 명령어가 특정 시간 인스턴스에 완전히 기계 판독 가능 매체에 있을 필요는 없다.
컴퓨터 판독 가능 매체의 예는 특히 휘발성 및 비휘발성 메모리 디바이스, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 플래시 메모리 디바이스, 솔리드 스테이트 드라이브 저장 매체, 이동식 디스크, 자기 디스크 저장 매체, 광학 저장 매체(예를 들어, 콤팩트 디스크 판독 전용 메모리(CD ROM), 디지털 다용도 디스크(DVD) 등)와 같은 기록 가능 및 비기록 유형 매체를 포함하지만 이에 제한되지 않는다. 컴퓨터 판독 가능 매체는 명령어를 저장할 수 있다.
일반적으로, 유형 또는 비일시적 기계 판독 가능 매체는 기계(예를 들어, 컴퓨터, 모바일 디바이스, 네트워크 디바이스, 개인용 디지털 단말, 제조 도구, 기타 하나 이상의 프로세서 세트를 갖는 임의의 디바이스 등)에 의해 액세스 가능한 형태로 정보를 제공(예를 들어, 저장)하는 임의의 메커니즘을 포함한다.
다양한 실시예에서, 하드와이어드 회로부가 기술을 구현하기 위해 소프트웨어 및 펌웨어 명령어와 조합하여 사용될 수 있다. 따라서, 기술은 하드웨어 회로부 및 소프트웨어의 임의의 특정 조합이나 컴퓨팅 디바이스에 의해 실행되는 명령어에 대한 임의의 특정 소스로 제한되지 않는다.
일부 도면은 특정 순서로 다수의 동작을 예시하지만, 순서에 의존하지 않는 동작은 재정렬될 수 있고 다른 동작은 조합되거나 분할될 수 있다. 일부 재정렬 또는 다른 그룹화를 구체적으로 언급하지만, 본 기술 분야의 숙련자는 다른 것들을 명백히 알 수 있을 것이고 따라서 대안의 완전한 목록을 제시하지는 않는다. 더욱이, 스테이지는 하드웨어, 펌웨어, 소프트웨어 또는 그 임의의 조합으로 구현될 수 있음을 인식해야 한다.
앞서 설명한 명세서에서, 본 개시는 그 특정 예시적인 실시예를 참조하여 설명되었다. 하기 청구범위에 설명된 바와 같은 보다 넓은 사상 및 범위를 벗어나지 않고 다양한 수정이 이루어질 수 있음이 명백할 것이다. 따라서, 본 명세서 및 도면은 제한적인 의미가 아니라 예시적인 의미로 고려되어야 한다.
본 출원에 설명된 다양한 실시예는 매우 다양한 상이한 유형의 컴퓨팅 디바이스를 사용하여 구현될 수 있다. 본 출원에 사용될 때, "컴퓨팅 디바이스"의 예는 서버, 중앙 집중식 컴퓨팅 플랫폼, 다중 컴퓨팅 프로세서 및/또는 컴포넌트의 시스템, 모바일 디바이스, 사용자 단말, 차량, 개인 통신 디바이스, 웨어러블 디지털 디바이스, 전자 키오스크, 범용 컴퓨터, 전자 문서 판독기, 태블릿, 랩톱 컴퓨터, 스마트폰, 디지털 카메라, 가정용 가전 제품, 텔레비전 또는 디지털 음악 플레이어를 포함하지만 이에 제한되지 않는다. 컴퓨팅 디바이스의 추가적인 예에는 "사물 인터넷"(IOT)이라고 지칭되는 것의 일부인 디바이스가 포함된다. 이러한 "사물"은 사물을 모니터링하거나 이러한 사물의 설정을 수정할 수 있는 그 소유자 또는 관리자와 가끔 상호 작용할 수 있다. 일부 경우에, 이러한 소유자 또는 관리자가 "사물" 디바이스와 관련한 사용자의 역할을 한다. 일부 예에서, 사용자의 주 모바일 디바이스(예를 들어, Apple iPhone)는 사용자가 착용한 페어링된 "사물" 디바이스(예를 들어, Apple 워치)에 대한 관리자 서버일 수 있다.
일부 실시예에서, 컴퓨팅 디바이스는 컴퓨터 또는 호스트 시스템일 수 있으며, 이는 예를 들어 데스크탑 컴퓨터, 랩톱 컴퓨터, 네트워크 서버, 모바일 디바이스, 또는 메모리 및 처리 디바이스를 포함하는 기타 컴퓨팅 디바이스로 구현된다. 호스트 시스템은 호스트 시스템이 메모리 서브시스템으로부터 데이터를 판독하거나 메모리 서브시스템에 데이터를 기록할 수 있게 메모리 서브시스템을 포함하거나 이에 결합될 수 있다. 호스트 시스템은 물리적 호스트 인터페이스를 통해 메모리 서브시스템에 결합될 수 있다. 일반적으로, 호스트 시스템은 동일한 통신 연결, 다중 개별 통신 연결, 및/또는 통신 연결의 조합을 통해 다중 메모리 서브시스템에 액세스할 수 있다.
Claims (20)
- 방법에 있어서,
적어도 하나의 처리 디바이스에 의해, 상이한 메모리 유형들의 메모리 디바이스들을 위한 네임스페이스(namespace)들을 생성하는 단계로서, 상기 네임스페이스들은 제1 메모리 유형의 제1 메모리 디바이스를 위한 제1 네임스페이스, 및 제2 메모리 유형의 제2 메모리 디바이스를 위한 제2 네임스페이스를 포함하는, 상기 네임스페이스들을 생성하는 단계;
상기 제1 네임스페이스에 데이터를 바인딩하는 단계(binding); 및
상기 데이터를 상기 제1 네임스페이스에 바인딩한 것에 응답하여, 상기 데이터를 상기 제1 메모리 디바이스에 저장하는 단계를 포함하는, 방법. - 제1항에 있어서, 상기 데이터를 상기 제1 메모리 디바이스에 저장하는 단계는 상기 데이터를 상기 제2 메모리 디바이스로부터 상기 제1 메모리 디바이스로 이동시키는 단계를 포함하는, 방법.
- 제1항에 있어서, 상기 데이터를 상기 제1 네임스페이스에 바인딩하는 단계는 상기 제2 네임스페이스에서 상기 제1 네임스페이스로 상기 데이터의 바인딩에서의 변화를 포함하는, 방법.
- 제1항에 있어서, 운영 체제가 상기 적어도 하나의 처리 디바이스 상에서 실행되고 있고, 상기 데이터를 상기 제1 네임스페이스에 바인딩하는 것은 애플리케이션에 의한 요청에 응답하여 상기 운영 체제에 의해 수행되는, 방법.
- 제4항에 있어서, 상기 제1 네임스페이스는 상기 애플리케이션의 요청에 응답하여 상기 운영 체제에 의해 생성되는, 방법.
- 제1항에 있어서, 상기 네임스페이스를 생성하는 단계는 각각의 가상 어드레스를 각각의 네임스페이스에 연관시키는 단계를 포함하는, 방법.
- 제6항에 있어서, 상기 데이터를 상기 제1 네임스페이스에 바인딩하는 단계는 상기 제1 네임스페이스의 가상 어드레스와 상기 제1 메모리 디바이스의 제1 물리 어드레스 간의 맵핑을 저장하는 단계를 포함하는, 방법.
- 제7항에 있어서, 상기 제1 네임스페이스의 가상 어드레스는 상기 적어도 하나의 처리 디바이스의 어드레스 공간의 제1 어드레스 범위 내에 있고, 상기 맵핑을 저장하는 단계는 상기 제1 어드레스 범위를 상기 제1 메모리 디바이스와 연관시키는 메타데이터를 저장하는 단계를 포함하는, 방법.
- 제7항에 있어서, 상기 제1 네임스페이스의 가상 어드레스는 페이지 테이블을 이용하여 운영 체제에 의해 관리되는 프로세스의 가상 페이지에 대응하고, 상기 맵핑을 저장하는 단계는 상기 제1 네임스페이스의 가상 어드레스를 상기 제1 물리 어드레스에 맵핑하는 페이지 테이블 엔트리를 상기 페이지 테이블에 생성하는 단계를 포함하는, 방법.
- 제1항에 있어서, 운영 체제에 의해 메모리에, 상기 네임스페이스들과 상기 네임스페이스들에 바인딩된 데이터의 세트들 사이의 연관들을 저장하는 단계를 더 포함하는, 방법.
- 제1항에 있어서,
상기 적어도 하나의 처리 디바이스 상에서 실행되는 애플리케이션에 대한 우선순위의 증가를 결정하는 단계;를 더 포함하고,
상기 데이터를 상기 제1 네임스페이스에 바인딩하는 것은 상기 우선순위의 증가를 결정한 것에 응답하여 수행되고, 상기 데이터를 상기 제1 네임스페이스에 바인딩하는 것은 상기 제2 네임스페이스로부터 상기 제1 네임스페이스로의 바인딩의 변화를 포함하고, 상기 제1 메모리 디바이스의 레이턴시는 상기 제2 메모리 디바이스의 레이턴시보다 작은, 방법. - 제1항에 있어서, 상기 제1 네임스페이스를 생성하는 단계는 상기 제1 메모리 디바이스의 메모리에 상기 제1 네임스페이스의 식별자를 저장하는 단계를 포함하는, 방법.
- 제1항에 있어서, 애플리케이션으로부터, 메모리의 할당에 대한 요청을 수신하는 단계를 더 포함하고, 상기 요청은 상기 데이터가 상기 제1 메모리 유형의 물리적 메모리에 저장되도록 특정하는, 방법.
- 시스템에 있어서,
제1 메모리 유형의 제1 메모리 디바이스;
적어도 하나의 처리 디바이스; 및
메모리로서,
애플리케이션에 의해 사용하기 위해 네임스페이스로부터의 메모리를 운영 체제에 의해 할당하고, 상기 네임스페이스는 물리적 어드레스가 정의되는 하나 이상의 물리적 메모리 디바이스에 대한 논리적 참조이고;
상기 네임스페이스를 상기 제1 메모리 유형에 바인딩하고; 및
상기 네임스페이스를 상기 제1 메모리 유형에 바인딩한 것에 응답하여, 상기 운영 체제에 의해, 상기 네임스페이스의 논리 메모리 어드레스를 상기 제1 메모리 디바이스에 맵핑하도록 페이지 테이블을 조정하도록 상기 적어도 하나의 처리 디바이스에 지시하도록 구성된 명령어들을 포함하는, 상기 메모리를 포함하는, 시스템. - 제14항에 있어서, 상기 명령어들은 상기 페이지 테이블로부터의 데이터를 사용하여, 상기 네임스페이스의 상기 논리적 메모리 어드레스에 대응하는 상기 제1 메모리 디바이스의 제1 물리적 어드레스에서의 데이터에 액세스하도록 상기 적어도 하나의 처리 디바이스에 지시하도록 추가로 구성된, 시스템.
- 제15항에 있어서, 상기 페이지 테이블로부터의 데이터는 변환 색인 버퍼(translation lookaside buffer)에 캐싱되고, 메모리 관리 유닛은 상기 논리적 메모리 어드레스를 상기 제1 물리적 어드레스로 변환시키기 위해 상기 변환 색인 버퍼에 액세스하는, 시스템.
- 제14항에 있어서, 제2 메모리 유형의 제2 메모리 디바이스를 더 포함하고, 상기 명령어들은, 상기 페이지 테이블로부터의 데이터를 사용하여, 제2 메모리 유형의 제2 메모리 디바이스로부터 상기 제1 메모리 디바이스로 이동시킴으로써 상기 제1 메모리 디바이스에 상기 데이터를 저장하도록 상기 적어도 하나의 처리 디바이스에 지시하도록 추가로 구성된, 시스템.
- 명령어들을 저장하는 비일시적 기계 판독 가능 저장 매체에 있어서, 상기 명령어들은 적어도 하나의 처리 디바이스 상에서 실행될 때, 상기 적어도 하나의 처리 디바이스로 하여금 적어도,
다른 메모리 유형의 메모리 디바이스들을 위한 네임스페이스를 생성하고, 상기 네임스페이스는 제1 메모리 유형의 제1 메모리 디바이스를 위한 제1 네임스페이스 및 제2 메모리 유형의 제2 메모리 디바이스를 위한 제2 네임스페이스를 포함하고;
상기 제1 네임스페이스에 데이터를 바인딩하고; 및
상기 데이터를 상기 제1 네임스페이스에 바인딩한 것에 응답하여, 상기 데이터를 상기 제1 메모리 디바이스에 저장하게 하는, 비일시적 기계 판독 가능 저장 매체. - 제18항에 있어서,
상기 데이터를 상기 제1 네임스페이스에 바인딩하는 것은 애플리케이션으로부터 수신된 상기 제1 메모리 유형에 대한 요청에 응답하여 수행되고;
상기 데이터를 상기 제1 네임스페이스에 바인딩하는 것은 상기 제2 네임스페이스로부터 상기 제1 네임스페이스로의 데이터에 대한 바인딩에서의 변화를 포함하고; 및
상기 제1 메모리 디바이스의 기능 특성은 상기 제2 메모리 디바이스의 기능 특성과 상이한, 비일시적 기계 판독 가능 저장 매체. - 제18항에 있어서,
상기 데이터를 상기 제1 네임스페이스에 바인딩하는 단계는 상기 제1 네임스페이스의 가상 어드레스 범위와 상기 제1 메모리 디바이스의 제1 물리적 어드레스 사이의 맵핑을 저장하는 단계를 포함하고; 및
상기 맵핑을 저장하는 단계는 상기 가상 어드레스 범위를 상기 제1 메모리 디바이스와 연관시키는 메타데이터를 저장하는 단계를 포함하는, 비일시적 기계 판독 가능 저장 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/573,535 US10963396B1 (en) | 2019-09-17 | 2019-09-17 | Memory system for binding data to a memory namespace |
US16/573,535 | 2019-09-17 | ||
PCT/US2020/051063 WO2021055469A1 (en) | 2019-09-17 | 2020-09-16 | Memory system for binding data to a memory namespace |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20220049026A true KR20220049026A (ko) | 2022-04-20 |
Family
ID=74869553
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020227008801A KR20220049026A (ko) | 2019-09-17 | 2020-09-16 | 메모리 네임스페이스에 대한 데이터 바인딩을 위한 메모리 시스템 |
Country Status (7)
Country | Link |
---|---|
US (4) | US10963396B1 (ko) |
EP (1) | EP4031974A4 (ko) |
JP (1) | JP7427081B2 (ko) |
KR (1) | KR20220049026A (ko) |
CN (1) | CN114402291A (ko) |
TW (1) | TWI764265B (ko) |
WO (1) | WO2021055469A1 (ko) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102018205204A1 (de) * | 2018-04-06 | 2019-10-10 | Robert Bosch Gmbh | Verfahren zum Bereitstellen von Anwendungsdaten zumindest einer auf einem Steuergerät eines Fahrzeugs ausführbaren Anwendung, Verfahren zum Kalibrieren eines Steuergeräts, Steuergerät und Auswerteeinrichtung |
US11269780B2 (en) | 2019-09-17 | 2022-03-08 | Micron Technology, Inc. | Mapping non-typed memory access to typed memory access |
US11494311B2 (en) | 2019-09-17 | 2022-11-08 | Micron Technology, Inc. | Page table hooks to memory types |
US10963396B1 (en) | 2019-09-17 | 2021-03-30 | Micron Technology, Inc. | Memory system for binding data to a memory namespace |
US11650742B2 (en) | 2019-09-17 | 2023-05-16 | Micron Technology, Inc. | Accessing stored metadata to identify memory devices in which data is stored |
US11061770B1 (en) * | 2020-06-30 | 2021-07-13 | EMC IP Holding Company LLC | Reconstruction of logical pages in a storage system |
TWI786461B (zh) * | 2020-11-09 | 2022-12-11 | 財團法人工業技術研究院 | 基於Modbus的資訊轉譯裝置、方法、系統及電腦可讀記錄媒體 |
US20220382478A1 (en) * | 2021-06-01 | 2022-12-01 | Samsung Electronics Co., Ltd. | Systems, methods, and apparatus for page migration in memory systems |
US20240069722A1 (en) * | 2022-08-31 | 2024-02-29 | Nvidia Corporation | Dynamically assigning namespace type to memory devices |
KR20240142207A (ko) * | 2023-03-21 | 2024-09-30 | 삼성전자주식회사 | 직접 메모리 접근을 제공하는 스토리지 장치, 이를 포함하는 컴퓨팅 시스템 및 스토리지 장치의 동작 방법 |
Family Cites Families (130)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6376034A (ja) | 1986-09-19 | 1988-04-06 | Hitachi Ltd | 多重アドレス空間制御方式 |
JP3369580B2 (ja) * | 1990-03-12 | 2003-01-20 | ヒューレット・パッカード・カンパニー | 直接メモリアクセスを行うためのインターフェース装置及び方法 |
US6256714B1 (en) * | 1998-09-02 | 2001-07-03 | Sharp Laboratories Of America, Inc. | Computer system with efficient memory usage for managing multiple application programs |
US6681311B2 (en) | 2001-07-18 | 2004-01-20 | Ip-First, Llc | Translation lookaside buffer that caches memory type information |
US7346664B2 (en) | 2003-04-24 | 2008-03-18 | Neopath Networks, Inc. | Transparent file migration using namespace replication |
US7444547B2 (en) | 2003-06-19 | 2008-10-28 | International Business Machines Corproation | Method, system, and product for programming in a simultaneous multi-threaded processor environment |
JP2005216053A (ja) | 2004-01-30 | 2005-08-11 | Matsushita Electric Ind Co Ltd | 最適メモリ配置演算装置及び最適メモリ配置方法 |
US7533195B2 (en) | 2004-02-25 | 2009-05-12 | Analog Devices, Inc. | DMA controller for digital signal processors |
US7269708B2 (en) | 2004-04-20 | 2007-09-11 | Rambus Inc. | Memory controller for non-homogenous memory system |
US7552282B1 (en) | 2004-08-04 | 2009-06-23 | Emc Corporation | Method, computer readable medium, and data storage system for selective data replication of cached data |
JP4643395B2 (ja) | 2004-08-30 | 2011-03-02 | 株式会社日立製作所 | ストレージシステム及びデータの移動方法 |
JP5338859B2 (ja) | 2004-10-27 | 2013-11-13 | ソニー株式会社 | 記憶装置および情報処理システム |
US8452929B2 (en) | 2005-04-21 | 2013-05-28 | Violin Memory Inc. | Method and system for storage of data in non-volatile media |
US7984084B2 (en) | 2005-08-03 | 2011-07-19 | SanDisk Technologies, Inc. | Non-volatile memory with scheduled reclaim operations |
US7669003B2 (en) | 2005-08-03 | 2010-02-23 | Sandisk Corporation | Reprogrammable non-volatile memory systems with indexing of directly stored data files |
US7949845B2 (en) | 2005-08-03 | 2011-05-24 | Sandisk Corporation | Indexing of file data in reprogrammable non-volatile memories that directly store data files |
US7533198B2 (en) | 2005-10-07 | 2009-05-12 | International Business Machines Corporation | Memory controller and method for handling DMA operations during a page copy |
JP2007254204A (ja) | 2006-03-23 | 2007-10-04 | Seiko Epson Corp | マルチレンズアレイの強化処理方法 |
JP2008077325A (ja) | 2006-09-20 | 2008-04-03 | Hitachi Ltd | ストレージ装置及びストレージ装置に対する設定方法 |
US11336511B2 (en) * | 2006-09-25 | 2022-05-17 | Remot3.It, Inc. | Managing network connected devices |
US8621138B2 (en) | 2007-12-27 | 2013-12-31 | Sandisk Enterprise Ip Llc | Flash storage controller execute loop |
US8270356B2 (en) * | 2008-01-22 | 2012-09-18 | Lg Electronics Inc. | Method for encoding data unit by using a plurality of CRC algorithms |
US8151076B2 (en) * | 2008-04-04 | 2012-04-03 | Cisco Technology, Inc. | Mapping memory segments in a translation lookaside buffer |
US20090254851A1 (en) | 2008-04-08 | 2009-10-08 | Techneos Systems Inc. | Method and system for conducting a survey by using a wireless device |
US8725927B2 (en) | 2008-10-15 | 2014-05-13 | Micron Technology, Inc. | Hot memory block table in a solid state storage device |
US8112585B2 (en) | 2009-04-30 | 2012-02-07 | Netapp, Inc. | Method and apparatus for dynamically switching cache policies |
US8117496B2 (en) * | 2009-06-18 | 2012-02-14 | International Business Machines Corporation | Detecting and recovering from silent data errors in application cloning systems |
JP5531476B2 (ja) | 2009-07-15 | 2014-06-25 | 富士ゼロックス株式会社 | 情報処理装置及び情報処理プログラム |
JP2011154547A (ja) | 2010-01-27 | 2011-08-11 | Toshiba Corp | メモリ管理装置及びメモリ管理方法 |
US8694304B2 (en) | 2010-03-26 | 2014-04-08 | Virtuoz Sa | Semantic clustering and user interfaces |
US9075733B1 (en) | 2010-05-20 | 2015-07-07 | Seagate Technology Llc | Selective storage of address mapping metadata in a system having multiple memories |
US8328976B2 (en) | 2010-06-13 | 2012-12-11 | Lianyungang Zhongfu Lianzhong Composites Group Co., Ltd. | Method of manufacturing root of megawatt wind-turbine blade |
US8521944B2 (en) | 2010-08-31 | 2013-08-27 | Intel Corporation | Performing memory accesses using memory context information |
US8595463B2 (en) | 2010-09-15 | 2013-11-26 | International Business Machines Corporation | Memory architecture with policy based data storage |
US8706697B2 (en) | 2010-12-17 | 2014-04-22 | Microsoft Corporation | Data retention component and framework |
US8930647B1 (en) | 2011-04-06 | 2015-01-06 | P4tents1, LLC | Multiple class memory systems |
US9558040B2 (en) | 2011-06-20 | 2017-01-31 | Microsoft Technology Licensing, Llc | Memory manager with enhanced application metadata |
US8935491B2 (en) | 2011-07-15 | 2015-01-13 | Throughputer, Inc. | Memory architecture for dynamically allocated manycore processor |
US20150081965A1 (en) | 2012-04-27 | 2015-03-19 | Hitachi, Ltd. | Data management system and data management method |
US9678863B2 (en) | 2012-06-12 | 2017-06-13 | Sandisk Technologies, Llc | Hybrid checkpointed memory |
US9524248B2 (en) | 2012-07-18 | 2016-12-20 | Micron Technology, Inc. | Memory management for a hierarchical memory system |
US10303618B2 (en) | 2012-09-25 | 2019-05-28 | International Business Machines Corporation | Power savings via dynamic page type selection |
US9304828B2 (en) | 2012-09-27 | 2016-04-05 | Hitachi, Ltd. | Hierarchy memory management |
US9747000B2 (en) | 2012-10-02 | 2017-08-29 | Razer (Asia-Pacific) Pte. Ltd. | Launching applications on an electronic device |
US20140101370A1 (en) | 2012-10-08 | 2014-04-10 | HGST Netherlands B.V. | Apparatus and method for low power low latency high capacity storage class memory |
US9330736B2 (en) | 2012-11-09 | 2016-05-03 | Qualcomm Incorporated | Processor memory optimization via page access counting |
WO2014102886A1 (en) | 2012-12-28 | 2014-07-03 | Hitachi, Ltd. | Information processing apparatus and cache control method |
US9652376B2 (en) | 2013-01-28 | 2017-05-16 | Radian Memory Systems, Inc. | Cooperative flash memory control |
US9229854B1 (en) | 2013-01-28 | 2016-01-05 | Radian Memory Systems, LLC | Multi-array operation support and related devices, systems and software |
CN103174406B (zh) | 2013-03-13 | 2015-12-02 | 吉林大学 | 一种油页岩地下原位加热的方法 |
US20140351151A1 (en) | 2013-05-23 | 2014-11-27 | International Business Machines Corporation | Providing a lease period determination |
KR20150044370A (ko) | 2013-10-16 | 2015-04-24 | 삼성전자주식회사 | 이종 메모리들을 관리하는 시스템들 |
WO2015061965A1 (en) | 2013-10-29 | 2015-05-07 | Hua Zhong University Of Science Technology | Mixed cache management |
CA2881206A1 (en) | 2014-02-07 | 2015-08-07 | Andrew WARFIELD | Methods, systems and devices relating to data storage interfaces for managing address spaces in data storage devices |
US9594508B2 (en) | 2014-03-04 | 2017-03-14 | Kabushiki Kaisha Toshiba | Computer system having tiered block storage device, storage controller, file arrangement method and storage medium |
JP6118285B2 (ja) | 2014-03-20 | 2017-04-19 | 株式会社東芝 | キャッシュメモリシステムおよびプロセッサシステム |
US10108220B2 (en) | 2014-05-01 | 2018-10-23 | Wisconsin Alumni Research Foundation | Computer architecture having selectable, parallel and serial communication channels between processors and memory |
US9450879B2 (en) | 2014-05-09 | 2016-09-20 | Nexgen Storage, Inc. | Adaptive bandwidth throttling |
US9792227B2 (en) | 2014-08-19 | 2017-10-17 | Samsung Electronics Co., Ltd. | Heterogeneous unified memory |
WO2016041156A1 (zh) | 2014-09-17 | 2016-03-24 | 华为技术有限公司 | Cpu调度的方法和装置 |
JP2016085677A (ja) | 2014-10-28 | 2016-05-19 | 富士通株式会社 | メモリ管理方法、メモリ管理プログラム及び情報処理装置 |
KR20160052240A (ko) | 2014-11-04 | 2016-05-12 | 삼성전자주식회사 | 복수의 메모리 장치들을 관리하기 위한 방법 및 장치 |
US9977734B2 (en) | 2014-12-11 | 2018-05-22 | Toshiba Memory Corporation | Information processing device, non-transitory computer readable recording medium, and information processing system |
US9766819B2 (en) | 2014-12-30 | 2017-09-19 | Sandisk Technologies Llc | Systems and methods for managing storage endurance |
US10691375B2 (en) | 2015-01-30 | 2020-06-23 | Hewlett Packard Enterprise Development Lp | Memory network to prioritize processing of a memory access request |
WO2016134035A1 (en) * | 2015-02-17 | 2016-08-25 | Coho Data, Inc. | Virtualized application-layer space for data processing in data storage systems |
US10049035B1 (en) | 2015-03-10 | 2018-08-14 | Reniac, Inc. | Stream memory management unit (SMMU) |
JP6384375B2 (ja) | 2015-03-23 | 2018-09-05 | 富士通株式会社 | 情報処理装置、記憶装置制御方法、記憶装置制御プログラム及び情報処理システム |
US10331384B2 (en) | 2015-03-31 | 2019-06-25 | International Business Machines Corporation | Storing data utilizing a maximum accessibility approach in a dispersed storage network |
US10157008B2 (en) | 2015-04-29 | 2018-12-18 | Qualcomm Incorporated | Systems and methods for optimizing memory power consumption in a heterogeneous system memory |
US10235282B2 (en) | 2015-06-01 | 2019-03-19 | Hitachi, Ltd. | Computer system, computer, and method to manage allocation of virtual and physical memory areas |
US10476767B2 (en) * | 2015-06-22 | 2019-11-12 | Draios, Inc. | Communication between independent containers |
JP6403162B2 (ja) | 2015-07-23 | 2018-10-10 | 東芝メモリ株式会社 | メモリシステム |
US9734009B2 (en) | 2015-10-08 | 2017-08-15 | Sandisk Technologies Llc | Data encoding techniques for a device |
US10289722B2 (en) * | 2015-11-17 | 2019-05-14 | Samsung Electronics Co., Ltd. | System and methods for multi-level key-value store |
US10216643B2 (en) * | 2015-11-23 | 2019-02-26 | International Business Machines Corporation | Optimizing page table manipulations |
US10248447B2 (en) | 2015-11-25 | 2019-04-02 | Red Hat, Inc. | Providing link aggregation and high availability through network virtualization layer |
US20170153892A1 (en) | 2015-11-30 | 2017-06-01 | Intel Corporation | Instruction And Logic For Programmable Fabric Hierarchy And Cache |
US10095413B2 (en) * | 2016-01-28 | 2018-10-09 | Toshiba Memory Corporation | Memory system with address translation between a logical address and a physical address |
US10007614B2 (en) | 2016-02-02 | 2018-06-26 | Cavium, Inc. | Method and apparatus for determining metric for selective caching |
JP2017138852A (ja) | 2016-02-04 | 2017-08-10 | 株式会社東芝 | 情報処理装置、記憶装置およびプログラム |
JP2017138823A (ja) | 2016-02-04 | 2017-08-10 | キヤノン株式会社 | 情報処理装置、情報処理方法および撮像装置 |
JP6423809B2 (ja) | 2016-02-19 | 2018-11-14 | イーソル株式会社 | オペレーティングシステム、プログラミングシステム及びメモリ割り当て方法 |
US11977484B2 (en) | 2016-07-19 | 2024-05-07 | Sap Se | Adapting in-memory database in hybrid memory systems and operating system interface |
JP6674101B2 (ja) | 2016-07-27 | 2020-04-01 | 富士通株式会社 | 制御装置および情報処理システム |
US10223228B2 (en) | 2016-08-12 | 2019-03-05 | International Business Machines Corporation | Resolving application multitasking degradation |
JP6666813B2 (ja) * | 2016-08-24 | 2020-03-18 | キオクシア株式会社 | 記憶装置及びその制御方法 |
US10372635B2 (en) | 2016-08-26 | 2019-08-06 | Qualcomm Incorporated | Dynamically determining memory attributes in processor-based systems |
JP2018049385A (ja) | 2016-09-20 | 2018-03-29 | 東芝メモリ株式会社 | メモリシステムおよびプロセッサシステム |
JP2018049381A (ja) | 2016-09-20 | 2018-03-29 | 東芝メモリ株式会社 | メモリ制御回路、メモリシステムおよびプロセッサシステム |
US20180173419A1 (en) | 2016-12-21 | 2018-06-21 | Western Digital Technologies, Inc. | Hybrid ssd with delta encoding |
US10409603B2 (en) * | 2016-12-30 | 2019-09-10 | Intel Corporation | Processors, methods, systems, and instructions to check and store indications of whether memory addresses are in persistent memory |
JP6391719B2 (ja) | 2017-01-10 | 2018-09-19 | マイクロン テクノロジー, インク. | トレーニング、データ再構築および/またはシャドウィングを含むメモリシステムおよび方法 |
US11886732B2 (en) | 2017-01-31 | 2024-01-30 | Seagate Technology Llc | Data storage server with multi-memory migration |
US10482049B2 (en) * | 2017-02-03 | 2019-11-19 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Configuring NVMe devices for redundancy and scaling |
US10866912B2 (en) * | 2017-03-10 | 2020-12-15 | Toshiba Memory Corporation | Integrated heterogeneous solid state storage drive |
US10289555B1 (en) | 2017-04-14 | 2019-05-14 | EMC IP Holding Company LLC | Memory read-ahead using learned memory access patterns |
US10747568B2 (en) | 2017-05-30 | 2020-08-18 | Magalix Corporation | Systems and methods for managing a cloud computing environment |
US10339067B2 (en) | 2017-06-19 | 2019-07-02 | Advanced Micro Devices, Inc. | Mechanism for reducing page migration overhead in memory systems |
KR102319189B1 (ko) | 2017-06-21 | 2021-10-28 | 삼성전자주식회사 | 스토리지 장치, 이를 포함하는 스토리지 시스템 및 스토리지 장치의 동작 방법 |
US20200174926A1 (en) | 2017-06-22 | 2020-06-04 | Telefonaktiebolaget Lm Ericsson (Publ) | Apparatuses and methods for allocating memory in a data center |
US10310985B2 (en) | 2017-06-26 | 2019-06-04 | Ati Technologies Ulc | Systems and methods for accessing and managing a computing system memory |
US10642744B2 (en) | 2017-06-28 | 2020-05-05 | Nvidia Corporation | Memory type which is cacheable yet inaccessible by speculative instructions |
US10152428B1 (en) | 2017-07-13 | 2018-12-11 | EMC IP Holding Company LLC | Virtual memory service levels |
US10540203B2 (en) | 2017-08-29 | 2020-01-21 | Micro Focus Llc | Combining pipelines for a streaming data system |
JP7030463B2 (ja) | 2017-09-22 | 2022-03-07 | キオクシア株式会社 | メモリシステム |
US20190095329A1 (en) | 2017-09-27 | 2019-03-28 | Intel Corporation | Dynamic page allocation in memory |
CN109656833B (zh) | 2017-10-12 | 2022-11-11 | 慧荣科技股份有限公司 | 数据储存装置 |
US10437476B2 (en) * | 2017-10-23 | 2019-10-08 | Micron Technology, Inc. | Namespaces allocation in non-volatile memory devices |
JP2019079464A (ja) * | 2017-10-27 | 2019-05-23 | 東芝メモリ株式会社 | メモリシステムおよび制御方法 |
US10678703B2 (en) * | 2017-11-16 | 2020-06-09 | Micron Technology, Inc. | Namespace mapping structual adjustment in non-volatile memory devices |
US11138121B2 (en) | 2017-11-20 | 2021-10-05 | Samsung Electronics Co., Ltd. | Systems and methods for efficient cacheline handling based on predictions |
US11231852B2 (en) | 2017-12-18 | 2022-01-25 | Microsoft Technology Licensing, Llc | Efficient sharing of non-volatile memory |
US20190213165A1 (en) | 2018-01-09 | 2019-07-11 | Qualcomm Incorporated | Priority scheme for fast arbitration procedures |
US11416395B2 (en) | 2018-02-05 | 2022-08-16 | Micron Technology, Inc. | Memory virtualization for accessing heterogeneous memory components |
US10528489B2 (en) | 2018-02-28 | 2020-01-07 | Micron Technology, Inc. | Multiple memory type memory module systems and methods |
JP6508382B1 (ja) | 2018-03-26 | 2019-05-08 | 日本電気株式会社 | 情報処理装置、情報処理方法、プログラム |
US20190370043A1 (en) | 2018-04-30 | 2019-12-05 | Nutanix, Inc. | Cooperative memory management |
KR102518095B1 (ko) | 2018-09-12 | 2023-04-04 | 삼성전자주식회사 | 스토리지 장치 및 시스템 |
US10795586B2 (en) | 2018-11-19 | 2020-10-06 | Alibaba Group Holding Limited | System and method for optimization of global data placement to mitigate wear-out of write cache and NAND flash |
US11144231B2 (en) * | 2018-12-12 | 2021-10-12 | International Business Machines Corporation | Relocation and persistence of named data elements in coordination namespace |
US10725853B2 (en) | 2019-01-02 | 2020-07-28 | Formulus Black Corporation | Systems and methods for memory failure prevention, management, and mitigation |
US11307768B2 (en) * | 2019-06-07 | 2022-04-19 | Seagate Technology Llc | Namespace auto-routing data storage system |
US11494311B2 (en) | 2019-09-17 | 2022-11-08 | Micron Technology, Inc. | Page table hooks to memory types |
US10963396B1 (en) | 2019-09-17 | 2021-03-30 | Micron Technology, Inc. | Memory system for binding data to a memory namespace |
US11269780B2 (en) | 2019-09-17 | 2022-03-08 | Micron Technology, Inc. | Mapping non-typed memory access to typed memory access |
US11650742B2 (en) | 2019-09-17 | 2023-05-16 | Micron Technology, Inc. | Accessing stored metadata to identify memory devices in which data is stored |
US11899952B2 (en) * | 2020-10-29 | 2024-02-13 | Seagate Technology Llc | Lossless namespace metadata management system |
US20220147279A1 (en) * | 2020-11-06 | 2022-05-12 | Seagate Technology Llc | Heat management solid-state data storage system |
US11474749B2 (en) * | 2021-01-21 | 2022-10-18 | EMC IP Holding Company LLC | Configuring host access for virtual volumes |
-
2019
- 2019-09-17 US US16/573,535 patent/US10963396B1/en active Active
-
2020
- 2020-09-07 TW TW109130615A patent/TWI764265B/zh active
- 2020-09-16 JP JP2022517126A patent/JP7427081B2/ja active Active
- 2020-09-16 EP EP20865294.1A patent/EP4031974A4/en active Pending
- 2020-09-16 WO PCT/US2020/051063 patent/WO2021055469A1/en unknown
- 2020-09-16 KR KR1020227008801A patent/KR20220049026A/ko unknown
- 2020-09-16 CN CN202080064626.2A patent/CN114402291A/zh active Pending
-
2021
- 2021-03-04 US US17/192,744 patent/US11526450B2/en active Active
-
2022
- 2022-11-08 US US18/053,685 patent/US11934319B2/en active Active
-
2024
- 2024-03-13 US US18/604,086 patent/US20240248854A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP4031974A4 (en) | 2023-10-18 |
US20210081325A1 (en) | 2021-03-18 |
TW202117544A (zh) | 2021-05-01 |
TWI764265B (zh) | 2022-05-11 |
US20240248854A1 (en) | 2024-07-25 |
JP2022548886A (ja) | 2022-11-22 |
WO2021055469A1 (en) | 2021-03-25 |
US20230080030A1 (en) | 2023-03-16 |
EP4031974A1 (en) | 2022-07-27 |
US11526450B2 (en) | 2022-12-13 |
CN114402291A (zh) | 2022-04-26 |
JP7427081B2 (ja) | 2024-02-02 |
US10963396B1 (en) | 2021-03-30 |
US11934319B2 (en) | 2024-03-19 |
US20210191875A1 (en) | 2021-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11868268B2 (en) | Mapping non-typed memory access to typed memory access | |
US12066951B2 (en) | Page table hooks to memory types | |
US11526450B2 (en) | Memory system for binding data to a memory namespace | |
US11650742B2 (en) | Accessing stored metadata to identify memory devices in which data is stored | |
US20210049101A1 (en) | MEMORY TIERING USING PCIe CONNECTED FAR MEMORY |