시스템에 설치되어 있는 '실행파일'로서, 디스크에 정적으로 존재
액셀, 워드 등 설치된 어플리케이션을 'Application', 'Job'이라고 한다.
보조기억장치 공간을 사용하고 있을 뿐, CPU/IO 등 다른 자원을 사용하지 않는다.
실행되기 전의 '실행파일'
(설치된 어플리케이션을 더블클릭 혹은 터치해서) 실행이 시작된 어플리케이션
실행을 시작하면 커널에 등록하면, 커널이 프로세스를 생성한다. 그러면 프로세스는 I/O 등 여러 각종 자원을 사용하기 시작한다.
application은 따로 관리될 필요가 없는데, 실행이 시작되어 '프로세스'가 되면 커널이 관리를 시작한다.
실행하는 프로그램 코드를 가진다.
보조기억장치에 저장된 Application의 코드를 가져온 것이다.
프로그램의 글로벌 변수 데이터를 가진다.
모든 프로세스는 스택 영역을 가진다.
프로그램은 실행하면서 글로벌 변수 뿐 아니라 Local 변수들도 가지고 있는데,
이러한 지역 변수들은 스택에 저장된다. 함수에 전달되는 파라미터, return address 등 임시로 저장해야 하는 데이터들은 모두 스택에 저장된다.
모든 프로세스는 자기만의 힙 영역을 가지고 동적으로 할당한다.
모든 프로세스는 cpu 안의 레지스터 공간을 가진다. 메모리 공간만 쓰는 것이 아니라 cpu 레지스터까지 사용해서 메모리 안 데이터를 레지스터에 갖다 놓고 사칙연산, 비교 등 다양한 처리를 한다.
*Execution과 Run은 다르다. Running 중인 프로그램은 실제로 CPU를 잡고 실행중인 것이고, Execution은 cpu를 꼭 사용하고 있지 않더랃 메모리에서 대기/입출력/네트워크 통해서 메시지 내보내기 등, 프로세스가 컴퓨터시스템 안에서 종료되지 않은 상태인 것을 의미한다.
(app의 상태로는 시스템 자원을 사용할 이유도, 사용할 수도 없음)
능동적으로 움직이고 있는 entity.
프로세스는 생성되면 자기 코드를 메모리에 로딩해놓고 그 기계어 명령들을 능동적으로 실행해간다. 그 과정동안 시스템 자원의 요청, 할당, 반납 등을 하며 프로세스가 움직인다.
자원은 스스로 움직이지 않는 수동적인 entity이다.
그저 프로세스에 의해 할당되고, 반납될 뿐이다.
어떠한 프로세스에게 할당되면, 프로세스가 하라는 대로 움직이는 것이다.
컴퓨터 시스템은 프로세스, 리소스(자원), 커널 총 3가지 Entity로 이뤄져 있다.
커널은 프로세스가 어떠한 자원을 사용하려고 할 때 사용가능한지 확인하고 허용하는 역할을 수행한다.
즉 컴퓨터 시스템은 Active한 프로세스, Passive 한 리소스, 그리고 이 둘 사이의 요청/할당/반납을 중재하는 커널로 이뤄져 있다.