해당 내용은 과거에 학습하였던 내용을 복기하기 위한 내용입니다.
대부분 Windows OS를 기반으로 정리되어 있습니다.
프로세스(process) : 비공식적으로 실행 중인 프로그램(program)을 지칭
초기의 컴퓨터 시스템은 한 번에 하나의 프로그램만을 수행하였고 보다 나은 시스템 활용을 위하여 메모리에 다수의 프로그램들이 적재되어 동시에 수행되는 것을 허용하게 되었습니다.
그로 인하여 다양한 프로그램을 보다 견고하게 제어 및 구획화(분리)하여 관리할 것이 필요하게 되었고, 이런 필요성에 의해 프로세스란 개념이 만들어졌으며, 이는 현대의 시분할 시스템(time-sharing) 시스템에서 작업의 단위가 되었습니다
하나의 시스템은 프로세스들의 집합체이다.
운영체제의 프로세스들을
이들 모든 프로세스들은 잠재적으로 병행 수행이 가능하다
CPU는 이들 프로세스들을 다중화(multiplex)하여 각 프로세스들 사이에서 전환(switching)시킴으로써, 운영체제는 컴퓨터를 보다 생산적으로 만든다
실행 중인 프로그램은 메모리에 상주해 있는(load) 상태의 프로그램입니다.
이 프로세스라 불리는 메모리는 어떻게 구성되어 있을까요? 일반적으로 아래 그림과 같이 4가지 영역으로 나누어져서 각각의 일을 열심히 수행하고 있습니다.
참조 이미지) What process in operating system
전역 변수나 정적(static) 변수의 할당을 위해 존재하는 영역
프로그램 작성 시, 우리가 전역 변수 혹은 정적 변수를 선언하는 경우 이 영역에 존재하게 됩니다. 그렇기에 우리는 프로그램 상에서 아무 때나(일반적으로) 부를 수 있게 됩니다.
실행 파일을 구성하는 명령어들이 올라가 있는 메모리 영역
프로그램이 실행되면 실행 파일에 존재하는 명령어들은 메모리상에 올라가 순차적으로 실행됩니다(PC : Program Counter) 이렇게 실행 파일을 구성하는 명령어들이 올라가 있는 메모리 영역입니다.
프로그램 작성 시, 프로그램 언어를 통하여 작성된 코드들은 해당 영역에서 컴퓨터가 알아들을 수 있는 명령어들로 변환되어 자신의 순서를 기다리게 됩니다.
동적 할당(malloc, calloc)을 위해 존재하는 영역
C++, C# 등의 언어에서 new라는 키워드로 생성되는 값들은 해당 영역에 존재하게 됩니다.
지역 변수의 할당과 함수 호출 시 전달되는 인자 값들의 저장을 위해 존재하는 영역입니다.
CPU를 구성하는 레지스터(register : 명령어)들은 실행 파일의 실행을 위해 필요한 데이터들로 채워지게 됩니다. 따라서 레지스터들의 상태까지도 프로세스의 일부로 포함시켜 이야기할 수도 있습니다.
실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 됩니다
프로그램(Program) 그 자체는 프로세스가 아닙니다.
프로그램은 명령어 리스트를 내용으로 가진 디스크에 저장된 파일(우리가 말하는 실행파일)과 같은 수동적인 존재(passive entity)이기도 하지만 다음에 실행할 명령어를 지정하는 프로그램 카운터와 연관된 자원의 집합을 가진 능동적인 존재(active entity)입니다.
우리는 동일한 프로그램의 구동을 통하여 동일한 프로세스를 만들 수 있습니다.
이들은 같은 text 섹션의 내용을 통하여 동일한 행동을 수행하게 됩니다. 하지만 같은 프로세스가 아닙니다
이들은 각각 별개의 프로세스로 관리됩니다.
프로그램은 text 영역을 통하여 동일한 동작을 수행하게 되지만 data, heap 및 stack 영역 할당 시, 운영체제에 의해 고유한 영역을 할당받게 됩니다. 이로 인해 운영체제는 프로세스를 구획화 하여 보다 안전하게 자원을 제어할 수 있게 됩니다.