커널(Kernel)은 전원을 켰을 때, 메모리로 올라와 시스템이 동작되는 동안 계속 머무르는 부분이다. OS에서 가장 기초적이고 핵심적인 기능을 담당한다.위의 그림에서 Hard Ware를 Kernel이 감싸고 있는 이유는, 커널이 하드웨어를 제어하기 때문이다.
또, User Program(application)과 Kernel 사이에 Libary가 있는데 이는 커널에게 프로그램(혹은 어플리케이션)을 이해시켜 프로그램이 실행될 수 있도록 해준다. 만약 라이브러리가 없다면 매번 프로그램(어플리케이션)마다 적합한 OS(≒커널)을 바꿔줘야 한다.
사전 뜻인 '가로막다, 중단하다'등의 의미를 생각해보면 된다. 어떤 작업 중에 인터럽트가 들어온다면, 잠시 그 작업을 멈추고 인터럽트를 처리한다.(일하다가 전화오면 전화를 받고 처리하는 예시로 생각)
인터럽트는 크게 2가지로 나뉜다.
1. 하드웨어 인터럽트 : 프로세스 수행과 무관하게 발생하는 외부에서 오는 인터럽트 / CPU 연산 결과로 발생하는 하드웨어 인터럽트
2. 소프트웨어 인터럽트 : 프로그래머가 의도적으로 프로세스 중에 발생시키는 인터럽트
이러한 Interrupts를 처리해주는 Interrupt Handler가 있다. 이는, 인터럽트를 해석하고 서비스 루틴을 수해알 수 있도록 조절해준다.
커널과 라이브러리 사이에서 역할을 하는 통역자라고 할 수 있다. 트랩은 커널 안으로 들어가 커널 서비스를 제공받기 위한 하나의 절차라고 할 수 있다.
예를 들어, User가 프로세스 중에 시간을 알고 싶다는 요청을 하면 트랩을 통해 커널 안으로 요청이 가고, 커널은 이를 판단해서 서비스를 제공한다. Kernel과 Library 경계에서 기능을 수행하게 된다.
시스템 콜을 통해 유저가 커널에게 작업을 의뢰한다. 트랩에서 설명한 '시간을 알고 싶다'는 요청이 하나의 시스템 콜이라고 할 수 있다.
이미 project2에서 구현했지만 파일 열기, 지우기, 만들기 등등에 대한 명령들이 모두 시스템 콜을 통해 수행되는 것이다. 프로세스 중에 System call을 호출하면 트랩은 커널에게 시스템 콜을 전달한다. 이후 커널은 해당하는 시스템 콜을 처리한다.
메모리 직접 접근 방식으로, 나도 2번 정도 포스팅 한 것 같다.
OS를 배우는 과정에서, 특히 CPU의 사용률과 관련해서 이해하기 위해 한 번 더 그림을 첨부한다.
요점은 DMA Controller를 통해 CPU가 입력/출력 등이 이루어 질 때 실제 연산작업을 계속해서 할 수 있다는 점이다.
간단히 말해, 실제로 CPU에서 실행되는 프로세스(스레드)가 전환되는 것을 말한다. 즉, 현재 프로세스가 어떤 조건에 의해 잠시 실행이 안되고 다른 프로세스가 실행이 되는 것이다.
예를 들어, 라운드 로빈 스케쥴링에서는 일정 시간이 지나면 다른 프로세스로 문맥전환(Context Switching)이 일어나는 것이다.
프로세스의 정보를 담고있는 Block이라고 생각하면 되겠다. 커널 영역 내에 프로세스의 pid, state 등의 중요한 정보들을 저장시키는 곳이다.