ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 운영체제(Operating System) 정리
    취업 활동/면접 준비 2021. 1. 1. 15:49
    728x90

    운영체제

     

    - 프로세스와 스레드

       프로세스는 실행중인 프로그램이며, 디스크로부터 메모리로 적재되어 CPU의 할당을 받을 수 있습니다. 프로세스는 생성될 때 각각 별도의  주소공간에 할당되며 코드, 데이터, 힙, 스택 영역을 가지고 있습니다. 멀티 프로세스의 장점으로는, 각 프로세스간 독립적으로 동작하기 때문에 서로 영향을 끼치지 않습니다. 단점으로는, 각각 독립된 메모리 영역을 가지고 있어 다른 프로세스와 데이터 공유 간 IPC를 해야 하는 등 오버헤드가 있으며, Context switching에 대한 오버헤드도 존재합니다.

     

      스레드는 프로세스의 실행 단위입니다. 프로세스와 달리 스레드는 다른 스레드와 공간, 자원을 공유합니다. 멀티 스레드의 장점으로는, 전역 변수와 정적 변수에 대한 자료를 공유할 수 있습니다. 단점으로는, 하나의 스레드가 다른 스레드의 영향을 끼칠 수 있습니다. 또한 동기화에 신경을 써야합니다.

     

      프로세스가 생성되면, PCB라는 프로세스 제어 블록이 생성됩니다. 여기에는 PID, 프로세스 상태, PC 등의 정보가 저장되어 있으며, Context switching이 발생하면 현재 작업 정보를 저장하고, 다시 CPU를 할당받게 된다면, PCB로부터 이전의 작업 정보를 불러옵니다.

     

    *참고*

    코드 영역 : 프로그램 소스 코드를 저장

    데이터 영역 : 전역 변수, 정적 변수 저장

    스택 영역 : 함수, 지역 변수 저장

    힙 영역 : 동적으로 할당한 것들 저장

     

    - 인터럽트

      인터럽트는 주변 장치의 입출력 요구나 하드웨어 이상 현상을 CPU에게 알려주는 역할을 하는 신호입니다. 프로그램을 실행하는 도중에 예기치 않은 상황이 발생한 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황을 우선 처리한 후 실행 중이던 작업으로 복귀하여 계속 처리하는 것입니다. 인터럽트에는 입출력과 같은 외부 인터럽트, 오버플로우, 0으로 나누는 상황으로 인한 내부 인터럽트가 있습니다.

     

      폴링 방식은 하드웨어 지원을 받지 않고, 직접 계속해서 확인을 하는 방식입니다.

     

    - 스케줄러

      장기 스케줄러, 단기 스케줄러, 중기 스케줄러 3가지가 존재합니다.

     

      장기 스케줄러는 메모리와 디스크 사이의 스케줄링을 담당합니다. 즉, 프로세스에 메모리를 할당합니다. 프로세스에 메모리가 할당되면, 프로세스는 ready상태가 됩니다.

     

      단기 스케줄러는 CPU와 메모리 사이의 스케줄링을 담당합니다. 즉, 프로세스에 CPU를 할당합니다. 프로세스에 CPU가 할당되면, 프로세스는 ready에서 running 상태가 됩니다.

     

      중기 스케줄러는 여유 공간을 마련하기 위해 프로세스를 메모리에서 디스크로 스와핑하는 것입니다. 스와핑이 된다면, 해당 프로세스의 상태는 suspended상태가 됩니다.

     

    - CPU 스케줄러 (단기 스케줄러)

      FCFS, SJF, 우선순위 스케줄링, RR 등이 있습니다.

     

      FCFS는 먼저 온 순서대로 처리하는 스케줄링 방식입니다. 비선점형 스케줄링이며, 실행 시간이 긴 프로세스 때문에, 뒤의 프로세스들이 밀리는 컨베이 효과가 발생하는 문제점이 있습니다.

     

      SJF는 짧은 작업 시간을 가진 프로세스를 먼저 처리하는 스케줄링 방식입니다. 비선점형 스케줄링이며, 작업 시간이 긴 프로세스가 계속해서 밀리는 starvation 효과가 발생하는 문제점이 있습니다.

     

      우선순위 스케줄링은 우선순위가 가장 높은 프로세스를 먼저 처리하는 스케줄링 방식입니다. 선점형 스케줄링과 비선점형 스케줄링 방식이 있습니다. 선점형 스케줄링 방식은 더 높은 우선순위의 프로세스가 도착하면, 해당 프로세스가 CPU를 선점하는 것이고, 비선점형 스케줄링 방식은 더 높은 우선순위의 프로세스가 도착하면, queue에 맨 앞에 위치하는 것입니다. 우선순위가 낮은 것들이 밀리는 starvation 효과가 발생하는 문제점이 있으며, aging 을 적용하여 이를 해결할 수 있습니다.

     

      Round Robin은 현대적인 CPU 스케줄링 방식으로, 각 프로세스는 동일한 크기의 할당 시간인 time quantum을 갖습니다. 이때 설정한 time quantum에 너무 커지면 FCFS와 같아져 컨베이 효과가 발생하고, 너무 작아지면 잦은 context switch로 overhead가 발생합니다. 따라서 적당한 time quantum을 설정하는 것이 중요합니다.

     

    - 세마포어 & 뮤텍스

      세마포어는 공유 자원을 여러 프로세스가 접근하는 것을 막는 것입니다. 카운팅 세마포어의 경우 가용한 개수를 가진 자원에 대한 접근 제어용으로 사용되며, 자원을 사용하면 세마포어가 감소하고, 방출하면 세마포어가 증가합니다.

     

      뮤텍스는 공유 자원을 여러 스레드가 접근하는 것을 막는 것입니다. 뮤텍스는 상태가 0, 1로 이진 세마포어로 부르기도 합니다.

     

    - 페이징 & 세그멘테이션

      페이징 방식은 고정 분할 방식으로, 물리 주소 공간을 같은 크기로 나누어 사용합니다. 따라서 내부 단편화가 발생합니다.

     

      세그멘테이션 방식은 가변 분할 방식으로, 각 프로세스는 여러 세그먼트들로 나뉩니다. 따라서 외부 단편화가 발생합니다.

     

    - 요구 페이징 

      가상 메모리는 요구 페이지 기법을 통해 필요한 페이지만 물리 메모리에 적재하고 사용하지 않는 부분은 스왑 영역에 둡니다.  

     

    - 페이징 교체 알고리즘

      페이지 부재로 인해 스왑 영역에 있는 페이지를 물리 메모리로 적재해야 하는데, 물리 메모리가 꽉 찬 경우에 스왑 영역으로  스왑아웃할 페이지를 찾는 알고리즘입니다. FIFO 알고리즘, 최적 알고리즘, LRU 알고리즘 등이 있습니다.

     

      FIFO 알고리즘은 가장 간단한 방법으로, 가장 먼저 적재된 페이지를 스왑 아웃 하는 방식입니다. 최적 알고리즘은 앞으로 가장 사용하지 않을 페이지를 내보내는 방식입니다. 하지만, 이는 구현하기가 어려워 이상적인 알고리즘입니다. 마지막으로 LRU 알고리즘은 가장 사용한지 오래된 페이지를 내보내는 방식입니다. 이는 최근에 사용하지 않았으면, 나중에도 사용되지 않을 것이라는 생각을 기반으로 합니다.

     

    - 캐시

      CPU와 메모리 사이의 속도 차이를 해결하기 위한 방법입니다. 캐시 적중률(히트)을 높이기 위해 지역성의 원리를 기반으로 합니다. 시간 지역성은 최근에 참조한 주소는 다시 참조할 확률이 높다는 것이고, 공간 지역성은 최근 참조한 주소의 주변 주소를 참조할 확률이 높다는 것입니다.

     

      캐싱 라인은 캐시에 데이터를 저장할 때 자료구조를 활용해 묶어서 저장하는 것을 말합니다. 즉, 캐시에 저장하는 데이터에 데이터의 메모리 주소를 함께 저장하면서 빠르게 원하는 정보를 찾을 수 있습니다.

    728x90

    댓글

Designed by Tistory.