프로세스란?
프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 종종 스케줄링의 대상이 되는
작업(task)이라는 용어와 거의 같은 의미로 쓰인다. 여러 개의 프로세서를 사용하는 것을 멀티프로세싱 이라고 하며 같은 시간에 여러 의프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다. 프로세스 관리는 운영 체제의 중요한 부분이 되었다.
- 위키백과
프로세스의 메모리 영역
프로세스는 생성시에 커널영역에 PCB가 생성된다.
PCB는 쉽게 생각해서 프로세스가 생성되었을때의 정보를 저장해 놓은 장소이다.
이때 사실 커널도 일종의 프로그램으로 볼 수 있는데, 이는 중요하여 아예 따로 메모리 관리를 한다.
따라서 Application / Kernel은 따로 봐도 일단은 무방하다.
여기서 눈여겨 봐야할 부분은 HEAP 부분이다
여기는 개발자가 직접 할당할 수 있는 공간이다.
운영체제를 공부한 사람이라면 위 그림으로 충분히 이해가 갈 것이다.
이때 전 게시물에서 파이썬과 자바의 속도차를 다시 생각해보자
이에서 변수 할당으로 인한 속도 차이가 나타난다고 이야기를 하였다.
이것과 묶어서 찾아보았다.
JAVA 에서 메모리 관리
stack 영역과 heap 영역으로 나누어진다.
stack은 정적으로 할당된 메모리 영역이다.
stack에서는 Primitive 타입 (boolean, char, short, int, long, float, double) 의 데이터가 값이랑 같이 할당이 된다.
또 Heap 영역에 생성된 Object 타입의 데이터의 참조 값이 할당 된다.
heap은 동적으로 할당된 메모리 영역이다.
heap에서는 모든 object 타입의 데이터가 할당 된다.
heap에 할당된 위치주소를 stack에서 가지고 있다.
JAVA : Garbage Collector
위 같은 자바의 메모리 관리를 해주는 것이다.
해당 역할은 동적으로 할당된 ( heap ) 의 영역에서 사용하지 않는 영역을 GC가 탐지해서 해지한다.
Python의 메모리 관리
파이썬도 stack 과 heap의 역할이 같다.
단, 인터프리터 언어로써 runtime에 heap의 영역이 할당된다.
그리고 전 포스트에서 말했듯 파이썬도 컴파일을 한다.
이때 컴파일하면, 데이터 영역 + 스택영역이 결정된다.
결론
파이썬의 장점이 여기서 나타난다. java는 GC를 이용하여 동적 메모리를 관리를 해주어야 한다 (메모리 누수 방지). 파이썬은 따로 관리가 필요없이 runtime에 신경쓰면 된다는 것이다.
프로세스 상태
https://itwiki.kr/w/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EC%83%81%ED%83%9C
IT위키
IT에 관한 모든 지식. 함께 만들어가는 깨끗한 위키
itwiki.kr
스레드
스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드 (multithrea)라고 한다.
- 위키 백과
스레드 vs 프로세스
공통점 : 멀티 프로세스와 멀티 스레드는 여러 흐름이 함께 진행된다
차이점: 멀티 프로세스에서 각 프로세스는 독립적으로 실행 + 별개의 메모리 차지 그러나 스레드는 메모리 ( 코드, 데이터, 힙, 파일 ) 공유
따로가지는 자원 : 레지스터 ,스택 , 프로그램 카운터
출처
https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4
프로세스 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전.
ko.wikipedia.org
https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)
스레드 (컴퓨팅) - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 두 개의 스레드를 실행하고 있는 하나의 프로세스. 스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으
ko.wikipedia.org
'TIL' 카테고리의 다른 글
[운영체제 14~15강] 프로세스 메모리 할당 그리고 파일 상태 (2) | 2022.09.20 |
---|---|
[운영체제 11장] CPU 스케쥴링 (0) | 2022.09.18 |
[운영체제 1~2장] 파이썬과 자바가 속도차이가 나는 이유 (0) | 2022.09.15 |
[Docker] 개발중인 Django Postgresql 프로젝트에 Dockerfile 생성 및 docker-compose 적용하기 (0) | 2022.08.25 |
[Docker] 실습 :: 이미지 생성 (0) | 2022.08.19 |