파일 시스템(file system)
파일과 디렉터리를 관리하는 운영체제 내의 프로그램. 파일과 디렉터리를 다루어 주는 프로그램.
파일과 디렉터리
: 보조기억장치의 데이터 덩어리.
파일 | 디렉터리 | |
- 보조기억 장치에 저장된 관련 정보의 집합. - 의미 있고 관련 있는 정보를 모은 논리적 단위. >>관련있는 정보를 한데 모아놓은 단위 == 파일. |
- 윈도우에서는 폴더(folder) - 옛날엔 : 1단계 디렉터리 - 요즘엔 : 여러계층으로 파일 및 폴더를 관리하는 트리 구조 디렉터리(가장 최상단에 있는 디렉터리를 루트 디렉터리라 부름(/ 슬래쉬로 표현) ) |
|
파일을 이루는 정보 | 디렉터리 경로 | |
파일을 실행하기 위한 정보 + 부가 정보( = 속성, 메타 데이터) | 디렉터리를 이용해 파일/ 디렉터리의 위치, 나아가 이름까지 특정 지을 수 있는 정보. 절대 경로와 상대 경로. 같은 디렉터리에는 동일한 이름의 파일이 존재할 수 없지만, 서로 다른 디렉터리에는 동일한 이름의 파일이 존재할 수 있음. |
|
파일의 속성 정보 | 경로의 종류 | |
속성 이름 | 의미 | 절대 경로 : 루트 디렉터리에서 자기 자신까지 이르는 고유한 경로(e.g.> /home/nomatter-me/a.cpp) >> 루트 디렉터리 부터 시작하는 경로. |
유형 | 운영체제가 인지하는 파일의 종류. 확장자로서 특정 지을 수 있음.(cpp,xml등) |
상대 경로: 현재 디렉터리에서 자기 자신까지 이르는 경로 (e.g> 현재 디렉터리 경로가 /home일 경우 guest/d.jpg) >> 현재 디렉터리부터 시작하는 경로. |
크기 | 파일의 현재 크기와 허용 가능한 최대 크기. | 디렉터리 연산을 위한 시스템 호출 |
보호 | 어떤 사용자가 해당 파일을 읽고, 쓰고, 실행할 수 있는 지를 나타냄. | 1. 디렉터리 생성 2. 디렉터리 삭제 3. 디렉터리 열기 4. 디렉터리 닫기 5. 디렉터리 읽기 등 |
생성 날짜 | 파일이 생성된 날짜. | 사실, 많은 운영체제에서는 디렉터리를 그저 "특별한 형태의 파일"로 간주한다! 즉, 디렉터리는 그저 "포함된 정보가 조금 특별한 파일". -------------------------------------------------------------------------------- 파일의 내부에는 파일과 관련된 정보들이 있다면, 디렉터리의 내부에는 해당 디렉터리에 담겨있는 대상과 관련된 정보들이 담겨있다. >> 이 정보는 보통 테이블(표) 형태로 구성. |
마지막 접근 날짜 | 파일에 마지막으로 접근한 날짜. | |
마지막 수정 날짜 | 파일이 마지막으로 수정된 날짜. | |
생성자 | 파일을 생성한 사용자. | |
소유자 | 파일을 소유한 사용자. | |
위치 | 파일의 보조기억장치상의 현재 위치. | |
파일 연산을 위한 시스템 호출 | 디렉터리 엔트리 | |
1. 파일 생성 2. 파일 삭제 3. 파일 열기 4. 파일 닫기 5. 파일 읽기 6. 파일 쓰기 등 |
각 엔트리(행)에 담기는 정보 - 디렉터리에 포함된 대상의 이름, 그 대상이 보조기억장치 내에 저장된 위치(를 유추할 수 있는 정보), 가끔 파일 속성을 명시하는 경우도 있음. |
파일 시스템이 파일과 디렉터리를 보조기억장치에 할당하고 접근하는 방법과
대표적인 파일 시스템의 종류(FAT 파일시스템, 유닉스 파일시스템) 대해 공부해 보자.
파티셔닝과 포매팅
- 파티셔닝과 포매팅을 해야지 파일시스템을 통해 파일과 디렉터리에 접근 가능
파티셔닝 | 포매팅 |
- 저장 장치의 논리적인 영역을 구획하는 작업. 이 떄 구획된 각각의 구역을 파티션이라 함. |
- 파일 시스템을 설정. (파일 시스템은 포매팅할 때 결정 됨.) - 어떤 방식으로 파일을 관리할 지 결정, 새로운 데이터를 쓸 준비를 하는 작업 |
- 파일 시스템에는 여러 종류가 있고, 파티션마다 다른 파일 시스템을 설정할 수도 있다. 포매팅까지 완료하여 파일 시스템을 설정했다면 이제 파일과 디렉터리 생성이 가능해진다. |
< 파일 할당 방법 >
- 포매팅까지 끝난 하드 디스크에 파일을 저장하기.
- 운영체제는 파일/ 디렉터리를 블록 단위로 읽고 쓴다.
>> 즉, 하나의 파일이 보조기억장치에 저장될 때에는 여러 블록에 걸쳐 저장된다. (하드 디스크의 가장 작은 저장 단위는 섹터이지만 보통 블록 단위로 읽고 쓴다.)
- 파일을 보조기억장치에 할당하는 두 가지 방법 : 연속 할당, 불연속 할당(오늘날 사용되는 방식)
연속 할당 | 불연속 할당 | |
: 이름 그대로 보조기억장치 내 연속적인 블록에 파일 할당. > 파일이 저장 장치 내에서 연속적인 공간을 차지하도록 블록을 할당하는 방법. |
연결 할당 : 각 블록의 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당.(더이상 불러들일 주소가 없을 경우 다음 블록의 주소에 -1 삽입) >>파일을 이루는 데이터 블록을 연결 리스트로 관리. >>불연속 할당의 일종 : 파일이 여러 블록에 흩어져 저장되어도 무방. 디렉터리 엔트리 : 파일 이름 & 첫번째 블록 주소 & 블록 단위의 길이 |
색인 할당 : 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식. >> 파일내 임의의 위치에 접근하기 용이 디렉터리 엔트리 : 파일 이름 & 색인 블록 주소 |
연속된 파일에 접근하기 위해 파일의 첫 번째 블록 주소와 블록 단위의 길이만 알면 된다. 디렉터리 엔트리 : 파일 이름 & 첫 번째 블록 주소 & 블록 단위 길이 명시. |
||
연속 할당의 부작용 | 연결 할당의 단점 | |
: 구현이 단순하지만 외부 단편화를 야기할 수 있다. ex> 연속할당을 해둔 파일 중 중간 파일들을 삭제했을때 삭제한 파일의 블록수보다 더 큰 파일을 할당 할수 없음. 파일 A의 블록 개수 4개. 파일 B의 블록 개수 5개. 파일 C의 블록 개수 2개. 파일 D의 블록 개수 6개. 파일 E의 블록 개수 3개. 파일 B와 D를 삭제하면 잔여 블록의 개수는 삭제한 파일들의 블록의 개수 11개(5개 + 6개)가 되는데 추가로 넣을 파일 F의 블록 개수가 10개라 하더라도 빈 블록 위치가 다르기때문에 파일을 할당시키지 못함. |
1. 반드시 첫번째 블록부터 하나씩 읽어 들여야 한다. == 파일에 임의의 위치에 접근하는 속도가 느림. 2. 오류 발생 시 해당 블록 이후 블록은 접근이 어렵다. |
FAT 파일 시스템
: 연결 할당 기반 파일 시스템, 연결 할당의 단점을 보완 오늘날 많이 사용하는 파일 시스템
- 각 블록에 포함된 다음 블록 주소를 한데 모아 테이블(FAT; File Allocation Table)로 관리
>> FAT가 메모리에 캐시 될 경우 느린 임의 접근 속도 개선 가능
디렉터리 엔트리 | 파일 이름 & 확장자 & 속성 & 예약 영역 & 생성 시간 & 마지막 접근 시간 & 마지막 수정 시간 & 시작 블록 & 파일 크기 |
유닉스 파일 시스템
: 색인 할당 기반 파일 시스템. 색인 블록 == i-node (파일 속성 정보와 15개의 블록 주소 저장 가능)
- 사실상 i-node가 파일 시스템의 핵심
디렉터리 앤트리 | i-node 번호 & 파일 이름 |
15개 이상의 블록 주소가 있다면? 유닉스 파일 시스템이 큰 파일들을 어떻게 관리하는지 확인해 보자.
1. 블록 주소 중 12개에는 직접 블록 주소 저장. (직접블록 : 파일 데이터가 저장된 블록)
2. 1번으로 충분하지 않다면 13번째 주소에 단일 간접 블록 주소 저장. (단일 간접 블록 : 파일 데이터를 저장한 블록 주소가 저장된 블록)
3. 2번으로 충분하지 않다면 14번째 주소에 이중 간접 블록 주소 저장. (이중 간접 블록 : 단일 간접 블록들의 주소를 저장하는 블록)
4. 3번으로 충분하지 않다면 15번째 주소에 삼중 간접 블록 주소 저장. (삼중 간접 블록 : 이중 간접 블록들의 주소를 저장하는 블록)
>> 이렇게 하면 못 담을 데이터가 없음
'컴퓨터 구조' 카테고리의 다른 글
컴퓨터 구조 ) 페이징의 이점(쓰기 시 복사) + 계층적 페이징, 요구 페이징, 페이지 교체 알고리즘, 스레싱과 프레임 할당까지 공부해보자! (0) | 2024.03.05 |
---|---|
컴퓨터 구조) 가상 메모리 - 연속 메모리 할당에 대해 알아보자. (0) | 2024.03.04 |
컴퓨터 구조 ) 교착상태에 대해 알아보자. (0) | 2024.02.28 |
컴퓨터 구조 ) 프로세스 동기화에 대해 알아보자. ++ 동기화 기법 (0) | 2024.02.27 |
컴퓨터 구조 ) 스레드란 무엇인가? (++ 멀티스레드 vs 멀티프로세스) (0) | 2024.02.26 |