본문 바로가기

Computer Science

운영체제 - 프로세스와 스케줄링

 

 

 

 

프로그램과 프로세스

exe 파일을 실행하면, 프로그램은 메모리에 올라가게 되고, 이를 프로세스라고 합니다.

   - 프로세스 : 메모리에 올라간 (= 실행중인) 프로그램

   - 응용 프로그램 != 프로세스

      : 응용 프로그램은 여러개의 프로세스로 구성되있기때문에 프로세스가 응용 프로그램은 아닙니다.

      : 프로세스는 메모리에 올라가는 일종의 작업 단위로 볼 수 있습니다.

 

 

 

 

프로세스 스케줄링

   - 응용 프로그램은 언제, 어떠한 프로그램을 메모리에 올릴지 결정할 수 있어야 합니다.

   - 스케줄링 알고리즘은 여러 프로그램을 순차적으로 실행시킬 수 있도록 하는 알고리즘입니다.

 

 

 

 

프로세스 스케줄링 종류

   1. 배치 처리 시스템

      - 여러 프로그램을 선입선출형식으로 실행시키는 시스템입니다.

      - 실행시간이 매우 오래 걸리는 프로세스가 존재하면 뒤의 프로세스의 대기시간이 길어집니다.

      - 큐(Queue)를 활용하여 구현할 수 있습니다.

 

   2. 시분할 시스템

      - 다중 사용자 지원을 위해 컴퓨터의 응답 시간을 최소화시키는 방법입니다.

      - 기준시간을 정하고, 기준시간동안 프로세스를 수행한 뒤, 다음 프로세스로 넘어갑니다.

         [프로세스 1] → [프로세스 2] → [프로세스 3] → [프로세스 1] → [프로세스 2] → [...]

 

 

 

 

멀티 태스킹

   - 단일 CPU에서 여러 응용 프로그램이 동시에 실행되는것처럼 보이도록 하는 시스템

   - 10 - 20ms 단위로 프로세스를 수행하여 동시에 여러 일을 하는것처럼 보이도록 합니다.

   - 시분할 시스템과는 다른 목적으로 만들었지만, 과정은 동일합니다.

 

 

 

 

멀티 프로그래밍

   - 단일 프로세스에서 여러개의 프로그램이 동시에 실행되는것을 말합니다.

   - 여러개의 프로그램을 조금씩, 바꿔가면서 실행하여 최대한 많은 CPU 자원을 활용하도록 하는 시스템입니다.

   - 낭비되는 시간을 최소한으로 함으로써 CPU 자원 관리를 최적화 할 수 있습니다.

 

 

 

 

멀티 프로세싱

   - 다수의 프로세서, 즉 CPU를 활용하여 협력적으로 작업을 수행하는 시스템입니다.

   - 멀티 태스킹과 멀티 프로세싱의 차이

      > 멀티 태스킹은 단일 CPU에서 여러 프로세스가 동시에 실행되는것처럼 보이게 하는 시스템입니다

      > 멀티 프로세싱은 여러 CPU에 하나 이상의 프로그램을 병렬로 실행하여 실행속도를 올리는 시스템입니다.

 

 

 

 

스케줄링 알고리즘 종류

 

스케줄링 최적화를 위해서는 프로세스의 실행 순서를 정하는 알고리즘이 중요합니다

대표적인 3가지로 FIFO, SJF, RoundRobin가 있습니다.

 

   1. FIFO (First In First Out)

      - 선입선출로 프로세스를 처리합니다.

      - FCFS (First Come First Served) 스케줄러라고도 합니다.

 

   2. SJF (Shortest Job First)

      - 실행시간이 가장 짧은 프로세스부터 먼저 실행시킵니다.

      - 프로세스 작업이 끝난 뒤, 다음 작업을 할 프로세서를 탐색합니다.

      - 작업시간이 긴 프로세스가 뒤로 밀려 장기간 작업을 못하는 기아현상이 발생할 수 있습니다.

 

   3. Round Robin

      - 프로세스 큐를 만들어 프로세스 작업을 순환시킵니다.

      - 일정 시간내에 프로세스 작업을 끝내지 못하면 큐에 다시 집어넣고 다음 작업을 수행합니다.

 

 

 

 

프로세스 상태

프로세스 상태

   - 프로세스 생성 - [준비 - 실행 - 대기] - 종료 의 단계로 구성됩니다.

 

   1) 생성 (Created)

      : 작업이 커널에 등록되고 프로세스가 생성된 상태입니다.

 

   2) 준비 (Ready)

      : CPU를 할당받기 위한 준비상태입니다. 

 

   3) 실행 (Running)

      : 프로세스가 CPU를 할당받아 실행중인 상태입니다.

      : 실행상태에서 작업이 끝나는 경우 종료로 이동합니다.

      : 작업시간동안 완료하지못해 타임아웃되는경우 준비로 되돌아갑니다.

      : 만약, 다른 우선 작업으로인해  중지되는 경우 대기로 넘어갑니다.

 

   4) 대기 (Blocked)

      : 프로세스가 실행되다가 우선작업으로 인해 중지되는경우에 이동합니다.

      : CPU를 양도한 뒤 작업이 끝난 후 다시 작업을 수행하기 위해 준비단계로 이동합니다.

 

   5) 종료 (Terminated)

      : 작업이 끝나고 프로세스가 종료되는 단계입니다.

      : 모든 자원이 회수되고 프로세스블록을 삭제합니다.

 

 

 

 

프로세스 구조

   - 프로세스는 code, data, stack, heap으로 구성되어 있습니다.

   1) code : 작성된 코드를 의미합니다.

   2) data : 변수나 초기화된 데이터로 구성되어있습니다. 지역변수들이 여기에 포함됩니다,

   3) stack : 함수 호출이나 로컬 변수 등 임시 데이터가 포함되어있습니다. 

   4) heap : 동적으로 코드에서 생성되는 데이터들이 포함됩니다. 추가되는 객체들이 여기에 포함됩니다.

 

 

 

 

프로세스 작동

   - 코드는 컴파일 되어 실행파일(binary code)로 변경됩니다.

   - 실행파일에서 코드는 코드영역으로, 전역변수들은 데이터 영역으로 배정됩니다.

   - 작동 도중 함수가 나오게 되면 stack 영역에서 처리하며, 동적으로 생성된 변수는 힙 영역에 할당됩니다.

   - 응용 프로그램 내에서는 여러개의 프로세스가 실행되며, 프로세스는 스케줄러에 의해 CPU를 할당받습니다.

   - 프로세스들은 컨텍스트 스위칭을 통해 교체됩니다.

   - 프로세스 간 통신이 필요할 때는 IPC를 활용하여 데이터를 주고 받습니다.

 

 

 

 

프로세스 작동 - 코드, 데이터, 스택영역

   - 컴퓨터 내 작업을 수행하기 위해서는 PC (Program Counter) 와 SP (Stack Pointer)가 포함됩니다.

      PC : 다음 작업을 실행할 코드 주소

      SP : 스택 최상단 주소 (= 마지막 프로그램 요청 주소)

   - 프로세스가 작동하게 되면, 프로세스 코드와 전역변수들은 코드영역과 데이터 영역에 들어갑니다.

   - 함수같은 경우, stack pointer에 호출위치를 기록하고, 반환 주소를 program counter에 기록합니다.

   - 이후 program counter에 지목된 메모리 주소로 이동하여 원하는대로 함수가 작동하게 됩니다.

      :: 일부 프로그래밍 언어에서 재귀호출이 일정 횟수 이상일때 에러가 나는데,

         이는 고정된 스택 공간 때문에 공간이 부족하여 생기는 것입니다.

 

 

 

 

프로세스 작동 - 힙영역

Heap 이란?

   - 동적으로 생성되는 변수들을 저장하는 영역입니다.

   - C언어의 malloc, C++이나 java의 new 등으로 새롭게 생성하는 변수들을 haep영역에 저장합니다.

   - 힙 공간이 부족하면 객체 생성이 불가능하고, 객체지향 프로그램은 동작하지 않습니다.

   - java의 GC(garbage collection) 는 불필요한 힙 공간을 삭제하여 힙 공간을 확보하는 시스템입니다.

 

 

 

 

Process Control Block (PCB)

   - 프로세스 별로 존재하는 저장 공간입니다.

   - 프로세스를 구분하는 Process ID와 PC, SP등의 Register 주소, 그외의 여러 정보를 가지고 있습니다.

   - 저장된 정보를 통해 프로세스가 저장된 주소, 진행정보, 프로세스 구분 등을 수행합니다.

 

 

 

 

컨텍스트 스위칭 (Context Switching)

   - 문맥 교환이라 하며, CPU에 실행할 프로세스를 교체하는 기술입니다.

   1) 현재 실행중인 프로세스 정보를 PCB에 업데이트 후, 메인메모리에 저장합니다.

   2) 다음 실행할 프로세스 정보를 메인메모리에서 가져와 CPU 레지스터에 넣고 실행합니다.

   - 위의 2가지 과정을 통해 기존 프로세스의 현재 진행정보를 저장하고 다음 프로세스로 교체 후, 실행합니다.

 

 

 

 

프로세스 간 커뮤니케이션 (IPC : InterProcess Communication)

   - 프로세스는 다른 프로세스의 공간을 접근할 수 없습니다.

   - 프로세스마다 각자의 영역이 존재하고, 다른 프로세스에서 해당 영역에 접근할 방법이 없습니다.

   - 따라서 멀티 프로세스 환경에서 프로세스간 통신을 하려면 어떠한 방법을 찾아야 합니다.

   - 통신 방법

      1) 파일을 통한 커뮤니케이션

         - 하나의 프로세스가 파일에 접근하여 기록하고, 그 뒤 다른 프로세스가 해당파일에 접근하여 통신합니다.

         - 각 프로세스가 파일 작업을 완료했음을 알려줄 수 있는 방법이 없습니다.

      2) 커널 공간 공유

         - 리눅스에서 실제로 사용되는 방식입니다.

         - 모든 프로세스는 4GB까지의 메모리 주소를 가지게 되며, 이 중 3GB~4GB는 커널 영역의 공간입니다.

         - 커널 영역을 통해 각 프로세스들이 커널 공간에 액세스할 수 있으며, 프로세스간 통신을 수행합니다.

         - 공유 메모리 (Shared memory) : 커널공간에 메모리공간을 만든 뒤 해당 공간을 변수처럼 쓰는 방식입니다.

         - 파이프, message queue 또한 커널공간을 통해 커뮤니케이션을 활용하는 방식입니다.

 

 

 

 

 

'Computer Science' 카테고리의 다른 글

운영체제 - 동기화 이슈  (0) 2024.05.03
운영체제 - 스레드  (0) 2024.05.02
운영체제 - 커널과 쉘, 시스템 콜  (0) 2024.05.01
컴퓨터구조론 - CPU 성능 개선  (0) 2024.04.30
컴퓨터구조론 - 명령어 코드  (0) 2024.04.30