Logical view of storage unit
✅ 정의
✅ Operation
연산자는 모두 시스템 콜이다!
✅ File Information
✔️ File pointer : 프로세스가 파일을 읽거나, 쓸 때 시스템은 마지막으로 읽거나 쓴 위치에서부터 다시 검색을 시작
✔️ File-open count : 여러 프로세스가 한 파일을 여러번 읽을 수 있기 때문에 카운트를 트랙킹
✔️ File metadata : 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보를 일컫음
✔️ File control block(FCB) : 파일 정보를 담고 있음
✔️ Directory : 파일의 메타데이터 중 일부를 보관하고 있는 일종의 특별한 파일
운영체제에서 파일을 관리하는 부분
✔️ 파일 및 파일의 메타데이터, 디렉토리 정보 등을 관리함
✅ Fopen() 실행했을 때 실행되는 순서
1. open()을 시스템콜로 리퀘스트 함
2. 디스크에 있던 root의 meta data가 메모리로 올라감
3. root의 주소를 찾아가서 a의 메타데이터에 접근함
4. a의 메타데이터가 메모리에 올라감
5. a의 주소를 찾아가서 b의 메타데이터에 접근함
6. b의 메타데이터가 메모리에 올라감
7. 프로세스가 생성이 됨
8. 디스크 상의 버퍼 캐시(빨간색 상자)에 접근한다
9. 커널 메모리 상의 버퍼 캐시에 접근한다
10. 사용자 메모리 상의 버퍼 캐시에 접근한다.
어떻게 접근? 에 해당하는 부분
파일을 처음부터 순서대로 access함
✔️ 가장 많이 쓰이는 방법임
✔️ File pointer가 current position부터 읽는 것
아무 위치나 내가 원하는 위치에서부터 access함
✔️ 프로그램이 정해진 순서에 따른 것 ❌, 랜덤하게 읽거나 쓸 수 있도록 함.
ex) 데이터베이스 시스템
✔️ Relative (logical) block number 을 사용해서 구현
어떻게 할당? 에 해당하는 부분
🚀 목적 : 디스크 공간의 낭비 ❌ 빠르게 파일에 접근하고자 함
하나의 파일이 디스크에 연속으로 저장되는 방법
나누어진 각 블럭들이 연속된 번호를 부여받아 저장이 됨
✔️ 장점 :
✔️ 단점 :
compaction
을 해줘야 함 (남은 free space를 하나의 continuous space로 합쳐주는 것) = 너무 별로하나의 파일이 디스크 블럭의 링크드 리스트 형식으로 구성되어 있음
✔️ 장점 : External Fragmentation ❌
✔️ 단점 :
Disk Access가 너무 많이 일어남
➡️ 무조건 처음부터 시작해야 하기 때문에 Linked Allocation의 문제점들을 해결하기 위한 것
링크되어 있는 관계들(포인터)을 테이블로 메타데이터에 저장해둔 것
블럭 하나를 잡아서 포인터(인덱스)만 모아놓은 것
디렉토리에는 인덱스값을 가지고 있는 블럭 하나만 저장한다
✔️ 인덱스 블럭 :
디스크 블럭의 주소를 가지고 있는 어레이임
✔️ FAT와의 차이점
✔️ 장점 :
✔️ 단점 :
✅ Contiguous Allocation 의 경우
디스크 블럭에 access 하는 데 딱 한번의 access가 필요함
Space efficiency가 좀 안좋을 뿐 Sequential, Direct access에 모두 좋음
✅ Linked Allocation 의 경우
Direct access ❌
✅ Indexed Allocation 의 경우
Sequential, Direct access에 모두 좋음 ➡️ 데이터가 커질 경우 여러가지 방안 마련 가능
처음에는 Contiguous allocation을 사용하다가 파일의 사이즈가 커지면 Indexed allocation을 쓰는 것이 좋다