[주의] 아직 업데이트 중인 글입니다. Standard unix command 중에서 '특정 directory와 하위 파일들이 파일시스템에서 차지하는 용량의 총합'을 알아낼 수 있는 가장 대표적인 방법으로 'du -s' ~ 'du --max-depth=0'가 있다. du command는 glibc의 fts를 이용하여 file system hierarchy를 (default)preorder로 recursive하게 traversing하여 모든 파일/디렉토리에 대하여 stat system call을 호출한다. 더 자세한 구현 내용은 Unix 'coreutils' repository의 'du.c'를 읽어보면 되겠다. (사실상 위의 두줄이 전부다.) glibc의 fts module implementation을 읽어보지 않아서, 실제로 directory tree traversing이 recursive하게 이루어지는지를 알 수는 없다. (설마?) 만약, 그렇다면 pre-order traversing 을iterative하게 바꾸면 속도가 좀 빨라지긴 할 것이다 .일단 이건 논외로 하고(...) 다른 대책으로는 다음과 같은 해결방법들이 있을 수 있다. 해결방법(?) (1) 모든 subdirectory들을 recursive하게 방문하면서 계산한다. (2) file과 관련된 system call이 일어날 때마다 어딘가에 subdirectory summarized size를 caching 한다. (장난하냐?) File system '전체'의 free space에 대한 정보는 file system header에 operation이 일어날 때마다 항상 업데이트되기 때문에 df command로 (2)가 가능하지만, single directory에서는 이게 안된다(꼼수가 있긴 한데, 나중에 실험해보고 업데이트 해야겠다.) 젠장! 그런데 내가(혹은 독자가) 이 문제를 왜 고민하고 있는가? 바...
Introduction & Motivation Recently, I found out well-known formula 'Intersection between Three Planes' (Equation (22.31) of [1]) has no proof on literaly anywhere. Even (almost) the book where it is propsed[2]. So, I decided to figure out how this formula is derived.. (of course, experimentally it is wokrs very well.) Notation Let there be three planes on euclidean space $P_1, P_2, P_3$ which intersect in a point. If we let there normals as $n_1=(a_1, b_1, c_1), n_2=(a_2, b_2, c_2), n_3=(a_3, b_3, c_3)$, they must be linearly independent. Also, let the planes $P_1, P_2, P_3$ as the system of equation like below : $$\begin{cases} a_1x+b_1y+c_1z+d_1=0 \\ a_2x+b_2y+c_2z+d_2=0 \\ a_3x+b_3y+c_3z +d_3=0 \end{cases}$$ Proof A. Solve problem with Linear Algebra. To find a intersection point by linear algebra, write system of equations as matrix form : $$\begin{bmatrix}a_1 & b_1 & c_1 \\ a_2 & b_2 & c_2 \\ a_3 & b_3 & c_3 \\ \end{bmatrix}\begin{bmatrix} x...
댓글
댓글 쓰기