프로세스

라마·2023년 7월 8일

운영체제

목록 보기
7/32
post-thumbnail

※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.

실행파일과 프로세스

  • 프로그램 : 운영체제가 프로세스를 초기구동하는데 사용되는 파일
  • 프로세스 : 프로그램이 실행됨
    • 실행파일이 메모리에 로딩되어 실행되는 상태

즉, 프로그램들은 메모리에 올라가야 실행될 수 있다습니다.

( 프로그램이 실행돼야 프로세스가 된다 라는 뜻! )

프로세스의 개념

  • CPU 에 의해 현재 실행되고 있는 프로그램
  • PCB ( Process Control Block, 프로세스 제어 블록 ) 의 존재로서 명시되는 것

실행파일이 메모리에 올라가는 과정 ( Loading )

Loading 의 과정을 살펴보면, 다음과 같습니다. ( Loader )

🖥️ Memory Allocation → Linking → Relocation → Loading
  • Memory Allocation : 프로그램을 위한 메모리 공간 할당
  • Linking : 외부 라이브러리 참조
  • Relocation : 상대주소의 절대주소로의 변환
  • Loading : 실제 프로그램과 데이터를 메모리에 적재
    • 좁은 의미로 프로그램 실행

로더의 경우, 절대 로더 ( Absolute Loader ) , 재배치 로더 ( Relocation Loader ), 동적 적재 ( Dynamic Loading ) 가!
대표적으로 존재합니다.

먼저 절대 로더의 경우 위 로딩의 과정에서 Linking 과 Relocation 과정이 존재하지 않고, 항상 고정된 위치에만 로딩됩니다.

만약 프로그램이 실행되다가 서로 메모리 영역을 침범할 수 있기 때문에 다중 프로그래밍을 할 수 없습니다.

재배치 로더의 경우 주기억 장치의 상태에 따라 목적 프로그램을 주기억 장치 임의공간에 적재해줍니다.

즉 프로그램이 여러개 실행되다보면 메모리 위치상 충돌이 발생할 수 있으니, 이를 막고자 주솟값을 변경해줘서 메모리 충돌을 막습니다.

동적 적재의 경우 필요한 부분만 주기억장치에 적재하고 나머지는 보조기억장치에 저장해줍니다.

프로세스 생명주기

생명주기를 제대로 살펴보기 전, 가벼운 버전부터 살펴보겠습니다.

메모리에 프로그램이 올라오면 PCB 를 할당받게 되고, 이는 곧 프로세스를 뜻합니다.

이 프로세스가 작업순서 큐에 들어가 자기 차례가 올 때 까지 기다리다가, 순서가 되면 해야할 작업을 처리합니다. ( 디스패치 )

작업을 처리하다가 작업이 너무 오래걸리면, 시간이 다 되어 다시 큐로 돌아갑니다. ( 타임아웃, 인터럽트 )

이를 반복하다 작업이 완료되면, PCB 를 반납하게 됩니다. ( 프로세스 종료, 완료 상태 )

조금 더 깊게 살펴보면..

  • 생성 상태 : 프로세스가 생성된 직후, PCB 를 할당받은 상태
  • 준비 상태 : 작업순서 큐에 들어가 대기
  • 준비 상태 → 실행 상태 : 차례된 프로세스를 준비 큐에서 가져와 작업 실행
  • 실행 상태 : 프로세스가 현재 CPU 에 의해 실행되고 있는 상태
  • 실행 상태 → 준비 상태 : 작업을 처리하다 시간이 만료되어 다시 준비 큐로 돌아감
  • 실행 상태 → 대기 상태 : 자원 대기, 대기 큐에 삽입
  • 대기 상태 : 프로세스가 자원요청을 하여, 대기 큐에서 완료를 기다리는 상태
  • 대기 상태 → 준비 상태 : 자원 할당 완료, 준비 큐에서 대기
  • 실행 상태 → 완료 상태 : 프로세스 종료, PCB 제거

와 같은 과정을 거치게 됩니다.

정리해보면..

  • 생성 상태 : 프로그램을 메모리에 가져와 실행 준비가 완료된 상태
  • 준비 상태 : 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태
    • 실행될 프로세스를 CPU 스케줄러에서 선택함
  • 실행 상태 : 프로세스가 CPU 에 의해 실행되고 있는 상태 ( 작업 처리 중 )
  • 대기 상태 : 실행 상태에 있는 프로세스가 입출력 요청시, 입출력이 완료될 때 까지 기다리는 상태
    • 입출력 완료시 준비 상태로 이동
  • 완료 상태 : 프로세스가 종료된 상태, PCB 반납

프로세스 관리

프로세스는 생성부터 종료까지 모두 커널 ( 운영체제 ) 에 의해 관리됩니다.

운영체제는 프로세스를 제어하기 위해 프로세스의 상태 정보를 저장하는 자료구조인 PCB ( Process Control Block ) 를 사용하여, 현재 작업을 어디까지 진행했는지와 같은 정보를 저장합니다.

만약 A 프로세스의 작업을 하다 타임아웃이 걸려 B 프로세스의 작업으로 넘어갔다가, 다시 A 프로세스의 작업을 진행할 경우 마지막으로 진행했던 해당 위치에서부터 다시 작업을 시작합니다.

이때 A 프로세스 → B 프로세스로 작업이 넘어가는 이 과정을 컨텍스트 스위칭 ( Context Switching ) 이라고 합니다.

그리고 프로세스마다 고유의 PCB 가 생성되고, 프로세스 종료시 해당 PCB 는 폐기됩니다.

추가로 운영체제는 PCB 들을 PCB Table 또는 Proces Table 이라는 곳을 통해 관리합니다.

다중 프로그래밍의 동작 원리

아무리 메모리에 프로세스가 여러개 올라왔다 하더라도, CPU 는 한번에 하나씩밖에 처리할 수 없습니다.

그러면, 어떻게 여러개의 프로세스를 동시에 처리할 수 있을까요?

이 문제를 해결하기 위해 시분할 ( Time Slicing ) 기법을 도입하였습니다.

즉, 프로세스들에게 번갈아가며 CPU 를 사용하게 함으로써, 여러 프로세스들이 동시에 실행되는 척 한 것입니다. ( 진짜 동시에 실행되는 건 아님 )

그러면.. 시분할 기법을 도입함으로써 여러개의 프로세스를 동시에 처리할 수 있게 되었는데, 또 문제점이 발생합니다.

시분할 기법을 도입한다는 뜻은, 여러개의 프로세스들이 번갈아가며 CPU 를 사용하겠다 라는 뜻인데

  1. 어떤 순서로 돌아가며 작업할 것인지? → 스케줄링 문제
  2. 어떻게 돌아가도록 할 것인지? → Context Switching

와 같은 문제점들이 발생하게 됩니다.

Context Switching ( 문맥 교환 )

한 프로세스에서 다른 프로세스로 CPU 를 넘겨주는 과정을 Context Switching 이라고 합니다.

만약 A 프로세스 → B 프로세스로 CPU 를 넘겨주는 과정을 생각해본다면..

A 프로세스의 PCB에는 지금까지 진행했던 작업 내용을 저장하게 되고, B 프로세스의 PCB 내용을 가져와 작업을 진행하게 됩니다.

스케줄링 과정은 나중에 살펴보도록 하겠습니다.

0개의 댓글