Linux 커널에는 5개의 하위 시스템이 있습니다: 1. SCHED(프로세스 스케줄링 제어 시스템) 2. 주요 기능은 여러 프로세스를 제어하여 메인 메모리 영역을 안전하게 공유하는 것입니다. VFS), 4. 네트워크 인터페이스(NET), 5. 프로세스 간 통신(IPC).
이 튜토리얼의 운영 환경: Ubuntu 16.04 시스템, Dell G3 컴퓨터.
커널:
컴퓨터 과학에서는 소프트웨어에서 발행한 데이터 I/O(입력 및 출력) 요구 사항을 관리하고 이러한 요구 사항을 데이터 처리 명령으로 변환하여 중앙 프로세서(CPU)에 전달하는 데 사용되는 컴퓨터 프로그램입니다. ) 및 컴퓨터의 기타 전자 부품은 현대 운영 체제의 가장 기본적인 부분입니다. 이는 많은 응용 프로그램에 대해 컴퓨터 하드웨어에 대한 보안 액세스를 제공하는 소프트웨어입니다. 이러한 액세스는 제한되어 있으며, 커널은 프로그램이 하드웨어의 특정 부분에서 작동할 수 있는 시기와 기간을 결정합니다. 하드웨어에서 직접 작업하는 것은 매우 복잡합니다. 따라서 커널은 일반적으로 이러한 작업을 완료하기 위한 하드웨어 추상화 방법을 제공합니다. 프로세스 간 통신 메커니즘과 시스템 호출을 통해 애플리케이션 프로세스는 필요한 하드웨어 리소스(특히 프로세서 및 IO 장치)를 간접적으로 제어할 수 있습니다.
리눅스 커널의 하위 시스템은 무엇인가요?
리눅스 커널은 주로 프로세스 스케줄링(SCHED), 메모리 관리(MM), 가상 파일 시스템(VFS), 네트워크 인터페이스(NET) 및 상호 연결로 구성됩니다. 프로세스 통신(IPC) 아래 그림과 같이 5개의 하위 시스템으로 구성됩니다.
1. 프로세스 스케줄링
프로세스 스케줄링은 시스템의 여러 프로세스가 CPU에 액세스하는 것을 제어하므로 CPU에서 여러 프로세스가 "마이크로 직렬 및 매크로 병렬"로 실행될 수 있습니다. . 프로세스 스케줄링은 시스템의 중심에 있으며 각 하위 시스템은 프로세스를 일시 중지하거나 재개해야 하기 때문에 커널의 다른 하위 시스템은 이에 의존합니다.
아래 그림에 표시된 것처럼 Linux 프로세스는 여러 상태 간에 전환됩니다.
Linux 프로세스 상태 전환
장치 드라이버 프로그래밍에서 요청된 리소스가 충족되지 않으면 드라이버는 일반적으로 다른 프로세스를 실행하도록 예약하고 요청한 리소스가 해제될 때까지 이 프로세스를 절전 상태로 전환합니다. 그리고 준비 상태로 들어갑니다. 수면은 중단 가능한 수면과 무중단 수면으로 구분됩니다. 둘의 차이점은 인터럽트 가능한 수면은 신호를 받으면 깨어난다는 것입니다.
완전히 TASK_UNINTERRUPTIBLE 상태인 프로세스는 "종료"될 수도 없으므로 Linux 2.6.26 이후의 커널에도 "TASK_WAKEKILL|TASK_UNINTERRUPTIBLE"과 동일한 TASK_KILLABLE 상태가 있으며 치명적인 신호에 응답할 수 있습니다.
Linux 커널에서는 task_struct 구조(include/linux/sched.h)가 프로세스를 설명하는 데 사용됩니다. 이 구조에는 메모리 리소스, 파일 시스템 리소스, 파일 리소스, tty 리소스, 신호 처리 등을 설명하는 포인터가 포함되어 있습니다. . Linux 스레드는 경량 프로세스 모델을 사용하여 구현됩니다. 스레드가 pthread_create() API를 통해 사용자 공간에 생성되면 기본적으로 커널은 새 task_struct를 생성하고 새 task_struct의 모든 리소스 포인터를 이를 생성한 리소스로 가리킵니다. task_struct의 포인터.
대부분의 프로세스(및 프로세스의 여러 스레드)는 기본 리소스 및 하드웨어 액세스에 대한 요구 사항이 있는 경우 사용자 공간 응용 프로그램에 의해 생성되며 시스템 호출을 통해 커널 공간에 들어갑니다. 때때로 커널 프로그래밍에서 여러 작업을 동시에 실행해야 하는 경우 커널 스레드가 시작될 수 있으며 이러한 스레드에는 사용자 공간이 없습니다. 커널 스레드를 시작하는 함수는 다음과 같습니다: pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
2 메모리 관리
메모리 관리의 주요 기능은 제어하는 것입니다. 여러 프로세스가 공유하는 주 메모리 영역의 보안. Linux 메모리 관리는 CPU가 메모리 관리 장치(MMU)를 제공할 때 각 프로세스에 대해 가상 메모리에서 실제 메모리로의 변환을 완료합니다. Linux 2.6에서는 MMU 없는 CPU에 대한 지원이 도입되었습니다.
그림에서 볼 수 있듯이 일반적으로 32비트 프로세서에서 Linux의 각 프로세스는 4GB의 메모리 공간을 사용하며 0~3GB는 사용자 공간에 속하고 3~4GB는 커널 공간에 속하며 커널 공간은 일정한 영향을 미칩니다. 일반 메모리와 I/O에서는 장치 메모리와 고급 메모리가 다르게 처리됩니다. 커널 공간과 사용자 공간 사이의 특정 경계는 커널 구성 옵션인 커널 기능→메모리 분할에서 조정될 수 있습니다. 경계는 2GB 또는 3GB로 설정할 수 있습니다.
Linux 프로세스 주소 공간
위 그림에서 볼 수 있듯이 Linux 커널의 전반적인 메모리 관리는 각 페이지의 점유를 관리하는 데 사용되는 기본 Buddy 알고리즘, 커널 공간 및 사용자 공간에서 C 라이브러리의 보조 관리. 또한 커널은 메모리를 사용하여 디스크를 캐시하는 페이지 캐시 지원도 제공하며, 지원 장치별 정보 플러셔 스레드는 더티 페이지 캐시를 디스크로 다시 플러시하는 데 사용됩니다. Kswapd(스왑 프로세스)는 Linux에서 페이지 재활용(파일 지원 페이지 및 익명 페이지 포함)에 사용되는 커널 스레드로, 메모리 재활용을 위해 LRU(최근 사용) 알고리즘을 사용합니다.
3. 가상 파일 시스템
그림과 같이
Linux 가상 파일 시스템
Linux 가상 파일 시스템은 다양한 하드웨어의 구체적인 내용을 숨기고 모든 기기에 통일된 인터페이스를 제공합니다. . 또한 각 특정 파일 시스템과 독립적이며 다양한 파일 시스템을 추상화한 것입니다. 이는 상위 계층 애플리케이션을 위한 통합된 vfs_read(), vfs_write() 및 기타 인터페이스를 제공하고 특정 기본 파일 시스템 또는 장치 드라이버에 구현된 file_Operations 구조의 멤버 함수를 호출합니다.
4. 네트워크 인터페이스
네트워크 인터페이스는 다양한 네트워크 표준에 대한 액세스를 제공하고 다양한 네트워크 하드웨어를 지원합니다. 그림 3.8에서 볼 수 있듯이 Linux의 네트워크 인터페이스는 네트워크 프로토콜과 네트워크 드라이버로 나눌 수 있으며, 네트워크 프로토콜 부분은 가능한 모든 네트워크 전송 프로토콜을 구현하는 역할을 합니다. 장치에는 해당 장치 드라이버가 있습니다.
Linux 네트워크 아키텍처
Linux 커널은 인터넷, UNIX, CAN, NFC, Bluetooth, WiMAX, IrDA 등과 같은 다양한 유형의 프로토콜 스택을 지원합니다. 상위 계층 응용 프로그램은 소켓 인터페이스를 균일하게 사용합니다.
5. 프로세스 간 통신
프로세스 간 통신은 프로세스 간 통신을 지원합니다. Linux는 세마포어, 공유 메모리, 메시지 대기열, 파이프, UNIX 도메인 소켓 등을 포함한 다양한 프로세스 간 통신 메커니즘을 지원합니다. 여러 프로세스, 여러 리소스에 대한 상호 배타적 액세스, 프로세스 간 동기화 및 메시지 전달을 지원합니다. 실제 Linux 응용 프로그램에서 사람들은 System V IPC의 메시지 대기열 및 기타 메커니즘보다는 UNIX 도메인 소켓을 사용하는 경향이 있습니다. Android 커널에는 새로운 Binder 프로세스 간 통신 방법이 추가되었습니다.
Linux 커널의 5개 구성 요소 간의 종속성은 다음과 같습니다.
프로세스 스케줄링과 메모리 관리 간의 관계: 이 두 하위 시스템은 서로 종속되어 있습니다. 다중 프로그램 환경에서 프로그램을 실행하려면 프로세스를 생성해야 합니다. 프로세스를 생성할 때 가장 먼저 해야 할 일은 프로그램과 데이터를 메모리에 로드하는 것입니다.
프로세스 간 통신과 메모리 관리의 관계: 프로세스 간 통신 하위 시스템은 공유 메모리 통신 메커니즘을 지원하기 위해 메모리 관리에 의존합니다. 이 메커니즘을 통해 두 프로세스는 자신의 개인 공간을 가질 뿐만 아니라 액세스도 할 수 있습니다. 공통 메모리 영역.
가상 파일 시스템과 네트워크 인터페이스의 관계: 가상 파일 시스템은 네트워크 인터페이스를 사용하여 NFS(Network File System)를 지원하고 메모리 관리를 사용하여 RAMDISK 장치를 지원합니다.
메모리 관리와 가상 파일 시스템의 관계: 메모리 관리는 가상 파일 시스템을 사용하여 스와핑을 지원하며 스와핑 프로세스는 스케줄러에 의해 정기적으로 예약되므로 메모리 관리는 프로세스 스케줄링에 의존합니다. 프로세스가 액세스하는 메모리 맵이 스왑 아웃되면 메모리 관리는 가상 파일 시스템에 요청을 보내는 동시에 현재 실행 중인 프로세스를 일시 중지합니다.
이러한 종속성 외에도 커널의 모든 하위 시스템도 일부 공통 리소스에 의존합니다. 이러한 리소스에는 메모리 공간 할당 및 해제 기능, 경고 또는 오류 메시지 출력 기능, 시스템에서 제공하는 디버깅 인터페이스 등 모든 하위 시스템에서 사용하는 API가 포함됩니다.
관련 추천: "Linux 비디오 튜토리얼"
위 내용은 리눅스 커널의 하위 시스템은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!