본 내용은 공룡책이라 불리는 Abraham Silberschatz, Peter Baer Galvin, Greg Gagne의 『Operating System Concept 10th』 을 바탕으로 작성하였습니다.
운영체제는 프로그램들이 실행될 환경을 제공한다.
정확하게는 특정 서비스를 프로그램과 사용자들에게 제공하는데, 이 서비스들이 개발자가 프로그래밍을 더욱 쉽게 할 수 있게 해준다.
시스템 콜이란 운영체제가 제공하는 서비스에 대한 인터페이스를 제공한다.

a file의 내용을 b file에 복사하는 과정이다. 간단한 작업인데도 수많은 system-call이 사용된다.
개발자들은 이 모든 system call을 알 필요없이 API(application programming interface)를 사용해서 작업을 수행한다.
API는 특정 함수들의 집합인데 이 함수들이 system call을 대신 해준다.
RTE (Run time environment)가 system call의 인터페이스를 제공한다.
API의 호출을 가로채서 실제 OS의 시스템 콜을 호출한다.
그냥 사용자는 구체적인 것을 몰라도 된다라고 생각하면 된다.
운영체제가 생성된 이후에 하드웨어에 의해 사용가능한 상태가 되어야 한다.
하드웨어는 다음과 같은 방법으로 커널을 적재한다.
BIOS라는 첫 번째 부트로더가 실행되고, 이 부트로더가 두 번째 부트로더(boot block)을 적재하는 경우도 있다.
두 번째 부트로더가 전체 OS 를 메모리로 가져오고 실행시킨다.
오늘날에는 BIOS 대신 UEFI가 사용되는데 부트 로더가 상태 진단, 초기화등의 기능을 추가로 수행한다.
GRUB은 Linux와 Unix에서 쓰이는 부트 로더인데, 이는 부팅하는 동안 kernal 매개변수를 수정하고 특정 kernal을 선택하는 등의 기능을 가지고 있다.
공간을 아끼기 위해 압축되어 disk에 올려졌다가, 메모리에 올라가서 압축해제 된다.
부팅 과정에서 진짜 파일 시스템을 설치하기 위해 필요한 필수 드라이버와 kernal 모듈을 가지고 있는 일시적인 RAM 파일 시스템 'initramfs' 를 만든다.
커널이 시작되고 필수 드라이버가 설치되면 진짜 파일 시스템으로 전환하고, initial process 인 'systemd'를 생성한다.
Mobile은 initramfs를 진짜 파일 시스템으로 계속 사용한다.
또한 부트 로더는 하드웨어 이슈를 진단하고, 파일 시스템을 수정하고, os를 재설치할 수 있는 recovery mode도 제공한다.