반응형

1. 프로세스 (Process)


  • 운영체제로 부터 자원을 할당받은 작업의 단위를 말합니다.

 

(1) 프로그램과 프로세스

  • 프로그램은 윈도우에서는 exe파일, 맥북에서는 dmg 파일을 의미합니다.
  • 프로그램은 프로그래밍 언어(C, Java 등)로 코드를 작성하면 개발할 수 있습니다.
  • 즉, 프로그램은 말그래도 코드 덩어리를 말합니다.
  • 이런 코드 덩어리(프로그램)를 실행시키면 프로세스가 된다.
  • 정리해 보면 프로세스는 프로그램이 작동되고 있는 상태를 말합니다.
  • 프로그램이 실행되기 위해서는 운영체제(OS)가 메모리를 할당해줘야 합니다.
  • 이렇게 운영체제에게 메모리 공간을 할당받고, CPU도 할당받아서 프로그램의 코드가 실행되면 프로세스가 됩니다.

 

(2) 프로세스의 상태

상태 설명
생성 (new) 프로세스가 생성되고 아직 준비되어 있지 않은 상태
준비 (ready) 프로세스가 실행을 위해 기다리고 있는 상태
(CPU를 할당받을 수 있는 상태)
실행 (running) 프로세스가 CPU를 할당받아 실행되고 있는 상태
대기 (waiting) 프로세스가 특정 이벤트(IO)를 받아 기다리는 상태
(이벤트가 발생하여 다시 ready 상태가 될 때까지 대기)
종료 (terminated) 프로세스가 실행을 완료하고 종료된 상태
(메모리에서 제거된 상태)

 

 

 

 

2. 스레드 (Thread)


  • 프로세스가 할당받은 자원을 이용하는 흐름의 단위를 말합니다.
  • 하나의 프로세스 내부에서 동시에 실행되는 흐름의 단위를 스레드라고 합니다.

 

(1) 프로세스와 스레드

  • 프로세스는 프로그램이 메모리를 할당받아 실행되는 상태를 말합니다.
  • 이때 프로세스가 할당받는 메모리 구조에는 코드 영역, 데이터 영역, 스택 영역, 힙 영역이 있습니다.
  • 자세한 메모리 구조에 대한 글은 링크를 참고해보시기 바랍니다.
  • 하나의 프로세스에서 스레드가 생성될 때는 프로세스의 메모리 구조에서 스택 영역만 할당받아서 복사합니다.
  • 나머지 코드 영역, 데이터 영역, 힙 영역은 여러 스레드가 공유하게 되는 구조를 갖게 됩니다.

 

(2) 스레드의 상태

상태 설명
NEW 스레드가 생성되고 아직 호출되지 않은 상태
RUNNABLE 스레드가 실행되기 위해 기다리는 상태
(CPU를 할당받을 수 있는 상태)
BLOCKED 스레드가 특정 이벤트(IO)를 받아 기다리는 상태
(이벤트가 발생하여 다시 RUNNABLE 상태가 될 때까지 대기)
TERMINATED 스레드가 실행을 완료하고 종료된 상태
(메모리에서 제거된 상태)

 

반응형
반응형

1. 개요


프로세스가 여러 개라면 어떤 프로세스에게 먼저 CPU 소유권을 제공해야 할까요? 이런 고민 속에서 CPU의 이용률은 높이고, 프로세스의 대기 시간은 줄이면서, 응답 시간은 짧게 하기 위해서 나온 것이 CPU 스케줄링 알고리즘입니다.

 

CPU 스케줄링 알고리즘의 7가지 종류 (이외에도 더 존재하지만 여기서는 이정도만)

 

  • CPU 스케줄링 알고리즘은 크게 비선점형과 선점형으로 나눌 수 있습니다.
  • 비선점형 방식에는 FCFS(First Come, First Served), SJF(Shortest Job First), 우선순위 알고리즘이 존재합니다.
  • 선점형 방식에는 Round Robin(RR), SRT(Shortest Remaining Time), 다단계 큐, 다단계 피드백 큐 방식이 존재합니다.

 

 

 

2. 비선점형 방식 (non-preemptive)


  • 비선점형 방식은 프로세스가 스스로 CPU 소유권을 포기하는 방식입니다.
  • 다시 말해서 CPU가 실행되는 도중 중간에 강제로 프로세스를 중지하지 않는 방식을 말합니다.
  • Context Switching이 적게 일어나기 때문에 부하가 적다는 특징이 있습니다.

 

(1) FCFS (First Come First Served)

  • 이름 그대로 Ready Queue에 먼저 들어온 순서대로 처리하는 알고리즘입니다.
  • 먼저 요청한 프로세스부터 CPU를 할당하여 처리합니다.
  • 먼저 들어온 프로세스가 처리되는 시간 동안 프로세스들이 기다리는 시간이 길어지는 단점이 발생합니다. 이런 현상을 호위 효과라고 합니다.

Process 1이 처리되는 오랜 시간동안 기다리는 다른 프로세스들

 

 

(2) SJF (Shortest Job First)

  • FCFS에서 발생하는 호위 효과를 방지할 수 있는 알고리즘입니다.
  • CPU를 점유하는 시간이 짧은 프로세스부터 실행합니다.
  • 호위 효과는 피할 수 있지만, 긴 처리 시간을 요구하는 프로세스가 실행되지 않는 기아현상(Starvation)이 발생할 수 있습니다.

파란색 Process가 처리된 후 빨간색이 들어오고, 그 다음으로 노란색이 들어와서 처리되는 상황 (초록색이 실행되지 않는 기아현상)

 

 

(3) 우선순위 알고리즘

  • 프로세스들에게 우선순위를 부여하고, 그 우선순위대로 프로세스를 처리하는 알고리즘입니다.
  • 만약 2개의 프로세스가 우선순위가 동일하다면 먼저 Ready Queue에 들어온 순서대로 처리합니다.
  • 위에서 설명한 FCFS, SJF 알고리즘도 우선순위 알고리즘에 포함시킬 수 있습니다.
  • 우선순위 알고리즘에서 발생할 수 있는 위험 요소는 위에서 말했던 "기아현상(Starvation)"이 있습니다.
  • 기아현상을 해결하기 위해서 오랫동안 대기상태였던 프로세스의 우선순위를 점차 증가시키는 Aging(에이징) 기법을 사용합니다.

 

 

 

3. 선점형 방식


  • 선점형은 현재 실행 중인 프로세스를 강제로 중단시켜 다른 프로세스에게 CPU 소유권을 할당하는 방식입니다.
  • 비선점형에 비해 Context Switching이 빈번하게 발생한다는 특징이 있습니다.

 

(1) Round Robin(RR, 라운드 로빈)

  • FCFS 알고리즘에 Time Slice(타임 슬라이스) 개념을 추가한 알고리즘으로 현대적인 CPU 스케줄링 방법입니다.
  • 정해진 타임 슬라이스만큼 프로세스에게 CPU 소유권을 줘서 처리하는 방식입니다.
  • 정해진 타임 슬라이스 만큼 CPU를 선점하여 프로세스를 처리하고, 만약 타임 슬라이스가 지났는데도 아직 처리되지 못했다면 Ready Queue의 가장 뒤쪽에 삽입됩니다.
  • 타임 슬라이스가 너무 크다면 FCFS와 다를 것이 없어 호위 효과가 발생할 수 있고, 타임 슬라이스가 너무 작다면 Context Switching이 너무 빈번하게 발생하여 오버헤드가 증가되는 현상이 발생할 수 있습니다.
  • 적당한 타임 슬라이스를 정하는 것이 중요한 알고리즘입니다.
Time Slice : 각 프로세스가 CPU를 사용할 수 있는 정해진 시간을 말합니다.

 

 

(2) SRT (Shortest Remaining Time)

  • Rround Robin 알고리즘에 SJF 알고리즘을 합친 알고리즘입니다.
  • SRT에서는 프로세스가 정해진 시간(타임 슬라이스)만큼 CPU의 소유권을 얻어 처리될 수 있습니다. (Round Robin)
  • 이때 CPU의 소유권을 얻는 우선순위는 남은 처리 시간이 적은 순으로 결정됩니다. (SJF)

 

 

(3) 다단계 큐 스케줄링 (Multilevel Queue 스케줄링)

  • 우선순위별로 Ready Queue를 여러개 사용하는 방식의 스케줄링 알고리즘입니다.
  • 우선순위가 낮은 Queue에 있는 프로세스부터 모두 처리하고, 그다음 우선순위의 Queue에 있는 프로세스를 처리합니다.
  • 각 Ready Queue는 사용하는 알고리즘이 다를 수 있습니다.
  • 대표적인 특징으로는 Queue에서 Queue 사이에 프로세스 이동은 불가능하기 때문에 Starvation(기아현상)이 발생할 확률이 높은 알고리즘입니다.

 

 

(4) 다단계 피드백 큐 스케줄링 (Multilevel Feedback Queue 스케줄링)

  • 다단계 큐 스케줄링 방식에서 발전시킨 알고리즘입니다.
  • Queue와 Queue 사이에 프로세스 이동이 가능하고, Aging 기법도 적용할 수 있는 스케줄링 알고리즘입니다.

다단계 피드백 큐 스케줄링 방식의 프로세스 처리 과정

 

  • 위 과정에서 우선순위가 낮은 CPU 집중 프로세스들에서 Starvation이 발생할 수 있기 때문에 Aging 기법을 적용하여 이런 문제점을 보완합니다.

 

 

💡 면접에서 나올 수 있는 질문

  1. CPU 스케줄링 알고리즘의 종류와 특징을 설명하고, 장점과 단점에 대해서 설명해 보세요.
  2. 비선점형 방식과 선점형 방식의 차이점을 설명해 보세요.

 

 

🔗 참고자료

면접을 위한 CS 전공지식 노트

강민철 강사님의 운영체제 강의

 

 

반응형
반응형

운영체제는 프로세스가 실행될 때 해당 프로세스가 필요로 하는 적절한 메모리를 할당하게 됩니다. 프로세스에게 할당되는 메모리 구조에 대해서 알아보고자 합니다.

 

 

1. 프로세스의 메모리 구조


프로세스의 메모리 구조

그림에서 보면 바로 알 수 있듯이 스택 영역과 힙 영역은 크기가 동적으로 변하는(화살표가 존재) 구조를 가지고 있고, 데이터 영역과 코드 영역은 정적인 구조라고 볼 수 있습니다. 하나씩 어떤 역할을 하는지 알아봅시다.

 

 

(1) 스택 영역 (Stack Area)

  • 스택 영역은 함수(메서드), 함수에 인자로 들어가는 매개변수(Parameter), 함수 안에 있는 지역변수(Local Variable)가 저장되는 영역입니다.
  • 컴파일 시에 크기가 결정되고, 동적인 구조를 가지고 있습니다.
  • 위 그림에서 볼 수 있듯이 위쪽에 있는 주소부터 할당됩니다.
  • 스택 영역은 함수를 재귀적으로 호출할 때 크기가 동적으로 늘어날 수 있습니다.
  • 함수가 호출되면 Stack Frame이 스택 영역에 생성되고, 해당 Stack Frame 내부에 함수의 매개변수, 지역변수들이 쌓이게 됩니다.
  • Java 코드에서 무한적인 재귀 호출이 발생되도록 코드를 잘못 작성하면 볼 수 있는 예외인 StackOverFlow는 제한되어 있는 스택 영역으로 인해 발생하는 예외입니다. 

 

(2) 힙 영역 (Heap Area)

  • 힙 영역은 동적으로 할당되는 변수가 저장되는 영역입니다. Java에서는 객체가 Heap 영역에 저장됩니다.
  • 런타임 시에 크기가 결정되고, 동적인 구조를 가지고 있습니다.
  • 위 그림에서 볼 수 있듯이 아래쪽에 있는 주소부터 할당됩니다.

 

(3) 데이터 영역

  • 데이터 영역은 전역변수, 정적변수가 저장되는 영역입니다.
  • 정적인 구조를 가지고 있고, 프로그램이 종료되면 사라지는 변수들이 들어가 있는 영역입니다.
  • 데이터 영역은 BSS(Block Started by Symbol) 영역Data 영역으로 나뉘게 됩니다.
  • BSS 영역에는 초기화 되지 않은 변수가 저장되는 영역입니다.
  • Data 영역에는 다른 값으로 초기화된 변수가 저장되는 영역입니다.

 

(4) 코드 영역

  • 코드 영역은 실제 소스 코드가 기계어의 형태로 저장되는 영역입니다.
  • 정적인 구조를 가지고 있고, 수정이 불가능한 기계어로 저장되어 있기 때문에 Read Only의 특징을 가지고 있습니다. (수정 불가)

 

 

 

2. JVM(Java Virtual Machine)의 메모리 구조


  • Java를 학습하는 사람으로서 빼먹고 넘어갈 수 없는 내용이라고 생각되어 추가적으로 기록해보고자 합니다.
  • JVM은 운영체제(OS)로 부터 별도의 메모리 공간을 할당받아서 Java Application을 실행하는데 사용합니다.
  • 이런 JVM의 메모리를 Runtime Data Area라고 부릅니다.
  • Runtime Data Area는 Stack Area, Heap Area, Method Area, PC register, Native Method Stack으로 구성되어 있습니다.

 

(1) Method Area (Static Area)

  • 클래스 정보클래스 변수(static), 상수(final), 메서드 코드, 런타임 상수 풀 등의 데이터를 저장하는 영역입니다.
  • 한번 로드된 이후 메모리에 항상 상주하고 있는 영역입니다.
  • 모든 스레드가 공유할 수 있는 영역입니다.

 

(2) Stack Area

  • 함수(메서드)에서 직접 사용할 수 있는 지역변수(local variable), 매개변수(parameter), 객체의 경우에는 주소값을 저장합니다.
  • 함수가 호출되면 Stack Area에 Stack Frame이 생성되고, 해당 Stack Frame 내부에 지역변수, 매개변수 등이 쌓이게 됩니다.
  • 함수의 호출이 종료되면 pop으로 해당 Stack Frame이 제거됩니다.
  • JVM에서 Stack Area는 스레드마다 하나씩 가지고 있습니다.

 

(3) Heap Area

  • new를 통해서 생성된 객체, 배열 등이 저장되는 영역입니다.
  • JVM의 Statck Area에서 참조가 가능합니다. Heap Area에 존재하는데, 어떠한 곳에서도 참조를 하고 있지 않다면 메모리를 낭비하고 있기 때문에 GC(Garbage Collector)가 Heap Area에서 지워줍니다.

 

(4) PC(Program Counter) Register

  • 스레드가 생성될 때마다 생성되는 영역으로 현재 스레드가 실행되고 있는 부분의 주소와 해당 명령을 저장하고 있는 영역입니다.
  • 여러 스레드가 흐름을 잃지 않고 순차적으로 실행될 수 있도록 해줍니다.

 

(5) Native Method Stack

  • Java 코드 이외 다른 언어로 작성된 네이티브 코드를 실행하기 위한 영역입니다.
  • 성능 향상을 위해서 Java Application에서 다른 언어와 함께 사용되는 경우가 있습니다. 이때 다른 언어로 작성되어 제공되는 Method의 정보가 저장됩니다.

 

 

 

3. 면접에서 나올 수 있는 질문들


  • JVM의 메모리 구조와 각 영역에 대해서 설명해보세요.
  • Garbage Collector가 어떤 역할을 하는지 설명해보세요.

 

 

 

🙆🏻‍♂️ 마무리 하며


  • JVM은 프로세스인가라는 궁금점이 있었습니다. 글을 정리하고 싶었지만 정확한 근거가 되는 글을 찾을 수 없어서 따로 기록해보지 못했습니다. 
  • 운영체제 위에서 작동되고, 운영체제에 의해서 별도의 메모리 공간을 할당 받기 때문에 프로세스라고 생각은 되는데, 일반적인 프로세스의 메모리 구조와는 다른 구조를 가지고 있고, JVM의 메모리 관리 방식도 일반적인 프로세스와는 다르다고 알고 있습니다.

 

 

 

참고 자료

https://honbabzone.com/java/java-jvm/

면접을 위한 CS 전공지식 노트

반응형
반응형

운영체제는 한정되어 있는 메모리를 극한으로 활용할 수 있도록 메모리를 관리하는 역할을 합니다.

 

 

📖 가상 메모리 (Virtual Memory)

(1) 가상 메모리란?

  • 메모리 관리 기법 중 하나로 프로세스 전체가 메모리에 올라오지 않더라도 실행이 가능하도록 해주는 기법입니다.
  • 실제의 물리 메모리 개념과 프로그래머의 논리 메모리 개념을 분리합니다.

 

(2) 가상 메모리를 이용하면 좋은 점

  • 물리 메모리(RAM)의 크기의 제약을 받지 않게 됩니다. (알고리즘에 집중할 수 있습니다)
  • 많은 프로그램을 동시에 실행할 수 있게 됩니다. 
  • 프로그램을 메모리에 올리고 Swap(스왑)을 하는데 필요한 입출력(IO) 횟수가 줄어들기 때문에 프로그램을 보다 더 빠르게 실행시킬 수 있습니다.

 

(3) 요구 페이징 (Demanding Paging)

  • 프로세스에서 필요한 것들만 골라서 메모리에 적재할 수 있도록 해주는 전략을 요구 페이징이라고 합니다.
  • 초기에는 필요한 부분만 메모리에 적재하여 프로세스를 실행하고, 필요할 때마다 요청하여 메모리에 적재하는 방법을 사용합니다.
  • 한 번도 접근하지 않은 *페이지는 물리 메모리에 적재되지 않습니다.
  • 해당 페이지가 물리 메모리에 존재하는지 안 하는지에 대한 여부는 유-무효(valid-invalid) 비트를 사용하여 표시합니다.
  • 가상 메모리 공간에는 존재하지만 물리 메모리 공간에는 없는 데이터에 접근했을 때는 페이지 폴트(Page Fault)가 발생합니다.
    • 페이지 폴트가 발생했을 때는 운영체제가 스와핑(Swaping)을 통해서 마치 페이지 폴트가 발생하지 않은 것처럼 프로그램을 작동시킵니다.
*페이지(Page): 가상 메모리를 사용하는 최소 크기 단위를 말합니다.

 

 

# 스와핑 (Swaping)

  • 페이지 폴트를 방지하기 위해서 당장 사용하지 않는 영역을 하드디스크(보조기억장치, 스왑영역)로 옮기고, 필요할 때 다시 하드디스크에서 RAM으로 불러오는 작업을 스와핑이라고 합니다.
  • 하드디스크에서 RAM으로 불러오는 것을 Swap-In이라고 하며, RAM에서 하드디스크로 내리는 작업을 Swap-Out이라고 합니다. 
  • Swap을 하는 데는 큰 디스크 전송시간이 요구되기 때문에 메모리가 부족한 경우에만 Swapping을 진행합니다.

 

 

# 요구 페이징을 통해 페이지 폴트를 처리하는 과정

*프레임(Frame): 물리 메모리를 사용하는 최소 크기 단위를 말합니다.

 

 

 

📖 스레싱 (Thrashing)

  • 너무 많은 프로세스가 동시에 올라오게 되면서 스와핑(Swaping)이 빈번하게 발생하여 생기는 문제가 스레싱입니다.
  • 즉, 페이지 폴드율이 높아짐에 따라서 발생하는 문제입니다. 스레싱은 컴퓨터의 심각한 성능 저하를 발생시킵니다.
  • 다시 정리해 보면 어떤 프로세스가 실행되는 시간보다 더 많은 시간이 페이징 하는 데 사용되고 있다면 스레싱이 발생했다고 할 수 있습니다.
  • OS가 평소에 CPU의 이용률을 감시합니다. 페이지 폴드율이 높아지면 그만큼 CPU의 대기 시간이 길어지기 때문에 CPU 이용률이 감소하게 됩니다. 그래서 OS는 CPU의 이용률이 낮기 때문에 여유롭다고 판단하고 가용성을 높이기 위해서 더 많은 프로세스를 메모리에 올리는 작업을 하게 됩니다.

 

(1) 스레싱을 해결할 수 있는 방법

  • 작업 세트, 작업 집합 (Working Set)
  • 페이지 폴트 빈도 (PFF, Page Fault Frequency)

 

# 작업 세트, 작업 집합 (Working Set)

  • 프로세스가 실행이 될 때, 어떤 특정한 지역에서만 메모리를 참조하게 됩니다. 이것을 *지역성(Locality)라고 합니다.
  • 지역성 특징을 기반으로 하여 어느 일정 시간 동안 활발하게 사용되었던 페이지들을 이용하여 작업 집합을 만들어 미리 메모리에 로드하는 방법을 말합니다.
  • 이렇게 미리 메모리에 로드하게 되면 탐색에 드는 비용을 줄일 수 있고, 스와핑 횟수도 줄일 수 있습니다.
*지역성: 프로세스가 일정 시간 동안 집중적으로 특정 주소 영역을 참조하는 경향을 분석

 

# 페이지 폴트 빈도(PFF, Page Fault Frequency)

  • 페이지 폴트율의 상한과 하한을 지정하여 프로세스에 할당할 메모리의 크기를 동적으로 예측하고 조절하는 방법입니다.
  • 폴트율이 상한을 넘어서면 해당 프로세스에 필요한 프레임이 부족하다고 판단하여 늘려주고, 하한보다 떨어지면 해당 프로세스에 주어진 프레임이 많다고 판단하여 줄여주어 스레싱을 방지합니다.

 

 

 

📖 메모리 할당

(1) 연속 메모리 할당

  • 프로세스에 연속적인 메모리 공간을 할당하는 방법을 말합니다.
  • 연속 메모리 할당 방식에는 최초 적합, 최적 적합, 최악 적합 방식이 존재합니다.

# 최초 적합

  • 운영체제가 메모리 내에서 빈 공간을 순서대로 탐색하다가 적재가 가능한 공간을 발견하면 그 공간에 프로세스를 바로 적재하는 방식을 말합니다.
  • 검색 시간이 최소화되고, 빠르게 할당이 가능합니다.

 

# 최적 적합

  • 운영체제가 메모리의 비어있는 공간을 모두 검색한 뒤에 가장 작은 공간에 적재하는 방식을 말합니다.

 

# 최악 적합

  • 운영체제가 메모리의 비어있는 공간을 모두 검색한 뒤에 가장 큰 공간에 적재하는 방식을 말합니다.

 

 

(2) 연속 메모리 할당의 문제점

  • 연속 메모리 할당 방법은 메모리를 효율적으로 사용하는 방법이 아닙니다. 잠재적으로 외부 단편화가 발생할 수 있습니다.

# 외부 단편화

  • 프로세스들이 실행되고 종료되는 과정이 반복되며 메모리 사이사이에 비어있는 공간이 발생되고, 다음 프로세스를 할당하기 어려울 정도로 작아서 메모리가 낭비되는 문제를 말합니다. 아래 그림으로 간단하게 이해해봅시다.

# 메모리 압축 (Compaction) - 외부 단편화 해결

  • 비어있는 공간들을 하나로 모아서 하나의 큰 비어있는 공간으로 만드는 방법을 말합니다.
  • 여기저기 흩어져 있는 공간들을 합치는 과정은 효율이 떨어질 수 있는 방법입니다.

 

# 내부 단편화

  • 할당하기 위해서 나눴던 메모리 크기보다 프로세스에 필요한 메모리가 작아서 남는 메모리 공간이 생기는 것을 말합니다.

 

 

(3) 불연속 메모리 할당

  • 불연속 메모리 할당 방법은 현대 운영체제가 쓰는 방법인 페이징 기법이 존재합니다.
  • 페이징 기법은 메모리를 동일한 크기의 페이지로 나누고 프로그램(프로세스)마다 페이지 테이블을 두어 이를 통해 실제 메모리에 프로그램을 할당하는 방법입니다.
  • 페이징 기법 이외에도 세그멘테이션, 페이지드 세그멘테이션 방법이 존재합니다.

 

# 페이징 기법 (Paging)

  • 프로세스에게 연속적인 메모리를 할당하지 않고, 메모리를 페이지 단위로 나누어 서로 다른 위치에 프로세스를 할당합니다.
  • 논리적 메모리(가상 메모리)에서는 프로세스를 페이지 단위로 나누어서 관리하고, 물리적 메모리(RAM)는 프레임 단위로 나누어져 있습니다.
  • 하나의 프로세스가 사용하는 메모리 공간은 연속적이어야 한다는 제약을 깨버리는 메모리 할당 방법입니다.

 

# 세그멘테이션

  • 정해진 사이즈의 블록 크기 페이지 단위가 아닌 서로 사이즈가 다른 논리적인 세그먼트(Segment)로 나누는 방법을 말합니다.
  • 하나의 프로세스는 코드, 데이터, 스택, 힙으로 이루어져 있는데, 이를 기반으로 나눌 수도 있고, 함수 단위로 나눌 수도 있는 방법입니다.
  • 메모리에 비어있는 공간의 크기가 균일하지 않다는 문제가 발생될 수 있습니다.

 

 

 

📖 페이지 교체 알고리즘

  • 메모리는 한정되어 있어서 스와핑이 빈번하게 일어납니다.
  • 스와핑이 최대한 적게 일어날 수 있는 구조로 설계되어야 합니다.
  • 페이지 교체 알고리즘을 기반으로 스와핑이 일어나게 됩니다.

 

# 오프라인 알고리즘 (Offline Algorithm)

  • 먼 미래에 참조되는 페이지와 현재 할당하려는 페이지를 바꾸는 알고리즘을 말합니다.
  • 먼 미래에 사용되는 프로세스를 알 수 있는 방법이 존재하지 않기 때문에 사용할 수 없는 알고리즘입니다.
  • 알고리즘 간의 성능 비교에 대한 기준으로 사용됩니다.

 

# FIFO (First In First Out)

  • 페이지 교체 시점이 오면 먼저 메모리에 할당되었던 순서대로 먼저 나가게 되는 간단한 알고리즘입니다.
  • 가장 직관적인 간단한 알고리즘으로 구현하기 쉽다는 장점이 있습니다.
  • 가장 활발한 페이지를 먼저 교체해서 페이지의 부재율을 높이는 부작용이 발생할 수 있습니다.

 

# LRU (Least Recentle Used) : 기간

  • 페이지 교체 시점이 오면 가장 오랫동안 사용되지 않는 페이지를 선택하여 교체합니다.
  • 대체적으로 FIFO 알고리즘보다는 우수한 성능을 갖습니다.
  • 가장 오래됐는지 파악하기 위해서 각 페이지마다 계수기, 스택을 두어야 하는 문제점이 있습니다.

 

# LFU (Least Frequency Used) : 횟수

  • 페이지 교체 시점이 오면 가장 참조 횟수가 적은 페이지를 선택하여 교체합니다.
  • 활발한 페이지는 참조 횟수도 많을 것이라는 가정하에 만들어진 알고리즘입니다.

 

# 최적 페이지 교체 (Optimal Page Replacement, OPR)

  • 앞으로 오랫동안 사용되지 않을 페이지를 선택하여 교체합니다.
  • 프로세스가 앞으로 사용할 페이지를 미리 알아야 한다는 조건이 필요합니다.
  • 앞으로 사용할 페이지를 아는 것은 불가능하기 때문에 구현이 불가능한 알고리즘입니다.
  • 알고리즘 구현의 목적보다는 알고리즘 연구 비교의 목적으로 사용되는 알고리즘입니다.
반응형
반응형

스스로 공부하고 개인적으로 기록해보는 공간입니다. 틀린 부분이 있다면 알려주시면 바로 수정하겠습니다. 감사합니다. 😄

📘 운영체제란 무엇인가?

📖 운영체제(Operating System)가 무엇인가?

컴퓨터를 이용하는 사용자가 컴퓨터 하드웨어와 상호작용할 수 있도록 도와주는 소프트웨어를 말한다. 사용자가 직접 하드웨어에 접근하여 정보를 처리하는 것은 어렵기 때문에 그 역할을 운영체제가 도와준다.

하나의 예시를 들어보면 컴퓨터는 0과 1로 데이터를 표현하는데, 만약 운영체제가 없다면 사용자는 직접 0과 1로 구성된 데이터를 이용하여 직접 컴퓨터와 상호작용해야하는 어려움이 있다.

대표적인 운영체제로는 Windows, MacOS, Linux, IOS 등이 있다.

image

📖 Bootstrap Program이 무엇인가?

컴퓨터나 노트북을 처음에 켜면 windows 아이콘이나 mac 아이콘이 뜨면서 뭘 로딩하는 화면을 볼 수 있다. 이처럼 하드웨어를 사용하기 위해서 전원을 켜면 운영체제를 실행시켜줘야하는데 이 역할을 해주는 것이 바로 Bootstrap Program이다.

즉, Bootstap Program은 전원을 켰을 때, 가장 먼저 작동하는 프로그램을 말하고 이 프로그램은 RAM이 아닌 ROM에 저장되어 있습니다. 전원이 켜지면 CPU는 ROM에 저장된 Bootstrap Program을 읽고, Disk로 부터 OS(운영체제)를 Load하고 실행시키는 역할을 합니다.

🤔 왜 Bootstrap Program은 ROM에 저장되어있을까?
ROM은 Read Only Memory로서 비휘발성 메모리이다. 즉, 전원이 꺼지면 정보가 날라가는 RAM과는 다르게 전원이 꺼져도 정보가 날라가지 않는 특징이 있기 때문에 Bootstrap Program은 ROM에 저장이 된다.

image

📖 사용자가 운영체제를 통해서 하드웨어와 어떻게 상호작용하는가?

그럼 운영체제를 실행시키고 사용자는 어떻게 운영체제와 상호작용하여 하드웨어를 제어할 수 있을까라는 의문이 든다. 운영체제는 크게 Shell(명령어 해석기)과 Kernel(커널)로 나눌 수 있습니다. 아래 그림과 같은 방법으로 사용자가 운영체제를 통해서 하드웨어와 상호작용할 수 있습니다.

사용자는 Shell(ex. bash)을 통해서 명령어를 치면 명령어를 해석해서 Kernel에 요청을 보냅니다. 그럼 Kernel에서는 요청받은 로직(일)을 처리하고 결과를 출력합니다.

주로 사용자들은 CLI(Command Line Interface)나 GUI(Graphical User Interface)를 통해서 운영체제에 명령을 요청합니다.

image

📖 커널(kernel)은 무엇일까?

Shell을 사용해서 우리는 명령어를 치고 그에 대한 결과를 받을 수 있었다. 그럼 커널(Kernel)은 무엇일까?

커널은 프로세스, 메모리, 저장장치를 관리하는 핵심적인 기능을 합니다. 즉 운영체제의 가장 핵심적인 부분이라고 할 수 있습니다. 이러한 커널에는 System Call드라이버라는 것이 존재합니다.

 

  1. System Call (시스템 호출)image
    우리가 응용 프로그램을 사용하는 모든 부분은 user mode일 때 실행됩니다. 커널의 경우 Hardward을 직접적으로 제어할 수 있기 때문에 보호장치라고 할 수 있는 System Call이 존재합니다. System Call의 경우 write(), read(), printf()와 같은 메서드를 이용하여 사용할 수 있습니다. user mode에서 이런 System Call이 들어온다면 Kernel mode로 들어가 Hardware를 제어할 수 있습니다.

 

  1. 드라이버
    Kernel과 Hardware 사이의 인터페이스를 드라이버라고 합니다. 커널의 입출력의 기본적인 부분만 제작되어 있어서 마우스, 키보드와 같은 hardware의 경우 노트북이나 컴퓨터에 꽂기만 해도 작동이 되는 것을 볼 수 있습니다. 하지만 프린터와 같은 장치들은 사용할 때 해당 제작사에서 제공하는 드라이버를 다운로드 받아서 사용했던 경험을 해본적이 있으실 겁니다. 이때 사용하는 것을 디바이스 드라이버라고 합니다.

🔎 Reference

[운영체제(OS)] 1. 운영체제란?
[운영체제(OS)] 운영체제란 무엇인가?

반응형

+ Recent posts