프로세스란 실행 중인 프로그램을 의미한다.
프로그램이란 보조 기억 장치(하드디스크, SSD)에 존재하며 실행되기를 기다리는 명령어와 코드의 집합이다.
프로그램
이 메모리에 적재되어 생명주기를 가진다면 프로세스
가 된다.
하나의 CPU(프로세서)는 한 순간에 하나의 프로세스
만 실행할 수 있다. 프로세스가 동시에 여러 개가 실행될 수 있는 이유는 운영체제
가 CPU가 어떤 프로세스를 실행할 지 판단해 계속 교체하고 있기 때문이다. 이를 시분할 방식
이라고 한다.
프로세스에 대한 정보는 프로세스 제어 블록(PCB)
에 저장되며 다음과 같은 정보를 담고있다.
프로세스의 데이터와 명령어가 있는 메모리 공간은 다음과 같이 구성되어있다.
프로그램이 자동으로 사용하는 메모리 영역으로 함수 호출과 관계되는 지역변수와 매개변수가 저장된다. 함수 호출 시 생성되며, 함수가 끝나면 반환된다. stack 사이즈는 각 프로세스마다 할당되지만 프로세스가 메모리에 로드될 때 stack 사이즈가 고정되어 있어 런타임 시 stack 사이즈를 바꿀 수 없다. 명령 실행 시 자동으로 증가 또는 감소하기 때문에 보통 메모리의 마지막 번지를 지정한다.
필요에 의해 메모리를 동적으로 할당할 때 사용하는 메모리 영역으로 동적 메모리 영역이라고 부른다. C 에서 malloc() calloc() 등의 함수를 사용하여 메모리 크기를 할당할 수 있으며, 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.
위의 stack과 heap영역은 사실 같은 공간을 공유한다. heap이 메모리의 낮은 주소부터 할당되면 stack은 높은 주소부터 할당되는 식이다. 그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 stack overflow, heap overflow 라고 한다.
프로그램이 실행될 때 생성되고, 프로그램이 종료되면 시스템에 반환되는 전역 변수, 정적 변수 등이 저장된다. 초기화된 데이터는 BSS, 초기화되지 않은 데이터는 GVAR에 저장된다.
실행할 명령을 포함하는 코드 들이 들어가는 부분
. 읽기 전용 영역
이며 변경할 경우 오류가 생긴다.
멀티 프로세싱이란, 말 그대로 여러 개의 프로세서가 서로 협렵적
으로 일을 처리하는 것이다. 많은 양의 작업을 빠른 시간에 처리하기 위해서는 단일 프로세서보다 멀티 프로세서가 빠르다. 따라서 그림과 같이 멀티 코어 시스템에서 여러 개의 CPU가 병렬적으로 작업을 수행하는 것을 의미한다.
참고
https://bowbowbow.tistory.com/16
https://velog.io/@chy0428/OS-%EB%A9%80%ED%8B%B0%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%A9%80%ED%8B%B0%ED%94%84%EB%A1%9C%EC%84%B8%EC%8B%B1
https://kyu9341.github.io/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/2020/10/04/OS_Process_Structure/