프로세스와 스레드
Last updated
Was this helpful?
Last updated
Was this helpful?
어떤 작업을 위해 실행할 수 있는 파일.
보조기억장치(하드디스크,SSD)에 존재
하며 실행되기를 기다리는 명령어(코드)와 정적인 데이터의 묶음.
컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 객체)
운영체제로부터 시스템 자원을 할당 받는 작업의 단위
동적인 개념으로는, 실행된 프로그램을 의미한다.
메모리 구조
UNIX 시스템은 실행중인 프로세스에게 4GB의 가상 메모리 공간을 할당합니다.
상위 1GB는 커널이 , 하위 3GB는 사용자 프로그램이 차지합니다.
스택 영역
프로그램이 자동으로 사용하는 임시 메모리 영역으로 지역변수, 매개변수, 리턴 값 등이 잠시 사용되었다가 사라지는 임시적인 데이터를 저장하는 영역입니다. 함수 호출 시 생성되고 함수가 끝나면 반환됩니다.
스택의 사이즈는 각 프로세스마다 할당도지만 프로세스가 메모리에 로드될때 Stack 사이즈가 고정되어 있어 런타임 시 Stack 사이즈를 바꿀 수 없습니다.
힙 영역
필요에 의해 메모리를 동적 할당하고자 할 때 사용하는 메모리 영역으로 동적 데이터 영역이라고 부릅니다. 메모리 주소 값에 의해서만 참조되고 사용하는 영역입니다. 이 영역에 데이터를 저장하기 위해 C에서 malloc()함수를 사용합니다.
데이터 영역
프로그램이 실행될 때 생성되고 프로그램이 종료되면 시스템에 반환되며 전역변수(global), 정적 변수(static), 배열(array)(전역), 구조체(structure) 등이 저장
됩니다. 이때 초기화 된 데이터는 Data영역에 저장되고 초기화 되지 않은 데이터는 BSS(Block Stated Symbol)영역에 저장됩니다. 함수 내부에 선언된 Static 변수는 프로그램이 실행될 때 공간만 할당되고 그 함수가 실행될 때 초기화 됩니다.
쓰기가능, 크기고정
BSS영역
초기화되지 않은 정적, 전역변수는 BSS영역에 저장.
bss영역에 저장하면 변수 크기에 대한 정보만 저장하고, 파일 자체에는 그 영역을 잡지 않는다. 프로그램을 실행하면 그때서야 bss를위한 공간을 확보한다.
코드 영역
프로세스가 실행할 코드와 매크로 상수가 기계어의 형태로 저장된 공간. 컴파일 타임에 결정되고 중간에 코드를 바꿀수 없게 Read-Only로 지정되어 있다.
헷갈리기 쉬운 문제
포인터는 힙에 저장될까? 아니다. 포인터는 스택에 저장된다. 동적할당되는 영역이 힙이다. c는 call by value라서 4byte인 reference변수는 스택에 저장되고 할당된 공간은 힙영역에 존재한다. 스택에 있는 포인터가 힙에 있는 할당 영역을 가리키는 구조입니다.
new : 프로세스가 생성중.
running : 명령어들이 실행되고 있다. cpu에서 수행이 되고있는 상태.
waiting : 프로세스가 어떤 사건(입출력 완료 또는 신호의 수신 같은)이 일어나기를 기다린다.
ready : 프로세스가 처리기에 할당되기를 기다린다. running할 준비가 되어있다. 실행준비가 다 된 상테에서 기다리는 것.
terminated : 프로세스의 실행이 종료되었다.
프로세스들의 온갖 상태정보들을 기록해 놓은것. CPU는 한정되어 있고 Process는 많으니 switch를 하게되는데, 이때 현재까지으 상태를 PCB에 기록.
Process State : new, ready, running, waiting, terminated등과같은 상태
Program Counter : 다음에 실행할 명령어의 주소
CPU register : 실행중 상태에서 대기중 or 준비중 으로 변경될때 현재 레지스터 값을 여기 보관. 프로그램 카운터와 함께 다시 실행중으로 옮길 때 필요.
프로세스와 스레드의 차이 :
프로세스 메모리 구조 :