해결된 질문
작성
·
53
·
수정됨
0
안녕하세요!
[Java의 특징과 JVM]강의에서 4:10초 정도에 시작하는
C,C++로 만든 어플리케이션의 특징 부분을 설명해 주시는 부분에서 질문이 있어서 글 남깁니다. (C/C++에 대해서는 깊게 공부한 적이 없습니다...)
1번 질문
C,C++로 만든 프로그램을 실행하면 '프로세스'가 생성되고
'프로세스'안에 특정 CPU가 실행 가능한 '기계어'가 포함되어있다고 하셨는데 앞선 강의에서 보여주셨던 '특정 CPU가 바로 실행할 수 있는 16진수로 된 기계어'를 말씀하시는게 맞나요?
2번 질문
자바로 만든 어플리케이션A,B,C가 각각 있고 3개 다 실행했을 때 프로세스A, 프로세스B, 프로세스C가 각각 만들어져서 실행되는걸로 알고 있습니다.
User mode process JVM 내용에서 "유저모드 어플리케이션 관점에서 프로세스다"라는 말씀이 JVM도 어쨌든 하나의 프로그램을 실행시킨 프로세스여서 그런건가요? 아니면 OS의 통제를 받아서 그런건가요?
3번 질문
스레드에 관해서 다루지 않는다고 하셨지만.. PC Register의 정확한 역할이 궁금해서 질문 남깁니다!
제가 알기론 실제 CPU에는 여러가지 레지스터들이 있고 그중에 PC Register는 실행 지점(다음 명령어가 담겨있는 메모리 주소)만 들고 있는 역할로 알고 있는데 런타임 데이터 영역에 있는 PC Register도 각 스레드별 실행 지점만 가지고 있는게 맞나요? 아니면 실행지점 + 명령어도 가지고 있는건가요?
답변 2
0
연말연시 Java와 함께 보내고 계시는 군요. 학습열정에 박수를 보내드립니다. 😄
기계어는 전기 신호의 On, Off 조합이며 보통 On은 1 Off는 0으로 표시합니다. 그런에 이렇게 쓰고 보니 2진수가 되는 것이고 이 2진수를 그나마 보기 쉽게 변환한 것이 16진수 입니다. 그러니 엄밀히 말해 기계어가 16진수인 것이 아니라 기계어를 16진수로 표기한 것입니다. 아무튼 이 기계어는 CPU가 인식하고 실행 할 수 있는 명령어가 맞습니다. 그리고 그 명령들이 들어있는 파일이 일반적으로 .exe 파일 입니다.
네, 맞습니다. JVM도 하나의 사용자 모드 응용 프로그램입니다. Word나 Excel 혹은 Chrome 브라우저 같은 것이지요.
CPU에서 실행 할 명령어의 주소를 저장하고 있는 레지스터는 EIP 레지스터 입니다. 딱 이 역할을 하는 것이 JVM에서는 PC register라고 알고 계시면 됩니다. 여기서 PC는 Program counter입니다. 실제 CPU의 EIP의 역할이 바로 Program counter 입니다. 명령어 자체를 가지고 있는 것이 아니라 명령어가 저장된 메모리에 대한 위치정보(보통 주소)가 저장되는 것입니다.
참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다.
insub2004님, 질문에 대한 답변입니다.
1번 질문:
네, C/C++로 만든 프로그램의 경우, 컴파일러에 의해 소스 코드가 특정 CPU가 실행할 수 있는 ‘기계어’로 변환됩니다. 이때 생성되는 파일은 보통 바이너리 파일이며, 이 파일은 CPU가 직접 실행할 수 있는 16진수로 된 기계어를 포함하고 있습니다.
2번 질문:
자바로 만든 애플리케이션 A, B, C 각각에 대해 별도의 프로세스가 생성되는 것은 맞습니다. JVM(Java Virtual Machine)도 하나의 프로세스입니다. 유저모드 어플리케이션 관점에서 JVM이 프로세스라고 설명하는 것은 JVM 자체가 운영체제 위에서 하나의 프로그램으로 실행되고, JVM 내에서 자바 애플리케이션이 동작하기 때문입니다.
3번 질문:
CPU의 PC(Program Counter) Register는 다음에 실행할 명령어의 메모리 주소를 가지고 있습니다. 자바 런타임 데이터 영역의 PC Register 역시 각 스레드별로 자신의 실행 지점을 추적하며, 다음에 실행할 명령어의 주소만 저장하고 있습니다. 명령어 자체는 가지고 있지 않고, 명령어는 해당 주소를 통해 메모리에서 불러옵니다.
추가적으로, 이미지가 포함된 부분에 대해서는 명시된 URL을 참조 부탁드립니다:
- Spring Boot Reference Documentation
질문 있으시면 언제든지 알려주세요!