-
[Unix ] 파일 시스템운영체제/Unix 2019. 4. 30. 15:28
파일 시스템
목표
- 파일시스템의 구조를 이해한다.
- i - node의 개념을 이해한다.
파일 시스템의 구현
-
파일 시스템의 구조
파일 시스템의 구조는 위와 같다.
- 부트 블록 : 파일 시스템의 시작부에 위치, 부트스트랩 코드가 저장
- 슈퍼 블록 : 전체 파일 시스템의 정보를 저장
- 리스트 : i-node 들의 list 저장
- 데이터 블록 : 파일 테이터를 저장하기 위하 블록
부트 블록은 운영체제가 시작 시 ROM에 저장되어있는 부트스트랩 코드에 접근하여 실행한다.
슈퍼 블록은 총 블록수, I-NODE의 개수, 블록 비트맵, 블록의 크기, 사용 중인 블록수, 사용 가능한 블록수 등
전체 파일 시스템의 모든 정보를 가지고 있다.
I-LIST는 문자 그대로 I NODE들의 리스트이다. I NODE에 대해서는 이후에 설명한다.
데이터 블록은 파일의 내용을 저장하기 위한 블록들이다.
- I-NODE 란?
- i-node : 각 파일은 하나의 i-node로 표현
- i-node는 파일에 대한 모든 정보를 갖고 있음
- 파일 타입, 파일 크기, 사용권한, 파일 소유자 및 그룹, 파일 접근 시간, 데이터 블록에 대한 주소
실제 i-node의 모습은 위 그림과 같다.
- 파일의 상태 정보 : 파일 타입, 파일 크기, 파일 사용 권한, 파일 소유자 및 그룹, 파일 접근 및 갱신 시간이 존재
- 직접 블록 포인터 : 파일의 크기에 따라 최대 10개의 데이터 블록을 가리킬 수 있다.
- 간접 블록 포인터 : 파일의 크기를 10개의 데이터 블록 포인터로 표현하지 못할 때 간접 블록 포인터로 표현한다.
- 이중 간접 포인터 : 간접 블록 포인터로도 표현하지 못한 부분을 이중간접 포인터로 표현한다.
i-node는 크게 총 4개의 구성으로 이루어져 있다는 것을 알 수 있다. 그리고 파일 모든 정보는 파일이 가지고 있는 것이 아닌 i-node가 가지고 있다는 것을 알 수 있다. i-node는 총 4개로 구분 지을 수 있다.
파일의 모든 정보를 가지고 있는 파일의 상태 정보, 파일의 데이터를 가리키고 있는 직접 블록 포인터 간접 블록 포인터 이중 간접 포인터로 이루어져 있다. 간단하게 말하자면 파일을 찾을 때 inode에 접근하여 데이터 블록에 접근한다.
문제 1) block size = 8192 바이트, block pointer 크기 4바이트 라면 이 간접 블록 포인터가 표현할 수 있는 최대 파일 크기는?
- 블록 크기는 8192byte다. 간전 블록 포인터의 크기는 4byte다 간전 블록 포인터는 블록 크기가 8192에 몇 개나 존재할 수 있을까? 8192 / 4 인 2048개가 존재한다. 즉 2048개의 블록을 가리킬 수 있다. 다시 말해 총 2048 * 8192byte에 직접 블록 포인터에 있는 8 * 8192byte만큼 표현할 수 있다.
정답은 16,464 KB
- 파일 입출력 구현
fd = open("file", O_RDONLY)
실제 시스템 호출을 이용해 파일 입력 시 발생하는 자료구조이다.
- fd 테이블 : 열린 파일의 엔트리를 가리킨다
- 열린 파일 테이블 : 열린 모든 파일의 목록이다.
- i-node 테이블 : open 된 파일들의 i-node를 저장하는 테이블
fd = open("file", O_RDONLY); // 2번 open한 경우
fd = dup2(3,4);
이렇간 간단하게 파일을 읽었을 때 내부적으로 어떤 일이 일어나는지 알 수 있었고
무엇보다 핵심은 바로 inode라는 점을 알았다.
파일을 읽을 때 단순히 파일을 읽겠지? 하는 부분들이 구체화될 수 있었다.
먼저 파일을 읽으면 fd파일의 3번 인덱스에 접근한다. 왜냐하면 0: 표준 입력 1: 표준 출력 2: 표준 에러로 되어있기 때문에 3에 접근한다. 이후 열린 열린 파일 테이블에 접근하여 파일을 연다. 열린 파일 테이블에서 i-node에 접근하여 파일들을 관리하여 사용한다.
728x90'운영체제 > Unix' 카테고리의 다른 글
[Unix] 파일 상태 정보 (0) 2019.05.08 [Unix] 파일 잠금 함수 : fcntl() (0) 2019.05.08 [Unix] 파일 및 레코드 잠금 (0) 2019.05.08 [Unix] 링크 (0) 2019.05.07 [Unix] 디렉터리 (0) 2019.05.07