본문 바로가기
{ Computer Science }/Operating System

[주제 별 탐구] 프로세스와 스레드

by ggyongi 2022. 2. 21.
반응형

[프로세스의 의미]

프로세스가 가지는 의미는 다양하지만 일반적인 프로세스의 정의는 '실행중인 프로그램'이다. 

프로그램은 컴파일한 코드와 초기화 전역변수, 문자열과 문자열 상수 등 정적인 데이터를 포함하는 정적 개체다.

디스크에 있던 프로그램이 메모리에 적재되어 운영체제의 제어를 받는 상태가 되면 프로세스가 되는 것이다.

이는 자신만의 메모리 공간이 있다는 뜻이 된다.

프로세스는 프로그램 카운터나 레지스터처럼 현재 어떤 자원을 사용하는지 관련 정보가 들어 있는 동적 개체이다.

 

 

[프로세스의 일반적인 메모리 구조]

- 스택

데이터를 일시적으로 저장하는 영역. 지역 변수에 사용하고, 변수가 범위 밖으로 이동하면 공간을 해제한다. 호출한 함수의 반환 주소, 반환 값, 매개변수 등에 사용하고, 함수를 호출할 수록 커지고 반환하면 줄어든다. 

힙과 인접한 방향으로 점점 커져 스택 포인터와 힙 포인터를 만나면 메모리가 소진되었다는 의미이다.

높은 주소에서 낮은 주소 순서로 할당이 되기때문에 후입선출이다.

 

- 힙

힙은 코드영역과는 별도로 유지되는 자유 영역이다. 동적으로 메모리를 할당하려고 프로그램 실행 중 시스템 호출을 사용했다가 해제하는 방법으로 활용한다. 프로세스의 공유라이브러리와 동적으로 적재된 모듈이 서로 공유하는데, 동적 메모리 할당이 발생하면 위쪽으로 커진다. 힙은 메모리의 낮은 주소에서 높은 주소 순서로 할당이 되기 때문에 선입선출이다.

* 동적 할당이 필요한 이유 : 참고글 https://dsnight.tistory.com/50

 

- 데이터

데이터는 프로그램의 가상 주소 공간이다. 전역변수나 정적변수를 저장하거나 할당하고 실행하기 전에 초기화한다. 그런데 변수값은 실행 시간에 변경할 수 있어 읽기 전용 영역은 아니지만 읽기 전용 영역이나 읽기와 쓰기 영역으로 초기화할 수 있다. 정적 변수는 0으로 초기화하거나 초기화하지 않아도 된다. 초기화 하지 않은 데이터는 데이터 영역의 끝에서 시작한다.

 

- 코드

실행 명령을 포함하는 메모리이거나 목적 파일에 있는 프로그램 영역이다. 프로그램을 시작할 때 프로세서가 디스크에서 읽어 실행하는 컴파일한 프로그램을 저장한다. 프로세스로 변경할 수 없고, 읽기 전용이다. 

 

[스레드]

프로세스의 실행 단위이다. 스레드는 스택, 스레드 아이디, 프로그램 카운터, 레지스터 집합로 구성된다. 같은 프로세스의 다른 스레드와는 코드, 전역 데이터, 힙, 운영체제 자원 등을 공유한다. 스레드 마다 스택을 별도로 두는 이유는 스택은 함수 호출 시 인자, 되돌아갈 주소값, 함수 내 변수 등을 저장하기 위해 사용하는 메모리 공간이기 때문이다. 각 스레드마다 독립적인 함수 호출을 위해서는 별도로 스택 공간을 두어야 한다. 또한 각각의 실행 위치를 알려주기 위해 PC를, 수행중인 값을 임시적으로 저장하기 위한 레지스터 집합 공간을 별도로 가져야한다.

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글