프로세스는 일반적으로 '실행 중인 프로그램'을 의미한다.
또한 프로세스는 다음과 같이 다양하게 정의되기도 한다.
-실행 중인 프로그램
-비동기적 행위
-실행 중인 프로시저
-실행 중인 프로시저의 제어 추적
-운영체제에 들어 있는 PCB(프로세스 제어 블록)
-프로세서에 할당하여 실행할 수 있는 개체 디스패치가 가능한 대상
프로그램은 보조 기억장치에서 실행되기를 기다리는 코드와 정적인 데이터의 묶음이다.
이 프로그램이 메모리에 적재되면 프로세스가 된다.
프로세스가 메모리에 적재되었을 때 위 그림과 같은 구조를 지닌다.
스택
스택은 데이터를 일시적으로 저장하는 영역이다.
지역변수에 사용하고, 변수가 범위 밖으로 이동하면 공간을 해제한다. 호출한 함수의 반환 주소, 반환 값, 매개 변수 등에 사용하고, 함수를 호출할수록 커지고 반환하면 줄어든다.
힙
힙은 코드 영역과는 별도로 유지되는 자유 영역이다. 동적으로 메모리를 할당하려고 프로그램 실행 중 시스템 호출을 사용했다가 해제하는 방법으로 활용한다.
데이터
데이터는 프로그램의 가상 주소 공간이다. 전역변수나 정적변수를 저장하거나 할당하고 실행하기 전에 초기화한다.
그런데 변수 값은 실행 시간에 변경할 수 있어 읽기 전용 영역은 아니지만 읽기 전용 영역이나 읽기와 쓰기 영역으로 초기화할 수 있다. 정적 변수는 0으로 초기화하거나 초기화하지 않아도 된다. 초기화하지 않은 데이터는 데이터 영역의 끝에서 시작한다.
코드
코드는 실행 명령을 포함하는 메모리이거나 목적 파일에 있는 프로그램 영역이다. 프로그램을 시작할 때 프로세서가 디스크에서 읽어 실행하는 컴파일한 프로그램을 저장한다. 프로세스로 변경할 수 없고, 읽기 전용이므로 프로그램이 코드 영역을 침범하여 쓰기를 시도하면 오류가 발생해서 프로그램을 종료한다. 코드 영역은 공유할 수 있으므로 자주 실행하는 워드 프로세서, C 컴파일러, 셸 같은 프로그램의 사본 하나는 메모리에 존재한다.
스택과 힙 사이는 서브루틴을 실행하는 영역으로 운영체제로 매핑되지 않는다.
프로세스의 상태 변화
프로세스 제어 블록(PCB)
프로세스 제어블록은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조이다.
실행중인 프로세스는 모두 PCB를 가지고, 수행이 완료되면 PCB도 삭제된다.
문맥 교환(Context Switch)
문맥 교환이란 하나의 프로세스가 프로세서를 사용중인 상태에서 다른 프로세스가 프로세서를 사용하도록 하기 위해, 이전의 프로세스의 상태(문맥)를 보관하고 새로운 프로세스의 상태를 적재하는 작업을 말한다. 문맥교환이 일어나는 동안에는 다른 작업을 할 수 없고, 이를 오버헤드라 한다.
'운영체제' 카테고리의 다른 글
[운영체제 공부] 병행 프로세스, 병행성과 병렬성 (0) | 2020.02.10 |
---|---|
[운영체제 공부] 스레드 (0) | 2020.02.06 |
[운영체제 공부] 커널(Kernel) (0) | 2020.02.05 |
[운영체제 공부] 운영체제의 서비스 (0) | 2020.02.04 |
[운영체제 공부] 운영체제의 유형 (0) | 2020.02.03 |