[24] 시스템 보안 :: 프로세스의 정의, 상태, PCB(프로세스 제어 블록)
프로세스란 실행중인 프로그램을 말한다. 프로그램은 디스크에 저장되어 있는 반면에 프로세스는 주 메모리에 적재된다. 프로그램은 메모리에 적재되어 실행되게 되고 이때 프로세스라고 칭하는 것이다. 프로세스는 텍스트 섹션, 스택, 힙, 데이터 섹션 등을 메모리에서 갖고 있다. 텍스트 섹션은 프로그램 코드를 포함하고 있고, 스택은 함수의 매개변수, 복귀 주소, 지역 변수 등의 임시적인 데이터들을 가진다. 그리고 힙은 프로세스 실행 중에 동적으로 할당되는 메모리를 의미하며, 데이터 섹션에는 전역 변수들이 포함되어 있다. 프로세스는 또한 프로그램 카운터 및 연관된 처리기 레지스터 값 등의 자원들도 가진다. 프로그램 카운터(PC, Program Counter)란, 다음에 실행할 명령어의 주소를 가리킨다. 우리가 실행 파일이라고 부르는 것들은 프로그램으로 간주되는데, 실행 파일을 더블 클릭해서 실행하게 되면, 이것이 주메모리에 적재되어 프로세스가 되는 것이다. 곧 실행할 수 있는 PCB(Process Control Block)을 갖는 프로그램도 프로세스라고 칭한다. PCB란 운영체제가 해당 프로세스를 관리하는데 필요한 모든 정보를 저장 및 유지하는 블록으로서 프로세스의 현재 상태, 고유 식별자, 우선 순위 등의 정보를 갖는 블록을 의미한다. 이 PCB는 태스크 제어 블록이라고도 한다.
프로세스는 실행되면서 상태가 계속 변한다. 프로세스의 상태에는 보류 상태(pending), 준비 상태(ready), 실행 상태(running), 대기 상태(blocked, waiting), 완료 상태(terminated)가 있다. 프로세스는 이러한 상태들 중 하나의 상태에 있을 수 있다. 보류 상태란 프로세스가 일시 중지되거나 디스크에 저장된 상태를 말한다. 준비 상태란 프로세스가 CPU에 할당되기를 기다리는 상태를 말한다. 실행 상태란 프로세스가 CPU를 차지하여 해당 프로세스의 명령어들이 실행되고 있는 상태를 말한다. 대기 상태란 프로세스가 CPU를 차지하여 실행되다가 입출력 처리 또는 신호의 수신 같은 사건이 발생하게 되면, CPU를 양도하여 해당 사건이 완료될 때까지 대기 큐에서 기다리는 상태를 말한다. 완료 상태란 프로세스가 실행을 종료한 상태를 말하며, 종료된 프로세스는 시스템에서 제거되고 관련 PCB도 삭제된다. 중요한 점은, 어떠한 한 순간에 한 처리기는 하나의 프로세스만 실행시키고 있을 수 있다는 점이다.
프로세스의 상태가 바뀌는 것을 프로세스 상태 전이라고 하며, 케이스들을 살펴보겠다. 먼저, 준비 상태에서 실행 상태로 변하는 것을 디스패치라고 한다. 프로세스가 디스패치되어 CPU를 차지하여 실행되고 있다가 할당시간을 초과하면 다시 준비 상태로 들어가게 된다. 또는 실행 상태였던 프로세스가 입출력 명령을 만나거나 신호를 수신 받는 일이 생기게 되면 대기 상태로 바뀌게 된다. 이렇게 대기 상태로 전환된 프로세스는, 입출력이 종료되는 등, 일어났던 사건이 종료되었을 때, 다시 준비 상태로 전환된다.
PCB에 대해 좀 더 자세히 알아보겠다. 위에서 정리하였듯이 PCB(Process Control Block)이란, 특정 프로세스와 연관된 모든 정보들을 수록하고 있는 저장소를 말한다. 이 PCB에는 프로세스 상태, 프로그램 카운터, CPU 레지스터들, CPU 스케줄링 정보, 메모리 관리 정보, accounting 정보, 입출력 상태 정보 등의 정보들이 포함되어 있다. PCB는 프로세스 디스크립터라고 하여 프로세스가 생성될 때 만들어지며, 모든 프로세스는 고유한 프로세스 디스크립터를 갖는다. CPU를 다른 프로세스에게 넘겨주어야 하는 상황(인터럽트 발생 등)이 되면, 원래 CPU를 사용하고 있었던 프로세스의 모든 정보를 PCB에 저장시키고, 이후에 다시 실행시키고자 할 때 PCB에 저장했었던 모든 정보들을 다시 사용한다. 참고로 이 과정을 문맥 교환(Context Switch)이라고 한다. Linux 운영체제에서의 PCB는 C 언어의 task_struct로 표현되며, Linux 안에서의 모든 활성 프로세스들은 이 task_struct의 이중 연결 리스트로 표현된다.
'컴퓨터 · IT > 정보보안기사' 카테고리의 다른 글
[26] 시스템 보안 :: 프로세스 스케줄링 알고리즘, FIFO, SJF, HRN, RR, SRT, MLQ, MFQ (0) | 2018.12.23 |
---|---|
[25] 시스템 보안 :: 프로세스 스케줄링, 장기 스케줄러, CPU 스케줄러, 선점, 비선점 스케줄링 (0) | 2018.12.22 |
[23] 시스템 보안 :: 운영체제 시스템의 종류, 입출력, 버퍼링, 스풀링, 인터럽트 (0) | 2018.12.20 |
[22] 시스템 보안 :: 부트로더, 부팅, 운영체제의 구조 (0) | 2018.12.19 |
[21] 시스템 보안 :: 운영체제 정의, 이중모드, 시스템호출, system call (0) | 2018.12.18 |