프로세스
컴퓨터에서 현재 실행 중인 프로그램을 프로세스라고 한다. ctrl+shift+tab 단축키를 통해 작업 관리자를 열어 보면 현재 실행 중인 프로그램들, 즉 프로세스의 목록을 확인할 수 있다. 자주 헷갈리는 부분인데, 프로세서(Processor)는 CPU를 뜻하며 프로세스(Process)와는 완전히 다른 개념이다. 과거에 프로그램의 실행은 일괄 처리, 즉 작업(job)이었으나 이후에 태스크의 시분할 시스템으로 발전하였다.
프로세스 구조
프로세스 메모리는 다음과 같이 스택 섹션, 힙 섹션, 데이터 섹션, 텍스트 섹션으로 나뉜다.
- 스택 섹션 : 지역 변수, 파라미터와 같은 함수 호출 시에 임시 데이터들이 저장되는 장소이다. 함수를 호출할 때마다 파라미터를 저장한다.
- 힙 섹션 : 프로그램 실행 중 동적 할당되는 메모리를 위한 공간이다.
- 데이터 섹션 : 프로그램 실행에 필요한 전역 변수, 또는 static 변수를 저장한다.
- 텍스트 섹션 : 프로그램의 소스 코드, 즉 명령어들이 존재하는 공간이다.
프로세스 상태
- new : 프로세스가 새로 생성된다.
- running : 텍스트 섹션이 실행된다.
- waiting : 프로세스가 어떤 이벤트가 일어나기를 기다린다.(I/O 작업 등)
- ready : 프로세스가 처리기에 할당되기를 준비한다.
- terminate : 프로세스 실행이 종료된다.
CPU는 디스크나 RAM의 작업에 비해 속도가 엄청 빠르기 때문에 CPU 자원이 낭비되는 것은 컴퓨터의 입장에서 큰 손해이다. 따라서 I/O 작업이 일어나 프로세스의 작업이 멈추면, 원래의 프로세스는 waiting 상태로 둔 채 CPU는 재빨리 다른 프로세스를 실행해야 한다. I/O 작업이 끝나면 원래의 프로세스는 ready 상태가 되고 CPU는 원래의 프로세스 작업으로 돌아간다. 이러한 과정을 컨텍스트 스위칭이라고 한다.
문맥 교환(Context switching)
단일 CPU 코어는 한번에 하나의 프로세스만을 실행할 수 있기 때문에, 현재 작업 중인 프로세스의 상태를 저장한 후 다음 태스크의 정보를 읽어온다. 나중에는 원래 작업 중이던 태스크를 다시 수행하기 위해 저장해 둔 프로세스의 상태를 복구한다. 이 과정에서 필요한 프로세스 정보들은 그 프로세스의 프로세스 제어 블록(PCB)에 저장된다.
인터럽트 또는 시스템 콜이 발생하면 프로세스는 waiting 상태가 되고, 문맥 교환을 하여 다른 프로세스의 작업으로 넘어간다. OS나 PCB가 복잡할수록 문맥 교환도 길게 일어나는데, 문맥 교환 중에는 CPU가 활동을 하지 않는 상태이기 때문에 오버헤드의 문제가 있다. 따라서 문맥 교환은 가능한 적게 일어나는 편이 좋다.
단일 코어 CPU가 하나의 프로세스만을 실행할 수 있음에도 컴퓨터에선 많은 프로세스들이 동시에 실행된다. 이는 실제로 프로세스들이 동시에 실행되고 있는 것이 아니라, CPU가 문맥 교환을 무수히 반복하면서 수많은 프로세스가 마치 동시에 실행되고 있는 것처럼 보이는 것이다. 이를 병행성(Concurrency)이라고 한다.
OS는 프로그램을 실행하고 사용자가 컴퓨터 시스템을 사용하기에 편리하게 하는 것을 목적으로 한다. OS는 다양한 기능들을 수행하는데, 제어 프로그램으로서 하드웨어 자원을 여러 응용 프로그램들이 효과적으로 나누어 사용할 수 있도록 감시하거나 입출력 연산, 파일 시스템 조작 등에 관여하고 오류 탐지, 보안 등의 기능또한 수행한다. 프로세스들에게 CPU나 메모리 자원을 어떻게 할당하는지가 컴퓨터 시스템 성능에 크게 관여하는 부분인 만큼 OS에게 있어 다수의 프로세스가 실행될 때 효율적인 자원 할당은 매우 중요한 임무이다.
참고자료
Abraham Silberschatz, Peter Baer Galvin, Greg Gagne 저, 운영체제(Operating System Concepts), 퍼스트북
'운영체제' 카테고리의 다른 글
[OS] CPU 스케줄링, 스케줄링 알고리즘(FCFS, SJF, RR, RMS, EDF) (1) | 2023.08.31 |
---|