본 글은 책 "혼자 공부하는 컴퓨터 구조+운영체제" 의 Chapter 15. 파일시스템 부분을 읽고 정리한 내용입니다.
파일
- 하드 디스크나 SSD 같은 보조기억장치에 저장된 관련 정보의 집합, 관련있는 정보를 모은 논리적 단위
파일을 이루는 정보
- 이름
- 파일을 실행하기 위한 정보
- 파일 관련 부가 정보 (속성, 메타데이터)
- 파일 형식, 위치, 크기 등
파일 속성과 유형
속성 이름 | 의미 |
유형 | 운영체제가 인지하는 파일의 종류 (텍스트, 실행, 음성) |
크기 | 현재크기 & 허용 가능한 최대 크기 |
보호 | 어떤 사용자가 파일을 읽고/쓰고/실행할 수 있는지 |
생성 날짜 | ... |
마지막 접근 날짜 | |
마지막 수정 날짜 | |
생성자 | |
소유자 | |
위치 |
* 속성 이름 자체가 의미를 담고 있는 내용인 경우는 생략
파일 유형
- 확장자를 이용해 유형을 나타냄
파일 연산을 위한 시스템 호출
- 파일을 다루는 모든 작업은 운영체제에 의해 이뤄지고 응용프로그램은 파일을 조작할 수 없음
파일 연산을 위한 시스템 호출
- 생성, 삭제, 열기, 닫기, 읽기 ,쓰기
디렉토리
- 파일들을 정리하기 위해 사용되고 윈도우에서는 폴더라고 부름
옛 운영체제에서는 하나의 디렉토리만 존재했음 (single-level directory)
이후, 여러 계층을 가진 tree-structured directory가 생겨남
절대 경로와 상대 경로
- 절대 경로: 루트 디렉토리에서 자기 자신까지 이르는 고유한 경로
- /home/minchul/a.sh
- 상대 경로: 현재 디렉토리부터 시작하는 경로
- 현재 디렉토리 경로가 /home이라면 a.sh의 상대 경로는 minchul/a.sh
디렉토리 연산을 위한 시스템 호출
- 디렉토리 생성, 삭제, 열기, 닫기, 읽기
디렉토리 엔트리
- 많은 운영체제에서 디렉토리를 그저 ‘특별한 형태의 파일’로 간주
- 디렉토리는 보조기억장치에 테이블 형태의 정보로 저장되는데 각각의 행을 디렉토리 엔트리라고 함
파일 이름 | 위치를 유추할 수 있는 정보 |
파일 시스템에 따라 디렉터리 엔트리에 파일 속성을 명시하는 경우도 있음
파일 이름 | 위치를 유추할 수 있는 정보 | 생성 시간 | 수정된 시간 | 크기 |
예시
home 디렉토리는 대략 다음과 같이 구성됨
파일 이름 | 위치를 유추할 수 있는 정보 |
.. (상위 디렉토리) | |
. (현재 작업 디렉토리) | |
minchul | |
guest |
minchul 디렉토리 엔트리에는 디렉토리에 포함된 파일들의 이름(a.sh, b.c, c.tar)과 이들의 위치를 알 수 있는 정보들이 포함되어있음
파일 시스템
- 파일과 디렉토리를 보조기억장치에 일목요연하게 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램
파티셔닝과 포매팅
- 보조기억장치를 사용하려면 파티션을 나누는 작업과 포맷 작업을 거쳐야 함
- 파티셔닝: 저장 장치의 논리적인 영역을 구획하는 작업 (일종의 칸막이로 영역을 나누는 작업)
- 파티션: 파티셔닝 작업으로 나눠진 영역 하나하나
- 포매팅: 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고 새로운 데이터를 쓸 준비를 하는 작업
- 포매팅 할 때 파일 시스템이 결정됨
- 파일 시스템은 여러 종류가 있고 파티션마다 다른 파일 시스템을 설정할 수도 있음
파일 할당 방법
- 운영체제는 파일과 디렉토리를 블록(block) 단위로 읽고 씀
- 하나의 파일이 보조기억장치에 저장될 떄 하나 이상의 블록에 걸쳐 저장됨
- 하드 디스크의 가장 작은 저장단위는 섹터지만 운영체제는 하나 이상의 섹터를 블록이라는 단위로 묶어 관리
- 하드 디스크내에 여러 블록이 있음
파일을 보조기억장치에 할당하는 방법
- 연속 할당
- 불연속 할당
- 연결 할당
- 색인 할당
연속 할당(contiguous allocation)
- 가장 단순한 방식
- 블록을 3, 2, 5개 차지하는 정도의 크기를 가진 파일 a, b, c가 있다면 아래처럼 할당
- 연속으로 할당된 파일에 접근하기 위해서는 파일의 첫번째 블록 주소와 블록 단위의 길이만 알면됨
- 연속 할당을 사용하는 파일 시스템에서는 디렉토리에 엔트리에 파일 이름과 더불어 첫번째 블록 주소와 블록 단위의 길이를 명시
장점
- 구현이 단순
단점
- 외부 단편화를 야기할 수 있음
단점 예시
위의 사진과 같이 파일이 연속할당방식으로 저장된 상황에서 파일 D, F가 삭제 된다면?
- 블록은 총 11개가 남지만, 크기가 블록 7개 이상을 사용하는 파일은 할당될 수 없음
연결 할당(linked allocation)
- 불연속 할당의 종류
- 파일을 이루는 데이터를 linked list로 관리
- 4개의 블록으로 구성된 a라는 파일이 있다고 할 때
- 10→5→13→2 순으로 블록이 연결되어 있고 2번 블록에는 다음 블록이 없다는 특별한 표시자(-1)를 기록
- 디렉토리 엔트리에는 파일 이름과 함께 첫번째 블록 주소와 블록 단위의 길이를 명시
단점
1. 반드시 첫번째 블록부터 하나씩 차례대로 읽어야 함
- 파일 내 임의의 위치에 접근하는 속도(random access 속도)가 매우 느려 성능면에서 비효율적
2. 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근할 수 없음
- 하나의 블록 안에 파일 데이터와 다음 블록 주소가 모두 포함되어 있다보니, 파일을 이루는 블록에 하나라도 문제가 발생하면 이후 블록에 접근할 수 없음
색인 할당(indexed allocation)
- 파일의 모든 블록 주소를 색인 블록(index block)이라는 하나의 블록에 모아 관리하는 방식
- 파일 a의 색인 블록은 4번 블록
- 파일의 데이터는 7, 13, 11 블록이 저장되어 있다고 가정
- 파일 a에 순차적으로 접근하고 싶다면 생인 블록에 저장된 주소로 차례대로 접근하면 됨
- 임의의 위치에 접근하고 싶다면 색인 블록의 i번째 항목이 가리키는 블록에 접근하면 됨
- 디렉토리 엔트리에는 파일 이름과 색인 블록 주소를 명시
색인 할당을 기반으로 만든 파일 시스템이 유닉스 파일 시스템
파일 시스템 살펴보기
대표적인 파일 시스템 2가지
- FAT 파일 시스템: USB, SD 카드등의 저용량 저장 장치에 사용됨
- 유닉스 파일 시스템:유닉스 계열 OS에 사용됨
FAT 파일 시스템 (File Allocation Table)
- 연결 할당 기반 파일 시스템의 단점을 보완
- 단점의 근본적인 원인은 블록 안에 다음 블록의 주소를 저장했기 때문
각 블록에 포함된 다음 블록의 주소들을 한데 모아 테이블 형태로 관리하면? 파일 할당 테이블(FAT)!
- 파일의 첫번째 블록 주소(4번블록)만 알면 4→8→3→5 순으로 파일의 데이터가 담긴 모든 블록에 접근할 수 있음
- 이렇게 FAT을 이용하는 파일 시스템이 바로 FAT 파일 시스템
- MS-DOS에서 사용되었고 최근까지 저용량 저장 장치용 파일 시스템으로 많이 사용됨
- 버전에 따라 FAT12, 16, 32가 있으며 숫자는 블록을 표현하는 비트수를 의미
FAT(FAT12) 파일 시스템을 사용하는 파티션 도식도
- FAT 영역: FAT가 저장되고 파티션의 앞부분에 만들어짐
- 루트 디렉토리 영역: 루트 디렉토리가 저장되는 영역
- 데이터 영역: 서브 디렉토리와 파일들을 위한 영역
FAT가 메모리에 캐시될 경우 느린 임의 접근 속도도 개선 가능
FAT파일 시스템의 디렉토리 엔트리
- 속성은 읽기전용/숨김 파일/시스템 파일/ 일반 파일/ 디렉토리 등을 식별하기 위한 항목
아래 디렉토리 구조를 이루는 FAT 파일 시스템에서 /home/minchul/a.sh 파일을 읽는 과정
/home/minchul/a.sh 에 접근하는 과정
- 루트 디렉토리에서 home 디렉토리는 몇번 블록에 있는지 살펴봄 → 3번 블록
- 3번 블록을 읽어 home 디렉토리 내용을 살펴보고 minchul 디렉토리가 몇번 블록에 있는지 살펴봄 → 15번
- 15번 블록을 읽어 a.sh 파일의 첫번째 블록 주소를 확인 → 9번
- FAT을 통해 9→8→11→13 블록 순서로 a.sh 파일 내용에 접근 가능
유닉스 파일 시스템
- 색인 할당 기반의 파일 시스템
- 색인 블록 == i-node
- 파일의 속성 정보와 15개의 블록 주소가 저장될 수 있음
- 파일마다 i-node를 가지고 있고 i-node 마다 고유한 번호가 부여되어있음
- 파티션 내에 i-node 영역에 i-node들이 있고 데이터 영역에 디렉토리와 파일들이 있음
문제: i-node의 크기는 유한한데 블록을 20개, 30개, 그 이상 차지하는 파일은?
첫째, 블록 주소 중 12개에는 직접 블록 주소를 저장
- i-node가 가리킬 수 있는 열다섯 개의 블록 주소 중 처음 12개에는 파일 데이터가 저장된 블록 주소를 직접 명시
- direct block: 파일 데이터가 저장된 블록
둘째, ‘첫째’ 내용으로 충분하지 않다면 13번째 주소에 단일 간접 블록 주소를 저장
- 단일 간접 블록(single indirect block): 파일 데이터가 저장된 블록 주소가 아닌 파일 데이터를 저장한 블록 주소가 저장된 블록을 의미
셋째, ‘둘째’ 내용으로 충분하지 않다면 14번째 주소에 이중 간접 블록 주소를 저장
- 이중 간접 블록(double indirect block): 데이터 블록 주소를 저장하는 블록 주소가 저장된 블록
넷째, ‘셋째’ 내용으로 충분하지 않다면 열다섯 번째 주소에 삼중 간접 블록 주소를 저장
unix 파일 시스템의 디렉토리 엔트리도 파일 이름과 i-node 번호로 구성됨
예시
- 유닉스 파일 시스템에서 /home/minchul/a.sh 파일을 읽는 과정
- 루트 디렉토리 위치는 루트 디렉토리의 i-node를 통해 확인
- 유닉스 파일 시스템은 루트 디렉토리의 i-node를 항상 기억하고 있음
- 2번 i-node가 루트 디렉토리의 i-node라고 가정
- i-node 2를 통해 루트 디렉토리 위치 파악 → 1번 블록
- 1번 블록을 읽으면 루트 디렉토리 내용을 알 수 있음 → home 디렉토리의 i-node 번호는 3
- i-node 3에 접근하여 home의 디렉토리 위치 파악 →210번 블록
- 210번 블록을 읽으면 home 디렉토리 내용을 알 수 있음 → minchul의 i-node 번호는 8
- i-node 8에 접근하면 minchul 폴더의 위치 파악 → 121번 블록
- 121번 블록을 읽으면 minchul 디렉토리 내용을 알 수 있음 → a.sh 파일의 i-node 번호는 9번
- i-node 9에는 98, 12, 13 블록이 있음
⇒ 결론적으로 a.sh 파일을 읽기 위해 98→12→13 블록에 접근하면 됨, i-node를 통해 위치 정보를 알고, 블록을 통해 내용을 알 수 있음
'OS' 카테고리의 다른 글
블로킹/논블로킹 (0) | 2024.08.10 |
---|---|
동기/비동기 (0) | 2024.08.10 |
가상 메모리(Virtual memory) (0) | 2024.07.28 |
교착상태(Deadlock) (0) | 2024.07.19 |
프로세스 동기화 (0) | 2024.07.19 |