온라인에서 다음 사진을 찾았습니다.
이 그림에서 내가 이해하는 것은 예를 들어 다음과 같습니다.공정 1파일을 읽으려면 다음을 수행합니다.
read()
파일의 파일 설명자를 호출 하고 에 인수로 전달합니다read()
.- 가상 파일 시스템은 파일이 ext2 파일 시스템에 있다고 가정하고 파일이 어떤 파일 시스템 유형에 있는지 확인합니다.
- ext2 드라이버("드라이버"인지는 확실하지 않음)는 HDD에서 파일을 검색하기 위해 적절한 장치 드라이버를 요청합니다.
이제 내가 알고 싶은 것은: 그림의 "장치 드라이버" 상자 는 무엇을 나타내는가? , /dev/sda1
등 의 장치 파일을 나타내는가 ?/dev/sda2
/dev/sdb1
따라서 기본적으로 Linux는 실제로 이러한 장치 파일을 사용하여 HDD에 액세스합니다(예: Linux가 특정 파일을 읽으려고 할 때 open()
장치 /dev/sda1
파일을 호출한 다음 반환된 파일 설명자에서 읽습니다). 또는 이러한 장치 파일을 사용자 및 프로그램용으로만 사용합니다. 이를 사용하는 경우 Linux는 HDD 파티션에 액세스하기 위해 어떤 다른 방법을 사용합니까?
답변1
따라서 기본적으로 Linux는 실제로 이러한 장치 파일을 사용하여 HDD에 액세스합니다(예: Linux가 특정 파일을 읽으려고 할 때
open()
장치/dev/sda1
파일을 호출한 다음 반환된 파일 설명자에서 읽습니다). 또는 이러한 장치 파일을 사용자 및 프로그램용으로만 사용합니다. 이를 사용하는 경우 Linux는 HDD 파티션에 액세스하기 위해 어떤 다른 방법을 사용합니까?
아니요.
리눅스 커널은구현하다시스템 호출(2);이것은아니요곧장그것을 써.
시스템 호출다음과 같은 경우에만 의미가 있습니다.사용자 모드애플리케이션 코드. 커널 코드는 커널 모드에서 실행됩니다. 읽다CPU 모드.
틀림없이,오픈(2)-그 다음에독서(2)- 일부 디스크 파티션을 지정합니다. 예:/dev/sda1
간접적으로일부가 포함됩니다핵심다른 커널 코드에서 공유하고 사용하는 코드(예: 특히페이지 캐시그리고파일 시스템암호).
이러한 장치 파일은 사용자와 프로그램만을 위한 것입니까? Linux는 HDD 파티션에 액세스하기 위해 다른 수단을 사용합니까?
예, 커널 코드는 장치 파일을 사용하지 않습니다.표준편차(4)(그러나 일부 코드 레이어는 어딘가에 공유됩니다). 커널은 사용하지 않습니다(그러나공급사용자 프로세스가 시스템 호출을 사용할 때)파일 설명자커널을 처리인덱스 노드및 기타 데이터(dentries, vfsmounts...). 다른 유형의 inode는 파일 시스템 계층에 의해 디스크에 기록됩니다.
이미지의 "장치 드라이버" 상자는 무엇을 의미합니까?
이는 커널 코드를 나타냅니다(읽기장치 드라이버위키 페이지) 관련SATA디스크와칩셋.
읽다운영 체제: 세 가지 간단한 부분(무료 다운로드) 모든 것을 설명하려면 책 전체가 필요하기 때문입니다. 그럼 봐커널의 새로운 기능Linux 커널 관련 사항에 대해서는 커널 소스 코드를 연구하십시오(무료 소프트웨어) 에서kernel.org
(이것은 일반적인 단순화입니다. 커널 코드는 모듈식이며 소프트웨어 계층으로 구성됩니다.가상 FS, SATA 버스 등...)