2013-05-15 6 views
0

strace -ttT date을 실행하면 실행 파일의 실행 직후에 많은 syscalls를 놓친다. execve() 후에 date ELF가 HDD에서 메모리로 복사되는 더 이상의 시스템 콜이 없다면 커널 내에서 발생합니까? 나는 각 바이트가 메모리에 blockwise 적재되는 HDD 컨트롤러에 많은 IOCTL을 보았을 것이라고 생각했다. 조금 단순화strace가 HDD IOCTL 시스템 콜을 보여주지 않는 이유는 무엇입니까?

16:00:00.505197 execve("/bin/date", ["date"], [/* 30 vars */]) = 0 <0.038088> 
16:00:00.543671 brk(0)     = 0x11b9000 <0.000074> 
16:00:00.543915 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) <0.000077> 
16:00:00.544187 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0f4083a000 <0.000076> 
16:00:00.544416 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) <0.000018> 
16:00:00.544543 open("/etc/ld.so.cache", O_RDONLY) = 3 <0.000059> 

답변

1

, 즉 VFS 커널 서브 시스템의 비즈니스가 아닌 유저 랜드 응용 프로그램이 될 것입니다.

우리는 데이터가 메모리 매핑 파일 시스템이나 NFS 등에서 살아있을 수 있음을 잘 알고 있기 때문에 커널은 모든 복잡성으로부터 사용자를 보호하고 편리한 "파일"추상화를 제공합니다. 단일 루트 디렉토리 트리 및 여러 속성에 대한 경로, 적용 할 작업 세트 (시스템 호출) (예 : 원래는 OO :).

시스템 내부 쪽에서 파일은 일반적으로 적절한 FS 드라이버 (예 : read(2) 또는 그 이상)에서 차단되는 동안 또는 그 전에 적절한 커널 드라이버로 커널에 전달됩니다.