CS/OS

[OS] 프로세스(Process)

Jutudy 2021. 5. 22. 19:07

프로세스(Process)

개인적으로 공부하면서 정리하는 글입니다. 내용에 오류가 있는 경우 댓글 달아주시면 수정하도록 하겠습니다.


운영체제의 역할 중 하나는 프로세스 관리입니다. 프로그램을 메모리에 적재하고 PCB(프로세스 제어 블록)을 생성하여 프로세스의 생명주기를 관리하고, 메모리에 적재되어 있는 프로세스를 CPU 스케줄링을 통해 효율적으로 CPU가 처리할 수 있도록 해주는 것인데요. CPU가 일을 하는 단위인 프로세스에 대해 알아보도록 하겠습니다.

프로그램(Program)

프로세스에 대해 알아보기 전에 프로그램이 무엇인지 먼저 알아보려고 합니다.

위키백과에서는 ''컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령어들의 모음(집합체)이다.' 라고 설명하고 있습니다. 우리가 운영체제에 설치하여 사용하는 모든 것들을 프로그램이라고 할 수 있습니다(카카오톡, 크롬 등). 이런 프로그램들은 보조기억장치(SSD,HDD)에 저장되어 있고, 우리는 이런 프로그램들을 더블클릭 등을 통해 실행하여 사용하게 됩니다.

프로세스(Process)

'주기억장치(RAM)에 적재되어 커널 영역에 PCB(프로세스 제어 블록)을 부여받은 프로그램'

흔히 프로세스를 실행 중인 프로그램이라고 말합니다.

바탕화면에 있는 크롬 아이콘을 더블클릭하면 크롬 창이 뜨고 우리는 실행된 크롬 프로그램을 사용하게 되는데요. 이렇게 실행 중인 프로그램을 프로세스라고 말하는 것이죠.

여기서 조금 더 자세히 말하면 프로세스는 주기억장치(RAM)에 적재되어 커널 영역에 PCB(프로세스 제어 블록)을 부여받은 프로그램이라고 할 수 있습니다.

보조기억장치에 적재되어있던 프로그램을 사용자가 사용하기 위해 더블클릭하게 되면, 운영체제는 해당 프로그램을 주기억장치로 적재합니다(프로세스 주소 공간 할당). 그와 동시에 주기억장치 커널영역에 프로세스의 모든 정보를 가지고 있는 PCB를 생성하여 관리하게 됩니다. PCB는 프로세스가 종료될 때 까지 주기억장치에 존재하게 되며 프로세스가 종료될 때 사라지게 됩니다.

CPU는 한 번에 하나의 프로세스(작업)만 수행할 수 있습니다. 주기억장치에 적재되어있는 많은 프로세스들 중 하나의 프로세스를 수행하고, 이것을 아주 빠른시간에 반복하기 때문에 우리가 볼 때는 여러 프로그램을 동시에 수행하는 것으로 보는 것입니다. 그렇기 때문에 프로세스는 실행 중일 수도 있고, 아닐 수도 있습니다.

프로그램이 프로세스가 되는 과정

프로세스 주소 공간(Process Address Space)

프로그램은 운영체제에 의해 주기억장치에 적재됩니다. 프로그램이 적재되는 주기억장치의 공간을 프로세스 주소 공간이라고 합니다. 프로세스는 각각 별개의 프로세스 주소 공간을 가지고 있습니다.

프로세스 주소 공간은 5가지로 구분되어 있습니다.

  1. 코드 영역
    • 프로그램 코드가 저장되어 있는 부분
    • 읽기만 가능
  2. 데이터 영역
    • 전역 변수, static 변수 등 프로그램 전역에서 참조가능한 데이터가 저장되어 있는 부분
    • 읽고 쓰기 가능
  3. 스택 영역
    • 함수, 지역 변수가 저장되어 있는 부분
    • 읽고 쓰기 가능
  4. 힙 영역
    • 동적으로 메모리가 할당 가능한 부분
    • 읽고 쓰기 가능

코드, 데이터 영역은 컴파일 시 크기가 결정되어 프로세스가 실행되는 동안에는 변하지 않습니다.

스택, 힙 영역은 프로세스 실행 중에 크기가 변하는 영역입니다. 두 영역을 서로 침범하게 되면 오버플로우가 발생할 수 있습니다.

프로세스 제어 블록(PCB)

앞에서 운영체제는 프로그램을 주기억장치에 적재하고(프로세스 주소 공간), 커널 영역에 프로세스 제어 블록(PCB)를 생성한다고 했습니다. PCB는 프로세스의 모든 정보를 저장하고 있는 자료구조입니다. 운영체제가 프로세스를 표현하기 위한 도구라고 할 수 있습니다.

PCB는 프로세스의 모든 정보를 저장하고 있다고 했는데요. PCB가 갖고 있는 프로세스 정보들은 다음과 같습니다.

  • 프로세스 번호(PID) : 프로세스의 고유한 정수 번호
  • 프로세스 상태 : 준비, 실행, 대기, 보류 등 프로세스의 현재 상태를 나타냄
  • 프로세스 우선순위 : CPU 스케줄링에서 사용하는 프로세스 우선순위
  • 프로그램 카운터(PC) 값 : 다음에 실행될 명령어의 주소 값
  • 메모리 포인터 : 프로세스 주소 공간에 대한 정보
  • 문맥 데이터 : 문맥교환(Context Switch) 시에 CPU 레지스터 값들을 저장
  • 할당받은 자원들 목록
  • 계정 정보
  • 입출력 정보

CPU는 한 번에 하나의 프로세스만 실행할 수 있고, 짧은 시간 내에 여러 프로세스를 번갈아가며 수행합니다. 이 때 운영체제가 다른 프로세스를 실행시키기 위해 이전에 실행하던 프로세스의 정보를 저장하고, 다음에 실행할 프로세스의 정보를 가져오는 부분이 PCB입니다.

'CS > OS' 카테고리의 다른 글

[OS] CPU 스케줄링  (0) 2021.06.06
[OS] 프로세스와 스레드(Process, Thread)  (0) 2021.05.23
[OS] 프로세스 상태(Process State)  (0) 2021.05.23
[OS] 인터럽트  (0) 2021.05.15
[OS] 운영체제란?  (0) 2021.05.15