'리눅스' 카테고리의 글 목록 (3 Page) :: YJcode

커널은 컴퓨터를 구동하는 핵심 운영체제를 의미하고 운영체제는 보통 2가지의 관점으로 쓰인다.

 

 

  • 컴퓨터 지원을 관리하는 핵심 소프트웨어와 인터프리터, GUI(그래픽 유저 인터페이스), 파일 유틸리티 시스템, 편집기 같은 기본적인 소프트웨어 도구를 아우르는 통합 패키지
  • CPU, RAM, 디바이스와 같은 컴퓨터의 하드웨어 자원을 관리하고 할당하는 핵심 소프트웨어

 

이중 보통은 핵심소프트웨어만을 커널로 보는 관점이 많은데 그 이유는 커널의 가장 큰 존재의의가 보다 효율적인 컴퓨터 하드웨어 자원의 관리를 통한 보다 편한 소프트웨어 구성, 보다편한 소프트웨어 사용, 그리고 한정된 자원에서 보다 확실하고 정확한 컴퓨터 하드웨어 자원을 관리할수 있는 관리자의 역할이기 때문이다.

 

커널은 기본적으로 몇가지의 작업을 수행하는 것이 보편적이다.

 

 

  • 메모리 관리 : 여러 프로세스를 동시에 구동하여야 하는 경우 커널은 이 프로세스들을 구동하기 위해 메모리를 할당하고 관리하여야 한다. 하지만 메모리의 하드웨어적 제원은 항상 제한되어 있고 이 제한된 메모리를 여러 프로세스에 동시에 할당하기에는 부족한 경우 커널이 적극 개입하여 메모리를 적절한 시기에 각각의 프로세스에 할당하여 준다.
  • 프로세스 스케줄링 : 리눅스는 선점형 멀티태스킹을 기반으로 하고있다. 그렇기 때문에 프로세스 들이 멀티태스킹을 할 때 커널이 프로세스에 대한 스케줄을 제어하지 않으면 각각의 프로세스에 대한 공정한, 효율적인 CPU 할당이 불가능하다. 그렇기에 커널은 메모리에 올라와 있는 프로세스에 대한 CPU사용 우선순위와 같은 스케줄을 관리한다.
  • 디바이스 드라이버 제공 : 컴퓨터는 본체 뿐만이 아니라 모니터, 키보드, 마우스와 같은 많은 외부장치가 부착되어 있다. 하지만 이들 외부장치는 각각의 고유한 사용방법이 있으며, 이러한 사용방법을 컴퓨터 본체가 모르고, 제공하기 않는다면 외부장치들은 사용할 수가 없게된다. 이러한 사용방법을 명시해놓은 표준화된 사용설명서(인터페이스)를 디바이스 드라이버라고 생각하면 좋다.(주의 : 여기서 말하는 사용설명서는 사용자가 아닌 컴퓨터를 위한 설명서이다.) 이러한 디바이스 드라이버를 제공하여 주는 것이 커널이고, 커널이 인식하지 못하는 디바이스의 경우는 유저가 직접 해당 디바이스의 드라이버를 설치하여 줌으로써 커널이 디바이스를 인지하고 제어할수 있도록 하여 준다.
  • 프로세스 생성, 종료 : 운영체제가 있는 컴퓨터 환경에서 메모리 관리나 프로세스 스케줄링을 커널이 직접 관장하고 있기 때문에 새로운 프로세스가 실행될 때, 해당 프로세스 입장에서는 메모리의 어느부분에 올라가야 다른 프로세스의 영역을 침범하지 않는지 알 수있는 방법이 없다. 마찬가지로 프로세스가 종료될때도 스스로가 종료가 되면 다른 프로세스에게 자신이 종료되었음을 알려줄 방법이 없다. 다른 프로세스를 실행할 프로세스가 살펴보고, 마찬가지로 종료직전 자신이 종료될 것을 다른 프로세스에게 알려주면 되지 않느냐고 생각할 수도 있지만 다른 프로세스들을 살펴볼수 있게 되면 보안에 치명적인 구멍이 생기게 되고, 종료될 것을 다른프로세스에게 종료직전 알려주고 미처 스스로 종료하기도 전에 다른 프로세스가 아직 종료되지 않은 메모리 영역을 침범하게 되면 비정상 동작을 하는 등의 치명적인 오류가 발생할 수도 있다. 그렇기 때문에 이러한 프로세스의 생성과 종료는 커널이 관장하여야 한다. 여기까지만 봐도 커널이 하는 역할은 사용자가 실제로 사용할 프로세스의 관리, 매니징 역할 이라는 것을 알 수 있다.
  • 파일 유틸리티 시스템 제공 : 우리가 흔히 알고있는 파일 탐색기에 해당한다. 이것은 특정 프로그램이 관여하는 것이 아니라 커널에서 자체적으로 제공한다. 만약 파일 시스템이 커널레벨이 아닌 유저레벨에서 관리된다면, 파일 시스템을 삭제하는 순간 해당 파일 시스템에서 관리하던 파일에 대한 노드정보 소실로 의도하지 않은 파일손상을 불러오거나, 여러 파일시스템을 설치하였을때 서로간에 동일한 파일구조를 보여줄 수 없는등의 문제가 발생할 수있다. 그렇기 때문에 파일 유틸리티 시스템은 커널에서 직접 관리(EX.파일 검색, 생성, 삭제, 수정 등의 기능 관리 및 제공)하고 있다.
  • 네트워크 : 컴퓨터에 없어서는 안될 것이 네트워크이다. 지금 이 글을 보고 있는 이라면 OSI 7계층은 들어 보았을 것이다. 이것을 만약 구현하고자 하는 프로그래머가 일일이 전부 구현하여야 한다면 어떻겠는가? 아마 간단한 프로그램 하나를 만들기 위해 엄청난 시간과 자원을 투자하여야 할 것이다. 그렇기에 보통 네트워크 통신을 구현할 때 프로그래머가 구현하는 부분은 사실상 이 OSI 7계층의 각각 계층에서 무엇을 어떻게 작업하여 어떤 정보를 보내줄지 설계해주는 것이 다이고, 물리적인, 혹은 LOW LEVEL에서의 논리적인 기능은 커널이 관장하는 경우가 대부분이다.이러한 구조를 이용하면 프로그래머는 정해진 규칙대로 사용법만 명시하여주고, 커널은 이미 정해진 방법을 기반으로 이를 대신 처리하여 주는 방식으로 통신을 하게 되며, 정형화된 통신이 가능해지므로 더욱 정확하고 간단한 프로그래밍이 가능하게 된다.
  • 시스템 호출 API 제공 : 프로세스 입장에서는 필요한 기능이나, 보안과 같은 문제 때문에 프로세스 자체적으로는 실행 할 수 없는 기능들이 있다. 대표적인 것이 디바이스 드라이버, 특정 파일 열람과 같은 것들이다. 이러한 것들은 직접적인 접근은 커널에서만 접근을 할 수 있는데, 프로세스가 해당 정보를 필요로 할때는 커널에게 이러한 정보가 필요하니 알려달라고 요청, 혹은 이러한 정보를 적용해야 하니 적용을 해달라고 요청하게 된다. 이럴 경우 커널은 해당 정보를 받은 후 권한과 같은 적정석을 검토 후 실행을 하게 된다. 여기서 컴퓨터는 사람과 달리 의미가 비슷하면 알아서 이해하는 것이 아니라 정확한 요청 형식이 있어야 한다. 이는 컴퓨터가 의미를 통한 의사전달이 아니라 데이터에 의한 의사전달이 이루어지기 때문에 요청 형식에 있어서 조금의 차이만 있어도 다른 의미로 해석을 하기 때문이다. 그래서 커널이 제공할 수있는 수행기능에 대한 인터페이스가 있어야 하는데 그것이 API이다. 시스템 호출 API가 있음으로 유저레벨 프로세스가 더욱 자세하고 효율적인 기능을 수행할 수 있게 되었다. 

 

위의 기능들은 리눅스관점에서의 기능이나 대부분의 커널들이 이와 비슷한 맥락으로 동작하므로 커널 그 자체의 기능이라고 봐도 무방할 것이다.

+ Recent posts