파일
소프트웨어 상에서 동작하는 파일은 모두 그렇듯 파일 역시 0, 1로 기록된다.
UltraEdit을 통해 png, pdf, apk 파일을 열어봤다.
2진수 비트보다 보기쉽게 16진수로 변환되어 보인다.
모든 파일은 고유한 포맷을 가지고 있으며 파일 시그니처를 통해 포맷을 기록한다.
파일 시그니처는 파일의 헤더에 기록된다. (png와 jpg는 footer 시그니처도 가지고 있다)
이렇게 PDF는 25 50 44 46, PNG는 89 50 4E 47 같이 파일 포맷에 맞는 고유한 시그니처가 존재한다.
시그니처 외에도 파일 헤더에는 파일의 크기, 만든 시간, 접근 권한 등의 정보가 담겨 있다.
파일 시스템
파일 시스템은 이런 파일과 디렉토리의 CRUD를 관리한다.
그리고 파일에 대한 접근 방법을 제공하고, 접근 권한을 관리한다.
또 파일 내용이 손상되지 않도록 무결성을 보장하고, 백업과 복구 작업을 한다.
파일을 보호하기 위한 암호화도 담당한다.
파일 시스템은 어떻게 파일을 저장할까?
- Continguous Allocation
처음에는 파일을 연속적인 공간에 저장했다. 연속적인 저장장치의 주소를 읽기 때문에 속도는 빠르지만, 파일은 수정을 거듭하며 사이즈가 달라지기 때문에 연속적으로 저장하기 어렵고 단편화 문제도 발생한다.
- Linked Allocation
파일을 블록단위로 저장하고 각 블록에 다음 블록에 대한 주소를 갖고 있게해 LinkedList 형태로 파일을 읽을 수 있는 방식이다.
- Indexed Allocation
인덱스를 기록하는 블럭을 하나 두고, 이 index 블록안에 포인터를 보고 파일에 접근하는 방식이다.
이렇게 저장된 파일에 접근할 때는 파일 테이블을 통해서 접근한다.
파일 테이블의 블록 번호를 보고 파일에 접근할 수 있다.
그리고 파일 테이블은 디스크 파티션 마다 존재한다 .
OS가 파일에 접근하는 법 - File Descriptor
유닉스 계열의 운영체제에서 모든 것은 파일이다. 파일, 디렉토리, 소켓, 등등 모두 파일로 관리된다.
운영체제에서 파일에 접근할 때 File Descriptor를 사용한다.
fd = open("test.txt", O_RDONLY);
C언어에서 open으로 파일을 열면 File Descriptor를 반환한다. File Descriptor는 0이 아닌 양의 정수이다.
파일 디스크립터 값은 파일 디스크립터 테이블의 인덱스값이다.
파일을 열 때마다 파일 디스크립터 테이블에 파일 테이블에 대한 참조값을 저장하고 인덱스를 반환해준다.
우리는 fd를 통해 file table의 위치를 찾고 file table의 값을 통해 파일의 위치를 찾아 읽을 수 있다.
[운영체제] File System Implementations (tistory.com)
리눅스 - 파일 디스크립터 :: Developer Ahn (tistory.com)
'CS > 운영체제' 카테고리의 다른 글
3장 프로세스(PCB, Context Switch, Scheduling, IPC) (1) | 2022.05.15 |
---|