운영체제(OS)
컴퓨터 하드웨어와 사용자 사이에서 중간 역할을 수행하며, 하드웨어 자원을 효율적이고 안전하게 관리하고, 사용자 프로그램이 원활하게 실행되도록 지원하는 시스템 소프트웨어
커널
운영체제의 핵심 부분, 하드웨어와 직접 상호작용 하여, 자원 관리와 시스템 콜 처리를 담당하는 코드 영역, 일반적으로 운영체제는 커널을 지칭한다.
역할
운영체제는 CPU, 메모리 등의 하드웨어를 효율적으로 사용할 수 있도록 관리하고, 애플리케이션이 자원을 효율적으로 할당받아 문제 없이 실행될 수 있도록 한다.
CPU 관리(CPU 스케줄링)
CPU가 실행 중인 프로그램을 모두 동시에 실행할 수 있는 것은 아니므로, 프로그램들이 효율적으로 CPU를 할당받도록 할당 순서와 사용 시간을 결정하는 역할
메모리 관리(가상 메모리)
프로그램을 메모리에 적재하고 해제하는 과정에서 낭비되는 메모리 용량이 없도록 관리하는 기능, 실제 메모리보다 더 큰 메모리를 사용할 수 있게 하는 가상 메모리를 관리하는 역할
프로세스, 스레드 관리
동시에 실행되는 프로세스와 스레드가 올바르게 처리되도록 순서를 제어하고, 자원을 적절히 배분하는 역할
- 프로세스: 실행 중인 프로그램, 독립적인 메모리 공간을 가진다.
- 스레드: 프로세스의 작업 단위: 프로세스 내에서 실행되는 작업 흐름 단위, 같은 프로세스 내 스레드끼리는 메모리를 공유한다.
시스템 콜(system call)
운영체제의 서비스를 제공받기 위한 인터페이스, 호출 가능한 함수의 형태를 가진다. 운영체제는 커널 영역에 적재되며, 애플리케이션은 유저 영역에 적재된다.
애플리케이션은 하드웨어에 직접 접근할 수 없다. 따라서 운영체제의 기능(하드웨어 접근과 같은)을 사용하기 위해서는 해당 기능에 해당하는 시스템 콜을 호출해야 한다. 애플리케이션은 실행 과정에서 시스템콜을 매우 빈번하게 호출한다.
시스템 콜의 처리 흐름
시스템 콜도 소프트웨어 인터럽트의 일종이다.
- 애플리케이션이 시스템 콜을 호출한다. (소프트웨어 인터럽트 발생)
- 커널 영역의 시스템 콜 핸들러를 처리한다.
- 다시 유저 영역의 코드를 실행한다.
이중 모드(dual mode)
CPU는 애플리케이션이 시스템 자원에 직접 접근하는 것을 방지하기 위해, 커널 영역과 유저 영역의 코드를 실행할 때의 모드를 구분한다. 이것을 이중 모드라고 한다.
- 커널 모드: 커널 영역에 있는 코드를 실행할 때의 모드
- 운영체제 서비스를 제공받을 수 있다.
- 유저 모드: 유저 영역에 있는 코드를 실행할 때의 모드
- 운영체제 서비스를 제공받을 수 없다. (자원에 접근이 불가능함)