KR102042304B1 - 실행가능 코드 데이터의 록 프리 스트리밍 기법 - Google Patents
실행가능 코드 데이터의 록 프리 스트리밍 기법 Download PDFInfo
- Publication number
- KR102042304B1 KR102042304B1 KR1020157002060A KR20157002060A KR102042304B1 KR 102042304 B1 KR102042304 B1 KR 102042304B1 KR 1020157002060 A KR1020157002060 A KR 1020157002060A KR 20157002060 A KR20157002060 A KR 20157002060A KR 102042304 B1 KR102042304 B1 KR 102042304B1
- Authority
- KR
- South Korea
- Prior art keywords
- opcode
- memory
- computer
- long
- writing
- Prior art date
Links
- 238000000034 method Methods 0.000 claims description 48
- 230000008569 process Effects 0.000 description 15
- 238000004891 communication Methods 0.000 description 6
- 230000006855 networking Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000004590 computer program Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3816—Instruction alignment, e.g. cache line crossing
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
디스어셈블러는 명령어들을 수신하고 이들을 복수의 별개의 옵코드로 해체한다. 디스어셈블러는 각 옵코드 간의 경계를 식별하는 테이블을 생성한다. 각 옵코드는 메모리의 표준 블록을 원자 기록함으로써 옵코드 단위로 메모리에 기록된다. 필요한 경우 메모리의 완전한 블록을 생성하기 위해 디버그 브레이크 포인트 옵코드가 옵코드에 첨부된다. 메모리의 블록은 예를 들어 길이가 32비트 또는 64비트일 수 있다. 긴 옵코드는 둘 이상의 메모리 블록에 겹쳐질 수 있다. 디버그 브레이크 포인트 옵코드는 메모리의 완전한 블록을 생성하기 위해 긴 옵코드의 제2 부분에 첨부될 수 있다. 스트림 장애 인터셉터는 요청된 데이터 페이지가 이용가능하지 않은 경우를 식별하고 그 데이터 페이지를 리트리브한다.
Description
데이터를 판독 및 기록하는 명령들(commands)이 동시에 수신되는 경우 경쟁 상황(race condition)이 발생한다. 이 경쟁 상황은 예를 들어 판독 스레드가 데이터를 메모리로 전달하는 그 시간에, 소정의 스레드가 그 메모리로부터 실행가능 데이터의 패킷을 실행하는 경우에도 발생할 수 있다. 그에 따른 결과는 컴퓨터 고장, 프로그램 중지, 판독/기록 에러 또는 그 밖의 다른 문제들일 수 있다. 하나의 해결책으로서, 실행 스레드는 판독 스레드가 데이터를 제공하기를 기다리면서 보류될 수 있다. 그러나, 스레드를 보류시키는 것은 관련 프로세스의 성능 문제를 야기할 수 있다. 예를 들어, 오직 하나 또는 소수의 스레드만이 데이터에 액세스하는 프로세스를 위해 수십 또는 수백의 스레드가 실행될 수 있지만, 스트림 장애가 발생할 때마다 데이터 전달을 기다리기 위해 모든 스레드가 보류되어야만 할 수 있다.
본 요약부는 상세한 설명 부분에서 더 설명되는 개념들 중 선택된 것들을 단단하게 소개하고자 하는 것이다. 본 요약부는 청구대상의 핵심적인 특징이나 필수적인 특징들을 밝히고자 함이 아니며, 청구대상의 범위를 제한하려는 것도 아니다.
실시예들은 실행가능 코드를 해체하고(disassembling) 메모리 페이지들에 대한 기록들의 순서를 지정함으로써 실행가능 코드가 록 프리 방식(lock-free manner)으로 전달되게 할 수 있다. 이것은 실행가능 코드가 스트리밍 데이터의 전달 전반에 걸쳐 일정한 상태로 유지되게 한다. 메모리가 일정한 상태로 있기 때문에, 다른 스레드는 바이트 코드가 메모리에 기록되는 동안 계속 실행될 수 있다. 이것은 보다 큰 확장성 및 성능을 가능하게 한다.
실시예들은 전체 프로세스를 보류시키는 일 없이 또는 커널 모드 컴포넌트를 사용하는 일 없이, 실행가능 코드 데이터를 사용자 모드로 스트리밍하는 것을 가능하게 한다.
본 발명의 실시예에 대한 전술한 및 그 밖의 다른 장점 및 특징을 보다 명확하게 하기 위해, 본 발명의 실시예에 대한 보다 자세한 설명이 첨부한 도면을 참조하여 표현될 것이다. 이들 도면은 단지 본 발명의 전형적인 실시예를 설명한 것일 뿐이며, 따라서 그의 범주를 제한하는 것으로 간주되어서는 안된다. 본 발명은 첨부한 도면을 사용하여 더 구체적이고 자세히 설명될 것이다.
도 1a 내지 도 1d는 일 실시예에 따른 메모리 기록들의 시간에 따른 순서를 나타낸다.
도 2는 일 실시예에 따라 록-프리 실행가능 코드 데이터를 스트리밍하는 시스템을 나타낸다.
도 3은 일 실시예에 따라 실행가능 코드 데이터를 스트리밍하는 프로세스 또는 방법의 흐름도이다.
도 4는 실행가능 코드 데이터의 록 프리 스트리밍을 제공하기 위한 적절한 컴퓨팅 및 네트워킹 환경의 일 예를 나타낸다.
도 2는 일 실시예에 따라 록-프리 실행가능 코드 데이터를 스트리밍하는 시스템을 나타낸다.
도 3은 일 실시예에 따라 실행가능 코드 데이터를 스트리밍하는 프로세스 또는 방법의 흐름도이다.
도 4는 실행가능 코드 데이터의 록 프리 스트리밍을 제공하기 위한 적절한 컴퓨팅 및 네트워킹 환경의 일 예를 나타낸다.
본 명세서에서 기술되는 록 프리 솔루션은 현대 프로세서의 두 가지 특징을 이용한다. 먼저, 프로세서는 원자(atomic) 32비트 또는 64비트 메모리 액세스 기록을 제공한다. 이것은 프로세서가 메모리 내의 모든 32비트 또는 64비트를 볼 수 있게 됨을 보장한다. 두 번째로, 프로세서는 1바이트 디버그 브레이크 예외 연산 코드(옵코드(옵코드))를 갖는다. 이 디버그 브레이크 옵코드는 프로세서가 호출 스레드의 실패를 야기하는 일 없이 메모리로부터 옵코드의 판독 및 실행을 다시 시도할 수 있게 해준다.
일 실시예에서, 코드는 명령어들이 프로세서에 이용가능해지기 전에 메모리 내에서 해체된다. 이러한 해체는 다수의 별개의 32비트 또는 64비트 기록을 포함하는 메모리 기록들의 순서화된 리스트가 생성되게 할 수 있다. 이러한 해체 및 분석은 클라이언트 또는 서버상에서 수행될 수 있다. 이러한 동작을 클라이언트 상에서 수행하게 되면 프로세서 사이클이 증가되지만 네트워크 전송들이 절약되는 한편, 동작을 서버에서 수행하게 되면 네트워크 전송들이 많아지지만 클라이언트 노드에서 보다 적은 프로세서 동작이 요구된다.
메모리 페이지가 할당된 경우, 전체 페이지는 1바이트 예외 코드들로 기록된다. 스트림 장애 핸들러는 기록되었거나 유효하지 않은 페이지들 및 위치들의 리스트를 보유한다.
옵코드는 페이지의 끝에서 시작하는 해체된 32비트 또는 64비트 블록을 사용하여 메모리에 기록된다. 이와 달리, 다른 옵코드에 의해 호출되는 옵코드인 리프(leaf) 옵코드를 식별하기 위해 어셈블리 트리가 분석될 수 있다. 리프 옵코드는 옵코드 실행 호출 그래프의 횡단을 통해 식별될 수 있다. 이들 리프 옵코드가 먼저 메모리에 기록될 수 있다.
32 이하의 비트(또는 다른 실시예에서는 64 이하의 비트)인 옵코드에 대해, 프로세서가 명령어를 성공적으로 실행하도록 전체 옵코드가 메모리에 기록된다. 옵코드가 32 비트(또는 다른 실시예에서는 64비트)보다 큰 경우, 옵코드의 "끝부분(end)"이 먼저 기록된다. 옵코드의 끝부분을 먼저 기록함으로써, 프로세서가 명령어를 실행하고 그 동안 옵코드가 여전히 기록되고 있다면, 프로세서는 디버그 브레이크 옵코드를 먼저 실행할 것이다. 이것은 스트림 장애 핸들러가 옵코드의 기록을 마칠 수 있게 해주며 그에 따라 프로세서는 옵코드를 재시도할 수 있다. 32비트(또는 64비트) 기록이 둘 이상의 옵코드를 가로지르는 경우, 재시도를 허용하기 위해 디버그 브레이크 옵코드가 기록된다. 32비트(또는 64비트) 기록이 이미 기록되어 있는 경우, 이전의 값이 기록되며 이 경우 옵코드는 유효한 것으로 유지된다.
디버그 브레이크에 의해 이격된 해체된 옵코드를 기록함으로써, 프로세서는 무효의 디버그 브레이크포인트 또는 유효의 실행가능 코드를 만나게 될 것이다. 애플리케이션이 무효의 디버그 브레이크포인트를 실행하는 경우, 본 명세서에서 기술되는 스트림 장애 인터셉터는 그것이 애플리케이션으로 전달되기 전에 예외를 인터셉트할 것이다. 스트림 장애 인터셉터는 메모리가 유효할 때까지 대기하고 그런 다음 옵코드를 재시도한다. 스트림 장애 인터셉터는 재시도되어야 하는 스트림 장애의 일부로서 발생되는 브레이크포인트와, 애플리케이션으로 다시 전달되어야 하는 디버거 또는 애플리케이션에 의해 사용되는 브레이크포인트 간을 구별하기 위해 페이지들 및 기록된 옵코드들의 테이블을 사용할 수 있다. 유효한 실행가능 코드의 경우, 애플리케이션은 코드를 성공적으로 실행한다. 그 결과, 스트림 장애 핸들러는 스트림 장애의 결과를 전달할 때 프로세스 내의 모든 스레드를 보류할 필요가 없다.
도 1a 내지 도 1d는 일 실시예에 따른 메모리 기록들의 시간에 따른 순서를 나타낸다. 이 예에서 사용된 프로그램 코드는 명령어들, 즉, 0xAB 0xE9 0x00 0xFE 0x70 0x08...를 포함한다. 디스어셈블러는 이 코드를 아래의 옵코드로 분할한다.
제1 옵코드는 그 길이가 1바이트이고, 제2 옵코드는 그 길이가 5바이트이며, 다양한 길이의 추가 옵코드는 유사한 방식으로 식별된다.
메모리(101)는 다수의 32비트 블록(102-104)을 포함한다. 다른 실시예에서, 메모리 블록은 64 비트 또는 그 밖의 다른 크기를 가질 수 있다. 도 1a는 메모리(101)의 전부가 1바이트 디버그 브레이크 포인트 옵코드 OxCC로 채워지는 원시 상태(original state)를 나타낸다. 이 때 소정의 스레드가 메모리(101)로부터 명령어를 판독하는 경우, 디버그 브레이크 포인트 옵코드는 스트림 핸들러로 하여금 코드를 메모리(101)로 로딩하는 것을 시도하게 할 것이며, 그런 다음 스레드는 코드의 판독을 재시도할 것이다.
도 1b에서, 제1 옵코드 0xAB는 32비트 블록(102b)에 기록되었다. 제1의 1바이트 옵코드 0xAB가 제1 0xCC를 대체하는 원자 기록으로 메모리(101)에 기록된다. 이 기록 동작은 32비트 데이터를 기록할 필요가 있다. 명령어가 메모리에 기록되기 전에 해체되었기 때문에, 기록 동작은 어떤 바이트가 기록되고 있는지를 추적하고, 전체 32비트 블록을 채우기 위해 블록(102b)의 나머지 24비트를 0xCC로 채워야하는 것을 안다. 프로세서가 제1 명령어 0xAB를 실행하는 경우, 그것은 성공할 것이다. 그러나, 프로세서가 이 시간에 제2 명령어를 실행하려 시도하는 경우, 디버그 브레이크 포인트 0xCC가 판독될 것이고 스트림 장애 재시도 메카니즘이 떠맡을 것이다.
스트림 장애 핸들러는 이제 제2 옵코드(즉, 0xE9 0x00 0xFE 0X70 0x08)를 기록할 필요가 있다. 스트림 장애 핸들러는 이전의 명령어(0xAB)가 기록되었고 블록(102b-104b)이 어떻게 기록되었는지를 안다. 스트림 장애 핸들러는 또한 다음 옵코드가 얼마나 긴지를, 또한 그것이 메모리(101)에 어떻게 기록될 필요가 있는지를 안다. 특히, 스트림 장애 핸들러는 옵코드 0xAB 이후 제2의 5바이트 옵코드가 블록(102b,103b)에 기록될 것임을 안다. 스트림 장애 핸들러는 또한 제2 옵코드가 단일 32비트 블록(102b) 내의 나머지 공간에 맞지 않음을 판정한다. 따라서, 제2 옵코드는 메모리 블록(102b)과 메모리 블록(103b) 사이에서 나누어질 수 있다.
도 1c에 도시되어 있는 바와 같이, 옵코드의 제2 부분(즉, 0x70 0x08)이 옵코드의 제1 부분을 기록하기 전에 블록(103c)에 기록된다(32비트를 채우기 위해 디버그 브레이크 포인트 0x00로 패딩됨). 옵코드의 제2 부분을 먼저 기록함으로써, 프로세서가 0xAB 블록 이후에 옵코드를 실행하는 경우, 프로세서는 디버그 장애(0xCC)를 초래할 것이며 가비지(garbage)를 실행하려고는 시도하지 않을 것이다.
옵코드의 제2 부분이 블록(103c)에 기록된 이후, 제1 부분(즉, 0xE9 0x00 0xFE)이 메모리(101)에 기록될 수 있다. 도 1d에 도시되어 있는 바와 같이, 이 제1 부분은 이전에 블록(102d)에 할당된 위치에서 제1 옵코드 0xAB로 기록된다. 이 때, 프로세서는 양쪽 명령어를 성공적으로 실행할 것이다. 명령어를 메모리(101)에 기록하는 이러한 프로세스는 전체 페이지가 상주될 때까지 옵코드 단위로 적용될 수 있다.
도 2는 일 실시예에 따라 록 프리 실행가능 코드 데이터를 스트리밍하는 시스템을 나타낸다. 운영 체제(201)에서 실행되는 애플리케이션은 메모리로부터 데이터 페이지(202)를 판독하려 시도한다. 실행가능 메모리의 상주되지 않은 페이지가 호출되는 경우, 이것은 이 호출이 실패하였음을 운영 체제(201)에 통지하는 운영 체제 예외(203)를 트리거한다. 운영 체제(201)는 애플리케이션이 이러한 실패를 알기 전에 판독 실패 리턴 코드를 스트림 장애 인터셉터(204)에 전송한다. 스트림 장애 인터셉터(204)는 그의 데이터베이스 내에서 페이지를 룩업하고 페이지를 리트리브(retrieve)할 필요가 있는지 판정한다. 스트림 장애 인터셉터(204)는 예를 들어 네트워크 서버(205)로부터 페이지를 얻기 위한 네트워크 호출을 행하며, 데이터를 데이터 페이지(202)에 기록할 수 있도록 페이지의 메모리 액세스를 변경한다.
기존의 시스템에서, 스트림 장애 인터셉터(204)는 데이터를 요청한 프로세스를 보류시킬 필요가 있을 수 있다. 프로세스가 보류되지 않는 경우, 또 다른 스레드는 메모리에 기록되어 있는 것처럼 페이지(202) 상의 데이터를 실행시킬 수 있고 그 프로세스는 부분적인 데이터를 실행하려 시도했을 때 실패할 수 있다. 페이지(202)가 메모리에 기록된 후, 프로세스는 스트림 장애 인터셉터가 운영 체제 예외를 "성공"으로 변경하고 애플리케이션이 계속 실행됨으로써 재개될 수 있다.
기존의 시스템에서, 전체 프로세스를 보류하는 이러한 단계는 데이터 페이지(202)에 대한 액세스의 변경 및 데이터 페이지로의 데이터의 기록이 단일 단계에서 수행될 수 없기 때문에 필요하다. 이것은 당신이 스트림 장애를 서비싱하는 경우 프로세스 내의 두 개의 스레드는 실행될 수 없음을 의미한다.
기존의 시스템은 디스어셈블러(206) 및 기록/미기록된 페이지 추적기(207)를 추가함으로써 개선된다. 디스어셈블러(206)는 리턴된 바이트 코드를 취하여 그것을 해체하는 역할을 한다. 디스어셈블러(206)는 각 옵코드의 경계를 포함하는 오프셋들의 리스트를 리턴한다. 도 1의 예에서 언급한 바와 같이, 각 옵코드는 그 길이가 1이상의 바트일 수 있다. 기록/미기록된 페이지 추적기(207)는 디스어셈블러(206)에 의해 생성된 오프셋들의 리스트, 및 커밋된 오프셋들의 리스트를 포함한다.
프로세스는 디스어셈블러(206) 및 기록/미기록된 페이지 추적기(207)를 사용하는 경우에는 보류될 필요가 없다. 대신, 요청된 코드가 서버(205)로부터 스트림 장애 인터셉터(204)로 리턴된 이후, 디스어셈블러가 호출되어 오프셋 맵을 생성한다. 오프셋 맵은 전술한 바와 같이 옵코드 단위로 옵코드를 데이터 페이지(202)에 기록하는 것을 시작하는 스트림 장애 인터셉터(204)에 의해 저장된다. 스트림 장애 인터셉터(204)는 이 오프셋 맵을 이용하여 각 옵코드의 경계를 결정한다. 스트림 장애 인터셉터(204)는 옵코드들의 리스트의 시작부 또는 끝부분으로 시작하는 임의의 적절한 순서로 옵코드를 데이터 페이지(202)에 기록할 수 있다.
임의의 경쟁이 발생하는 경우, 예를 들어 프로세서가 부분적으로 채워진 명령어를 실행하는 경우, 운영 체제 장애 메카니즘(203)이 트리거될 것이다. 이것은 스트림 장애 인터셉터(204)로 하여금 운영 체제(201)에 의해 호출되게 할 것이다. 스트림 장애 인터셉터(204)는 기록/미기록된 페이지 추적기(207)와 상의하고 옵코드 그 자체를 데이터 페이지(202)에 기록하거나 또 다른 스레드가 데이터의 기록을 마칠때까지 대기한다. 스트림 장애 인터셉터(204)는 예외를 재시도한다.
도 3은 일 실시예에 따라 실행가능 코드 데이터를 스트리밍하는 프로세스 또는 방법의 흐름도이다. 단계(301)에서, 프로세서는 복수의 옵코드를 포함하는 명령어를 수신한다. 각 옵코드는 1이상의 데이터 바이트를 포함할 수 있다. 단계(302)에서, 디스어셈블러는 명령어들을 별개의 옵코드들로 해체하는데 사용된다. 단계(303)에서, 각 옵코드 간의 경계를 식별하는 테이블이 생성된다. 이 테이블은 예를 들어 기록/미기록된 페이지 추적기에 저장될 수 있다. 단계(304)에서, 각 옵코드는 메모리의 표준 블록을 원자 기록함으로써 옵코드 단위로 메모리에 기록된다. 옵코드는 예를 들어 스트림 장애 인터셉터에 의해 메모리에 기록될 수 있다.
몇몇 실시예에서, 디버그 브레이크 포인트 옵코드는 메모리를 초기화하기 위해 모든 메모리 위치에 기록될 수 있다. 옵코드가 메모리에 기록되는 경우, 디버그 브레이크 포인트 옵코드는 메모리의 완전한 표준 블록을 생성하기 위해 옵코드에 첨부될 수 있다. 메모리의 표준 블록은 예를 들어 32비트 또는 64비트일 수 있다.
긴 옵코드가 메모리의 둘 이상의 표준 블록에 겹치게 될 경우, 그것은 두 개의 부분으로 분할될 수 있다. 긴 코드의 제2 부분은 제2 메모리 블록에 기록되고, 긴 옵코드의 제1 부분은 제1 메모리 블록에 기록된다. 이러한 식으로 긴 옵코드를 기록하게 되면, 전체 옵코드가 기록되기 전에 메모리 위치가 판독되는 경우 디버그 브레이크 포인트를 만나게 되는 것이 보장될 것이다. 메모리의 완전한 표준 블록을 생성하기 위해 긴 옵코드의 제2 부분에 디버그 브레이크 포인트 옵코드가 첨부될 수 있다. 이전의 옵코드는 긴 옵코드의 제1 부분과 함께 제1 메모리 블록에 기록될 수 있다.
도 3에 도시되어 있는 프로세스의 단계(301-305)는 동시에 및/또는 순차적으로 실행될 수 있음을 이해될 것이다. 각 단계는 임의의 순서로 수행될 수 있고 한번 또는 반복적으로 수행될 수 있다.
도 4는 도 1 내지 도 3의 예들이 구현되어 실행가능 코드 데이터의 록 프리 스트리밍을 제공할 수 있는 적절한 컴퓨팅 및 네트워킹 환경(400)의 일 예를 나타낸다. 컴퓨팅 시스템 환경(400)은 적절한 컴퓨팅 환경의 하나의 예일뿐이며 본 발명의 사용 또는 기능의 범주에 대한 어떠한 제한도 두려하지 않는다. 본 발명은 다수의 다른 범용 또는 전용 컴퓨팅 시스템 환경 또는 구성으로 동작가능하다. 본 발명에 사용하기에 적절할 수 있는 잘 알려져 있는 컴퓨팅 시스템, 환경 및/또는 구성의 예는 개인용 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩탑 장치, 태블릿 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋탑 박스, 프로그램가능 소비자 전자기기, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 전술한 시스템 또는 장치들 중 임의의 것을 포함하는 분산형 컴퓨팅 환경 등을 포함하나 이에 국한되지 않는다.
본 발명은 컴퓨터에 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어들의 일반적으로 문맥에서 기술될 수 있다. 일반적으로, 프로그램 모듈은 특정 작업을 수행하거나 추상적인 데이터 유형을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등을 포함한다. 본 발명은 통신 네트워크를 통해 링크되는 원격 프로세싱 장치들에 의해 작업이 수행되는 분산형 컴퓨팅 환경에서 실시될 수 있다. 분산형 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 포함하는 로컬 및/또는 원격 컴퓨터 저장 매체에 위치할 수 있다.
도 4를 참조하면, 본 발명의 다양한 측면들을 구현하는 예시적인 시스템은 컴퓨터(400)의 형태를 갖는 범용 컴퓨팅 장치를 포함할 수 있다. 컴포넌트들은 처리 장치(401), 시스템 메모리와 같은 데이터 저장소(402), 데이터 저장소(402)를 처리 장치(401)에 연결하는 것을 포함하여 다양한 시스템 컴포넌트들을 연결하는 시스템 버스(403)와 같은 다양한 하드웨어 컴포넌트들을 포함할 수 있으나, 이에 국한되지 않는다. 시스템 버스(403)는 다양한 버스 아키텍처를 사용하는 메모리 버스 또는 메모리 제어기, 주변 버스, 및 로컬 버스를 포함하는 임의의 몇몇 유형의 버스 구조일 수 있다. 제한이 아닌 예로서, 이러한 아키텍처는 산업 표준 아키텍처(ISA) 버스, 마이크로 채널 아키텍처(MCA) 버스, 강화된 ISA(EISA) 버스, 비디오 전자기기 표준 협회(VESA) 로컬 버스 및 메자닌(Mezzanine) 버스로도 알려져 있는 주변 기기 상호연결(PCI) 버스를 포함한다.
컴퓨터(400)는 전형적으로 다양한 컴퓨터 판독가능 매체(404)를 포함한다. 컴퓨터 판독가능 매체(404)는 컴퓨터(400)에 의해 액세스될 수 있고 휘발성 및 비휘발성 매체와, 이동식 및 고정식 매체를 포함하나, 전파 신호는 제외한 임의의 이용가능한 매체일 수 있다. 제한이 아닌 예로서, 컴퓨터 저장 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 그 밖의 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술에서 구현되는 휘발성 및 비휘발성, 이동식 및 고정식 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD 또는 다른 광학 디스크 저장소, 자기 카세트, 자기 테이프, 자기 디스크 저장소 또는 다른 자기 저장 장치, 또는 원하는 정보를 저장할 수 있고 컴퓨터(400)에 의해 액세스될 수 있는 임의의 다른 매체를 포함하나 이에 국한되지 않는다. 통신 매체는 전형적으로 반송파와 같은 변조된 데이터 신호 또는 그 밖의 다른 운송 메카니즘에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 그 밖의 데이터를 포함하고 또한 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호"라는 용어는 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상이 설정 또는 변경된 신호를 의미한다. 제한이 아닌 예로서, 통신 매체는 유선 네트워크 또는 직도선 연결과 같은 유선 매체, 및 음향, RF, 적외선 및 다른 무선 매체와 같은 무선 매체를 포함한다. 전술한 것의 임의의 조합도 컴퓨터 판독가능 매체의 범주 내에 포함될 수 있다. 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 상에 저장된 소프트웨어와 같은 컴퓨터 프로그램 제품으로서 수록될 수 있다.
데이터 저장 또는 시스템 메모리(402)는 판독전용 메모리(ROM) 및 랜덤 액세스 메모리(RAM)와 같은 휘바성 및/또는 비휘발성 메모리의 형태를 갖는 컴퓨터 저장 매체를 포함한다. 메모리(402) 또는 컴퓨터 판독가능 매체(404)는 데이터 페이지, 옵코드 경계 리스트, 옵코드 등을 저장하는데 사용될 수 있다. 예를 들어 시동 동안 컴퓨터(400) 내의 구성요소들 간에 정보를 전달하는데 도움을 주는 기본적인 루틴을 포함하는 기본적인 입/출력 시스템(BIOS)은 전형적으로 ROM에 저장된다. RAM은 전형적으로 처리 장치(401)에 의해 즉각적으로 액세스가능하고 및/또는 현재 동작중인 데이터 및/또는 프로그램 모듈을 포함한다. 제한이 아닌 예로서, 데이터 저장소(402)는 운영 체제, 애플리케이션 프로그램 및 그 밖의 다른 프로그램 모듈 및 프로그램 데이터를 포함한다. 처리 장치(401)에서 실행되는 운영 체제는 운영 체제 예외(203), 스트림 장애 인터셉터(204), 디스어셈블러(206), 및/또는 기록/미기록된 페이지 추적기(207)(도 2)와 같은 기능을 지원할 수 있다.
데이터 저장소(402)는 다른 이동식/고정식, 휘발성 및/또는 컴퓨터 저장 매체를 포함할 수 있다. 단지 예로서, 데이터 저장소(402)는 고정식의 비휘발성 자기 매체에 대해 판독 또는 기록을 수행하는 하드 디스크 드라이브, 이동식의 비휘발성 자기 디스크에 대해 판독 또는 기록을 수행하는 자기 디스크 드라이브, 및 CD ROM 또는 다른 광학 매체와 같은 이동식의 비휘발성 광학 디스크에 대해 판독 또는 기록을 수행하는 광학 디스크 드라이브일 수 있다. 예시적인 동작 환경에서 사용될 수 있는 다른 이동식/고정식, 휘발성/비휘발성 컴퓨터 저장 매체는 자기 테이프 카세트, 플래시 메모리 카드, 디지털 다용도 디스크, 디지털 비디오 테이프, 고체 상태 RAM, 고체 상태 ROM 등을 포함하나 이에 국한되지는 않는다. 앞서 설명하고 도 4에 도시되어 있는 드라이브 및 이들의 연관된 컴퓨터 저장 매체는 컴퓨터(400)를 위해 컴퓨터 판독가능 명령어들, 데이터 구조, 프로그램 모듈 및 그 밖의 다른 데이터의 저장을 제공한다.
사용자는 사용자 인터페이스(405) 또는 태블릿, 전자 디지타이저, 마이크로폰, 키보드, 및/또는 일반적으로 마우스, 트랙볼 또는 터치 패드로 불리는 포인팅 장치와 같은 다른 입력 장치를 통해 명령 및 정보를 입력할 수 있다. 다른 입력 장치는 조이스틱, 게임 패드, 위성 접시, 스캐너 등을 포함할 수 있다. 또한, 음성 입력, 손 또는 손가락을 이용하는 제스처 입력 또는 다른 자연스러운 사용자 인터페이스(NUI)가 또한 마이크로폰, 카메라, 태블릿, 터치 패드, 글러브 또는 다른 센서와 같은 적절한 입력 장치와 함께 사용될 수 있다. 이들 및 다른 입력 장치는 보통 시스템 버스(403)에 연결되나, 병렬 포트, 게임 포트 또는 유니버설 시리얼 버스(USB)와 같은 다른 인터페이스 및 버스 구조에 의해 연결될 수 있는 사용자 입력 인터페이스(405)를 통해 입력 장치(401)에 연결된다. 모니터(406) 또는 다른 유형의 디스플레이 장치가 또한 비디오 인터페이스와 같은 인터페이스를 통해 시스템 버스(403)에 연결된다. 모니터(406)는 또한 터치 스크린 패널 등과 통합될 수 있다. 모니터 및/또는 터치 스크린 패널은 컴퓨팅 장치(400)가 예를 들어 태블릿 유형의 개인용 컴퓨터에 통합되는 하우징에 물리적으로 결합될 수 있다. 또한, 컴퓨팅 장치(400)와 같은 컴퓨터는 또한 출력 주변 인터페이스 등을 통해 연결될 수 있는 스피커 및 프린터와 같은 또 다른 주변 출력 장치를 포함할 수 있다.
컴퓨터(400)는 원격 컴퓨터와 같은 하나 이상의 원격 장치에 대한 논리적 연결부(407)를 사용하여 네트워크형 또는 클라우드 컴퓨팅 환경에서 동작할 수 있다. 원격 컴퓨터는 개인용 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 일반적인 네트워크 노드일 수 있고, 전형적으로 컴퓨터(400)와 관련하여 전술한 요소들 중 다수 또는 전부를 포함한다. 도 4에 도시한 논리적 연결들은 하나 이상의 근거리망(LAN) 및 하나 이상의 광역망(WAN)을 포함하나, 다른 네트워크도 포함할 수 있다. 이러한 네트워킹 환경은 사무실, 회사 전체의 컴퓨터 네트워크, 인트라넷 및 인터넷에서 흔한 것이다.
네트워크형 또는 클라우드 컴퓨팅 환경에서 사용되는 경우, 컴퓨터(400)는 네트워크 인터페이스 또는 어댑터(407)를 통해 공중망 또는 사설망에 연결될 수 있다. 네트워크 인터페이스(407)는 네트워크 서버(205)(도 2)와 같은 원격 장치로의 연결을 제공할 수 있다. 몇몇 실시예에서, 네트워크를 통해 통신을 수립하기 위한 모뎀 또는 다른 수단이 제공된다. 내장형 또는 외장형일 수 있는 모뎀은 네트워크 인터페이스(407) 또는 다른 적절한 메카니즘을 통해 시스템 버스(403)에 연결될 수 있다. 예를 들어 인터페이스 및 안테나를 포함하는 무선 네트워킹 컴포넌트는 액세스 포인트 또는 피어 컴퓨터와 같은 적절한 장치를 통해 네트워크에 연결될 수 있다. 네트워크형 환경에서, 컴퓨터(400)와 관련하여 기술된 프로그램 모듈 또는 이들의 일부는 원격 메모리 저장 장치에 저장될 수 있다. 도시되어 있는 연결은 예시적인 것이며 컴퓨터들 간의 통신 링크를 수립하는 다른 수단이 사용될 수 있다.
본 발명은 구조적 특징 및/또는 방법론적 동작에 특정한 언어로 기술되었지만, 첨부한 청구항에 정의된 본 발명은 전술한 바와 같은 특정 특징 또는 동작들에 반드시 국한될 필요는 없다. 그 보다, 전술한 특정 특징 및 동작들은 청구대상을 구현하기 위한 예시적인 형식으로 개시되어 있다.
Claims (18)
- 복수의 옵코드(opcodes)를 포함하는 명령어들을 수신하는 단계 - 각 옵코드는 1 이상의 데이터 바이트를 포함함 - 와,
상기 명령어들을 별개의 옵코드들로 해체하는 단계와,
각 옵코드 간의 경계를 식별하는 테이블을 생성하는 단계와,
메모리의 완전한 표준 블록을 생성하기 위해 디버그 브레이크 포인트 옵코드(debug break point opcodes)를 옵코드에 첨부하는 단계와,
메모리의 표준 블록들을 원자 기록(atomically writing)함으로써 각 옵코드를 옵코드 단위(in an opcode-by-opcode manner)로 메모리에 기록하는 단계를 포함하는
컴퓨터 구현 방법.
- 제1항에 있어서,
상기 메모리를 초기화하기 위해 디버그 브레이크 포인트 옵코드를 모든 메모리 위치에 기록하는 단계를 더 포함하는
컴퓨터 구현 방법.
- 제1항에 있어서,
상기 메모리의 표준 블록은 길이가 32비트 또는 64비트인
컴퓨터 구현 방법.
- 제1항에 있어서,
긴 옵코드가 메모리의 둘 이상의 표준 블록에 겹쳐있게 될 경우를 식별하는 단계와,
상기 긴 옵코드의 제2 부분을 제2 메모리 블록에 기록하는 단계와,
상기 긴 옵코드의 제1 부분을 제1 메모리 블록에 기록하는 단계를 더 포함하는
컴퓨터 구현 방법.
- 제4항에 있어서,
메모리의 완전한 표준 블록을 생성하기 위해 상기 긴 옵코드의 상기 제2 부분에 디버그 브레이크 포인트 옵코드를 첨부하는 단계를 더 포함하는
컴퓨터 구현 방법.
- 제5항에 있어서,
이전의 옵코드 및 상기 긴 옵코드의 상기 제1 부분을 상기 제1 메모리 블록에 기록하는 단계를 더 포함하는
컴퓨터 구현 방법.
- 프로세서와,
시스템 메모리와,
컴퓨터 실행가능 명령어들이 저장된 하나 이상의 컴퓨터 판독가능 저장 매체를 포함하되,
상기 컴퓨터 실행가능 명령어들은 상기 프로세서에 의해 실행되는 경우 상기 프로세서로 하여금 실행가능 코드의 스트리밍을 위한 방법을 수행하게 하고, 상기 방법은,
복수의 옵코드를 포함하는 명령어들을 수신하는 단계 - 각 옵코드는 1 이상의 데이터 바이트를 포함함 - 와,
상기 명령어들을 별개의 옵코드들로 해체하는 단계와,
각 옵코드 간의 경계를 식별하는 테이블을 생성하는 단계와,
메모리의 표준 블록들을 원자 기록함으로써 각 옵코드를 옵코드 단위로 메모리에 기록하는 단계와,
메모리의 완전한 표준 블록을 생성하기 위해 디버그 브레이크 포인트 옵코드를 옵코드에 첨부하는 단계를 포함하는
컴퓨터 시스템.
- 제7항에 있어서,
상기 방법은,
상기 메모리를 초기화하기 위해 디버그 브레이크 포인트 옵코드를 모든 메모리 위치에 기록하는 단계를 더 포함하는
컴퓨터 시스템.
- 제7항에 있어서,
상기 메모리의 표준 블록은 길이가 32비트 또는 64비트인
컴퓨터 시스템.
- 제7항에 있어서,
상기 방법은,
긴 옵코드가 메모리의 둘 이상의 표준 블록에 겹쳐있게 될 경우를 식별하는 단계와,
상기 긴 옵코드의 제2 부분을 제2 메모리 블록에 기록하는 단계와,
상기 긴 옵코드의 제1 부분을 제1 메모리 블록에 기록하는 단계를 더 포함하는
컴퓨터 시스템.
- 제10항에 있어서,
상기 방법은,
메모리의 완전한 표준 블록을 생성하기 위해 디버그 브레이크 포인트 옵코드를 상기 긴 옵코드의 제2 부분에 첨부하는 단계를 더 포함하는
컴퓨터 시스템.
- 제10항에 있어서,
상기 방법은,
이전의 옵코드 및 상기 긴 옵코드의 상기 제1 부분을 상기 제1 메모리 블록에 기록하는 단계를 더 포함하는
컴퓨터 시스템.
- 제7항에 있어서,
요청된 데이터 페이지가 이용가능하지 않은 경우를 식별하도록 동작하고, 상기 데이터 페이지를 원격 소스로부터 리트리브(retrieving)하는 스트림 장애 인터셉터(stream fault interceptor)를 더 포함하는
컴퓨터 시스템.
- 제7항에 있어서,
상기 명령어들을 별개의 옵코드들로 해체하도록 동작하는 디스어셈블러(disassembler)를 더 포함하는
컴퓨터 시스템.
- 제7항에 있어서,
각 옵코드 간의 경계를 식별하는 테이블을 유지하는 페이지 추적기(page tracker)를 더 포함하는
컴퓨터 시스템.
- 전파 신호는 제외한 컴퓨터 판독가능 저장 매체로서,
상기 컴퓨터 판독가능 저장 매체는 적어도 하나의 프로세서에 의해 실행될 때 상기 적어도 하나의 프로세서로 하여금 실행가능한 코드 데이터를 스트리밍하는 방법을 수행하게 하는 컴퓨터 실행가능한 명령어를 저장하고,
상기 방법은,
데이터 페이지가 이용가능하지 않음을 나타내는 고장을 수신하는 단계와,
상기 데이터 페이지를 포함하는 명령어를 요청하는 단계와,
원격 소스로부터 상기 명령어를 수신하는 단계―상기 명령어는 복수의 옵코드를 포함하고, 각각의 옵코드는 1 이상의 데이터 바이트를 포함함―와,
상기 명령어들을 별개의 옵코드들로 해체하는 단계와,
각 옵코드 간의 경계를 식별하는 테이블을 생성하는 단계와,
긴 옵코드가 메모리의 둘 이상의 표준 블록에 겹치게 될 경우를 식별하는 단계와,
메모리의 표준 블록을 원자 기록함으로써 각 옵코드를 옵코드 단위로 메모리에 기록하는 단계와,
상기 긴 옵코드의 제2 부분을 제2 메모리 블록에 기록하는 단계와,
상기 긴 옵코드의 제1 부분을 제1 메모리 블록에 기록하는 단계를 더 포함하는
컴퓨터 판독가능 저장 매체.
- 제16항에 있어서,
상기 방법은,
메모리의 완전한 표준 블록을 생성하기 위해 옵코드에 디버그 브레이크 포인트 옵코드를 첨부하는 단계를 더 포함하는
컴퓨터 판독가능 저장 매체.
- 제16항에 있어서,
상기 메모리의 표준 블록은 길이가 32비트 또는 64비트인
컴퓨터 판독가능 저장 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/560,216 | 2012-07-27 | ||
US13/560,216 US9436474B2 (en) | 2012-07-27 | 2012-07-27 | Lock free streaming of executable code data |
PCT/US2013/052153 WO2014018812A1 (en) | 2012-07-27 | 2013-07-26 | Lock free streaming of executable code data |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150040277A KR20150040277A (ko) | 2015-04-14 |
KR102042304B1 true KR102042304B1 (ko) | 2019-11-07 |
Family
ID=48985821
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157002060A KR102042304B1 (ko) | 2012-07-27 | 2013-07-26 | 실행가능 코드 데이터의 록 프리 스트리밍 기법 |
Country Status (11)
Country | Link |
---|---|
US (2) | US9436474B2 (ko) |
EP (1) | EP2877918B1 (ko) |
JP (1) | JP6328632B2 (ko) |
KR (1) | KR102042304B1 (ko) |
CN (1) | CN104508626B (ko) |
AU (2) | AU2013295686B2 (ko) |
BR (1) | BR112015001476B1 (ko) |
CA (1) | CA2878558C (ko) |
MX (1) | MX347111B (ko) |
RU (1) | RU2639235C2 (ko) |
WO (1) | WO2014018812A1 (ko) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9747189B2 (en) | 2015-11-12 | 2017-08-29 | International Business Machines Corporation | Breakpoint for predicted tuple processing time in a streaming environment |
CN107797821B (zh) * | 2016-09-05 | 2021-10-08 | 上海宝存信息科技有限公司 | 重试读取方法以及使用该方法的装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030023960A1 (en) | 2001-07-25 | 2003-01-30 | Shoab Khan | Microprocessor instruction format using combination opcodes and destination prefixes |
US20070079296A1 (en) | 2005-09-30 | 2007-04-05 | Zhiyuan Li | Compressing "warm" code in a dynamic binary translation environment |
US20070168736A1 (en) | 2005-12-19 | 2007-07-19 | Ottavi Robert P | Breakpoint groups |
Family Cites Families (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5768575A (en) * | 1989-02-24 | 1998-06-16 | Advanced Micro Devices, Inc. | Semi-Autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for sepculative and out-of-order execution of complex instructions |
JPH0395629A (ja) | 1989-09-08 | 1991-04-22 | Fujitsu Ltd | データ処理装置 |
JPH03216734A (ja) * | 1990-01-22 | 1991-09-24 | Hitachi Micro Comput Eng Ltd | データ処理方法及び中央処理装置 |
JPH05312838A (ja) * | 1992-05-12 | 1993-11-26 | Iwatsu Electric Co Ltd | ロジック・アナライザ |
GB9412434D0 (en) * | 1994-06-21 | 1994-08-10 | Inmos Ltd | Computer instruction compression |
US6009508A (en) * | 1994-06-21 | 1999-12-28 | Sgs-Thomson Microelectronics Limited | System and method for addressing plurality of data values with a single address in a multi-value store on FIFO basis |
CN101211255B (zh) * | 1994-12-02 | 2012-07-04 | 英特尔公司 | 对复合操作数进行压缩操作的处理器、设备和计算系统 |
US6212574B1 (en) | 1997-04-04 | 2001-04-03 | Microsoft Corporation | User mode proxy of kernel mode operations in a computer operating system |
US5946484A (en) * | 1997-05-08 | 1999-08-31 | The Source Recovery Company, Llc | Method of recovering source code from object code |
US6061772A (en) * | 1997-06-30 | 2000-05-09 | Sun Microsystems, Inc. | Split write data processing mechanism for memory controllers utilizing inactive periods during write data processing for other transactions |
US6282698B1 (en) * | 1998-02-09 | 2001-08-28 | Lucent Technologies Inc. | Detecting similarities in Java sources from bytecodes |
US6119115A (en) | 1998-03-12 | 2000-09-12 | Microsoft Corporation | Method and computer program product for reducing lock contention in a multiple instruction execution stream processing environment |
EP0955578A1 (en) * | 1998-05-04 | 1999-11-10 | International Business Machines Corporation | Method and device for carrying out a function assigned to an instruction code |
US6077312A (en) * | 1998-05-06 | 2000-06-20 | International Business Machines Corporation | Apparatus, program product and method of debugging utilizing a context sensitive breakpoint |
US6253309B1 (en) | 1998-09-21 | 2001-06-26 | Advanced Micro Devices, Inc. | Forcing regularity into a CISC instruction set by padding instructions |
US6397273B2 (en) | 1998-12-18 | 2002-05-28 | Emc Corporation | System having an enhanced parity mechanism in a data assembler/disassembler for use in a pipeline of a host-storage system interface to global memory |
US6408382B1 (en) * | 1999-10-21 | 2002-06-18 | Bops, Inc. | Methods and apparatus for abbreviated instruction sets adaptable to configurable processor architecture |
US7444500B1 (en) | 2000-08-14 | 2008-10-28 | General Software, Inc. | Method for executing a 32-bit flat address program during a system management mode interrupt |
US6708326B1 (en) * | 2000-11-10 | 2004-03-16 | International Business Machines Corporation | Method, system and program product comprising breakpoint handling mechanism for debugging and/or monitoring a computer instruction sequence |
US20040059641A1 (en) * | 2002-06-25 | 2004-03-25 | Lucas Brown | System and method for creating user selected customized digital data compilations |
US7917734B2 (en) | 2003-06-30 | 2011-03-29 | Intel Corporation | Determining length of instruction with multiple byte escape code based on information from other than opcode byte |
US7581082B2 (en) | 2005-05-13 | 2009-08-25 | Texas Instruments Incorporated | Software source transfer selects instruction word sizes |
US7506206B2 (en) * | 2005-06-07 | 2009-03-17 | Atmel Corporation | Mechanism for providing program breakpoints in a microcontroller with flash program memory |
US20070006189A1 (en) * | 2005-06-30 | 2007-01-04 | Intel Corporation | Apparatus, system, and method of detecting modification in a self modifying code |
US7761864B2 (en) * | 2005-08-09 | 2010-07-20 | Intermec Ip Corp. | Method, apparatus and article to load new instructions on processor based devices, for example, automatic data collection devices |
US20070079177A1 (en) * | 2005-09-30 | 2007-04-05 | Charles Spirakis | Process monitoring and diagnosis apparatus, systems, and methods |
US8584109B2 (en) * | 2006-10-27 | 2013-11-12 | Microsoft Corporation | Virtualization for diversified tamper resistance |
US8037459B2 (en) * | 2007-07-31 | 2011-10-11 | International Business Machines Corporation | Recovery from nested exceptions in an instrumentation routine |
US8185783B2 (en) | 2007-11-22 | 2012-05-22 | Microsoft Corporation | Split user-mode/kernel-mode device driver architecture |
CN102077195A (zh) * | 2008-05-08 | 2011-05-25 | Mips技术公司 | 具有紧凑指令集架构的微处理器 |
US8423961B2 (en) | 2008-06-06 | 2013-04-16 | Microsoft Corporation | Simulating operations through out-of-process execution |
US8103912B2 (en) * | 2008-09-07 | 2012-01-24 | EADS North America, Inc. | Sequencer and test system including the sequencer |
KR101581001B1 (ko) * | 2009-03-30 | 2015-12-30 | 삼성전자주식회사 | 프로그램의 동적 분석 방법 및 그 장치 |
US9274796B2 (en) * | 2009-05-11 | 2016-03-01 | Arm Finance Overseas Limited | Variable register and immediate field encoding in an instruction set architecture |
CN101853148B (zh) | 2009-05-19 | 2014-04-23 | 威盛电子股份有限公司 | 适用于微处理器的装置及方法 |
US20120079459A1 (en) * | 2010-09-29 | 2012-03-29 | International Business Machines Corporation | Tracing multiple threads via breakpoints |
US9176738B2 (en) * | 2011-01-12 | 2015-11-03 | Advanced Micro Devices, Inc. | Method and apparatus for fast decoding and enhancing execution speed of an instruction |
US9053233B2 (en) * | 2011-08-15 | 2015-06-09 | Freescale Semiconductor, Inc. | Method and device for controlling debug event resources |
GB2501299A (en) * | 2012-04-19 | 2013-10-23 | Ibm | Analysing computer program instructions to determine if an instruction can be replaced with a trap or break point. |
US8990627B2 (en) * | 2012-05-23 | 2015-03-24 | Red Hat, Inc. | Leveraging page fault and page reclaim capabilities in debugging |
US9342284B2 (en) * | 2013-09-27 | 2016-05-17 | Intel Corporation | Optimization of instructions to reduce memory access violations |
US9619346B2 (en) * | 2013-10-31 | 2017-04-11 | Assured Information Security, Inc. | Virtual machine introspection facilities |
-
2012
- 2012-07-27 US US13/560,216 patent/US9436474B2/en active Active
-
2013
- 2013-07-26 EP EP13748402.8A patent/EP2877918B1/en active Active
- 2013-07-26 MX MX2015001127A patent/MX347111B/es active IP Right Grant
- 2013-07-26 WO PCT/US2013/052153 patent/WO2014018812A1/en active Application Filing
- 2013-07-26 CN CN201380039991.8A patent/CN104508626B/zh active Active
- 2013-07-26 RU RU2015102341A patent/RU2639235C2/ru active
- 2013-07-26 AU AU2013295686A patent/AU2013295686B2/en active Active
- 2013-07-26 CA CA2878558A patent/CA2878558C/en active Active
- 2013-07-26 KR KR1020157002060A patent/KR102042304B1/ko active IP Right Grant
- 2013-07-26 BR BR112015001476-3A patent/BR112015001476B1/pt active IP Right Grant
- 2013-07-26 JP JP2015524457A patent/JP6328632B2/ja active Active
-
2016
- 2016-09-06 US US15/257,794 patent/US9841976B2/en active Active
-
2018
- 2018-07-13 AU AU2018205196A patent/AU2018205196B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030023960A1 (en) | 2001-07-25 | 2003-01-30 | Shoab Khan | Microprocessor instruction format using combination opcodes and destination prefixes |
US20070079296A1 (en) | 2005-09-30 | 2007-04-05 | Zhiyuan Li | Compressing "warm" code in a dynamic binary translation environment |
US20070168736A1 (en) | 2005-12-19 | 2007-07-19 | Ottavi Robert P | Breakpoint groups |
Also Published As
Publication number | Publication date |
---|---|
EP2877918B1 (en) | 2022-02-16 |
CA2878558C (en) | 2020-11-03 |
WO2014018812A1 (en) | 2014-01-30 |
CN104508626B (zh) | 2017-06-13 |
AU2018205196A1 (en) | 2018-08-02 |
US20160371083A1 (en) | 2016-12-22 |
AU2013295686A1 (en) | 2015-01-29 |
JP2015524591A (ja) | 2015-08-24 |
CA2878558A1 (en) | 2014-01-30 |
AU2018205196B2 (en) | 2019-07-25 |
BR112015001476B1 (pt) | 2022-06-28 |
RU2639235C2 (ru) | 2017-12-20 |
JP6328632B2 (ja) | 2018-05-23 |
MX2015001127A (es) | 2015-04-08 |
EP2877918A1 (en) | 2015-06-03 |
AU2013295686B2 (en) | 2018-04-19 |
RU2015102341A (ru) | 2016-08-10 |
US9436474B2 (en) | 2016-09-06 |
US20140032883A1 (en) | 2014-01-30 |
KR20150040277A (ko) | 2015-04-14 |
US9841976B2 (en) | 2017-12-12 |
BR112015001476A2 (pt) | 2017-07-04 |
MX347111B (es) | 2017-04-12 |
CN104508626A (zh) | 2015-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7774636B2 (en) | Method and system for kernel panic recovery | |
US9317297B2 (en) | Replay execution of instructions in thread chunks in the chunk order recorded during previous execution | |
US7757129B2 (en) | Generalized trace and log facility for first error data collection | |
US20100122073A1 (en) | Handling exceptions in software transactional memory systems | |
US8543991B2 (en) | Profile driven multicore background compilation | |
US9104797B1 (en) | Efficient cloud-based annotation of crash reports | |
CN112041823A (zh) | 计算机过程执行的选择性跟踪部分 | |
US7669189B1 (en) | Monitoring memory accesses for computer programs | |
US10013335B2 (en) | Data flow analysis in processor trace logs using compiler-type information method and apparatus | |
JP7065860B2 (ja) | 保護ストレージ・イベント処理のランタイム・インストルメンテーション | |
US20070234298A1 (en) | Profiling method and computer product | |
US20140365833A1 (en) | Capturing trace information using annotated trace output | |
US20140258785A1 (en) | Identifying a storage location for a storage address requested during debugging | |
AU2018205196B2 (en) | Lock free streaming of executable code data | |
US10891214B2 (en) | Transferring a debug configuration amongst carrier threads for debugging a carried thread | |
US8850273B2 (en) | Dynamic hardware watchpoint | |
JP5226093B2 (ja) | プロセス内コンポーネントのオブジェクト作成方法およびシステム | |
US20200142807A1 (en) | Debugger with hardware transactional memory | |
US20130132061A1 (en) | Just-in-time static translation system for emulated computing environments | |
US20130132976A1 (en) | Deadly embrace | |
US20200341884A1 (en) | Converting between a carried thread and a carrier thread for debugging the carried thread | |
US10496513B2 (en) | Measurement of computer product usage |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right |