1. 정의
메모리에 올라가 실행중인 프로그램으로 응용프로그램은 프로세스가 아님
응용프로그램이 파일 형태로 저장된 경우 : 코드 이미지 또는 바이너리
2. 프로세스와 운영체제
운영체제는 응용프로그램을 실행시켜 프로세스를 생성하고 프로세스의 실행, 중단, 종료를 관리
3. 프로세스 스케줄링
프로세스 실행과 관련된 운영체제의 기능
어느 시점에 어떤 프로세스를 실행시킬건지에 관련된 규칙들
하나의 프로세스가 실행되는 동안 다른 프로세스는 실행 불가
실행중인 프로세스가 끝날때까지 기다렸다가 다음 프로세스를 실행시켜야 하는 문제가 발생
➲ 스케줄링 등장
1) 배치처리 시스템
자료구조 중 큐(FIFO)를 사용하는 스케쥴링
- 실행되어야 할 프로세스들을 미리 등록시킴
- 프로세스의 실행이 종료되면 자동으로 다른 프로세스가 실행됨
- 사용자가 첫번째 프로세스가 끝났는지 확인할 필요없이 os가 알아서 순차적으로 프로그램을 실행시킴
문제 : 한번에 하나의 프로그램만 실행 가능 & 어떤 프로그램의 실행시간이 길면 다른 프로그램 실행까지의 시간이 오래 걸림
2) 시분할 시스템
한대의 컴퓨터 계정을 나눠 계정별로 여러 사용자가 사용하는 경우 각 계정별로 쉘이 실행됨
해당 컴퓨터가 배치처리 시스템 스케쥴링을 사용하면 A계정에서 쉘프로그램이 종료되어야만 B계정의 쉘프로그램이 실행
동시 사용이 불가하고 요청을 해도 다른 계정에서 사용중인 경우 응답시간이 지연됨
➲ 시분할 시스템의 등장
- 다중 사용자 지원을 위해 컴퓨터 응답 시간을 최소화하는 시스템
- 시간을 세밀하게 분할하여 하나의 응용 프로그램이 cpu를 점유하는 시간을 잘게 쪼개어 실행될 수 있게 하는 시스템(1/10초)
- 프로세스 A, B, C가 존재하는 경우 : 프로세스A를 1/10초 실행, 프로세스 B를 1/10초 실행, 프로세스 C를 1/10초 실행후, 다시 프로세스A가 1/10초 실행 => 최소 3/10초 안에 진행됨
3) 멀티태스킹 시스템
- 멀티태스킹 시스템의 구현은 시분할 시스템과 동일(목적이 다름)
- 단일 CPU에서 여러 응용 프로그램이 동시에 실행되는 것 처럼 보이도록 하는 시스템(단일 CPU에서는 하나의 프로그램만 실행이 가능)
- 시분할 시스템보다 더 짧은 단위로 실행 응용 프로그램이 바뀜 : 사람이 눈으로는 두 프로세스가 동시에 실행되는 것 처럼 보임
4. 멀티프로그래밍
- 구현은 시분할시스템, 멀티태스킹과 유사한면이 있으나 목적이 다름
- CPU를 최대한 많이 사용하고자 하는 시스템
메모리가 계층구조를 가짐에 따라 CPU가 메모리에 접근하는 속도가 달라짐
저장매체(메모리)에 데이터가 저장된 경우,
- case1) 레지스터에 데이터가 있는 경우 CPU가 한 사이클 만에 데이터를 가져와 실행할 수 있음
- case2) HDD에 데이터가 있는 경우 CPU가 데이터를 가져오는 시간이 길어지고, 데이터를 가져오는 동안 다른 작업 없이 대기
- CPU를 현재 사용할 수 없는 프로그램을 CPU를 바로 사용할 수 있는 프로그램으로 교체해 CPU를 최대한으로 사용
ex. 파일 열기를 요청한 경우, 열리는 동안 CPU를 사용하지 않기 때문에 그 동안 다른프로그램을 실행시켜 프로세스로 만들어줌
프로그램을 만들 때 성능을 개선하기 위해서는 메모리(코드가 아니라 데이터나 파일을 메모리에서 실행)에서 실행시킬 수 있는 프로그램을 개발
➲ CPU가 접근하는 시간이 짧아지고 성능이 향상됨
4. 프로세스 알고리즘
- FIFO 스케줄러: 큐에 실행시킬 프로그램을 등록 - 큐에서 등록된 순서대로 프로세스를 실행시키는 알고리즘
- SJF 스케줄러 : 우선순위 큐, 최소힙을 사용, 프로세스 실행시간이 가장 짧은 프로세스를 먼저 실행시키는 알고리즘
- 우선순위 기반 스케줄러
- 정적 우선 순위 : 프로세스마다 우선순위를 미리 정함
- 동적 우선 순위 : 스케줄러가 상황에 따라 동적으로 우선순위를 정함
- Roun Robin 스케줄링 알고리즘 : 큐에 실행시킬 프로그램을 순서대로 배치하여 실행 - 일정 시간 동안 프로세스가 완료되지 않으면 종료시킨 후, 큐에 종료된 프로세스를 다시 넣고 다른 프로세스를 실행하는 방식을 반복
5. 프로세스 상태정보
- new(생성) : 프로세스를 생성하는 중인 상태
- ready(실행가능) : 실행준비 완료
- running(실행) : CPU에서 실행상태
- blocked(대기) : 실행이 불가한 상태
- exit(종료) : 프로세스를 완전히 종료하기 위한 상태