프로세스 개념

  • 프로그램저장장치에 저장되어 있는 정적인 상태
  • 프로세스실행을 위해 메모리에 올라온 동적인 상태
  • 폰노이만 구조에서 프로그램이 실행된다는 것은 해당 코드가 메모리에 올라와서 작업이 진행된다는 것
  • 현대의 운영체제는 시분할 방식을 기본으로 사용한다.

프로그램에서 프로세스로의 전환

  • 프로세스는 컴퓨터 시스템의 작업단위로 태스크(Task)라고도 부른다.
  • 운영체제는 프로그램을 메모리의 적당한 위치로 가져오는데, 이때 프로세스 제어 블록(Process Control Block, PCB)을 가져온다.
  • 어떤 프로그램이 프로세스가 되었다는 것은 운영체제로부터 PCB를 받았다는 의미이다.
  • 프로세스 제어 블록 있는 다양한 정보 중 대표적 세가지가 있다.
    • 프로세스 구분자(Process Identification, PID) : 메모리에는 여러개의 프로세스가 존재하므로 각 프로세스를 구분하는 구분자
    • 메모리 관련 정보 : CPU는 실행하려는 프로세스가 메모리의 어디에 저장되어 있는지를 알아야 작업 가능하다. 그래서 메모리의 위치정보가 담겨져 있고, 메모리 보호를 위한 경계 레지스터와 한계 레지스터도 포함되어 있다.
    • 각종 중간값 : 시분할 시스템에서는 여러 프로세스가 번갈아가며 실행되기 때문에 각 프로세스는 일정 시간 작업을 한 후 다른 프로세스에 CPU를 넘겨준다. 이때, PCB에는 다음에 작업해야 할 코드의 위치가 담긴 레지스터인 프로그램 카운터가 저장된다.
  • 정리하자면 프로그램이 프로세스가 된다는 것은 운영체제로부터 프로세스 제어 블록을 얻는다는 뜻이고, 프로세스가 종료된다는 것은 해당 프로세스 제어 블록이 폐기된다는 뜻이다.

문맥 교환

  • 문맥 교환은 CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업을 말한다. 이때 두 프로세스 제어 블록의 내용이 변경된다. 실행 상태에서 나가는 PCB에는 지금까지의 작업 내용을 저장하고, 실행 상태로 들어오는 PCB의 내용으로 CPU가 다시 세팅된다.
  • 다시 말해, 두 프로세서의 PCB를 교환하는 작업이 문맥 교환이다.
  • 문맥 교환이 일어나는 경우
    • 일반적으로 한 프로세스가 자신에게 주어진 시간을 다 사용하면 발생
    • 인터럽트가 걸렸을 때 발생

프로세스 구조

  • 프로세스는 코드 영역, 데이터 영역, 스택 영역으로 구성된다.
  • 예를 들어, 워드프로세서 프로그램을 실행하면 이 프로그램은 코드 영역에 탑재되고, 워드프로세서로 편집 중인 문서는 데이터 영역에 탑재된다. 운영체제가 워드프로세서를 작동하기 위해 사용하는 각종 부가 데이터는 스택 영역에서 관리한다.

  • 코드 영역
    • 프로그램의 본문이 기술된 곳(텍스트 영역)
    • 프로그래머가 작성한 프로그램은 코드영역에 탑재되며 탑재된 코드는 읽기 전용으로 처리
  • 데이터 영역
    • 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아 놓은 곳
    • 읽기와 쓰기가 가능
  • 스택 영역
    • 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳