오늘은 커널이 무엇인지 쉘이 무엇인지 알아보도록 하겠습니다.
먼저 커널과 쉘이 도대체 어디에 있는 녀석인지 쉽게 알기 위해서 리눅스의 시스템 구조도를 살펴보도록 하자.
제일 하단부에는 우리가 눈으로 직접 볼 수 있는 하드웨어들이 있고 그 위에 커널이 있다. 또 그 위에는 쉘이 있고 유저는 쉘 상에서 명령어를 통한 하드웨어 조작을 할 수 있다. 하드웨어는 여러분들도 잘 알고 있을 테니 설명을 생략하도록 합니다. 그럼 먼저 커널이 무엇인지 간략하게 살펴보자.
<커널>
- 사전적 정의에 의하면 커널은 컴퓨터 운영체제의 가장 중요한 핵심이다.
- 운영체제의 다른 모든 부분에 여러 가지 기본적인 서비스를 제공하기 때문에 윈도우 그 자체라고 보면 된다.
- 커널은 리눅스가 처음 부팅될 때 메모리로 로딩 된다.
- 쉽게 생각하면 여러분들의 윈도우를 부팅할 때 나오는 로딩화면이 바로 커널을 로딩 하는 것이다.
- 컴퓨터의 시스템 자원들을 관리한다.
- 항상 메인 메모리에 상주하기 때문에 윈도우 부팅 후 바로 작업관리자를 열어 메모리 사용량을 보면 0%가 아닌 것이다.
- 리눅스의 커널은 1만줄 이상의 C언어와 1000줄 정도의 어셈블리어로 구성되어 있어서 이식성(portability)이 좋다. 즉 다른 시스템 환경에서도 잘 적응할 수 있다는 것이다.
요약하면 커널은 주로 하드웨어 자원(하드디스크, 메모리 등..)을 효율적으로 관리하기 위해서 필요한 요소라고 생각하면 된다. 커널이 시스템 자원을 관리한다고 말했지만 관리가 일어나기 위해서는 어떤 명령이 실행된다던지 프로그램이 실행되어야 한다. 그리고 보통 그런 명령의 실행은 유저의 입력에 의한 것이 대부분이다. 이 때 유저의 입력을 어떻게 받아서 처리 할 것인지를 결정하고 도와주는 녀석이 바로 쉘이다.
<쉘>
- 운영체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다.
- 리눅스 명령어를 해석하는 명령어 해석기로 사용자와 리눅스 OS간의 인터페이스와 Shell Programming언어를 해석한다.
- 키보드와 같은 단말 장치를 통해서 유저의 입력을 받아서 여러 프로그램이나 명령을 실행한다.
- sh(본 쉘), ash, bash, csh(C 쉘)같은 다양한 쉘이 존재한다.
- 윈도우에서 지원하는 cmd창도 쉘의 일종(CLI)이라고 보면 된다.
- 내가 임의로 JHShell을 만들어서 ls 명령어를 JHls로 만들고 싶다면 그 쉘이 기존의 ls명령어를 수행하게끔 프로그래밍이 되어야한다. 지금 존재하는 쉘 또한 이런 방식으로 만들어졌다고 이해하면 조금 쉬울 것이다.
- 이렇게 JHls를 만들어 놓은 것이 하나의 인터페이스가 된다.
이제다시 위의 그림을 봅시다. 유저는 쉘과 대화를 나누고 다시 쉘은 커널과 대화를 나누는 식이라는 것을 그림으로 표현해놓은 것이다. 그래서 쉘과 커널사이에 인터페이스가 있는 것이다. 쉘을 사용하면 유저는 복잡한 커널단위의 연산들을 알 필요 없이 쉘 상의 인터페이스로 시스템 자원들을 쉽게 관리할 수 있다. 이것이 바로 쉘이 생겨난 이유이다. 추가적으로 윈도우는 그래픽 쉘로서 GUI(그래픽 유저 인터페이스)를 제공한다. 때문에 일반 사용자들이 복잡한 cd명령어를 모르고도 단지 마우스 클릭만으로 디렉터리 안으로 접근할 수 있는 것이다.
'Linux/UNIX' 카테고리의 다른 글
Command-Line Argument. agrv[argc] (0) | 2012.11.23 |
---|---|
프로세스 종료 exit() _exit() atexit() (1) | 2012.11.21 |
signal() 함수 (0) | 2012.11.10 |
strtol() - 정수문자열을 진수를 선택하여 정수로 반환 (0) | 2012.11.07 |
파일 허가권(File Permissions)과 UID(user id) (0) | 2012.11.07 |