KR20180041609A - 액티브 드라이브 api - Google Patents
액티브 드라이브 api Download PDFInfo
- Publication number
- KR20180041609A KR20180041609A KR1020170133554A KR20170133554A KR20180041609A KR 20180041609 A KR20180041609 A KR 20180041609A KR 1020170133554 A KR1020170133554 A KR 1020170133554A KR 20170133554 A KR20170133554 A KR 20170133554A KR 20180041609 A KR20180041609 A KR 20180041609A
- Authority
- KR
- South Korea
- Prior art keywords
- application
- data storage
- storage drive
- applet
- dsd
- Prior art date
Links
Images
Classifications
-
- 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/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
-
- 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/0674—Disk device
- G06F3/0676—Magnetic disk device
-
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- 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/445—Program loading or initiating
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
- Storage Device Security (AREA)
Abstract
하드 디스크 드라이브, 솔리드 스테이트 드라이브, 또는 하이브리드 드라이브와 같은 데이터 스토리지 드라이브 상에서의 하나 이상의 키-값 객체들로서의 애플리케이션의 설치를 가능하게 하는 애플리케이션 프로그래밍 인터페이스(API)가 개시된다. API는, 또한, 데이터 스토리지 드라이브의 제어된 환경 내에서의 애플리케이션의 실행을 가능하게 한다.
Description
관련 출원의 상호 참조
본 특허 출원은 2016년 10월 14일자로 출원된 미국 가특허 출원 제62/408,446호의 이익을 주장하고, 그 전체 내용은 참고로 포함되며, 본 특허 출원은 본 출원과 동일자로 출원된 미국 특허 출원 제___________호를 참고하고, 그 전체 내용은 참고로 포함된다.
데이터 스토리지 드라이브들은, 전형적으로, 하나 이상의 호스트 컴퓨터들을 갖는 시스템들 내에 포함된다. 데이터 스토리지 드라이브들의 예들은, 회전하는 디스크들 및 이동가능한 판독/기록 헤드들을 포함하는 전자기계 디바이스들인 하드 디스크 드라이브(hard disk drive, HDD)들, 메모리 칩들을 사용하고 어떠한 이동 부분들도 포함하지 않는 솔리드 스테이트 드라이브(solid state drive, SSD)들, 및 하나의 유닛 내에 HDD들과 SSD들의 특징들을 조합한 하이브리드 드라이브들을 포함한다.
현재의 시스템들에서, 데이터는 데이터 스토리지 드라이브로부터 판독되어 호스트 컴퓨터로 전송된다. 이어서, 데이터는 호스트의 계산 환경 내에서 프로세싱된다.
본 발명은 데이터 스토리지 드라이브 상의 애플리케이션들의 설치 및 실행을 가능하게 하는 애플리케이션 프로그래밍 인터페이스(application programming interface, API)에 관한 것이다.
일 실시예에서, API(본 명세서에서는 액티브 드라이브 API로 지칭됨)는 데이터 스토리지 드라이브 상의 하나 이상의 키-값 객체들로서 애플리케이션의 설치를 가능하게 하고, 데이터 스토리지 드라이브의 제어된 환경 내에서의 애플리케이션의 실행을 가능하게 한다.
이러한 발명의 내용은 각각의 개시되는 실시예 또는 액티브 드라이브 API의 모든 구현예를 기술하는 것으로 의도되지 않는다. 많은 다른 신규한 이점들, 특징들, 및 관계들은 본 설명이 진행됨에 따라 명백해질 것이다. 하기의 도면들 및 설명은 예시적인 실시예들을 보다 구체적으로 예시한다.
도 1a는 액티브 드라이브 애플리케이션 프로그래밍 인터페이스(API)가 채용될 수 있는 시스템의 예시적인 동작 환경의 블록 다이어그램이다.
도 1aa는 일 실시예에 따른 데이터 스토리지 드라이브의 확대도이다.
도 1aaa는 다수의 데이터 스토리지 드라이브들이 설치될 수 있는 스토리지 구획을 포함하는 스토리지 랙(storage rack)의 일부분의 사시도이다.
도 1b는 액티브 드라이브 API가 채용될 수 있는 시스템의 다른 예시적인 동작 환경의 블록 다이어그램이다.
도 1c는 액티브 드라이브 API가 채용될 수 있는 시스템의 또 다른 예시적인 동작 환경의 블록 다이어그램이다.
도 1d는 도 1a 내지 도 1c의 시스템들 내의 데이터 스토리지 드라이브 내에 저장될 수 있는 객체의 예시적인 구조를 도시한 블록 다이어그램이다.
도 1e는 도 1a 내지 도 1c의 시스템들 내의 데이터 스토리지 드라이브 내에 저장 및 설치될 수 있고 그 안에서 실행될 수 있는 애플릿 객체의 예시적인 구조를 도시한 블록 다이어그램이다.
도 2a 및 도 2b는 액티브 드라이브 API 커맨드들을 채용한 시스템의 예시적인 실시예의 다이어그램들이다.
도 3a 내지 도 3e는 액티브 드라이브 API 커맨드들의 예들을 도시한 개략도들이다.
도 4는 방법 실시예의 흐름도이다.
도 1aa는 일 실시예에 따른 데이터 스토리지 드라이브의 확대도이다.
도 1aaa는 다수의 데이터 스토리지 드라이브들이 설치될 수 있는 스토리지 구획을 포함하는 스토리지 랙(storage rack)의 일부분의 사시도이다.
도 1b는 액티브 드라이브 API가 채용될 수 있는 시스템의 다른 예시적인 동작 환경의 블록 다이어그램이다.
도 1c는 액티브 드라이브 API가 채용될 수 있는 시스템의 또 다른 예시적인 동작 환경의 블록 다이어그램이다.
도 1d는 도 1a 내지 도 1c의 시스템들 내의 데이터 스토리지 드라이브 내에 저장될 수 있는 객체의 예시적인 구조를 도시한 블록 다이어그램이다.
도 1e는 도 1a 내지 도 1c의 시스템들 내의 데이터 스토리지 드라이브 내에 저장 및 설치될 수 있고 그 안에서 실행될 수 있는 애플릿 객체의 예시적인 구조를 도시한 블록 다이어그램이다.
도 2a 및 도 2b는 액티브 드라이브 API 커맨드들을 채용한 시스템의 예시적인 실시예의 다이어그램들이다.
도 3a 내지 도 3e는 액티브 드라이브 API 커맨드들의 예들을 도시한 개략도들이다.
도 4는 방법 실시예의 흐름도이다.
하기에 기술되는 실시예들은 데이터 스토리지 드라이브 상의 애플리케이션들의 설치 및 실행을 가능하게 하는 애플리케이션 프로그래밍 인터페이스(API)에 관한 것이다. API(본 명세서에서는 액티브 드라이브 API로 지칭됨)는, 데이터 스토리지 드라이브 상의 하나 이상의 키-값 객체들로서 애플리케이션(예컨대, 애플릿 또는 작은 애플리케이션)의 설치를 가능하게 하고, 데이터 스토리지 드라이브의 제어된 환경 내에서의 애플릿의 실행을 가능하게 한다. 객체 기반 액티브 드라이브 API의 커맨드들에 관한 세부사항을 제공하기 전에, 예시적인 동작 환경의 설명이 하기에 제공된다.
도 1a는 본 명세서에 개시되는 소정의 특정 실시예들이 포함될 수 있는 예시적인 동작 환경을 도시한다. 도 1a에 도시된 동작 환경은 단지 예시적인 목적들을 위한 것이다. 본 발명의 실시예들은 도 1a에 도시된 동작 환경과 같은 임의의 특정 동작 환경으로 제한되지 않는다. 본 발명의 실시예들은 임의의 수의 상이한 타입들의 동작 환경들 내에서 예시적으로 실시될 수 있다. 동일한 참조 번호들은 동일하거나 유사한 요소들에 대해 상이한 도면들에서 사용된다는 것에 주목해야 한다.
도 1a는 적어도 하나의 호스트(102) 및 적어도 하나의 데이터 스토리지 드라이브(data storage drive, DSD)(104)를 포함할 수 있는 시스템(100)을 도시한다. 호스트(102)는, 대체로, 개별적으로 저장된 데이터를 활용하여 하나 이상의 태스크들을 수행하는 계산 능력을 갖는 전자 디바이스이다. 호스트(102)는, 또한, 호스트 시스템 또는 호스트 컴퓨터로 지칭될 수 있다. 호스트(102)는 하나 이상의 컴퓨터들 또는 유사한 전자 디바이스들, 예컨대 슈퍼컴퓨터, 데스크톱 컴퓨터, 랩톱 컴퓨터, 서버, 태블릿 컴퓨터, 통신 시스템, 음악 플레이어, 다른 전자 디바이스, 또는 이들의 임의의 조합일 수 있다. 호스트(102)는 프로세서(106)(예컨대, 중앙 프로세싱 유닛), 및 프로세서(106)에 통신가능하게 커플링되는 메모리(108)(예컨대, 판독 전용 메모리(read only memory, ROM), 랜덤 액세스 메모리(random access memory, RAM) 등을 포함하는 시스템 메모리)를 포함할 수 있다. 컴퓨터 실행가능 명령어들은 프로세서(106)에 의해 실행되기 전에 메모리(108) 내에 저장될 수 있다.
앞서 나타내진 바와 같이, DSD(104)는, 회전하는 데이터 스토리지 디스크들 및 이동가능한 판독/기록 헤드들을 포함하는 전자기계 디바이스인 하드 디스크 드라이브(HDD), 전자 메모리 칩들(예컨대, 하나 이상의 솔리드 스테이트 플래시 메모리 칩들)을 사용하고 어떠한 이동 부분들도 포함하지 않는 솔리드 스테이트 드라이브(SSD), 또는 하나의 유닛 내에 HDD들과 SSD들의 특징들을 조합한 하이브리드 드라이브일 수 있다. 따라서, DSD(104)는 비휘발성 매체들(112)(예컨대, 하나 이상의 데이터 스토리지 디스크들, 하나 이상의 플래시 메모리 칩들, StRAM, RRAM, 3D XPoint 메모리 등), 랜덤 액세스 메모리와 같은 휘발성 메모리(114), 및 하나 이상의 프로세서들(116)을 포함할 수 있다. 일부 실시예들에서, 프로세서들(116)은 특정의 계산학적으로 복잡한 태스크들, 예컨대 부동 소수점 연산(floating point math), 이레이저 코딩(erasure coding), 암호화, 패턴 검색 등을 더 잘 수행하는 특수 설계 코프로세싱 회로(도시되지 않음)에 의해 증강될 수 있다. 컴퓨터 실행가능 명령어들은 프로세서(들)(116)에 의해 실행되기 전에 비휘발성 매체들(112) 상에 그리고 휘발성 메모리(114) 내에 저장될 수 있다. 프로세서(들)(116), 비휘발성 매체들(112), 및 휘발성 메모리(114)는 DSD의 기본 저장 동작들(예컨대, 사용자 데이터의 저장)을 수행하는 데 사용되고, 또한, DSD(104) 내에 애플리케이션 실행 환경을 제공하는 펌웨어 및 소프트웨어를 포함한다. 비휘발성 매체들(112), 휘발성 메모리(114), 및 프로세서(들)(116)는 기계 조립체, 예컨대 케이싱(118) 내에 포함된다. 일부 실시예들에서, 호스트(102) 및 DSD(114)는 양측 모두가 단일 유닛, 예컨대 스토리지 랙의 일부일 수 있다(예를 들어, 케이싱(118)을 갖는 전체 DSD(104)는 호스트(102)를 또한 포함하는 저장 인클로저 내에 설치된다). 다른 실시예들에서, DSD(104) 및 호스트(102)는 이격되어 있을 수 있고, DSD(104)는 심지어 호스트(102)로부터 원격으로 위치될 수 있다. 118과 같은 케이싱을 갖는 DSD(104)의 일례가 도 1aa와 관련하여 하기에 간략하게 기술된다.
도 1aa는 예시적인 케이싱 또는 하우징(118)을 갖는 HDD(104)의 확대도를 제공한다. 도시된 바와 같이, 하우징(118)은 상단 커버(120), 베이스-데크 프레임(122), 및 베이스-데크 바닥부(124)를 포함한다. 도 11a에 도시된 실시예에서, 베이스-데크 프레임(122) 및 베이스-데크 바닥부(124)는 2개의 개별적인 편부들이다. 그러나, 다른 실시예들에서, 베이스-데크 프레임(122) 및 베이스-데크 바닥부(124)는 단일의 편부일 수도 있다. 베이스-데크 프레임(122), 베이스-데크 바닥부(124), 및 상단 커버(120)를 포함하는 하우징(118)은, 예를 들어 HDD들에 대한 2.5" 및 3.5" 폼팩터들을 비롯한 다수의 상이한 폼팩터들 중 임의의 것을 고수할 수 있다. 하우징(118)은, HDD 내장품들(126) 및 로직 보드(128)와 조합하여, HDD(104)를 제공한다. 도 1aa에서 알 수 있는 바와 같이, 프로세서들(116), 제1 비휘발성 매체들(112A), 및 휘발성 메모리(114)는 보드(128) 상에 포함된다. 제1 비휘발성 매체들(112A)은 일부 실시예들에서 비휘발성 캐시 메모리로서 사용될 수 있는 전자 메모리를 포함할 수 있다. HDD 내장품들(126)의 일부인 스토리지 디스크들은, 제1 비휘발성 매체들(112A)과 함께 (도 1a의) 비휘발성 매체들(112)을 형성하는 제2 비휘발성 매체들(112B)을 구성한다.
도 1a를 다시 참조하면, 100과 같은 시스템 내에 다수의 DSD들(예컨대, 104, 104A, 104B 등)이 있을 수 있음을 알게 된다. 각각이 도 1aa에 도시된 118과 같은 케이싱 내에 개별적으로 수용될 수 있는 다수의 DSD들(104, 104A, 104B 등)이 스토리지 랙 내에 설치될 수 있다. 스토리지 랙의 일례가 도 1aaa와 관련하여 하기에 간략하게 기술된다.
도 1aaa는 도 1a 및 도 1aa에 도시된 타입의 다수의 DSD들(예컨대, 104, 104A, 104B 등)이 설치될 수 있는 스토리지 구획(132)을 포함하는 스토리지 랙(130)의 일부분의 사시도를 제공한다. 도시된 바와 같이, 스토리지 랙(130)은 스토리지 구획(132)이 랙(136)(예컨대, 19 인치 랙) 외부로 인출될 수 있게 하는 레일 조립체(134)를 포함할 수 있고, 스토리지 구획 커버(138)는 들어올려져서, 스토리지 구획(132)으로의 용이한 액세스를 제공하게 할 수 있다. 스토리지 구획(132)은 HDD들(예컨대, 3.5 인치 HDD들), SSD들, 하이브리드 드라이브들 등과 같은 다수의 DSD들(예컨대, 도 1a의 104, 104A, 104B 등)에 대한 다수의 베이(bay)들을 포함할 수 있다. 도 1aaa에 추가로 도시된 바와 같이, 레일 조립체(134)는 스토리지 구획(132)의 후방 단부(면판(142)에 대향함)에 있는 마더보드 상의 적절한 전기 커넥터 또는 하드웨어 인터페이스에 접속된 하나 이상의 케이블들을 관리하기 위한 케이블 관리 시스템(140)을 추가로 포함할 수 있다. 도 1aaa의 실시예에서, 예상되는 시스템 수명 동안에 마모 또는 오작동될 수 있는, 도 1a의 DSD들(104, 104A, 104B 등) 중 임의의 것이 기술자에 의해 용이하게 대체될 수 있다.
도 1a 및 도 1aa의 실시예들과 관련하여 앞서 기술된 바와 같이, 프로세서(들)(116), 비휘발성 매체들(112), 및 휘발성 메모리(114)는 개별적인 DSD(104)의 하우징(118) 내에 포함되고, DSD의 기본 저장 동작들을 수행하면서 DSD(104) 내에 애플리케이션 실행 환경을 제공한다. 그러나, (도 1b 및 도 1c에 도시된) 일부 실시예들에서, 하우징(118) 내의 컴포넌트들(예컨대, 프로세서(들)(116), 비휘발성 매체들(112), 및 휘발성 메모리(114))은, 주로, 기본 저장 동작들을 제공하도록 구성될 수 있고, 애플리케이션 실행 컴포넌트(117)는 하우징(118) 외부에 포함되어, DSD(104) 내에서 데이터를 활용할 수 있는 애플릿들을 위한 애플리케이션 실행 환경을 제공하게 할 수 있다. 애플리케이션 실행 컴포넌트(117)는 애플릿들의 설치 및 실행을 가능하게 하는 하나 이상의 마이크로프로세서들, 메모리, 및 펌웨어의 조합을 포함할 수 있다. 그러한 실시예들에서, 애플리케이션 실행 컴포넌트(들)(117)는 복수의 DSD들을 수용하는 (도 1aaa의) 132와 같은 스토리지 구획 내에 포함될 수 있다. 애플리케이션 실행 컴포넌트(117)는 임의의 호스트 컴퓨터의 일부가 아니라는 것에 주목해야 한다.
일부 실시예들에서, 개별적인 애플리케이션 실행 컴포넌트가 각각의 개별적인 DSD에 커플링될 수 있다. 그러한 실시예가 도 1b에 도시되어 있다. 도 1b의 실시예에서, 애플리케이션 실행 컴포넌트(117)는 적합한 인터페이스를 통해 DSD(104)에 커플링되고, DSD(104) 내에 저장된 애플릿들을 위한 애플리케이션 실행 환경을 제공한다. 유사하게, 애플리케이션 실행 컴포넌트(117A)가 DSD(104A)에 커플링되고, 애플리케이션 실행 컴포넌트(117B)가 DSD들(104B)에 커플링된다. 컴포넌트들(117A, 117B)은, 각각, DSD들(104A, 104B) 내에 저장된 애플릿들을 위한 애플리케이션 실행 환경들을 제공한다.
대안의 실시예에서, 하나의 애플리케이션 실행 컴포넌트가 다수의 DSD들에 커플링될 수 있다. 그러한 실시예가 도 1c에 도시되어 있다. 도 1c의 실시예에서, 애플리케이션 실행 컴포넌트(117)는 DSD들(104, 104A, 104B)에 커플링되고, 애플리케이션 실행 컴포넌트(117A)는 DSD들(104C, 104D, 104E)에 커플링되고, 애플리케이션 실행 컴포넌트(117B)는 DSD들(104F, 104G)에 커플링된다. 이러한 실시예에서, 애플리케이션 실행 컴포넌트(117)는 DSD들(104, 104A, 104B) 내에 저장된 애플릿들을 위한 애플리케이션 실행 환경을 제공한다. 유사하게, DSD들(104C, 104D, 104E) 내에 저장된 애플릿들은 애플리케이션 실행 컴포넌트(117A)에 의해 실행될 수 있고, DSD(104F, 104G) 내에 저장된 애플릿들은 애플리케이션 실행 컴포넌트(117B)에 의해 실행될 수 있다.
대체로, 전술된 실시예들에 대해, 임의의 적합한 광학, 유선, 또는 무선 접속 기법들이 시스템(100)의 상이한 컴포넌트들을 접속시키는 데 활용될 수 있다. 일부 실시예들에서, 네트워크 스위치 패브릭(network switched fabric)(도 1a, 도 1b, 및 도 1c에서 참조 번호 110으로 표기됨)이 상이한 컴포넌트들 사이에 통신을 제공하도록 포함될 수 있다. 간소성을 위해, 예시적인 접속 기법들이 도 1a에 도시된 구성에 대해 하기에 기술되고, 도 1b 및 도 1c의 애플리케이션 실행 컴포넌트(117)에의 접속들에 대한 설명을 포함하지는 않는다. 그러나, 하기에 제공되는 예들은 도 1b 및 도 1c에 도시된 구성들에도 또한 적용된다는 것에 주목해야 한다.
전술된 바와 같이, 호스트(102) 및 DSD들(104, 104A, 104B 등)은 광학, 유선, 또는 무선 접속에 의해, 예를 들어 근거리 통신망(LAN) 또는 광역 통신망(WAN)에 의해 접속될 수 있다. 일부 실시예들에서, DSD(104)는 LAN 또는 WAN에 의해 다수의 호스트 컴퓨터들(102, 102A, 102B 등)에 접속될 수 있다. 일례가 다수의 클라이언트들에 의한 액세스를 동시에 허용하는 이더넷 네트워크를 포함할 수 있다. 일부 실시예들에서, DSD들(104, 104A, 104B 등)은 하나 이상의 인터페이스들을 통해 호스트들(102, 102A, 102B 등)과 동시에 접속할 수 있다. 예를 들어, DSD들(104, 104A, 104B 등)은 호스트들(102, 102A, 102B 등)과 접속하는 다수의 이더넷 인터페이스들을 가질 수 있다. 다른 실시예들에서, DSD들(104, 104A, 104B 등)은 102, 102A, 및 102B와 같은 다수의 호스트들에 접속되는 단일의 인터페이스를 가질 수 있다. 예를 들어, 스위치 패브릭(110)은 다수의 호스트들(102, 102A, 102B) 사이의 액세스를 조절하는 데 사용될 수 있다. DSD(104) 및 호스트들(102, 102A, 102B 등)과 같은 디바이스들은 국부적으로 또는 인터넷을 통해 액세스될 수 있는 인터넷 프로토콜(IP) 어드레스들을 가질 수 있다. 일부 실시예들에서, DSD(104)는 호스트 디바이스들(102, 102A, 102B) 외에도 네트워크 상의 다른 DSD들(104A, 104B 등)에 액세스하는 것이 가능할 수 있다.
SAS, SATA, 및 NVMe와 같은 종래의 스토리지 인터페이스들이 또한 호스트(102)와 DSD(104) 사이에서 통신하는 데 사용될 수 있다. 인터페이스들과 프로토콜들의 혼합물들이 가능하다. 예를 들어, SCSI 커맨드들은, PCIe 버스(도시되지 않음)를 통해 프로세서에 부착된 이더넷 포트로, 이더넷 네트워크를 통해 호스트(102)로 그리고 그로부터 전송될 수 있다. 이어서, 프로세서는, SAS 링크를 통해 DSD(104)로 커맨드를 전송하는 SAS 호스트 버스 어댑터로 PCIe 버스를 통해 커맨드들을 계속해서 전송할 수 있다.
본 발명의 실시예들에서, 호스트(102)로부터 기인하는 애플릿들이 DSD(104)에 저장될 수 있다. 하기에 더 상세히 기술되는 바와 같이, 애플릿들 각각은 키-값 객체들의 세트로서 편성될 수 있다. 키-값 객체들(예컨대, 애플리케이션을 구성하는 하나 이상의 키-값 객체들)의 세트는 본 명세서에서 애플릿 객체로 지칭된다. 키-값 객체들 및 애플릿 객체들 양측 모두가 하기에 더 상세히 기술된다.
(도 1a의) DSD(104) 및 (도 1b 및 도 1c의) 애플리케이션 실행 컴포넌트(117)는 액티브 드라이브 API를 지원한다. 하기에 더 상세히 기술되는 바와 같이, 호스트(102)는 액티브 드라이브 API를 활용하여, (도 1a의) DSD(104) 및 (도 1b 및 도 1c의) 애플리케이션 실행 컴포넌트(117) 내의 애플릿 객체(들)를 설치하고 실행시킨다. 일부 실시예들에서, 액티브 드라이브 API는 객체 기반이지만, 객체 기반 API의 사용은 제한적인 것이 아니다. 예를 들어, 대안의 실시예들에서, DSD(104)는 그 대신에 로직 블록 어드레스들의 파일들 또는 링크된 리스트들을 사용할 수 있다.
호스트(102) 및 DSD(104)가 애플릿 객체들을 저장하고 실행시키도록 통신할 수 있게 하는 인터페이스들의 예들은 이더넷, SAS, SATA, 또는 PCIe 접속을 포함한다. 일부 실시예들에서, 액티브 드라이브 API 커맨드들은 변환 또는 심 계층(shim layer) 또는 브리지 제어기(도 1a, 도 1b, 및 도 1c에 별도로 도시되어 있지 않음)에 의해 SAS, SATA, NVMe 등과 같은 다른 커맨드 프로토콜들로 변환되거나 캡슐화될 수 있다. 다른 실시예들에서, 액티브 드라이브 API 커맨드들은 DSD(104) 기능들을 제어하도록 저레벨 동작들로 직접적으로 변환될 수 있다. 액티브 드라이브 API 커맨드들에 관한 세부사항을 제공하기 전에, 예시적인 키-값 객체 및 애플릿 객체의 내용들이 하기에 기술된다.
도 1d는, 본 명세서에서 간단히 "객체"로 지칭될 수 있는 키-값 객체와 연관될 수 있는 필드들의 일례를 도시한다. 각각의 객체(150)는 객체를 식별하는 키(152)를 포함할 수 있다. 객체(150)는, 또한, 클라이언트 또는 호스트로부터 수신된 키와 연관된 데이터(예컨대, 사용자 데이터, 실행가능한 애플리케이션 코드, 또는 중간 객체 코드)일 수 있는 값(154)을 포함할 수 있다. 객체(150)는, 또한, 예를 들어, 객체(150)와 연관된 속성들의 세트를 포함할 수 있거나, 액세스 권한들을 식별할 수 있거나, 또는 다른 인근 객체들을 식별할 수 있는 메타데이터(156)를 포함할 수 있다.
메타데이터(156)는, 다수의 클라이언트들이 비동기식 접속부들과의 동시 액세스를 가질 수 있을 때 동기화된 상태로 객체를 유지시킬 수 있는, 객체(150)에의 액세스를 제어하는 데 사용되는 액세스 태그 또는 "버전" 필드(158)와 같은 필드들을 포함할 수 있다. 일부 실시예들에서, 객체의 메타데이터(156)는, 또한, 객체 코드의 해시(160), 해시(160)를 생성하는 데 사용되는 해시 알고리즘(161), 암호화 키들(164), 액세스 권한들을 지정하는(예컨대, 객체에 액세스할 수 있는 클라이언트들을 지정하는) 액세스 제어 리스트(access control list, ACL)(162), 예컨대 키들의 값들에 기초한 수집분석(collation) 순서에 따른, 다음 객체(170) 또는 이전 객체(168)에 대한 식별자들, 또는 다른 관련 정보를 포함할 수 있다.
특정된 바와 같이, 액세스 제어 리스트(ACL)는 객체에 액세스할 수 있는 클라이언트들 또는 호스트들을 국한시킬 수 있고, 객체에 대한 클라이언트 또는 호스트에 의한 어떠한 동작의 수행이라도 제한할 수 있다. 일부 실시예들에서, 액세스가 승인된 클라이언트들 또는 호스트들을 열거한 ACL이 각각의 객체마다 유지될 수 있다. 일부 실시예들에서, DSD(104)는 클라이언트 또는 호스트가 액세스하게 되는 객체들 또는 키 범위들을 지정하는, 각각의 클라이언트 또는 호스트에 대한 ACL을 유지시킬 수 있다. 일부 실시예들에서, DSD(104)는 클라이언트들 또는 호스트들 및 연관된 액세스가능한 객체들을 링크시키는 ACL들을 유지시킬 수 있다.
전술된 바와 같이, 애플릿을 구성하는 키-값 객체들의 세트는 본 명세서에서 애플릿 객체로 지칭된다. 도 1e는 애플릿 객체(172)의 일례의 개략도이다. 도 1e에 도시된 예에서, 애플릿 객체(172)는 N 키-값 객체들의 시퀀스이다. N 키-값 객체들 중 제1 객체는 150A로 표기되고, 키(152A), 값(154A), 및 메타데이터(156A)를 포함한다. 최종 또는 제N 키-값 객체는 150N으로 표기되고, 키(152N), 값(154N), 및 메타데이터(156N)를 포함한다. 키들(152A 내지 152N)은 임의의 적합한 방식으로 생성될 수 있다. 예를 들어, 일부 실시예들에서, 각각의 키(152A,..., 152N)는 독립적으로 생성될 수 있다. 다른 실시예들에서, 제1 키(152A) 이외의 키들은, 예를 들어 키(152A)에 적합한 서픽스(suffix)를 추가함으로써 생성될 수 있다. 일부 실시예들에서, 알고리즘은 입력으로서 제1 키(152A)를 활용할 수 있고, 나머지 키들을 제1 키(152A)의 함수로서 생성할 수 있다. 사용된 키 생성 기법에 기초하여, 애플릿 객체(172)는 모든 키들(152A 내지 152N)의 리스트에 의해 알려지거나 식별될 수 있거나, 또는 애플릿 객체(172)에 대한 루트 또는 핸들(handle)로서의 역할을 할 수 있는 제1 키(152A)에 의해 식별될 수 있다.
도 1d와 관련하여 앞서 언급된 바와 같이, ACL은 객체에 액세스할 수 있는 클라이언트들 또는 호스트들을 국한시킬 수 있다. 애플릿 객체(172)가 다수의 객체들을 포함할 수 있으므로, 다수의 객체들(150A 내지 150N) 각각은 동일한 ACL 메타데이터 또는 상이한 ACL 메타데이터 중 어느 한쪽을 포함할 수 있다. 일부 실시예들에서, 애플릿 객체(172)에 대한 ACL은 애플릿 객체(172)의 제1 객체(150A)의 ACL 메타데이터에 의해 나타내지고, 애플릿 객체(172)의 나머지 객체들에 대한 ACL 메타데이터는 무시된다. 대안의 실시예에서, 애플릿 객체(172)에의 호스트 또는 클라이언트 액세스를 판정하기 위해 애플릿 객체(172)의 모든 객체들(150A 내지 150N)의 ACL 메타데이터가 고려된다. 특정 실시예에서, 애플릿 객체(172)에의 액세스는 애플릿 객체(172)의 객체들(150A 내지 150N) 중 매 객체에 액세스하는 호스트들 또는 클라이언트들로 국한되지 않는다. 대체로, 임의의 적합한 기법이 애플릿 객체(172)에의 호스트 또는 클라이언트 액세스를 제어하도록 활용될 수 있다.
DSD들 내의 애플리케이션들을 저장하고 실행시키는 능력이 정보를 저장하고 고객의 스토리지를 관리하기 위한 고객의 요구를 해결하는 것을 돕도록 컴퓨팅 환경에서 채용될 수 있는 방법의 예들이 도 2a 및 도 2b와 관련하여 하기에 기술된다.
도 2a는 액티브 드라이브 API 커맨드들을 채용한 시스템(200)의 예시적인 실시예를 도시한다. 도 2a에서 알 수 있는 바와 같이, 시스템(200)은 하나 이상의 데이터 소스들(202)(예컨대, 백화점에 있는 캐시 레지스터들, 항공사 예약 시스템들, 통신 교환 장비, 센서들 등), 하나 이상의 데이터 소스들(202)이 연결되는 호스트 컴퓨터(102), 네트워크(206)를 통해 호스트 컴퓨터(102)에 접속되는 네트워크(예컨대, 이더넷)(206) 및 DSD들(104)의 풀(pool)을 포함한다. 모든 DSD들(104)이 물리적으로 근접한 것으로 도시되어 있지만, 그들은 개별적인 인클로저들 또는 심지어 개별적인 빌딩 위치들 내에 물리적으로 저장될 수 있다는 것에 주목해야 한다.
동작 동안, 호스트 컴퓨터(102)는 데이터 소스(들)(202)로부터 데이터를 수신하고, 데이터를 파일 또는 객체에 기록한다. 보다 구체적으로, 호스트 컴퓨터(102)는 데이터를 파일 또는 객체에 기록하는 애플리케이션 프로그램(210)을 갖는 컴퓨터 소프트웨어(208)를 포함한다. 컴퓨터 소프트웨어(208)는, 추가로, 데이터를 하나 이상의 키-값 객체들로 변환하는 파일 시스템 또는 객체 저장 시스템(212)을 포함한다. 요소(212)에서 사용하는 데 적합한 객체 스토리지 시스템들의 예들은 Inktank storage Inc.에 의해 제조된 CEPH® 및 SwiftStack Inc.에 의해 제조된 SWIFTSTACK®을 포함한다. 시스템(212)은, 또한, 상이한 객체들을 DSD들(104) 중 특정한 DSD들에 링크시키기 위한 맵핑 로직(204)을 포함한다. 파일 시스템 또는 객체 저장 시스템(212)은 객체(들)의 저장을 위해 하나 이상의 타깃 DSD들(104)을 식별한다. 이어서, 파일 시스템(212)은 저장 커맨드(예컨대, 하기에 추가로 기술되는 "풋(Put)" 커맨드)를 사용하여 각각의 식별된 DSD(들)(104) 내의 객체(들)를 저장한다. 객체들은 가능한 DSD 컴포넌트 결함에 대비해 보호하도록 RAID 또는 이레이저 코딩과 같은 리던던시와 함께 저장될 수 있다는 것에 주목해야 한다. 이어서, 키-값 객체들의 형태로 저장된 데이터는 임의의 적합한 방식으로 분석될 수 있다. 하나의 데이터 분석 예가 도 2b와 관련하여 제공된다.
데이터의 소유주(도 2b에서 참조 번호 214로 표기됨)는, 예를 들어 특정 요일(예컨대, 월요일)에 그리고 그 날의 특정 시각 이후(예컨대, 5PM 이후)에 얼마나 많은 아이템들이 판매되었는지 알아내기 위해, 많은 데이터에 대해 프로세싱을 동시에 수행하기를 원할 수 있다. 데이터 소유주(214)는 질의를 수행하고 매출량 데이터의 합계를 내도록 컴퓨터 프로그램을 기록할 수 있다. 그 프로그램은 컴퓨터 소프트웨어(208) 내에 보여지고 있고, 참조 번호 216으로 표기되어 있다. 소유주(214)는, 컴파일러(218)의 도움으로, 애플릿 객체로 지칭되고 참조 번호 220으로 표기되는 중간 객체 파일로 프로그램(216)을 컴파일한다. 요소(218)에 적합한 컴파일러의 일례가 일리노이 주립 대학교(University of Illinois), Apple Inc. 및 다른 이들에 의해 개발된 CLANGTM 컴파일러이다. 애플릿 객체(220)는 프로세싱을 위해 데이터를 보유한 DSD들(104) 중 일부 또는 모두에게 분배될 수 있다. 도 2a의 실시예에서, 컴퓨터 프로그램 또는 스크립트(분배 스크립트(distribution script)로 지칭되고 참조 번호 222로 표기됨)는 풋 커맨드들(223)을 사용하여 애플릿 객체(220)를, 프로세싱을 위해 데이터를 보유한 모든 DSD들(104)에게 분배한다. 분배 스크립트(222)는 액티브 드라이브 API 커맨드들의 애플릿 관리 커맨드(예컨대, 하기에 추가로 기술되는 애플릿 실행 관리(Manage Applet Execute) 커맨드)를 통해 애플릿 객체(220)의 실행을 개시할 수 있다. 일 실시예에서, 애플릿은 (도 1a의) DSD의 프로세서(들)(116) 내의 또는 (도 1b 및 도 1c의) 애플리케이션 실행 컴포넌트(117) 내의 저레벨 해석기 가상 머신(low-level interpreter virtual machine), 예컨대 일리노이 주립 대학교/LLVM Foundation Corporation으로부터의 LLVM®에서 실행되고, 저레벨 해석기 가상 머신에 결속되는 라이브러리들은 DSD 내에 저장된 로컬 데이터에의 액세스를 갖는 애플리케이션을 제공할 수 있다. 컴퓨터 프로그램 또는 사용자는 액티브 드라이브 API 커맨드들의 다른 애플릿 관리 커맨드(225)(예컨대, 하기에 추가로 기술되는 애플릿 획득 프로세스 상태 관리(Manage Applet Get Process Status) 커맨드)를 통해 실행 상태를 모니터링하거나 실행 상태 정보를 얻을 수 있다.
컴퓨터 프로그램의 결과들은 각각의 DSD(들)(104) 상에 (예컨대, 키-값 객체들로서) 국부적으로 저장될 수 있고, 하나 이상의 호출 컴퓨터들(예컨대, 호스트 컴퓨터(102))로 전송될 수 있고, DSD들(104) 중 하나 이상의 상이한 것들로 전송될 수 있고, 등등으로 될 수 있다. 예를 들어, 결과들을 포함한 키-값 객체들의 저장은 각각의 DSD(들)(104) 내의 풋 커맨드들을 실행시킴으로써 수행되어, 그 결과들을 국부적으로 저장하게 할 수 있다. 다른 예에서, 애플릿은 결과들을 포함하는 국부적으로 생성된 키 값 객체(들)를 비-로컬 DSD들(104)에 저장하는 풋 커맨드들을 실행시키도록 하는 명령어들을 포함할 수 있다. 또 다른 예에서, 일단 애플릿의 실행이 완료되면, 애플릿에 의해 생성된 결과들은 URI(Uniform Resource Indicator)에 대한 통지 메시지를 통해 상이한 노드들(예컨대, 호스트들 및/또는 DSD들)의 세트에 전송될 수 있으며, 이러한 통지 메시지는 결과들의 의도된 수신자들인 상이한 노드들의 세트에 대한 식별 정보(예컨대, URL(Uniform Resource Locator)들)를 포함한다. 일부 실시예들에서, 애플릿 관리(Manage Applet) 액티브 드라이브 API 커맨드(예컨대, 애플릿 실행 관리 커맨드에 대한 응답)의 실행 시에 각각의 DSD(들)(104)에 의해 전송된 응답 메시지가 결과들의 표시자를 포함할 수 있다. 액티브 드라이브 API 커맨드들의 세부사항들이 도 3a 내지 도 3e와 관련하여 하기에 제공된다.
도 3a는 일 실시예에 따른, 액티브 드라이브 API 커맨드 세트들 및 함수들을 채용한 시스템(300)의 간소화된 블록 다이어그램 예시이다. 액티브 드라이브 API는 전송 계층 상에 배치될 수 있는 애플리케이션 레벨 프로토콜(예컨대, 전송 계층 보안을 갖는 전송 제어 프로토콜(TCP)(예컨대, 보안 소켓 계층(Secure Sockets Layer, SSL))이라는 것에 주목해야 한다.
시스템(300)은 호스트(102)(도 3a에 도시되지 않음) 상에서 실행되고 있을 수 있는 애플리케이션(302), 액티브 드라이브 API(304), 및 DSD(104)를 포함한다. 간소화를 위해 도 3a에는 오직 하나의 애플리케이션(302) 및 하나의 DSD(104)가 도시되고, 예를 들어 시스템(300) 내에 있을 수 있는 임의의 추가적인 DSD들은 도시되어 있지 않다는 것에 주목해야 한다. 앞서 나타낸 바와 같이, 액티브 드라이브 API(304)는, 애플리케이션(302)이 DSD(104) 상에 하나 이상의 키-값 객체들로서 애플릿을 설치하게 하고 DSD(104)의 제어된 환경 내에서의 애플릿의 실행을 가능하게 하는 기능을 지원한다. 구체적으로, 그러한 기능은, 애플리케이션(302)에 의해 DSD(104)로 전송될 수 있는 요청 커맨드들 또는 요청 메시지들(306), 및 DSD(104)에 의해 애플리케이션(302)로 전송될 수 있는 대응하는 응답 메시지들(308)을 포함할 수 있는 커맨드 세트에 의해 지원된다. 일부 실시예들에서, 커맨드들/메시지들(306, 308)은 소정 비트들이 커맨드의 타입 및 수정자(modifier)들을 특정하는 것과 같은 로직 의미들을 정의한 사전정의된 구조를 가질 수 있다. 다른 실시예들에서, 커맨드들/메시지들(306, 308)은 미사용된 잠재 필드들이 커맨드/메시지(306/308) 내에 포함되지 않을 수 있도록 다수의 후속 비트들에 대한 의미 또는 필드를 식별하는 비트들을 갖는 것과 같이 달리 구조화될 수 있다. 일부 실시예들에서, Google Inc.로부터의 GOOGLE® 프로토콜 버퍼(Protocol Buffer)들과 같은 프로토콜 버퍼들이 데이터(예컨대, 사용자 데이터, 중간 객체 코드, 및/또는 실행가능한 애플리케이션 코드) 통신에 이용될 수 있다. 일부 실시예들에서, 커맨드들/메시지들(306/308) 내의 데이터(예컨대, 사용자 데이터, 중간 객체 코드, 및/또는 실행가능한 애플리케이션 코드)는 이형 데이터 타입들을 이용하여 구조화될 수 있다.
도 3a에서, 예시적인 요청 메시지/요청 커맨드(306)는 데이터 무결성/인증 필드(310), 커맨드 길이 필드(312), 값 길이 필드(313), 커맨드 헤더(314), 커맨드 본문(316), 및 애플릿 값 또는 애플릿 데이터 필드(318)를 포함한다. 이들 상이한 필드들이 하기에 간략하게 기술된다.
일부 실시예들에서, 데이터 무결성/인증 필드(310)는 비밀 암호화 키와 조합하여 암호화 해시 함수를 수반하는 키-해시 메시지 인증 코드(keyed-hash message authentication code, HMAC)를 전달하는 데 활용될 수 있다. 따라서, 그러한 실시예들에서, 필드(310)는 메시지의 데이터 무결성 및 인증 양측 모두를 동시에 검증하는 데 사용될 수 있다. 대체로, 필드(310)는 임의의 적합한 데이터 무결성/인증 정보를 포함하도록 활용될 수 있다.
커맨드 길이 필드들(312)은, 예를 들어 요청 메시지/커맨드(306)에 다수의 바이트들을 포함하도록 활용될 수 있다. 대체로, 커맨드 길이 필드(312)는 요청 메시지/커맨드(306)의 길이의 임의의 적합한 표시자를 포함할 수 있다. 유사하게, 값 길이 필드(313)는 애플릿 값 필드(318)에 포함된 데이터의 길이를 포함할 수 있다.
커맨드 헤더(314)는 커맨드와 관련된 식별 정보를 전달하는 데 활용될 수 있다. 예를 들어, 커맨드 헤더(314)는, 커맨드가 애플릿의 저장, 애플릿의 관리 등과 관련됨을 DSD(104)에게 나타내는 정보를 포함할 수 있다. 상이한 타입들의 커맨드들의 예들이 도 3b 내지 도 3e와 관련하여 하기에 추가로 기술된다. 대체로, 그러한 정보는 DSD(104)가 커맨드를 수신할 때 그에 의해 수행될 동작의 타입을 식별할 수 있다.
커맨드 본문(316)은 애플릿을 식별하는 정보를 포함할 수 있다. 예를 들어, 커맨드 본문(316)은 그 애플릿을 구성하는 객체들을 식별하는 하나 이상의 키들을 포함할 수 있다. 커맨드 본문(316)은, 또한, 커맨드를 실행시키는 데 필요할 수 있는 임의의 파라미터들을 포함할 수 있다.
애플릿 값 필드(318)는 중간 객체 코드 및/또는 실행가능한 애플리케이션 코드를 포함할 수 있다. 애플릿 값 필드는 임의의 크기의 것일 수 있다. DSD(104) 상에 이미 저장되어 있는 애플릿 객체들에 대한 동작들을 수행하는 것과 관련된 요청 메시지들/커맨드들(306)에서, 애플릿 값 필드(318)는 0 바이트들의 널 크기(null-sized) 값을 가질 수 있다.
전술된 바와 같이, 각각의 요청 메시지/커맨드(306)는 대응하는 응답 메시지(308)를 가질 수 있다. 응답 메시지(308)는 요청 메시지/커맨드(306)를 공지하는 정보, 및 예를 들어 커맨드가 DSD(104) 내에서 성공적으로 실행되었는지 여부를 나타내는 상태 정보를 포함할 수 있다. 도 3a에서 알 수 있는 바와 같이, 응답 메시지(308)의 구조는 요청 메시지/커맨드(306)의 구조와 유사할 수 있다. 그러나, 응답 메시지(308)는 DSD(104)에 의해 커맨드 상태 정보를 포함하도록 활용되는 상태 코드 필드(320)를 추가적으로 포함할 수 있다. 간결성을 위해, 메시지들(306, 308) 양측 모두에 공통적인 필드들의 설명은 반복되지 않는다.
일부 실시예들에서, 액티브 드라이브 API의 커맨드 세트는 또한, 커맨드들에 대한 수정자들, 예컨대 커맨드들의 거동을 수정하는 한정자(qualifier)들, DSD(104)의 관리 또는 모니터링에 관련된 추가적인 커맨드들, 또는 다른 수정자들을 포함할 수 있다는 것에 주목해야 한다. 한정자는 수행할 동작, 수행할 서브동작, 수행할 추가적인 동작, 또는 이들의 임의의 조합의 변형의 표시자일 수 있다.
도 3b는 풋 요청 메시지/커맨드(322) 및 대응하는 응답 메시지(324)를 도시한 시스템(300)의 간소화된 블록 다이어그램이다. 전술된 바와 같이, 풋 커맨드들은, 예컨대 키-값 객체들을 DSD(104)에 의해 저장된 객체들의 세트에 추가함으로써, DSD(104)에 데이터(예컨대, 사용자 데이터, 중간 객체 코드, 및/또는 실행가능한 애플리케이션 코드)를 저장하는 데 사용될 수 있다. 도 3b에서 알 수 있는 바와 같이, 풋 요청 메시지/커맨드(322)는 도 3a에 도시된 것들과 실질적으로 유사한 필드들을 포함한다. 풋 요청 메시지/커맨드(322)에서, 커맨드 헤더(314)는 커맨드가 하나 이상의 객체들의 저장과 관련됨을 DSD(104)에게 나타내는 정보를 포함할 수 있다. 도 3b에서, 그 식별 정보는 풋 메시지 타입(326)에 의해 표현된다. 값 필드(318)는, 예를 들어 애플릿에 대한 중간 객체 코드를 포함한다. 풋 요청 메시지/커맨드(322)에서, 커맨드 본문(316)은 그 애플릿을 구성하는 객체(들)를 식별하는 하나 이상의 키들을 포함할 수 있다. 풋 요청 메시지/커맨드(322)를 수신한 것에 응답하여, DSD(104)는, 예를 들어 비휘발성 매체들(112) 내에 중간 객체 코드를 저장한다. 비휘발성 매체들(112) 내에 중간 객체 코드를 저장하기 전, 프로세서(116)는 초기에 휘발성 메모리(114) 내에 중간 객체 코드를 저장할 수도 있다는 것에 주목해야 한다. 이어서, 프로세서(116)는 중간 객체 코드를 휘발성 메모리(114)로부터 비휘발성 매체들(112)로 이송할 수 있다.
도 3a와 관련하여 앞서 대체로 기술된 바와 같이, DSD(104) 내의 액티브 드라이브 요청 메시지/커맨드의 완료는 응답 메시지가 DSD(104)로부터 애플리케이션(302)으로 전송되는 것을 초래할 수 있다. 따라서, 도 3b에서 알 수 있는 바와 같이, 풋 요청 메시지/커맨드(322)의 완료는 대응하는 응답 메시지(324)가 DSD(104)로부터 애플리케이션(302)으로 전송되는 것을 초래한다. 응답 메시지(324)에서, 커맨드 헤더(314)는, 메시지(324)가 풋 요청 메시지/커맨드(322)에 대한 응답임을 애플리케이션(302)에게 나타내는 정보를 포함할 수 있다. 도 3b에서, 그 식별 정보는 풋 응답 메시지 타입(328)에 의해 표현된다. 응답 메시지(324)는 커맨드 완료 상태 코드(320)를 갖는 애플리케이션(302)으로 전송된다.
일례에서, 정보가 비휘발성 매체들(112) 내에 저장되기 전, 풋 요청 메시지/커맨드(322)가 완료될 수 있다(예컨대, DSD(104)는 연관된 애플릿 객체가 성공적으로 저장되었음을 나타내는 응답 메시지(324)를 애플리케이션(302)에게 반환할 수 있다). 예를 들어, DSD(104)는, 일단 애플릿 객체가 수신되어 휘발성 메모리(114) 내에 저장되면, 풋 요청 메시지/커맨드(322)의 완료를 나타내는 응답 메시지(324)를 애플리케이션(302)에 반환할 수 있다. 다른 예에서, 풋 애플릿 요청/커맨드(322)는, 응답 메시지(324)를 애플리케이션(302)으로 전송하기 위해 애플릿 객체가 비휘발성 매체들(112) 내에 저장될 때까지 대기할 것을 DSD(104)에게 지시하는 한정자(도시되지 않음)를 포함할 수 있다. 상이한 한정자들을 사용함으로써 풋 요청 메시지/커맨드(322)에 대한 다른 변형들이 가능해질 수 있다.
대체로, 애플릿은, 추후 실행을 위해 휘발성 메모리(114) 및/또는 비휘발성 매체들(112) 내에 하나 이상의 객체들로서 저장될 수 있거나, 또는 실질적으로 DSD(104) 상에 로딩된 직후에 실행될 수 있다. 애플릿의 실행이 수행되도록 하기 위해, 일례에서, 애플릿을 구성하는 객체들은, 휘발성 메모리(114) 또는 비휘발성 매체들(112)로부터 판독되고 실행가능한 형태로 어셈블되고 DSD(104) 내의 애플리케이션 실행 환경 내에 로딩될 필요가 있을 수 있다. 애플릿 설치 관련 기능들은 DSD(104)에서 애플릿 설치(Install Applet) 액티브 드라이브 API 함수에 의해 수행될 수 있다. 일례에서, 애플릿을 식별하는 애플릿 설치 액티브 드라이브 커맨드(도시되지 않음)는 애플릿 설치 커맨드를 수신한 것에 응답하여 애플리케이션(302)에 의해, 애플릿 설치 기능을 수행하는 DSD(104)로 전송될 수 있다. DSD(104)는 애플릿이 성공적으로 설치된 후에 응답을 애플리케이션(302)으로 전송할 수 있다. 애플릿은 애플리케이션(302)이 애플릿의 성공적인 설치를 통지받은 후에 실행을 위한 준비를 할 수 있다.
일부 실시예들에서, 일단 애플릿이 실행을 위한 준비가 되어 있다면(예컨대, 실행가능한 형태로 어셈블되어 있다면), 애플릿의 실행가능한 형태는 적합한 메모리/매체(예컨대, 비휘발성 매체들(112) 및/또는 휘발성 메모리(114)) 내에 캐싱될 수 있고, 캐싱된 실행가능한 애플릿은 필요에 따라 DSD(104)에서 실행될 수 있다는 것에 주목해야 한다. 따라서, 그러한 실시예들에서, 애플릿 설치 함수는 애플릿이 실행될 필요가 있을 때마다 수행될 필요는 없다. 또한, 일부 그러한 실시예들에서, 애플릿 설치 프로세스의 일부분으로서, 사용자는 DSD(104)에서 실행가능한 애플릿에 링크되는 애플릿 명칭을 제공할 수 있다. 이어서, 사용자 제공 애플릿 명칭은 애플릿을 호출하도록 채용될 수 있다. 소정 실시예들에서, 애플릿은 (예컨대, 호스트 컴퓨터(102) 내의) DSD(104) 외부에서 실행가능한 형태로 어셈블될 수 있고, 이어서, 적합한 커맨드(예컨대, 풋 커맨드, 또는 애플릿 설치 커맨드)를 사용하여 저장을 위해 DSD(104)에 제공될 수 있다는 것에 주목해야 한다.
도 3c는 애플릿 실행 요청(Execute Applet request) 메시지/커맨드(330) 및 대응하는 응답 메시지(332)를 도시한 시스템(300)의 간소화된 블록 다이어그램이다. 도 3c에서 알 수 있는 바와 같이, 애플릿 실행 요청 메시지/커맨드(330)는 도 3a 및 도 3b에 도시된 것들과 실질적으로 유사한 필드들을 포함한다. 애플릿 실행 요청 메시지/커맨드(330)에서, 커맨드 헤더(314)는 커맨드가 애플릿의 관리와 관련됨을 DSD(104)에게 나타내는 정보를 포함할 수 있다. 도 3c에서, 그 식별 정보는 애플릿 관리 메시지 타입(334)에 의해 표현된다. 애플릿 실행 요청 메시지/커맨드(330)에서, 커맨드 본문(316)은 애플릿 관리 메시지 타입이 애플릿 실행 타입(335)임을 특정할 수 있고, 애플릿을 구성하는 객체(들)를 식별하는 하나 이상의 키들을 포함할 수 있다. 대안으로, 애플릿 실행 타입(335)인 애플릿 관리 메시지 타입이 애플릿을 식별하는 사용자 제공 애플릿 명칭을 포함할 수 있다. 또한, 커맨드 본문(316)은 실행 동안에 애플릿에 의해 활용되는 하나 이상의 프로그램 파라미터들을 포함할 수 있다. 애플릿 실행 요청 메시지/커맨드(330)를 수신한 것에 응답하여, DSD(104)는 실행가능한 애플릿 코드를 실행시킨다.
도 3c에서 알 수 있는 바와 같이, 애플릿 실행 요청 메시지/커맨드(330)의 완료는 대응하는 응답 메시지(332)가 DSD(104)로부터 애플리케이션(302)으로 전송되는 것을 초래한다. 응답 메시지(332)에서, 커맨드 헤더(314)는, 메시지(332)가 애플릿 실행 요청 메시지/커맨드(330)에 대한 응답임을 애플리케이션(302)에게 나타내는 정보를 포함할 수 있다. 도 3c에서, 그 식별 정보는 애플릿 실행 응답 메시지 타입(336)에 의해 표현된다. 응답 메시지(332)는 커맨드 완료 상태 코드(320)를 갖는 애플리케이션(302)으로 전송된다.
전술된 커맨드들 및 함수들 외에도, 애플릿의 관리와 관련된 여러 개의 추가적인 액티브 드라이브 API 커맨드들 및 함수들이 상이한 실시예들에서 제공된다. 일부 그러한 추가적인 액티브 드라이브 API 커맨드들 및 함수들의 예들이 하기에 제공된다.
애플릿 디버그 요청(Debug Applet request) 메시지/커맨드(도시되지 않음)가 애플리케이션(302)에 의해 DSD(104)로 전송되어, 식별된 애플릿을 위해 DSD(104)에서 디버그 모드 액티브 드라이브 API 함수를 호출할 것을 DSD(104)에게 지시할 수 있다. 호출 시, 디버그 모드 함수는 디버그 모드에서 애플릿의 실행을 제공하는 형태로 애플릿을 DSD(104) 내의 애플리케이션 실행 환경 내로 로딩할 수 있고, 이어서, 그 모드에서 애플릿을 실행시킬 수 있다. 디버그 모드는, 컴퓨터 프로그램들을 디버깅하는 데 공통으로 사용되는 인에이블된 디버그 특징들, 예컨대 중단점(breakpoint)들, 스텝핑(stepping), 변수 검사(inspecting variables) 등으로 애플릿을 원격으로 실행시키는 방식이다. 이는, 실행 환경에 디버그 라이브러리들을 포함시키고 인터넷 프로토콜(IP) 링크와 같은 통신 채널(또는 파이프)을 실행 환경과 호스트 머신의 디버깅 제어 프로그램(예컨대, GNU project에 의해 개발된 GDB, Eclipse Foundation으로부터의 이클립스(Eclipse) 등) 사이에서 확립함으로써 행해질 수 있다. 대안으로, 적합한 한정자(예컨대, 디버그 실행 모드를 나타내는 프로그램 파라미터)를 갖는 애플릿 실행 요청 메시지/커맨드(330)는 애플리케이션(302)에 의해 DSD(104)로 전송되어 그 안의 디버그 모드 함수를 호출할 수 있다. 응답 메시지(도시되지 않음)는, 일단 디버그 모드에서의 애플릿의 실행이 시작되면, 또는 DSD(104)가 디버그 모드에서의 애플릿의 실행이 시작되지 않을 것임을 판정할 때, DSD(104)에 의해 애플리케이션(302)으로 전송될 수 있다.
애플릿 중단 요청(Abort Applet request) 메시지/커맨드(도시되지 않음)가 애플리케이션(302)에 의해 DSD(104)로 전송되어, DSD(104)에서 실행되는 중일 수 있는 식별된 애플릿을 위해 DSD(104)에서 애플릿 중단 액티브 드라이브 API 함수를 호출할 것을 DSD(104)에게 지시할 수 있다. 호출 시, 애플릿 중단 함수는 식별된 애플릿의 실행을 중지시킬 수 있다. 응답 메시지(도시되지 않음)는, 애플릿(들)의 실행이 중지된 후에, 또는 DSD(104)가 애플릿들 중 하나 이상이 실행 중이 아님을 판정하는 경우, DSD(104)에 의해 애플리케이션(302)으로 전송될 수 있다.
획득 프로세스 상태 요청(Get Process Status request) 메시지/커맨드(도시되지 않음)가 애플리케이션(302)에 의해 DSD(104)로 전송되어, DSD(104)에서 실행되는 중일 수 있는 하나 이상의 식별된 애플릿들을 위해(또는 식별된 키 범위 내의 애플릿들을 위해) DSD(104)에서 획득 프로세스 상태 액티브 드라이브 API 함수를 호출할 것을 DSD(104)에게 지시할 수 있다. 호출 시, 획득 프로세스 상태 함수는 식별된 애플릿(들)에 대한 현재 프로세스 상태 정보를 획득/판정한다. 획득된 상태 정보(예컨대, 애플릿이 실행되는 중임, 정지됨 등등이라는 정보)를 포함하는 응답 메시지(도시되지 않음)가 DSD(104)에 의해 애플리케이션(302)으로 전송될 수 있다.
애플릿 업데이트 요청(Update Applet request) 메시지/커맨드(도시되지 않음)가 애플리케이션(302)에 의해 DSD(104)로 전송되어, 식별된 애플릿을 위해 DSD(104)에서 애플릿 업데이트 액티브 드라이브 API 함수를 호출할 것을 DSD(104)에게 지시할 수 있다. 호출 시, 애플릿 업데이트 함수(프로세서(116)에 의해 실행됨)는 비휘발성 매체들(112) 또는 휘발성 메모리(114)로부터, 식별된 애플릿을 판독할 수 있고, DSD(104)의 애플리케이션 실행 환경 내에서 애플릿을 업데이트할 수 있다. 응답 메시지(도시되지 않음)는, 애플릿이 성공적으로 입증 및 업데이트된 후에 DSD(104)에 의해 애플리케이션(302)으로 전송된다. 이어서, 업데이트된 애플릿은 DSD(104)에서 실행을 할 준비를 한다.
애플릿 삭제 요청(Uninstall Applet request) 메시지/커맨드(도시되지 않음)가 애플리케이션(302)에 의해 DSD(104)로 전송되어, 식별된 애플릿을 위해 DSD(104)에서 애플릿 삭제 액티브 드라이브 API 함수를 호출할 것을 DSD(104)에게 지시할 수 있다. 호출 시, 애플릿 삭제 함수(프로세서(116)에 의해 실행됨)는 DSD(104) 내의 애플리케이션 실행 환경으로부터, 식별된 애플릿을 제거할 수 있다. 응답 메시지(도시되지 않음)는, 애플릿이 성공적으로 제거된 후에, 또는 애플릿 삭제 함수가 애플리케이션 실행 환경으로부터 애플릿을 제거하지 못한 경우에, DSD(104)에 의해 애플리케이션(302)으로 전송된다.
도 3d는 애플릿 관찰 요청(Watch Applet request) 메시지/커맨드(338) 및 대응하는 응답 메시지(340)를 도시한 시스템(300)의 간소화된 블록 다이어그램이다. 도 3d에서 알 수 있는 바와 같이, 애플릿 관찰 요청 메시지/커맨드(338)는 도 3a, 도 3b, 및 도 3c에 도시된 것들과 실질적으로 유사한 필드들을 포함한다. 애플릿 관찰 요청 메시지/커맨드(338)에서, 커맨드 헤더(314)는 커맨드가 애플릿의 관리와 관련됨을 DSD(104)에게 나타내는 정보를 포함할 수 있다. 도 3d에서, 그 식별 정보는 애플릿 관리 메시지 타입(342)에 의해 표현된다. 애플릿 관찰 요청 메시지/커맨드(338)에서, 커맨드 본문(316)은 애플릿 관리 메시지 타입이 애플릿 관찰 타입(343)임을 특정할 수 있고, 애플릿(들)을 구성하는 객체들을 식별하는 하나 이상의 키들을 포함할 수 있다. 또한, 커맨드 본문(316)은 시작 키 및 종료 키에 의해 관찰 범주를 식별할 수 있고, 또한, 메시지 타입들(예컨대, 풋)을 식별할 수 있다. 관찰 실행 요청(Execute Watch request) 메시지/커맨드(338)를 수신한 것에 응답하여, DSD(104)는 애플릿을 관찰자 애플릿으로서 등록한다. 등록된 관찰자 애플릿은 DSD(104) 내에서 이벤트의 발생 시에 실행되는 애플릿이다. 예를 들어, 관찰자 애플릿은 키들의 특정 범위 내에서 임의의 키에 대해 "획득" 동작 시에 실행되도록 등록될 수 있다. 이벤트들은 반드시 데이터 저장 동작들과 직접적으로 관련되어야 하는 것은 아니다. 예를 들어, 애플릿은, 드라이브 온도가 임계치를 초과할 때마다, 또는 (예컨대, 셀프-모니터링, 분석, 및 리포팅 기술(Self-Monitoring, Analysis and Reporting Technology, SMART) 이벤트가 통지할 때) 드라이브 모니터링 프로그램으로부터의 통지에 응답하여, 또는 드라이브 스토리지가 임계치 초과일 때, 호출된 상태가 될 수 있다. 관찰자 애플릿은 등록된 이벤트의 발생 시에 호출에 응답하여 통지를 호스트에 전송할 수 있다.
도 3d에서 알 수 있는 바와 같이, 애플릿 관찰 요청 메시지/커맨드(338)의 완료는 대응하는 응답 메시지(340)가 DSD(104)로부터 애플리케이션(302)으로 전송되는 것을 초래한다. 응답 메시지(340)에서, 커맨드 헤더(314)는, 메시지(340)가 애플릿 관찰 요청 메시지/커맨드(338)에 대한 응답임을 애플리케이션(302)에게 나타내는 정보를 포함할 수 있다. 도 3d에서, 그 식별 정보는 애플릿 관찰 응답 메시지 타입(314)에 의해 표현된다. 응답 메시지(340)는 커맨드 완료 상태 코드(320)를 갖는 애플리케이션(302)으로 전송된다.
도 3e는 DSD(104)와 애플리케이션(302) 사이에서의 애플리케이션 실행 관련 요청/응답 메시지 또는 커맨드 교환이 완료된 상태에서의 시스템(300)의 간소화된 블록 다이어그램이다. 전술된 바와 같이, 애플리케이션(302)은 단지 커맨드들(예를 들어, 도 3b 내지 도 3d와 관련하여 전술된 커맨드들)을 DSD(104)와 교환하고, 애플릿의 실제 실행은 애플리케이션(302)과는 독립적으로 DSD(104) 내에서 실행된다. 앞서 언급된 바와 같이, DSD(104) 내에서의 애플릿의 실행으로부터 얻은 결과들은 DSD(104) 상에 국부적으로 저장될 수 있고, 애플리케이션(302)으로 전송될 수 있고, 시스템(300) 내에서의 상이한 DSD들(도 3a 내지 도 3e에 도시되지 않음) 중 하나 이상의 상이한 것들로 전송될 수 있고, 등등일 수 있다.
도 3a 내지 도 3e와 관련하여 상기에 제공된 설명은 애플리케이션 실행 환경이 DSD(104) 내에 있는 실시예에 대한 것이라는 것에 주목해야 한다. 도 1b 및 도 1c의 실시예들에서, 예를 들어, 액티브 드라이브 API 커맨드들은 DSD(104)에 커플링된 애플리케이션 실행 컴포넌트(117) 내에서 실행될 수 있다.
도 4는 방법 실시예의 간소화된 흐름도(400)이다. 단계(402)에서, 애플리케이션이 데이터 스토리지 드라이브 내에 적어도 하나의 객체로서 저장된다. 적어도 하나의 객체는 애플리케이션을 저장하기 위해 가변 크기를 갖는 데이터 필드 및 객체를 식별하는 추적 표시자를 포함한다. 단계(404)에서, 애플리케이션에 관한 복수의 커맨드들 중 적어도 하나의 커맨드가 데이터 스토리지 드라이브에서 또는 데이터 스토리지 드라이브와 연관된 애플리케이션 실행 컴포넌트에서 수신된다. 단계(406)에서, 하나 이상의 커맨드들이 데이터 스토리지 드라이브에서 또는 데이터 스토리지 드라이브와 연관된 애플리케이션 실행 컴포넌트에서 실행된다.
다양한 실시예들에 따르면, 본 명세서에 기술되는 방법들은 전술된 제어기들/프로세서들과 같은 컴퓨터 프로세서 또는 제어기 상에서 실행되는 하나 이상의 소프트웨어 프로그램들로서 구현될 수 있다. 주문형 집적회로들, 프로그래밍가능 로직 어레이들, 및 다른 하드웨어 디바이스들을 포함하지만 이들로 제한되지 않는 전용 하드웨어 구현예들이, 마찬가지로, 본 명세서에 기술된 방법들을 구현하도록 구성될 수 있다.
전술된 액티브 드라이브 API를 사용함으로써, 호스트가 임의의 다른 직접/중간 호스트(들)/서버들로부터의 개입 없이 커맨드(예컨대, 패턴 매칭)를 다수의 DSD들(예컨대, 10,000개 이상의 DSD들)로 직접적으로 동시에 전송할 수 있다. 이어서, 커맨드는 호스트와 DSD들 사이에서 어떠한 사용자 데이터 이송 없이 각각의 DSD 내에서 프로세싱되어, 네트워크 트래픽 및 대응하는 네트워킹 장비 요건들을 감소시킬 수 있다. 그 결과, 이점들 중 하나는 액티브 드라이브 API를 채용하지 않는 종래의 시스템에 의해 활용될 수 있는 대다수의 데이터 서버들이 제거될 수 있다는 것이다. 예를 들어, 액티브 드라이브 API를 채용하지 않는 종래의 시스템에서, 하나의 호스트가 32개 내지 100개의 DSD들을 서빙할 수 있다. 전술된 바와 같이, 액티브 드라이브 API를 활용하는 시스템에서, 단일의 호스트가 10,000개 이상의 DSD들을 서빙할 수 있다. 또한, 액티브 드라이브 API를 채용하는 시스템들에서, 데이터 프로세싱은 DSD들 내에서 이동된다. 따라서, 대다수의 데이터 서버들/계산 코어들이 제거될 수 있다. 프로세싱이 종합되는 것이 아니라 분산되므로, 더 작고/더 느린 프로세서들이 사용될 수 있다. 프로세싱은 드라이브 제어기 ASIC 내에 임베드될 수 있고, DRAM 메모리와 같은 리소스들을 공유하여 컴포넌트들을 감소시킬 수 있다. 다른 결과적인 이점들은 개선된 시스템 성능, 더 양호한 신뢰성, 더 양호한 결함 격리, 감소된 시스템 전력, 및 감소된 시스템 총 비용을 포함한다.
본 명세서에 기술된 실시예들의 예시들은 다양한 실시예들의 구조에 대한 대체적인 이해를 제공하도록 의도된다. 예시들은 본 명세서에 기술된 구조들 또는 방법들을 활용하는 장치 및 시스템들의 요소들 및 특징들 모두에 대한 완전한 설명으로서의 역할을 하도록 의도되지 않는다. 많은 다른 실시예들이 본 발명을 검토할 시에 당업자에게 명백할 수 있다. 다른 실시예들이, 본 발명의 범주로부터 벗어남이 없이 구조적 및 논리적 치환 및 변경들이 이루어질 수 있도록 활용될 수 있고 본 발명으로부터 도출될 수 있다. 추가적으로, 예시들은 단지 대표적인 것이고, 축척대로 묘사된 것이 아닐 수도 있다. 예시들 내의 소정 비율들은 과장될 수 있는 반면, 다른 비율들은 감소될 수 있다. 따라서, 본 개시내용 및 도면들은 제한적이 아니라 예시적인 것으로 간주되어야 한다.
본 발명의 하나 이상의 실시예들은 본 명세서에서, 개별적으로 그리고/또는 총체적으로, 단지 편의만을 위해 그리고 본 출원의 범주를 임의의 특정 실시예 또는 발명적 개념으로 제한하도록 의도하지 않고서, "발명"이라는 용어로 지칭될 수 있다. 더욱이, 특정 실시예들이 본 명세서에 도시되고 기술되었지만, 동일하거나 유사한 목적을 달성하도록 설계된 임의의 후속 배열물이 도시된 특정 실시예를 대체할 수 있다는 것이 이해되어야 한다. 본 개시내용은 다양한 실시예들의 임의의 그리고 모든 후속 적응예들 또는 변형예들을 커버하도록 의도된다. 상기의 실시예들, 및 본 명세서에 구체적으로 기술되지 않은 다른 실시예들의 조합들은 본 설명을 검토할 시에 당업자에게 명백해질 것이다.
본 발명의 요약서는 37 C.F.R. §1.72(b)에 따라 제공되고, 그것이 청구범위의 범주 또는 의미를 해석하거나 제한하는 데 사용되지 않을 것이라는 이해 하에 제출된다. 추가적으로, 전술한 발명을 실시하기 위한 구체적인 내용에서, 다양한 특징들이 본 발명을 간소화시키는 목적을 위해 단일의 실시예 내에서 함께 그룹화되거나 설명될 수 있다. 본 개시내용은, 청구되는 실시예들이 각각의 청구항에서 명확히 인용되는 것보다 더 많은 특징들을 포함한다는 의도를 반영하는 것으로 해석되어서는 안 된다. 오히려, 하기의 청구범위가 반영하는 바와 같이, 본 발명의 주제는 개시된 실시예들 중 임의의 실시예의 전부보다는 적은 특징들에 관한 것이다.
전술된 주제는 제한적인 것이 아니라 예시적인 것으로 간주되어야 하고, 첨부된 청구범위는 본 발명의 진정한 사상 및 범주 내에 있는 모든 그러한 수정예들, 개선예들, 및 다른 실시예들 모두를 커버하도록 의도된다. 따라서, 법률에 의해 허용되는 최대 범위까지, 본 발명의 범주는 하기의 청구범위 및 그들의 등가물들의 최광의의 허용가능한 해석에 의해 결정되어야 하며, 전술한 발명을 실시하기 위한 구체적인 내용에 의해 국한되어서도 안 되고 제한되어서도 안 될 것이다.
Claims (20)
- 방법으로서,
데이터 스토리지 드라이브 내에 적어도 하나의 객체로서 애플리케이션을 저장하는 단계 - 상기 적어도 하나의 객체는,
상기 적어도 하나의 객체를 식별하는 키; 및
상기 애플리케이션을 저장하기 위해 가변 크기를 갖는 데이터 필드를 포함함 -;
상기 데이터 스토리지 드라이브에서 또는 상기 데이터 스토리지 드라이브와 연관된 애플리케이션 실행 컴포넌트에서, 상기 애플리케이션에 관한 하나 이상의 커맨드들을 수신하는 단계; 및
상기 데이터 스토리지 드라이브 또는 상기 데이터 스토리지 드라이브와 연관된 애플리케이션 실행 컴포넌트 중 적어도 하나에서 상기 하나 이상의 커맨드들을 실행시키는 단계를 포함하는, 방법. - 제1항에 있어서, 상기 데이터 스토리지 드라이브 내에 적어도 하나의 객체로서 상기 애플리케이션을 저장하는 단계는, 중간 객체 코드의 형태로 상기 데이터 스토리지 드라이브 내의 비휘발성 매체들 또는 휘발성 메모리 중 적어도 하나 내에 상기 적어도 하나의 객체를 저장하는 단계를 포함하는, 방법.
- 제2항에 있어서,
상기 비휘발성 매체들 또는 상기 휘발성 메모리로부터 상기 중간 객체 코드를 판독하는 단계; 및
상기 데이터 스토리지 드라이브에서 또는 상기 데이터 스토리지 드라이브와 연관된 상기 애플리케이션 실행 컴포넌트에서 상기 중간 객체 코드를 실행가능한 코드로서 어셈블하는 단계를 추가로 포함하는, 방법. - 제3항에 있어서, 상기 데이터 스토리지 드라이브에서 또는 상기 데이터 스토리지 드라이브와 연관된 상기 애플리케이션 실행 컴포넌트에서 상기 실행가능한 코드를 실행시키는 단계를 추가로 포함하는, 방법.
- 제4항에 있어서, 상기 실행가능한 코드를 실행시키는 것으로부터 생성된 임의의 결과들을 상기 데이터 스토리지 드라이브 내의 상기 비휘발성 매체들 또는 상기 휘발성 메모리 중 적어도 하나 내에 저장하는 단계를 추가로 포함하는, 방법.
- 제4항에 있어서, 상기 데이터 스토리지 드라이브에서 상기 실행가능한 코드를 실행시키는 것으로부터 생성된 임의의 결과들을 호스트 컴퓨터 또는 하나 이상의 다른 데이터 스토리지 드라이브들로 전송하는 단계를 추가로 포함하는, 방법.
- 제6항에 있어서, 상기 호스트 컴퓨터, 상기 데이터 스토리지 드라이브, 및 상기 다른 데이터 스토리지 드라이브들은 네트워크를 통해 통신하는, 방법.
- 제4항에 있어서, 상기 데이터 스토리지 드라이브 내에서의 상기 애플리케이션의 실행을 모니터링하는 단계를 추가로 포함하는, 방법.
- 제4항에 있어서, 상기 애플리케이션의 실행과 관련된 상태 정보를 상기 데이터 스토리지 드라이브와 통신하는 호스트 컴퓨터로 전송하는 단계를 추가로 포함하는, 방법.
- 데이터 스토리지 드라이브 내에서의 애플리케이션의 설치 및 실행을 가능하게 하는 애플리케이션 프로그래밍 인터페이스(application programming interface, API)를 인스턴스화하도록 구성된 시스템으로서,
프로세서; 및
상기 프로세서에 통신 가능하게 커플링되고, 상기 API를 구현하는 컴퓨터 실행가능 명령어들을 내부에 저장한 메모리를 포함하고,
상기 컴퓨터 실행가능 명령어들은, 실행될 때, 상기 프로세서로 하여금,
상기 데이터 스토리지 드라이브 상에 키-값 객체들로서 상기 애플리케이션의 설치를 가능하게 하고, 상기 데이터 스토리지 드라이브의 제어된 환경 내에서의 상기 애플리케이션의 실행을 가능하게 하는, 시스템. - 제10항에 있어서, 상기 데이터 스토리지 드라이브 내에 저장된 사용자 데이터의 국부적 프로세싱을 지원하는, 상기 애플리케이션에 대한 실행 환경을 추가로 포함하는, 시스템.
- 제10항에 있어서, 상기 메모리는, 실행될 때, 상기 프로세서로 하여금, 애플리케이션 설치 커맨드를 수신한 것에 응답하여, 상기 키-값 객체들에 의해 상기 애플리케이션을 식별하게 하고 상기 애플리케이션을 상기 데이터 스토리지 드라이브의 애플리케이션 실행 환경 내에 로딩하게 하는 컴퓨터 실행가능 명령어들을 내부에 추가로 저장한, 시스템.
- 제12항에 있어서, 상기 메모리는, 실행될 때, 상기 프로세서로 하여금, 애플리케이션 실행 커맨드를 수신한 것에 응답하여, 상기 키-값 객체들에 의해 상기 애플리케이션을 식별하게 하고 상기 애플리케이션을 상기 데이터 스토리지 드라이브의 상기 애플리케이션 실행 환경 내에서 실행시키게 하는 컴퓨터 실행가능 명령어들을 내부에 추가로 저장한, 시스템.
- 제10항에 있어서, 상기 메모리는, 실행될 때, 상기 프로세서로 하여금, 애플리케이션 관찰 커맨드를 수신한 것에 응답하여, 상기 키-값 객체들에 의해 상기 애플리케이션을 식별하게 하고 상기 애플리케이션을 관찰자 애플릿으로서 상기 데이터 스토리지 드라이브의 상기 애플리케이션 실행 환경 내에 설치하게 하는 컴퓨터 실행가능 명령어들을 내부에 추가로 저장한, 시스템.
- 제10항에 있어서, 상기 데이터 스토리지 드라이브는 디스크 드라이브, 솔리드 스테이트 드라이브, 또는 하이브리드 드라이브 중 하나인, 시스템.
- 방법으로서,
프로세서에 의해, 데이터 스토리지 드라이브에서 애플리케이션의 실행가능한 코드로서 상기 애플리케이션의 중간 객체 코드를 어셈블하는 단계; 및
상기 애플리케이션의 상기 실행가능한 코드를 적어도 하나의 데이터 저장 매체 상에 저장하는 단계를 포함하는, 방법. - 제16항에 있어서, 상기 적어도 하나의 데이터 저장 매체는 상기 데이터 스토리지 드라이브 내에 비휘발성 데이터 저장 매체 또는 휘발성 메모리 중 적어도 하나를 포함하는, 방법.
- 제16항에 있어서, 상기 중간 객체 코드를 어셈블하는 단계 전에 상기 데이터 스토리지 드라이브 내에 하나 이상의 키-값 객체들로서 상기 중간 객체 코드를 저장하는 단계를 추가로 포함하는, 방법.
- 제16항에 있어서, 상기 데이터 스토리지 드라이브 내에 애플리케이션 실행 환경을 제공하는 단계를 추가로 포함하고, 상기 애플리케이션 실행 환경은 상기 데이터 스토리지 드라이브 내에 저장된 사용자 데이터의 국부적 프로세싱을 지원하는, 방법.
- 제19항에 있어서,
상기 데이터 스토리지 드라이브에서 애플리케이션 실행 커맨드를 수신하는 단계;
상기 애플리케이션 실행 커맨드를 수신하는 단계에 응답하여, 상기 적어도 하나의 데이터 저장 매체로부터 상기 실행가능한 코드를 상기 애플리케이션 실행 환경 내에 로딩하는 단계; 및
상기 애플리케이션 실행 환경에서 상기 실행가능한 코드를 실행시키는 단계를 추가로 포함하는, 방법.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662408446P | 2016-10-14 | 2016-10-14 | |
US62/408,446 | 2016-10-14 | ||
US15/378,995 US10613882B2 (en) | 2016-10-14 | 2016-12-14 | Active drive API |
US15/378,995 | 2016-12-14 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180041609A true KR20180041609A (ko) | 2018-04-24 |
KR102093105B1 KR102093105B1 (ko) | 2020-03-25 |
Family
ID=61903844
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020170133554A KR102093105B1 (ko) | 2016-10-14 | 2017-10-13 | 액티브 드라이브 api |
Country Status (3)
Country | Link |
---|---|
US (4) | US10802853B2 (ko) |
KR (1) | KR102093105B1 (ko) |
CN (1) | CN107967158B (ko) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017214862A1 (zh) * | 2016-06-14 | 2017-12-21 | 华为技术有限公司 | 数据访问方法和相关装置及系统 |
US10802853B2 (en) | 2016-10-14 | 2020-10-13 | Seagate Technology Llc | Active drive |
KR20190051564A (ko) * | 2017-11-07 | 2019-05-15 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작 방법 |
JP7132491B2 (ja) * | 2018-05-14 | 2022-09-07 | 富士通株式会社 | メモリ制御装置、メモリ制御プログラムおよびメモリ制御方法 |
CN109522283B (zh) * | 2018-10-30 | 2021-09-21 | 深圳先进技术研究院 | 一种重复数据删除方法及系统 |
CN109710260B (zh) * | 2018-11-16 | 2022-03-08 | 青岛特来电新能源科技有限公司 | 一种基于多平台的小程序代码转换方法 |
US11061728B2 (en) * | 2019-02-12 | 2021-07-13 | Western Digital Technologies, Inc. | Systems and methods for heterogeneous address space allocation |
US11372697B2 (en) * | 2020-03-20 | 2022-06-28 | Netapp, Inc. | Message based code execution using key-value storage |
US20220374331A1 (en) * | 2020-11-16 | 2022-11-24 | Baidu Online Network Technology (Beijing) Co., Ltd. | Method of debugging applet, electronic device, and storage medium |
US11954341B2 (en) | 2022-05-05 | 2024-04-09 | Seagate Technology Llc | External storage of internal drive management data |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6993524B1 (en) * | 1999-06-25 | 2006-01-31 | Hitachi, Ltd. | Network-attached disk unit with data protection function and server protecting data stored in network-attached disk device |
US20150106784A1 (en) * | 2013-10-16 | 2015-04-16 | One Smart Star Limited | Device, system, and method of communication |
Family Cites Families (69)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03266039A (ja) * | 1990-03-16 | 1991-11-27 | Fujitsu Ltd | フリーフォーマットデータリンク処理方式 |
US5771379A (en) | 1995-11-01 | 1998-06-23 | International Business Machines Corporation | File system and method for file system object customization which automatically invokes procedures in response to accessing an inode |
US6226665B1 (en) | 1996-09-19 | 2001-05-01 | Microsoft Corporation | Application execution environment for a small device with partial program loading by a resident operating system |
US6128012A (en) | 1996-09-19 | 2000-10-03 | Microsoft Corporation | User interface for a portable data management device with limited size and processing capability |
US6298401B1 (en) | 1997-08-11 | 2001-10-02 | Seagate Technology Llc | Object oriented storage device having a disc drive controller providing an interface exposing methods which are invoked to access objects stored in a storage media |
CN1158604C (zh) | 1997-08-28 | 2004-07-21 | 西加特技术有限责任公司 | 盘片驱动器以及将信息存储在驱动器盘片上的方法 |
US6718540B1 (en) * | 1997-11-17 | 2004-04-06 | International Business Machines Corporation | Data processing system and method for storing data in a communication network |
US6253370B1 (en) | 1997-12-01 | 2001-06-26 | Compaq Computer Corporation | Method and apparatus for annotating a computer program to facilitate subsequent processing of the program |
US6282697B1 (en) | 1998-09-18 | 2001-08-28 | Wylci Fables | Computer processing and programming method using autonomous data handlers |
US7127701B2 (en) * | 1998-09-18 | 2006-10-24 | Wylci Fables | Computer processing and programming method using autonomous data handlers |
JP2000122814A (ja) | 1998-10-15 | 2000-04-28 | Hitachi Ltd | 拡張型ネットワーク接続二次記憶方法及び装置 |
US6317143B1 (en) | 1999-01-26 | 2001-11-13 | Gateway, Inc. | Programmable graphical user interface control system and method |
US6845498B1 (en) | 1999-05-11 | 2005-01-18 | Microsoft Corporation | Method and apparatus for sharing data files among run time environment applets in an integrated circuit card |
US6466978B1 (en) | 1999-07-28 | 2002-10-15 | Matsushita Electric Industrial Co., Ltd. | Multimedia file systems using file managers located on clients for managing network attached storage devices |
US7814157B2 (en) * | 2000-01-11 | 2010-10-12 | Eolas Technlogies, Inc. | Hypermedia browser API simulation to enable use of browser plug-ins and applets as embedded widgets in script-language-based interactive programs |
US6748457B2 (en) * | 2000-02-03 | 2004-06-08 | Realtime Data, Llc | Data storewidth accelerator |
US6601101B1 (en) | 2000-03-15 | 2003-07-29 | 3Com Corporation | Transparent access to network attached devices |
US6826613B1 (en) * | 2000-03-15 | 2004-11-30 | 3Com Corporation | Virtually addressing storage devices through a switch |
WO2003023597A2 (en) | 2001-09-10 | 2003-03-20 | International Business Machines Corporation | Data storage drives in an automated data storage library |
US20040003043A1 (en) | 2002-06-20 | 2004-01-01 | International Business Machines Corporation | Remote control of document objects in a collaborative environment |
EP2264628A1 (en) | 2002-09-18 | 2010-12-22 | Netezza Corporation | Intelligent storage device controller |
US7827527B1 (en) * | 2004-02-12 | 2010-11-02 | Chiluvuri Raju V | System and method of application development |
US7328303B1 (en) | 2004-06-30 | 2008-02-05 | Sun Microsystems, Inc. | Method and system for remote execution of code on a distributed data storage system |
US20060070043A1 (en) * | 2004-07-27 | 2006-03-30 | Viega John T | System and method for analyzing computer code |
US20070067325A1 (en) * | 2005-02-14 | 2007-03-22 | Xsapio, Ltd. | Methods and apparatus to load and run software programs in data collection devices |
US7590799B2 (en) | 2005-06-16 | 2009-09-15 | Seagate Technology Llc | OSD deterministic object fragmentation optimization in a disc drive |
JP2007004522A (ja) * | 2005-06-24 | 2007-01-11 | Renesas Technology Corp | 記憶装置 |
US8522228B1 (en) * | 2006-03-31 | 2013-08-27 | Vmware, Inc. | Updating software on dormant disks |
US7826161B2 (en) | 2006-06-30 | 2010-11-02 | Seagate Technology Llc | Object based storage device with storage medium having varying media characteristics |
US8661425B1 (en) | 2006-07-28 | 2014-02-25 | American Megatrends, Inc. | Method, apparatus, and computer-readable medium for storing data associated with a firmware program |
US7725614B2 (en) | 2006-08-08 | 2010-05-25 | Sandisk Corporation | Portable mass storage device with virtual machine activation |
US9081948B2 (en) | 2007-03-13 | 2015-07-14 | Red Hat, Inc. | Configurable smartcard |
US8196101B1 (en) * | 2007-04-23 | 2012-06-05 | Sandia Corporation | Reach and get capability in a computing environment |
US8677101B2 (en) | 2007-06-07 | 2014-03-18 | International Business Machines Corporation | Method and apparatus for cooperative software multitasking in a processor system with a partitioned register file |
US8060681B2 (en) * | 2007-11-27 | 2011-11-15 | Microsoft Corporation | Interface protocol and API for a wireless transceiver |
US7747784B2 (en) * | 2008-03-04 | 2010-06-29 | Apple Inc. | Data synchronization protocol |
CN101551838B (zh) * | 2008-04-03 | 2013-01-16 | 锐迪科微电子(上海)有限公司 | 一种存储卡身份认证方法及其系统 |
US8078448B1 (en) * | 2008-05-27 | 2011-12-13 | Adobe Systems Incorporated | Systems and methods for automated testing |
JP5225003B2 (ja) * | 2008-10-01 | 2013-07-03 | キヤノン株式会社 | メモリ保護方法、情報処理装置、メモリ保護プログラム及びメモリ保護プログラムを記録した記録媒体 |
US20110019007A1 (en) | 2009-02-18 | 2011-01-27 | Gidon Elazar | Method, apparatus and method for adding functionality to a digital camera |
US20110025858A1 (en) | 2009-02-18 | 2011-02-03 | Gidon Elazar | Method, apparatus, and system for adding functionality to a digital camera |
US9015333B2 (en) | 2009-12-18 | 2015-04-21 | Cisco Technology, Inc. | Apparatus and methods for handling network file operations over a fibre channel network |
US8700842B2 (en) * | 2010-04-12 | 2014-04-15 | Sandisk Enterprise Ip Llc | Minimizing write operations to a flash memory-based object store |
JP5657364B2 (ja) | 2010-12-08 | 2015-01-21 | フェリカネットワークス株式会社 | 情報処理装置および方法、プログラム、並びに情報処理システム |
US8959492B2 (en) * | 2010-12-14 | 2015-02-17 | Ngmoco, Llc | Communication protocol between a high-level language and a native language |
US9015345B2 (en) | 2010-12-15 | 2015-04-21 | Microsoft Corporation | API supporting server and key based networking |
TWI446172B (zh) * | 2011-05-06 | 2014-07-21 | Phison Electronics Corp | 記憶體儲存裝置、其記憶體控制器與存取方法 |
CN102937932B (zh) * | 2011-08-16 | 2015-08-19 | 中国银联股份有限公司 | 集成异构测试工具的自动化测试装置及方法 |
GB2494655B (en) * | 2011-09-14 | 2014-01-15 | Kraft Foods R & D Inc | Pouch location device |
CN103019918B (zh) * | 2011-09-27 | 2015-07-15 | 腾讯科技(深圳)有限公司 | 一种获取应用程序使用频率的方法和装置 |
DE102011122242A1 (de) * | 2011-12-23 | 2013-06-27 | Giesecke & Devrient Gmbh | Verfahren zur Kommunikation mit einer Applikation auf einem portablen Datenträger sowie ein solcher portabler Datenträger |
US9262133B2 (en) * | 2012-01-27 | 2016-02-16 | Amx Llc | Mapping and formatting input commands to a third party protocol |
US9286327B2 (en) * | 2012-03-30 | 2016-03-15 | Commvault Systems, Inc. | Data storage recovery automation |
US9172698B1 (en) | 2012-10-12 | 2015-10-27 | Ut-Battelle, Llc | System and method for key generation in security tokens |
US9798673B2 (en) | 2013-03-14 | 2017-10-24 | Sandisk Technologies Llc | Paging enablement of storage translation metadata |
US9298521B1 (en) | 2013-04-29 | 2016-03-29 | Seagate Technology Llc | Command sets and functions |
US9641385B1 (en) | 2013-12-16 | 2017-05-02 | Amazon Technologies, Inc. | Dynamic system configuration in a virtual environment |
US9939865B2 (en) * | 2014-06-13 | 2018-04-10 | Seagate Technology Llc | Selective storage resource powering for data transfer management |
CN104035805A (zh) * | 2014-06-27 | 2014-09-10 | 深圳市中兴移动通信有限公司 | 一种快捷启动应用程序的方法和装置 |
US9990305B2 (en) * | 2014-09-19 | 2018-06-05 | Nxp Usa, Inc. | Memory management component having multiple memory management modules and method therefor |
US9411539B2 (en) | 2014-09-24 | 2016-08-09 | International Business Machines Corporation | Providing access information to a storage controller to determine a storage tier for storing data |
JP6259935B2 (ja) * | 2015-01-30 | 2018-01-10 | 株式会社日立製作所 | ストレージ管理システム、ストレージシステム及び機能拡張方法 |
CN105049900B (zh) * | 2015-08-21 | 2018-06-05 | 青岛海信电器股份有限公司 | 一种智能电视终端控制方法、智能电视终端及系统 |
US10296232B2 (en) * | 2015-09-01 | 2019-05-21 | Western Digital Technologies, Inc. | Service level based control of storage systems |
CN105223842A (zh) * | 2015-09-07 | 2016-01-06 | 深圳市爱的扣扣科技有限公司 | 一种穿戴终端按键功能的设置方法 |
US10313479B2 (en) | 2015-11-24 | 2019-06-04 | Vmware, Inc. | Methods and apparatus to manage workload domains in virtual server racks |
US9870217B2 (en) | 2016-03-08 | 2018-01-16 | Oracle International Corporation | Toolkit event configuration of applets on a card computing device with installation parameters |
US10178000B2 (en) * | 2016-07-21 | 2019-01-08 | Dell Products L.P. | Integrated storage/SAN monitoring and control system |
US10802853B2 (en) | 2016-10-14 | 2020-10-13 | Seagate Technology Llc | Active drive |
-
2016
- 2016-12-14 US US15/378,983 patent/US10802853B2/en active Active
- 2016-12-14 US US15/378,995 patent/US10613882B2/en active Active
-
2017
- 2017-10-13 KR KR1020170133554A patent/KR102093105B1/ko active IP Right Grant
- 2017-10-16 CN CN201710959488.4A patent/CN107967158B/zh active Active
-
2018
- 2018-09-12 US US16/129,520 patent/US11119797B2/en active Active
-
2019
- 2019-12-19 US US16/720,927 patent/US10936350B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6993524B1 (en) * | 1999-06-25 | 2006-01-31 | Hitachi, Ltd. | Network-attached disk unit with data protection function and server protecting data stored in network-attached disk device |
US20150106784A1 (en) * | 2013-10-16 | 2015-04-16 | One Smart Star Limited | Device, system, and method of communication |
Also Published As
Publication number | Publication date |
---|---|
CN107967158A (zh) | 2018-04-27 |
US10802853B2 (en) | 2020-10-13 |
US10613882B2 (en) | 2020-04-07 |
US20180107499A1 (en) | 2018-04-19 |
US20200183715A1 (en) | 2020-06-11 |
KR102093105B1 (ko) | 2020-03-25 |
US10936350B2 (en) | 2021-03-02 |
US20180107467A1 (en) | 2018-04-19 |
CN107967158B (zh) | 2020-12-25 |
US11119797B2 (en) | 2021-09-14 |
US20190026134A1 (en) | 2019-01-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102093105B1 (ko) | 액티브 드라이브 api | |
US20130055261A1 (en) | Controlling virtual machine in cloud computing system | |
US10055309B1 (en) | Parallel restoration of a virtual machine's virtual machine disks | |
US9213500B2 (en) | Data processing method and device | |
US20120284471A1 (en) | Virtual machine disk migration | |
TWI510932B (zh) | 塊儲存閘道模組、儲存中介系統、雲端儲存系統、提供對塊儲存的存取的方法、儲存中介方法與內容遞送裝置 | |
US20120216184A1 (en) | Runtime code replacement | |
US9152505B1 (en) | Verified hardware-based erasure of data on distributed systems | |
US10216562B2 (en) | Generating diagnostic data | |
US10547683B2 (en) | Object based storage systems that utilize direct memory access | |
US20190129626A1 (en) | Selectively limiting throughput of test objects that share system resources with production objects | |
US8738935B1 (en) | Verified erasure of data implemented on distributed systems | |
US10250563B2 (en) | Secure device and proxy for secure operation of a host data processing system | |
US10452273B2 (en) | Preemptive event-based data migration | |
US9471223B2 (en) | Volume class management | |
US20160283156A1 (en) | Key-value drive hardware | |
US10101940B1 (en) | Data retrieval system and method | |
US10528294B2 (en) | Provisioning and managing virtual machines from a storage management system | |
US11853615B2 (en) | Including network storage with direct attached storage | |
US11941443B2 (en) | Distributed storage workload management | |
US9354993B2 (en) | System and method to reduce service disruption in a shared infrastructure node environment | |
US20240201856A1 (en) | Provide host applications ability to dynamically manage application specific functionality on storage application | |
US9817585B1 (en) | Data retrieval system and method | |
US9524190B1 (en) | Systems and methods for caching data on virtualization servers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |