인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

한지찬님의 프로필 이미지

작성한 질문수

그림으로 쉽게 배우는 운영체제

프로그램과 프로세스

프로그램과 프로세스 강의를 듣던중 질문입니다!

해결된 질문

작성

·

139

·

수정됨

1

프로그램이 있고, 프로그램이 메모리에 올라간것을 프로세스라고 하는 것을 배웠습니다.

 

그런데, 프로세스를 설명해주실때

Code, Data, Heap, Stack을 설명 해주셨고, c언어 컴파일 예제를 보여주시면서 test.exe가 생성되는 과정을 설명해주셨습니다.

 

그런데 제가 좀 헷갈리는게 자바 실행파일은 어떻게 설명할 수 있을까요?

자바는 Code, Data, Heap, Stack이 아니라, method영역이라던지 다른 영역이 있는 것으로 알고있는데, 자바로 만든 프로그램도 code, data, heap, stack을 가지나요?? 그러면 method 영역이라던지 이건 어떻게 되는걸까요....

 

자바로 만든 .exe 실행파일과 c언어로 만든 .exe 실행 파일은 메모리 구조가 다른건가요???

 

강의 설명은 c언어일때만 성립하는 것인가요..?

답변 2

1

감자님의 프로필 이미지
감자
지식공유자

안녕하세요 한지찬님!

자바 실행파일은 JVM(Java Virtual Machine) 위에서 실행됩니다.
JVM은 메모리를 자동으로 관리해주고 하나의 프로그램을 작성하면 여러 운영체제에서 실행해주는 등 사용자 편의성이 높은 프로그램입니다.
JVM은 운영체제와 사용자 사이에 위치해 있습니다.
C/C++로 작성된 JVM도 운영체제 위에서 동작하기 때문에 Code, Data, Stack, Heap영역을 사용해 동작합니다.

JVM은 Runtime Data Area라는 것을 Method Area, Heap, Stack, PC Register, Native Method Stack로 총 5개로 메모리 영역을 나눴는데요.
이 부분도 결국 OS의 Code, Data, Stack, Heap 영역 중 한 곳에 저장될 겁니다.
만약 Runtime Data Area의 어떤 정보가 운영체제의 Code, Data, Stack, Heap 영역에 저장되는지 공부해보면 더 JVM에 대한 더 많은 공부가 될 것 같습니다.

제가 간단히 알아본 내용으로 JVM의 Method Area 다음과 같습니다.(오라클 문서 참고)

The Java Virtual Machine has a method area that is shared among all Java Virtual Machine threads. The method area is analogous to the storage area for compiled code of a conventional language or analogous to the "text" segment in an operating system process. It stores per-class structures such as the run-time constant pool, field and method data, and the code for methods and constructors, including the special methods (§2.9) used in class and instance initialization and interface initialization.

The method area is created on virtual machine start-up. Although the method area is logically part of the heap, simple implementations may choose not to either garbage collect or compact it. This specification does not mandate the location of the method area or the policies used to manage compiled code. The method area may be of a fixed size or may be expanded as required by the computation and may be contracted if a larger method area becomes unnecessary. The memory for the method area does not need to be contiguous.

JVM의 Method Area는 운영체제의 텍스트 세그먼트(코드 영역)과 비슷한 역할을 한다고 합니다.
그리고 Method Area는 가상 머신 시 시작하고 논리적으로 힙의 일부라고 합니다.
이 내용으로 보아 OS의 힙 영역을 사용해 Method Area라는 영역을 만들었지 않나 싶습니다.

궁금증이 해결되셨나요?😊

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 한지찬님!

자바 실행 파일에 대한 질문을 주셨군요. 자바 프로그램과 관련하여 프로그램과 프로세스의 개념은 동일합니다. 아래의 링크에서 유사한 질문들에 대한 답변을 참고하실 수 있습니다:

  1. 과거 방식에서 메모리에 프로세스를 올리는 방법

이 게시물에서는 메모리에 프로세스를 올려서 CPU로 처리하는 과정을 자세히 설명하고 있습니다. 자바나 다른 언어에서도 메모리 관리 방식은 비슷하게 적용됩니다.

  1. PCB 및 프로세스 상태

여기에서는 프로세스의 상태와 관련된 내용을 다루고 있으며, 프로세스의 구조 및 상태에 대한 답변이 포함되어 있습니다. 자바에서도 프로세스 상태와 PCB 관련 개념은 동일하게 적용됩니다.

자바 프로그램의 메모리 구조는 다음과 같이 설명할 수 있습니다:

  • Method 영역: 자바 프로그램의 클래스들이 로드되고, 메서드들이 저장되는 영역으로, C언어의 Code 영역과 비슷한 역할을 합니다.

  • Heap 영역: C언어에서의 Heap 영역과 마찬가지로 동적 메모리 할당이 이루어지는 공간입니다.

  • Stack 영역: 각 스레드의 호출 스택이 저장되는 영역으로, C언어의 스택과 동일한 역할을 합니다.

자바와 C언어 실행 파일의 메모리 구조는 비슷하지만, 자바는 JVM(Java Virtual Machine)을 통해 실행되기 때문에 아키텍처나 최적화의 차이가 있을 수 있습니다. 하지만 프로세스가 운영체제에서 어떻게 관리되는지는 큰 틀에서 동일합니다.

추가로, 자바 프로그램은 bytecode로 컴파일되고, JVM이 이를 해석하여 실행하기 때문에 .exe 파일이 아닌 .class 파일로 존재합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.