Overview

OS에 포함되는 요소에 보편적인 정의는 없다. 하지만 커널은 OS의 핵심이 되는 프로그램으로 OS의 정체성을 결정한다. 커널은 항상 실행 중이며 시스템의 모든 것을 통제한다.

커널은 하드웨어의 자원을 자원이 필요한 프로세스에 나눠주고, 프로세스 제어, 메모리 제어, 프로그램이 OS 에 요구하는 시스템 콜을 수행한다. (사실상 OS가 하는 대부분의 일들)

초창기

초창기 컴퓨터의 OS에는 커널이 필수 요소가 아니었다. OS의 지원을 받지 않고 컴퓨터만으로 프로그램을 불러들인 다음 실행할 수 있었다. 다른 프로그램을 실행하기 위해서는 컴퓨터의 전원을 껐다가 킴으로써 다시 입력자료를 읽어야 했다. 이러한 과정이 반복되면서 사람들은 로더와 디버거 같은 작은 프로그램이 상주하는 것이, 다른 프로그램으로 교체하거나 새로운 프로그램을 개발하는 데 유리하다는 사실을 알게 되었다. 이와 같은 로더, 디버거들이 초기 OS 커널의 기초가 되었다.

커널, 쉘, 유틸리티

커널과 쉘 그리고 유틸리티

커널은 Memory Resident, 메모리에 항상 상주 중인 C 프로그램이다. 커널을 제외한 프로그램들은 Disk Resident로 필요할때마다 메모리에서 로딩해서 사용한다. 이런 프로그램을 유틸리티 혹은 command 라고 한다.

쉘은 특별한 유틸리티다. 쉘은 디스크에 있는 프로그램들을 메모리로 로딩하고, 다시 해제 시켜주는 프로그램이다. 즉 유틸리티 교통 정리를 해주는 역할.

커널과 쉘, 그리고 유틸리티 workflow

그림 출처

그림 출처

시스템을 부팅하면 제일 먼저 메모리에 커널이 올라온다.

그림 출처

그림 출처

리눅스는 멀티 유저 시스템이기 때문에 하나의 시스템에 다양한 유저가 들어올 수 있다. 각 유저가 터미널을 키면 쉘이라는 프로그램이 메모리에 올라온다. 그리고 유저가 커맨드를 입력함에 따라 대응하는 유틸리티를 디스크로부터 가져와 실행한다.

Linux vs Windows

Why protection is necessary in Linux

그림 출처

그림 출처

Windows는 PC를 위한 OS다. Single User System

Linux는 Multi User System, 여러 유저들의 터미널이 실행될 수 있어야 한다. 따라서 Multi User System은 하드웨어 자원을 최소한으로 사용해야 할 필요가 더 크다.