이전에 공부를 하며 프로세스와 스레드에 대해 대략적으로 프로세스는 '실행해야 될 작업' 스레드는 이러한 '프로세스들을 받아 처리해야 하는 일꾼'과 같은 개념으로 막연히 비유해 생각하고 있었다.
컴퓨터에 관해 공부하면서 이에 대해 명확히 알아야 할 것 같아 해당 개념들을 찾아보고 정리하였다.
1. 프로세스와 스레드 정의
프로세스와 스레드의 사전적 정의는 아래와 같다.
프로세스 | 스레드 |
운영체제로부터 자원을 할당받은 작업의 단위 | 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 |
2. 프로세스의 생성과 메모리 구조
- 프로세스가 실행될 시 메모리 상에 프로세스를 실행하기 위한 자원이 할당된다.
프로세스를 실행하기 위한 메모리 상에 자원은 아래와 같이 크게 4가지 부분으로 구성되게 된다.
1) STACK : 메소드 실행 후 소멸될 지역변수등의 요소가 저장되는 공간
2) HEAP: 객체등이 저장되는 공간
3) DATA : 전역변수 등이 저장되는 공간
4) TEXT : cpu가 실행할 수 있도록 바이트 형태로 된 코드가 저장되는 영역
- 프로세스의 실행 시 상태 전이는 다음과 같이 구분되고 진행되게 된다.
- 생성: 프로세스가 메모리에 올라오고 운영체제로부터 프로세스 제어 블록을 할당받아 실행 준비를 완료한 상태
- 준비: 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태
- 대기: 실행상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때 까지 기다리는 상태
- 실행: 준비 상태에 있는 프로세스중 하나가 CPU를 얻어 실제 작업을 수행하는 상태
- 완료: 실행 상태의 프로세스가 주어진 시간동안 작업을 마친 상태
- 프로세스는 개별로 실행할 경우 원칙적으로 다른 프로세스를 실행할 수 없다. 또한 동일한 프로세스를 새로 실행할 경우에도 모든 자원을 새로 로드해서 이용해야 한다는 점에서 속도 및 자원 사용에 있어 비효율적인 측면을 지닌다.
- 스레드는 프로세스의 작업단위를 나눠서 실행할 수 있도록 도와준다. 각각의 스레드는 프로세스의 공통된 부분이외에 차이를 지니는 부분만을 지닌 채 프로세스를 실행해나간다. 따라서 프로세스가 실행되는 동안 자원을 효율적으로 이용할 수 있으며 처리속도를 높여줄 수 있다.
3. 병렬성과 동시성
- 프로세스를 동시다발적으로 처리하는 방식을 정의하는 점에서 병렬성과 동시성이라는 개념이 등장하게 된다.
1) 병렬성: 여러개의 코어를 이용해 여러개의 프로세스, 스레드를 동시에 실행하는 것을 의미한다.예를 들어 물리적으로 2코어 4스레드라고 하면 각각의 코어에서 2개의 쓰레드를 2개씩 실행시켜 프로세스를 병렬적으로 실행할 수 있다는 것을 의미한다.
2) 동시성: 동시성이란 여러 개의 프로세스를 조금씩 나누어 조금씩 실행하는 것을 의미한다. 이러한 행위를 context switching이라 하며 실제로 동시에 여러 개의 프로세스 실행시켜 처리하는 것은 아니지만 동시다발적으로 여러 프로세스를 처리하는 것 처럼 보이므로 위와 같은 용어를 사용하게 되었다.
위와 같이 동시성 작업인 context switching 작업을 실행할 경우, 작업을 연속적으로 이어 실행하기 위해 실행내역을 저장할 공간이 필요하게 되는데 이를 프로세스의 경우 PCB(Process Control Block) 스레드의 경우 TCB(Thread Control Block)라고 한다.
4. PCB(Process Control Block) / TCB(Thread Control Block)
- PCB는 아래와 같은 구조를 지니며 다음과 같은 정보를 포함한다.
- 포인터: 프로세스가 한 상태에서 다른 상태로 전환될 때 프로세스의 현재 위치를 유지하기 위해 저장되어야 하는 스택 포인터 정보를 저장
- 프로세스 상태: 프로세스의 각 상태를 저장
- 프로세스 번호: 각 프로세스에는 프로세스 ID 또는 PID라는 고유한 ID가 할당되며, 프로세스 식별자를 저장
- 프로그램 카운터: 프로세스에 대해 다음에 실행될 명령어의 주소를 포함하는 카운터를 저장
- 레지스터: PCB의 레지스터를 의미. 프로세스별 레지스터의 현재 값이 PCB에 저장
- 메모리 제한: 운영 체제에서 사용하는 메모리 관리 시스템 에 대한 정보 저장
- 열린 파일 목록: 프로세스와 관련해 열린 파일 목록이 저장
- TCB는 아래와 같은 구조를 지니며 다음과 같은 정보를 포함한다.
- 스레드 ID: 스레드가 생성될 때 운영 체제가 할당하는 고유 식별자 정보를 저장
- 스레드 상태: 스레드가 시스템을 진행하면서 변경되는 스레드 상태 정보를 저장
- CPU 정보: 스레드가 얼마나 진행되었는지, 어떤 데이터가 사용되고 있는지 등 OS가 알아야 할 모든 정보가 저장
- 스레드 우선순위: 스레드의 다른 스레드에 대한 가중치(또는 우선순위)를 저장 (이는 스레드 스케줄러가 READY 대기열에서 다음에 어떤 스레드를 선택해야 할지 결정하는 데 도움이 된다.)
- 스레드 생성을 한 프로세스를 가리키는 포인터 정보를 저장
- 스레드에 의해 생성된 스레드를 가리키는 포인터 정보를 저장
- TCB는 PCB에 비해 공통된 자원을 공유하고 각각의 다른 필요한 정보만을 지니고 있으므로, PCB에 비해 가볍다는 특징을 지닌다.
5. context switching이 일어나는 과정
- PCB에서 context switching은 아래와 같은 단계를 거쳐 진행된다.
1) P1 프로세스에 관한 상태 정보를 PCB1에 저장한다.(Save state into PCB1)
2) PCB1에 P1 프로세스에 대한 정보가 저장되고, P1 프로세스 정보는 ready queue, I/O queue, wating queue 중 하나로 이동시키고 새로 실행할 프로세스 P2를 선택한다.(Idle)
3) PCB2로부터 P2 프로세스 정보를 불러온다.(Reload state from PCB2)
4) P2 프로세스가 CPU에 의해 실행된다.(Executing)
5) P2 프로세스에 대한 정보를 PCB에 업데이트 한다.(Save state into PCB2)
6) 새로운 실행될 프로세스 P1 를 선택하고 PCB1로부터 프로세스 정보를 불러온다.(Reload state from PCB1)
7) P1 프로세스가 CPU에 의해 실행된다.(Executing)
- 참고한 사이트
https://www.geeksforgeeks.org/process-table-and-process-control-block-pcb/
Process Table and Process Control Block (PCB) - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
👩💻 완전히 정복하는 프로세스 vs 스레드 개념
한눈에 이해하는 프로세스 & 스레드 개념 전공 지식 없이 컴퓨터의 프로그램을 이용하는데는 문제 없어 왔지만 소프트웨어를 개발하는 사람으로서 컴퓨터 실행 내부 요소를 따져보게 될때, 아
inpa.tistory.com
https://velog.io/@suyeonme/OS-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4Process
[OS] 프로세스(Process)
프로세스에 대해서 알아보기
velog.io
https://www.javatpoint.com/what-is-the-context-switching-in-the-operating-system
Context Switching in OS (Operating System) - javatpoint
Context Switching in OS (Operating System) with OS Tutorial, Types of OS, Process Management Introduction, Attributes of a Process, CPU Scheduling, FCFS with overhead, FCFS Scheduling etc.
www.javatpoint.com
'BackGround' 카테고리의 다른 글
[네트워크]HTTP, HTTPS 통신과 암호화 방식(대칭키, 비대칭키, 하이브리드) 그리고 SSL (1) | 2024.12.02 |
---|---|
[디자인 패턴] 점층적 생성자 패턴, 자바 빈 패턴, 빌더 패턴 (0) | 2022.09.14 |
[웹 개발] RestController와 Controller의 차이 (0) | 2022.09.14 |
[웹 개발]Docker-내용추가해야함. (0) | 2022.09.02 |
[웹 개발] 버전관리 (0) | 2022.08.30 |