프로세스
프로그램이란?
- 어떤 작업을 위해 실행할 수 있는 파일
프로세스란
- 컴퓨터에서 연속적으로 실행되고 있는 프로그램 또는 활성화 된 프로그램.
- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 객체)
- 운영체제로부터 시스템 자원을 할당받는 작업의 단위.
- 동적인 개념으로 실행된 프로그램을 의미.
※ 할당받은 시스템 자원이란?
- 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 |
댓글