오랜만의 기술 포스팅이다....요즘 너무 바쁘다 ㅠ
올해 안엔 로드맵 전체를 그래도 완성 해 보자!
이번 포스팅에서는 OS에서의 프로세스 관리에 대해 알아보도록 하겠다.
어떤 프로그램을 실행시킨다면, 메모리에 로드되고 프로세스가 된다.
프로세스는 실행 되면서 끊임없이 상태가 변한다.
영어 단어 그대로 새로 생성되었을 때 프로그램은 메인 메모리에 프로세스로써 할당 된다.
그리고 Ready 상태가 되었을 때 CPU가 해당 프로세스를 실행하여 Running 상태로 변한다. 이 사이에서 interrupt가 진행이 된다면 다시 Ready 상태로 돌아간다.
나중에 서술하겠지만 한 메모리 내에 여러개의 프로세스가 적재되기 때문에 기다려야 하는 상황이 생길 수 있다. OS는 한 가지 프로세스만 실행시키는 것이 아니기 때문이다. 하지만 한계 상 동시에 모든 프로세스에게 자원을 분배 할 수 없기 때문에 중간 중간 프로세스를 바꿔가며 실행한다. 그럴 때 waiting 상태로 변환된다. 그 후 종료 하게 된다면 terminated 상태로 변환된다.
프로세스에 대한 모든 정보가 모여있는 곳이다.
프로세스의 상태 PID, PC (Program Counter),Register 값, CPU 점유 시간 등의 값이 포함되어있다. 이러한 PCB는 OS 내의 프로세스 관리 코드 내에 저장되어 있다.
위에서 언급했 듯, 메모리 내의 프로세스를 모두 동시에 실행 시킬 수 없다. 즉 PCB 내의 정보를 통해 언젠가 다시 해당 프로세스를 실행 시켰을 때 다음 작업을 이어서 수행 할 수 있다.
프로세스가 대기하는 곳이라고 할 수 있다. 프로세스들은 매번 상태가 바뀐다. 즉 상태에 따라 대기해야 할 곳이 필요하다.
각 큐 내부에 저장 된 데이터들은 각 프로세스의 PCB가 저장되어 있다. 그리고 프로세스 간 대기 순서를 정해주는 알고리즘이 필요하다. 이런 알고리즘이 없다면 특정 프로세스가 자원을 받지 못해 작업이 밀리는 현상이 일어나게 된다. 이러한 알고리즘을 스케쥴링이라고 한다.
각 Queue별로 스케쥴러가 다르다. Job Queue는 Job Scheduler, Readuy Queue 는 CPU Scheduler, Device Queue는 Device Scheduler.
여러 개의 프로세스가 동시에 실행 되는 것 처럼 보이게 만드는 기술이다.
Degree of MultiProgramming은 현재 메모리에 할당되어 있는 프로세스 개수를 의미한다. 궁금하다면 작업 관리자를 켜서 직접 확인 해 보자.
이러한 프로세스는 I/O Bound Process, CPU Bound Process로 나뉜다. Job Scheduler는 각 프로세스들을 적절히 분배해서 메모리에 할당 해 주어야 한다. (그렇지 않으면 컴퓨터 성능이...)
Long Term Sheduler와 Medium Term Scheduler, Short Term Scheduler 로 나눌 수 있다.
Long Term Scheduler는 Job Queue 에 할당 될 프로세스 순서를 정할 때 사용된다. , Medium Term Scheduler는 주기적으로 메인 메모리의 프로세스 중 보조 기억장치로 옮길 프로세스를 찾을 때 사용된다. 사용 되지 않는 프로세스들을 보내주어야 다른 프로세스가 일을 할 수 있을 테니까. 이런 작업을 Swapping이라고도 한다.
CPU가 한 프로세스에서 다른 프로세스로 옮겨가는 것을 말한다. 어떤 프로세스 하나를 실행시키다가 멈추고 다른 프로세스를 실행시키는 것이다.
Scheduler와 Dispatcher가 실행되는데 Dispatcher는 CPU의 내부 데이터를 이전 프로세스 데이터에서 새로 실행되는 프로세스로 바꿔주는 역할을 한다.
하지만 이런 작업이 발생 될 때 마다 Overhead가 발생한다. 즉 이 두가지 역할을 하는 코드들의 효율성이 중요하다는 의미다.
지금까지 운영체제의 프로세스 관리에 대해 알아보았다.
다음은 쓰레드와 동시성이라는 주제로 돌아오겠다.