메모리: 프로그램 실행을 윈한 데이터를 저장한다.
프로세스는 운영체제로부터 독립된 메모리 영역을 할당 받는다.
---------------- //Highest memory address
| 스택 (Stack)|
| 힙 (Heap) |
| 데이터 (Data)|
| 코드 (Code) |
---------------- //Lowest memory address
push
로 데이터를 저장하고 pop
으로 데이터를 인출한다. 이러한 결과로 스택은 높은 주소 -> 낮은 주소로 할당된다.GVAR, BSS 로 나누어져 있다.
GVAR
전역 변수, 초기값 있는 전역 변수. 배열, static으로 선언된 변수가 들어간다
BSS
전역 변수, 초기값 없는 전역변수. 배열, static으로 선언된 변수가 들어간다
동적할당영역?
프로그램이 실행 중인 동안(런 타임에) 크기가 결정되는 것을 말한다.
텍스트 영역
프로그램의 시작부터 끝까지 메모리에 계속 남아있는다.
프로세서가 실행할 코드를 저장해 놓은 영역이다.
동시적 병렬적
동시성 프로세스하나가 여러 작업을 돌아가면서 일부분 식 진행
시스템 호출이나 인터럽트로 실행 중인 프로세스의 제어를 다른 프로세스에 넘겨 실행 상태가 되도록 하는 것을 Context Switching
이라고 한다.
커널 내에는 준비 큐, 대기 큐, 실행 큐 등의 자료 구조가 있으며 커널은 이것들을 이용하여 프로세스의 상태를 관리한다.
생성(create) : OS나 프로그램에서 요청받아 프로세스를 생성하면 PCB를 만들어 주소공간을 할당한다.
실행(running) : 프로세스가 CPU를 차지하여 명령어들이 실행되고 있다.
준비(ready) : 프로세스가 CPU를 사용하고 있지는 않는 상태이다. 하지만 언제든지 사용할 수 있는 상태로, CPU가 할당되기를 기다리고 있다. 일반적으로 준비 상태의 프로세스 중 우선순위가 높은 프로세스가 CPU를 할당받는다.
대기(waiting) : 보류(block)라고 부르기도 한다. 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태를 말한다.
종료(terminated) : 프로세스 실행의 종료를 의미한다.
시스템이 실행하고자 할 때 프로세서(CPU)를 프로그램들에게 할당하는 과정
프로세스의 실행단위
프로세스는 별도의 주소 공간에서 실행되며 한 프로세스는 다른 프로세스의 변수나 자료 구조에 접근할 수 없다. 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스간 통신을 사용해야한다. 파이프 파일 소켓 등
스레드는 프로세스를 생성하면 해당 프로세스의 스레드도 함께 생성된다. 프로세스 내에서 각각 스택
만 따로 할당 받고 텍스트
, 데이터
, 힙
영역은 공유한다. 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다. 한 스레드가 프로세스 자원을 변경하면 다른 이웃 쓰레드도 그 변경 결과를 즉시 볼 수 있다.
References
프로세스와 쓰레드의 차이 - Park_juyoung
프로세스 메모리구조, 시스템 호출 - 그저그런 컴공생
프로세스 - 위키백과
쓰레드란? - 코딩스타트