-
[운영체제] Process 와 Thread운영체제 2021. 12. 11. 00:22
프로세스(Process)
프로세스는 프로그램이 CPU에서 처리될 수 있도록 메모리에 올라온 상태를 말한다.
프로세스끼리는 독립적인 메모리 주소를 가지고 있으며 할당된 메모리는 Code, Data, Stack, Heap 영역으로 나뉜다. 각 영역별로 저장되는 것이 다르다.
- Code : 실행할 프로그램의 코드가 저장되어 있는 영역이다. 코드 명령문들이 저장되어, 이 명령문을 하나씩 불러와서 실행한다.
- Data : 프로그램의 전역변수와 정적변수가 저장되는 공간이다. 이 변수는 프로그램 실행 전에 선언되어서, 프로그램이 끝날 때까지 남아있는 변수이기 때문에, 크기도 많이 할당되지 않고, 변화가 크게 생기지 않는다.
- Heap & Stack : 할당된 메모리에서 Code영역과 Data영역을 제외한 나머지 메모리를 모두 Heap과 Stack이 사용한다. 이 중 가장 낮은 주소에서부터 높은 주소로 올라가며 저장하는 것이 Heap이고, 높은 주소에서 낮은 주소로 내려가며 저장하는 것이 Stack이다.
- Heap : 사용자가 직접 관리하는 메모리 영역으로 런타임에 크기가 결정된다. 즉 사용자가 코드를 어떻게 이용하냐에 따라서 동적으로 더 넓게 할당 받을 수 있으며, 사용이 끝나면 할당이 해제된다.
변수를 전역적으로 액세스할 수 있으며, 상대적으로 액세스가 느리다.
스택과는 다르게 메모리 크기에 제한이 없고, 대신 유저가 메모리를 직접 관리해줘야한다. - Stack : CPU가 직접 관리하는 메모리 영역으로 컴파일 타임에 크기가 결정된다. 즉 코드를 쭉 훑은 다음 크기가 정적으로 결정된다. 따라서 유저의 이용에 따라 런타임에 stack 크기를 초과하면 stack overflow가 발생하여 오류가 발생하게 된다.
CPU가 관리하므로 액세스가 빠르며 수를 유저가 명시적으로 할당하거나 해제할 필요가 없고, 다만 이미 고정되었으므로 변수의 크기를 조정할 수 없다.
- Heap : 사용자가 직접 관리하는 메모리 영역으로 런타임에 크기가 결정된다. 즉 사용자가 코드를 어떻게 이용하냐에 따라서 동적으로 더 넓게 할당 받을 수 있으며, 사용이 끝나면 할당이 해제된다.
또한 한개의 CPU에서 동시에 한개의 프로세스만 처리할 수 있는데, 우선 순위가 높은 프로세스가 들어와서 interrupt를 발생시킨다면 프로세스를 교체해주어야 하고, 이 때 Context Switch가 발생한다.
Context Switch
컴퓨터의 저장 공간 중 가장 연산속도가 빠른 것은 레지스터이다. 따라서 프로세스를 수행중일 때 register에 대부분의 정보가 저장되는데, 다른 프로세스로 교체될 때, 이 register에 해당 프로세스의 정보가 들어와야하므로 현재까지의 상태를 저장해주어야 한다. 이 때 PCB(Process Control Block)이라는 Process마다 독립적으로 가지고 있는 Process 정보 저장 공간에 상태를 저장한다. 그 후 새로 들어온 프로세스의 PCB에서 데이터를 불러와서 프로세스를 실행 시키는 것이 Context Switch이다.
이전에 수행하던 Process의 정보를 저장하고, 수행할 Process의 정보를 불러와서 register에 할당하는 과정에서 CPU 사용율이 줄어드는데, 이 것을 오버헤드(overhead)가 발생했다고 하며, 오버헤드가 많이 발생할수록 CPU를 효율적으로 사용하지 못한 것이 되므로, 적게 발생하도록 하는 것이 좋다.
쓰레드(Thread)
프로세스 내부에 존재하는 프로세스의 실행 단위.
프로세스는 최소 1개의 쓰레드로 이루어져 있으며 멸티쓰레딩이 보편화된 오늘날엔 프로세스는 여러개의 쓰레드로 나눠져 있는 것이 일반적이다.
'운영체제' 카테고리의 다른 글
[운영체제] Process 와 Thread (0) 2021.12.03 [운영체제] window 운영체제 (0) 2021.06.15 [운영체제] Inter Process Communication(프로세스 동기화) - 1 (0) 2021.06.09 [운영체제] 프로세스 스케쥴링(Process Scheduling) (0) 2021.06.08 [운영체제] 컴퓨터의 부팅 (0) 2021.06.08