Computer Science/Operating System

[운영체제] 커널과 디바이스 드라이버란 무엇일까

brong 2023. 8. 28. 22:01
728x90

이전 포스팅

 

What are the parts of an OS?

운영체제의 핵심적인 부분은 다음과 같다. 커널디바이스 드라이버유저 인터페이스시스템 유틸리티 커널운영체제의 핵심 부분 supervisor, core, or internals of the OS 운영체제가 제공하는 서비스는 굉

thisisphysis.tistory.com

 

운영체제 : 커널 모드에서 실행되는 추상화와 자원 관리를 제공하는 소프트웨어!
운영체제의 구성 : 커널, 디바이스 드라이버, 시스템 유틸리티, 유저 인터페이스

 

 

커널


운영체제의 핵심 기능을 담당하는 커널. 

커널이 다르면 프로그램이 하드웨어를 이용하는 양상과 컴퓨터의 성능 등이 달라질 수 있다.

 

일반적인 시스템에서 전원을 키게 되면 (부팅을 하게 되면) 커널이 먼저 메모리에 로드되고, 이후 필요한 다른 OS 요소들을 로드하여 전체 시스템이 돌아가게 된다. 

 

커널 영역
커널은 일반 유저 애플리케이션보다 높은 시스템 권한을 가지며 따로 보호되는 메모리 공간을 가지고 된다. 커널은 상위 (가상)메모리 공간을 가지며, 하드웨어에 완전한 접근을 할 수 있다. 이러한 커널의 메모리 공간과 시스템 상태를 가리켜 커널 영역이라고 한다.

유저 영역
커널과 달리, 유저 애플리케이션은 유저 영역에서 실행된다. 유저 영역에서는 하드웨어에 직접 접근할 수 없고 특정 시스템 명령을 수행할 수 없다. 유저 영역에서 실행되는 코드는 커널 영역 코드에 직접 접근할 수 없다. (반대는 가능하다) 이렇게 운영체제의 코드를 분리하여 보호한다. 

커널을 실행하면, 시스템은 커널 모드로 커널 영역에서 실행
일반 유저 애플리케이션을 실행하면, 시스템은 유저 모드로 유저 영역에서 실행

 

커널의 기능 & 구성 

커널은 여러 애플리케이션에게 안전하고 공정하게 하드웨어 자원을 공유할 책임이 있다. (= 운영체제의 핵심 기능)

 

그렇다면 application들은 어떻게 커널에게 자원 공유를 요청할까?

 

일반 사용자 애플리케이션이 커널에 여러 요청을 할 수 있는 API를 제공한다.  유저는 API를 통해 "System call"을 발생시킬 수 있다! 

유저가 시스템 콜을 호출하면, 유저 모드에서 커널 모드로 전환되어 커널이 해당 요청을 처리한다. 

 

API : Application Programming Interface

 

일반적인 운영체제 아키텍쳐

 

커널이 담당하는 구체적인 업무들을 운영체제에 따라 조금씩 다른 조합으로 제공될 수 있지만, 커널의 주 기능(구성요소)은 다음과 같다. 

앞으로 운영체제에 대해 다룰 내용들도 다 이것들이다.

  • 프로세스 관리
  • 메모리 관리
  • 파일 시스템 관리
  • 디바이스 관리 (디바이스 드라이버)
  • 네트워크 관리

 

프로세스 관리

프로세스의 생성, 실행, 종료 전 과정을 감독하고, 프로세스 스케줄링을 통해 효율적인 멀티 태스킹을 보장한다. 프로세서에게 CPU 타임, 메모리 등의 자원을 할당하고, 그들이 잘 실행되도록 한다. 

 

메모리 관리

프로세스들에게 메모리를 할당하고 해제하는 것을 관리한다. 각 프로세스가 실행에 필요한 필수로 필요한 메모리를 안정적으로 할당 받도록 보장하고 이들을 최적화하여 관리한다. 

 

파일 시스템 관리

저장 장치에 있는 파일과 디렉토리(폴더)들을 구조화하고 거기에 접근(읽고, 쓰고, 수정하고) 할 수 있게 관리한다. 

 

디바이스 드라이버

커널과 하드웨어 간의 커뮤니케이션을 가능하게 한다. 운영체제가 프린터기, 키보드, 모뎀 등 다양한 하드웨어 디바이스들과 상호작용할 수 있는 인터페이스를 제공한다. 

 

네트워크 관리

TCP/IP 등과 같은 다양한 네트워크 프로토콜을 구현하고 네트워크 연결 관리를 통해 네트워크 통신을 가능하게 한다. 

 

 

 

 

 

디바이스 드라이버


운영체제의 주 기능은 추상화와 자원 관리라고 했었다. 운영체제의 목적 중 하나인 추상화는 즉, 하드웨어 장치별로 제각기 다르게 가지는 특징을 사용자로부터 감추는 것이다. 디바이스 드라이버는 이러한 여러 디바이스들에 대한 디테일을 사용자로부터 감추고, 커널에 통일되고 간결한 인터페이스를 제공하는 역할을 한다. 

 


프린터기, 스피커, 카드 리더, 모뎀, USB, … 등 컴퓨터 시스템에는 매우 다양한 하드웨어 종류가 존재하고 각자 운영체제의 명령에 따라 수행해야하는 작업도, 필요한 데이터 포맷 등도 다 다르다. 사용자가 이처럼 모든 기기별 디테일한 것을 신경쓸 필요 없이, 그저 OS API를 통해 명령을 내리면 커널 내의 디바이스 드라이버가 각 드라이버에 맞게 디테일한 명령을 내려주게 된다.
== 디바이스 드라이버는 운영체제에게 하드웨어의 추상화를 제공하는 것!

예를 들면, 프린터기의 응답을 어떻게 처리할 지, 버퍼링, 포맷팅을 어떻게할 지 생각할 필요 없이 단순히 print() 라는 명령어만으로 처리할 수 있다. 디테일한 건 커널 디바이스 드라이버가 처리할 거니까. 그리고 이 디테일한 명령을 내리는 코드들은 커널만 가지고 있다. 

 

하드웨어 컨트롤러

하드웨어 장치들은 모두 자신만의 하드웨어 컨트롤러를 가지고 있다. 하드웨어 컨트롤러는 하드웨어 장치를 시작하고, 멈추고, 문제가 발생하면 이를 진단하는 등의 기능을 하며 장치를 컨트롤 한다. 그리고 이 컨트롤러는 기기마다 다르고 이에 따라 명령을 내리기 위한 코드도 다르다.

 

디바이스 드라이버는 각 하드웨어 컨트롤러에 맞게 명령을 내리고 관리하는 과정을 처리하도록 커널이 제공하는 라이브러리이다. 좀 더 정리하자면, 저급 하드웨어 처리 루틴을 가지는 공유 라이브러리이다. 
 

리눅스 커널을 기준으로 디바이스 드라이버에 관한 몇 가지 특징을 더 살펴보자.

 

디바이스 드라이버도 커널 코드이다.

커널의 코드가 그러하듯이, 디바이스 드라이버의 코드가 잘못되면 전체 시스템에 치명적인 피해를 줄 수 있다.

 

커널 인터페이스

디바이스 드라이버는 리눅스 커널 또는 자신이 속한 시스템에 표준 인터페이스를 제공해야 한다. 예를 들어, 터미널 드라이버는 리눅스 커널에 파일 입출력 인터페이스를 제공해야 한다. 

 

커널 메커니즘과 서비스

디바이스 드라이버는 메모리 할당, 인터럽트 전달(하드웨어 장치로부터 오는 인터럽트 등), 대기큐 같은 표준 커널 서비스를 사용할 수 있다. 

 

로더블 Loadable

대부분의 리눅스 디바이스 드라이버는 커널 모듈로서, 필요할 때 메모리 상에 로드하고 필요하지 않을 때 다시 언로드 할 수 있다. 따라서 커널을 융통성 있게 하고 메모리를 효율적으로 이용할 수 있게 한다. 

 

설정 가능 Configurable

디바이스 드라이버를 커널에 포함하여 컴파일 할 수 있다. 

 

동적 Dynamic

시스템을 부팅하고 디바이스가 초기화 될 때, 시스템은 알아서 제어할 수 있는(연결된) 하드웨어 장치를 찾는다.

 


 

ref.

https://wiki.kldp.org/Translations/html/The_Linux_Kernel-KLDP/tlk8.html

https://www.quora.com/What-is-a-kernel-What-components-are-contained-in-a-kernel

http://books.gigatux.nl/mirror/kerneldevelopment/0672327201/ch01lev1sec2.html 

https://linux-kernel-labs.github.io/refs/heads/master/lectures/intro.html


틀린 내용이 있다면 댓글 부탁드립니다