CS/운영체제
[CS - 운영체제] 프로세스와 멀티 프로세스 (Process, Multi Process)
itisjustK
2023. 4. 1. 19:41
프로세스 (Process)
- 개념
- 일종의 명령어 리스트 또는 실행 파일인 프로그램이 하드 디스크에서 메모리로 적재되어, CPU에게 할당받아 실행(연산)되는 프로그램
- 흐름
- 우리가 코딩을 해서 프로그램을 작성
- 컴파일
- 하드디스크(HDD)에 프로그램 저장
- RAM 메모리에 적재
- CPU가 직접 접근해서 CPU에 할당
- CPU가 프로그램을 한줄 한줄 읽으며 처리함
- 명령어 처리가 진행되면 프로그램은 프로세스가 되었음
- 메모리
- 메모리 : CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억장치. 우리가 말하는 메모리는 RAM 메모리를 의미한다.
- 메모리에는 4가지 영역이 존재한다.
- 코드 : 프로그램의 코드를 저장하는 메모리 영역
- 데이터 : 프로그램의 전역 변수, static 변수를 저장하는 메모리 영역
- 힙 : 프로그래머가 직접 공간을 할당(malloc)/해제(free)하는 메모리 영역, 런타임에서 크기가 결졍된다.
- 스택 : 프로그램에서 함수를 호출할 때 선언되는 지역 변수, 매개 변수를 저장하는 임시 메모리 영역, 컴파일에서 크기가 결정된다.
- → 코드에서 스택으로 갈수록 메모리 주소값이 높아진다
- 프로그램이 메모리에 적재되어야 하는 이유는 CPU가 메모리에 있는 프로그램에만 직접 접근할 수 있기 때문이다.
- CPU의 프로세스 처리 메커니즘
- CPU 내부에 있는 PC(Program Counter) register에 저장된 코드 주소값을 바탕으로 프로세스를 처리
- PC register
- 다음에 실행될 코드의 주소값이 저장되어 있음
- 일종의 CPU만의 네이버 맵 내지 네비게이션. 어디로 갈지 알려준다
- PC register
- PC register가 메모리의 코드 영역에 다음 코드 주소값을 가리킨다 == PC register에 다음 코드 주소값이 저장되어 있다
- CPU는 PC register에 저장되어 있는 주소값을 순차적으로 확인하면서 메모리의 코드 영역에 있는 코드를 처리한다 (다 같은 말)
- CPU 내부에 있는 PC(Program Counter) register에 저장된 코드 주소값을 바탕으로 프로세스를 처리
멀티 프로세스 (Multi Process)
- 개념
- 말 그대로, 여러 개의 프로세스가 실행되는 것 (ex. 롤 하면서 유튜브로 노래 틀고, 카카오톡도 하고, 인터넷으로 맛집 검색도 하고)
- 근데 CPU 1개가 여러 프로세스를 처리할 수도 있고, 여러 CPU가 여러 프로세스를 처리할 수도 있음
- 전자는 동시성 (Concurrency), 후자는 병렬성 (Parallelism)
- 동시성, Concurrency
- CPU core가 1개일 때 (single core) 여러 개의 프로세스를 짧은 시간동안 번갈아 처리하는 것
- 번갈아서 처리하기 때문에 동시에 처리하는 것처럼 보임
- 번갈아 처리하기 위해선 CPU의 시간을 쪼개서 프로세스를 처리하는데, 이를 시분할 시스템(time sharing system)이라고 함
- 하나의 CPU가 여러 프로세스를 담당한다 == “프로세스들은 CPU를 공유한다”
- 병렬성, Parallelism
- CPU core가 여러 개일 때 (multi core) 각각 CPU가 각각 프로세스를 하나씩 맡아서 처리하는 것
- 실제로 여러 CPU가 동시에 프로세스를 처리함
- 병렬성, 동시성이 동시에 발생할 수도 있음
- 메모리 관리
- 하나의 메모리에 여러 프로세스를 적재할 수 있음
- 따라서, 여러 프로세스들이 서로의 영역을 침범하지 않도록 운영체제가 관리함
- base register, limit register를 통해 각 process를 처리할 때에는 정해진 메모리 구간 외에는 접근할 수 없도록 막는다.
- 하나의 메모리에 여러 프로세스를 담는다 == “프로세스들은 메모리를 공유한다”
CPU의 multi process 처리 메커니즘
설명에 필요한 개념들부터 살펴보자
- Context
- "하나의 CPU는 여러 프로세스를 번갈아가면서 처리해야 한다. 그러기 위해선 각 프로세스들이 어디까지 연산을 처리했고, 어디 할 차례이고, 지금은 어떤 상태고 … 등에 대한 정보가 필요하다. 이걸 Context라고 한다."
- 각 프로세스의 진행 상황 및 상태 정보
- 시분할 시스템에서는 한 프로세스가 매우 짧은 시간동안 CPU를 점유하여 일정 부분의 명령 수행하고 다른 프로세스에게 넘겼다가 다시 받음
- 이런 상황에서 각 프로세스의 이전 진행 상황 정보가 필요하며, 이를 Context라고 함
- Context는 PCB(Process Control Block)에 저장됨
- PCB (Process Control Block)
- "Context를 저장할, 담을 곳이 필요하다. 그게 PCB다. 각 프로세스에 대한 PCB들은 한 곳에 모아서 저장한다. 운영체제 프로세스를 담당하는 커널 스택이라고 하는 곳에 일괄 저장한다. 커널 스택은 메모리 최상단에 위치해있다."
- 운영체제가 프로세스를 표현한 자료구조
- 중요한 정보이기 때문에 일반 사용자들이 접근하지 못하도록 보호된 메모리 영역 내부에 저장
- 일부 PCB는 커널 스택에 위치 → 보호 받으면서 접근이 편리함
- 정보 종류
- Process State - new, running, ready, waiting, halted 등
- Process Number - 해당 프로세스의 number
- Program Counter - 명령어 주소
- Registers
- Memory Limits
- 메모리 정보, CPU 스케쥴링 정보, 우선순위 등
- Context Switch
- "CPU가 처리하는 프로세스를 바꾸는 것. 근데 이제 Save & Read를 곁들인 …"
- 한 프로세스에서 다른 프로세스로 CPU 제어권을 넘겨주는 것
- 이때 기존 프로세스 상태를 PCB에 저장하고 보관, 다음 프로세스의 PCB를 가져와서 프로세스 상태 복구 하는 과정이 있음
- 전체 흐름
- 프로세스1 진행
- 바꿔야 함
- 프로세스1 의 Context → PCB1에 저장
- PCB2에서 프로세스2 Context 불러오기
- 프로세스2 복구 후 진행
- 바꿔야 함
- 프로세스2 PCB2에 Context
- … 반복