커널은 어떻게 프로세스를 관리할까?

Ji_min·2021년 4월 4일
2

CS 공부

목록 보기
2/9

엘리스 CS 지식 공유 스터디 2회차
주제 : 커널의 개념과 커널이 프로세스를 관리하는 방식


목차
1. 운영체제란?
2. 하드웨어 장치들 간 동작 원리
3. 프로그램의 실행을 위한 주소 공간

1. 운영체제란?

운영체제의 개념

의미

  • 운영체제(Operating System, 이하 OS)란 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로, 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결한다.
  • 좁은 의미의 OS → 커널 : 운영체제의 핵심으로, 컴퓨터가 켜진 후 항상 메모리에 상주하는 부분
  • 넓은 의미의 OS → 커널을 포함해서 주변의 시스템 유틸리티(메모리에 상주하지 않는 별도의 독립적인 프로그램들)를 모두 포괄하는 개념
    → (전공자 입장에서의) OS는 보통 커널만을 의미함

역할

  • OS의 중간적 위치에 따른 두 가지 역할
    - 하드웨어 윗부분 계층 → 하드웨어(자원)의 효율적 관리
    - 사용자 및 소프트웨어 아랫부분 계층 → 사용자가 컴퓨터를 편리하게 사용할 수 있는 환경(인터페이스) 제공

    이미지 출처

  • 자원을 효율적으로 관리 → 자원 관리자

    c.f 자원(Resource) : CPU, 메모리, I/O 장치 등의 하드웨어 자원 + 프로세스, 파일, 메세지 등의 소프트웨어 자원을 의미 → OS는 두 종류의 자원을 모두 관리

    • WHY? 하나의 리소스를 여러 프로그램이 공유하기 때문에 자원의 관리가 필요

    • HOW?

      1. 여러 프로세스에 짧은 시간씩 CPU를 번갈아 할당 → CPU 스케쥴링

        c.f 프로세스 = (사용자) 프로그램

      2. 실행중인 프로세스에 메모리 공간을 적절히 분배 → 메모리 관리

      • OS가 어떤 정책을 쓰느냐가 문제가 됨 (어떻게 리소스를 분배할 것인지)

      • 마치 한정된 예산으로 국가의 살림을 운영하는 행정부같은 느낌

      • OS의 최우선 목표는 효율성이고, 차선 목표는 형평성

        c.f 형평성 : 하나의 프로세스가 CPU를 독점하지 못하도록 하는 것

      • 최우선 목적 : 주어진 자원으로 최대한의 성능을 내도록 하는 것

      • 부가적 목적 : 사용자 프로그램(프로세스) 간 형평성 있는 자원 분배

    • 컴퓨터가 제공하는 환상

      • 마치 여러 프로그램들이 동시에 실행되고 있는 것 같은 환상

      • (다중 사용자의 경우) 한 대의 컴퓨터 서버에서 돌아가고 있는 여러 프로그램들 중 마치 자신의 프로그램만 실행되고 있는 것 같은 환상

        → 위의 두 환상은 사실 일맥상통한데, 이런 환상을 만들어내는 게 OS의 역할이라고 할 수 있음


운영체제의 분류

  • 동시 작업 가능 여부에 따라
    • 단일 작업만 지원 : 한 번에 하나의 작업만 처리 ex) MS-DOS
    • 다중 작업을 지원 (현대의 운영체제) : 여러 프로그램이 동시에 실행되는 것을 지원해서 하나의 명령의 수행이 끝나기 전에 다른 명령이나 프로그램을 수행 가능 ex) 유닉스, 윈도우 등
  • 지원하는 사용자의 수에 따라
    • 단일 사용자만 지원 ex) MS-DOS, 윈도우
    • 다중 사용자를 지원 : 여러 사용자가 컴퓨터 한 대에 동시에 접속해서 사용 가능 → 하나의 서버에 여러 개의 계정을 만들고 여러 사람들이 동시에 접속해서 서버를 사용 ex) 유닉스
  • 처리 방식에 따라
    • 시분할 방식(time sharing)
      • 현대 운영체제의 방식
      • 여러 작업을 일정한 시간 단위로 나누어서 CPU를 번갈아 할당
      • 각각의 사용자 입장에서는 인터랙티브한 결과를 받아볼 수 있음 (응답 시간이 짧다는 의미)
      • But 사용자가 많아지면 느려질 수 있음
    • 실시간 처리방식(realtime OS)
      • 데드라인이 있어서 정해진 시간 안에 반드시 결과가 나오는 것을 보장해주는 방식
      • vs 시분할 방식은 데드라인이 없음
      • Special Purpose System : 특수한 목적성을 가진 방식이기 때문에 엄격한 기준에 의해 관리되어야 하는 분야에 사용됨 ex) 원자로 제어, 미사일 제어, 반도체 장비 제어 등
    • 일괄처리 방식(batch processing)
      • 작업을 일정량 모아서 한꺼번에 처리
      • 인터랙티브하지 않음 → 역사 속의 시스템
      • 작업 카드에 마킹(구멍을 뚫는 다든지)을 해서 전산소에 제출하면 컴퓨터가 컴파일해서 하루 뒤에 결과를 알려줌 (오류나면...ㅎ)

c.f 용어정리

  • 멀티 태스킹(multi tasking) : 컴퓨터가 여러 작업을 동시에 수행하는 행위 전반을 의미
  • 멀티 프로그래밍(multi programming) : 메모리에 여러 프로세스가 동시에 올라가 있는 것
  • 시분할(time sharing) : CPU의 시간을 분할해서 쓰는 것을 강조한 용어
  • 멀티 프로세서 (multi processor) : 하나의 컴퓨터에 여러 개의 CPU(프로세서)가 붙어있는 것 → 멀티 코어(multi core)와는 다른 개념

운영체제가 하는 일

  1. 하드웨어 관리

    • CPU : 어떤 프로세스에게 CPU를 줄지 결정 → CPU 스케쥴링

    • 메모리 : 한정된 메모리를 어떻게 쪼개서 쓸지 결정 → 메모리 관리

      • 어떤 프로세스를 메모리에 올려놓고 어떤 프로세스를 메모리에서 쫓아내야 할지 결정 → 미래를 예측하는 것이기 때문에 판단 근거가 필요 : 메모리의 지역성
    • 디스크 : 디스크의 파일 관리 → 디스크 스케쥴링

      • 디스크는 헤드가 움직이면서 파일을 읽어내기 때문에 헤드와 가까이 있는 파일을 먼저 읽어내는 방식이 더 효율적임 like 엘리베이터

        c.f CPU 스케쥴링 vs 디스크 스케쥴링

      • CPU 스케쥴링 : CPU가 너무 빠르기 때문에 어떤 것부터 처리할 것인지 결정하는 것

      • 디스크 스케쥴링 : 디스크의 헤드가 물리적으로 움직이기 때문에 최대한 움직임을 줄이는 방식을 고려해서 어떤 파일부터 읽어올 것인지 결정하는 것

    • I/O 장치 : CPU나 메모리같은 컴퓨터 디바이스보다 훨씬 느리기 때문에 I/O 장치와 컴퓨터 간에 어떻게 정보를 주고 받게 할지를 관리 → 입출력 관리

      • 인터럽트(interrupt)를 통해 CPU에게 요청
  2. 소프트웨어 관리 : 프로세스 관리 → 프로세스의 생성과 삭제, 자원 할당 및 반환, 프로세스 간 협력 등

  3. 그 외 : 보호 시스템, 네트워킹, 명령어 해석기(CLI, Command Line Interpreter)를 다룸


2. 하드웨어 장치들 간 동작 원리

이미지 출처

컴퓨터 시스템 구조

  • 컴퓨터 (호스트)

    • CPU : 매 클럭마다 메모리에서 기계어로 된 명령(instruction)을 읽어서 실행
    • 메모리 : CPU의 작업 공간
    • 인터럽트 라인(Interrupt Line) : I/O 요청이 들어왔을 때를 알아차리기 위한 장치
      • 인터럽트(Interrupt) : CPU가 실행하던 일을 멈추고 인터럽트를 통해 들어온 요청을 먼저 처리할 수 있도록 말그대로 CPU에 끼어드는 것
      • I/O 요청 → 시간이 오래 걸리기 때문에 요청을 보내놓고 CPU는 그 시간에 다른 일을 하고 있다가 interrupt가 들어오면 요청 결과를 확인하게 됨
      • interrupt는 interrupt line에 쌓이게 됨
      • CPU는 프로그램의 실행 명령 하나가 끝나면 인터럽트 라인을 체크함
      • interrupt가 들어오면 사용자 프로그램에게 있던 CPU의 제어권이 OS로 넘어가게 됨
    • 타이머 : 특정 프로세스가 CPU를 독점하는 것을 방지하기 위한 하드웨어 장치 (형평성 목적)
      • 프로세스 당 일정한 시간을 세팅해놓고, 세팅된 시간이 지나면 CPU에게 interrupt를 걸어서 알려줌
      • 하나의 프로세스가 일단 CPU를 차지하면 그게 끝날 때까지 OS는 CPU를 되찾아올 방법이 없다. 그래서 타이머의 interrupt를 통해 CPU 제어권이 사용자 프로그램으로부터 OS로 넘어가게 된다.
    • 모드 비트(Mode Bit) : CPU의 제어권을 누가 가지고 있는지를 체크하는 장치
      • CPU를 OS가 가지고 있는지 혹은 사용자 프로그램이 가지고 있는지에 따라 mode bit이 0이 되었다가 1이 되었다가 함
  • I/O 장치 : 키보드, 마우스, 프린터, 화면, 하드디스크 등

    c.f 하드디스크가 왜 I/O장치일까? 데이터를 읽어오는 input device 역할 및 파일을 저장하는 output device 역할을 수행하기 때문

    • 각각의 I/O device에는 내부를 통제하는 컨트롤러와 작업 공간인 Local Buffer가 존재

모드 비트(Mode Bit )

  • 0 : CPU가 OS의 코드를 실행하고 있음 → 커널 모드 / 모니터 모드 / 시스템 모드
    • 모든 장치에 대한 CPU 접근 허용 → 일반 명령 실행
  • 1 : CPU가 사용자 프로그램을 실행하고 있음 → 사용자 모드
    • 제한된 명령만 CPU에서 실행 가능 (보안 상의 목적) → 특권 명령 실행
  • OS가 사용자 프로그램에 CPU를 넘겨줄 때 mode bit을 1로 바꿔서 넘겨줌
  • interrupt가 발생하면 하드웨어가 mode bit을 0으로 변경

DMA 컨트롤러 (Direct Memory Access Controller)

  • 메모리에 직접 접근할 수 있는 장치
  • 원래 메모리에 접근할 수 있는 장치는 CPU뿐인데, interrupt가 너무 자주 들어오면 CPU는 자꾸 실행을 멈췄다가 다시 실행해야 해서 CPU의 효율성이 떨어지게 됨
  • 그래서 CPU의 일을 덜어줄 수 있도록 DMA 컨트롤러가 여러 interrupt를 한꺼번에 처리한 다음 CPU에게는 한 번의 interrupt만을 걸게 됨
  • DMA 컨트롤러는 buffer에 어느 정도의 데이터가 쌓이면 CPU에 알리고(=interrupt를 걸고) 메모리에 이 데이터를 직접 전송함
  • 바이트 단위가 아니라 블럭 단위로 interrupt를 발생시킴
  • 메모리 컨트롤러 : CPU와 DMA 컨트롤러가 동시에 메모리의 같은 공간에 접근하는 것을 막아주는 역할

컴퓨터 시스템 간 동작 원리

개괄적인 동작 과정

  1. CPU에서 실행 중인 프로그램 A가 디스크(또는 다른 I/O 장치)에 입력 요청을 보내야 할 일이 생긴다.
  2. CPU가 디스크에서 데이터를 읽어올 때, CPU는 직접 디스크에 접근하지 않고 디스크 컨트롤러에 명령을 해 놓는다.
  3. CPU는 명령을 던져놓고 자기는 다른 작업(다른 프로세스 B의 실행)을 계속 한다. (CPU는 매우 빠른 속도로 일하기 때문에 쉴 틈이 없다)
  4. 디스크가 요청이 들어온 데이터를 찾으면 local buffer에 넣어 놓는다.
  5. 디스크 컨트롤러는 buffer에 데이터가 들어오면 CPU에 interrupt를 건다.
  6. CPU가 interrupt line을 확인하고 interrupt가 들어온 게 있음을 확인한다.
  7. CPU의 제어권이 OS한테 넘어간다.
  8. OS는 왜 interrupt가 들어왔는지 살펴보고 요청을 보냈던 데이터가 들어왔음을 확인한다.
  9. OS는 입력된 값을 요청을 보냈던 프로그램 A의 메모리 공간에 카피를 해준 다음, 이미 실행되고 있었던 프로세스 B에 할당된 시간이 끝나기를 기다렸다가 끝나면 프로그램 A한테 CPU를 넘겨 준다.

시스템 콜을 통한 I/O의 수행

  • 사용자 프로그램은 OS를 통해서만 I/O 장치에 접근 할 수 있음 (직접 접근은 불가능)

  • 시스템 콜 : 사용자 프로그램이 커널 함수를 호출해서 I/O 장치에 대한 접근을 요청하는 것

    → interrupt의 일종

  • 동작 과정

    1. 사용자 프로그램은 직접 OS의 함수를 호출하지는 못한다. mode bit이 1일 때는 사용자 프로그램의 특권명령만 수행할 수 있기 때문이다.
    2. 그래서 사용자 프로그램은 CPU의 interrupt line에 interrupt를 걸어 놓는다.
    3. CPU가 interrupt line을 확인하면 mode bit이 0으로 바뀌고 CPU가 OS에 넘어가게 된다.
    4. OS가 CPU를 통해 I/O 요청을 보낸다.
  • 시스템 콜 = 소프트웨어 interrupt (trap)

  • 현대의 운영체제는 interrupt에 의해 구동된다.

인터럽트

  • 하드웨어 interrupt → 일반적 의미의 인터럽트

    • 타이머의 interrupt
    • 컨트롤러의 interrupt : 요청한 I/O 작업이 끝났다는 것을 CPU에게 알림
  • 소프트웨어 interrupt

    • 사용자 프로그램의 interrupt (trap) → 시스템 콜
    • exception : 허가되지 않은 동작의 경우 CPU는 실행을 멈춤 ex) 0으로 나누는 연산, mode bit이 1인데 사용자 프로그램이 OS에 접근하려고 한 경우
  • I/O의 요청은 소프트웨어 interrupt에 의해, 요청한 I/O가 끝났음은 하드웨어 interrupt에 의해 실행된다.

  • 인터럽트 처리 루틴

    • 각각의 인터럽트 종류마다 무슨 일을 해야할지는 OS의 코드에 정의 되어 있다.
    • 각 인터럽트가 들어왔을 때 실행해야 하는 커널 함수를 인터럽트 처리 루틴이라고 한다.
    • 인터럽트 처리 루틴 = 인터럽트 핸들러
  • 인터럽트 벡터

    • 인터럽트 처리 루틴의 주소를 가지고 있는 것 (인터럽트 번호 + 함수 주소 쌍)

3. 프로그램의 실행을 위한 주소 공간

프로그램의 주소 공간

가상메모리(virtual memory)

  • 프로그램은 실행 파일의 형태로 디스크에 저장되어 있다가 실행될 때 메모리로 올라가서 프로세스가 되어 실행되는데, 물리적인 메모리에 올라가기 전에 한 단계를 더 거친다. 바로 가상 메모리 단계이다.
  • 가상 메모리 단계에서 프로그램은 독자적인 메모리 주소 공간이 생기게 된다.
    • 코드 영역 : 코드가 담기는 부분
    • 데이터 영역 : 전역변수, 자료구조 등이 담기는 부분
    • 스택 영역 : 함수를 호출할 때 생기는 데이터(지역변수 등)가 쌓이는 부분
  • 이 중 당장 필요한 부분만 물리적인 메모리에 올렸다가 필요하지 않으면 디스크의 Swap Area에 내려놓는다.
  • 디스크의 swap area는 메모리의 용량에 한계가 있기 때문에 메모리 연장의 목적으로 사용되는 공간으로, 의미 없는 정보(휘발성을 띠는 데이터)를 담고 있다. (이곳의 데이터는 전원이 나가면 데이터가 사라지는 정보임)
  • 이 주소 공간은 프로그램이 종료되면 사라진다.
  • 가상 메모리 → 각 프로그램마다 가지고 있는 독자적인 주소 공간
  • 가상 메모리의 주소 변환 : 가상 메모리 → 물리 메모리에 올라갈 때 주소가 변환된다 (logical memory address → pysical memory address)

커널 주소 공간의 내용

커널도 메모리에 상주하는 부분이기 때문에 주소 공간을 가진다.

이미지 출처

  • 코드 영역 : 이미지 참고
  • 데이터 영역
    • 하드웨어(CPU, 메모리, 디스크)를 관리하고 통제하기 위한 각각의 자료구조
    • PCB(Process Control Block) : 프로세스 관리를 위한 자료구조 → 사용자 프로그램이 실행되면 각각의 프로세스를 관리하기 위한 자료구조가 생성됨
  • 스택 영역
    • 사용자 프로그램이 커널 함수를 호출하게 되면 사용자 프로그램마다 각자의 커널 스택이 생성됨

프로그램의 실행

프로그램이 사용하는 함수

  • 프로그램의 실행 파일 안에 포함되어 있는 함수 → 메모리 점프 가능

    • 사용자 정의 함수 : 자신의 프로그램에서 직접 정의한 함수
    • 라이브러리 함수 : 가져다 쓰는 함수
  • 프로그램의 실행 파일 안에 포함되어 있지 않은 함수 → 메모리 점프 불가능

    • 커널 함수 : 커널 코드 안에 들어있는 함수이기 때문에 사용자 프로그램 안에는 함수가 정의되어 있지 않다. 그래서 메모리 점프가 불가능하기 때문에 호출(→ 시스템 콜)을 통해 사용하게 된다.

    c.f 메모리 점프 : 프로세스의 메모리 주소를 변경하는 것

프로그램의 실행

  • 사용자 모드 : 프로그램이 직접 CPU를 붙잡고 있을 때
    • 사용자 정의 함수나 라이브러리 함수의 호출 시
  • 커널 모드 : CPU가 OS에게 넘어갔을 때
    • 커널 함수의 호출(프로그램의 시스템 콜) 시

한 줄 요약

  • 커널의 개념 : 컴퓨터가 켜진 후부터 메모리에 상주하는 운영체제의 실행 코드 모음으로, 하드웨어 및 사용자 프로그램 관리자 역할을 수행
  • 커널의 프로세스 관리 방식 : Interrupt를 통해서 이루어짐.
    • I/O 요청을 할 때 : 사용자 프로그램이 인터럽트를 걸면 CPU가 OS에게 넘어가서 OS가 해당 인터럽트에 해당하는 코드(인터럽트 처리 루틴)를 실행
    • I/O 요청의 결과를 받았을 때 : I/O 디바이스의 컨트롤러가 CPU에게 인터럽트를 걸면 OS가 확인하고 결과값을 요청한 프로그램에게 제공한 다음 CPU가 작업을 끝내면 결과를 받은 프로그램에게 CPU를 할당

참고한 자료

KOCW 운영체제 강의 (이화여자대학교, 반효경, 2014년 1학기) 를 듣고 정리한 내용입니다.

profile
Curious Libertine

0개의 댓글