자신의 컴퓨터에서 Linux 커널에 대해 자세히 알아 보는 방법



문제를 제거하기 위해 도구를 사용해보십시오

GNU / Linux로 작업하는 방법을 배우려면 일반적으로 데스크탑 환경에서 작업하는 방법을 배웁니다. 테마 기술을 통해 이러한 데스크톱 환경은 iOS, Microsoft Windows 및 OS X 장치의 인터페이스를 모방 할 수 있습니다. 이것은이를 최소화하는 데 도움이됩니다. 많은 사람들이 더 나아가 Bash 또는 tcsh 쉘을 사용하여 Unix 명령 행 관리를 배웁니다. 그러나 Linux 커널의 내부에 대해 알게되면 서로 다른 opcode 조각이 서로 상호 작용하는 방식을 더 잘 이해할 수 있습니다.



어떤 사람들은 몇 단계 더 나아가 컴파일러가 C 코드를 마이크로 프로세서의 기계 강사로 변환하는 방법을 추가로 배우는 것이 가장 좋을 것이라고 주장 할 것입니다. 어셈블리 코드 지지자들은 x86 및 x86_64 플랫폼에서의 프로그래밍을 진정으로 이해하기 위해 ASM을 배우는 것이 가장 좋다고 주장합니다. 이러한 위치에 관계없이 기본 Linux 명령은 커널이 컴퓨터를 인식하는 방법에 대한 풍부한 정보를 제공 할 수 있습니다. 외형을 통해 배우지 만 패러다임을 만지지 않는 것은 커널 자체를 마스터하는 좋은 방법입니다. 이 페이지의 예제에서는 루트 계정이 사용되었지만 사용자 계정을 통해서만 커널에 연결된 디렉토리 만 보는 것이 좋습니다.



방법 1 : / proc 디렉터리

/ proc 디렉토리는 모든 Unix 파일 구조에서 최상위 루트 디렉토리의 기본 영역 중 하나에 있습니다. 여기에는 다양한 리소스가 커널 메모리에 액세스하는 방식에 대한 정보가 포함 된 procfs로 더 잘 알려진 proc 파일 시스템이 포함되어 있습니다. 시스템이 부팅 될 때 / proc에 매핑됩니다. 이 프록시 파일 구조는 Linux 커널 내부의 내부 데이터 구조에 대한 인터페이스 역할을하므로 사용자 계정을 통해서만 탐색하는 것이 다시 한 번 가장 좋습니다. 어쨌든 대부분의 파일은 가시적 인 시스템 파일 구조에 따라 읽기 전용으로 분류되지만 안전한쪽에있는 것이 가장 좋습니다.



즉, 이들 각각은 텍스트 파일이므로 원하는 경우 볼 수 있습니다. cd 명령을 사용하여 / proc 디렉토리를 입력 한 다음 ls를 실행하여 무엇이 있는지 확인하십시오. 파일을 보려면 cat, less or more 명령을 사용하십시오. cpuinfo 파일은 커널이 마이크로 프로세서를 보는 방법을 표시하므로 시작하기에 좋은 위치입니다. 실행중인 프로세스를 보려면 stat 파일을 확인하십시오.

2016-11-25_020006

고양이 장치를 입력하면 기계에 어떤 것이 연결되어 있는지 확인할 수 있습니다.



2016-11-25_020109

그건 그렇고, / proc 파일 구조가 커널과 어떻게 관련되는지에 대한 요약을 위해 항상 man proc 명령을 실행할 수 있습니다. 제공되는 페이지는 Linux 프로그래머 매뉴얼에서 가져온 것입니다.

2016-11-25_020156

방법 2 : / sys 디렉터리

커널 둘러보기의 다음 목적지는 / sys이며, 이는 가상 파일 구조에 매핑 된 또 다른 디렉토리입니다. 이는 / proc과 동일한 일반 Unix 개념을 따르지만 대신 관련 장치 드라이브 및 여러 커널 하위 시스템에 대한 정보를 적극적으로 내 보냅니다. BSD 기반 시스템으로 작업 한 적이 있다면 이러한 기능을 제공하는 sysctl에 더 익숙 할 것입니다. PCI, USB 및 S / 390 버스 장치는 모두 / sys 디렉토리에 매핑됩니다.

cd / sys를 사용하여 디렉토리로 이동 한 다음 ls 또는 dir 명령을 실행하십시오. 블록, 클래스, 장치, fs, 커널 및 기타 이름의 디렉토리가있을 수 있습니다. 시스템에 대한 정보가 포함 된 추가 플랫 파일을 탐색 할 수 있지만 사용자 계정에서 다시 한 번 확인하고 계속 살펴 보되 자신에 대한 생각을 건드리지 마십시오.

방법 3 : / dev 디렉토리

cd / dev 명령을 사용하여 이미 익숙한 커널 가상 구조 인 / dev 디렉토리로 이동합니다. 이름은 장치를 의미하며 시스템에 연결된 장치의 파일 표현을 포함합니다. 이 디렉토리의 ls 명령은 가장 간단한 서버 배포에서도 많은 파일을 반환합니다.

2016-11-25_020242

이들 중 일부는 매우 특별합니다. / dev / null 파일은 아무 작업도 수행하지 않는 널 장치입니다. cat / dev / null을 입력하면 아무것도 얻지 못할 것입니다. 이를 비트 버킷이라고하며 화면을 깨끗하게 유지하기 위해 출력을 리디렉션 할 수 있습니다. / dev / zero라는 파일은 데이터를 0으로 만들기 위해 디스크에 쓸 수있는 데이터 만 포함합니다. random 및 urandom 파일에는 보안 해시를 만들기위한 임의의 정크 데이터가 포함되어 있습니다.

디스크를 포맷 한 적이 있다면 Linux 커널이 디스크를 보는 방식에 대해 적어도 어느 정도 경험이있을 것입니다. 시스템에 연결된 각 디스크는 각 디스크에 대해 sda, sdb 등과 같은 이름을 갖습니다. 디스크 유형에 따라 이름이 다릅니다. / dev 디렉토리는 일반적으로 해당 용어를 사용하는 방식이 아니라 디스크의 잠재적 인 공식적인 컴퓨터 과학 정의를 활용합니다. 즉, 하드 드라이브, SSD, SD 카드, microSDHC 카드, USB를 통해 연결된 스마트 폰 파일 시스템, USB 스틱 및 심지어 마운트 된 태블릿도 모두 커널에 대한 디스크입니다.

Linux의 각 디스크 이름은 파티션 번호를 나타내는 숫자를받습니다. 두 개의 기본 파티션이있는 SSD가있는 경우 / dev / sda1 및 / dev / sda2가 유효한 볼륨으로있을 수 있습니다. MBR 스타일 파티셔닝을 사용하여 데스크톱이나 랩톱에서 Linux를 실행하는 경우 / dev / sda1을 실제로 Linux가 설치된 ext4 파티션으로 설정합니다. / dev / sda2는 확장 파티션으로 / dev / sda5를 스왑 파티션으로 포함합니다. 이 계획은 일반적이지만 반드시 필요한 것은 아닙니다. 이 일반적인 예에서 스왑 파티션은 확장 파티션 내부의 논리 디스크이므로 숫자로 3 대신 5를받습니다.

커널이 파티션을보고 포맷하는 방법에 대해 더 알고 싶다면 fdisk 명령을 사용하여 지원되는 파티션 목록을 실제로 볼 수 있습니다. 동안 fdisk 말할 때까지 파티션 테이블을 작성하지 않습니다. 토스트에 신경 쓰지 않는 작업을 시도하는 것이 가장 좋습니다. 쉽게 다시 포맷 할 수있는 빈 USB 스틱과 같은 것을 가리키는 것이 좋습니다.

스틱이 다음과 같이 나타난다 고 가정 해 보겠습니다. / dev / sdc , 다음을 사용할 수 있습니다. sudo fdisk / dev / sdc 로드 할 수 있습니다. 유효한 파티션이있는 경우 t를 입력하여 유형을 변경하고 유형 L을 입력하여 16 진수 코드 목록을로드합니다. MBR 및 GUID 파티션 구성표는 커널과 다르게 통신하므로 할당이 다릅니다.

2016-11-25_020331

대부분의 경우 드라이브를 유형 83 (Linux 드라이브 용), 82 (Linux 스왑 파티션 용) 또는 FAT 파일 유형 중 하나로 설정합니다. FAT는 어떤 형태로든 1977 년으로 거슬러 올라가며 많은 이동식 드라이브뿐만 아니라 많은 유형의 모바일 장치에서 여전히 선호됩니다. 유형 0x0c와 같은 일부 파티션 유형에는 LBA 지원이라는 기능이 있습니다.

프로그래머가 운영 체제 용 커널을 설계 할 때 디스크를 볼 수있는 몇 가지 다른 방법이 있습니다. 하나는 플래터를 실린더, 헤드 및 섹터로 나누는 것입니다. 이것은 가장 오랫동안 하드 드라이브를 참조하는 고전적인 방법이었습니다. 정품 디스크 구조는 Linux에서 실제로 중요하지 않았으며이 체계는 약 8 바이너리 기가 바이트 후에는 주소가 부족합니다. 두 번째 방법은 논리 C / H / S 주소 지정을 사용하는 것입니다. 이렇게하면 디스크 컨트롤러가 원하는 위치에 실린더, 헤드 및 섹터 번호를 매핑 할 수 있습니다. 이것이 물리적으로 불가능할 때 운영 체제가 이론적으로 SD 카드 또는 USB 스틱에 헤드가 있다고 주장 할 수있는 이유입니다.

세 번째 방법은 LBA가 의미하는 논리 블록 주소 지정을 사용하는 것입니다. 볼륨의 각 물리적 블록은이 체계에서 숫자를받습니다. 운영 체제는 디스크 컨트롤러에 특정 번호가 지정된 블록에 쓰도록 지시하지만 실제로 디스크의 직접 블록인지 여부는 알지 못합니다. 이것은 오늘날 가장 많이 사용되는 체계이며 1990 년대 중반 이후 대부분의 하드 디스크에서 확실히 사용되었습니다.

Linux는 직접 입력없이 다양한 파티션 유형을 마운트 할 수있는 커널 지원을 제공하지만 선택할 때 너무 이상하지 않는 것이 좋습니다. 파일 시스템 일치 선택에 매우 이상한 파티션 유형을 만든 경우 데이터를 토스트 할 수 있습니다.

방법 4 : Linux 프로그래머 매뉴얼에서 시스템 호출

대부분의 Linux 배포판에 포함 된 온보드 매뉴얼 페이지 리더는 실제로 시스템 호출에 대한 집중 과정을 제공 할 수 있으며, 이는 커널에 대해 배우는 데 크게 도움이 될 수 있습니다. .desktop 링크가있는 경우 xman 그래픽 매뉴얼 페이지 브라우저를 시작하거나 수퍼 키와 R을 동시에 누른 다음 xman을 입력하고 Enter를 눌러 시작하십시오. '수동 페이지'옵션을 선택한 다음 드롭 다운 메뉴에서 '섹션'과 마지막으로 '(2) 시스템 호출'을 선택합니다.

2016-11-25_020430

옵션 읽기 ' 소개 ”이 나타나면 선택하십시오. 시스템 호출에 대해 꽤 가르쳐 줄 Linux 프로그래머 매뉴얼의 페이지가 여러분을 맞이할 것입니다.

2016-11-25_020518

6 분 읽기