ultra_dev
파일과 디렉토리 본문
파일 시스템
: 파일과 디렉토리를 관리하는 운영체제 내부의 프로그램
파일과 디렉토리를 다루어 주는 프로그램
파일과 디렉토리
: 보조기억장치의 데이터 덩어리
파일
- 보조기억장치에 저장된 관련 정보의 집합
- 의미 있고 관련 있는 정보를 모은 정보
- 파일을 이루는 정보
- 파일을 실행하기 위한 정보 + 부가 정보(=속성, 메타데이터)
파일의 속성
- 유형 : 운영체제가 인지하는 파일의 종류
- 확장자
- 실행 파일 : 없는 경우, exe, com, bin
- 목적 파일 : obj, o
- 소스 코드 파일 : c, cpp, cc, java, asm, py
- 워드 프로세서 파일 : xml, rtf, doc, docx
- 라이브러리 파일 : lib, a, so, dll
- 멀티미디어 파일 : mpeg, mov, mp3, mp4, avi
- 백업 / 보관 파일 : rar, zip, tar
- 확장자
- 크기 : 파일의 현재 크기와 허용 가능한 최대 크기를 나타낸다.
- 보호 : 어떤 사용자가 해당 파일을 읽고, 쓰고, 실행할 수 있는지를 난타낸다.
- 생성 날짜 : 파일이 생성된 날짜를 나타낸다.
- 마지막 접근 날짜 : 파일에 마지막으로 접근한 날짜를 나타낸다.
- 마지막 수정 날짜 : 파일이 마지막으로 수정된 날짜를 나타낸다.
- 생성자 : 파일을 생성한 사용자를 나타낸다.
- 소유자 : 파일을 소유한 사용자를 나타낸다.
- 위치 : 파일의 보조기억장치상의 현재 위치를 나타낸다.
파일 연산을 위한 시스템 호출
:파일을 다루는 모든 작업은 운영체제를 통해 이루어진다.
어떤 응용프로그램도 임의로 파일에 접근하고 조작할 수 없다.
오직 시스템 호출을 통해 운영체제한테 부탁하는 수 밖에 없다.
- 파일 생성
- 파일 삭제
- 파일 열기
- 파일 닫기
- 파일 읽기
- 파일 쓰기 등등
디렉토리
- 윈도우에서는 폴더(folder) 의미
- 최상위 디렉토리(루트 디렉토리, /), 서브 디렉토리
- 윈도우 운영체제에서 최상위 디렉토리는 C:\
- 같은 디렉토리에는 동일한 이름의 파일이 존재할 수 없지만, 서로 다른 디렉토리에는 동일한 이름의 파일 존재 가능
- 경로
- 디렉토리를 이용해서 파일/디렉토리의 위치, 나아가 이름까지 특정 지을 수 있는 정보
- 절대 경로와 상대 경로
- 절대 경로 : 루트 디렉토리에서 자기 자신까지 이르는 고유한 경로
- ex) /home/minchul/a.sh
- 상대 경로 : 현재 디렉토리에서 자기 자신까지 이르는 경로
- ex) 현재 디렉토리 경로가 /home일 경우 guest/d.jpg
- 절대 경로 : 루트 디렉토리에서 자기 자신까지 이르는 고유한 경로
디렉토리 연산을 위한 시스템 호출
:파일과 만찬가지로 디렉토리를 다루는 모든 작업은 운영체제를 통해 이루어진다.
어떤 응용프로그램도 임의로 디렉토리에 접근하고 조작할 수 없다.
오직 시스템 호출을 통해 운영체제한테 부탁하는 수 밖에 없다.
- 디렉토리 생성
- 디렉토리 삭제
- 디렉토리 열기
- 디렉토리 닫기
- 디렉토리 읽기 등등
많은 운영체제에서는 디렉토리를 그저 ‘특별한 형태의 파일’로 간주한다!!
디렉토리를 그냥 포함된 정보가 좀 더 특별한 파일로 취급한다!!
파일의 내부에는 파일과 관련된 정보들이 담겨 있다면,
디렉토리 내부에는 해당 디렉토리에 담겨 있는 대상과 관련된 정보들이 담겨 있다.
→ 이 정보는 보통 테이블(표) 형태로 구성된다.
디렉토리 엔트리
- 각 엔트리(행)에 담기는 정보
- 디렉토리에 포함된 대상의 이름
- 그 대상이 보조기억 장치 내에 저장된 위치(를 유추할 수 있는 정보)
- 디렉토리 엔트리 내에 파일 속성 명시하는 경우도 존재
파일 이름 | 위치를 유추할 수 있는 정보 |
---|---|
..(상위 디렉토리) | |
.(현재 디렉토리) | |
a(디렉토리) | |
b.exe(파일) |
파일 시스템
파일과 디렉토리를 보조기억 장치에 일목요연하게 저장하고 접근할 수 있게 해주는 운영체제 내부의 프로그램
파일 시스템을 통해서 여러가지 파일과 디렉토리를 보조기억장치에 할당하고 접근할 수 있는 것!
하나의 컴퓨터에서 여러개의 파일 시스템 사용 가능
(대표적 파일 시스템 : FAT 파일시스템, 유닉스 파일 시스템)
파티셔닝과 포메팅
- 이제 막 공장에서 생산된 새 하드 디스크와 SSD가 있다면
- 파티셔닝, 포메팅 하기 전까지는 사용할 수 없다!!
파티셔닝
- 저장 장치의 논리적인 영역을 구획하는 작업
- 나누어진 영역 하나하나를 파티션이라고 부름
포메팅
- 파일 시스템을 설정
- 어떤 방식으로 파일을 관리할지 결정, 새로운 데이터를 쓸 준비하는 작업
- 파일 시스템에는 여러 종류가 있고, 파티션마다 다른 파일 시스템을 설정할 수도 있다.
- 포메팅까지 완료해서 파일 시스템을 설정 했다면, 이제 파일과 디렉토리 생성이 가능해진다.
파일 할당 방법
- 포매팅까지 끝난 하드 디스크에 파일 저장하기
- 운영체제는 파일 / 디렉토리를 블록 단위로 읽고 쓴다.
- 즉, 하나의 파일이 보조기억장치에 저장될 때에는 여러 블록에 걸쳐 저장된다.
- 참고) 하드 디스크의 가장 작은 저장 단위는 섹터이지만 보통 블록 단위로 읽고 쓴다.
파일을 보조기억장치에 할당하는 두 가지 방법 : 연속 할당, 불연속 할당(오늘날 사용되는 방식)
- 연속 할당
- 이름 그대로 보조기억장치 내 연속적인 블록에 파일 할당
- 연속된 파일에 접근하기 위해 파일의 첫 번째 블록 주소와 블록 단위의 길이만 알면 된다
- 디렉토리 엔트리 : 파일이름 & 첫 번째 블록 주소 & 블록 단위 길이 명시
- 문제점 :
- 구현이 단순하지만 외부 단편화 야기할 수 있음 (따라서 현재 잘 안씀)
- 중간에 파일 삭제하면 그 빈공간에 해당 블록보다 큰 파일을 할당 못하게 되니까!
- 불연속 할당
- 연결 할당, 색인할당이 존재
- 불연속 할당 - 연결 할당
- 각 블록의 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당
- 파일을 이루는 데이터 블록을 연결 리스트로 관리
- 마지막 블록에는 -1과 같은 특별한 표식 기록 해놓는 것
- 불연속 할당의 일종 : 파일이 여러 블록에 흩어져 저장되어도 무방
- 디렉토리 엔트리 : 파일이름 & 첫번째 블록 주소 & 블록 단위의 길이
- 단점 :
- 반드시 파일의 첫 번째 블록부터 접근해서 하나씩 읽어 들여야한다
- 즉, 파일의 임의의 위치에 접근하는 속도가 매우 느리다
- 불연속할당 - 색인 할당
- 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식
- ex) 4번 색인 블록안에는 a 파일 블록인 7,13,21이 기록되어 있음, 12번 색인 블록 안에는 b 파일 블록인 1,5,6이 기록되어 있음
- 파일 내 임의의 위치에 접근하기 용이
- 디렉토리 엔트리 : 파일 이름 & 색인 블록 주소
FAT 파일 시스템
- 연결 할당 기반 파일 시스템
- 연결 할당의 단점을 보완
- 각 블록에 포함된 다음 블록 주소를 한데 모아 테이블(FAT : File Allocation Table)로 관리
- FAT를 활용하는 파일 시스템
- 만약 FAT가 보조기억장치가 아닌 메모리에 캐시될 경우 느린 임의 접근 속도 개선 가능
- FAT16, FAT32 이런 식의 뒤에 있는 숫자는 블록을 표현 하는 비트 수를 의미
- FAT 사용 시, 파티션 형태 : 예약 영역 | FAT 영역 | 루트 디렉토리 영역 | 데이터 영역
- 루트 디렉토리 영역에 루트 디렉토리 따로 저장하고, 데이터 영역에 서브 디렉토리, 파일 등등
- 디렉토리 엔트리
- 파일의 속성까지 디렉토리 엔트리에 표기하는 것이 FAT 파일 시스템
- 파일이름|확장자|속성|예약영역|생성시간|마지막접근시간|마지막수정시간|시작블록|파일크기
/home/taewoong/a.sh를 읽는다고치면
먼저 루트 디렉토리 영역에서
파일이름 | 첫번째 블록 주소 |
---|---|
home | 3 |
bin | 5 |
c.sh | 2 |
home이 3번 블록에 있으니
데이터 영역의 3번 블록을 읽어서 home디렉토리를 읽으면
파일이름 | 첫번째 블록주소 |
---|---|
b.sh | 15 |
taewoong | 10 |
taewoong 디렉토리가 10번 블록에 있으니
10번 블록으로 가면
파일 이름 | 첫번째 블록 주소 |
---|---|
a.sh | 4 |
e.tar | 20 |
a.sh 파일이 8번 블록에 저장돼있음을 알 수 있음
이제 FAT영역에서 FAT를 보면 됨
블록주소 | 다음 블록주소 |
---|---|
0 | |
1 | -1 |
2 | 23 |
3 | -1 |
4 | 50 |
5 | -1 |
6 | 1 |
이제 또 다음 블록 주소로 가서 쭉쭉 확인해가면서 접근
유닉스 파일 시스템
- 색인 할당 기반 파일 시스템
- 색인 블록 == i-node (색인 블록을 i-node라고도 부름)
- 파일의 속성 정보와 15개의 블록 주소 저장 가능
- 만약 15개 블록 이상을 차지하는 파일은?
- 블록 주소 중 12개에는 직접 블록 주소 저장
- 직접 블록 : 파일 데이터가 저장된 블록
- 1번으로 충분하지 않다면 13번째 주소에 단일 간접 블록 주소 저장
- 단일 간접 블록 : 파일 데이터를 저장한 블록 주소가 저장된 블록
그냥 데이터 주소를 저장한 블록의 주소를 저장한다!
- 단일 간접 블록 : 파일 데이터를 저장한 블록 주소가 저장된 블록
- 2번으로도 충분하지 않다면 14번째 주소에 이중 간접 블록 주소 저장
- 이중 간접 블록 : 단일 간접 블록들의 주소를 저장하는 블록
- 3번으로도 충분하지 않다면 15번째 주소에 삼중 간접 블록 주소 저장
- 삼중 간접 블록 : 이중 간접 블록들의 주소를 저장하는 블록
- 블록 주소 중 12개에는 직접 블록 주소 저장
- 만약 15개 블록 이상을 차지하는 파일은?
- 파일의 속성 정보와 15개의 블록 주소 저장 가능
- 예약영역| i-node 영역| 데이터 영역
- i-node영역에 i-node 관련 정보, 데이터 영역에 각종 디렉토리와 파일 정보
- 디렉토리 엔트리
- i-node 번호 | 파일 이름
만약 유닉스 파일 시스템에서
/home/taewoong/a.sh를 읽는다고치면
유닉스 시스템에선 루트 디렉토리 영역이 따로 없지만
루트 디렉토리가 몇번 노드에 저장돼있는지는 알 수 있음
ex) i-node 2(루트 i-node)
i-node 2 (루트 i-node, 1)
i-node 3 (210)
i-node 10 (121)
i-node 11 (98,12,13)
1번 블록으로 가서 루트 디렉토리 읽음
파일이름 | i-node 번호 |
---|---|
home | 3 |
bin | 5 |
c.sh | 2 |
루트 디렉토리를 가면
home이 i-node 3번에 있으니
가서 home디렉토리를 읽으면
파일이름 | i-node 번호 |
---|---|
b.sh | 7 |
taewoong | 10 |
taewoong 디렉토리가 i-node 10번에 있으니
가보면
파일 이름 | i-node 번호 |
---|---|
a.sh | 11 |
e.tar | 6 |
a.sh 파일이 i-node 11번에 저장돼있음을 알 수 있음
가보면 98,12,13이라고 써있으니 해당 파일 블록 정보를 읽어들이면 됨