가장 먼저 프로그램과 프로세스 스레드에 대해서 알아보도록 하자
가장 쉽게 이해하기 위해선 .exe 확장자를 가진 파일이라고 생각하면 된다.
그러나 이 파일은 혼자서는 아무런 역할을 할 수 없는데, 실행되기 위해서는 메모리에 올라가야 한다. 폰노이만 구조에서 프로그램이 실행된다는 것은 해당 코드가 메모리에 올라와서 작업이 진행되어야 한다는 의미이다. 즉, 메모리에 올라가기 전 정적 상태인 파일을 프로그램이라고 부른다.
메모리에 올라가기 전 정적인 상태인 파일을 메모리에 올려놓으면 프로세스가 된다.
메모리에 올라간 프로그램은 실행되어 여러 작업을 수행할 수 있다.
프로세스를 메모리에 올려놓는 작업은 운영 체제에 의해 관리된다. 운영체제는 프로그램을 메모리에 로드할 때 PCB라는 자료구조를 추가하여 메모리에 로드한다.
프로그램과 프로세스의 관계
프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위
스레드를 쉽게 이해하기 위해서 프로세스의 작업 과정에 대해서 알아보자.
운영체제는 코드와 데이터를 메모리에 가져오고, PCB를 생성하고, 작업에 필요한 메모리 영역을 확보한 후, 준비된 프로세스를 준비 큐에 삽입한다. 프로세스가 생성되면 CPU 스케쥴러는 프로세스가 해야 할 일을 CPU에 전달하고 실제 작업은 CPU가 수행한다.
이때 스케줄러가 CPU에 전달하는 일 하나가 스레드이다. 그러므로 CPU가 처리하는 작업의 단위는 프로세스로부터 전달받은 스레드이다.
여기서 알 수 있는 것은 운영체제가 자원을 할당하는 단위를 프로세스,
CPU 입장에서의 작업 단위는 스레드가 된다는 것이다.
프로세스를 설명하며 PCB에 대해서 알아봤다. 그렇다면 PCB는 무엇인가?
프로세스 제어 블록(PCB)은 프로세스를 실행하는 데 필요한 중요한 정보를 보관하는 자료구조이다. 모든 프로세스는 고유의 PCB를 가지며, PCB는 프로세스 생성 시 만들어지고 프로세스 종료 시 폐기된다. PCB는 Context Switching에서 중요한 역할을 하게 된다. 이는 다음 포스터에서 다루도록 하겠다.
PCB에 저장되는 정보는 다음과 같다.
프로세스를 실행하기 위해선 PCB가 중요 역할을 한다는 것을 알았다. 그러나 앞에서 말했 듯 CPU 입장에서의 작업 단위는 스레드가 되어야 한다. 그렇다면 스레드도 PCB와 같은 역할을 하는 자료구조가 있어야 한다.
TCB는 thread 별로 존재하는 자료구조이다. PCB에서 파생되었기 때문에 PCB와 유사하게 생겼지만, 각 프로세스는 별도의 pcb,code,data,stack을 갖고 있지만 스레드는 stack과 PC register를 제외한 모든 곳을 공유하게 된다. 그렇기에 PCB의 축약형의 모습을 취한다.
게다가 모든 TCB는 PCB를 가리키는 포인터를 갖게 된다.
지금까지 프로세스, 스레드의 차이점에 대해 알아봤다. 그렇다면 프로세스와 스레드가 구분된 이유는 뭘까?
초기의 운영체제에서는 작업의 단위가 프로세스 하나뿐으로 1개의 스레드를 가진 프로세스만 있는 셈이라 스레드와 프로세스를 구분지을 필요가 없었다.
그러나 CPU와 프로그래밍 기술의 발전으로 인해 여러개의 코어를 가진 CPU가 생겨나 멀티스레드를 지원하기 시작하면서 스레드의 개념이 중요해지게 된 것이다.
하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 것이다.
하나의 프로세스가 여러개의 스레드를 갖고, 각각의 스레드가 서로 다른 작업을 수행한다
하나의 프로그램 안에서 여러 작업을 해결하는 것이 더 효율적이고, context switching시에 stack 영역만 초기화 해주면 되기 때문에 더 빠르다는 장점이 있다. 또한 프로세스 생성시 자원 할당하는 콜이 줄어들어 자원의 사용을 효율적으로 관리할 수 있다는 장점이 있기 때문이다.
References
https://velog.io/@klm03025/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/OS#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://stackoverflow.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread
https://prepinsta.com/operating-systems/process-control-block/