티스토리 뷰
파일과 파일 시스템
파일 시스템의 개요
파일 시스템
- 사용자가 직접 파일을 보관하는 대신 파일 관리자를 두어 저장 장치의 관리를 맡기는 시스템
- 파일 관리자가 파일 테이블을 사용하여 파일을 관리
- 사용자가 특정 파일에 접근하려면 파일 관리자로부터 파일에 접근할 수 있는 권한을 획득해야함(key)
블록과 파일 테이블
- 블록은 저장장치에서 사용하는 가장 작은단위로, 한 블록에 주소 하나가 할당
- 블록은 여러 개의 섹터로 구성되면 블록의 크기는 시스템마다 다름
- 블록 크기를 작게 설정하면 내부 단편화 현상이 줄어들어 저장장치를 효율적으로 쓸 수 있지만, 파일이 여러 블록으로 나뉘어 파일 입출력 속도가 느려짐
- 큰 파일을 많이 사용할 때는 블록 크기를 크게 잡는 것이 좋음
파일 분류
- 실행파일 : 운영체제가 메모리로 가져와 CPU를 이용하여 작업을 하는 파일
- 데이터파일 : 실행 파일이 작업하는데 필요한 데이터를 모아놓은 파일
파일 이름과 연결 프로그램
파일 이름
- 사용자 입장에서 어떤 응용 프로그램이 사용하는 데이터인지 구분할 필요가 있음, 예를들어 같은 문서파일 이라고 한글용 문서 파일인지 MS워드용 문서 파일인지 구분할 필요가 있음
- 데이터의 종류를 구분하기 위해 확장자 사용
- 파일 확장자는 3자 이하가 대부분이지만 4자나 5자로 된 확장자도 있음
- 파일 이름에 마침표(.)를 여러 번 사용할 수 있는데, 이떄는 마지막 마침표 다음 글자를 확장자로 인식
- 파일 이름은 현재 경로 이름을 포함하여 최대 255자
- 파일 이름에는 영문자, 숫자, 하이픈(-),언더바(_), 마침표(.)를 주로 사용
연결 프로그램
- 데이터 파일을 더블클릭하면 해당 파일을 사용하는 응용 프로그램이 실행되는데 이러한 프로그램을 연결 프로그램이라고함
- 윈도우에서 데이터 파일에 연결된 응용 프로그램을 바꾸고 싶을 때는 연결 프로그램을 변경하면 됨
- 확장자를 바꾼다고 해서 내용이 바뀌지 않음
파일 속성의 종류
파일 헤더와 고유 헤더
- 파일 헤더 : 파일 테이블에서 관리하며 파일의 이름, 종류, 크기, 시간, 접근권한 등과 같은 일반적인 내용과 파일이 저장장치의 몇 번째 블록에 있는지에 대한 정보를 가지고 있음
- 고유 해더 : 데이터 파일에는 응용 프로그램이 필요로 하는 고유 헤더가 따로 달려있는데 파일의 버전 번호, 크기, 특수 정보 등 응용 프로그램이 필요로 하는 정보가 있음
파일 작업의 유형
파일 구조
순차 파일 구조
- 파일 내용이 하나의 긴 줄로 늘어선 상태
- 장점
- 모든 데이터가 순서대로 기록되기 때문에 저장 공간에 낭비되는 부분이 없음
- 구조 가 단순하여 테이프는 물론 플로피디스크나 메모리를 이용한 저장장치에도 적용할 수 있음
- 순서대로 데이터를 읽거나 저장할 때 매우 빠르게 처리됨
- 단점
- 파일에 새로운 데이터를 삽입하거나 삭제할 때 시간이 많이걸림
- 특정 데이터로 이동할 때 직접 접근이 어렵기 때문에 앞에서부터 순서대로 움직여야 하기 때문에 데이터 검색에 적당하지 않음
인덱스 파일 구조
- 순차 파일 구조에 인덱스 테이블을 추가하여 순차 접근과 직접 접근이 가능
- 현대의 파일 시스템은 인덱스 파일 구조로, 파일을 저장할 때는 순차 파일 구조로 저장하고 파일에 접근할 때는 인덱스 테이블을 보고 원하는 파일에 직접 접근
직접 파일 구조
- 저장하려는 데이터의 특정 값에 어떤 관계를 정의하여 물리적인 주소로 바로 변환하는 파일 구조
- 특정 함수를 이용하여 직접 접근이 가능한 파일구조
- 이때 사용하는 함수를 해시 함수라고 함
직접 파일 구조의 장점
- 해시 함수를 이용하여 주소를 변환하기 때문에 데이터 접근이 매우 빠름
직접 파일 구조의 단점
- 직접 파일 구조를 제대로 작성하려면 해시 함수의 선정이 매우 중요한데, 전체 데이터가 고르게 저장될 수 있는 해시 함수를 찾기가 어려움
- 해시함수를 잘 찾았다고 하더라도 저장 공간이 낭비되는 문제도 있음
디렉토리의 구조
디렉토리의 개념
디렉토리
- 관련 있는 파일을 하나로 모아놓은 곳
- 1개 이상의 자식 디렉토리를 가질 수 있고, 또한 1개 이상의 파일을 가질 수 있음
- 하나의 디렉토리에는 여러 개의 파일과 자식 디렉토리가 존재
디렉토리의 계층 구조
- 디렉토리는 여러 층으로 구성할 수 있음
- 루트 디렉토리 : 최상위에 있는 디렉토리
디렉토리 파일
디렉토리 파일
- 디렉토리도 파일임
- 일반 파일에는 데이터가 담기고 디렉토리에는 파일 정보가 담김
- 디렉토리 헤더에는 디렉토리의 이름, 만든 시간, 접근 권한 등의 정보가 기록됨
경로
경로
- 파일이 전체 디렉토리 중 어디에 있는지를 나타내는 정보
- 한 디렉토리에는 같은 이름을 가진 파일이 존재할 수 없지만, 서로 다른 디렉토리에는 같은 이름의 파일이 존재할 수 있음
- 절대경로 : 루트 디렉토리를 기준으로 파일의 위치를 나타내는 방식
- 상대경로 : 현재 있는 위치를 기준으로 파일의 위치를 표시하는 방식
디렉토리 구조
1단계 디렉토리 구조
- 루트 디렉토리에 새로운 디렉토리를 만들 수 있지만 디렉토리 안에 자식 디렉토리를 만들 수는 없음
다단계 디렉토리 구조
- 단계 확장에 제약이 없고 디렉토리에 파일과 디렉토리를 둘 다 저장할 수 있음
바로가기 링크를 포함한 디렉토리 구조
- 원래 디렉토리 구조는 트리구조였으나 '바로가기'로 인하여 그래프 구조로 바뀜
마운트
마운트
- 여러개의 파티션을 통합하는 명령어
2개의 파티션을 하나의 디렉토리구조로 만든 예
디스크 파일 할당
연속 할당과 불연속 할당
파일 내 블록을 연결하는 방식
- 연속 할당 방식
- 파일을 구성하는 데이터를 디스크상에 연속적으로 배열하는 간단한 방식
- 파일을 저장하거나 삭제하다 보면 빈 공간이 생기는데 디스크에 남은 공간 중 파일의 크기와 맞는 연속된 공간이 없을 때는 연속 할당이 불가능 하기 때문에 실제로 사용되지 않음
- 불연속 할당 방식
- 비어있는 블록에 데이터를 분산하고 저장하고 이에 관한 정보를 파일 시스템이 관리하는 방식
- 연결 리스트를 이용한 연결 할당과 인덱스를 이용한 인덱스 할당이 대표적
연결 할당
- 파일에 속한 데이터를 연결 리스트로 관리하는 방식
- 파일 테이블에는 시작 블록에 대한 정보만을 저장하고, 나머지 데이터는 시작 블록부터 연결하여 저장
- 체인으로 연결한 것처럼 보여서 체인 할당이라고도 함
- 윈도우의 FAT(File Allocation Table)이 이 방식을 사용
인덱스 할당
- 테이블의 블록 포인터가 데이터 블록을 연결하는 것이 아니라, 데이터의 인덱스를 담고 있는 인덱스 블록을 연결
- 인덱스 블록은 실제 데이터의 위치에 관한 정보를 순서대로 보관
- 테이블이 꽉 차서 더 이상 데이터를 연결할 수 없을 떄는 인덱스 블록을 연결하는 간접 인덱스 블록을 만들면 테이블을 무한히 확장할 수 있음
- 유닉스의 I-node가 이 방식을 사용
인덱스 할당 방식의 예
디스크의 빈 공간 관리
빈 공간 리스트
- 파일 시스템은 디스크의 내부 단편화를 줄이고 빈 공간을 효율적으로 관리하기 위해 빈 블록의 정보만 모아놓은 빈 공간 리스트를 유지
- 파일 시스템에서는 파일 테이블의 헤더를 삭제하고 사용했던 블록을 빈 공간 리스트에 등록하는 것을 파일이 삭제된 것으로 간주
- 어떤 데이터를 지우고 새로운 데이터를 디스크에 넣을 때 방금 지워진 블록에 할당되는 것이 아니라 리스트에 있던 블록 중 맨 앞에 있는 블록에 할당
유닉스 파일의 특징
유닉스의 실행 파일
유닉스 파일 시스템의 접근 패턴
- 맨 앞자리는 파일의 종류를 나타냄
- 나머지 아홉 자리는 rwx라는 세 덩어리로 구성
- rwx 덩어리 중
- 첫 번째 덩어리 : 파일의 소유자 권한 부여
- 두 번째 덩어리 : 소유자가 속한 그룹의 권한 부여
- 세 번째 덩어리 : 소유자도 아니고 같은 그룹도 아닌 제 삼자의 권한 부여
chmod
- 접근 패턴을 변경할 때 사용하는 명령어
- 접근 패턴에 숫자를 부여하여 변경(read는 4, write는 2, excute는 1이며 chmod명령을 이용하여 살리고 싶은 숫자를 모두 더하면 됨)
'CS(Computer Science) > 운영체제' 카테고리의 다른 글
운영체제) # 12 네트워크와 분산 시스템 (0) | 2020.12.10 |
---|---|
운영체제) #10 입출력 시스템과 저장장치 (0) | 2020.12.10 |
운영체제) #9 가상 메모리 관리 (0) | 2020.12.04 |
운영체제) #8 가상 메모리의 기초 (0) | 2020.12.04 |
운영체제) #7 물리 메모리 관리 (0) | 2020.12.03 |
- Total
- Today
- Yesterday
- flame
- WAS
- redis
- CHANNELS
- Django
- 에러해결
- django server
- Kotlin
- Hummingbird
- 코틀린
- Android Studio
- RecyclerView
- 안드로이드
- 에러
- Android
- Tutorial
- chatting
- Git
- 해결
- github
- 안드로이드스튜디오
- node.js
- mysql
- password
- flutter
- 플러터
- 알고리즘
- DART
- springboot
- socket.io
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |