저는 Linux를 사용하려고 하는데 방금 모듈 스택의 개념을 접했습니다. 다른 모듈에서 내보낸 기호를 사용하는 데 사용할 수 있습니다. 즉, 모듈에서 이미 만들어진 것을 사용할 수 있으므로 이미 완료된 것을 수행할 필요가 없습니다. 하지만 나는 아직도 리눅스에서 이런 종류의 일을 실시간으로 본다는 개념을 이해하지 못합니다.
나는 O'Reilly의 책에 있는 동일한 링크를 클릭하고 있습니다.http://www.makelinux.net/ldd3/chp-2-sect-5.shtml
병렬 포트 하위 시스템의 스태킹은 그림 2-2에 나와 있습니다.
이 숫자를 이해할 수 없습니다.
내 시야를 넓혀줄 모듈 스태킹 개념을 사용할 수 있는 실시간 샘플 애플리케이션을 제공할 수 있습니까?
답변1
스택은 일부 모듈이 다른 모듈에 정의된 함수를 호출한다는 의미입니다. 참조한 페이지에 예제가 있습니다. 그림과 같이 lp
병렬포트 프린터용 드라이버입니다. 범용 병렬 포트 드라이버를 호출합니다 parport
. 여러 가지 유형의 병렬 포트가 있으며 각각 고유한 저수준 드라이버가 있습니다. parport_pc
현재 커널에서는 parport_pc
포트에 정의된 함수가 실제로 호출되며 parport
, 표시된 것과 반대가 아닙니다. 물론 이들은 모두 기본 커널 함수(모듈이 아님)를 호출합니다.
비슷한 사례가 많이 있습니다. 예를 들어 대부분의 저장소(디스크) 드라이버는 SCSI 프로토콜(변형)과 통신하므로 공통 scsi_mod
모듈을 호출합니다. 이 모듈은 (저장용) 및 (USB용) usb_storage
이라고 합니다 .sci_mod
usbcore
설치한 모든 모듈 /lib/modules/*/modules.dep
(많은 모듈이 있음)의 종속성(즉, 어떤 모듈이 다른 모듈의 함수를 호출하는지)을 볼 수 있습니다. 현재 로드된 모듈의 종속성을 볼 수 있습니다 lsmod
. 예를 들어 다음 출력 줄에는 가 표시되며 parport_pc
모두 ppdev
다음 lp
에 따라 달라집니다 parport
.
parport 27954 3 parport_pc,ppdev,lp
이것은 로드된 모듈에 대한 종속성 그래프를 생성하는 작은 스크립트입니다. 당신은 가지고 있어야그래픽 시각화(대부분의 배포판에서 사용 가능)
lsmod | awk '
BEGIN {print "digraph modules {"}
END {print "}"}
NR != 1 {split($4, a, ","); for (i in a) print a[i], "->", $1;}
' | dot -Tpdf >lsmod.pdf
답변2
일반적으로 컴퓨터가 상호 작용하는 물리적 장치와 관련된 기능 세트가 있습니다. 예를 들어, 디스크 드라이브 관련 기능에는 파일 시스템, 암호화, 중복성 등이 포함됩니다. 다양한 기능을 정리하고 제공하는 방법 중 하나는스택.
다음은 "스택"/"함수"(세로 방향) 및 "레이어"(가로 방향)를 확인할 수 있는 Linux 커널의 일반적인 다이어그램입니다.
위 이미지의 더 자세한 버전은 다음과 같습니다.
다음은 Linux의 장치 드라이버 스택의 예입니다.
입력/출력 스택
개념:
자세한 내용은 다음과 같습니다.