..

Process

프로세스

실행중인 프로그램. 즉, 프로그램이 실행되어 메모리에 올라온경우 하나의 프로세스라고 한다.

프로그램을 실행하기위해서 os 는 프로그램을 메모리 공간을 부여해주는데 이것을 가상메모리라고 합니다

이 메모리는 (커널, 스택, 힙, 데이터, 코드영역) 등으로 나눠져있고, 코드 영역, 데이터 영역에 코드, 전역변수 정보가 들어가있습니다.

커널영역에는 PCB. 프로세스 제어 블록의 메모리가 생깁니다. 프로세스 제어블록은 프로세스와 관련된 정보를 저장하는 자료구조입니다. 다른 프로세스와 식별할 수 있는 id 값을 생각하는 정보라고 생각하면 됩니다.

프로그램의 코드가 실행되기 위해서는 cpu 와 수행할 데이터가 임시로 보관될 영역이 필요합니다. 이 영역을 힙, 스택 영역을 사용합니다.

프로세스는 작업을 수행하기 위해 cpu 를 필요로 하지만,우리는 하나의 프로세스만 사용하는게 아니라 여러 프로세스를 사용하기 때문에 cpu 자원은 한정되어있습니다. 따라서 여러 프로그램을 실행하지만 cpu 는 한정되어있다보니 시분할 방식으로 컴퓨터를 사용합니다. 일정한 cpu 의 시간만큼 이용하고 끝나면 다음 차례가 올때까지 기다리는 방식이다.

cpu 를 기다렸다가 다시 내가 실행할 순서가 되면, 다시 이전까지 작업했던 정보를 백업해서, 그 이후의 실행해야할 내용을 재개합니다. 이 정보를 컨텍스트라고 합니다. 작업할당시간이 끝나면 남은 정보를 PCB 에서 관리합니다.

기존 프로세스를 실행하기 위해 새로운 프로세스를 실행하는 것을 컨텍스트 스위칭이라고 합니다.

컨텍스트 스위칭이 많이 일어나면 오버헤드가 발생할 수 있다는 단점이 있습니다

쓰레드

프로세스 내부의 하나의 실행단위입니다.

하나의 프로세스는 여러개의 스레드를 가질 수 있습니다. 그래서 스레드를 이용하면 하나의 프로세스에서 여러 부분을 동시에 실행할 수 있습니다.

프로세스가 받은 할당된 시간을 멀티스레드가 4개라면 또 4개로 쪼개어 할당받아 일을 처리합니다.

단일 스레드의 경우 이전명령어가 다 끝나면 이후 명령어를 실행할 수 있는데, 멀티 쓰레드의 경우 같이 명령어를 동시에 작업할 수 있는 장점이 있습니다.

멀티프로세스 vs 멀티스레드

스레드는 멀티프로세스와 데이터를 공유하여, 멀티프로세스에 비해 메모리가 낭비되지 않는다.

멀티프로세스로 사용할경우 메모리가 적재되고 또 컨텍스트 스위칭이 일어나기때문에 하나의 작업이 컨텍스트 스위칭이 일어나지 않고 다른 스레드가 작업을 끝내는 경우 멀티스레드가 더 효율적일 수 있습니다.

하지만 스레드는 데이터를 공유하고있으므로, 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있습니다.