파일 시스템
파일과 디렉터리를 보조기억장치에 할당하고 접근 할 수 있게 하는 운영체제 내부 프로그램이다. 이러한 피일 시스템은 다양한 종류가 있고 하나의 컴퓨터에서 여러 파일 시스템을 사용할 수 있다.
파티셔닝과 포매팅
만약 막 공장에서 생산되어 한 번도 사용된 적이 없는 새 하드 디스크 또는 SSD가 있다고 가정해보자 이 보조 기억장치는 파티셔닝, 포매팅을 하기 전까지는 사용할 수 없다.
파티셔닝(Partitioning)
저장 장치의 논리적인 영역을 구획하는 작업이다. 파티셔닝 작업을 통해 나누어진 영역 하나하나를 파티션이라고 한다.
포매팅(Formatting)
파일 시스템을 설정하여 어떤 방식으로 파일을 관리할지 결정하고 새로운 데이터를 쓸 준비를 하는 작업을 의미한다. 즉 어떤 종류의 파일 시스템을 사용할지 바로 이때 결정난다.
파일 시스템에는 여러 종류가 있고 파티션마다 다른 파일 시스템을 설정할 수 있다.
포매팅까지 완료하여 파일 시스템을 설정했다면 이제 파일과 디렉터리 생성이 가능해진다.
파일 할당 방법
포매팅까지 끝난 하드 디스크에 파일을 저장하는 경우 운영체제는 파일과 디렉터리를 블록(Block)단위로 읽고 쓴다. 즉 하나의 파일이 보조기억장치에 저장될 때에는 여러 블록에 걸쳐 저장된다. 이 파일을 보조기억 장치에 할당하는 방법에는 크게 두 가지가 있다. 연속 할당과 불연속 할당이다.
연속 할당(Contiguous Allocation)
보조 기억 장치 내 연속적인 블록에 파일을 할당하는 방식이다. 연속으로 할당된 파일에 접근하기 위해서는 파일의 첫 번째 블록 주소와 블록 단위의 길이만 알면된다. 그러므로 첫 번째 블록 주소와 블록 단위의 길이를 명시한다.
외부 단편화
아래 사진과 같이 잔여 블록이 11개인데 블록이 7개 이상 사용하는 파일을 할당할 수 없다. 이 상황이 외부 단편화이다.
불연속 할당
01 연결 할당
각 블록의 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당한다. 파일을 이루는 데이터 블록을 연결 리스트로 관리하고 불연속 할당의 일종이므로 파일이 여러 블록에 흩어져 저장되어도 무방하다.
디렉터리 엔트리에는 파일 이름, 첫 번째 블록 주소, 블록 단위의 길이를 기록한다.
단점
1) 반드시 첫 번째 블록부터 하나씩 차례대로 읽어야 한다.
파일의 중간 부분부터 접근하고 싶어도 반드시 파일의 첫 번째 블록부터 접근하여 하나씩 차례대로 읽어야 한다는 점이다. 이는 파일 내 임의의 위치에 접근하는 속도 즉 임의 접근(Access Random) 속도가 매우 느리다.
2) 하드웨어 고장이나 오류발생 시 해당 블록 이후 블록은 접근할 수 없다.
하나의 블록 안에 파일 데이터와 다음 블록 주소가 모두 포함되어 있다 보니 하드웨어 고장이나 오류로 인해 파일을 이루는 블록에 하나라도 문제가 발생하면 이후의 블록에 접근할 수 없게 된다.
02 색인 할당
파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식이다. 파일 내 임의의 위치에 접근하기가 용이하다.
디렉터리 엔트리에는 파일 이름과 색인 블록 주소를 기록한다.
FAT파일 시스템
연결 할당의 단점을 보완한 파일 시스템이다. 연결 할당 방식의 단점의 근복적인 원인은 블록 안에 다음 블록의 주소를 저장하였기 때문이다.
하지만 각 블록에 포함된 당므 블록의 주소들을 한데 모아 테이블 형태로 관리하면 앞서 언급한 단점들을 상당 부분 해소할 수 있다. 이러한 테이블을 파일 할당 테이블(FAT, File Allocation Table)이라고 부른다. FAT가 메모리에 캐시될 경우 느린 임의 접근 속도 개선도 가능하다.
FAT파일 시스템에서 FAT는 파티션의 앞부분에 만들어진다. 아래 그림은 FAT(FAT12)파일 시스템을 사용하는 파티션을 간략화한 도식도이다.
디렉터리 엔트리
속성(File Attribute)항목은 해당 파일이 읽기 전용 파일인지, 시스템 파일인지, 일반 파일인지 등을 식별하기 위한 항목이다.
/home/michul/a.sh을 읽는 과정
디렉터리는 하나의 블록에 저장된다고 가정하며 FAT상에서 더 이상의 블록이 없음을 표시하기 위한 표시자로 -1을 사용하였다.
9 - 8 - 11 - 13 순으로 접근하게 된다.
유닉스 파일 시스템
색일 할당 기반 파일 시스템이다. 색인 할당은 색인 블록을 기반으로 파일의 데이터 블록들을 찾는 방식인데 유닉스 파일시스템에서는 이 색인 블록을 i-node(index node)라고 부른다.
i-node에는 파일 속성 정보와 열다섯 개의 블록 주소가 저장될 수 있다. 유닉스 파일 시스템에서 파일 속성 정보는 i-node에 표현된다.
유닉스 파일 시스템에는 파일마다 이러한 i-node가 있고 i-node마다 번호가 부여되어 있다. 그리고 i-node들은 다음과 같이 파티션 내 특정 영역에 모여 있다. i-node 영역에 i-node들이 있고 데이터 영역에는 디렉터리와 파일이 있다.
문제 발생!
i-node의 크기(15개)가 유한한데 20갸,30개 이상 차지하는 큰 파일은 어떻게 처리하지?
01 블록 주소 중 열두 개에는 직접 블록 주소를 저장한다.
i-node가 가리킬 수 있는 열다섯 개의 블록 주소 중 열두 개에는 파일 데이터가 저장된 블록 주소가 직접적으로 명시된다. 파일 데이터가 저장된 블록을 직접 블록(Direct Block)이라 한다. 즉 i-node의 열두 개 주소는 직접 블록 주소를 저장한다.
02 1번으로 충복하지 않다면 13번째 주소에 단일 간접 블록 주소를 저장한다.
열세 번째 블록 주소는 단일 간접 블록의 주소를 저장한다. 단일 간접 블록(Single Indirect Block)은 파일 데이터가 저장된 블록이 아닌 파일 데이터를 저장한 블록 주소가 저장된 블록을 의미한다.
03 2번으로도 충분하지 않다면 열네 번째 주소에 이중 간접 블록 주소를 저장한다.
열네 번째 블록 주소는 이중 간접 블록 주소를 저장한다. 이중 간접 블록(Double Indirect Blocks)은 데이터 블록 주소를 저장하는 블록 주소가 저장된 블록을 의미한다. 즉 단일 간접 블록들의 주소를 저장하는 블록이 이중 간접 블록이다.
04 3번으로 충분하지 않다면 열다섯 번째 주소에 삼중 간접 블록 주소를 지정한다.
열다섯 번째 블록 주소는 삼중 간접 블록주소를 지정한다. 삼중 간접 블록(Triple Indirect Block)은 이중 간접 블록 주소가 저장된 블록이다. 삼중 간접 블록까지 이용하면 웬만한 크기의 파일은 모두 표현할 수 있다.
디렉터리 엔트리
파일이름과 i-node번호로 이루어져있다.
/home/michul/a.sh을 읽는 과정
파일에 접근하기 위해 파일 시스템은 우선 루트 디렉터리 위치 부터 찾아야 한다. 루트 디렉터리의 위치는 루트 디렉터리의 i-node를 보면 알 수 있다. 유닉스 파일 시스템은 루트 디렉터리의 i-node를 항상 기억하고 있다.
1) 2번 i-node접근 루트 디렉터리는 1번 블록에 존재
2) 1번 블록을 읽어서 루트 디렉터리 내용 확인, home 디렉터리의 i-node는 3번
3) 3번 i-node에 접근하여 home 디렉터리 위치 파악, 210번 블록에 존재
4) 210번 블록을 읽어서 home 디렉터리 내용 확인, minchul 디렉터리의 i-node는 8번
5) 8번 i-node에 접근하여 mincul 디렉터리의 위치 파악, 121번 블록에 존재
6) 121번 블록을 읽어서 minchul 디렉터리 내용 확인, a.sh의 i-node 번호는 9번
7) 9번 i-node에 접근하여 파일 a.sh위치를 파악한다. a.sh파일은 98,12,13번 블록에 위치한다.
8) /home/michul/a.sh을 읽기위해 파일 시스템은 98번 12번 13번 블록에 접근하면 된다.
참고 : 본 내용은개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제강의를 수강하여 작성하였습니다. https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard
'책 > 혼공 컴퓨터구조+운영체제' 카테고리의 다른 글
운영체제 - 파일과 디렉터리(파일,확장자,속성,디렉터리,경로,절대경로,상대경로) (0) | 2024.03.07 |
---|---|
운영체제 - 가상메모리, 페이징, 페이지 테이블, PTBR, TLB (0) | 2024.02.26 |
운영체제 - 연속 메모리 할당(스와핑, 최초 적합, 최적 접합, 최악 접합, 외부단편화) (2) | 2024.02.26 |
운영체제 - 교착 상태 해결 방법(예방, 회피, 검출 후 회복) (0) | 2024.02.15 |
운영체제 - 교착 상태(식사하는 철학자 문제,자원할당 그래프, 교착 상태 발생 조건) (0) | 2024.02.15 |
댓글