본문 바로가기

이것저것 스터디📚/CS 스터디

프로세스와 스레드

프로세스(Process)

- 프로세스란 실행중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다.

- 운영체제로부터 주소 공간, 파일, 메모리 등을 할당 받는다.

- 프로세스 스택 : 함수의 매개변수, 복귀 주소와 로컬 변수 같은 임시자료를 갖는다.

- 데이터 섹션 : 전역변수들을 수록

- 프로세스는 실행중에 동적으로 할당되는 메모리인 힙을 포함한다.

 

PCB(Process Control Block)

- PCB란 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체이며 프로세스 상태 관리와 문맥교환(Context Switcing)을 위해 필요하다.

- 프로세스는 프로세서에 의해 수행되는 프로그램 단위로 현재 실행 중이거나 곧 실행 가능한 PCB을 가진 프로그램이다.

- 컴퓨터가 동시에 여러가지 일을 수행할 수 있다는 것은 프로세스들이 교체되어 수행되고 있다는 뜻이다.

- 그렇다면, 이전 작업에 대한 내용을 기억하는 것이 필요한데, 이때 프로스세 단위로 정보를 저장해주는 BLOCK이 PCB이다.

- PCB에는 PID, 상태, 포인터, Register save area, Priority, 할당된 자원 정보, Account, 입출력 상태 정보가 저장된다.

 

* 문맥 교환(Context Switching)

- 수행중인 프로세스를 변경할 때 레지스터에 프로세스의 정보가 바뀌는 것이다.

- 즉, CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스 정보를 PCB에서 읽어 레지스터에 적재하는 과정을 말한다.

 

* 문맥 교환의 Overhead?

- Overhead : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리 등을 말한다.

- 기존에 실행중인 프로세스가 I/O(입출력) 이벤트가 발생하여 디스크에서 명령을 수행중일때, 이를 기다리는 것보다 다른 프로세스를 수행하는게 CPU 입장에서는 이익이기 때문에, overhead가 발생하더라도 문맥교환이 발생한다.

 

쓰레드(Thread)

- 프로세스의 실행 단위이다.

- 하나의 프로세스 안에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원을 공유한다.

- 스레드는 독립적인 작업을 수행해야 하기 때문에 독립적인 스택과 PC 레지스터 값을 갖고 있다. 대신 멀티 스레드는 OS 자원이나 코드 데이터, heap 데이터들은 공유하고 있다.

- 스레드가 독립적인 스택을 갖는 이유는  스레드가 독립적인 실행 흐름을 갖기 위해서이다. 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 의미이고, 독립적인 실행 흐름을 갖는다는 의미이다.

- 스레드가 독립적인 PC(Program Counter) 레지스터를 갖는 이유는 스레드는 CPU를 할당받았다가 스케줄러에 의해 다시 선점 당하기 때문에 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행했는지 기억할 필요가 있기 때문이다.

- 예를들어, 메신저 프로그램의 경우 스레드 없이 프로세스로만 동작한다고 했을 때, 하나의 프로세스를 사용할 때는 내가 메시지를 입력하고 있을 때는 상대방이 보낸 메시지를 확인할 수 없는 문제가 있다.

- 만약 두 개의 프로세스(입력 프로세스, 메시지 수신 프로세스)를 사용한다면 이를 해결할 수 있지만, 프로세스를 하나 추가 생성해야하고 프로세스 간 통신이 필요하는 등 오버헤드가 많은 비효율적 구조일 수가 있다.

- 스레드를 사용하면 프로세스 간의 통신이 필요하지 않기 때문에 PCB도 하나면 되고 메모리 공간도 하나이기 때문에 IPC 통신도 필요하지 않은 이점이 있다.


* 정리

- 프로세스는 현재 실행 중인 프로그램을 나타냅니다. 이 프로그램은 디스크로부터 메모리에 적재되고 CPU의 할당을 받아 실행됩니다. 프로세스 간에 전환을 할 때, 현재 수행 중인 프로세스의 정보를 저장하고 다음에 실행할 프로세스의 정보를 로드하는데, 이러한 작업을 문맥 교환이라고 합니다. 이때 프로세스 정보를 저장하고 관리하기 위해 PCB(Process Control Block)가 사용됩니다.

스레드는 프로세스의 실행 단위를 나타냅니다. 하나의 프로세스 안에서 동작하는 여러 실행의 흐름입니다. 스레드는 프로세스 내의 주소 공간을 공유하면서 실행되며, 독립적인 스택과 레지스터를 갖고 있어 각 스레드는 자체적인 실행 흐름을 가집니다. 이로 인해 스레드는 서로 독립적으로 실행될 수 있습니다.

스레드를 사용하면 여러 개의 프로세스를 사용할 때 발생하는 PCB 오버헤드나 프로세스 간 통신의 복잡성을 줄일 수 있습니다. 스레드는 경량화되어 있어서 생성 및 제거가 빠르고, 프로세스 간에 자원을 공유하기 쉽습니다. 따라서 멀티스레딩을 통해 프로그램의 병렬 처리를 효율적으로 구현할 수 있습니다.


학습 단계로 잘못된 정보가 있을 수 있습니다. 잘못된 부분에 대해 알려주시면 정정하도록 하겠습니다

참고 : https://jhnyang.tistory.com/368?category=815411

https://escapefromcoding.tistory.com/724https://k39335.tistory.com/30

'이것저것 스터디📚 > CS 스터디' 카테고리의 다른 글

쿠키와 세션  (0) 2023.10.24
교착상태  (1) 2023.10.23
HTTP 대신 HTTPS를 사용해야하는 이유  (0) 2023.10.16
API GATEWAY  (1) 2023.10.16
REST API  (1) 2023.10.16