KR20040045907A - 고유 및 비고유 공유 데이터 구조 사이의 데이터 정렬 - Google Patents

고유 및 비고유 공유 데이터 구조 사이의 데이터 정렬 Download PDF

Info

Publication number
KR20040045907A
KR20040045907A KR10-2004-7005968A KR20047005968A KR20040045907A KR 20040045907 A KR20040045907 A KR 20040045907A KR 20047005968 A KR20047005968 A KR 20047005968A KR 20040045907 A KR20040045907 A KR 20040045907A
Authority
KR
South Korea
Prior art keywords
data
native
unique
parameters
parameter
Prior art date
Application number
KR10-2004-7005968A
Other languages
English (en)
Other versions
KR100861641B1 (ko
Inventor
배리 본드
아틈 샤피클 크할리드
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20040045907A publication Critical patent/KR20040045907A/ko
Application granted granted Critical
Publication of KR100861641B1 publication Critical patent/KR100861641B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45537Provision of facilities of other operating environments, e.g. WINE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45554Instruction set architectures of guest OS and hypervisor or native processor differ, e.g. Bochs or VirtualPC on PowerPC MacOS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Information Transfer Systems (AREA)
  • Emergency Protection Circuit Devices (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)

Abstract

여기에 기재된 것은 고유 컴퓨팅 플랫폼에서 비고유 프로그램의 구성 요소들의 작동을 용이하게 하는 기술이다. 이런 기술은 다른 패러다임(paradigm)의 프로그램 모듈 또는 운영 시스템들이 매개 변수를 사용할 수 있게 하기 위해 필요에 따라 데이터 구조의 매개 변수 정렬을 위한 메커니즘(mechanism)을 제공한다. 데이터 구조의 매개 변수의 데이터는 고유 패러다임에 매치(match)되도록 정렬된다. 전형적으로, 이런 데이터 구조들은 비고유 프로그램 모듈 및 고유 운영 시스템 (또는 기타 프로그램 모듈)에 의해 공유된다. 이것은 데이터 - 그렇지 않으면 그것은 비정렬 및 성능 방해될수 있다 -가 고유 플랫폼에 의해 빠르고 쉽게 액세스 가능 하도록 정열된다. 이 추상 개념은 이 특허의 영역을 제한하기 위해 의도된 것은 아니다. 본 발명의 영역은 첨부된 청구항에 지적된다.

Description

고유 및 비고유 공유 데이터 구조 사이의 데이터 정렬{DATA ALIGNMENT BETWEEN NATIVE AND NON-NATIVE SHARED DATA STRUCTURES}
특정한 컴퓨팅 플랫폼에서 작동되도록 설계된 어플리케이션들은 다른 컴퓨팅 플랫폼에서 작동되지 않는다. 일반적으로, 소프트웨어는 작동되도록 설계된 특정한 컴퓨팅 플랫폼에 빠져나갈 수 없게 링크(link)되어있다. 예를 들어, 유닉스(Unix) 운영 시스템의 특정한 구현을 작동 시키는 미니컴퓨터(minicomputer)에서 작동되도록 작성되고 컴파일(compile)된 소프트웨어는 독점적인 운영 시스템을 사용하는 핸드헬드(hand-held) 컴퓨터에서 기능하지 않는다.
컴퓨팅 플랫폼은 전형적으로 운영 시스템(OS) 및 컴퓨팅 하드웨어 구조를 포함한다. OS의 예에는 엠에스도스(MS-DOS?), 윈도우즈XP(Windows? XP), 윈도우즈2000(Windows? 2000), 윈도우즈NT 4.0(Windows NT? 4.0), 윈도우즈ME(Windows? ME), 윈도우즈98(Windows? 98), 윈도우즈95(Windows? 95) 등의 마이크로소프트(Microsoft?) 운영 시스템들이 포함된다. 컴퓨팅 하드웨어구조의 예에는 80286, 펜티엄(Pentium?), 펜티엄Ⅱ(Pentium?Ⅱ), 펜티엄Ⅲ(Pentium?Ⅲ), 아이테니엄(itanium™) 등의 인텔 마이크로프로세서(Intel? microprocessor)와 관련된 것들이 포함된다.
컴퓨팅 플랫폼의 예에는 16비트(bit) 플랫폼(마이크로소프트의 엠에스도스 및 인텔 80286 등), 32비트 플랫폼(마이크로소프트의 윈도우즈NT 및 인텔의 펜티엄Ⅱ 등), 및 64비트 플랫폼(인텔의 아이테니엄 및 윈도우즈XP 64비트 에디션(Edition))이 포함된다. 컴퓨팅 플랫폼은 또한 플랫폼, 컴퓨팅 환경, 또는 환경으로 불려질 수 있다.
특정한 버젼(version)의 어플리케이션(application)은 특정한 플랫폼에서 작동되도록 설계된다. 이런 어플리케이션들이 그들의 특정한 플랫폼에서 실행될 때 그들은 "고유(native)"하다고 불려질 수 있다. 예를 들어, 마이크로소프트 오피스 2000(Microsoft? Office? 2000)은 32비트 플랫폼에서 작동되도록 설계된 어플리케이션이다. 즉, 마이크로소프트 오피스 2000은 32비트 플랫폼에 대해 고유 어플리케이션이다. 그러나, 이런 32비트 어플리케이션들은 64비트 플랫폼과 같은 다른 플랫폼에서 실행될 때 "비고유(non-native)"하다고 불려질 수 있다.
프로그램 모듈 타겟 플랫폼(program-module target platform)(또는 단순히 "타겟 플랫폼")의 예는 실행 가능 프로그램(예를 들어, 프로그램 모듈, 어플리케이션, 프로그램)이 작동되도록 목적된 플랫폼이다. 프로그램 모듈에서, 그것의 타겟 플랫폼은 또한 그것의 고유 플랫폼이다. 예를 들어, 만약 마이크로소프트 오피스 어플리케이션을 윈도우즈 2000 32비트 X86 OS 환경에서 작동되도록 설치하면, 그이미지 타겟 플랫폼(image target platform)은 32비트 X86이 된다.
어플리케이션 프로그램은 여기에 사용된 용어처럼 "프로그램 모듈"의 주된 예이다. 그러나, 용어 "프로그램 모듈"은 어플리케이션이라고 불려지지 않을 수 있는 기타 실행 가능 소프트웨어를 포함한다.
전형적인 컴퓨터 구조
전형적인 컴퓨터 구조는 다층(multi-layer)이다. 컴퓨터 구조는 하부에서부터 하드웨어 층, 운영 시스템(OS) 층, 및 어플리케이션 층을 포함한다. 대안적으로, 이런 층들은 하드웨어 층, 커널 모드 층, 및 사용자 모드 층으로 기재될 수 있다.
도 1은 전형적인 컴퓨터 구조(100)의 층들을 도시한다. 구조의 상부는 사용자 모드(110)이다. 이것은 어플리케이션(112a-e)과 같은 어플리케이션을 포함한다. 이런 어플리케이션들은 API(120)의 세트(set)와 통신한다. 전형적으로, 이 API 세트는 운영 시스템의 부분으로 고려되므로 컴퓨팅 플랫폼의 부분이다.
구조의 다음 층은 커널 모드(130)이다. 이것은 일반적으로 운영 시스템의 "커널"이라고 불려질 수 있다. 이것은 운영 시스템의 부분이므로 컴퓨팅 플랫폼의 부분이다.
운영 시스템의 커널은 운영 시스템의 특권 부분 - 운영 시스템에서 가장 신뢰성 있는 부분 - 이다. 이것은 코드(code)의 내부 층이다. 이것은 전형적으로 입출력(132), 보안(134), 디스플레이 제어부(즉, 스크린으로의액세스(access))(136), 메모리 관리부(138), 및 기타 특권 펑션(function)(139)들을 운영한다. 커널은 장치 드라이버(142) 및 기타 하드웨어 인터페이스(144)를 통해 하드웨어 층(150)의 하드웨어로 액세스를 한다.
커널 API(140)들은 커널 펑션들로의 액세스를 조정하는 커널 내의 API들이다. 어플리케이션들은 전형적으로 커널을 직접 호출하지 않는다. 대신, 어플리케이션은 API(120)를 호출하고, API는 후에 커널(특히 커널API(140))을 호출할 수 있다.
비록 도 1이 커널(130)의 구성 요소(132-144)를 서로 연결하여 나타내지 않지만, 이런 구성 요소들은 필요할 때 연결된다. 연결선(coupling line)들은 단순함 및 명료함을 위하여 도면에서 생략되었다.
커널 모드(130) 아래에 하드웨어 층(150)이 있다. 이 층은 실제 컴퓨터의 모든 하드웨어를 포함한다. 이것은 프로세서(들), 메모리, 디스크 입출력, 기타 입출력 등을 포함한다. 플랫폼은 또한 하드웨어 층을 포함한다.
그러므로, 컴퓨팅 플랫폼은 하드웨어 층, 커널 층, 및 전형적인 사용자 모드 API(120)를 포함한다.
상호 운영 가능성 및 호환성
어플리케이션 호환성은 컴퓨팅 플랫폼들이 발전해오면서부터 오랫동안 중요한 관심사였다. 사람들은 이상적인 세상에서의 그들이 선택한 플랫폼에서 그들이 원하는 어플리케이션을 작동시키길 원했다. 그러나, 현실에서, 어플리케이션이 고려되지 않은 다른 호스트(host) 플랫폼에서 어플리케이션을 작동 시키는 것은 불가능하다. 예를 들어, 32비트 X86 어플리케이션은 64비트 아이테니엄(IA64) 환경에서 작동되지 않는다. 이 문제는 사람들이 예전에 사용했던 것보다 다른 플랫폼의 강력한 기계를 샀을 때 악화된다. 곧, 옛 플랫폼의 모든 어플리케이션들은 쓸모 없게 된다.
각각의 플랫폼은 그 플랫폼에서 작동되도록 설계된 고유 어플리케이션들의 그 플랫폼에 대응하는 바디(body)를 갖는다. 플랫폼의 새로운 세대(generation)가 발표되면, 소프트웨어 개발자들은 일반적으로 새로운 세대 플랫폼에서 작동되도록 그들의 제품을 업그레이드한다. 소프트웨어 개발자들은 마케팅(marketing), 기술, 및 경제성 등의 다양한 이유 때문에 이 업그레이드를 수행한다.
유사한 이유로, 운영 시스템 개발자들은 그들의 제품이 예전의 것들과 호환되기를 바란다. 이렇게, 어플리케이션의 옛 세대들은 운영 시스템의 최근 세대(플랫폼의 최근 세대)에서 작동될 수 있다. 즉, 만약 비고유 어플리케이션들이 고유 플랫폼(새로운 운영 시스템 포함)에서 작동될 수 있으면, 사용자들은 그들의 현재 어플리케이션을 삭제하고 새로운 버젼을 구매하도록 강요되지 않기때문에 새로운 운영 시스템을 구매하도록 격려된다. 이는 또한 소프트웨어 개발자들에게 그들의 어플리케이션을 업그레이드할 시간을 준다.
여기서, 호환성의 예는 고유 컴퓨팅 환경(예를 들어, 운영 시스템)에서 고유 프로그램 모듈과 공존하면서 평화적으로 어울리며 기능하는 비고유 프로그램 모듈이다.
여기서 사용되는 것처럼, 상호 운영 가능성의 예는 고유 및 비고유 프로그램모듈 모두가 리소스(resource)를 공유(각각 상대방의 메모리 공간 또는 공유 메모리 공간의 데이터를 액세스)하고 및/또는 함께 협동적으로 작업을 하는 능력이다.
명료함 및 단순함을 위해서, 고유 어플리케이션과 비고유 어플리케이션 사이의 상호 운영 블가능과 비고유 어플리케이션의 비호환성 문제를 여기에 설명하기 위해 일예가 사용된다. 이 예에서, 비고유 프로그램 모듈들은 32비트 플랫폼에서 작동되도록 설계되었기 때문에 32비트 어플리케이션으로 불린다. 이 예에서, 고유 어플리케이션들은 64비트의 고유 플랫폼에서 작동되도록 설계되었기 때문에 64비트 어플리케이션으로 불린다. 이는 한 예로서 제공되지만 이에 한정된 것은 아니다. 본 기술에 숙련된 자들은 고유 및 비고유 어플리케이션들 및 고유 플랫폼들의 기타 조합들이 있다는 것을 이해하고 인식한다.
고유 플랫폼에서 비고유 어플리케이션을 작동
고유 플랫폼에서 비고유 어플리케이션을 작동시키는 것을 고려한다. 보다 구체적으로, 64비트 환경에서 32비트 어플리케이션을 작동시키는 이 예를 고려한다. 이 예를 위해서, 64비트 플랫폼이 현존하는 대중적인 32비트 플랫폼(32비트 어플리케이션이 작동되도록 설계된 것)의 개량형인 것으로 가정한다.
컴퓨터 구조에서, 비트 플랫폼의 숫자는 전형적으로 플랫폼의 어드레싱 가능 메모리의 워드 사이즈(word size)를 의미한다. 전형적으로, 워드는 단일 운영시에 스토리지(storage)에서 프로세서 레지스터(register)로 이동되는 데이터의 단위이다. 지난 몇 십년 동안 가장 익숙했던 구조에서, 워드는 4바이트(byte) 또는 32비트 였다. 표준 개인용 컴퓨터에서 사용되는 아이비엠(IBM)의메인프레임(mainframe) 프로세서 및 인텔의 프로세서들은 32비트 워드를 사용해왔다. 인텔 및 기타의 최근 프로세서 구조들은 64비트 워드를 제공한다.
64비트 플랫폼이 32비트 플랫폼에 비해 갖는 한 장점은 어드레싱될 수 있는 보다 넓은 메모리 공간이다. 우선, 이것은 32비트 플랫폼의 전형적인 32비트 길이의 주소와 다르게 64비트 플랫폼에서의 메모리로의 주소가 64비트 길이가 될 수 있기 때문이다.
데이터 정렬
정렬은 플랫폼이 보다 효율적으로 액세스할 수 있는 주소의 컴퓨터 메모리에 데이터를 놓는 것이다. 전형적으로, 이것은 데이터를 메모리의 워드 경계에 저장함으로써 이루어진다. 이것은 저장되는 데이터가 워드 사이즈 보다 작을 때 몇몇의 메모리를 낭비할 수 있다. 그러나 정렬의 잇점은 속도이다. 컴퓨터 플랫폼이 가장 효율적으로 이용되기 때문에 메모리에 저장된 데이터의 정렬은 이런 데이터의 메모리 액세스 속도를 증가시킨다.
예를 들어, 모뎀 RISC 플랫폼은 일반적으로 4 또는 8바이트 길이인 다수 바이트 청크(chunk) 내의 메모리로부터 데이터를 읽고, 이 청크들은 청크 사이즈의 배수인 주소에서 시작해야 한다. 잘못 정렬된 주소로의 메모리 액세스는 다수의 정렬된 액세스에 의해 에뮬레이트되어 속도가 느리고, 버스 에러를 생성하거나 프로그램을 중단할 수 있다. 기타 플랫폼들은 잘못 정렬된(즉, 바이트 정렬된) 메모리 액세스를 보다 우아하게 처리할 수 있지만 이것은 성능을 저하시킨다.
본 기술에 숙련된 자들은 데이터의 정렬 및 정렬의 비용 및 잇점에익숙하다.
고유 및 비고유에 의해 공유되는 메모리
상호 운영 가능성 및 호환성의 한 문제점은 비고유(예를 들어, 32비트) 어플리케이션 및 고유(예를 들어, 64비트) 어플리케이션 사이에 공유되는 메모리를 관리하는 것이다. 또다른 문제점은 비고유(예를 들어, 32비트) 어플리케이션 및 고유(예를 들어, 64비트) 운영 시스템 사이에 공유되는 메모리를 관리하는 것이다.
이는 메모리 어드레스 정렬이 고유와 비고유 사이에서 다를 때 특히 그렇다. 예를 들어, 32비트 환경 내에서 모든 데이터는 4바이트 증분으로 메모리에 정렬되지만, 모든 데이터들은 8바이트 증분으로 정렬된다. 이런 상황에서, 비고유 어플리케이션의 데이터들은 고유 환경의 목적에 대해 정렬되지 않는 방식으로 저장될 수 있다.
도 2는 이 점을 도시한다. 메모리 블럭(210)은 32비트 워드 어드레싱 스킴에 기초한 메모리 구조를 나타낸다. 굵은 세로 선은 워드 경계를 의미한다. "A1"에서 "A8"까지 데이터의 64비트는 2 워드 사이즈의 메모리 위치(212 및 214)에 저장된다. "B1"에서 "B4"까지 데이터의 32비트는 단일 워드 사이즈의 메모리 위치 (216)에 저장된다.
도 2에서, 메모리 블럭(230 및 250)은 64비트 워드 어드레싱 스킴에 기초한 메모리 구조를 나타낸다. 또다시, 굵은 세로 선은 워드 경계를 의미한다.
블럭(210)의 A1-A8 데이터 및 B1-B4 데이터가 64비트 메모리 어드레싱 스킴에 의해 사용되기 위해 변환될 때, 그것은 메모리 블럭(230)에 묘사된 방법으로 저장되고 어드레싱될 수 있다. 보다 구체적으로, 이 방법은 정렬되지 않았다. 그러나, 같은 데이터는 정렬된 방식으로 메모리 블럭(250)에 저장된다.
그러므로, 데이터를 정렬해야 할지 말아야 할지를 결정할 때, 논점을 무시하기 위한 한가지 옵션(option)은 하드웨어가 그것을 보충하도록 허용하는 것이다. 상술되고 도 2의 메모리 블럭(230)에 의해 도시된 것처럼, 하드웨어는 하나 이상의 연속하는 메모리 어드레스 위치로부터의 오버랩된 데이터를 액세스(access)함으로써 보충을 할 수 있다. 이 접근의 비용은 메모리로부터의 데이터를 액세스하기 위해 요구되는 여분의 시간이다. 이 접근은 오직 (다중 액세스의) 손실 시간을 허용할 수 있을 때만 이용 가능하다.
만약 메모리의 데이터 비정렬을 보충함으로써 낭비되는 시간이 허용 불가능해 지면 어떻게 될까?
또다른 논점은 정렬이 항상 강요되는가 아닌가이다. 때때로 정렬은 자연스럽게 일어난다.
본 발명은 일반적으로 고유 컴퓨팅 플랫폼(native computing platform)에서 비고유(non-native) 프로그램 구성 요소의 동작을 용이하게 하는 기술에 관한것이다.
같은 번호들은 도면의 비슷한 요소 및 특징들을 참조하기 위해 사용된다.
도 1 은 컴퓨팅(computing) 구조를 나타내는 개략도.
도 2 는 고유 및 비고유 메모리 블럭(block)을 도시하는 다이어그램.
도 3 은 여기에 기재된 실시예에 적합한 컴퓨팅 구조를 나타내는 개략도.
도 4 는 여기에 기재된 실시예에 적합한 커널 에뮬레이터(kernel emulator)의 개략도.
도 5 는 여기에 기재된 방법론적인 구현을 나타내는 순서도.
도 6 은 여기에 (전체적으로 또는 부분적으로) 기재된 실시예를 구현할 수 있는 컴퓨팅 운영 환경의 예.
뒤따르는 기재에서 설명의 목적을 위해 특정한 숫자들, 재료들 및 특징들은 본 발명의 완벽한 이해를 제공하기 위한 것이다. 그러나, 본 기술에 숙련된 자들은 본 발명이 특정한 예시적인 세부 사항들 없이 구현될 수 있다는 것을 명백히 알 것이다. 다른 실예에서, 잘 알려진 특성들은 본 발명의 예시적인 구현의 기재를 명료하게 하기 위해 생략되거나 또는 단순화될 수 있고, 그것에 의해 본 발명의 설명이 좀 더 나아진다. 게다가, 쉽게 이해하기 위해, 어떤 방법 단계들은 분리된 단계로 기재될 수 있다. 그러나, 이런 개별적으로 기재된 단계들은 그들의 수행시에 반드시 순서에 의존해서 구성되지 않아도 된다.
다음의 설명은 고유 공유 데이터 구조와 비고유 데이터 구조 사이의 데이터 정렬에 대한 하나 이상의 예시적인 구현을 보인다. 발명가들은 이런 예시적인 구현들이 단순히 예가 되도록 의도한다. 발명가들은 이런 예시적인 구현들이 본 발명의 영역을 제한하도록 의도한 것은 아니다. 게다가, 발명가들은 청구된 본 발명이 또한 기타 현재의 또는 미래의 기술들에 관련된 다른 방법들에 의해 실시예 되고 및 구현되도록 했다.
고유 공유 데이터 구조와 비고유 공유 데이터 구조 사이의 데이터 정렬 실시예의 예는 "예시적인 데이터 정렬기"를 의미할 수 있다.
참조에 의한 통합
다음의 미국 특허 출원은 2001년 5월 1일에 청구된 "비고유 프로그램 모듈을 위한 커널 에뮬레이터"란 명칭의 시리얼 번호 09/847,535의 미국 특허 출원에 통합된다.
소개
여기에 기재된 예시적인 데이터 정렬기의 하나 이상의 예시적인 구현은 고유/비고유 포멧(format) 변환 시스템(400) 및/또는 도 6에 나타난 것과 같은 컴퓨팅 환경에 의해 (전체적으로 또는 부분적으로) 구현될 수 있다.
여기에 기재된 예시적인 데이터 정렬기는 비고유 어플리케이션들이 고유 플랫폼에서 투명하고 효과적으로 작동될 수 있는 메커니즘을 제공한다. 실예에서, 32비트 어플리케이션들은 예시적인 커널 에뮬레이터를 사용해 64비트 플랫폼에서 작동될 수 있다. 보다 구체적으로, 여기에 기재된 예시적인 데이터 정렬기는 다른 플랫폼(예를 들어, 고유 및 비고유)의 어플리케이션 및/또는 운영 시스템에 의해 공유된 데이터 구조를 - 필요할 때마다 - 정렬하는 메커니즘을 제공한다.
커널 에뮬레이션의 개요
여기에 기재된 예시적인 데이터 정렬기는 (예를 들어) (참조함으로써 여기에 통합된) 2001년 5월 1일에 청구된 "비고유 프로그램 모듈을 위한 커널 에뮬레이터"란 명칭의 시리얼 번호 09/847,535의 미국 특허 출원과 같은 커널 에뮬레이션의 부분으로서 구현될 수 있다.
이런 커널 에뮬레이터에서, 비고유 어플리케이션들은 마치 그들이 비고유 커널이 있는 운영 시스템에서 작동되는 것처럼 행동한다. 그들의 비고유 커널은 에뮬레이트 된다. 비고유 커널 에뮬레이터는 비고유 어플리케이션에 의해 만들어진 커널 호출을 인터셉트하여 고유 커널 호출로 번역한다.
적절한 컴퓨터 구조의 예
도 3은 예시적인 데이터 정렬기를 구현하기에 적절한 컴퓨터 구조(300)의 예를 도시한다. 본 기술의 일반적인 숙련자들은 기타 가능한 컴퓨터 구조들이 구현되기에 적절하다는 것을 이해하고 인식할 것이다.
이 구조는 하드웨어(350), 커널 모드(330), 및 사용자 모드(310)의 고유 API(320) 세트(set)를 포함하는 고유 플랫폼을 포함한다. 구조(300)의 상부는 사용자 모드(310)이다. 이것은 어플리케이션을 포함한다. 보다 구체적으로, 이것은 고유 어플리케이션(어플리케이션 312a-c 등) 및 비고유 어플리케이션(어플리케이션 314a 및 314b 등)을 포함한다.
고유 어플리케이션은 고유 API(320) 세트와 통신한다. 전형적으로, 이 고유 API 세트(320)는 고유 운영 시스템의 부분으로 고려되므로 고유 컴퓨팅 플랫폼의 부분이 된다. 비고유 어플리케이션들은 비고유 API(322) 세트와 통신 한다. 전형적으로, 이 비고유 API 세트(320)는 비고유 운영 시스템의 부분으로 고려되므로 이 세트는 고유 컴퓨팅 플랫폼의 부분이 아니다.
구조(300)의 다음 층은 고유 커널 모드(330)이다. 이것은 일반적으로 고유 운영 시스템의 고유 "커널"이라고 불릴 수 있다. 이것은 고유 운영 시스템의 부분이므로 고유 컴퓨팅 플랫폼의 부분이다.
이 고유 커널(330)은 고유 커널 API(340) 및 입출력, 보안, 디스플레이 제어부(즉, 스크린으로의 액세스), 메모리 관리부, 및 기타 특권이 주어진 펑션들과 같은 다양한 커널 펑션(333)들을 포함한다. 고유 커널(330)은 장치 드라이버(342) 및 기타 하드웨어 인터페이스(344)를 통해 하드웨어 층(350)의 하드웨어에 액세스한다. 고유 커널 API(340)들은 커널 펑션으로의 액세스를 조정하는 커널 내의 API들이다.
커널 모드(330)의 아래에는 하드웨어 층(350)이 있다. 이 층은 실제 컴퓨터의 모든 하드웨어를 포함한다. 이것은 프로세서(들), 메모리, 디스크 입출력, 기타 입출력 등을 포함한다. 고유 플랫폼은 또한 하드웨어 층을 포함한다.
그러므로, 고유 컴퓨팅 플랫폼은 전형적으로 하드웨어 층(350), 커널 층(330), 및 사용자 모드 고유 API(320)를 포함한다. 고유 플랫폼은 비고유 API(322) 또는 비고유 커널 에뮬레이터(400)를 포함하지 않는다.
커널 에뮬레이터의 예
도 4는 예시적인 데이터 정렬기의 실시예를 사용할 수 있는 예시적인 커널 에뮬레이터의 구현인 비고유 커널 에뮬레이터(400)를 도시한다. 이것은 비고유 CPU 시뮬레이터(simulator)(또는 단순히 "CPU 시뮬레이터(central processing unit simulator)")로 또한 불릴 수 있는 비고유 커널 API의 에뮬레이터(410)를 포함한다. 명칭의 혼란을 피하기 위해서, 이것은 CPU 시뮬레이터(410)로 불릴 것이다.
CPU 시뮬레이터(410)는 비고유 CPU 명령 세트를 고유한 CPU 명령 세트로 번역하는 번역기(412), 비고유 워드 사이즈를 고유 워드 사이즈로 변환하는 변환기(414), 및 어드레싱할 수 있는 비고유 어플리케이션이 액세스할 수 있는 메모리를 제한하는 메모리 제한기(416)를 포함한다.
비고유 어플리케이션에 의한 커널로의 호출
CPU 시뮬레이터(410)는 비고유 어플리케이션으로부터 커널 호출들을 수신한다. 보다 구체적으로, CPU 시뮬레이터(410)는 비고유 API로부터 커널 호출들을 수신한다.
커널 에뮬레이터(400)는 커널의 펑션을 수행하지 않는다. 보다는, 그들의 비고유 포멧으로부터의 비고유 호출들을 고유 포멧으로 번역한다. 그후 그것은 고유 커널이 비고유 어플리케이션으로 부터의 호출이 마치 고유한 어플리케이션으로부터의 호출인 것처럼 프로세스하도록 번역된 호출을 고유 커널로 전달한다. 그러나, 이것을 하는 것은 언어(language)의 단순한 번역 이상을 포함한다. 이것은 비고유 플랫폼과 고유 플랫폼 사이의 패러다임 변환을 포함한다.
번역기(412)는 명령 에뮬레이션을 수행한다. 이것은 비고유 프로세서 명령 세트의 에뮬레이션을 처리한다.
변환기(414)는 인수 포멧(argument format) 및 워드 사이즈 모두를 관리한다. 이것은 비고유 인수 포멧을 고유 인수 포멧으로 바꾸고, 비고유 워드 사이즈를 고유 워드 사이즈로 바꾼다.
번역기(412) 및 변환기(414)는 함께 32비트 플랫폼의 스택을 통한 인수 전달 변환(argument-passing-via-stack convertion)을 64비트 플랫폼의 레지스터를 통한인수 전달 변환(register-passing-via-stack convertion)에 관리한다. 이것은 어떻게 인수 값들이 전달되는지의 패러다임 변환에 대한 예이다. CPU 시뮬레이터(410)는 번역기(412)로 CPU 명령 세트를 변역함으로써 이 변환을 책임진다.
32비트 플랫폼의 또다른 예에서, 워드 사이즈는 32비트이다. 그러므로, 주소 및 데이터들은 전형적으로 메모리의 32비트 사이즈 워드에 기록된다. 64비트 플랫폼에서, 워드 사이즈는 64비트이다. 그러므로, 주소 및 데이터들은 전형적으로 메모리의 64비트 사이즈 워드에 기록된다.
매개 변수(즉, 문서)들은 전형적으로 워드 한개 길이이다. 그러므로, 64비트 커널 API를 위한 매개 변수들은 32비트 커널 API를 위한 32비트 길이이기 보다 64비트 길이이다.
변환기는 비고유 어플리케이션(및 API)에 의해 전달된 32비트 인수들을 32비트에서 64비트로 늘인다. 이것을 수행하는 한 예는 32개의 제로를 문서에 메워 넣는 것이다. 예시적인 구현에서, 변환기(414)는 우선 사용자 층에서 작동된다.
상술된 것처럼, 다른 플랫폼들은 전형적으로 다른 워드 사이즈를 갖는다. 따라서, 어드레싱 가능 메모리 공간의 사이즈도 마찬가지로 다르다. 그러므로, 변환기(414)는 워드 변환의 부분으로서 어드레스(특히, 포인터)를 변환한다.
실예를 위해, 32비트 플랫폼의 메모리 어드레스들의 길이는 최대 32비트까지 일 수 있다. 그러므로, 최대 어드레싱 가능 메모리는 약 4GB이다(만약 한 비트가 예약되면, 최대 어드레싱 가능 메모리는 약 2GB임). 64비트 플랫폼의 메모리 주소들의 길이는 최대 64비트이다. 그러므로, 최대 어드레싱 가능 메모리는 테라바이트(terabyte)로 측정된다. 그러므로, 어드레싱 가능 메모리의 사이즈는 32비트와 64비트 플랫폼에서 각각 다르다.
고유 및 비고유 사이에서 공유된 데이터 구조
상호 운영 가능성 및 호환성의 한 문제점은 비고유(예를 들어, 32비트) 어플리케이션과 고유(예를 들어, 64비트) 어플리케이션 또는 고유(예를 들어, 64비트) 운영 시스템 사이에 공유된 메모리 관리이다. 특히, 이것은 데이터 구조(이런 메모리에 저장된)가 비고유 어플리케이션과 고유 어플리케이션 또는 고유 운영 시스템 사이에서 공유될 때 문제의 여지가 있다.
정렬
데이터의 정렬은 공유 데이터 구조들에 문제의 여지가 있을 수 있는 한 방법이다. 공유 데이터 구조의 데이터가 비고유 포멧에서 고유한 포멧으로 변환될 때, 메모리로 데이터를 복사해서 이동시키는 것보다는 워드 경계를 재정의하는 것이 보다 바람직하다. 이런 데이터를 복사하고 이동시키는 것은 귀중한 시간 및 리소스(resource)를 소비한다.
종종 고유와 비고유 사이의 워드 사이즈 차이는 다른 것들의 배수이다. 예를 들어, 64비트 워드 플랫폼은 32비트 워드 플랫폼의 배수이다. 따라서, 워드 경계가 재정의될 때, 이런 경계들은 이미 이런 배수(예를 들어, 64비트 길이의 데이터) 데이터 사이에 자발적으로 생길 수 있다.
메모리 블럭(210 및 250) 및 거기에 포함된 데이터를 보면, 독자들은 이런자발적인 워드 경계 재정의의 예로 고려될 수 있는 실예를 볼 수 있다. 즉, 만약 블럭(210)(데이터 구조(212 및 214) 및 데이터 A1-A8를 포함)의 워드 경계가 재맵핑(map)되면, 그들은 메모리 블럭(250)의 데이터 구조(252)로 보일 수 있다. 그 데이터 구조(252)는 정렬된 데이터(262)를 포함한다. 이 실예에서, 메모리 경계는 자발적으로 데이터를 정렬하는 곳에 생긴다.
비정렬
반대로, 워드 경계가 재정의되면, 이런 경계들은 자발적으로 데이터 내에 생긴다 - 그러므로, 데이터는 비정렬하게 된다. 메모리 블럭(210 및 230) 및 거기에 포함된 데이터들을 보면, 독자는 데이터가 정렬되지 않은 곳에서의 이런 자발적인 워드 경계 재정의 예로 고려될 수 있는 실예를 볼 수 있다. 즉, 만약 블럭(210)(데이터 구조(212 및 214) 및 데이터 A1-A8를 포함)의 워드 경계가 재매핑되면, 그들은 메모리 블럭(230)의 블럭(232 및234)에 걸쳐서 보일 수 있다. 이런 블럭(232 및 234)들은 비정렬 데이터(242)를 포함한다. 이 실예에서, 메모리 경계들은 자발적으로 이런 데이터가 비정렬된 곳에 생긴다.
정렬 동기
데이터를 정렬해야 할지 말아야 할지를 결정할 때, 논점을 무시하기 위한 한 옵션은 하드웨어가 그것을 보충하도록 허용하는 것이다. 몇몇 실예에서, 하드웨어는 하나 이상의 인접하는 메모리 어드레스 위치로부터의 오버랩되는 데이터를 액세스함으로써 보충을 할 수 있다. 이 접근의 비용은 메모리의 데이터에 액세스하기 위해 요구되는 여분의 시간이다. 이 접근은 오직 (다중 액세스의) 손실 시간을 허용할 수 있을 때만 이용 가능하다.
허용 가능 비정렬 비용의 예는 인텔 x86 프로세서의 비용이다. 정렬된 데이터의 비용이 시간(주기 같은)의 한 단위였다면, 비정렬 데이터를 액세스하는 비용은 시간의 약 세 단위였다. 따라서, 성능 히트(hit)가 일반적으로 허용되었으므로, 인텔 x86 플랫폼을 위해 설계된 소프트웨어의 프로그래머들은 데이터의 비정렬을 책임지도록 동기화되지 않았었다.
그러나, 플랫폼 정렬된 데이터를 액세스하기에 가장 능률적인 플랫폼이 나타났다. 비정렬된 데이터를 액세스하려고 시도할 때 프로세스는 명백하게 속도가 느려질 수 있다. 이것은 충돌된 것으로 보인다. 이런 실예에서, 비정렬의 비용은 허용 불가능하다.
허용 불가능한 비정렬 비용의 예는 인텔 IA64 프로세서의 비용이다. 정렬된 데이터에 액세스하는 비용이 시간의 한 단위(주기 같은)이면, 비정렬된 데이터를 액세스하는 비용은 약 일만배 이상이다. 따라서, 만약 인텔 IA64 플랫폼을 위해 설계된 소프트웨어의 프로그래머들이 데이터의 비정렬을 책임지지 못하면, 그것은 전체으로 허용 불가능한 성능 히트를 생산할 수 있다.
적어도 한 국면에서, 예시적인 데이터 정렬기는 고유 및 비고유 어플리케이션 및/또는 운영 시스템 모두에 의해 주시되는 메모리에 저장된 데이터의 정렬을 강요한다.
데이터 정렬 하부 시스템
도 4에 나타나듯이, 비고유 커널 에뮬레이터(400)는 고유 어플리케이션과 비고유 어플리케이션 (또는 비고유 어플리케이션과 고유 운영 시스템 사이)사이의 데이터 정렬을 중재하는 데이터 정렬 하부 시스템(460)을 포함한다. 예시적인 구현에서, 데이터 정렬 하부 시스템(460)은 예시적인 데이터 정렬기의 실시예가 될 수 있다.
상술된 것처럼, 변환기(414)는 필요할 때 비고유 포멧에서 고유 포멧으로(또는 그 반대로) 변환시기기 위해 데이터 구조의 크기를 변경한다. 예를 들어, 블럭(210)의 블럭(216)은 데이터 B1-B4를 포함한다. 변환기는 데이터(264)를 포함하기 위해 데이터 B1-B4를 블럭(250)의 블럭(254)으로 늘릴 수 있다.
비록 변환기(414)가 성공적으로 데이터 크기를 변경하더라도, 이런 데이터는 정렬되지 않는다. 몇몇의 데이터 구조(예를 들어, 큰 정수(LARGE_INTEGER))들은 고유 환경에 대해 정확히 사이즈가 정해질 수 있지만, 고유 환경에 대해 올바르게 정렬되지 않을 수 있다. 이런 것들의 예는 도 2의 메모리 블럭(210 및 230)에 나타내진다. 정렬을 강요하기 위한 한 옵션은 새로운 위치에 데이터 구조를 복사하고 그것을 정렬하는 것이다. 복사하는 것는 복사하지 않는 것보다 명백히 많은 시간을 소요하지만 데이터 구조가 올바르게 정렬될 수 있기 때문에, 데이터 구조가 복사되기 전에 정렬되는 방법이 있다면 그것이 바람직하다.
정렬되었는지 아닌지를 결정하기 위해 데이터 정렬 하부 시스템(460)은 데이터 구조의 특정한 미리 식별된 유형을 검사한다.
만약 정렬되지 않았으면, 데이터 정렬 하부 시스템(460)은 데이터 구조를 정렬된 메모리 블럭에 복사하고 고유 환경은 사본을 가리킨다. 공유 데이터 구조에서 작업할 수 있는 펑션이 호출되면, 블럭의 데이터는 본래의 비정렬된 공간으로 복사된다.
그러나 만약 데이터 구조가 정렬되면, 그후 고유 환경이 본래의 곳으로 가리킨다.
데이터 정렬 하부 시스템(460)에서, 데이터 구조의 유형은 정확하게 크기가 지정되지만(고유 환경을 위해) 그것은 비정렬될 가능성을 갖고 있다. 이런 데이터 구조의 예는 LARGE_INTEGER이다.
예시적인 데이터 정렬기의 방법론적인 구현
도 5는 커널 에뮬레이터(400)(또는 그것의 몇몇 일부)에 의해 수행되는 예시적인 데이터 정렬기의 방법론적인 구현을 나타낸다. 이 방법론적인 구현은 소프트웨어, 하드웨어, 또는 그것들의 조합에서 수행될 수 있다.
도 5의 510에서, 데이터 정렬 하부 시스템(460)은 비정렬일 수 있는 매개 변수를 포함하는 데이터 구조의 특정한 미리 식별된 유형을 주시한다. 512에서 하부 시스템은 이런 매개 변수들이 정렬됐는지 아닌지를 결정하기 위해 매개 변수를 검사한다. 만약 정렬되었으면, 프로세서는 블럭(530)으로 가고 어떤 정렬도 수행되지 않는다. 만약 정렬되지 않았으면, 그후 프로세스는 블럭(514)으로 간다.
도 5의 514에서, 데이터 정렬 하부 시스템(460)은 그 매개 변수를 보유하기 위해 버퍼를 재할당한다. 516에서, 데이터 정렬 하부 시스템은 매개 변수(및 아마 전체 데이터 구조)를 정렬된 메모리 블럭에 복사한다. 518에서, 고유 환경은 할당된 버퍼의 사본을 가리킨다. 공유 데이터 구조(및 매개 변수)를 사용할 수 있는펑션이 호출된 후, 블럭의 데이터는 (520의) 본래의 비정렬된 공간으로 복사된다. 프로세스는 522에서 끝난다.
그러나 만약, 데이터 구조의 매개 변수가 정렬되면, 그후 고유 환경은 본래의 것(블럭 530에 의미 됨)을 가리킨다.
추가적인 세부 사항
일반적으로, 비고유 어플리케이션(예를 들어, 32비트 어플리케이션)이 디스크, 보안 정보, 이벤트 통지 등의 파일 정보를 액세스하는 것과 비슷한 몇몇의 지원을 위해 고유 운영 시스템과 대화 할 필요가 있을 때 커널 에뮬레이터(또는 동등물)는 실행 프로세스를 조정하는 중간 층이 된다. 그 중간 층은 비고유 어플리케이션(예를 들어, 32비트 어플리케이션)과 고유 운영 시스템(예를 들어, 64비트 운영 시스템)사이에서 앞뒤로 전달되는 어떤 정보도 볼 수 있다.
콜백후크(call back hook) 논점 처리
종종, 비고유 어플리케이션은 전체 시스템의 안정성에 영향을 미칠 수 있는 운영체제에서 어플리케이션으로(OS-to-application)의 콜백(callback)(종종 "후크(hook)"로 불림)을 설치할 수 있다. 후크는 비고유 프로그램 모듈 내의 몇몇 명령일 수 있다. 이런 비고유 명령들은 고유 코드(예를 들어, 펑션 포인터)가 지원 할 수 없는 몇몇의 다른 정보 구조를 갖을 수 있다. 그들이 고유 실행 경로로부터 야기되는 동안, 고유 모듈은 그것이 비고유 후크에게 콜백을 만들고 있다는 것을 모른다.
비고유 후크 호출시에 데이터 정렬의 논점을 해결하기 위해서, 후크에 속성이 마크되어 후크가 비고유 어플리케이션의 특정 유형을 위해 지정된 것이라는 것을 식별한다. 속성은 어떤 실행 경로가 후크를 실행할 수 있는지(즉, 후크 체인(chain)은 세트 속성에 기초해 여과됨)를 결정하기 위해 후에 사용된다. 호환성이 없는 실행 경로는 어떤 후크도 지날 수 없다.
종종 에뮬레이트된 명령들이 커널의 고유 코드를 호출할 수 있다. 이런 호출을 만드는 동안, 에뮬레이트된 명령들은 또한 리턴할 곳에 대한 정보를 포함하는 몇몇의 콜백 구조를 채운다. 이런 구조들은 고유 및 에뮬레이트된 환경 사이에서 공유되고, 비정렬된 데이터를 엑세스할 수 있다. 썽크(thunk) 층에서, 데이터 정렬 하부 시스템(460)은 임의의 커널 호출을 만들기 전에 구조를 재패치(patch) 할 수 있다.
공유 데이터 구조:
몇몇의 정보는 고유 운영 시스템과 운영되는 에뮬레이트된 어플리케이션 사이에서 공유된다. 고유 운영 시스템은 특별한 포멧의 정보를 요구할 수 있다. 예를 들어, 그 주시된 정보는 운영 시스템에 의해 사용되기 전에 8비트로 정렬되있어야 하는 몇몇의 펑션 포인터를 포함할 수 있다. 그러나, 4비트 정렬이 비고유 어플리케이션(예를 들어, 32비트 어플리케이션)들을 위해 충분하므로 작동 중인 어플리케이션은 이것에 관심을 갖지 않는다. 그 시나리오(senario)에서, 데이터 정렬 하부 시스템(460)은 이런 구조를 식별하고 API가 이런 정보를 앞뒤로 전달할 때 이런 공유된 정보를 위한 썽크를 자동적으로 생성할 것이다.
정렬 논점:
정렬이 필요한 데이터 유형의 예는 LARGE_INTEGER, 멤버로 64비트 정수를 갖는 조합, 및 사용자 모드 및 운영 시스템이 공유하는 공유 가능 64비트 포인터와 같은 데이터 유형이다. 만약 이런 데이터가 적절히 정렬되지 않으면, 운영 시스템은 성능 벌칙 때문에 데이터를 수락하지 않을 수 있다. 운영 시스템은 작동을 멈출 수 있다. 대안적으로, 악화된 경우, 운영 시스템이 붕괴될 수 있다.
커널 에뮬레이터 내부에서, 데이터 정렬 하부 시스템(460)은 정렬이 필요한 데이터 유형이 되거나 또는 구조의 멤버가 될 수 있는 임의의 매개 변수들을 주시한다. 만약 데이터 정렬 하부 시스템(460)이 이런 유형을 찾으면, 그것은 정렬을 확인한다. 만약 정렬되지 않았으면, 그후 데이터 정렬 하부 시스템(460)은 매개 변수를 보유하기 위해 버퍼(즉, 할당된 버퍼)를 재할당하고 이런 호출을 만들기 위해 전달되는 본래의 버퍼를 전달하기 보다 이 버퍼를 사용하는 운영 시스템 API를 만든다. OS API가 성공적으로 리턴되면, 데이터 정렬 하부 시스템(460)은 할당된 버퍼로부터의 출력을 어플리케이션 버퍼에 복사한다.
상위 시나리오에서, 매개 변수 패치는 어플리케이션이 운영 시스템이 구조에 포인터로 번역할 수 있는 포인터로서 몇몇의 매개 변수를 버퍼에 전달하는 작업을 할 수 없다. 이 경우에, 커널 에뮬레이터는 특히 어떤 API가 데이터의 그 유형을 전달하는지를 알 필요가 있다. 몇몇의 실예에서, API에 전달되는 몇몇의 기타 매개 변수들에 의존해, 운영 시스템은 그 버퍼를 몇몇 구조를 가르키는 포인터로 이해할 수 있다. 데이터 정렬 하부 시스템(460)은 커널 에뮬레이터에서 정렬 고정을 필요로하는 임의의 API 또는 특정한 API에 적용할 수 있는 몇몇의 규칙에 기초한몇몇의 중간 명령을 생성할 수 있다.
LARGE_INTEGER 개별적인 데이터를 위한 규칙
이것은 어떻게 데이터 유형이 재정렬될 수 있는지를 설명하기 위한 LARGE_INTEGER 예이다. 이 템플릿(template)으로부터 생성된 명령들은 고유 섹션에 있고, 이 템플릿은 LARGE_INTEGER를 전달하는 모든 API에 걸쳐 적용될 것이다. 비고유 코드는 4바이트로 정렬된 LARGE_INTEGER를 전달할 수 있다. 고유 섹션에서 데이터 정렬 하부 시스템(460)은 고유 호출을 만드는 동안 데이터 유형의 사본을 갖고 있고 그 데이터 유형을 전달한다. 끝나기 시작하면 데이터 정렬 하부 시스템(460)은 클라이언트(client) 공간에 결과를 복사해 놓는다.
몇몇 기타 유형을 위한 규칙:
데이터의 비정렬된 사본은 몇몇의 특정한 시나리오에 대해 최적화될 수 있다. 예를 들어, 비고유 어플리케이션(예를 들어, 32비트 어플리케이션)은 LARGE_INTEGER와 같은 몇몇의 큰 데이터를 위해 4바이트로 정렬된 데이터를 갖는 것을 보증할 수 있다. 8바이트로 정렬된 위치를 필요로하는 고유 운영 시스템(예를 들어, 64바이트 운영 시스템)에서 그것을 에뮬레이팅하는 동안, 데이터 정렬을 실행하기 위해 8 개의 명령을 취할 수 있는 전체적으로 비정렬된 사본을 만들기 보다 데이터 정렬 하부 시스템(460)은 다음과 같은 및 다음의 뒤따르는 템플릿에서 사용되는 두 개의 명령에 의해 일을 처리할 수 있다.
API를 위한 규칙:
이 예에서 API는 또다른 매개 변수에 의해 정의된 다른 구조를 가리키는 포인터를 가질 수 있다. 그리고 이 확장은 유형을 결정하는 기타 매개 변수들에 기초한 구조를 썽크하도록 허락한다.
멤버 복사를 위한 규칙:
몇몇의 구조를 복사할 때, 데이터 정렬 하부 시스템(460)은 컴파일러(compiler)가 정확한 코드를 생성하고 실행동안 어떤 정렬 실패도 야기하지 않도록 하기 위해 비정렬된 태그(tag)를 추가한다.
예시적인 컴퓨팅 시스템 및 환경
도 6은 여기에 기재된 예시적인 데이터 정렬기가 구현(전체적으로 또는 부분적으로)될 수 있는 적절한 컴퓨팅 환경(900)의 예를 도시한다. 컴퓨팅 환경(900)은 여기에 기재된 컴퓨터 및 네트워크 구조에서 이용 가능할 수 있다.
예시적인 컴퓨팅 환경(900)은 오직 컴퓨팅 환경의 한 예일 뿐 컴퓨터 및 네트워크 구조의 사용 및 기능성의 영역을 제한하기 위한 것은 아니다. 컴퓨팅 환경(900)은 어떤 의존성 또는 예시적인 컴퓨팅 환경(900)에 도시된 구성 요소들의 임의의 하나 이상의 조합에 연관된 요구를 갖는다고 해석되서는 않된다.
예시적인 데이터 정렬기는 수많은 기타 범용의 또는 특수 목적의 컴퓨팅 시스템 환경 또는 특징들과 함께 구현될 수 있다. 사용하기에 적절한 잘 알려진 컴퓨팅 시스템, 환경, 및/또는 특징들의 예는 개인용 컴퓨터, 서버 컴퓨터, 씬 클라이언트(thin client), 씽크 클라이언트(think client), 핸드헬드(hand-held) 또는 랩탑(lap-top) 장치, 멀티프로세서 시스템(multiprocessor system), 마이크로프로세서 기반 시스템(microprocesser-based system), 셋톱 박스(set top box), 프로그램 가능 가전 제품, 네트워크 PC, 미니 컴퓨터(minicoputer), 메인 프레임 컴퓨터(mainframe computer), 상기의 시스템 또는 장치 중 임의의 것을 포함하는 분산형 컴퓨팅 환경을 포함한다.
예시적인 데이터 정렬기는 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행 가능 명령의 일반적인 문맥에 의해 기재될 수 있다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 또는 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 오브젝트(object), 구성 요소, 데이터 구조 등을 포함한다. 예시적은 데이터 정렬기는 태스크가 통신 네트워크를 통해 링크된 원거리 프로세싱 장치에 의해 수행되는 분산형 컴퓨팅 환경에서 또한 구현될 수 있다. 분산형 컴퓨팅 환경에서, 프로그램 모듈들은 메모리 스토리지 장치를 포함하는 로컬 및 원거리 컴퓨터 스토리지 매체 모두에 위치할 수 있다.
컴퓨팅 환경(900)은 컴퓨터(902) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(902)의 구성 요소는 하나 이상의 프로세서 또는 프로세싱 유닛(904), 시스템 메모리(906), 및 프로세서(904)를 포함하는 다양한 시스템 구성 요소들을 시스템 메모리(906)에 연결시키는 시스템 버스(908)를 포함하지만 이에 한정된 것은 아니다.
시스템 버스(908)는 메모리 버스 또는 메모리 제어기, 주변 장치 버스, 가속 그래픽 포트, 및 프로세서 또는 다양한 버스 구조 중 임의의 것을 사용하는 로컬 버스 등을 포함하는 몇몇 유형의 버스 구조 중 하나 이상의 임의의 것을 나타낸다. 예를 들어, 이런 구조들은 산업 표준 구조(Industry Standard Architecture; ISA) 버스, 마이크로 채널 구조(Micro Channel Architecture; MCA) 버스, 강화된 ISA(Enhanced ISA; EISA) 버스, 비디오 전기 표준 연합(Video Electronics Standards Association; VESA) 로컬 버스, 및 메자닌 버스(Mezzanine bus)로 또한 알려진 주변 장치 구성 요소 상호 연결(Peripheral Component Interconnects; PCI) 버스를 포함한다.
컴퓨터(902)는 전형적으로 다양한 컴퓨터 판독 가능 매체를 포함한다. 이런 매체는 컴퓨터(902)에 의해 액세스 가능한 임의의 이용 가능 매체가 될 수 있고 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체 모두를 포함한다.
시스템 메모리(906)는 램(random access memory; RAM; 910)과 같은 휘발성 메모리 및/또는 롬(read only memory; ROM; 912)과 같은 비휘발성 메모리 형태의 컴퓨터 판독 가능 매체를 포함한다. 시동하는 동안, 컴퓨터(902) 요소들 사이의 정보 전송을 돕는 기본 루틴을 포함하는 기본 입출력 시스템(BIOS; 914)은 롬(912)에 저장된다. 램(910)은 전형적으로 즉각적으로 액세스 가능한 및/또는 현재 프로세싱 유닛(904)에 의해 개방된 데이터 및/또는 프로그램 모듈을 포함한다.
컴퓨터(902)는 또한 기타 분리형/비분리형, 휘발성/비휘발성 컴퓨터 스토리지 매체를 포함할 수 있다. 예를 들어, 도 6은 비분리형, 비휘발성 자기 매체(도시되지 않음)로부터 판독하고 자기 매체에 기록하기 위한 하드 디스크 드라이버(916), 분리형, 비휘발성 자기 디스크(920)(예를 들어, "플로피 디스크")로부터 판독하고 자기 디스크에 기록하기 위한 자기 디스크 드라이버(918), 및 씨디롬(CD-ROM), 디지털 다기능 디스크 롬(DVD-ROM), 또는 기타 광학 매체와 같은 분리형, 비휘발성 광학 디스크(924)로부터 판독하고 광학 디스크에 기록할 수 있는 광학 디스크 드라아브(922)를 도시한다. 하드 디스크 드라이버(916), 자기 디스크 드라이버(918), 및 광학 디스크 드라이버(922)들은 하나 이상의 매체 인터페이스(926)에 의해 시스템 버스(908)에 각각 연결된다. 대안적으로, 하드 디스크 드라이버(916), 자기 디스크 드라이버(918), 및 광학 디스크 드라이버(922)는 하나 이상의 인터페이스(도시되지 않음)에 의해 시스템 버스(908)에 연결될 수 있다.
디스크 드라이브 및 그들에 연결된 컴퓨터 판독 가능 매체는 컴퓨터 판독 가능 명령, 데이터 구조, 프로그램 모듈, 및 컴퓨터(902)를 위한 기타 데이터의 비휘발성 스토리지를 제공한다. 비록 예가 하드 디스크(916), 분리형 자기 디스크(920), 및 분리형 광학 디스크(924)를 도시하지만, 자기 카세트 또는 기타 자기 스토리지 장치, 플래시(flash) 메모리 카드, 씨디롬, 디지털 다기능 디스크(DVD) 또는 기타 광학 스토리지, 램, 롬, 전기적 소거 가능 프로그램 가능 롬(electrically erasable programmable read-only memory; EEPROM) 등과 같이 컴퓨터에 의해 액세스 가능하고 데이터를 저장할 수 있는 컴퓨터 판독 가능 매체의 기타 유형이 또한 예시적인 컴퓨팅 시스템 및 환경 구현에 이용될 수 있다.
예를 들어, 운영 시스템(926), 하나 이상의 어플리케이션 프로그램(928), 기타 프로그램 모듈(930), 및 프로그램 데이터(932)를 포함하는 임의의 수의 프로그램 모듈은 하드 디스크(916), 자기 디스크(920), 광학 디스크(924), 롬(912), 및/또는 램(910)에 저장될 수 있다. 이런 운영 시스템(928), 기타 프로그램 모듈(930), 및 프로그램 데이터(932)(또는 이것들의 몇몇 조합)의 각각은 인터셉터(interceptor), 호출 변환기, 문서 변환기, 번역기, 공유 메모리 관리자, 명령 번역기, 주소 번역기, 데이터 정렬기, 및 타겟 플랫폼 결정기의 실시예를 포함할 수 있다.
사용자는 키보드(934) 및 포인팅 장치(936)(예를 들어, "마우스") 등의 입력 장치를 통해 코맨드 및 명령을 컴퓨터(902)에 입력할 수 있다. 기타 입력 장치(938)(특별히 도시되지 않음)는 마이크로폰(microphone), 조이스틱(joystick), 게임 패드(game pad), 위성 안테나(satellite dish), 시리얼 포트,스캐너(scanner), 및/또는 이와 비슷한 것들 등을 포함할 수 있다. 이런 및 기타 입력 장치들은 시스템 버스(908)에 연결된 입출력 인터페이스(940)를 통해 프로세싱 유닛(904)에 연결되지만, 그러나 병렬 포트, 게임 포트, 범용 시리얼 버스(USB)와 같은 기타 인터페이스 및 버스 구조에 의해 연결될 수 있다.
모니터(942) 또는 디스플레이 장치의 기타 유형은 비디오 어댑터(944)와 같은 인터페이스를 통해 시스템 버스(908)에 연결될 수 있다. 모니터(942)에 추가해서, 기타 출력 주변 장치는 입출력 인터페이스(940)를 통해 컴퓨터(902)에 연결될 수 있는 스피커(도시되지 않음) 및 프린터(946)와 같은 구성 요소들을 포함할 수 있다.
컴퓨터(902)는 원거리 컴퓨팅 장치(948)와 같은 하나 이상의 원거리 컴퓨터로의 논리적 연결을 사용하는 네트워크 환경에서 운영될 수 있다. 예를 들어, 원거리 컴퓨팅 장치(948)는 개인용 컴퓨터, 휴대용 컴퓨터, 서버, 라우터(router), 네트워크 컴퓨터, 피어 장치(peer device) 또는 기타 일반적인 네트워크 노드, 및 이와 비슷한 것들 등이 될 수 있다. 원거리 컴퓨팅 장치(948)는 컴퓨터(902)에 연관되어 여기에 기재된 많은 또는 모든 구성요소 및 특성들을 포함할 수 있는 휴대용 컴퓨터로 도시된다.
컴퓨터(902)와 원거리 컴퓨터(948) 사이의 논리적 연결들은 근거리 통신망(LAN; 950) 및 일반적인 광역 통신망(WAN; 952)으로 묘사된다. 이런 네트워킹 환경들은 대부분 사무실, 기업 광역 컴퓨터 네트워크, 인트라넷(intranet) 및 인터넷들에서 일반적이다.
근거리 통신망 네트워킹 환경에서 구현될 때, 컴퓨터(902)는 네트워크 인터페이스 또는 어댑터(954)를 통해 로컬 네트워크(950)에 연결된다. 광역 통신망 네트워크 환경에서 구현될 때, 컴퓨터(902)는 전형적으로 모뎀(956) 또는 광역 네트워크(952)에 걸친 통신을 확립하기 위한 기타 수단들을 포함한다. 컴퓨터(902)에 내장형 또는 외장형 일 수 있는 모뎀(956)은 입출력 인터페이스(940) 또는 기타 적절한 메커니즘들을 통해 시스템 버스(908)에 연결될 수 있다. 도시된 네트워크 연결들은 예시적인 것일 뿐이고 컴퓨터(902 및 948)들 사이의 통신 링크(들)을 확립하는 기타 수단들이 사용될 수 있다.
네트워크 환경에서, 컴퓨팅 환경(900)에 도시된 것, 컴퓨터(902)에 연관되어 묘사된 프로그램 모듈, 또는 이들의 일부들은 원거리 메모리 스토리지 장치에 저장될 수 있다. 예를 들어, 원거리 어플리케이션 프로그램(958)은 원거리 컴퓨터(948)의 메모리 장치에 위치한다. 비록 이런 프로그램 및 구성 요소들이 다양한 시간에 컴퓨팅 장치(902)의 다른 스토리지 구성 요소에 위치하고 컴퓨터의 데이터 프로세서(들)에 의해 실행되지만, 도시의 목적을 위해, 운영 시스템과 같은 어플리케이션 프로그램 및 기타 실행 가능 프로그램 구성 요소들은 여기에 분리된 블럭으로 도시된다.
컴퓨터 실행 가능 명령
예시적인 데이터 정렬기의 구현은 프로그램 모듈과 같은 하나 이상의 컴퓨터 또는 기타 장치에 의해 실행되는 컴퓨터 실행 가능 명령의 일반적인 문맥에 의해 기재될 수 있다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하고 또는 특정추상 데이터 유형을 구현하는 루틴, 프로그램, 오브젝트, 구성 요소, 데이터 구조 등을 포함한다. 전형적으로, 프로그램 모듈의 기능성은 다양한 실시예에서 원해지는 것처럼 조합되고 또는 분산될 수 있다.
예시적인 운영 환경
도 6은 예시적인 데이터 정렬기가 구현될 수 있는 적절한 운영 환경(900)의 예를 도시한다. 특히, 여기에 기재된 예시적인 데이터 정렬기(들)는 도 6의 임의의 프로그램 모듈(928-930) 및/또는 운영 시스템(926) 또는 이것들의 일부에 의해 (전체적으로 또는 부분적으로) 구현될 수 있다.
운영 환경은 오직 적절한 운영 환경의 예일 뿐, 여기에 기재된 예시적인 데이터 정렬기(들)의 기능성의 영역 또는 사용에 어떤 제한을 두기위한 것은 아니다. 사용하기에 적절한 기타 잘 알려진 컴퓨팅 시스템, 환경, 및/또는 특징들은 개인용 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩탑 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 프로그램 가능 가전 제품, 무선 전화 및 장치, 범용 및 특수 목적의 어플라이언스(appliance), 주문형 직접회로(ASIC), 네트워크 PC, 미니컴퓨터, 메인프래임 컴퓨터, 상기 시스템 또는 장치, 및 이와 비슷한 것들 중 임의의 것을 포함하는 분산형 컴퓨팅 환경을 포함하지만 이에 한정된 것은 아니다.
컴퓨터 판독 가능 매체
예시적인 데이터 정렬기의 구현은 컴퓨터 판독 가능 매체의 몇몇 형태에 저장되고 전송될 수 있다. 컴퓨터 판독 가능 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 이용 가능 매체가 될 수 있다. 예를 들어, 컴퓨터 판독 가능 매체는 "컴퓨터 스토리지 매체" 및 "통신 매체"를 포함할 수 있다.
"컴퓨터 스토리지 매체"는 컴퓨터 판독 가능 명령, 데이터 구조, 프로그램 모듈, 또는 기타 데이터와 같은 정보의 스토리지를 위한 임의의 방법 또는 기술에 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 포함한다. 컴퓨터 스토리지 매체는 램, 롬, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD 또는 기타 광학 스토리지, 자기 카세트, 자기 테이프, 자기 디스크 스토리지 또는 기타 자기 스토리지 장치, 또는 원하는 정보를 저장하기 위해 사용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 기타 매체들을 포함하지만 이에 한정된 것은 아니다.
"통신 매체"는 전형적으로 컴퓨터 판독 가능 명령, 데이터 구조, 프로그램 모듈, 또는 반송파 또는 기타 전송 메커니즘과 같은 변조된 데이터 신호의 기타 데이터를 구현한다. 통신 매체는 또한 임의의 정보 전달 매체를 포함한다.
용어 "변조된 데이터 신호"는 하나 이상의 특징 세트를 갖거나 또는 신호의 정보를 변조하는 방법에 의해 변화된 신호를 의미한다. 예를 들어, 통신 매체는 유선 네트워크 또는 다이렉트 유선 연결과 같은 유선 매체 및 RF, 적외선, 및 기타 무선 매체와 같은 무선 매체를 포함한다. 상기의 임의의 것의 조합은 또한 컴퓨터 판독 가능 매체의 영역에 포함된다.
비록 구조적인 특성 및/또는 방법론적인 단계에 특정한 언어로 기재되었지만, 첨부된 청구항에 정의된 본 발명은 기재된 특정한 특성 또는 단계에 필연적으로 제한되지는 않는다. 보다는, 특정한 특성 및 단계들은 본 발명 구현의 선호되는 형태로써 공개된다.

Claims (18)

  1. 비고유 프로그램 모듈(non-native program module)을 위한 에뮬레이터에 있어서,
    비고유 프로그램 모듈로부터의 호출을 인터셉트(intercept)하기 위해 구성된 인터셉터(intercepter);
    매개 변수들을 전달하기 위한 비고유 프로그램 모듈의 비고유 패러다임을 매개 변수들을 전달하기 위한 고유 환경의 고유 패러다임(paradigm)으로 번역하기 위해 구성된 번역기; 및
    상기 고유 환경의 고유 패러다임에 따라서 매개 변수의 포멧(format)을 정렬하기 위해 구성된 데이터 정렬기를 포함하는 비고유 프로그램 모듈을 위한 에뮬레이터.
  2. 제 1 항에 있어서, 상기 데이터 정렬기가 정렬하는 상기 매개 변수들은 상기 고유 환경 및 비고유 프로그램 모듈에 의해 공유된 데이터 구조의 부분인 비고유 프로그램 모듈을 위한 에뮬레이터.
  3. 제 1 항에 있어서, 상기 번역기는 또한 주소를 비고유 길이에서 고유 길이로 번역하기 위해 구성된 비고유 프로그램 모듈을 위한 에뮬레이터.
  4. 제 1 항에 있어서, 상기 고유 환경의 고유 패러다임의 워드 사이즈(word size)가 상기 비고유 프로그램 모듈의 비고유 패러다임의 워드 사이즈와 다른 비고유 프로그램 모듈을 위한 에뮬레이터.
  5. 컴퓨터 판독 가능 매체 상의 운영 시스템에 있어서,
    고유 프로그램 모듈로부터의 호출을 수신하기 위해 구성된 고유 커널(native kernel); 및
    비고유 프로그램 모듈로부터의 호출을 수신하기 위해 구성된 제 1 항에 기재된 커널 에뮬레이터를 포함하는 운영 시스템.
  6. 비고유 프로그램 모듈 및 고유 환경의 상호 운영 가능성 및 호환성을 용이하게 하는 데이터 정렬 시스템에 있어서,
    데이터 구조의 매개 변수들을 검사하고 이런 매개 변수들이 고유 환경에 대해 정렬됐는지를 결정하기 위해 구성된 매개 변수 검사기; 및
    비정렬 매개 변수의 데이터를 보유하기 위한 버퍼를 할당하고, 상기 데이터가 고유 환경에 대해 정렬되도록 상기 할당된 버퍼에 상기 매개 변수의 데이터를 복사하기 위해 구성된 매개 변수 정렬기를 포함하는 데이터 정렬 시스템.
  7. 제 6 항에 있어서, 상기 매개 변수가 상기 고유 환경 및 비고유 프로그램 모듈에 의해 공유되는 데이터 구조의 부분인 데이터 정렬 시스템.
  8. 제 6 항에 있어서, 데이터 구조의 상기 매개 변수들은 비고유 패러다임에서 고유 패러다임으로 변환될 때 비정렬될 수 있는 것인 데이터 정렬 시스템.
  9. 제 6 항에 있어서, 상기 매개 변수 정렬기는, 또한 비정렬 매개 변수로의 호출을 상기 할당된 버퍼로 다시 향하게 하고, 본래의 매개 변수의 데이터를 상기 할당된 버퍼로부터의 데이터로 대체하기 위해 구성된 데이터 정렬 시스템.
  10. 비고유 프로그램 모듈 및 고유 환경의 상호 운영 가능성 및 호환성을 용이하게 하는 방법에 있어서,
    데이터 구조의 매개 변수를 검사하는 단계;
    상기 매개 변수들이 고유 환경에 대해 정렬됐는지를 결정하는 단계; 및
    상기 매개 변수들이 정렬되지 않았다는 결정에 응답하여, 비정렬 매개 변수의 데이터를 보유하기 위한 버퍼를 할당하고, 상기 데이터가 고유 환경에 대해 정렬되도록 상기 할당된 버퍼에 상기 매개 변수의 데이터를 복사하는 단계를 포함하는 방법.
  11. 제 10 항에 있어서, 상기 매개 변수가 정렬되지 않았다는 결정에 응답하여,
    비정렬 매개 변수로의 호출을 상기 할당된 버퍼에 다시 향하게 하는 단계;
    본래의 매개 변수의 데이터를 상기 할당된 버퍼로부터의 데이터로 대체하는단계를 더 포함하는 방법.
  12. 제 10 항에 있어서, 상기 매개 변수는 상기 고유 환경 및 비고유 프로그램 모듈에 의해 공유되는 데이터 구조의 부분인 방법.
  13. 제 10 항에 있어서, 데이터 구조의 상기 매개 변수들은 비고유 패러다임에서 고유 패러다임으로 변환될 때 비정렬될 수 있는 것인 방법.
  14. 컴퓨터에 의해 실행될 때, 제 10 항의 방법을 실행하는 컴퓨터 실행 가능 명령을 갖는 하나 이상의 컴퓨터 판독 가능 매체를 포함하는 컴퓨터.
  15. 컴퓨터에 의해 실행될 때, 제 10 항의 방법을 실행하는 컴퓨터 실행 가능 명령을 갖는 컴퓨터 판독 가능 매체.
  16. 컴퓨터에 의해 실행될 때, 제 10 항의 방법을 실행하는 컴퓨터 실행 가능 명령을 갖는 컴퓨터 판독 가능 매체 상에서 구현되는 운영 시스템.
  17. 컴퓨터에 의해 실행될 때, 비고유 프로그램 모듈 및 고유 환경의 상호 운영 가능성 및 호환성을 용이하게 하는 방법을 실행하는 컴퓨터 실행 가능 명령을 갖는 컴퓨터 판독 가능 매체에 있어서, 상기 방법은,
    데이터 구조의 매개 변수를 검사하는 단계;
    상기 매개 변수들이 고유 환경에 대해 정렬됐는지를 결정하는 단계; 및
    상기 매개 변수들이 정렬되지 않았다는 결정에 응답하여, 상기 비정렬 매개 변수의 데이터를 보유하기 위한 버퍼를 할당하고, 상기 데이터가 고유 환경에 대해 정렬되도록 상기 할당된 버퍼에 상기 매개 변수의 데이터를 복사하는 단계를 포함하는 컴퓨터 판독 가능 매체.
  18. 제 17 항에 있어서, 상기 방법은,
    비정렬 매개 변수로의 호출을 상기 할당된 버퍼로 다시 향하게 하는 단계;
    본래의 매개 변수의 데이터를 상기 할당된 버퍼로부터의 데이터로 대체하는 단계를 더 포함하는 컴퓨터 판독 가능 매체.
KR1020047005968A 2001-10-23 2002-10-22 비고유 프로그램 모듈을 위한 에뮬레이터, 컴퓨터 판독 가능 매체 상의 운영 시스템, 데이터 정렬 시스템, 비고유 프로그램 모듈 및 고유 환경의 상호 운영 가능성 및 호환성을 용이하게 하는 방법, 컴퓨터 및 컴퓨터 판독 가능 매체 KR100861641B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/001,126 US7107584B2 (en) 2001-10-23 2001-10-23 Data alignment between native and non-native shared data structures
US10/001,126 2001-10-23
PCT/US2002/033867 WO2003036475A1 (en) 2001-10-23 2002-10-22 Data alignment between native and non-native shared data structures

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020087006811A Division KR20080032257A (ko) 2001-10-23 2002-10-22 비고유 프로그램 모듈을 위한 에뮬레이터, 컴퓨터 판독가능 매체 상의 운영 시스템, 데이터 정렬 시스템, 비고유프로그램 모듈 및 고유 환경의 상호 운영 가능성 및호환성을 용이하게 하는 방법, 컴퓨터 및 컴퓨터 판독 가능매체

Publications (2)

Publication Number Publication Date
KR20040045907A true KR20040045907A (ko) 2004-06-02
KR100861641B1 KR100861641B1 (ko) 2008-10-07

Family

ID=21694502

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020047005968A KR100861641B1 (ko) 2001-10-23 2002-10-22 비고유 프로그램 모듈을 위한 에뮬레이터, 컴퓨터 판독 가능 매체 상의 운영 시스템, 데이터 정렬 시스템, 비고유 프로그램 모듈 및 고유 환경의 상호 운영 가능성 및 호환성을 용이하게 하는 방법, 컴퓨터 및 컴퓨터 판독 가능 매체
KR1020087006811A KR20080032257A (ko) 2001-10-23 2002-10-22 비고유 프로그램 모듈을 위한 에뮬레이터, 컴퓨터 판독가능 매체 상의 운영 시스템, 데이터 정렬 시스템, 비고유프로그램 모듈 및 고유 환경의 상호 운영 가능성 및호환성을 용이하게 하는 방법, 컴퓨터 및 컴퓨터 판독 가능매체

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020087006811A KR20080032257A (ko) 2001-10-23 2002-10-22 비고유 프로그램 모듈을 위한 에뮬레이터, 컴퓨터 판독가능 매체 상의 운영 시스템, 데이터 정렬 시스템, 비고유프로그램 모듈 및 고유 환경의 상호 운영 가능성 및호환성을 용이하게 하는 방법, 컴퓨터 및 컴퓨터 판독 가능매체

Country Status (12)

Country Link
US (1) US7107584B2 (ko)
EP (1) EP1438660B1 (ko)
JP (1) JP2005507114A (ko)
KR (2) KR100861641B1 (ko)
CN (2) CN1892591B (ko)
AU (1) AU2002349997B2 (ko)
BR (1) BR0213435A (ko)
CA (1) CA2462563C (ko)
MX (1) MXPA04003257A (ko)
RU (1) RU2335798C2 (ko)
WO (1) WO2003036475A1 (ko)
ZA (1) ZA200402597B (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9571840B2 (en) 2008-06-03 2017-02-14 Microsoft Technology Licensing, Llc Adaptive quantization for enhancement layer video coding
US9967561B2 (en) 2006-05-05 2018-05-08 Microsoft Technology Licensing, Llc Flexible quantization

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7574346B2 (en) * 2000-10-30 2009-08-11 Microsoft Corporation Kernel emulator for non-native program modules
US20040117778A1 (en) * 2002-12-16 2004-06-17 Sehr David C. Optimization of software code using N-bit pointer conversion
US7188062B1 (en) * 2002-12-27 2007-03-06 Unisys Corporation Configuration management for an emulator operating system
US7512713B2 (en) * 2003-03-31 2009-03-31 Microsoft Corporation System and method for rendering independent persistence of information by performing a time driven query on an aggregated schematized queryable report
GB0316531D0 (en) 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for performing native binding
US7493599B2 (en) * 2003-11-26 2009-02-17 Intel Corporation Device, system and method for detection and handling of misaligned data access
US20050193396A1 (en) * 2004-02-27 2005-09-01 Stafford-Fraser James Q. Computer network architecture and method of providing display data
US20060080514A1 (en) * 2004-10-08 2006-04-13 International Business Machines Corporation Managing shared memory
US7721298B2 (en) * 2004-12-03 2010-05-18 Microsoft Corporation Operating system performance
US7810105B2 (en) * 2004-12-29 2010-10-05 Motorola, Inc. Method and apparatus for running different types of applications on a wireless mobile device
US7296108B2 (en) * 2005-05-26 2007-11-13 International Business Machines Corporation Apparatus and method for efficient transmission of unaligned data
GB2435947B (en) * 2006-03-10 2008-02-20 Oracle Int Corp Vector Replacement Method
WO2007109921A1 (en) * 2006-03-28 2007-10-04 Intel Corporation Methods and apparatus to implement annotation based thunking
US20080235255A1 (en) * 2007-03-19 2008-09-25 Redknee Inc. Extensible Data Repository
US8523666B2 (en) 2007-05-25 2013-09-03 Microsoft Corporation Programming framework for closed systems
KR100930018B1 (ko) * 2007-12-07 2009-12-07 주식회사 마크애니 디지털 정보 보안 시스템, 커널 드라이버 장치 및 디지털정보 보안 방법
US20120173615A1 (en) * 2009-09-04 2012-07-05 Redknee Inc. Data broker method, apparatus and system
US20130113809A1 (en) * 2011-11-07 2013-05-09 Nvidia Corporation Technique for inter-procedural memory address space optimization in gpu computing compiler
CN103780685A (zh) * 2014-01-10 2014-05-07 清华大学 多样化智能设备间自适应数据共享的方法
WO2017153815A1 (en) 2016-03-11 2017-09-14 Lzlabs Gmbh Load module compiler
JP6352486B2 (ja) * 2017-04-12 2018-07-04 インテル コーポレイション コールバックによるisaブリッジング
CN107423084B (zh) * 2017-04-24 2021-02-02 武汉斗鱼网络科技有限公司 程序修改方法及装置
CN113741887B (zh) * 2021-08-19 2022-09-27 北京百度网讯科技有限公司 模型生产方法、系统、装置及电子设备

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4742447A (en) * 1986-01-16 1988-05-03 International Business Machines Corporation Method to control I/O accesses in a multi-tasking virtual memory virtual machine type data processing system
JPS63163930A (ja) * 1986-12-26 1988-07-07 Toshiba Corp アライメント補正方式
US5132898A (en) 1987-09-30 1992-07-21 Mitsubishi Denki Kabushiki Kaisha System for processing data having different formats
US5036484A (en) * 1988-11-23 1991-07-30 International Business Machines Corporation Personal computer/host emulation system for handling host data with personal computer application programs at personal computers
US5313614A (en) 1988-12-06 1994-05-17 At&T Bell Laboratories Method and apparatus for direct conversion of programs in object code form between different hardware architecture computer systems
US5617554A (en) * 1992-02-10 1997-04-01 Intel Corporation Physical address size selection and page size selection in an address translator
US5438668A (en) * 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
EP0571683A1 (en) 1992-05-26 1993-12-01 International Business Machines Corporation High performance data re-alignment mechanism with multiple buffers in a memory access control device
JPH06332792A (ja) * 1993-05-21 1994-12-02 Mitsubishi Electric Corp データ処理装置及びそのデータ読み出し制御回路,データ書き込み制御回路
US5961582A (en) * 1994-10-25 1999-10-05 Acorn Technologies, Inc. Distributed and portable execution environment
US5560013A (en) * 1994-12-06 1996-09-24 International Business Machines Corporation Method of using a target processor to execute programs of a source architecture that uses multiple address spaces
US5761477A (en) * 1995-12-04 1998-06-02 Microsoft Corporation Methods for safe and efficient implementations of virtual machines
US6091897A (en) * 1996-01-29 2000-07-18 Digital Equipment Corporation Fast translation and execution of a computer program on a non-native architecture by use of background translator
US5860072A (en) * 1996-07-11 1999-01-12 Tandem Computers Incorporated Method and apparatus for transporting interface definition language-defined data structures between heterogeneous systems
US6513057B1 (en) * 1996-10-28 2003-01-28 Unisys Corporation Heterogeneous symmetric multi-processing system
CA2211515C (en) * 1997-07-25 2001-12-11 Kevin Alexander Stoodley System and method of local data alignment for stack memory
US6026238A (en) * 1997-08-18 2000-02-15 Microsoft Corporatrion Interface conversion modules based upon generalized templates for multiple platform computer systems
US6269409B1 (en) * 1997-09-02 2001-07-31 Lsi Logic Corporation Method and apparatus for concurrent execution of operating systems
JP2002508565A (ja) 1997-12-17 2002-03-19 フジツウ シーメンス コンピューターズ ゲゼルシャフト ミット ベシュレンクテル ハフツング システム呼出しの変換方法
US6199202B1 (en) * 1998-01-06 2001-03-06 Hewlett-Packard Company Method and apparatus for the inter-operation of differing architectural and run time conventions
US6061779A (en) * 1998-01-16 2000-05-09 Analog Devices, Inc. Digital signal processor having data alignment buffer for performing unaligned data accesses
US6009510A (en) * 1998-02-06 1999-12-28 Ip First Llc Method and apparatus for improved aligned/misaligned data load from cache
US6882968B1 (en) * 1999-10-25 2005-04-19 Sony Computer Entertainment Inc. Method of measuring performance of an emulator and for adjusting emulator operation in response thereto
US7574346B2 (en) 2000-10-30 2009-08-11 Microsoft Corporation Kernel emulator for non-native program modules
US6901583B1 (en) * 2001-07-19 2005-05-31 Hewlett-Packard Development Company, L.P. Method for testing of a software emulator while executing the software emulator on a target machine architecture

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9967561B2 (en) 2006-05-05 2018-05-08 Microsoft Technology Licensing, Llc Flexible quantization
US9571840B2 (en) 2008-06-03 2017-02-14 Microsoft Technology Licensing, Llc Adaptive quantization for enhancement layer video coding
US10306227B2 (en) 2008-06-03 2019-05-28 Microsoft Technology Licensing, Llc Adaptive quantization for enhancement layer video coding

Also Published As

Publication number Publication date
JP2005507114A (ja) 2005-03-10
BR0213435A (pt) 2004-11-09
KR100861641B1 (ko) 2008-10-07
WO2003036475A1 (en) 2003-05-01
CN100468338C (zh) 2009-03-11
US20030097247A1 (en) 2003-05-22
MXPA04003257A (es) 2004-07-23
RU2335798C2 (ru) 2008-10-10
CN1892591A (zh) 2007-01-10
KR20080032257A (ko) 2008-04-14
CA2462563A1 (en) 2003-05-01
ZA200402597B (en) 2005-06-29
CN1571956A (zh) 2005-01-26
EP1438660A1 (en) 2004-07-21
CN1892591B (zh) 2010-05-26
AU2002349997B2 (en) 2009-03-26
CA2462563C (en) 2012-01-10
RU2004115612A (ru) 2005-03-27
EP1438660B1 (en) 2017-05-03
US7107584B2 (en) 2006-09-12

Similar Documents

Publication Publication Date Title
KR100861641B1 (ko) 비고유 프로그램 모듈을 위한 에뮬레이터, 컴퓨터 판독 가능 매체 상의 운영 시스템, 데이터 정렬 시스템, 비고유 프로그램 모듈 및 고유 환경의 상호 운영 가능성 및 호환성을 용이하게 하는 방법, 컴퓨터 및 컴퓨터 판독 가능 매체
US7574346B2 (en) Kernel emulator for non-native program modules
US7496495B2 (en) Virtual operating system device communication relying on memory access violations
AU2002349997A1 (en) Data alignment between native and non-native shared data structures
US6484309B2 (en) Enabling software designed for one operating system to operate on another operating system
US6363409B1 (en) Automatic client/server translation and execution of non-native applications
US8505006B1 (en) Resource management in virtual machines using dynamic table for performing resource queries
RU2327208C2 (ru) Модель драйвера, не зависимого от режима обработки
US6546553B1 (en) Service installation on a base function and provision of a pass function with a service-free base function semantic
US20070006178A1 (en) Function-level just-in-time translation engine with multiple pass optimization
US20060218544A1 (en) Mechanism to store information describing a virtual machine in a virtual disk image
US7533101B2 (en) Extensible loader
US20060020940A1 (en) Soft-partitioning systems and methods
EP1669853A2 (en) Enabling inter-subsystem resource sharing
US7406676B2 (en) Access redirector and entry reflector
US7286974B2 (en) Virtual PC printer driver
Feske Genode operating system framework
US11689621B2 (en) Computing device and storage card
Kim Frigate: an object-oriented file system
Kong FreeBSD Device Drivers: A Guide for the Intrepid
Meza Hand held workstation: a guide to embedding the Linux kernel
Neugebauer et al. ESPRIT LTR 21917 (Pegasus II) Deliverable 4.5. 2: Unix functionality
O’Reilly Linux Ker nel Books
Rajagopal Windows NT, UNIX, NetWare Migration/Coexistence: A Professional's Guide
Frame Jr PERSONAL COMPUTER and WORKSTATION A OPERATING SYSTEMS

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
A107 Divisional application of patent
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120817

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20130813

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20140814

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20150827

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20160831

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20180903

Year of fee payment: 11