11-1.[os] 파일과 파일 시스템
파일 시스템의 개요
파일 시스템의 개념
파일 시스템
- 파일 관리자가 파일을 보관하고 관리하는 등 저장장치의 전체 관리를 맡는 것
파일 관리자
- 사용자의 요청에 따라 파일을 저장하거나 파일의 내용을 읽어옴
- 파일 테이블을 사용하여 파일을 관리
- 생성, 수정, 삭제
- 읽기, 쓰기, 실행
파일 디스크립터(file descriptor)
- 파일 접근 권한
- 파일 관리자로부터 파일에 접근할 수 있는 권한(키)을 획득해야 함
파일 시스템의 기능
파일테이블
- 파일 생성
- 편하게 쓰기 위해 디렉터리 구조 제공
- 구분용 파일 이름과 확장자
- 파일 헤더 : 파일 이름, 파일 크기, 생성 날짜
블록과 파일 테이블
- 메인 메모리 -> 기가바이트
하드디스크 -> 테라바이트 (더 큼)
메모리는 바이트 단위로 저장됨
섹터: 하드 디스크의 물리적인 구조상 가장 작은 저장 단위
데이터는 운영체제와 저장장치 간에 블록 단위로 전송됨
- 블록: 저장장치에서 사용하는 가장 작은 단위
- 한 블록에 주소 하나가 할당됨
- 섹터마다 주소를 부여하면 너무 많이 필요함 -> 여러 섹터를 블록으로 묶고 주소 배정
- 블록 크기는 시스템 마다 다름
- 정할 수 있음
- 블록 크기를 작게 설정: 내부 단편화 현상이 줄어듦 -> 저장장치 공간 효율적 -> 파일이 여러 블록으로 나뉘어 파일 입출력 속도가 느려짐
- 포맷을 하면 각 블록에 번호가 매겨짐
- 파일 테이블에는 파일이 어떤 블록에 있는지 명시됨
파일 분류와 확장자
파일
- 논리적인 데이터의 집합
- 하드디스크나 CD 같은 제2저장장치에 저장됨
- 0과 1의 비트 패턴(bit pattern)으로 이루어짐
- 실행 파일 + 데이터 파일
실행 파일
- 운영체제가 메모리로 가져와 CPU를 이용하여 작업을 하는 파일
- 사용자의 요청으로 프로세스가 된 파일
데이터 파일
- 실행파일이 작업하는데 필요한 데이터를 모아놓은 파일
- ex) 이미지 뷰어 프로그램의 사진파일, 뮤직 플레이어의 음악파일, 워드프로세서의 문서 파일
- 데이터 파일은 스스로 프로세스가 될 수 없고, 운영체제가 전송하거나 보관만 할뿐 특별하게 다루지 않음
- 운영체제가 바라보는 모든 데이터 파일은 0과 1로 이루어진 데이터의 덩어리
- 파일 헤더 = 파일의 이름, 버전, 크기, 만든 날짜, 접근 권한
파일 = 헤더부분 + 데이터부분
확장자
- 실행 파일을 제외한 나머지는 모두 데이터 파일의 확장자
파일 이름과 연결 프로그램
- '파일이름.확장자' 형태
- 확장자는 전통적으로는 3자 이하
- 마침표 여러개 찍을 수 있음, 마지막 마침표 다음 글자가 확장자
- 경로+파일이름 -> 최대 255자
- 영문자, 숫자, 붙임표(-), 밑줄(_), 마침표(.)
- 대소문자 구분 안함
- 윈도우에서 실행 파일을 더블클릭하면 프로세스가 생성되어 실행됨
- 데이터 파일을 더블클릭하면 해당파일을 사용하는 응용 프로그램이 실행됨(이러한 프로그램을 연결 프로그램이라고함)
- -> 둘다 더블 클릭하면 실행됨
- -> 데이터 파일을 쓰는 응용 프로그램이 실행되는 것
데이터 파일 자체가 실행 x
데이터 파일에 연결된 응용 프로그램을 바꾸고 싶을 때 -> 연결 프로그램을 변 경
- 확장자를 바꾼다고 해서 내용이 바뀌지는 않음, 그냥 인식못할 뿐
파일 속성
- 파일은 속성을 갖고 있음
- 파일 속성은 각 파일 헤더에 기록됨, 운영체제는 파일 헤더를 파일 테이블에서 관리
- name: 확장자를 포함한 전체 이름
- type: 실행 파일, 동영상 파일, 사진 파일, 음악 파일
- size: 파일의 용량
- time: 만든 시간, 변경 시간, 접근 시간
- location: 이름과 확장자가 같은 두 파일은 한 디렉터리에 존재할 수 없음. 파일의 위치가 다르면 운영체제는 서로 다른 파일이라고 여김
- accessibility, owner: 윈도우-(읽기, 쓰기,숨김), 유닉스-(소유자, 그룹, 제삼자)
파일 헤더:
- 파일 테이블에서 관리
- 일반적인 내용 - 파일의 이름, 종류, 크기, 시간, 접근권한 등
- 파일이 저장장치의 몇 번째 블록에 있는지에 대한 정보도 가짐 고유 헤더:
- 데이터 파일에는 응용 프로그램이 필요로 하는 고유헤더가 따로 달려 있음
- 고유 헤더에는 파일의 버전 번호, 크기, 특수 정보등 응용 프로그램이 필요로 하는 정보가 담겨 있다.
- 고유 헤더는 파일을 복구할 때 유용하게 사용
- 빠른 포맷을 했다면 파일 테이블에 있던 파일 헤더가 사라짐
- 빠른 포맷, 휴지통에 버리기 -> 파일 테이블만 지우고, 실제 데이터를 지우지 않음
- 파일 복구 프로그램: 모든 블록을 찾아다니면서 고유 헤더에 있는 정보를 이용하여 파일을 원래 상태로 복원
- 잘 알려진 JPG, MP3 같은 파일은 헤더에 어떤 정보를 넣을지 전 세계적으로 규격을 정했기 때문에 헤더만 찾는다면 복구가능
파일 작업의 유형
파일 작업
- = 파일 연산
- file operation
- 파일 자체를 변경하는 작업 + 파일 내용을 변경하는 작업
파일 자체를 변경하는 작업
파일 내용을 변경하는 작업
파일 구조
- 파일: 하나의 데이터 덩어리
순차 파일 구조
- sequential file structure
- 파일은 기본적으로 순차 파일 구조
예) 카세트 테이프 - 파일 내용이 하나의 긴 줄로 늘어선 형태
- 순서대로 음악이 흘러 나옴
초기의 컴퓨터 - 카세트테이프를 저장장치로 사용
- (대형 컴퓨터, 최초의 개인용 컴퓨터도 마찬가지)
- 원반형 저장장치(플로피 디스크, 하드디스크)는 테이프 저장장치가 개발되고 나서 한참 후에야 보급됨
사용자가 파일 작업을 하려면:
- open() 또는 create() 명령을 사용하여 운영체제로부터 이용 권한을 얻음
- 운영체제는 파일 이용 허가를 내리면서 파일 디스크립터를 사용자에게 줌
- 파일 디스크립터는 파일의 맨 앞에 위치함
- 재생, 녹음, 읽기, 쓰기 - 앞으로 전진함
- lseek() : 특정 위치로 파일 디스크립터 옮김
순차 파일 구조의 장점
- 모든 데이터가 순서대로 기록되기 때문에 저장공간에 낭비되는 부분이 없음
- 구조가 단순하여 테이프는 물론 플로피디스크나 메모리를 이용한 저장장치에도 적용할 수 있음
- 순서대로 데이터를 읽거나 저장할 때 매우 빠르게 처리됨
순차 파일 구조의 단점
- 파일에 새로운 데이터를 삽입하거나 삭제할 때 시간이 많이 걸림
- 중간에 데이터를 삽입하려면 -> 그 뒤에 있는 데이터를 뒤로 밀어 빈공간을 만듦
- 중간의 데이터를 삭제했을 때 -> 남은 빈공간을 메우기 위해 그 뒤에 있는 데이터를 앞으로 당겨야함
-> 순차파일 구조는 데이터의 변경이 잦은 경우에 적당하지 않음
데이터로 이동할때 직접 접근이 어렵기 때문에 앞에서부터 순서대로 움직여야한다.
- -> 순차파일 구조는 데이터 검색에 적당하지 않다
인덱스 파일 구조
- index file structure
- 순차 파일 구조에서는 특정 데이터에 접근하기 위해 앞에서부터 순차적으로 이동해야함
- -> 단점을 해결한 파일 구조
- 순차 파일 구조 + 인덱스 테이블을 추가 -> 순차 접근과 직접 접근
- 플로피디스크, CD-ROM, 하드디스크에 쓰임
- 인덱스 순차 접근
- index sequential access
- 순차 파일 구조를 유지 + 디스크를 이용한 저장장치의 장점
- 예) 음악 CD
- 음악 CD를 처음부터 재생하면 순서대로 노래가 흘러나오고(순차0, 3번 곡을 선택하면 3번 곡의 처음부터 노래가 흘러나옴(인덱스)
- ISAM(Index Sequential Access Method) 파일: 인덱스 순차 접근으로 구성된 파일
- 파일을 저장할 때는 순차 파일 구조로 저장
- 파일에 접근할 때는 인덱스 테이블을 보고 원하는 파일에 직접 접근
- 데이터베이스의 인덱스 구축에는 다양한 알고리즘이 사용됨
- 인덱스 구성 방법에 따라 데이터의 접근 속도가 달라짐
- 보통 B 트리 씀
직접 파일 구조
- direct file structure
- 데이터 -> 해시함수 -> 해시 데이터
해시 함수
- hash function
- 특정 함수를 이용하여 직접 접근이 가능한 파일 구조
장점:
- 데이터 접근이 매우 빠르다
단점:
직접 파일 구조를 제대로 작성하려면 해시 함수의 선정이 매우 중요한데, 전체 데이터가 고르게 저장될 수 있는 해시 함수를 찾아야 한다
저장 공간이 낭비되는 문제
- 모든 주소에 일정량의 데이터가 고르게 저장되지 않고 들쑥날쑥하게 저장됨