본문 바로가기
IT/CS 노트

운영체제 내의 프로세스란?

by hatnim 2022. 10. 9.
반응형

1. 정의와 상태

초기의 컴퓨터 시스템은 한 번에 하나의 프로그램만을 실행하도록 허용했습니다. 이 프로그램이 시스템에 대한 완전한 제어를 가지고, 시스템의 모든 자원에 접근할 수 있었습니다. 그러나 점점 컴퓨터가 발전할수록 다양한 프로그램을 보다 견고하게 제어해야 할 필요성이 부각되었습니다. 이러한 필요성이 프로세스의 개념을 낳았으며, 프로세스란 실행 중인 프로그램을 말합니다. 프로세스는 현대의 시분할 시스템에서 작업의 단위입니다. 운영체제가 더욱 복잡해질수록, 사용자를 위해 보다 많은 기능이 기대됩니다. 비록 운영체제의 주 관심사는 사용자 프로그램을 실행하는 것이지만, 운영체제는 커널 자신의 바깥에 있는 것이 낫다고 판단된 다양한 시스템 작업들을 처리할 필요성도 있습니다. 그러므로 하나의 시스템은 프로세스들의 집합체입니다. 즉, 운영체제 프로세스들은 시스템 코드를 실행하고, 사용자 프로세스들은 사용자 코드를 실행합니다. 이들 모든 프로세스들은 잠재적으로 병행 실행이 가능하고 CPU는 이들 프로세스들 가운데서 다중화가 됩니다. 비공식적으로, 프로세스란 실행 중인 프로그램입니다. 프로세스는 때로는 텍스트 섹션으로 알려진 프로그램 코드 이상의 무언가입니다. 프로세스는 또한 프로그램 카운터의 값과 처리기 레지스터의 내용으로 대표되는 현재 활동을 포함합니다. 프로세스는 일반적으로 함수의 매개변수, 복귀 주소와 로컬 변수와 같은 임시적인 자료를 가지는 프로세스 스택과 전역 변수들을 수록하는 데이터 섹션을 포함합니다. 또한 프로세스는 프로세스 실행 중에 동적으로 할당되는 메모리인 힙을 포함합니다. 사람들이 많이 프로그램과 많이 혼동하지만 프로그램 그 자체는 프로세스가 아님을 기억해야 합니다. 프로그램은 수동적인 존재인 반면 프로세스는 다음에 실행할 명령어를 지정하는 프로그램 카운터와 관련 자원의 집합을 가진 능동적인 존재입니다. 각 프로세스의 상태는 NEW, READY, RUNNING, WAITING, TERMINATED 상태 중의 하나입니다. NEW 상태에서는 프로세스가 생성 중입니다. READY에서는 명령어들이 실행되고 있습니다. RUNNING에서는 프로세스가 어떤 사건(입출력 완료 또는 신호의 수신 같은)이 일어나기를 기다립니다. READY에서는 프로세스가 처리기에 할당되기를 기다립니다. TERMINATED에서는 프로세스의 실행이 종료되었습니다. 이들 이름들은 임의적입니다. 그렇지만 이들이 나타내는 상태들은 모든 시스템에서 찾아볼 수 있습니다. 각 프로세스는 운영체제 내에서 자신의 프로세스 제어 블록(PCB)에 의해 나타납니다. 한 프로세스는 실행되지 않을 때는 적절한 대기 큐에 놓이게 됩니다. 운영체제에는 크게 두 가지의 큐가 존재하는데, 입출력 요청 큐, 준비 완료 큐가 있습니다. 준비 완료 큐는 실행할 준비가 완료되어 CPU를 기다리고 있는 모든 프로세스를 가지고 있습니다. 앞서 말했듯이, 각 프로세스는 PCB로 나타납니다. 운영체제는 다양한 스케줄링 큐로부터 프로세스들을 선택해야 합니다. 장기 스케줄링이란 CPU를 차지하기 위해 경쟁하도록 허용하기 위해 프로세스를 선택하는 일을 말합니다. 반대로 단기 스케줄링은 준비 완료 큐로부터 하나의 프로세스를 선택하는 일입니다.

2. 프로세스 간 통신

운영체제 내에서 실행되는 프로세스들은 독립적인 프로세스이거나 또는 협력적인 프로세스입니다. 또한, 다른 프로세스들과 자료를 공유하는 프로세스는 상호 협력적인 프로세스입니다. 프로세스 협력을 허용하는 환경을 제공하는 데는 몇 가지 이유가 있습니다. 첫째, 여러 사용자가 동일한 정보에 흥미를 가질 수 있으므로, 그러한 정보를 병행적으로 접근할 수 있는 환경을 제공해야 합니다. 둘째, 만일 우리가 특정 일을 빨리 실행하고자 한다면, 우리는 그것을 서브일로 나누어, 이들 각각이 다른 서브일들과 병렬로 실행되게 해야 합니다. 이러한 가속화는 복수 개의 처리 코어를 가진 경우에만 달성할 수 있습니다. 마지막으로 편의성을 위해 협력할 수 있습니다. 개별 사용자들이 한순간에 작업할 많은 일을 가질 수도 있기 때문입니다. 협력적인 프로세스들은 서로 통신하기 위한 프로세스 간 통신 기법을 필요로 합니다. 통신은 주로 두 가지 방법으로 이루어지는데, 하나는 공유 메모리이며 다른 하나는 메시지 전달입니다. 공유 메모리 기법은 통신 프로세스들인 어떤 변수를 공유할 것을 필요로 합니다. 프로세스들은 이러한 공유 변수 사용을 통해 정보 교환을 합니다. 공유 메모리 시스템에서는, 통신을 제공하기 위한 책임이 응용 프로그래머에게 있습니다. 즉, 운영체제는 단지 공유 메모리만 제공해 줄 필요가 있는 것입니다. 메시지 전달 기법은 프로세스가 메시지를 교환하도록 허용합니다. 통신을 제공할 책임은 운영체제 자체에 있을 수 있습니다. 이 두 가지 기법은 서로 배타적인 방법은 아니며, 하나의 운영체제 내에서 두 방법이 같이 사용될 수 있습니다. 

반응형

댓글