명령 집합 시뮬레이터

Instruction set simulator

명령 집합 시뮬레이터(ISS)는 보통 고급 프로그래밍 언어로 코딩된 시뮬레이션 모델로, 명령을 읽고 프로세서의 레지스터를 나타내는 내부 변수를 유지함으로써 메인프레임 또는 마이크로프로세서의 동작을 모방합니다.

명령 시뮬레이션은 몇 가지 가능한 이유 중 하나를 위해 사용되는 방법론입니다.

  • 상위 호환성을 위해 다른 하드웨어 장치 또는 전체 컴퓨터의 기계 코드를 시뮬레이션하기 위해 전체 시스템 시뮬레이터에는 일반적으로 명령 집합 시뮬레이터가 포함되어 있습니다.
예를 들어, IBM 1401마이크로코드 에뮬레이션을 사용하여 최신 IBM/360에서 시뮬레이션되었습니다.
  • 테스트 및 디버깅을 위해 동일한 하드웨어에서 기계 코드 명령(입력 스트림으로 처리됨)을 감시 및 실행합니다(예: 우발적이거나 의도적인 버퍼 오버플로로부터 보호).
  • 속도가 느린cycle-accuratesimulator—of 시뮬레이션이 프로세서 자체가 하나가 아닌 요소들을 검증하는의 프로세서 코어에, 하드웨어 기술 언어 설계 Verilog어디 ISS[표창 필요한]과 같은 툴들과 시뮬레이션 더 빨리"PLI"의 수단에 의해 운영될 수 있는에서conf 수 없performance—compared을 향상시키기 위해.PL/1, w와 함께 사용되hich는 프로그래밍 언어입니다).

실행

ISS는 종종 소프트웨어 엔지니어/프로그래머가 대상 하드웨어를 얻기 전에 프로그램을 디버깅하기 위해 디버거와 함께 제공됩니다.GDB는 컴파일된 ISS를 가진 디버거 중 하나입니다.타이머, 인터럽트, 시리얼 포트, 일반 I/O 포트 등의 시뮬레이트된 주변기기와 통합되어 마이크로 컨트롤러의 동작을 흉내낼 수 있습니다.

기본 명령 시뮬레이션 기법은 목적에 관계없이 동일하며, 우선 대상 프로그램의 이름을 추가 입력 파라미터로 전달하여 감시 프로그램을 실행한다.

그런 다음 대상 프로그램이 메모리에 로드되지만 제어는 코드에 전달되지 않습니다.대신 로드된 프로그램 내의 진입점을 계산하고 이 위치에 의사 프로그램 상태 워드(PSW)를 설정한다.의사 레지스터의 세트는 프로그램에 직접 제어가 주어졌을 경우 포함되었을 것으로 설정됩니다.

하드웨어 및 운영 체제에 따라 다른 의사 "컨트롤 블록"을 가리키도록 이들 중 일부를 수정해야 할 수 있습니다.또한 이전에 추가한 프로그램 이름 매개변수를 'strip out'하도록 원래 매개변수 목록을 재설정해야 할 수도 있습니다.

그 후 실행은 다음과 같이 진행됩니다.

  1. 의사 PSW 위치에서의 명령 길이를 결정합니다(처음에는 대상 프로그램의 첫 번째 명령).프로그램 내의 이 명령 오프셋이 이전에 주어진 "일시정지" 포인트 세트와 일치하면 "일시정지" 이유를 설정하고 7로 이동합니다.
  2. 지시를 원래 위치(필요한 경우)에서 모니터의 메모리로 가져옵니다."trace"가 사용 가능하고 "on"인 경우 프로그램 이름, 명령 오프셋 및 기타 값을 저장합니다.
  3. 명령 유형에 따라 실행 전 검사를 수행하고 실행합니다.어떤 이유로든 명령을 진행할 수 없는 경우(잘못된 명령, 잘못된 모드 등) 7로 이동합니다.명령이 메모리를 변경하려는 경우 메모리 대상이 존재하며( 스레드에 대해) 충분히 큰지 확인하십시오.OK인 경우 적절한 의사 레지스터를 임시 실제 레지스터에 로드하고 실제 레지스터와 동등한 이동을 수행하고 트레이스가 "on"인 경우 변경된 스토리지의 주소와 길이를 저장한 후 4로 이동합니다.명령이 "등록하기 위한" 작업인 경우, 의사 레지스터를 모니터 실제 레지스터에 로드하고, 작업을 수행하고, 각 의사 레지스터에 다시 저장하고, 4로 이동합니다.명령이 조건부 분기인 경우 조건이 충족되는지 여부를 확인합니다. 4로 이동하고 조건이 충족되면 주소에 대한 분기를 계산하고 유효 여부를 확인합니다(그렇지 않은 경우 오류 = "Wild branch"를 설정하고 7로 이동합니다). OK인 경우 5로 이동합니다.명령이 운영 체제 호출인 경우, 모니터링 프로그램에서 "가짜" 주소를 사용하여 실제 호출을 수행하여 제어 권한을 모니터 프로그램으로 되돌린 다음 의사 레지스터를 재설정하여 호출을 반영합니다. 4로 이동합니다.
  4. 현재 의사 PSW 값에 명령 길이를 추가합니다.
  5. Pseudo PSW에 다음 주소를 저장합니다.
  6. 1로 이동합니다.
  7. 실행을 중지합니다.

테스트 및 디버깅을 위해 모니터링 프로그램은 레지스터, 메모리 및 재시작 위치를 표시 및 변경하는 기능을 제공하거나 미니 코어 덤프를 얻거나 현재 데이터 값을 가진 심볼 프로그램 이름을 인쇄할 수 있습니다.새로운 조건부 "일시정지" 위치를 허용하거나 원치 않는 일시정지 등을 제거할 수 있습니다.

명령 시뮬레이션은 실행 전에 오류를 검출할 수 있는 기회를 제공합니다.즉, 조건은 그대로 유지되며 오류로 인해 파괴되지 않습니다.IBM S/360매우 좋은 예는 다음과 같은 명령 시퀀스로, 명령 시뮬레이션 모니터 없이 디버깅에 어려움을 겪을 수 있습니다.

LM R14, R12, 12(R13)에서 r13이 X"00"의 BR R14 문자열을 잘못 가리키면 PSW에 "Operation Exception" * 오류 시 모든 레지스터가 null을 포함합니다. 

결과들

오버헤드

위의 기본 "루프"(Fetch/Execute/Calculate new address)를 수행하는 명령의 수는 하드웨어에 따라 다르지만, IBM S/360/370/390/ES9000 범위의 시스템에서 약 12 또는 13개의 명령 유형에 따라 수행될 수 있습니다.메모리 위치가 유효한지 또는 조건부 "일시정지"가 있는지 확인하면 오버헤드가 크게 증가하지만 최적화 기술은 이를 허용 가능한 수준으로 줄일 수 있습니다.테스트 목적으로 명령 단계, 트레이스 및 테스트에 대한 의도적인 점프(실제 오류가 없는 경우)를 포함한 강력한 디버깅 기능이 제공되므로 일반적으로 이 기능은 매우 적합합니다.또한 완전한 명령 트레이스를 사용하여 실제(실행된) 코드 커버리지를 테스트할 수 있습니다.

이점 추가

대상 프로그램의 실행을 모니터링하면 모니터링 중에 나타나는(또는 사라지는) 랜덤 오류를 강조 표시할 수 있지만 실제 실행에서는 그렇지 않은 경우가 있습니다.이 문제는 모니터링 프로그램이 동일한 주소 공간에 물리적으로 존재하기 때문에 대상 프로그램이 일반 위치와는 다른 위치에 로드될 때 발생할 수 있습니다.

대상 프로그램이 메모리 내의 "랜덤" 위치(보통 "소유"되지 않는 위치)에서 값을 선택했을 경우, 예를 들어 거의 모든 정상 상황에서 Null(X"00)이 될 수 있으며 프로그램은 정상적으로 작동합니다.모니터링 프로그램이 로드 포인트를 이동하면 X"FF"라고 하는 것을 픽업하여 비교 동작 중에 로직이 다른 결과를 발생시킬 수 있습니다.또는 모니터링 프로그램이 현재 값을 "선택"하는 공간을 점유하고 있는 경우 유사한 결과가 발생할 수 있습니다.

재진입 오류: "동적" 스레드 메모리가 아닌 정적 변수를 잘못 사용하면 많은 상황에서 재진입 문제가 발생할 수 있습니다.모니터링 프로그램을 사용하면 스토리지 보호 키가 없어도 이러한 정보를 탐지할 수 있습니다.

부정 조작: 일부 운영 체제(또는 하드웨어)에서는 운영 체제에 대한 특정 호출에 대해 응용 프로그램이 올바른 "모드"여야 합니다.명령 시뮬레이션은 실행 전에 이러한 조건을 검출할 수 있습니다.

뜨거운 점적 분석&지침을 시뮬레이션( 넘은 실제 처리기 또는 투명성 확보 실행에서 시행되는 상대가 되겠다)되어 계산에 의해 명령 사용, 시뮬레이터와 또한"핫 스팟"이 최적화를 검출하는데 사용할 상대 능력의 알고리즘의 다른 버전 둘 사이 이루어진 조치를 제공할 수 있다. 할 수 있다프로그래머의 표적이 됩니다.이 역할은 성능 분석의 한 형태로 간주할 수 있는데, 이는 정상적인 실행 상태에서 이러한 통계를 얻는 것이 쉽지 않기 때문이다. 특히 기계어 명령의 범위를 그 성격에 따라 효과적으로 '위장'하는 고급 언어 프로그램의 경우 더욱 그러하다.

교육 목적

이러한 소프트웨어 시뮬레이터 중 일부는 어셈블리 언어 및 명령 집합 아키텍처 교육용 도구로 사용되어야 하며, 일부는 여러 시뮬레이션 계층과 ISA 간 시뮬레이션을 사용하여 특별히 설계되었으며,[1] ISA를 설계하고 시뮬레이션할 수도 있습니다.

비판

도날드 크누스는 컴퓨터 프로그래밍예술 제1권에서 이렇게 썼다: "저자의 의견으로는, 프로그래머들이 그러한 시뮬레이터를 쓰는 데 너무 많은 시간을 소비했고 그것들을 [2]사용하는 데 너무 많은 컴퓨터 시간이 낭비되었다."그러나 다음 섹션에서는 이러한 시뮬레이터가 디버깅을 위한 추적 또는 모니터 루틴으로 어떻게 유용한지 예를 제시합니다.

테스트 및 디버깅에 사용되는 감시 프로그램에 의한 시뮬레이션의 일반적인 트레이스 출력:

프로그램 오프셋 명령 분해 레지스터/보관(실행 후) TEST 001 00000000 X'05C0' BALR R12,0 R12=002CE00A 000002 X'47F0C00E' BC 15,X'00C'(R12) 00000E X98'ECD00C' STM R14, R12, X'00C' (R13) X'002E0008' ==> X'00004CE,002CE008, etc....' 000012 X'45E0C122' BAL R14,X'122'(R12) R14=002C0016 SUB1 000124 X'50E0C28A' ST R14,X'28A'(12') X'X'X'12'X'X'X'R2'R2' 

「 」를 참조해 주세요.

시뮬레이터

  • ARMulator - ARM 아키텍처용 CPU 시뮬레이터. ARM 자체에서 레퍼런스 및 소프트웨어 개발 차량으로 제공됩니다.
  • 컴퓨터 아키텍처 시뮬레이터
  • CPU Sim - 명령어 세트를 설계 및 작성한 후 해당 세트에서 시뮬레이션까지 명령어 프로그램을 실행할 수 있는 Java 기반 프로그램
  • Gpsim - PIC 마이크로컨트롤러 시뮬레이터
  • INTERP/8 - 인텔8008 및 인텔8080용 INTERP/80.
  • 리틀맨 컴퓨터 - 명령 집합 시뮬레이터의 간단한 Java 기반 예시
  • MikroSim - CPU 시뮬레이터로 교육용 마이크로코드 레벨에 대한 명령어 세트 정의 가능
  • VIP - CPU 시뮬레이터, 교육용 마이크로코드 레벨에 대한 명령어 세트 정의 가능
  • OVPSim - CPU 및 전체 시스템 시뮬레이터로 170개 이상의 정확한 프로세서 모델을 제공합니다.사용자 정의 명령 세트를 허용합니다.
  • Saturn+, 향상된 Saturn CPU 및 시스템 시뮬레이터로 2003~2015년 ARM 기반 프로세서를 탑재한 새로운 HP 그래프 계산기에서 RPL을 실행
  • Simics - CPU 및 전체 시스템 시뮬레이터 프레임워크로 복잡한 최신 하드웨어의 완전한 모델을 구축합니다.
  • Simh - 1960년대부터 개발 중인 I/O를 갖춘 풀 PDP-11 시스템을 포함한 50대 이상의 이력 컴퓨터 시뮬레이션.
  • CPU-OS 시뮬레이터 - RISC 타입의 내장 CPU 및 멀티스레딩 운영체제 교육용 시뮬레이터.

다른.

레퍼런스

  1. ^ 알마스리, I., 포스다, G., 샤데, A., 샤루르, A. (2011, 12월)소프트 프로세서 FPGA를 실장하는 유니버설 ISA 시뮬레이터.Applied Electric Engineering and Computing Technologies (AEECT), 2011 IEEE Jordan Conference on (p.1 ~ 6).IEEE.
  2. ^ "컴퓨터 프로그래밍의 예술", 도널드 크누스, 1997, 제1권, 제3판, 202쪽.

외부 링크

  • "Mikrocodesimulator MikroSim 2010". 0/1-SimWare. Retrieved 2010-12-06.
  • "명령 수준 시뮬레이션 및 추적"
  • Imperas는 ARM, ARMv8, MIPS, MIPS64, PowerPC, RISC-V, ARC, Nios-II, MicroBlaze ISA용으로 170개 이상의 프로세서 베리에이션에 ISS를 제공합니다.