정의 및 특징

운영체제란(Operating System)

  • 컴퓨터의 시스템 자원들을 효율적으로 관리함으로써 성능을 높이고, 사용자에게 편의성을 제공하기 위해 사용됨
  • 사용자와 컴퓨터 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종
  • 운영체제와 유사하나 소프트웨어를 추가로 설치할 수 없는 것을 펌웨어(firmware)라고 함

 

운영체제의 역할

  1. 자원 관리
    • 프로세스 관리
      • 프로세스 스케줄링을 통한 CPU 소유권 할당 및 동기화
      • 프로세스 생성과 제거, 시작과 정지, 자원 할당 및 반환
    • 메모리/주변장치 관리
      • 한정된 메모리를 어떤 프로세스에 얼마나 할당할지
      • 디스크 파일을 어떻게 보관할지
      • 입출력 장치 스케줄링 및 전반적인 관리
    • 파일 관리
      • 파일의 생성과 삭제, 변경, 유지 등
  2. 자원 보호
    • 프로그램이나 다른 사용자가 중요 데이터에 접근하지 못하게 컴퓨터 자원들을 보호

 

운영체제의 목적

  • 처리능력, 사용 가능도, 신뢰도 향상
  • 응답 시간 감소
응답시간 (Turn Around Time) 작업 의뢰 후 시스템에서 결과가 얻어질 때까지의 시간
처리능력 (Throughput) 시스템의 생산성을 나타내는 단위. 일정기간 동안 처리하는 일의 양
사용가능도 (Availability) 시스템을 얼마나 빠르게 사용할 수 있는가의 정도
신뢰도 (Reliability) 주어진 문제를 얼마나 정확하게 처리하는가의 정도

 


운영체제의 구조

전체적인 구조

  • 유저 프로그램이 맨 위에 있고 가장 밑에 하드웨어가 위치
  • 가운데 인터페이스, 시스템콜, 커널, 드라이버 부분이 운영체제를 지칭함

 

인터페이스

https://youtu.be/onMSNY45giw

  • 사용자는 커널에 직접 접근할 수 없기 때문에 OS가 제공하는 인터페이스를 사용해야 함
  • 대표적으로 GUI(Graphical User Interface)CLI(Command Line Interface)가 있음
  • 사용자와 애플리케이션은 인터페이스를 통해 커널에 명령을 전달하고, 실행결과를 전달받음
  • 참고로 GUI가 없고 CUI만 있는 리눅스 서버도 있음

 

커널과 쉘

  • 커널
    • 운영체제의 핵심으로, SW와 HW간의 커뮤니케이션을 관리하는 프로그램
    • SW로부터의 요청을 HW가 처리할 수 있도록 요청을 반환하는 역할을 함
    • 프로세스, 메모리, 저장장치를 관리하는 핵심적인 기능을 수행
    • 알맹이, 핵심이라는 뜻을 가짐
    • 사용자와 OS 간에 대화를 가능하게 해주는 명령어 해석기 역할
    • 커널과 애플리케이션의 인터페이스 역할
    • 껍데기, 주변이라는 뜻을 가짐

 

시스템 호출(system call)

  • 운영체제가 커널에 접근하기 위한 인터페이스로, 커널이 자신을 보호하기 위해서 만든 인터페이스
  • 애플리케이션이 직접 하드웨어 자원에 접근하거나 수정하여 중요 데이터가 소실되는 실수를 방지하기 위해 시스템콜을 사용
  • 즉 애플리케이션이 하드웨어에 접근해야 하거나 OS가 제공하는 서비스를 이용하기 위해서는 커널 함수를 호출하는 시스템 콜을 사용해야 함
  • 시스템 콜을 제공함으로써 OS는 컴퓨터 자원을 보호하게 됨

 

드라이버

  • 커널과 하드웨어의 인터페이스를 드라이버라고 함
  • 보통 커널은 입출력의 기본적인 부분만 제작하여 마우스, 키보드같은 하드웨어는 별다른 설치 없이 작동하게 됨
  • 프린터나 스캐너같이 복잡한 하드웨어의 경우 제작사가 만든 SW를 따로 설치해서 사용해야 하며, 이때 이 SW를 디바이스 드라이버라고 함

 


시스템 콜

동작 방식

  • 시스템 콜은 인터럽트 중 하나인 소프트웨어 인터럽트(Trap)의 한 종류
  • 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 사용
  • 유저 프로그램이 I/O 요청으로 트랩(trap)을 발동하면 올바른 I/O 요청인지 확인한 후 유저 모드가 시스템 콜을 통해 커널 모드로 변환되어 실행

 

예시

  • readFile()이라는 함수가 발동했다고 가정하자
  • 유저 모드에서 파일을 바로 읽지 않고 커널 모드로 들어가 읽음
  • 다시 유저 모드로 돌아가 그 뒤에 있는 유저 프로그램의 로직을 수행함
  • 이 과정을 통해 컴퓨터 자원에 대한 직접 접근을 차단할 수 있고 프로그램을 다른 프로그램으로부터 보호할 수 있음

 

전체적인 흐름

  • 프로세스나 스레드에서 운영체제로 어떠한 요청을 보낼 때 시스템콜이라는 인터페이스와 커널을 거쳐 운영체제에 전달됨
  • 시스템콜은 하나의 추상화 계층
  • 따라서 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역 처리에 대한 부분을 크게 신경쓰지 않고 프로그램을 구현할 수 있음

 

modebit의 역할

  • modebit은 1또는 0 값을 가지는 플래그 변수(0은 커널 모드, 1은 유저 모드)
  • 시스템콜이 작동될 때 이를 통해 유저 모드와 커널 모드를 구분
  • 카메라, 키보드 등 I/O 디바이스는 운영체제를 통해서만 작동해야 함
  • 커널 모드를 거쳐 운영체제를 통해 작동한다고 해도 외부에 의해 악용되는 경우를 100% 막을 수는 없지만, 막기가 더 쉬움

 

  • 유저 프로그램이 카메라를 이용하려고 할 때 시스템 콜을 호출하고 modebit을 1에서 0으로 바꾸며 커널 모드로 변경
  • 그 후 카메라 자원을 이용한 로직을 수행
  • modebit을 0에서 1로 바꿔 유저 모드로 변경하고 이후 로직을 수행

 


운영체제의 주요 과정

부트스트래핑(bootstraping)

  • 운영체제를 메인 메모리에 적재하는 과정을 부팅, 또는 부트스트래핑이라고 함
  • ROM에는 부트로더(부트스트랩 로더)라는 소규모 프로그램이 있으며, 하드디스크와 같은 보조기억장치에 저장된 OS를 메인 메모리에 적재하는 기능을 함
    • ROM: 비휘발성으로 메모리에서 극히 일부를 차지(수 KB)
    • RAM: 휘발성으로 메모리의 대부분을 차지하며 실제 프로그램이 할당되는 곳(수 MB~GB)

 

  • 컴퓨터의 전원이 켜지면 부트 로더의 과정, 즉 “부팅”이 일어남
    1. 프로세서(CPU)에서 ROM에 있는 내용을 읽음
      ROM 안에는 POST(Power-On Self-Test)와 부트로더가 저장되어 있음
    2. POST는 전원이 켜지면 가장 처음에 실행되는 프로그램으로 현재 컴퓨터의 상태를 검사함
    3. POST 작업이 끝나면 부트 로더가 실행됨
    4. 부트 로더는 하드디스크에 저장되어 있는 OS를 찾아 메인 메모리(RAM)에 가져옴
  • OS는 컴퓨터의 전원이 꺼지는 시점에 종료됨

 

인터럽트(Interrupt)

  • 현재 실행 중인 프로그램을 중단하고 다른 프로그램의 실행을 요구하기 위해 발생하는 명령
  • 다중 프로그래밍을 위해 없어서는 안될 기능
  • 키보드, 마우스 등 IO 디바이스로 인한 인터럽트, 0으로 숫자를 나누는 산술 연산에서의 인터럽트, 프로세스 오류 등으로 발생
  • 인터럽트 간에는 우선순위가 있고 우선순위에 따라 실행

 

https://velog.io/@adam2/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8

  • 하드웨어의 인터럽트
    • Timer, 키보드/마우스 입력, DMA 등
    • 시스템 버스를 통해 물리적 신호가 CPU로 전달됨
  • 소프트웨어의 인터럽트
    • 시스템 콜로써 구현될 수 있음
    • 인터럽트 요청 신호에 따라 인터럽트 함수(인터럽트 서비스 루틴)가 실행됨
    • 인터럽트 핸들러 함수가 모여있는 인터럽트 벡터를 통해 인터럽트 핸들러 함수가 실행됨
    • 인터럽트 발생 시 이전 실행 정보를 스택 영역에 저장하고 있어야 이후 다시 프로그램을 이어서 실행할 수 있음

 


References

+ Recent posts