CS/OperatingSystem

프로세스와 스레드

whyWhale 2021. 4. 16.

 

프로세스


프로그램이란?

  • 어떤 작업을 위해 실행할 수 있는 파일

프로세스란

  • 컴퓨터에서 연속적으로 실행되고 있는 프로그램 또는 활성화 된 프로그램.
  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 객체)
  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위.
  • 동적인 개념으로 실행된 프로그램을 의미.

※ 할당받은 시스템 자원이란?

  • CPU 점유시간
  • 메모리에 실제적으로 적재된 주소 공간
  • 메모리영역들(Data,Code,Heap,Stack).

 

운영체제로 부터 자원을 할당받은 프로세스들.

PCB(process Control Bolck)

  •  프로세스에 대한 중요한 정보들을 저장하고 운영체제의 자료구조이다.
  • 운영체제들 프로세스들을 관리하기위해 고유한 PCB를 할당한다.
  • PCB를 쓰는 이유는 CPU를 할당받아 작업을 하고 중간에 프로세스 전환이 발생하면 진행하던 작업을 저장하고 CPU를 반환하는데, 이때까지의 진행상황을 모두 PCB에 저장한다.
  • 그리고 다시 CPU를 할당받을 때 , PCB 안에 저장되있는 정보를 확인하고 진행 시점부터 다시 작업을 실행한다.
  • PCB정보
    • 프로세스 식별자 (PID) :
    • 프로세스 상태 : new , ready , runing. wating, terminated
    • 프로그램 카운터 : 다음 실행할 명령어의 주소
    • CPU 레지스터
    • CPU 스케쥴링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
    • 메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블등 과 같은 정보들.
    • 입출력 상태 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록.
    • 어카운팅 정보 : 사용된 CPU 시간, 시간제한 등..

 

 

 

특징

  • 프로세스는 각각의 독립된 주소공간을 갖고, 독립된 메모리 영역을 가지고 있다.
  • 각 프로세스는 최소 1개의 스레드를 갖는다.(메인 스레드)
  • 다른 프로세스의 변수 또는 자료구조에 접근이 불가하다.
  • 만약 다른 프로세스로 접근하려면 IPC(Inter-process-communication)을 사용한다.
    • ex. pipe, socket, file ...

 

 

스레드


스레드란

  • 프로세스 내에서 실행되는 여러 흐름의 단위.
  • 프로세스가 할당받은 자원을 이용하는 실행의 단위.

 

 

각 프로세스의 내부 구조

특징

  • 스레드는 독립된 Stack 영역을 갖고 나머지 Code, Data, Heap 영역은 공유한다.
  • 스레드는 stack을 제외한 프로세스 내의 주소 공간이나 자원들을 공유하면서 실행한다.
  • 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽기,쓰기가 가능하다.
  • 한 스레드가 프로세스의 자원을 변경하면, 이웃 스레드(sibling Threa)도 그 변경된 결과를 즉시 확인가능하다.

 

 

독립적인 공간을 사용하는 이유   (멀티스레딩을 사용하기 위해)

 

  • 스택
    • 함수 호출 시 전달되는 args , 되돌아가야할 주소 값, 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이기 때문이다.
    • 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이다. 즉 독립적인 실행 흐름이 추가 된 것이다.
    • 스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.

※ 멀테스레딩은 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성,관리의 중복성을 최소화하여 수행 능력을 향상시키는 것이다.

 

 

  • PC Register
    • PC (Program Counter)는 다음 실행할 명령어의 주소값이 들어있는 곳으로 어디까지 진행이 되었는지 확인이 가능하다.
    • 스레드는 CPU를 할당받아 스케줄러에 의해 선점당한다.
    • 각각의 진행 시점은 모두 동일하지 않기 때문에 독립적으로 할당받는 이유이다.
    •  

자바에서의 스레드

 

 

  • JVM이 운영체제 역할을 한다.
  • 자바에서는 프로세스가 존재하지 않고 스레드만 존재하며, 자바 스레드는 JVM에 의해 스케줄되는 실행 단위 코드 블록이다.
  • 자바에서 스레드 스케줄링은 전적으로 JVM에 의해 이루어진다.
    • 스레드가 몇 개 살아있는지
    • 스레도 실행되는 프로그램의 코드 메모리 위치는 어디인지
    • 스레드 상태가 어떠한지
    • 스레드의 우선순위가 어떻게 되는지 등등..
  • 개발자는 스레드 코드를 작성하고, 생명을 가지고 실행을 시작하도록 JVM에게 단순히 요청하는 것 뿐이다.

 

 

 

'CS > OperatingSystem' 카테고리의 다른 글

프로세스 동기화  (0) 2021.04.21
Blocking, Non-Blocking and Async  (0) 2021.04.21
스케줄러 알고리즘  (0) 2021.04.19
스케줄러  (0) 2021.04.17
멀티 스레드, 멀티 프로세스  (0) 2021.04.17

댓글