※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.
즉, 프로그램들은 메모리에 올라가야 실행될 수 있다습니다.
( 프로그램이 실행돼야 프로세스가 된다 라는 뜻! )
Loading 의 과정을 살펴보면, 다음과 같습니다. ( Loader )
🖥️ Memory Allocation → Linking → Relocation → Loading로더의 경우, 절대 로더 ( Absolute Loader ) , 재배치 로더 ( Relocation Loader ), 동적 적재 ( Dynamic Loading ) 가!
대표적으로 존재합니다.
먼저 절대 로더의 경우 위 로딩의 과정에서 Linking 과 Relocation 과정이 존재하지 않고, 항상 고정된 위치에만 로딩됩니다.
만약 프로그램이 실행되다가 서로 메모리 영역을 침범할 수 있기 때문에 다중 프로그래밍을 할 수 없습니다.
재배치 로더의 경우 주기억 장치의 상태에 따라 목적 프로그램을 주기억 장치 임의공간에 적재해줍니다.
즉 프로그램이 여러개 실행되다보면 메모리 위치상 충돌이 발생할 수 있으니, 이를 막고자 주솟값을 변경해줘서 메모리 충돌을 막습니다.
동적 적재의 경우 필요한 부분만 주기억장치에 적재하고 나머지는 보조기억장치에 저장해줍니다.
생명주기를 제대로 살펴보기 전, 가벼운 버전부터 살펴보겠습니다.

메모리에 프로그램이 올라오면 PCB 를 할당받게 되고, 이는 곧 프로세스를 뜻합니다.
이 프로세스가 작업순서 큐에 들어가 자기 차례가 올 때 까지 기다리다가, 순서가 되면 해야할 작업을 처리합니다. ( 디스패치 )
작업을 처리하다가 작업이 너무 오래걸리면, 시간이 다 되어 다시 큐로 돌아갑니다. ( 타임아웃, 인터럽트 )
이를 반복하다 작업이 완료되면, PCB 를 반납하게 됩니다. ( 프로세스 종료, 완료 상태 )
조금 더 깊게 살펴보면..

와 같은 과정을 거치게 됩니다.
정리해보면..
프로세스는 생성부터 종료까지 모두 커널 ( 운영체제 ) 에 의해 관리됩니다.
운영체제는 프로세스를 제어하기 위해 프로세스의 상태 정보를 저장하는 자료구조인 PCB ( Process Control Block ) 를 사용하여, 현재 작업을 어디까지 진행했는지와 같은 정보를 저장합니다.
만약 A 프로세스의 작업을 하다 타임아웃이 걸려 B 프로세스의 작업으로 넘어갔다가, 다시 A 프로세스의 작업을 진행할 경우 마지막으로 진행했던 해당 위치에서부터 다시 작업을 시작합니다.
이때 A 프로세스 → B 프로세스로 작업이 넘어가는 이 과정을 컨텍스트 스위칭 ( Context Switching ) 이라고 합니다.
그리고 프로세스마다 고유의 PCB 가 생성되고, 프로세스 종료시 해당 PCB 는 폐기됩니다.
추가로 운영체제는 PCB 들을 PCB Table 또는 Proces Table 이라는 곳을 통해 관리합니다.
아무리 메모리에 프로세스가 여러개 올라왔다 하더라도, CPU 는 한번에 하나씩밖에 처리할 수 없습니다.
그러면, 어떻게 여러개의 프로세스를 동시에 처리할 수 있을까요?
이 문제를 해결하기 위해 시분할 ( Time Slicing ) 기법을 도입하였습니다.
즉, 프로세스들에게 번갈아가며 CPU 를 사용하게 함으로써, 여러 프로세스들이 동시에 실행되는 척 한 것입니다. ( 진짜 동시에 실행되는 건 아님 )
그러면.. 시분할 기법을 도입함으로써 여러개의 프로세스를 동시에 처리할 수 있게 되었는데, 또 문제점이 발생합니다.
시분할 기법을 도입한다는 뜻은, 여러개의 프로세스들이 번갈아가며 CPU 를 사용하겠다 라는 뜻인데
와 같은 문제점들이 발생하게 됩니다.
한 프로세스에서 다른 프로세스로 CPU 를 넘겨주는 과정을 Context Switching 이라고 합니다.
만약 A 프로세스 → B 프로세스로 CPU 를 넘겨주는 과정을 생각해본다면..
A 프로세스의 PCB에는 지금까지 진행했던 작업 내용을 저장하게 되고, B 프로세스의 PCB 내용을 가져와 작업을 진행하게 됩니다.
스케줄링 과정은 나중에 살펴보도록 하겠습니다.