커널 공간이란?

리눅스에서 User Space가 하드웨어 자원을 사용하기 위해 요청을 보내는 곳

커널이 존재하지 않고 유저가 모든 자원을 사용할 수 있다면, 안정성과 보안성이 떨어지게 된다.

User가 Kernel에 요청을 보내는 행위를 System Call이라고 부른다.

Task

Task는 쓰레드와 프로세스를 통칭하는 말로 커널에서는 큰 구분없이 사용한다.


Memory Arch

위 코드에서 start_codeend_code코드 세그먼트의 시작과 끝의 주소를 담고 있고, start_dataend_data데이터 세그먼트의 시작과 끝을, start_brkbrk힙 세그먼트의 시작과 끝의 주소를 담고 있으며 brk는 증가할 수 있다. start_stack스택 세그먼트의 시작 주소를 뜻한다.

Kernel Space Memory Layout

========================================================================================================================
      Start addr    |   Offset   |     End addr     |  Size   | VM area description
  ========================================================================================================================
                    |            |                  |         |
   0000000000000000 |    0       | 00007fffffffffff |  128 TB | user-space virtual memory, different per mm
  __________________|____________|__________________|_________|___________________________________________________________
                                                              |
                                                              | Kernel-space virtual memory, shared between all processes:
  ____________________________________________________________|___________________________________________________________
                    |            |                  |         |
   ffff888000000000 | -119.5  TB | ffffc87fffffffff |   64 TB | direct mapping of all physical memory (page_offset_base)
   ffffc90000000000 |  -55    TB | ffffe8ffffffffff |   32 TB | vmalloc/ioremap space (vmalloc_base)
  __________________|____________|__________________|_________|____________________________________________________________
                                                              |
                                                              | Identical layout to the 56-bit one from here on:
  ____________________________________________________________|____________________________________________________________
   ffffffff80000000 |   -2    GB | ffffffff9fffffff |  512 MB | kernel text mapping, mapped to physical address 0
   ffffffffa0000000 |-1536    MB | fffffffffeffffff | 1520 MB | module mapping space
  __________________|____________|__________________|_________|___________________________________________________________

커널 영역의 메모리 구조는 유저 영역과 달리 모든 프로세스가 공유하기 때문에, 서로 다른 프로세스가 같은 커널 영역의 주소에 접근하게 되면 모두 같은 커널 영역 메모리에 접근하게 된다