반응형

리눅스 파일 시스템

 리눅스 파일시스템 특징은 유닉스 파일시스템을 모태로 하고 있습니다.

 리눅스 파일시스템은 프린터, 터미널, 디스크 동 모든 주변 장치들도 하나의 파일로 취급합니다. 이것을 가상 파일 시스템이라고 칭하기도 합니다.

 

 리눅스는 디렉토리와 서브 디렉토리 간에 트리형태로 되어있습니다. 루트 디렉터리부터 "트리"구조로 되어있습니다.

여기서 알아할 지식은 루트 디렉터리(root directory)는 '/'로 표시됩니다.

 

 또한 아스키 파일과 이진 파일을 동등하게 취급합니다. 유닉스하고 리눅스는 이 둘을 동등하게 취급합니다. 윈도우는 동등되게 취급되지 않습니다. 윈도우는 텍스트파일은 변형과정을 거쳐서 프로세스로 올라오는 반면 이진파일은 없습니다. 하지만 리눅스 유닉스는 차이 없고 동등합니다.

 

 모든 파일은 또한 허가모드(Permission Mode)를 가집니다. 어떤 파일이 됐던 간에 이 파일의 권한이 있습니다. 모든 파일은 멀티유저 기반으로 되어있습니다. 

 

 

 리눅스에서는 여러 개의 파티션을 나누어서 씁니다. 여기서 /dev/sda 가 하나의 파티션입니다. 예를 들어 아래와 같은 걸 각각 파티션 이라고 합니다.

/dev/sda, /dev/sda1, /dev/sd2

 

Boot Block

이 부분에 해당하는 운영체제가 깔려 있습니다. 운영체제 (ex 리눅스)를 띄울 수 있는 부트스트랩 로더(Bootstrap Loader)라고하는 부트 블럭(Boot Block)이 맨 앞에 있습니다. 전체 파일시스템을 관장하는 Super Block이 맨 앞에 있습니다. (부트 블럭 뒤에 있습니다).

 그 다음에 information node라는 하는 i-node block이 있고 파일 하나당 i-node block 하나가 있습니다. 파일 하나당 크기에 따라서 Data block은 여러개 있습니다. 

 i-node 하나당 데이터 블록이 하나일 수도 있고 여러개 매칭 될 수 있습니다. 데이터 블록 하나하나는 4K byte입니다.

 

 

Super Block

 Super block 전체 파일 시스템을 관장합니다. 아래의 정보를 가집니다.

 - 파일 시스템 크기

 - 파일 시스탬 내의 자유 블록의 수

 - 파일 시스템 내에서 사용 가능한 자유 블록의 리스트

- i-node 리스트의 크기

- 파일 시스템 내의 사용 가능한 i-node 의 수

- 파일 시스템 내의 사용 가능한 i-node의 리스트

 

 

i-node List와 i-node

i-node List의 각 항 i-node은 하나의 파일과 대응합니다.

 - 부팅 시 추가 정보가 포함되어 메모리에 로딩이 됩니다. (이걸 i-node cash라 합니다)

 - 각 i-node가 갖는 정보는

    - 소유자 ID, 파일의 유형, 파일 접근 허가, 파일 접근 시간

    - 링크 수 , 파일 데이터의 주소, 파일 크기

- 추가 정보

  - 파일마다 유니크한 번호인, i-node 번호  ( ls -li 명령어로 확인할 수 있음)

  - 파일 시스템 장치 번호 (아래의 메이저번호 8, 마이너 번호 0을 통해 확인할 수 있다.

 

Data Block

 실제 데이터들이 들어가있는 블록입니다. 이 데이터가 여러 개 들어갈 수 있습니다.

 

 

파일 시스템 개발 종류

 파일 시스템을 제어하기 위해 App 코드를 개발 할 수 있는데 이걸 아래와 같이 2가지 방법으로 개발 할 수 있습니다.

  1) 커널의 시스템 콜을 호출하는 분야로 개발할 수 있고

  2) C 표준 라이브러리로 개발할 수 있습니다.

 

2)가 더 쉬운 접근이고 이걸 App 개발이라고 합니다.

 

이 앱을 개발하는 것은 App Programming이라고 볼 수 있습니다.

시스템 콜을 직접 호출하는 건 System Programming이라고 합니다.

 

App Progoramming에서 파일 접근하는 방식은 아래의 4가지 방법을 씁니다.

 - 파일을 열때, fopen

 - 파일을 읽을때, fread

 - 파일을 쓸때, fwrite

 - 파일을 닫을 때, fclose

 

System Programming에서 파일 접근하는 방식은 아래의 4가지 방식을 씁니다.

: open, read, write, close 를 씁니다.

 

App으로 먼저 공부하고 시스템 공부하는게 좋은 순서입니다.

 

 App Programming을 개발할 때 시스템 콜을 만약에 쓴다면 중간에 Library Buffer를 쓰지 않는다는 것이 됩니다. App Programming 기법으로 개발하게 되면 fopen, fread를 쓸 때, Library Buffer가 기본적으로 생성되게 됩니다.

 커널 프로그래밍은 이 시스템 콜을 직접 만들거나 변형을 하게 됩니다.

커널도 디바이스와 통신하기 위해 디바이스 드라이버가 있고 그 위에 System Buffer(buffer cache가 있습니다, 여기서 Buffer cache, Library buffer 크기는 4K입니다)

 

 

 

 

 

 

 

 
 
 
 
반응형