프로세스와 스레드
프로세스
스레드
작업 실행 과정
1. 프로그램이 메모리에 올라간다
2. 프로세스가 되는 인스턴스화가 일어난다
3. 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행한다
(1) 프로세스
(2) 프로그램
컴파일러(사용자가 이해할 수 있는 코드를 컴파일을 통해 컴퓨터가 이해할 수 있는 기계어로 번역)로 실행할 수 있는 파일이 될 수 있는 것
(3) 컴파일 과정
소스코드 - 전처리 - 컴파일러 - 어셈블리어 - 어셈블러 - 목적코드 (+ 라이브러리) - 링커 - 실행 가능 파일
cf. 컴파일러 vs 인터프리터
ex. c vs python
대기 상태
1) 메모리 공간이 충분하면: 메모리를 할당받고
2) 메모리 공간이 충분하지 않으면: 대기하며 CPU 스케줄러로부터 CPU 소유권이 넘어오기를 기다리는 상태
대기 중단 상태 : 메모리 부족으로 일시 중단된 상태
실행 상태
CPU 소유권과 메모리를 할당받고 인스트럭션을 수행 중인 상태
이를 CPU burst가 일어났다고도 표현한다
중단 상태
어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태
I/O 디바이스에 의한 인터럽트로 이런 현상이 많이 발생하기도 한다
ex. 프린트 인쇄 버튼을 눌렀을 때 잠깐 멈추는 것 같은 상태
일시 중단 상태
대기 중단과 유사
중단된 상태에서 프로세스가 실행되려고 했지만 메모리 부족으로 일시 중단된 상태
종료 상태
메모리와 CPU 소유권을 모두 놓고 가는 상태
종료는 자연스럽게 종료되는 것도 있지만
부모 프로세스가 자식 프로세스를 강제시키는 비자발적 종료로 종료되는 것도 있다
자식 프로세스에 할당된 자원의 한계치를 넘어서거나 부모 프로세스가 종료되거나 사용자가 process.kill 등 여러 명령어로 프로세스를 종료할 때 발생한다
운영체제는 프로세스에 적절한 메모리를 할당한다
위에서부터 순서대로 : [동적 영역] 스택 - 힙 - [정적 영역] 데이터 영역 - 코드 영역
스택은 위 주소부터 할당되고 힙은 아래 주소부터 할당된다
지역변수, 매개변수, 함수가 저장된다
컴파일 시에 크기가 결정된다
'동적'인 특징을 갖는다
: 수가 함수를 재귀적으로 호출하면서 동적으로 크기가 늘어날 수 있다
=> 힙과 스택의 메모리 영역이 겹치면 안되기 때문에 힙과 스택 사이 공간을 비워놓는다
(2) 힙
동적 할당할 때 사용된다
런타임 시 크기가 결정된다 ex. 벡터 같은 동적 배열은 당연히 힙에 동적 할당
'동적'인 특징을 갖는다
정적 영역
(1) 데이터 영역
-전역변수, 정적변수가 저장된다
-정적인 특징을 갖는 프로그램이 종료되면 사라지는 변수가 들어있는 영역
1-1) BSS 영역 : 초기화가 되지 않은 변수가 0으로 초기화되어 저장된다
1-2) Data 영역 : 0이 아닌 다른 값으로 할당된 변수들이 저장된다
(2) 코드 영역
프로그램에 내장되어 있는 소스 코드가 들어가는 영역
수정 불가능한 기계어로 저장되어 있으며 정적인 특징을 가진다
프로세스가 생성되면
1. 프로세스 생성
2. 프로세스 주소 값들에 위의 구조(스택, 힙 등)를 기반으로 메모리가 할당도니다
3. 이 프로세스의 메타데이터들이 pcb에 저장되어 관리된다
4. 프로세스의 중요한 정보를 포함하고 있기 때문에 일반 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리됩니다
메타데이터
데이터에 관한 구조화된 데이터이자 데이터를 설명하는 작은 데이터,
대량의 정보 가운데에서 찾고 있는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대해 부여되는 데이터
1) 한 개의 프로세스 A가 실행하다 멈추고,
2) 프로세스 A의 PCB를 저장하고
3) 다시 프로세스 B를 로드하여 실행
4) 다시 프로세스 B의 PCB를 저장
5) 프로세스 A의 PCB를 로드
컨텍스트 스위칭에 드는 비용
여러 개의 프로세스
동시에 두 가지 이상의 일을 수행할 수 있는 것을 말함
하나 이상의 일을 병렬로 처리할 수 있다
특정 프로세스의 메모리, 프로세스 중 일부에 문제가 발생되더라도
다른 프로세스를 이용해서 처리할 수 있으므로 신뢰성이 높은 강점이 있다
ex. 웹 브라우저
브라우저 프로세스: 주소 표시줄, 북마크 막대, 뒤로가기 버튼, 앞으로 가기 버튼 등을 담당하며 네트워크 요청이나 파일 접근 같은 권한을 담당
렌더러 프로세스 : 웹 사이트가 보이는 부분의 모든 것을 제어한다
플러그인 프로세스: 웹 사이트에서 사용하는 플러그인을 제어한다
GPU 프로세스: GPU를 이용해서 화면을 그리는 부분을 제어
IPC
Inter Process Communication
멀티프로세스는 IPC 가능
프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 메커니즘 의미
공유 메모리, 파일, 소켓, 익명 파이프, 명명 파이프, 메시지 큐
모두 메모리가 완전히 공유되는 스레드보다는 속도가 떨어진다
ex. 클라이언트와 서버 : 클라이언트가 데이터를 요청하고 서버는 클라이언트 요청에 응답
종류
공유 메모리
여러 프로세스에 동일한 메모리 블록에 대한 접근 권힌이 부여되어 프로세스가 서로 통신할 수 있도록 공유 버퍼를 생성하는 것
각 프로세스의 메모리를 다른 프로세스가 접근할 수 없지만 공유 메모리를 통해 여러 프로세스가 하나의 메모리를 공유할 수 있다
IPC 방식 중 어떤 매개체를 통해 데이터를 주고 받는 것이 아닌 메모리 자체를 공유하기 때문에 불필요한 데이터 복사의 오버헤드가 발생하지 않아
가장 빠르며 같은 메모리