OS

[ Linux ] OS, Kernel 그리고 socket - kakao 실무진 특강 (2)

jogaknabi_1023 2024. 2. 29. 22:10

이전 Linux interfaces for virtual networking 게시물 다음으로 Socket Programming을 다루기 전, 먼저 Kernel 이 무엇인지에 대해서 알아보겠다.네트워크 공부하다보면 OS 관련해서도 모르는 내용이 너무 많이 나와 정리하는게 좀 어렵긴한데 공부하다보면 또 재밌어서 다른 기술 블로그들도 읽게 된다. 근데 난 이제 하루에 2-3개 이론 확실히 공부하는 것도 어려워서 ... ㅇㅊㅇ

 

Kernel 이란?

운영체제가 유저와 하드웨어를 이어주는 인터페이스라고 한다면, 커널은 응용 소프트웨어와 하드웨어를 이어주는 인터페이스라고 할 수 있다. 커널은 운영체제의 핵심이다.

추가적으로 운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스도 있는데, 대표적으로 사용자 인터페이스(UI:User Interface)가 있다. 운영체제가 제공하는 사용자 인터페이스 종류에는 그래픽 유저 인터페이스(GUI), 커맨드 라인 인터페이스(CLI)가 있다. 전자는 윈도우 바탕화면이나 스마트폰의 화면처럼 그래픽을 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스이고, 후자는 명령어를 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스이다. 이러한 UI는 운영체제가 제공하는 서비스이지만, 이는 그저 컴퓨터와 상호작용하기 위한 통로일 뿐 커널에 속한 기능은 아니다.

 

커널의 가장 큰 역할은 컴퓨터의 하드웨어 자원과 추상화 자원을 관리하는 것이다. 커널이 물리적 자원 추상화하여 관리할 때 자원 용어가 달라진다.

  • CPU -> 태스크(Task) / 프로세스(Process)
  • 메모리(memory) -> 페이지(page) / 세그먼트(segment)
  • 디스크(disk) -> 파일(file)
  • 네트워크(network) -> 소켓(socket)

커널은 이러한 추상 자원들을 관리하는 관리자들로 구성되어있다.

 

Kernel 구성요소

  • 테스크 관리자 : CPU를 Task(Process)로 제공
  • 메모리 관리자 : 메모리를 Page 또는 Segement로 제공
  • 파일 시스템 관리자 : 디스크를 File로 제공
  • 네트워크 관리자 : 네트워크 장치를 Socket으로 제공
  • 디바이스 드라이버 관리자 : 각종 외부 장치에 대한 접근
  • Interrupt Handling : 인터럽트 핸들러
  • I/O Communication : 입출력 통신 관리

[1] Linux 운영체제 속 커널

 

 

먼저 응용 프로그램과 커널의 인터페이스인 시스템 호출(System Call)을 학습하기 전 이중 모드에 대해서 알아야 저 개념이 그나마 빨리 이해된다. 그냥 뭐 제가 이런 순서로 공부했어요 ㅎㅎ

 

운영체제의 이중모드

이중모드란?

CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식. CPU는 명령어를 사용자 모드로써 실행할 수 있고, 커널 모드로써 실행할 수 있다. 커널에서 중요한 자원들을 관리하기 때문에 사용자가 이 자원에 접근하지 못하도록 하기 위해 구분한 것

 

1) 사용자 모드

운영체제 서비스를 제공받을 수 없는 실행 모드 (= 커널 영역의 코드를 실행할 수 없는 모드)

일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행됩니다. 사용자 모드로 실행 중인 CPU는 입출력 명령어와 같이 하드웨어 자원에 접근하는 명령어를 실행할 수 없습니다. 그래서 사용자 모드로 실행되는 일반적인 응용 프로그램은 자원에 접근할 수 없습니다.

 

2) 커널 모드

운영체제 서비스를 제공받을 수 있는 실행 모드 (= 커널 영역의 코드를 실행할 수 있는 모드)

CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있다. 운영체제는 커널 모드로 실행되기 때문에 자원에 접근할 수 있다.

 

사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야 한다. 이때 운영체제 서비스를 제공 받기 위한 요청을 시스템 호출(System Call)이라고 한다. 사용자 모드로 실행되는 프로그램은 시스템 호출을 통해 커널 모드로 전환하여 운영체제 서비스를 제공 받을 수 있다.

 

[2] System Call (시스템 호출)

 

드라이버

커널과 하드웨어의 인터페이스는 드라이버가 담당한다.

하드웨어의 종류는 다양하고 직접 각 하드웨어에 맞는 인터페이스를 개발하기는 어렵기 때문에 커널은 입출력의 기본적인 부분만 제작하고, 하드웨어의 특성을 반영한 소프트웨어를 하드웨어 제작자에게 받아 커널이 실행될 때 함께 실행되도록 한다. 이때 하드웨어 제작자가 만든 소프트웨어를 디바이스 드라이버라고 부른다.
시스템 호출을 거치지 않고서는 커널에 진입할 수 없지만 [1]의 그림처럼 드라이버는 일부 영역으로 표시되어 있는데, 이는 커널이 제공하는 드라이버도 있고 하드웨어 제작자가 제공하는 드라이버도 있다는 뜻이다.

 

이렇게 소켓을 생성/관리하여 네트워크 통신을 처리하는 Kernel에 대해 자세히 알았으니 응용 프로그램과 네트워크 사이의 인터페이스 역할을 하는 Socket을 배우기 위한 빌드업이 완료됐다. 그럼 다음 게시물에서는 Socket과 Raw Socket에 대해 다뤄보겠다.

 

다음 게시물 내용 스포 1
다음 게시물 내용 스포 2