2011-02-24 1 views
3

일반 CPU (예 : Android 디바이스)는 레지스터 기반 시스템입니다. Java 가상 머신은 스택 기반 머신입니다. 그러나 스택 기반 머신은 레지스터 기반 머신에 의존하여 작동합니까? OS가 아니기 때문에 스택 기반 머신을 외롭게 실행할 수 없습니까? JVM을 제외하고 스택 기반 머신 예제가 있습니까? 일부는 1 피연산자, 2 피연산자를 말합니다. 왜 이걸 필요하니?스택 기반 시스템은 레지스터 기반 시스템에 종속적입니까?

+0

이 질문은 프로그래머에게 속해야한다고 생각합니다 .stackexchange.com 매우 좋지만 그것에 흥미가 있습니다. –

답변

7

JVM은 어디에서나 레지스터의 존재를 언급하지 않습니다. 그 관점에서 볼 때, 메모리는 스레드 별 스택, 메소드 영역, 런타임 상수 풀 등과 같이 단지 몇 군데에만 존재합니다. 즉, JVM을 준수하는 물리적 장치를 실제로 구현하려는 경우, d는 특정 바이트 코드를 실행할 때 생성 된 임시 값 중 일부를 보유하거나 측면에 여분의 스크래치 정보를 유지하기위한 레지스터가 거의 확실합니다. 예를 들어, multianewarray 명령어를 찾고 레지스터없이 구현할 수 있는지 확인하십시오. :-)

요즘 실제 CPU에서 볼 수있는 한 가지 점은 프로그래머가 사용할 수있는 전용 레지스터 세트가 있지만 대부분의 CPU는 다양한 용도로 내부적으로 많이 사용되는 레지스터를 가지고 있다는 것입니다. 예를 들어, 대부분의 MIPS 칩에는 파이프 라이닝에 사용되는 수많은 레지스터가 있습니다. 그들은 이전 명령의 제어 비트와 같은 것을 유지합니다. x86이 다른 것이라면 나는 부 풀릴 것이다.

레지스터 기반 시스템 대 스택 기반 시스템 작동 방식을 실제로 정의하는 것은 레지스터가 아닙니다. 대부분의 아키텍처에서 내부 용으로 사용되는 O (1) 레지스터가 있습니다. JVM에도 이러한 기능이 있습니다. 각 메소드에는 원래 함수의 매개 변수를 보유하고있는 "지역 변수 배열"이 있지만 필요할 경우 스크래치 공간으로 사용할 수도 있습니다. 스택 머신이 다른 머신과 구별되는 스택 머신에 대해 더 중요한 부분은 확장 가능한 메모리가 작동하는 방식입니다. 대부분의 컴퓨터에서 메모리는 랜덤 액세스 방식으로 언제든지 원하는 위치에서 읽을 수 있습니다. 즉, n 개의 메모리 위치에서 언제든지 O (n) 메모리를 읽을 수 있습니다. 스택 기반 컴퓨터에서는 스택의 상위 몇 개 지점 만 액세스 할 수 있으므로 한 번에 O (1) 개의 메모리 위치 만 읽을 수 있습니다.

이론 상으로는 JVM이 전체 가상 머신을 나타내므로 OS를 설치하지 않고 JVM을 부팅 한 컴퓨터를 부팅 할 수 있습니다 (또는 JVM이 OS가 될 수 있으며 " "그냥 Java 바이트 코드 및 클래스 파일이 될 것이다).

다른 스택 기반 언어가 있는데 그 중 첫 번째 언어는 Forth입니다. 명시 적으로 스택 기반 언어이기 때문에 언급합니다. 당신이하는 모든 일은 피연산자 스택을 조작하는 관점에서 표현됩니다. 원래의 질문과 관련하여 멋진 점은, Forth는 애호가들 사이에서 매우 인기가 있었는데, 임베디드 장치로 쉽게 포팅 할 수 있기 때문입니다. Forth 인터프리터를 작동 시키려면 정말 강력한 OS가 필요하지 않습니다. 명령 인터프리터가 필요합니다. 현재는 인기가 있지만 요즘은 정말 멋진 언어입니다.

널리 사용되는 또 다른 스택 기반 언어는 PostScript입니다.이 스택 언어는 PDF에 대한 많은 부분을 잃어 버렸지 만 다양한 플랫폼에서 확장 가능한 그래픽을 렌더링해야하는 환경에서 광범위하게 사용됩니다. 기술적으로는 Turing-complete 프로그래밍 언어입니다 만, 그런 식으로 사용하는 사람은 거의 없습니다.

+0

그래서 우리는 레지스터없이 JVM을 실행할 수 있습니다. 맞습니까? –

+1

@Mikhail Naimy- 이론적으로 JVM에서는 어디서나 "등록"이라는 용어를 언급하지 않으므로 실제로는 없습니다. JVM을 제대로 실행하려면 하드웨어 로직을 구현하는 레지스터가 있어야합니다. – templatetypedef

+0

좋은 답변입니다. 나는 O (1)을 "상수"와 "O (n)"을 "모두 사용 가능"이라고 읽는다. 그게 맞습니까? –

6

이미 답변을 선택했음을 알고 있지만 전체 "기기"을 처리하고 싶습니다.

사실 대부분의 실제 CPU는 실제로 등록 기계이지만 실제로는 스택 컴퓨터가 실제 CPU입니다. 예를 들어 Burroughs' B5000- and B6000-series machines 또는 우주 비행에 사용 된 RTX2000-series 칩 (원래 게이트 어레이 로직에서 Chuck Moore가 구현했으며 나중에 상용화 됨).UCSD Pascalp-Machine은 다양한 구현 자에 의해 하드웨어에서 곧바로 구현되었습니다.

계산 강도면에서 레지스터 및 스택 머신은 대략 동일합니다. (물론 레지스터 또는 스택 머신의 정확한 모델에 따라 달라집니다.) 스택 머신은 단순성, 작은 크기 및 확장 성의 장점을 가지고 있습니다. 등록 기계는 더 빠른 경향이 있습니다. 레지스터 머신은 스택 머신을 에뮬레이트 할 수 있습니다 (x86 아키텍쳐의 BP와 SP 레지스터는 결국입니다!) 스택 머신은 필요할 경우 등록 머신을 모방 할 수 있습니다.


내가 거의 깊이 스택 컴퓨터에 대해 다루는 book 당신을 가리 키도록 잊었다

을 추가 편집. Koopman은 스택 컴퓨터를위한 약간의 fanboi이고 그들이 "새로운 물결"이었다는 그의 예측은 잘못되었지만 재미있는 읽을 거리입니다.

+0

HOw 스택 머신이 레지스터없이 perfeclty를 실행 중입니까? –

+1

같은 방식으로 레지스터 머신이 실행되며, 스택을 밀어 내고 튕겨 내고 스택의 맨 위 엔트리/엔트리에서 연산을 수행하는 opcode 만 있습니다. 내가 링크 된 책을 읽으십시오. –

+0

+1, 내가 게시 한 질문에 답변하기 위해 게시물의 정보를 사용했습니다. http://stackoverflow.com/questions/14603264/virtual-machine-and-none-virtual-machine-stack-and-trace/14608096 # 14608096. 제 질문에 답해 주시면 기꺼이 크레딧을드립니다. – w0051977