cleanUrl: /os/process-concepts-process-state-and-managed-in-memory

초창기 컴퓨터는 작업을 실행하는 일괄처리 시스템이었고, 사용자 프로그램 또는 task를 실행하는 시분할 시스템이 뒤를 이었다. 개인 컴퓨터의 메일, 워드 프로세서도 한꺼번에 실행해야 하며 심지어 임베디드 같이 multi tasking 을 지원하지 않는다 하더라도 운영체제는 내부적으로 메모리 작업등을 지원해야 한다.

이러한 모든 활동을 프로세스라 한다.

Process (프로세스) 의 정의

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/477f2f76-82e9-4933-95fa-9f24444ab3e8/Screen_Shot_2020-07-15_at_20.05.23.png

비공식적으로 프로세스는 실행중인 프로그램이다. 프로세스의 메모리 배치는 여러 섹션으로 구분되며 아래 그림과 같다.

함수가 실행될 때 매개변수, 지역 변수, 복귀 주소등 Activation Record 가 stack 에 push 되고 함수로부터 제어가 돌아온다면 pop 된다. stack 과 heap 이 서로의 방향으로 커지더라도 운영체제는 이 두 공간이 겹치지 않도록 한다.

프로그램(수동적): 명령어의 리스트를 내용으로 가진 디스크에 저장된 파일

프로세스(능동적): 다음에 실행할 명령어를 지정하는 프로그램 카운터와 관련 자원의 집합을 가진 능동적인 존재

실행 파일이 메모리에 적재될 때 프로세스라 한다.

프로그램 자체가 프로세스인 것이 아니라, 프로그램이 메모리에 적재될 때 프로세스라 한다.

두 프로세스가 동일한 코드와 연결되어 있어도, 두 개의 별도 실행 순서로 간주한다.

for example, 자바로 compile 된 코드를 실행시킬 때 jvm 이 실행되고, jvm 안에서 코드가 실행된다.

하나의 프로세스가 다른 프로세스의 실행을 위해서 존쟁하는 경우의 예시가 JVM 이다.