- 시스템의 자원(CPU, 메모리)과 동작(프로세스 처리)을 관리하는 소프트웨어
- 프로세스, RAM, 사용자, 하드웨어를 관리
- ex) Windows, Mac, Linux
- Code : 프로그램의 코드를 담는 공간
- Data : 프로그램의 전역 변수, 정적 변수를 담는 공간
- Heap : 사용자가 관리하는 동적 할당 공간 (런타임에 크기 결정)
- Stack : 함수 정보, 지역 변수, 매개변수 (컴파일 타임에 크기 결정)
1. 사용자가 운영체제에 프로그램 실행 요청
2. 운영체제가 하드디스크에 위치한 프로그램의 정보를 읽어 RAM에 로딩
3. CPU는 RAM에 로딩된(code 공간) 프로그램 코드를 가져다가 메모리 관리 및 명령어 실행
4. 동적메모리가 Heap에 할당되면 FreeStore 영역 사용
5. 스택메모리가 할당되면 FreeStore 영역 사용
- 실행 중인 프로그램
- 운영체제로부터 프로세스는 CPU와 독립된 메모리영역(Code, Data, Heap, Stack)을 할당받음
- 최소 1개의 쓰레드를 가짐
- 하나의 프로세스는 별도의 메모리 주소 공간에서 실행되며, 다른 프로세스의 메모리 영역에 접근 불가
- 프로세스 안에 있는 실행 단위
- 하나의 프로세스 내에서 쓰레드끼리 CPU와 Code, Data, Heap을 공유하지만 각 쓰레드는 독립된 Stack을 가짐
- 운영체제가 Ready Queue에 있는 프로세스들을 CPU에 특정 알고리즘에 따라 할당하는 방법
- CPU는 한번에 하나의 프로세스만 처리할 수 있지만, CPU 스케줄러에 의해 마치 여러개의 프로세스를 동시에 처리하는 것처럼 동작하게끔 가능
- 알고리즘 종류
- 비선점 스케줄링
- 정의 : CPU에 하나의 프로세스가 실행되는 동안 다른 프로세스들은 끝날 때까지 기다리는 방식
- (1) First Come First Served
- CPU에 요청하는 프로세스 순서대로 처리하는 기법
- (2) Shortest Job First
- Burst time, 즉 각 프로세스의 총 실행 시간, 이 짧은 순으로 CPU가 처리하여 프로세스의 평균 대기 시간을 최소화하는 스케줄링
- 선점 스케줄링
- 정의 : CPU에 하나의 프로세스가 실행 중이여도 채 끝나기도 전에 다른 프로세스가 선점하여 실행될 수 있는 방식
- (1) Shortest Remaining Time
- CPU에 실행 중인 프로세스가 있어도 최소 잔여 Burst Time을 가지는 프로세스가 즁건애 생기면 중도 sleep 시키고 해당 프로세스를 먼저 할당하는 방식
- (2) Round Robin
- CPU에 정해진 Time Quantum 만큼 프로세스가 균등하게 돌아가면서 실행되는 방식
- Time Quantum이 너무 크면 FCFS처럼 되고, 너무 작으면 Context Switch가 많이 일어나 적당한 Time Quantum 설정이 필요
- (3) Priority Scheduling
- CPU가 우선순위가 높은 프로세스 먼저 실행하는 방식
- 무수히 많은 프로그램을 한정된 RAM 공간에서 효율적으로 실행시키기 위해, CPU가 각 프로세스의 사용하는 부분만 디스크에서 불러와 실행하는 방식
- 마치 DIcitonary처럼 프로세스에서 사용하는 부분이 디스크와 RAM에서 어디에 위치하는지 빠르게 찾게 해주는 Page Table을 활용
- 각 프로세스가 필요한 자원을 얻지 못해 다음 작업을 못하는 상태
- 예시로 프로세스1과 프로세스2가 각각 자원 A와 자원 B를 필요로 하는데 프로세스1은 자원 B를 프로세스2는 자원 A를 점유하고 있어 무한정 대기하는 상태를 의미
- 발생 조건
- DeadLock은 밑의 4가지 조건을 동시에 성립할 때만 발생
- (1) 상호 배제 : 자원을 한번에 한 프로세스만이 사용할 수 있다
- 프로세스1이 자원 A를 점유중인데, 프로세스2가 자원 A를 동시에 점유할 수는 없다
- (2) 점유 대기 : 하나의 자원을 점유하면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기중인 프로세스가 있어야 한다
- 프로세스1은 자원 A를 점유중인데, 프로세스2가 점유하고 있는 자원 B도 필요해서 대기중인 경우
- (3) 비선점 : 다른 프로세스에게 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없다
- 프로세스1은 프로세스2에게 할당된 자원 B사용이 끝날 때까지 대기할 수 밖에 없는 경우
- (4) 순환 대기 : 점유 대기가 순환해서 이뤄저야 한다
- A -> B -> C -> A