커널 Kernel
커널은 운영체제의 가장 핵심적인 역할을 하는 부분으로 하드웨어와 응용 프로그램 간의 인터페이스 역할을 한다.
- CPU, 메모리, 프로세스, 파일시스템, 입출력 등 주요 하드웨어 자원을 관리한다.
- 부팅 시 메모리에 로드된다.
- 항상 메모리에 올라가 있으며 하드웨어와 프로세스를 관리하는 소프트웨어이다.
커널의 주요 기능
커널의 주요 기능은 컴퓨터의 하드웨어 자원을 추상화하여 관리하고, 시스템 콜을 통해 사용자 및 응용 프로그램이 하드웨어 자원에 접근할 수 있도록 하는 것이다.
- 프로세스 관리 : 물리적 자원인 CPU를 추상적 자원인 Task로 제공
- 메모리 관리 : 물리적 자원인 메모리를 추상적 자원인 Page 또는 Segment로 제공
- 파일 시스템 : 물리적 자원인 디스크를 추상적 자원인 파일로 제공
- 네트워크 관리 : 물리적 자원인 네트워크 장치를 추상적 자원인 Socket으로 제공
- 스케쥴링 : 프로세스들 간 실행 순서를 결정
- 인터럽트 핸들링 : 인터럽트 요청의 처리
- 디바이스 드라이버를 통한 주변 장치 관리
- 입출력 처리
- 시스템 콜 제공
주요 커널 이미지명
- 초기 유닉스 : unix
- BSD 기반의 유닉스 : vmunix
- 리눅스 : vmlinuz (/boot/vmlinuz)
- 윈도우 : ntoskrnl.exe
Kernel Space 와 User Space
운영체제는 시스템 보호를 위해 커널 영역과 유저 영역으로 메모리를 분리하여 관리한다.
- 커널 영역은 메모리의 가장 높은 주소 범위를 차지하며, 커널 코드 및 데이터가 위치해 있다.
- 유저 영역은 주로 사용자 응용 프로그램의 코드와 데이터가 위치하는 공간으로 다시 스택영역, 힙영역, 데이터영역, 코드영역으로 나뉜다.
리눅스의 메모리 관리 구조
리눅스 운영체제는 MMU(Memory Management Unit) 장치의 도움을 받아 가상 메모리 시스템을 사용하여 효율적으로 메모리 관리를 구현한다. 가상 메모리는 프로세스가 물리적 메모리 대신 가상 주소 공간을 사용하게 하는 메모리 기법으로 다음과 같은 장점을 제공한다.
- 메모리 보호: 각 프로세스는 자신만의 가상 주소 공간을 가지며, 다른 프로세스의 메모리에 접근할 수 없다.
- 메모리 확장: 실제 물리적 메모리보다 큰 주소 공간을 사용할 수 있어, 스왑을 통해 디스크 공간을 메모리처럼 사용할 수 있다.
- 효율성: 자주 사용되지 않는 메모리 페이지를 디스크로 옮겨 물리적 메모리를 효율적으로 사용할 수 있습니다.
32비트 아키텍처의 가상 메모리
32비트 시스템에서는 4GB의 가상 주소 공간을 가질 수 있는데 이 공간은 다음과 같이 나뉜다.
- 사용자 공간: 하위 3GB (0x00000000 ~ 0xBFFFFFFF) - 사용자 애플리케이션이 사용하는 공간
- .text
- .data
- .bss
- heap
- stack
- 커널 공간: 상위 1GB (0xC0000000 ~ 0xFFFFFFFF) - 커널 및 커널 모듈이 사용하는 공간
Kernel Mode 와 User Mode
커널은 운영체제의 핵심 부분이므로 응용프로그램이 커널에 직접 접근하지 못하도록 두가지 모드가 존재한다.
- 커널모드 : CPU가 운영체제의 핵심 부분인 커널 코드를 실행하는 모드이다. 커널 모드에서는 특권 명령을 실행할 수 있으며, 시스템 자원에 직접적으로 접근할 수 있다.
- 유저모드 : CPU가 사용자 응용 프로그램의 코드를 실행하는 모드이다. 유저 모드에서는 특정 권한이 제한되어 있으며, 시스템 자원에 직접적인 접근이 불가능하다. 시스템 자원에 접근할 필요가 있을 때는 시스템 콜을 통해 커널 서비스를 요청할 수 있다.
System Call : Kernel Mode 와 User Mode 의 전환
사용자 응용 프로그램이 시스템 자원에 직접 접근해야 하는 경우, 응용 프로그램은 시스템 콜을 호출한다. 시스템 콜은 커널 모드로의 전환을 유발하며, 커널이 해당 서비스를 수행하고, 수행이 끝나면 다시 사용자 모드로 돌아가 결과를 반환한다.
주요 시스템콜 함수
- 파일 조작 시스템 콜 : open, close, read, write, readv, writev, lseek, fsync, fdatasync, stat, fstat, chmod, chown, unlink
- 디렉터리 조작 시스템 콜 : mkdir, rmdir, opendir, readdir, closedir
- 프로세스 제어 시스템 콜 : fork,exec, wait, exit, getpid, getppid, kill
- 메모리 관리 시스템 콜 : brk, mmap, munmap, mprotect, msync
- 네트워킹 시스템 콜 : socket, bind, listen, accept, connect, recv, send, recvfrom, sendto, shutdown
- 기타 시스템 콜 : gettimeofday, settimeofday, getuid, geteuid, getgid, getegid, chdir, getcwd
커널 모듈
커널 모듈은 커널의 기능을 동적으로 확장할 수 있는독립적인 컴포넌트이다. 필요할 때만 메모리의 커널 공간에 로드되며, 커널의 재컴파일 없이도 커널 모듈을 통해 새로운 기능이나 드라이버를 추가할 수 있다.
보통 커널을 컴파일 할 때 .config 파일 설정을 통해 커널에 있는 기능을 모듈로 빼거나 모듈을 커널에 포함시키는 등 유연하게 사용할 수 있다.
쉘 Shell
커널은 하드웨어를 둘러싸고 제어한다. 그리고 사용자가 커널과 상호작용할 수 있도록 인터페이스를 제공하는 것은 바로 쉘이다.
쉘은 운영체제의 핵심 요소중 하나인 명령어 해석기로서, 사용자가 입력한 명령어를 해석하고 해당하는 커널 기능과 운영체제의 서비스를 호출하여 사용자가 시스템과 상호작용할 수 있도록 해준다.
- 사용자가 명령어를 입력하면 쉘은 해당 명령어를 해석하고 이를 커널에 전달한다.
- 커널은 쉘에게 필요한 서비스를 제공하고 명령어의 실행 결과를 쉘에게 반환한다.
- 쉘은 사용자에게 실행 결과를 표시하고 다음 명령어를 대기하는 상태로 전환된다.
참고 :
http://www.ktword.co.kr/test/view/view.php?m_temp1=408&id=522
'운영체제 > Linux' 카테고리의 다른 글
Ubuntu ] 시스템 복원 도구 timeshift 설치 (0) | 2024.05.27 |
---|---|
Ubuntu ] 안쓰는 ssd 사용하여 우분투 멀티부팅가능하게 설치하기 (0) | 2024.05.25 |
파일 디스크립터 (0) | 2023.09.28 |
gdb의 플러그인 pwndbg 설치 (0) | 2022.10.18 |
Linux ] cat 명령어, > 리다이렉션 (0) | 2022.10.10 |