프로세스의 개념
- 실행 중인 프로그램
- 비동기적 행위
- 실행 중인 프로시저
- 실행 중인 프로시저의 제어 추적
- 운영체제에 들어 있는 프로세스 제어 블록
- 프로세서에 할당하여 실행할 수 있는 개체 디스패치가 가능한 대상
💡
프로시저 : 루틴, 서브루틴, 함수와 같은 뜻으로 사용되며, 하나의 프로시저는 특정 작업을 수행하기 위한 프로그램의 일부이다. 또는 어떤 행동을 수행하기 위한 일련의 작업 순서를 말한다.
💡
디스패치 : 준비 리스트의 맨 앞에 있던 프로세스가 CPU를 점유하게 되는 것, 즉 준비 상태에서 실행 상태로 바뀌는 것을 디스패치라고 한다.
💡
프로세스 제어 블록(Process Control Block, PCB) : 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조. 운영체제가 프로세스에 대한 정보를 담고 있는 구조체 운영체제 → 커널 내부에 담겨져 있음
- 웹 브라우저를 하나 열면 프로세스 1개 생성, 2개 열면 2개 생성
- 프로그램 : 컴파일한 코드, 초기화 전역 변수, 문자열과 문자열 상수 등 정적 데이터를 포함하는 정적인 개체
- 프로세스 : 프로그램이 실행되어 동적인 상태로 변경

스택(Stack 영역)
- 데이터를 일시적으로 저장하는 영역
- 함수를 호출하는 경우, 함수의 반환 주소, 반환 값, 매개 변수와 같은 곳에 사용하기 때문에, 함수를 호출하면 사용 영역이 커지고 반환하면 줄어듬
- 힙과 인접한 방향으로 점점 커져 스택 포인터와 힙 포인터가 만나면 메모리가 소진됨을 의미
힙(Heap 영역)
- 코드 영역과는 별도로 유지되는 자유 영역
- 동적으로 메모리를 할당하려고 프로그램 실행 중 시스템 호출을 사용했다가 해제하는 방법으로 활용
- 동적 메모리 할당이 발생하면 위로 커짐
데이터(Data 영역)
- 프로그램의 가상 주소 공간
- 전역 변수나 정적 변수를 저장하고 할당하며 실행하기 전에 초기화
코드(Text 영역)
- 실행 명령을 포함하는 메모리이거나 목적 파일이 있는 프로그램 영역
- 프로그램을 시작할 때 프로세서가 디스크에서 읽어, 실행하는 프로그램을 코드영역에 저장
프로세스의 상태 변화와 상태 정보
프로세스의 상태 변화
- 운영체제가 프로세스를 생성하면 비실행 상태로 초기화해서 실행을 기다림
- 실행 중인 프로세스를 종료하거나 인터럽트가 발생하면 비실행 프로세스 중 프로세스 하나를 선택해 실행 상태로 바꿈
- 실행 중인 프로세스는 새로운 자원을 할당받기 위해 프로세서를 기다리는 비실행 상태로 바뀌기도 함
프로세스의 생명 주기

- new : 프로세스가 생성됨
- Running : CPU에 해당 프로세스를 점유시킴으로써, CPU가 실행되어 명령어가 실행
- Wating : CPU가 다른 작업을 끝낼 때 까지 기다리는 상태
- Ready : I/O에 대기하며 CPU가 점유되기 전 상태 (이 때, 작업은 Ready Queue에서 기다림)
- Terminated : 모든 작업을 마치고 종료한 상태
- running → ready Interrupt
- running → wating
상태 변화 과정
- 준비 → 실행 : 준비 큐(Ready Queue) 맨 앞에 있던 프로세스가 CPU를 점유하는 디스패치 과정 진행.
- 실행 → 준비 : 운영체제는 특정 프로세스가 CPU를 독점하지 않도록 Interrupt Clock을 두어 할당된 시간 동안만 CPU를 점유하도록 한다. 따라서 프로세스가 일정 시간이 되어도(timeout) CPU를 반환하지 않으면 Interrupt Clock이 Interrupt를 발생시켜 운영체제가 CPU의 제어권을 회수함
- 실행 → 대기 : 할당된 시간 이전에 프로세스에 입출력 연산이나 새로운 자원 요청 등의 문제로 프로세서를 스스로 양도할 때, 대기 상태로 변함
- 대기 → 준비 : 프로세스는 입출력 작업이 끝나면 wake up 으로 대기에서 준비 상태가 됨
프로세스가 스스로 하는 것은 대기 뿐이고 나머지는 외부 조건에 의해 발생
PCB(Process Control Block)
- 프로세스에 대한 모든 정보가 모여있는 곳, Task Control Block(TCB)라고도 함
- 프로세스의 상태, 프로세스 번호(PID), 해당 프로세스의 Program Counter(PC), Register값, MMU 정보, CPU 점유 시간 등이 포함되어 있음
- 운영체제 내부의 프로세스를 관리하는 코드 부분에 저장되어 있음

- CPU는 한 프로세스가 종료될 때까지 수행하는 것이 아니라 여러 프로세스를 중간 중간에 바꿔가면서 수행
- CPU는 수행중인 프로세스를 나갈 때, 해당 프로세스의 정보를 어딘가에 저장하고 있어야함
- 이러한 정보를 저장하는 곳이 PCB
프로세스의 스케줄링 알고리즘
- 프로세스 스케줄링은 운영체제에서 프로세스가 CPU를 할당 받는 순서를 정하는 것을 의미
- 스케줄링 알고리즘
인터럽트
- 인터럽트는 현재 실행 중인 프로세스를 중단하고, 다른 프로세스나 운영체제가 처리해야 할 일이 발생했을 때 실행되는 기능
- 타이머 인터럽트 : 정해진 시간이 지나면 발생하는 인터럽트로, 현재 실행 중인 프로세스를 중단하고 다른 프로세스에게 CPU를 양도
- 입출력(I/O) 인터럽트 : 입출력이 완료된 후 발생하는 인터럽트로, 대기하고 있던 프로세스 깨움
- 소프트웨어 인터럽트 : 소프트웨어에서 발생하는 인터럽트로, 예외 상황이나 시스템 호출 등으로 발생
프로세스 동기화
💡
여러 개의 프로세스가 동시에 실행될 때, 서로가 영향을 주지 않도록 프로세스 간의 상호작용을 조절하는 것을 프로세스 동기화라고 함
- 여러 프로세스가 서로 협력해 공유 자원을 사용하는 상황에서 경쟁(race condition)이 발생하면 공유 자원의 신뢰성이 떨어짐
Critical Section(임계 영역)
- 공유 데이터를 접근하는 코드 부분을 의미
- 하나의 프로세스만 사용할 수 있는 구역
- 공유되는 자원에서 문제가 발생하지 않도록 독점 보장
- Mutual Exclusion(상호 배제)
- Progress(진행)
- Bounded Waiting(한정 대기)
프로세스 동기화 방법
💡
상호 배제 기법이란 임계 구역을 어느 시점에서 단 하나의 프로세스만 사용할 수 있도록 하며, 다른 프로세스가 현재 사용중인 김계 구역에 대해 접근하려고 할 때 이를 막아주는 행위
- 뮤텍스(Mutex) : 공유 자원에 대한 접근을 제어하기 위해 사용되는 동기화 기법
- 세마포어(Semaphore) : 뮤텍스와 유사한 동기화 기법으로, 공유 자원에 대한 접근을 제어하기 위해 사용 됨
프로세스간 통신(IPC, Inter-Process Communication)
파이프(Pipe)
- 부모와 자식 프로세스 간의 단방향 통신을 위해 사용되는 IPC 기법
- 파이프는 파일 디스크립터를 사용하여 구현
- 파이프는 선입선출(FIFO) 구조를 가지며, 한쪽에서 쓰고 다른 한쪽에서 읽는 방 식으로 이루어짐
- fork()로 자식 프로세스를 만들었을 때 부모로부터 자식에게로 데이터를 전송하는 방법
💡
파일 디스크립터란 리눅스 혹은 유닉스 계열의 시스템에서 프로세스가 파일을 다룰 때 사용하는 개념으로, 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값
💡
파이프는 여러 개의 프로세스가 공통으로 사용하는 임시 공간이라고 할 수 있음

- 두 개의 프로세스가 통신할 때는 읽기 전용 파이프와 쓰기 전용 파이프 두 개를 사용

메시지 큐(Message Queue)
- 두 프로세스 간의 양방향 통신을 위해 사용되는 IPC 기법
- 메시지 큐는 커널이 관리하는 메시지 버퍼를 사용하여 구현
- 메시지 큐는 선입선출(FIFO) 구조를 가지며, 메시지는 우선순위를 가질 수 있음
- 파이프처럼 부모 자식 관계일 필요가 없음
- 양방향을 기본적으로 지원

공유 메모리(Shared Memory)
- 두 개 이상의 프로세스가 같은 물리 메모리 영역을 공유하도록 하는 IPC 기법
- 공유 메모리는 커널이 관리하는 메모리 영역을 사용하여 구현
- 공유 메모리는 성능이 뛰어나지만, 동기화에 주의해야 함
- 생성된 공유 메모리는 커널에 의해 관리됨
- 프로세스 A에서 공유 메모리 생성

- 프로세스 A에 공유 메모리 첨부 및 사용

- 프로세스 B도 공유 메모리 첨부 및 사용

멀티 프로세서와 멀티 코어
- 멀티 프로세서 : 여러 개의 CPU를 가지고 있는 컴퓨터
- 멀티 코어 : 하나의 CPU안에 여러 개의 코어가 있는 컴퓨터
- 멀티 프로세서와 멀티 코어는 다중 처리 방식으로 한번에 여러 개의 프로세스나 스레드를 실행하여 성능을 향상 시킴
'CS > 운영체제' 카테고리의 다른 글
메인 메모리 (0) | 2023.06.19 |
---|---|
스레드 (1) | 2023.06.13 |
데드락(Deadlock) (0) | 2023.03.26 |
스핀락, 뮤텍스, 세마포어 (0) | 2023.03.19 |
1강 운영체제 개요 (0) | 2023.02.21 |