운영체제 1강 정리 : 운영체제의 기능

    이번 포스팅은 반효경 교수님의 KOCW 운영체제 강의를 듣고, 해당 내용을 개인적으로 정리해본다. 틀린 부분이 있을 수 있으니, 애매한 부분은 반드시 강의 다시 한번 살펴보기

     

    운영체제란?


    운영체제는 컴퓨터 H/W 위에 올라가는 S/W며, 각종 S/W와 사용자, 그리고 H/W를 연결해주는 역할을 하는 S/W다.

     

    운영체제의 목적


    1. 컴퓨터의 사용을 편리하게 해주며, 각 프로그램마다 독립적인 결과를 나타낼 수 있도록 한다.
    2. 컴퓨터의 자원을 관리하여 성능을 최대한으로 낼 수 있도록 돕는다. 
      - 효율성 : 적절하게 자원을 분배하여 최대한의 성능을 낸다.
      - 형평성 : 특정 프로그램에만 많은 자원이 분배되지 않는다.

    운영체제는 각 프로그램마다 독립적인 결과를 나타낼 수 있도록 한다. 운영체제는 각 프로그램을 추상화 시켜주고, 이들이 독립적으로 실행된다고 생각하는 환경을 제공하여 1대의 Physical 머신으로 각각의 독립적인 결과를 나타낼 수 있도록 돕는다.

    운영체제의 가장 중요한 목적은 컴퓨터 자원을 효율적으로 사용하여 최대한의 성능을 내는데 그 목적이 있다. 

     

    운영체제의 기능


    • CPU 스케쥴링
    • 메모리 관리
    • 디스크 스케쥴링
    • 캐싱, 인터럽트

    각각이 작용하는 부분은 위의 이미지를 참고하면 된다. 자세한 설명은 아래에 추가한다.

     

    운영체제의 기능 : CPU 스케쥴링


    운영체제는 CPU 스케쥴링 기능을 가진다. CPU는 클럭 단위로 메모리에 저장된 기계어를 읽어와 실행시켜주는 역할을 한다. 즉, 실행된 프로그램이 클럭 단위로 시간차를 두고 실행되게 된다. 이런 이유 때문에 운영체제는 CPU에서 메모리에 있는 값을 읽어오고 실행하는 순번의 스케쥴링을 해준다.

    CPU 스케쥴링 :  FCFS

    FCFS(First Come, First Served)는 먼저 들어온 작업부터 먼저 수행하는 스케쥴링 방식이다. CPU는 프로세스를 하는 동안 프로그램에게서 CPU 제어권을 빼앗지 않는다. FCFS는 형평성 관점에서는 괜찮은 방법이 될 수 있으나, 효율성 관점에서는 좋지 않는 방법이다. 프로세스들의 평균 대기 시간이 길기 때문이다.

    프로세스 필요 시간 대기 시간
    A 30 0
    B 5 30
    C 5 35
    D 5 40

    위의 표는 프로세스 A,B,C,D가 간발의 차이로 CPU 큐에 들어왔을 때를 가정한 것이다. 이 때, 각 프로세스가 기다려야 하는 대기 시간은 위의 표에서 정리가 된다. 그리고 대기 시간의 평균을 구하게 되면, 각 프로세스는 평균 26초 정도의 시간을 대기해야한다. 

    쉽게 얘기해서 앞에 똥을 3시간 싸는 사람이 있다고 하면, 1분만에 싸는 사람들이라고 할지라도 3시간동안 똥을 참고 있어야 한다는 이야기다. 이런 이유 때문에 효율성 관점에서 좋지 않다.

     

    CPU 스케쥴링 : SJF

    SJF(Shortest Job First)는 작업 시간이 적은 프로세스부터 처리하는 방식이며, 프로세스가 끝날 때까지 CPU는 프로세스로부터 제어권을 뺏지 않는다. FCFS가 형평성이 좋다고 한다면, SJF는 효율성이 좋다. FCFS와 동일한 경우를 SJF 방식으로 스케쥴링 했을 때의 값을 계산해보자.

    프로세스 필요 시간 대기 시간
    A 30 15
    B 5 0
    C 5 5
    D 5 10

    위 표의 대기시간을 바탕으로 각 프로세스의 평균 대기시간을 구하게 되면 평균 7.5초가 된다. 효율성 관점에서는 가장 빠르다. 그렇지만 이 방법은 Starvation(기아 현상)을 가져올 수 있다. 짧은 프로세스가 계속 들어온다면, 느린 프로세스는 컴퓨터가 꺼지는 그 순간까지도 실행이 안될 수 있기 때문이다. 즉, SJF 스케쥴링은 형평성 관점에서 문제가 있다. 

     

    CPU 스케쥴링 : RR

    RR(Round Robin)은 정해진 시간만큼만 각 프로세스에 CPU 사용권을 주는 스케쥴링 방식이다. 정해진 시간이 끝나면, 프로세스가 끝나지 않아도 CPU 사용권은 회수되고 다음 프로세스가 CPU를 사용한다. 끝나지 않은 프로세스는 다시 CPU 큐에 들어와서 대기하고, 실행이 완료된 프로세스는 CPU 큐로 들어오지 않는다.

    Round Robin 스케쥴링은 형평성과 효율성 두 마리 토끼를 다 잡은 스케쥴링으로 볼 수 있다. 그 이유는 평균 대기 시간이 FCFS와 비교했을 때 상대적으로 짧기 때문이다. 

     

     

     

     

    운영체제의 기능 : 메모리 관리


    운영체제는 한정된 메모리를 분배하는 역할을 한다. 프로그램마다 필요한 메모리를 확인해, 적절한 수준의 메모리를 각 프로그램마다 분배하는 역할을 한다.

     

    운영체제의 기능 : 디스크 스케쥴링


    CPU는 가끔 디스크에 있는 값을 읽어오라는 명령어를 실행하기도 한다. 이 때, CPU는 디스크에 바로 접근하는 것이 아니라 I/O 컨트롤러에 명령을 전달하고 다른 작업을 하고 있다. I/O 장치는 CPU에 비해 매우 느리기 때문에 디스크에 입력 명령어가 들어오자마자 모든 것을 처리할 수 없다. 따라서, 디스크에 들어오는 명령어 쌓일 수 있다. 이 때, 운영체제는 디스크에 들어오는 명령어를 적절하게 관리해준다. 디스크 스케쥴링은 엘리베이터 스케쥴링과 거의 동일하다고 한다.

     

    운영체제의 기능 : 캐싱 / 인터럽트


    캐싱 : 디스크에서 특정한 값을 읽어오라는 명령을 줄 수가 있다. 이 값이 단발적인 값이 아니라, 계속 접근되는 값이라면 어디다가 저장해두고 쓰면 효율적이다. 캐싱은 디스크에서 자주 접근되는 값을 메모리에 올려두고, 바로바로 접근하는 기능이다.

    인터럽트 : 컴퓨터 내부와 외부의 속도 차이는 아주 크다. 따라서 내부에서 외부에 어떤 명령을 내렸을 때, 완료되는 시점까지 기다리는 것은 시간 낭비다. CPU는 일을 시킨 후, 다른 작업을 계속해나간다. 이 때, I/O 컨트롤러는 CPU가 입력한 명령을 다 수행하면, 그 결과를 CPU에게 인터럽트 방식으로 알려준다. 

    CPU는 매 클락마다 기계어 수행이 완료되면, 인터럽트를 확인한다. 인터럽트를 확인하고, 인터럽트가 있다면 운영체제로 다시 접근해서 추가 명령을 수행하는 방식이다.

     

    프로세스의 과정


    프로세스는 현재 실행되고 있는 프로그램을 뜻한다. 프로세스의 과정은 현재 실행되고 있는 프로그램이 어떻게 실행되고 있는지를 도식화한 것이다.

    1. 먼저 CPU 큐에 CPU에서 실행해야 하는 명령어들이 들어온다.
    2. 그 중 하나가 나와 CPU에서 실행된다. 클락 단위로 실행하고, 다시 CPU 큐로 들어간다. 
    3. CPU 명령 중 디스크 접근 명령이 나오면, CPU 명령어를 CPU 큐로 다시 넣지 않고 디스크 큐로 넣는다.
    4. 디스크 큐에서 디스크 스케쥴링을 통해서 CPU 명령을 각각 진행한다. 진행이 완료되면 CPU에 인터럽트를 보낸다.
    5. CPU는 매 기계어 수행이 완료된 후, 인터럽트를 확인한다. 인터럽트가 확인되면, 디스크 메모리에 있는 값을 내부 메모리로 올린다. 그리고 디스크 큐에 있는 명령을 CPU 큐로 올려준다.

     

     

    프로그램의 종류


    프로그램은 크게 두 가지 종류로 나뉜다고 한다.

    1. Interactive Application : (I/O + CPU) * n. 즉, 입출력과 CPU 연산이 번갈아 가는 프로그램. 채팅 프로그램
    2. Sciencific Application : CPU * n + I/O. 많은 CPU 연산 후, 간헐적 I/O. 예를 들면 머신러닝.

     

    참고사항


    • CPU는 메모리에 저장된 기계어를 읽고 수행하는 기능만 하는 H/W다.
    • 메모리는 CPU의 작업 공간이다. CPU가 작업을 하기 위해서는 반드시 메모리에 그 값이 올라와있어야 한다.
    • 운영체제는 CPU가 읽은 기계어를 잘 처리할 수 있도록 스케쥴링하는 S/W다.
    • 부팅은 운영체제가 메모리 영역에 상주하는 것을 의미한다. 이 때, 운영체제의 핵심인 커널만 상주한다고 한다.

     

    댓글

    Designed by JB FACTORY