운영체제(OS)

컴퓨터 하드웨어와 사용자 사이에서 중간 역할을 수행하며, 하드웨어 자원을 효율적이고 안전하게 관리하고, 사용자 프로그램이 원활하게 실행되도록 지원하는 시스템 소프트웨어

커널

운영체제의 핵심 부분, 하드웨어와 직접 상호작용 하여, 자원 관리와 시스템 콜 처리를 담당하는 코드 영역, 일반적으로 운영체제는 커널을 지칭한다.

역할

운영체제는 CPU, 메모리 등의 하드웨어를 효율적으로 사용할 수 있도록 관리하고, 애플리케이션이 자원을 효율적으로 할당받아 문제 없이 실행될 수 있도록 한다.

CPU 관리(CPU 스케줄링)

CPU가 실행 중인 프로그램을 모두 동시에 실행할 수 있는 것은 아니므로, 프로그램들이 효율적으로 CPU를 할당받도록 할당 순서와 사용 시간을 결정하는 역할

메모리 관리(가상 메모리)

프로그램을 메모리에 적재하고 해제하는 과정에서 낭비되는 메모리 용량이 없도록 관리하는 기능, 실제 메모리보다 더 큰 메모리를 사용할 수 있게 하는 가상 메모리를 관리하는 역할

프로세스, 스레드 관리

동시에 실행되는 프로세스와 스레드가 올바르게 처리되도록 순서를 제어하고, 자원을 적절히 배분하는 역할

  • 프로세스: 실행 중인 프로그램, 독립적인 메모리 공간을 가진다.
  • 스레드: 프로세스의 작업 단위: 프로세스 내에서 실행되는 작업 흐름 단위, 같은 프로세스 내 스레드끼리는 메모리를 공유한다.

시스템 콜(system call)

운영체제의 서비스를 제공받기 위한 인터페이스, 호출 가능한 함수의 형태를 가진다. 운영체제는 커널 영역에 적재되며, 애플리케이션은 유저 영역에 적재된다.

애플리케이션은 하드웨어에 직접 접근할 수 없다. 따라서 운영체제의 기능(하드웨어 접근과 같은)을 사용하기 위해서는 해당 기능에 해당하는 시스템 콜을 호출해야 한다. 애플리케이션은 실행 과정에서 시스템콜을 매우 빈번하게 호출한다.

시스템 콜의 처리 흐름

시스템 콜도 소프트웨어 인터럽트의 일종이다.

  1. 애플리케이션이 시스템 콜을 호출한다. (소프트웨어 인터럽트 발생)
  2. 커널 영역의 시스템 콜 핸들러를 처리한다.
  3. 다시 유저 영역의 코드를 실행한다.

이중 모드(dual mode)

CPU는 애플리케이션이 시스템 자원에 직접 접근하는 것을 방지하기 위해, 커널 영역과 유저 영역의 코드를 실행할 때의 모드를 구분한다. 이것을 이중 모드라고 한다.

  • 커널 모드: 커널 영역에 있는 코드를 실행할 때의 모드
    • 운영체제 서비스를 제공받을 수 있다.
  • 유저 모드: 유저 영역에 있는 코드를 실행할 때의 모드
    • 운영체제 서비스를 제공받을 수 없다. (자원에 접근이 불가능함)