커널: 두 판 사이의 차이

3번째 줄: 3번째 줄:
영단어로 낱알, 알맹이를 뜻한다.
영단어로 낱알, 알맹이를 뜻한다.
==컴퓨팅 용어==
==컴퓨팅 용어==
[[운영체제]]의 핵심 부분을 뜻한다. [[하드웨어]] 자원관리, 시스템 콜 등의 일을 한다.
[[파일:Kernel Layout.svg|thumb|200px|커널이 응용 소프트웨어를 컴퓨터 하드웨어에 연결하고 있다.]]
[[커널]]이란 [[하드웨어]]와 [[소프트웨어]] 간을 이어주는 역할을 하는, 대다수의 운영 체제의 중핵을 이루는 부분이다.<ref>다만 단순한 [[임베디드 시스템]]의 경우 커널이 필요 없기에 커널 없는 운영 체제를 탑재하고 있는 경우도 있다. 물론 [[Windows CE]]나 [[리눅스 커널]]을 탑재한 임베디드 시스템의 경우는 [[그런 거 없다]]</ref>
 
커널의 주된 임무는 위에서 언급한 대로 [[CPU]], [[RAM]], [[입출력]] (Input /Output, I/O) 등의 하드웨어 추상화로, 커널을 통함으로서 [[애플리케이션]]은 하드웨어의 종류나 구성에 구속되지 않고 다양한 시스템 상에서 가동할 수 있다. 또 다른 커널의 주된 임무로는 애플리케이션의 편의를 위해 [[프로세스]]의 추상화 및 프로세스 간의 통신, [[시스템 콜]] 등의 기능을 제공하는 것을 들 수 있다.<del>[[구글]]이나 [[네이버]]가 있기에 인터넷 상의 여기저기에 흩어진 정보를 손쉽게 찾아 사용할 수 있는 거랑 비슷하다고 생각하면 편하다.</del>
 
커널의 주된 기능으로는 다음을 들 수 있다.
 
* 프로세스 관리
:프로세스는 응용 프로그램이 액세스 할 메모리 영역을 정의한다. 커널에 있어서 프로세스 관리란, 응용 프로그램이 사용할 [[어드레스 공간]]을 할당하고, 해당 응용 프로그램의 코드를 지정된 어드레스 공간에 로드하며, 로드된 코드에 대한 콜 스택을 설정한 다음 해당 프로그램의 적절한 위치에 제어를 넘겨주기까지의 처리 과정을 뜻한다.
:[[멀티 태스킹]]이 가능한 커널의 경우, 위의 관리에 더해 각 프로세스가 처리될 순서를 결정하고 처리의 타이밍을 지정해, 마치 복수의 프로세스가 동시에 작동하는 것처럼 보이도록 관리한다. 이러한 관리를 [[스케줄링]]이라고 부른다.
:또한 복수의 프로세스가 서로간에 [[데이터]]를 주고받을 수 있도록 [[프로세스 통신]]을 제어하는 것 역시 프로세스 관리의 영역에 속한다.
* 메모리 관리
:커널은 시스템의 모든 메모리<ref>[[RAM]]은 물론, L1, L2, L3 [[캐쉬 메모리]] 및 [[가상 메모리]]를 모두 포함한다.</ref>를 사용하는 것이 가능한 반면, 유저 프로그램은 보안상의 이유 등으로 인해 메모리 사용이 제한된다. 그런 탓에 커널은 한정된 메모리를 각 프로그램에 할당, 시스템의 안정성을 확보하는 동시에 응용 프로그램이 원활하게 작동하도록 한다.
:[[CPU]]에 가까운 메모리 일수록<ref>일반적으로는 L1 캐쉬 → L2 캐쉬 → L3 캐쉬 → RAM → 디스크 (가상 메모리)의 순이다. [[CPU]]의 구조를 이해는 [[위키러]]라면 굳이 설명할 필요도 없겠지만, 물리적으로 [[CPU]]에 가까운 순으로 처리 속도가 빨라진다.</ref> 연산 속도가 빨라지는 반면, 반대급부로 메모리 자체의 용량은 작아지게 된다. 그렇기에 어느 응용 프로그램의 어떤 처리에 어떤 메모리를 할당하느냐에 따라 응용 프로그램 및 시스템 전체의 성능이 좌우되게 되는데, 이러한 중요한 요소의 제어 역시 커널의 주된 임무 중 하나다.
* 장치 관리
:하드웨어 추상화의 일환으로, 커널은 [[장치 드라이버]]와 연동해 [[컴퓨터]]에 연결된 장치를 인식하고, 그 장치가 가진 리소스를 하위 소프트웨어에 할당하는 역할을 담당한다. 커널이 표준화된 입출력 포트나 메모리 공간을 확보하고 드라이버가 그 포트와 공간을 사용해 커널에 장치의 정보를 넘겨줌으로서 개개의 응용 프로그램은 하드웨어의 종류에 구애받지 않고 커널에 요구하는 것만으로도 필요한 자원을 사용할 수 있다.
* 시스템 콜
:위의 설명을 보<del>고 어렴풋하게나마 이해했다</del>면 알 수 있듯, 커널은 시스템 전체에서 중요한 역할을 담당하고 있다. 그렇기에 [[CPU]]의 설계에 좌우되는 부분은 있으나, 대부분의 경우 보안상의 이유로 커널 공간과 유저 공간이 분리되어 있어, 유저 프로세스는 함부로 커널에 액세스 할 수 없도록 되어 있다.<ref>굳이 언급할 필요도 없겠지만 반대로 커널은 모든 유저 프로세스에 액세스 할 수 있다.</ref> 그렇기에 커널은 유저 프로세스가 간접적으로 커널의 기능을 사용할 수 있도록 커널을 호출할 수 있는 기능을 내재하고 있다. 이것이 시스템 콜로, 각 커널의 설계에 따라 다양한 방식이 존재하나, 어느 방식이든 유저 프로세스가 미리 지정된 행동을 하는 것으로 커널을 호출할 수 있게 도와준다.
 
커널의 종류로는 모놀리식 커널, 마이크로 커널, 그리고 이 둘을 적절히 혼합한 하이브리드 커널이 있다. 리눅스는 모놀로식 커널이며, 리눅스의 모체가 된 미닉스는 마이크로 커널이었다. 윈도우는 과거 마이크로 커널이었지만 현재는 하이브리드 커널로 분류되고 있다. <del>참고로 그 [[티멕스 윈도우]]는 마이크로 커널이었다.</del>
커널의 종류로는 모놀리식 커널, 마이크로 커널, 그리고 이 둘을 적절히 혼합한 하이브리드 커널이 있다. 리눅스는 모놀로식 커널이며, 리눅스의 모체가 된 미닉스는 마이크로 커널이었다. 윈도우는 과거 마이크로 커널이었지만 현재는 하이브리드 커널로 분류되고 있다. <del>참고로 그 [[티멕스 윈도우]]는 마이크로 커널이었다.</del>
[[분류:컴퓨터 과학]]
[[분류:컴퓨터 과학]]

2018년 8월 12일 (일) 20:28 판

kernel

낱알, 알맹이

영단어로 낱알, 알맹이를 뜻한다.

컴퓨팅 용어

커널이 응용 소프트웨어를 컴퓨터 하드웨어에 연결하고 있다.

커널이란 하드웨어소프트웨어 간을 이어주는 역할을 하는, 대다수의 운영 체제의 중핵을 이루는 부분이다.[1]

커널의 주된 임무는 위에서 언급한 대로 CPU, RAM, 입출력 (Input /Output, I/O) 등의 하드웨어 추상화로, 커널을 통함으로서 애플리케이션은 하드웨어의 종류나 구성에 구속되지 않고 다양한 시스템 상에서 가동할 수 있다. 또 다른 커널의 주된 임무로는 애플리케이션의 편의를 위해 프로세스의 추상화 및 프로세스 간의 통신, 시스템 콜 등의 기능을 제공하는 것을 들 수 있다.구글이나 네이버가 있기에 인터넷 상의 여기저기에 흩어진 정보를 손쉽게 찾아 사용할 수 있는 거랑 비슷하다고 생각하면 편하다.

커널의 주된 기능으로는 다음을 들 수 있다.

  • 프로세스 관리
프로세스는 응용 프로그램이 액세스 할 메모리 영역을 정의한다. 커널에 있어서 프로세스 관리란, 응용 프로그램이 사용할 어드레스 공간을 할당하고, 해당 응용 프로그램의 코드를 지정된 어드레스 공간에 로드하며, 로드된 코드에 대한 콜 스택을 설정한 다음 해당 프로그램의 적절한 위치에 제어를 넘겨주기까지의 처리 과정을 뜻한다.
멀티 태스킹이 가능한 커널의 경우, 위의 관리에 더해 각 프로세스가 처리될 순서를 결정하고 처리의 타이밍을 지정해, 마치 복수의 프로세스가 동시에 작동하는 것처럼 보이도록 관리한다. 이러한 관리를 스케줄링이라고 부른다.
또한 복수의 프로세스가 서로간에 데이터를 주고받을 수 있도록 프로세스 통신을 제어하는 것 역시 프로세스 관리의 영역에 속한다.
  • 메모리 관리
커널은 시스템의 모든 메모리[2]를 사용하는 것이 가능한 반면, 유저 프로그램은 보안상의 이유 등으로 인해 메모리 사용이 제한된다. 그런 탓에 커널은 한정된 메모리를 각 프로그램에 할당, 시스템의 안정성을 확보하는 동시에 응용 프로그램이 원활하게 작동하도록 한다.
CPU에 가까운 메모리 일수록[3] 연산 속도가 빨라지는 반면, 반대급부로 메모리 자체의 용량은 작아지게 된다. 그렇기에 어느 응용 프로그램의 어떤 처리에 어떤 메모리를 할당하느냐에 따라 응용 프로그램 및 시스템 전체의 성능이 좌우되게 되는데, 이러한 중요한 요소의 제어 역시 커널의 주된 임무 중 하나다.
  • 장치 관리
하드웨어 추상화의 일환으로, 커널은 장치 드라이버와 연동해 컴퓨터에 연결된 장치를 인식하고, 그 장치가 가진 리소스를 하위 소프트웨어에 할당하는 역할을 담당한다. 커널이 표준화된 입출력 포트나 메모리 공간을 확보하고 드라이버가 그 포트와 공간을 사용해 커널에 장치의 정보를 넘겨줌으로서 개개의 응용 프로그램은 하드웨어의 종류에 구애받지 않고 커널에 요구하는 것만으로도 필요한 자원을 사용할 수 있다.
  • 시스템 콜
위의 설명을 보고 어렴풋하게나마 이해했다면 알 수 있듯, 커널은 시스템 전체에서 중요한 역할을 담당하고 있다. 그렇기에 CPU의 설계에 좌우되는 부분은 있으나, 대부분의 경우 보안상의 이유로 커널 공간과 유저 공간이 분리되어 있어, 유저 프로세스는 함부로 커널에 액세스 할 수 없도록 되어 있다.[4] 그렇기에 커널은 유저 프로세스가 간접적으로 커널의 기능을 사용할 수 있도록 커널을 호출할 수 있는 기능을 내재하고 있다. 이것이 시스템 콜로, 각 커널의 설계에 따라 다양한 방식이 존재하나, 어느 방식이든 유저 프로세스가 미리 지정된 행동을 하는 것으로 커널을 호출할 수 있게 도와준다.

커널의 종류로는 모놀리식 커널, 마이크로 커널, 그리고 이 둘을 적절히 혼합한 하이브리드 커널이 있다. 리눅스는 모놀로식 커널이며, 리눅스의 모체가 된 미닉스는 마이크로 커널이었다. 윈도우는 과거 마이크로 커널이었지만 현재는 하이브리드 커널로 분류되고 있다. 참고로 그 티멕스 윈도우는 마이크로 커널이었다.

  1. 다만 단순한 임베디드 시스템의 경우 커널이 필요 없기에 커널 없는 운영 체제를 탑재하고 있는 경우도 있다. 물론 Windows CE리눅스 커널을 탑재한 임베디드 시스템의 경우는 그런 거 없다
  2. RAM은 물론, L1, L2, L3 캐쉬 메모리가상 메모리를 모두 포함한다.
  3. 일반적으로는 L1 캐쉬 → L2 캐쉬 → L3 캐쉬 → RAM → 디스크 (가상 메모리)의 순이다. CPU의 구조를 이해는 위키러라면 굳이 설명할 필요도 없겠지만, 물리적으로 CPU에 가까운 순으로 처리 속도가 빨라진다.
  4. 굳이 언급할 필요도 없겠지만 반대로 커널은 모든 유저 프로세스에 액세스 할 수 있다.