프로세스(Process)
- 프로세스는 실행중에 있는 프로그램
- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
- 스케줄링의 대상이 되는 작업과 같은 의미로 쓰인다.
- 프로세스 내부에는 최소 하나의 스레드(thread)를 가지고 있는데, 실제로는 스레드 단위로 스케줄링을 한다.
- 하드디스크에 있는 프로그램을 실행하면, 실행을 위해서 메모리 할당이 이루어지고, 할당된 메모리 공간으로
바이너리 코드가 올라가게 된다. 이 순간부터 프로세스라 불린다.
프로세스의 문맥(context)
- CPU 수행 상태를 나타내는 하드웨어 문맥
- 프로세스의 메모리 영역
- Code 영역 - 실행할 프로그램의 코드나 명령어들이 기계어 형태로 저장된 영역, CPU는 코드영역에 저장된
명령어들을 하나씩 처리한다. - Data 영역 - 코드에서 선언한 전역 변수와 정적 변수가 저장되는 영역, 프로그램이 실행되면서 할당되고
종료되면서 소멸한다. - Stack 영역 - 함수 안에서 선언된 지역변수, 매개변수, 리턴값 등이 저장된다.
호출시 기록되고 종료되면 제거된다. - Heap 영역 - 관리가 가능한 데이터 이외의 다른 형태의 데이터를 관리하기 위한 자유공간
- Code 영역 - 실행할 프로그램의 코드나 명령어들이 기계어 형태로 저장된 영역, CPU는 코드영역에 저장된
프로세스의 상태(State)
- 프로세스는 상태(state)가 변경되며 수행된다.
- Runnig - CPU를 답고 명령을 수행중인 상태
- Ready - CPU를 기다리는 상태
- Blocked(waiting, sleep) - CPU를 주어도 당장 명령을 수행할 수 없는 상태
프로세스 자신이 요청한 요청이 즉시 만족되지 않아서 이를 기다리는 상태 - New - 디스크에서 메모리로 프로그램이 올라와 실행준비를 하는 상태
- Terminated - 수행이 끝난 상태
문맥 교환(Context Switch)
- 하나의 프로세스가 이미 CPU를 사용중인 상태에서 다른 프로세스가 CPU를 사용하기 위해 이전 프로세스의 상태를
저장하고 새로운 프로세스의 상태를 적재하는 것 - CPU가 재빠르게 여러 프로세스를 번갈아가며 실행하고 관리할 때 번갈아가며 처리하는 것을 문맥교환이라 한다.
스레드(Thread)
- 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위이다.
- 운영체제의 스케줄러에 의해 독립적으로 관리될 수 있는 프로그래밍된 명령어의 가장 작은 시쿼스이다.
- 하나의 프로세스는 하나 이상의 스레드를 갖고 있다.
- 스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동한다.
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당 받고, Code, Data, Heap 영역은 공유한다.
- 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.
- 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
참고 블로그
'CS(Computer Science)' 카테고리의 다른 글
CS Study : 10주차 - 스케줄러(Scheduler) / CPU 스케줄러 (0) | 2023.01.19 |
---|---|
CS Study : 9주차 - 멀티 프로세스와 멀티 스레드 (0) | 2023.01.13 |
CS Study 8주차 : SQL vs NoSQL (0) | 2023.01.07 |
CS Study 8주차 : SQL Injection (0) | 2023.01.06 |
CS Study 8주차 : 교착상태(Dead Lock) (0) | 2023.01.06 |