프로세스란?


1. 정의

작업 끝내기는 실행중인 프로그램, 즉 프로세스를 끝내는 것

  • 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
  • 운영체제로부터 시스템 자원을 할당받은작업의 단위
    • 시스템 자원의 예:
      • CPU 시간
      • 운영되기 위해 필요한 주소 공간
      • Code, Data, Stack, Heap의 구조로 되어있는 독립된 메모리 영역

2. 특징

  • 각 프로세스는 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
  • 각 프로세스는 최소 1개 이상의 스레드(메인 스레드)를 가지고 있다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다
  • 다른 프로세스 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다.
  • ex) 파이프, 파일, 소켓 등을 이용한 통신 방법

3. 프로세스의 한계

과거에는 프로그램을 실행할 때, 하나의 프로세스만을 사용해서 이용했다.

하지만 기술이 발전되고, 프로그램이 복잡해지면서 프로세스 작업 하나만을 사용해서 실행하기에는 한계가 있었다.

이러한 한계를 해결하기 위해 스레드가 탄생하였다.

스레드란?


 

1. 정의

크롬 브라우저가 실행되면 프로세스 하나가 생성되고, 우리는 파일을 다운 받으며 온라인 쇼핑을 하면서 게임을 한다.

  • 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위
  • 일반적으로 하나의 프로그램은 하나 이상의 프로세스를 가지고, 하나의 프로세스는 하나 이상의 스레드를 갖는다.
  • => 프로세스를 생성하면 기본적으로 하나의 main 스레드가 생성된다. 2개 3개의 스레드는 개발자가 직접 프로그래밍하여 위치시켜줘야 한다.
  •  

2. 특징

  • 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
  • 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
  • 같은 프로세스 안에서 같은 힙 공간을 공유한다.
  • 각 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
  • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(silblinng thread)도 그 변경 결과를 즉시 볼 수 있다.
자바 스레드(Java Thread) 란?
1. 일반 스레드와 거의 차이가 없으며, JVM가 운영체제의 역할을 한다.
2. 자바에는 프로세스가 존재하지 않고 스레드만 존재하며, 자바 스레드는 JVM에 의해 스케줄되는 실행 단위 코드 블록이다.
3. 자바에서 스레드 스케줄링은 전적으로 JVM에 의해 이루어진다.
4. 아래와 같은 스레드와 관련된 많은 정보들도 JVM이 관리한다.
5. 스레드가 몇 개 존재하는지, 스레드로 실행되는 프로그램 코드의 메모리 위치는 어디인지, 스레드의 상태는 무엇인지, 스레드 우선순위는 얼마인지.
즉, 개발자는 자바 스레드로 작동할 스레드 코드를 작성하고, 스레드 코드가 생명을 가지고 실행을 시작하도록 JVM에 요청하는 일 뿐이다.

 

프로세스 & 스레드의 메모리


프로세스의 자원 구조

: 프로그램이 실행되어 프로세스가 만들어지면 4가지 메모리 영역으로 구성되어 할당받게 된다.

스택 영역과 힙 영역은 프로세스가 실행되는 동안 크기가 늘었다 줄었다 하는 동적영역, 텍스트 영역과 데이터 영역은 선언할 때 크기가 결정되는 정적 영역.

@ 스택 영역(Stack)

- 지역 변수 및 호출한 함수가 종료되면 되돌아올 임시적인 자료를 저장하는 독립적 공간

- Stack은 함수의 호출과 함께 할당되며, 호출이 완료되면 소멸한다.

- 만일 stack 영역을 초과하면 stack overflew 에러가 발생한다.

 

@ 힙 영역 (Heap)

- 생성자, 인스턴스와 같은 동적으로 할당되는 데이터들을 위해 존재하는 공간

- 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.

 

@ 데이터 영역 (Data)

- 코드가 실행되면서 사용하는 전역 변수나 각종 데이터들이 모여있는 공간

- 데이터 영역은 .data, .rodata, .bss 영역으로 세분화 된다.

    - .data : 전역 변수 or static 변수 등 프로그램이 사용하는 데이터를 저장

    - .BSS : 초기값 없는 전역 변수, statkc 변수가 저장

    - .rodata : const 같은 상수 키워드 선언된 변수나 문자열 상수

가 저장

 

@ 코드 영역(Code / Text)

- 프로그래머가 작성한 함수들의 코드가 CPU가 해석 가능한 기계어 형태로 저장되어 있다.

 

 

+ Recent posts