개발

[개발지식] 커널(kernal), 쉘(shell), 추상화, 시스템 콜(System Call)

김나나_ 2024. 7. 2. 18:35
운영체제(Operating System, OS)는 컴퓨터 시스템에서 핵심적인 역할을 하는 소프트웨어이다.
운영체제의 구조는 크게 커널과 쉘로 나눌 수 있따. 운영체제는 커널과 셸 및 여러가지 기능(라이브러리, 시스템 프로그램 등등)이 추가된 상태를 통칭해서 운영체제(OS)라고 부른다.

 

 

 

커널( kernel )

- 사전적 의미: 알맹이, 핵심

- 운영체제의 90%를 차지하는 핵심부분으로, 운영체제 내부에서 컴퓨터의 하드웨어를 제어한다.

- 컴퓨터 자원(System Resource)들을 관리하는 역할

* 컴퓨터 자원: CPU, 메모리, 파일, 네크워크, 입출력 장치 등

- 커널은 항상 컴퓨터 자원만 바라보고 있기 때문에 사용자와의 상호작용은 전혀 지원하지 않는다.

(이 때 등장하는 개념이 바로 쉘이다. 사용자는 쉘을 통하여 커널에게 명령을 내릴 수 있다)

- 하드웨어와 응용 프로그램 간의 상호 작용을 관리한다. 

- 주요 기능: 프로세스 관리, 메모리 관리, 입출력 관리, 파일 시스템 관리

- 시스템의 최상위 권한을 가지고 있어 하드웨어 자원에 직접 접근하고, 응용 프로그램이 원할하게 실행될 수 있도록 관리 한다.

- 응용 프로그램이 파일 생성 및 삭제 등의 기능을 실행하기 위해 직접 하드웨어에 접근이 가능 할까? => NO
응용 프로그램은 파일 관리 및 파일 접근 같은 주요한 기능의 권한이 없기 때문에 해당 기능을 수행하려면 커널을 호출 해야 하고, 커널이 하드웨어에 접근해서 해당 기능을 수행한 뒤 결과값을 응용 프로그램에 알려준다.

컴퓨터와 전원을 켜면 운영체제는 이와 동시에 수행된다. 소프트웨어가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 한다. 마찬가지로 운영체제 자체도 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라 가야 한다.

하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라가면 한정된 메모리 공간이 낭비가 심할 것이다. 따라서 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려 놓고, 그렇지 않은 부분은 필요할 떼 메모리에 올려서 사용하게 된다. 이 때 메모리에 상주하는 운영체제의 부분을 커널(kernal)이라고 한다.

즉, 커널은 메모리에 상주하는 부분으로써 운영체제의 핵심적인 부분을 뜻한다.
보통 운영체제라하면 커널을 뜻한다.

 

추상화

- 커널은 컴퓨터의 자원을 관리하는 역할을 수행한다.

- 그 중 가장 큰 역할은 컴퓨터의 물리적 자원(하드웨어)과 추상화 자원을 관리하는 것이다.

- 추상화란, 일반적으로 우리가 컴퓨터를 사용할 때 여러 사용자를 등록하여 사용할 수 있는데, 이렇게 여러 사용자를 등록하여 사용할 때 마치 하나의 하드웨어를 독점하여 활용하는 것처럼 느끼게 된다.

- 이처럼 하나의 하드웨어를 마치 여러 개 처럼 보여지도록 하는 기술을 추상화라고 한다.

- 커널을 이를 위해 하나의 하드웨어 자원을 여러 사용자들을 위한 여러 개의 추상화된 객체로 관리한다.

- 커널이 물리적인 자원을 추상화하면 용어가 달라지는데 매칭하면 아래와 같이 대응된다.

물리적 자원 이름 추상화한 자원 용어
CPU 테스크(Task)
메모리(Memory) 페이지(Page), 세그먼트(Segment)
디스크(Disk) 파일(File)
네트워크(Network) 소켓(Socket)

 

- 커널은 컴퓨터의 물리적인 자원과 추상화 자원을 관리한다.

- 커널은 5가지 관리자들로 구성되어 있다.

 

커널의 5가지 관리자

1. 테스크 관리자: 물리적인 자원인 CPU를 추상자원인 테스크로 제공

2. 메모리 관리자: 물리적인 자원인 메모리를 추상자원인 페이지세그먼트로 제공

3. 파일 시스템 관리자: 물리적 자원인 디스크를 추상자원인 파일로 제공

4. 네트워크 관리자: 물리적 자원인 네트워크 장치를 추상자원인 소켓으로 제공

5. 디바이스 드라이버 관리자: 각종 외부장치(프린터, GPU 등) 에 대한 접근을 제공

 

- 커널이 이런 자원들을 관리하는 이유는 사용자가 물리적인 하드웨어에 접근하고 사용할 수 있도록 하기 위해서이다.

- 즉, 커널은 사용자가 하드웨어에 접근하고 통신하기 위한 중간 다리 역할을 수행한다라고 볼 수 있다.

 

CPU 모드

- CPU는 사용자 애플리케이션(User application)이 시스템을 손상시키는 것을 방지하기 위해 2가지 모드를 제공한다.

- CPU에 있는 Mode bit로 모드를 구분하여 0은 커널 모드(kernal mode), 1은 사용자 모드(user mode)로 나뉘어서 구동된다.

- 운영체제에서 프로그램이 구동되는데 있어서 파일을 읽어오거나, 파일을 쓰거나, 혹은 화면에 메세지를 출력하는 등 많은 부분이 커널 모드를 사용한다.

 

사용자 모드(User Mode)

- 사용자 모드에서 사용자 애플리케이션이 실행된다.

- 사용자가 접근할 수 있는 영역에 제한이 있기 때문에 해당 모드에서는 하드웨어(디스크, I/O 등)에 접근할 수없다.

- 접근을 위해서는 시스템 콜(System Call)을 사용해야 한다.

 

커널 모드(Kernal Mode)

- 운영 체제가 CPU를 사용하는 모드이다.

- 시스템 콜을 통해 커널모드로 전환이 되면 운영체제는 하드웨어를 제어하는 명령어(Privileged Instructions)를 실행한다.

- Privileged Instructions는 사용자 모드에서 실행되면 exception이 발생한다.

 

- 위 그림과 같이 사용자 process는 User Mode 에서 실행되다가 시스템 자원을 사용해야 할 때 시스템 콜을 호출해서 커널 모드로 전환되어 작업을 수행하고 완료 시 다시 사용자 모드(User Mode)로 전환 한다.

 

쉘(shell)

- 커널만으로는 운영체제가 완성되지 않는다. 우리가 커널에 명령을 내리기 위해서는 커널이 이해할 수 있는 언어로 전달해야 한다.

- 우리가 전달한 명령어(스크립트)를 커널에 전달하면서, 커널이 알아들을 수 있도록 해석해 주는 역할이 바로 쉘이다. (쉘을 명령어 해석기 라고도 부른다)

- ex) 윈도우의 cmd, linux/unix 의 bash

- 셸은 명령어 해석기(Parser)와 실행기(Executor)로 구성되어 사용자의 명령을 분석하고 실행한다. 셸은 텍스트 기반의 CLI(Command Line Interface)와 그래픽 기반의 GUI(Graphical User Interface) 종류가 있다.

- 사용자는 셸을 통해 운영체제와 상호작용하고 작업을 수행할 수 있으며, 셸을 통해 커널을 호출해 운영체제 기능과 서비스를 조작할 수 있다

 

시스템 콜(System Call) = 시스템 호출

- 시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.

- 사용자 프로그램이 디스크 파일을 접근하거나 화면에 결과를 출력하는 등의 작업이 필요한 경우, 즉 사용자 프로그램이 특권 명령의 수행을 필요로 하는 경우, 운영체제에게 특권 명령의 대행을 요청하는 것이 시스템 콜이다.

- OS는 다양한 서비스들을 수행하기 위해 하드웨어를 직접적으로 관리한다. 이와 반면 응용프로그램은 OS가 제공하는 인터페이스를 통해서만 자원을 사용할 수 있다. OS가 제공하는 이러한 인터페이스를 '시스템 콜' 이라고 한다.

- 보통 직접적으로 시스템 콜을 사용하기 보다는 API(라이브러리 함수)를 통해 사용하게 된다.

https://codybuilder.com/41 시

시스템 콜의 종류

시스템 콜은 크게 6가지로 분류할 수 있다.

 

1. 프로세스 제어 (Process Control)

- 끝내기(exit), 중지(abort)

- 적재(load), 실행(exectue)

- 프로세스 생성(create process) - fork

- 프로세스 속성 획득과 속성 설정

- 시간 대기(time waite)

- 사건 대기(wait event)

- 사건을 알림(signal event)

- 메모리 할당 및 해제

 

2. 파일 조작(File Manipulation)

- 파일 생성, 삭제(create, delete)

- 열기, 닫기, 읽기, 쓰기(open, close, read, write)

- 위치 변경(reposition)

- 파일 속성 획득 및 설정(get file attribute, set file attribute)

 

3. 장치 관리(Device Manipulation)

- 하드웨어의 제어와 상태 정보를 얻음(ioctl)

ioctl = Input/Output control

- 장치를 요구(request device), 장치를 방출(relase device)

- 읽기(read), 쓰기(write), 위치 변경

- 장치 속성 획득 및 설정

- 장치의 논리적 부착 및 분리

 

4. 정보 유지(Inforamtion Maintenance)

- getpid(), alarm(), sleep()

- 시간과 날짜의 설정과 획득 (time)

- 시스템 데이터의 설정과 획득 (date)

- 프로세스 파일, 장치 속성의 획득 및 설정

 

5. 통신(Communication)

- pipe(), shm_open(), mmap()

- 통신 연결의 생성, 제거

- 메시지의 송신, 수신

- 상태 정보 전달

- 원격 장치의 부착 및 분리

 

6. 보호(Protection)
- chmod()

- umask()

- chown()

 

 

https://codybuilder.com/41

 

 

 

 

 

 

 

 

 

 

 

 

 

참고 사이트:

https://post.naver.com/viewer/postView.naver?volumeNo=32073536&memberNo=4146898

 

[OS] 그래서 OS가 뭔데? (커널과 쉘)

[BY 비타민찌] 1. OS(운영체제)란?일반적으로 OS란 무엇인가?를 검색 해보면 다음 두 문장이 나온다. 컴...

m.post.naver.com

https://seohee-ha.tistory.com/255

 

[IT지식] 커널(Kernel)이란?

📌 컴퓨터 구분 - 컴퓨터는 크게 2가지로 구분할 수 있다. - 물리적으로 만질 수 있는 하드웨어 ( 키보드, 모니터, 본체안의 CPU, 메모리 등) - 물리적으로 존재하지 않는 소프트웨어 (시스템 소프

seohee-ha.tistory.com

https://jerryjerryjerry.tistory.com/172

 

[운영체제] 운영체제 구조, 커널(kernel), 셸(shell), 시스템 콜(system call)

운영체제(Operating System)는 컴퓨터 시스템에서 핵심적인 역할을 수행하는 소프트웨어이다. 운영체제의 구조는 크게 커널(Kernel)과 셸(shell)로 나눌 수 있다. 운영체제는 커널과 셸 및 여러가지 기능

jerryjerryjerry.tistory.com

https://didu-story.tistory.com/311

 

[Operating System] (iOS) System Call (시스템콜, 시스템 호출이란?)

스터디를 운영하고 있습니다. 해당 repository에 가면 더 많은 정보를 보실 수 있습니다! 특히 close 된 PR을 보시면, 어떤 부분에 대해서 고민하고 스터디원들과 이야기나눴는지 보실 수 있습니다 htt

didu-story.tistory.com