스터디

Chapter 03(2). 운영체제

ttoance 2025. 11. 16. 21:59
반응형

4.CPU 스케줄링

 

우선순위

  • 모든 프로세스는 CPU의 자원을 필요로 하기 때문에 운영체제는 공정하고 합리적인 방법으로 CPU의 자원을 프로세스에 할당해야 한다. 
  • 운영체제는 프로세스별 우선순위 priority 를 판단하여 PCB에 명시하고,
  • 우선순위가 높은 프로세스에는 CPU의 자원을 더 빨리, 더 많이 할당한다.
  • 사용자가 일부 프로세스의 우선순위를 직접 높일 수도 있다.
  • 다양한 할당 기준이 있지만, 가장 대표적인 고려 요소는 CPU 활용률이다.
    • 운영체제는 가급적 CPU 활용률을 높게 유지할수 있도록 우선순위를 할당한다.
    • CPU 활용률 CPU utilization 이란 전체 CPU의 가동 시간 중 작업을 처리하는 시간의 비율을 의미한다.
    • 운영체제는 높은 CPU 활용률을 유지하기 위해 기본적으로 입출력 작업이 많은 프로세스의 우선순위를 높게 유지한다.

스케줄링 큐

  • 운영체제는 프로세스들에게 ‘자원을 이용하고 싶다면 줄을 서서 기다릴 것’을 요구한다. 
  • 이는 비단 CPU 자원에 국한된 이야기가 아니며, CPU를 이용하고 싶거나 메모리에 적재되고 싶은 프로세스, 대기 상태로 특정 입출력장치를 이용하고 싶은 프로세스 모두에 해당한다.
  • 그리고 이 줄은 스케줄링큐 scheduling queue 를 통해 구현된다.

 

 

선점형 스케쥴링과 비선점형 스케줄링

➊과 ➋ 모든 상황에서 수행되는 스케줄링 유형을 선점형 스케줄링이라고 하고, 

➊ 상황에서만 수행되는 스케줄링 유형을 비선점형 스케줄링이라고 한다.

  • 선점형 스케줄링 preemptive scheduling 은 현재 어떤 프로세스가 CPU를 할당받아 사용하고 있더라도 운영체제가 프로세스로부터 CPU 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링을 말한다.
    • 프로세스마다 정해진 시간만큼만 CPU를 이용하고, 정해진 시간을 모두 소비하면 운영체제가 해당 프로세스로부터 CPU 자원을 빼앗아 다음 프로세스에게 할당하는 방식이다. 
  • 비선점형 스케줄링 non-preemptive scheduling 은 어떤 프로세스가 CPU를 사용하고 있을 때 그 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까지는 다른 프로세스가 끼어들 수 없는 스케줄링 방식을 말한다.
    • 실행되는 프로세스가 있다면 다른 프로세스들은 그 프로세스의 CPU 사용이 모두 끝날때까지 기다려야 한다. 
  • 선점형 스케줄링은 언제든 더 급한 프로세스가 끼어들어 CPU를 사용할 수 있으므로 한 프로세스의 CPU 독점을 막고 여러 프로세스에 골고루 CPU 자원을 배분할 수 있다는 장점이 있지만, 문맥 교환 과정에서 오버헤 드가 발생할 수 있다. 
  • 그에 반해 비선점형 스케줄링은 선점형 스케줄링보다 문맥 교환의 횟수가 적기 때문에 상대적으로 오버헤드의 발생은 적지만, 어떤 프로세스가 CPU를 사용 중이라면 당장 CPU를 사용해야 하는 프로세스라도 무작정 기다리는 수밖에 없다는 단점이 있다.

 

리눅스 CPU 스케줄링 

  • SCHED_NORMAL은 일반적인 프로세스에 적용되는 스케줄링 정책으로, 
    • SCHED_NORMAL 정책 하에서는 CFS라는 CPU 스케줄러에 의해 스케줄링이 이뤄진다.
    • 여기서 CFS Completely Fair Scheduler 란이름처럼 프로세스에 대해 ‘완전히 공평한 CPU 시간 배분’을 지향하는 CPU 스케줄러를 말한다.
    • 리눅스에서는 프로세스마다 가상 실행 시간(이하 vruntime ) virtual runtime 이라는 정보를 유지하는데, 
    • CFS 는 이 vruntime이 가장 작은 프로세스부터 스케줄링한다. 
    • vruntime은 프로세스가 ‘실제로 실행된 시간(runtime)'이 아닌, 프로세스의 가중치(weight)를 고려한 가상의 실행 시간이다. 
    • 여기서 가중치란 프로세스의 우선순위와 연관된 값으로, 프로세스의 우선순위가 높아질수록 가상시간이 높아진다. 

5 가상 메모리

물리 주소와 논리 주소

  • CPU와 프로세스는 메모리의 하드웨어 상 실제 주소인 물리 주소 physical address 가 아니라 다른 주소 체계를 이용한다
  • 논리 주소와 물리 주소간의 변환이 이루어지는데 이때 사용하는 기구가 메모리 관리 장치 이다. 
    •  MMU는 CPU와 메모리 사이에 위치하며, CPU가 이해하는 논리 주소를 메모리가 이해하는 물리 주소로 변환하는 역할이다.

 

스와핑

  • 메모리에 적재된 프로세스들 중에는 현재 실행되고 있지 않은 프로세스도 있을 수 있다. 
    • 입출력 작업을 요구하며 대기 상태가 되었거나 오랫동안 사용되지 않은 프로세스.
  • 이러한 프로세스들을 임시로 스왑 영역 swap space 라는 보조기억장치의 일부인 영역으로 쫓아내고, 프로세스를 쫓아낸 자리에 생긴 메모리 상의 빈 공간에 다른 프로세스를 적재하여 실행하는 메모리 관리 방식을 스와핑 swapping 이라고 한다
  • 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것을 스왑 아웃 swap-out , 반대로 스왑 영역에 있는 프로세스가 다시 메모리로 옮겨오는 것을 스왑 인 swap-in 이라고 한다.
  • 스왑 아웃 되었던 프로세스가 다시 스왑 인될 때는 스왑 아웃되기 전의 물리 주소와는 다른 주소에 적재될 수 있다.

 

연속 메모리 할당과 외부 단편화

  • 프로세스 바깥에 생기는 빈 공간들은 분명 빈 공간이 맞지만 그보다 큰 프로세스를 적재하기 어려운 상황을 초래하고, 이는 메모리 낭비로 이어진다.
  • 이러한 현상을 외부 단편화 external fragmentation 라고 한다.

 

페이징을 통한 가상 메모리 관리

  • 스와핑과 연속 메모리 할당은 2가지 문제를 내포한다.
    • 하나는 적재와 삭제를 반복하며 프로세스들 사이에 발생하는 외부 단편화이고,
    • 또 하나는 물리 메모리보다 큰 프로세스를 실행할 수 없다는 문제이다.
  • 이러한 문제를 해결하는 운영체제의 메모리 관리 기술이 바로 가상 메모리이다.
    • 가상 메모리 virtual memory 란 실행하고자 하는 프로그램의 일부만 메모리에 적재해, 실제 메모리보다 더 큰 프로세스를
      실행할 수 있도록 만드는 메모리 관리 기법이다.

페이징

  • 페이징 paging 은 프로세스의 논리 주소 공간을 페이지 page 라는 일정한 단위로 나누고, 
  • 물리 주소 공간을 페이지와 동일한 크기의 프레임 frame 이라는 일정한 단위로 나눈 뒤 
  • 페이지를 프레임에 할당하는 가상 메모리 관리 기법. 

 

세그멘테이션

  • 또 다른 가상 메모리 기법
  • 프로세스를 일정한 크기의 페이지 단위가 아닌 가변적인 크기의 세그먼트 단위로 분할하는 방법이다.

 

 

페이징 테이블

  • 페이징은 외부 단편화 문제를 해결할 수는 있지만, 내부 단편화라는 또 다른 문제를 야기한다.
  • 페이징은 프로세스의 논리 주소 공간을 페이지라는 일정한 크기의 단위로 나누는 방식이지만, 모든 프로세스가 페이지 크기에 딱 맞게 잘리는 것이 아니다.
    • 다시 말해, 모든 프로세스의 크기가 페이지의 배수가 아닌데.
    • 가령 페이지 크기는 10KB인데 프로세스의 크기가 107KB인 경우, 마지막 페이지는 3KB만큼이 남는다.
  • 이렇게 페이지 하나의 크기보다 작은 크기로 발생하게 되는 메모리 낭비를 내부 단편화 Internal Fragmentation 라고 한다.

 

6 파일 시스템

파일 할당

  • 운영체제는 파일과 디렉터리를 블록 block 이라는 단위로 읽고 쓴다.

 

파일 시스템

 

하드 링크와 심볼링 링크 

  • 하드 링크는 같은 아이노드 번호를 갖는 파일을 생성하는 작업이므로 하드 링크 파일과 원본 파일은 같은 파일 데이터를 공유하며, 하드 링크 파일을 변경하면 원본 파일도 변경된다. 
  • 하드 링크 파일이 남아있다면 원본 파일이 삭제되거나 이동되더라도 파일 데이터에 접근할 수 있다. 
  • 하드 링크 파일은 동일한 파일을 여러 이름으로 참조하고 싶을 때 사용한다. 
  • 심볼릭 링크 파일은 같은 파일 데이터를 공유하지 않고 원본 파일의 위치만을 저장하기 때문에 하드 링크 파일과는 달리 원본 파일이 삭제되거나 이동되는 경우에는 사용이 불가능하다. 
  • 심볼릭 링크 파일은 복잡한 경로에 있는 파일을 바로가기 파일의 형태로 간단하게 참고하고 싶을 때 사용한다. 

 

마운트

  • 어떤 저장장치의 파일 시스템에서 다른 저장장치의 파일 시스템으로 접근할 수 있도록 파일 시스템으로 편입시키는 작업을 의미한다. 

 

가상머신과 컨테이너 

  • 가상머신은 말 그대로 소프트웨어적으로 만들어 낸 가상의 컴퓨터다.
  • 이 가상머신을 만들고 실행하기 위해 사용되는 소프트웨어를 하이퍼바이저라고 한다. 
    • 하드웨어 수준의 자원 격리 및 가상화를 제공한다. 
    • 하드웨어 수준의 가상화는 근원적인 자원 격리가 가능하지만, 큰 오버헤드로 인해 속도가 느리거나 용량을 많이 차지한다. 
  • 최근 각광받는 기술인 컨테이너는 기본적으로 동일한 운영체제(커널)을 공유한다.
    • 주어진 특정 프로세스를 실행하는데 필요한 자원만을 격리한다. 
    • 컨테이너는 가상 머신에 비해 더 경량화되어 있고, 플랫폼에 구애받지 않는 실행에 유리한다. 
반응형