- 사용자가 보는 앞에서 실행되는 프로세스를 포그라운드 프로세스라고 한다.
- 사용자가 보지 못하는 뒷 편에서 실행되는 프로세스를 백그라운드 프로세스라고 한다
백그라운드 프로세스를 유닉스 체계의 운영체제에서는 데몬이라고 부르고, 윈도우 운영체제에서는 서비스라고 부릅니다.
프로세스 제어 블록
- 운영체제는 빠르게 번갈아 수행되는 프로세스의 실행순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분한다. (PCB)
- PCB는 커널 영역에서 실행된다. PCB로 특정 프로세스를 식별하고, 해당 프로세스를 처리하는 데 필요한 정보를 판단한다.
프로세스 ID
- 프로세스 ID (이하 PID)는 특정 프로세스를 식별하기 위해 부여하는 고유한 번호이다.
- 같은 일을 수행하는 프로그램이라 할지라도 두 번 실행하면 PID가 다른 두 개의 프로세스가 생성된다.
레지스터 값
- 프로세스는 자신의 실행 차례가 돌아오면 이전까지 사용했던 레지스터의 중간값을 모두 복원한다.
- PCB 안에는 해당 프로세스가 실행되며 사용했던 프로그램 카운터를 비롯한 레지스터 값이 담긴다.
프로세스 상태
- 프로세스 상태 정보가 PCB에 저장된다.
CPU 스케줄링 정보
- 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보도 PCB에 기록된다.
메모리 관리 정보
- PCB에는 프로세스가 어느 주소에 저장되어 있는지에 대한 정보가 있어야 한다.
문맥 교환(Context Switching)
- 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보를 문맥(context)라고 한다.
- 하나의 프로세스 문맥은 해당 프로세스의 PCB에 표현되어 있다.
- 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로 부터 복구하여 새로운 프로세스를 실행 하는 것을 문맥 교환(context switching)이라고 한다.
프로세스의 메모리 영역
- 하나의 프로세스는 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.
코드 영역
- 코드 영역은 텍스트 영역이라고 한다. 기계어로 이루어진 명령어가 저장된다. 코드 영역에는 CPU가 실행할 명령어가 담겨 있기 때문에, 쓰기가 금지되어 있다(read-only)
데이터 영역
- 데이터 영역은 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간이다.
- 전역 변수가 대표적이다.
- 코드 영역과 데이터 영역은 정적 할당 영역이다.
- 힙 영역과 스택 영역은 동적 할당 영역이다.
힙 영역
- 힙 영역은 프로그램을 만드는 사용자, 프로그래머가 직접 할당할 수 있는 저장 공간이다. 프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면, 언젠가는 해당 공간을 반환해야 한다.
- 메모리 공간을 반환하지 않는다면, 할당된 공간은 메모리 내에 계속 남아 메모리 낭비를 초래한다. 이런 문제를 메모리 누수라고 한다.
스택 영역
- 스택 영역은 데이터를 일시적으로 저장하는 공간이다.
- 함수의 실행이 끝나면 매개 변수, 지역 변수가 대표적이다.
- 힙 영역과 스택 영역은 실시간으로 그 크기가 변할 수 있기 때문에, 동적 할당 영역이라고 부른다.
프로세스 상태
생성 상태
- 프로세스를 생성 중인 상태를 생성 상태라고 한다. 생성 상태를 거쳐 실행할 준비가 완료된 프로세스는 곧바로 실행되지 않고 준비 상태가 되어 CPU의 할당을 기다린다.
준비 상태
- 준비 상태는 당장이라도 CPU를 할당받아 실행할 수 있지만, 아직 자신의 차례가 아니기에 기다리고 있는 상태이다. 준비 상태 프로세스는 차례가 되면 CPU를 할당받아 실행 상태가 된다.
실행 상태
- 실행 상태는 CPU를 할당받아 실행중인 상태를 의미한다.
- 타이머 인터럽트가 발생하면, 준비 상태가 되고
- 실행 도중 입출력 장치를 사용하여 입출력 장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 된다.
대기 상태
- 입출력장치의 작업을 기다리는 상태를 대기 상태라고 한다.
종료 상태
- 종료 상태는 프로세스가 종료된 상태이다. 프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리한다.
프로세스 계층 구조
- 새 프로세스를 생성한 프로세스를 부모 프로세스, 부모 프로세스에 의해 생성된 프로세스를 자식 프로세스라고 한다.
- 자식 프로세스의 PCB에 부모 프로세스의 PID인 PPID가 기록되기도 한다.
- 데몬이나 서비스 또한 최초 프로세스의 자식 프로세스이다.
프로세스 생성 기법
- 부모 프로세스를 통해 생성된 자식 프로세스들은 복제와 옷 갈아입기를 통해 실행된다.
- 부모 프로세스는 fork 를 통해 자신의 복사본을 자식 프로세스로 생성하고, 만들어진 복사본은 exec 를 통해 자신의 메모리 공간을 다른 프로그램으로 교체된다.
스레드
- 스레드는 프로세스를 구성하는 실행의 흐름 단위이다.
- 실행의 흐름 단위가 하나라는 점에서 이렇게 실행되는 프로세스들은 단일 스레드 프로세스라고 볼 수 있다.
- 프로세스의 스레드들은 실행에 필요한 최소한의 정보(프로그램 카운터를 포함한 레지스터, 스택)만을 유지한 채 프로세스 자원을 공유하며 실행된다.
멀티프로세스와 멀티스레드
- 여러 프로세스를 동시에 실행하는 것을 멀티프로세스라고 한다.
- 여러 스레드로 프로세스를 동시에 실행하는 것을 멀티 스레드라고 한다.
- 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유한다.
- 스레드는 각기 다른 스레드 ID, 프로그램 카운터 값을 포함한 레지스터 값, 스택을 가질 뿐 프로세스가 가지고 있는 자원을 공유한다.
- 스레드가 공유하는 자원: 코드, 데이터, 힙, 파일
- 스레드마다 따로 가지는 자원: 스레드1(레지스터, 스택, 프로그램 카운터), 스레드 2(레지스터, 스택, 프로그램 카운터)
프로세스 간 통신
- 프로세스 간 자원을 공유하고 데이터를 주고 받는 것을 프로세스 간 통신(IPC: Inter-Process Communitcation)이라고 부른다.
- 프로세스들은 서로 공유하는 메모리 영역을 두어, 데이터를 주고받을 수 있는데 프로세스들이 공유할 수 있는 메모리 영역을 공유 메모리(shared memory)라고 한다.
- 프로세스들은 소켓, 파이프 등을 통해 통신 가능하다.
'📗 BOOK > 혼자 공부하는 컴퓨터구조+운영체제' 카테고리의 다른 글
혼자 공부하는 컴퓨터 구조+운영체제 12장 정리 (0) | 2024.07.31 |
---|---|
혼자 공부하는 컴퓨터 구조+운영체제 11장 정리 (0) | 2024.07.27 |
혼자 공부하는 컴퓨터 구조+운영체제 9장 정리 (0) | 2024.07.25 |
혼자 공부하는 컴퓨터 구조+운영체제 8장 정리 (0) | 2024.07.25 |
혼자 공부하는 컴퓨터 구조+운영체제 7장 정리 (0) | 2024.07.25 |