-
Kernel
- 컴퓨터에 전원을 켜면 운영체제는 이와 동시에 수행된다.
- 운영체제도 소프트웨어이기 때문에, 전원이 켜짐과 동시에 메모리에 올라가야 하는데, 덩치가 너무 크기 때문에 이와 같은 작업을 전원을 켤 때마다 하는 것은 비효율적이다.
- 따라서, 운영체제 전체 중 항상 필요한 부분에 대해 전원이 켜짐과 동시에 메모리에 올리고, 운영체제 전체 중 필요 없는 부분에 대해서는 필요할 때 메모리에 올려서 사용한다.
- 이 때, 메모리에 상주하는 운영체제의 부분을 커널(kernel)이라고 한다.
- 다시 말해, 운영체제는 커널을 포함하는 더 큰 개념이고, 커널은 운영체제의 핵심 부분이다.
- 커널의 핵심 역할은, '보안', '자원 관리', '추상화'이다.
Shell
- 커널의 사용자와의 상호작용을 위해, 시스템 프로그램이 필요하고, 쉘(shell)은 대표적인 시스템 프로그램이다.
- 쉘은 명령어 해석기로, 사용자가 컴퓨터에게 전달하는 명령을 해석하여 사용자와의 상호작용을 가능케 한다.
User Mode & Kernel Mode
- user application이 함부로 운영체제의 치명적인 데이터를 수정하거나 삭제하지 못하게 하기 위해, 두 가지 프로세서 접근 모드를 지원한다.
- user mode보다 kernel mode에 더 높은 권한을 줌으로써, 시스템 전체의 안전성을 보장한다.
- system call을 통해 user mode에서 kernel mode로 동작 요청을 한다.
- 요청을 하면, kernel mode로 전환되었다가, 작업 완료 후 다시 user mode로 돌아간다.
User Level Thread & Kernel Level Thread
- thread는 'user thread'와 'kernel thread'로 나뉠 수 있다.
- user thread는 kernel 위에서 kernel의 지원 없이 관리된다.
- kernel thread는 운영체제에 의해 지원 및 관리된다.
- kernel level thread (커널 레벨 스레드)
- 커널 스레드는 운영체제에서 구현된다.
- 운영체제가 프로세스 내에 여러 스레드가 있다는 것을 알고 있기 때문에, 커널 스레드의 생성 및 스케줄링 등을 관리한다.
- user thread : kernel thread = 1 : 1
- 장점
- 커널이 각 스레드를 개별적으로 관리할 수 있다.
- 한 스레드가 중단되어도, 같은 프로세스 내의 다른 스레드들을 계속 실행 가능하다.
- 단점
- user level thread에 비해 생상 및 관리가 느리다.
- 유저 모드와 커널 모드 간 전환이 빈번하여, 성능 저하를 일으킨다.
- user level thread (사용자 레벨 스레드)
- 스레드 기능을 제공하는 라이브러리를 활용하는 방식이다. (예 : #include)
- 커널에 진입하지 않아도 된다.
- 사용자 영역에서 스레드의 연산을 수행한다.
- 장점
- 스케줄링과 동기화를 위해 system call을 하지 않기 때문에 오버헤드가 적다.
- 커널이 스레드의 존재를 모르기 때문에, 유저 모드와 커널 모드 간 전환이 없다.
- 단점
- 운영체제 입장에서 프로세스 안에 여러 스레드가 있다는 것을 모르기 때문에, 커널은 하나의 프로세스로 인식한다. 따라서 하나의 스레드가 중단되면, 동일 프로세스 내의 모든 스레드가 중단된다.
- 스케줄링 우선순위를 지원하지 않으므로, 어떤 스레드가 먼저 동작할지 모른다.