컴퓨터 시스템 자원 관리
- CPU : 프로세스 관리(CPU 스케줄링, 프로세스 동기화)
- 주기억장치 : 메인 메모리 관리(페이징, 가상 메모리)
- 보조기억장치 : 파일 시스템
File
파일이란, 논리적인 저장단위로 관련된 정보들의 집합에 이름을 붙여 저장한 것을 의미합니다.
- 일반적으로 레코드, 블록 단위로 저장
- 보조기억장치에 저장
- 필드란?
- 파일 구성의 최소 단위
- 레코드란?
- 하나 이상의 필드가 모인 단위
- 하나 이상의 레코드가 모여 파일이라 한다
파일의 구조
- MetaData : 파일의 이름, 위치 크기 시간 정보 등의 파일에 대한 정보가 저장
- Data 영역 : 실제 파일에 들어있는 데이터
File System
파일시스템이란, 파일을 쉽게 사용할 수 있도록 유지 또는 관리 하는 방법
특징
- 커널 영역에서 동작
- 계층적 Directory 구조
- 각각의 디스크 파티션에 하나씩 배정 가능
파티션
- 연속된 저장공간을 나눠서 사용하기 위한 규약
- 하나의 디스크에 여러 파티션을 두는 것이 일반적
- 여러개의 디스크를 하나의 파티션으로 부르기도 함
역할
- 파일의 CURD 담당
- 보조 저장소 관리
- 다양한 접근 방법 제공
- 권한 없는 사용자나 악의적인 접근 차단
- 파일 무결성 확인
- 파일이 조작되지 않았는지, 이상은 없는지 확인
목적
- 하드디스크와 메인 메모리 사이의 속도 차이를 줄이기 위함
- 파일관리
- 하드 디스크의 용량을 효율적으로 관리
종류
- Window : NTFS
- UNIX : UFS
- MS-DOS : FAT 16/32
- USB : VFAT
- CD : CDFS
- 원격 저장소 : NFS
Access Methods(접근 방법)
- Sequential Access(순차 접근)
- Random Access(임의 접근)
- Index Access(색인 접근)
Sequential Access(순차 접근)
- 가장 단순한 접근 방법
- 파일의 정보가 레코드 순서대로 처리
- 카세트 테이프를 사용하는 방식과 동일(앞으로만 작동)
- 현재 위치에서 읽거나 쓰면 offset이 자동으로 증가
- 뒤의 방향을 처리하기 위해서는 되감기 필요(rewind)
연산 종류
- read next : 현재 위치 읽고 position은 다음으로
- write next : 현재 위치에서 쓰고 position은 다음으로
- rest : Pointer 초기화
Direct Access(직접 접근)
![](https://velog.velcdn.com/images/parksegun/post/47b3f1cb-32ee-422c-bac2-84fbf9f61807/image.png)
- 파일의 레코드를 원하는 레코드로 접근
- 빠르게 레코드를 읽고 쓰는 것이 가능
- 때문에 대규모 정보를 접근할 때 유용(DB 활용)
- 현재 위치를 가리키는 변수를 유지시키면 순차접근 구현 가능
연산 종류
- read n : n 번째 블록 읽어라(position은 n에 위치)
- write n : n 번째 블록 써라
- position to n : n 번째 블록 위치로 Pointer 이동
- rewrite n
Index Access(색인 접근)
- 색인을 먼저 찾고 대응되는 포인터를 얻어서 레코드에 접근
- 크기가 큰 파일의 입출력 탐색을 도와줌
File Allocation(디스크 할당)
- 파일의 내용을 담고있는 DataBlock의 위치 정보를 어떻게 저장할지 고려해야 함
- OS 마다 다른 방식으로 File의 DataBlock을 관리
- 섹터란?
- 파일에서 블록이란?
- 파일 시스템에서 데이터를 논리적으로 묶는 단위
- 주로 섹터로 구성
할당 방법
- Contiguous Allocation(연속할당)
- Linked List Allocation(연결 할당)
- Index Allocation (인덱스 할당)
- I-Nodes(아이노드)
Contiguous Allocation(연속할당)
![](https://velog.velcdn.com/images/parksegun/post/18ae352f-c2b3-40d6-88ed-69299ca6007a/image.png)
총 32개의 Disk Block
- File을 물리적으로 연속된 DiskBlock에 저장
Disk Block : 파일 시스템에 의해 나눠진 디스크 구역
장점
- 구현이 간단
- 연속된 공간으로 전체 파일을 읽을 경우 성능이 좋음(연속되어있기때문)
단점
- File이 한번에 끝까지 기록되어야 함
- File의 끝을 알리기 위해 Block을 사용하는 경우 Disk 낭비
Linked List Allocation(연결 할당)
![](https://velog.velcdn.com/images/parksegun/post/343ffd80-8e7b-4198-9ccf-e14edb6331a7/image.png)
- Linked List로 구현하여 데이터를 저장
장점
- File의 DataBlock은 어디든 위치
- 공간의 낭비가 없음
단점
- Direct Access, Index Access 불가
- 파일의 특정위치는 시작 node 부터 탐색해야하기 때문
- 다음 DataBlock을 가리킬 정보가 필요하기에 성능에서 뒤쳐질 수 있음
- 대부분의 프로그램은 단위가 2의 배수이기때문에 다음 DataBlock을 가리킬 정보때문에 2의 배수가 아닐 수 있음
Index Allocation(인덱스 할당)
![](https://velog.velcdn.com/images/parksegun/post/760b4f1a-5d87-4cfc-840d-07ef16a0dbd6/image.png)
- File의 Data와 관련된 Block을 하나의 Block에 저장(각각 어디에 존재하는 지)
- 이를 Index Block이라고 하며 모든 Data의 위치를 파악할 수 있음
- Index Block을 통해 Direct Access가 가능
- Linked List Allocation보다 빠름
단점
- Index Block의 크기가 고정이라 저장할 Pointer의 수가 한정적
I-Nodes
- Index Block들을 Table 형태로 관리하는 방법
UNIX : I-Nodes
MS-DOS : Linked List Allocation
Directory Structure
- Directory가 속한 파일 이름과 속성을 포함
- Directory란?
- 파일의 메타데이터 중 일부를 보관하고 있는 특별한 파일
- 윈도우의 폴더 생각
- Directory도 파일의 한 종류
기능
- Create(파일 생성)
- Search(파일 찾기)
- Rename(파일 이름 수정)
- Delete(파일 삭제)
- List(Directory 나열)
- Traverse (파일 시스템 순회)
구성
- Naming : 적절한 이름 사용
- Grouping : 적절한 분류로 그룹화
- Efficiency : 파일을 빠르게 탐색
Directory Level
- Single Level Directory
- Two Level Directory
- Tree Structured Directories
- Acyclic Graph Directory(비순환 그래프)
- General Graph Directory(일반 그래프)
Single Level Directory
![](https://velog.velcdn.com/images/parksegun/post/63f5190d-a135-49f5-a90d-47bf3e8c0989/image.png)
- 가장 간단한 구조
- 모든 파일들이 Directory 밑에만 존재
- 파일 이름이 서로 달라야함
- 파일이 많아지면 문제 발생
Two Level Directory
![](https://velog.velcdn.com/images/parksegun/post/d7461dfc-c48f-46a2-9865-77a01f2da84f/image.png)
- 사용자별 별도의 Directory 소유
- 사용자별 이름 중복 허용
- 효율적인 탐색 가능
구조
- MFD(Master File Directory) : 사용자의 이름으로 색인, UFD를 가리킴
- UFD(User File Directory) : 사용자별 Directory
- Grouping 없음
Tree Structured Directories
![](https://velog.velcdn.com/images/parksegun/post/620a63fb-41b8-452a-868c-28d3493f914d/image.png)
- 이름 그대로 계층 구조 (트리 구조)
- 사용자별 서브 디렉토리 소유 가능
- 고유한 경로를 갖음 (절대 경로, 상대 경로)
- 효율적인 탐색
- 그룹화 가능
- 연결된 것이 파일인지 디렉토리인지는 Bit를 사용해서 구분
Acyclic Graph Directory(비순환 그래프)
![](https://velog.velcdn.com/images/parksegun/post/8df32d62-9985-493c-a426-0ddbd9f825b7/image.png)
- Directory들이 Sub Directory나 File 공유 가능한 구조
- 같은 파일에 대해서 서로 다른 Alias 사용 가능
- 파일을 삭제하면 그것을 참조하고있는 다른 Directory의 대상이 사라짐
- Dangling Pointer 문제
- 이 문제를 해결하기 위한 참조 계수 존재
- 참조 계수가 0이면 파일이 존재하지 않음을 의미, 그때 삭제 가능
General Graph Directory(일반 그래프)
![](https://velog.velcdn.com/images/parksegun/post/99484d7a-bf81-4dab-900a-f8e84e77a792/image.png)
- 순환을 허용
- 무한 루프 가능성 때문에 잘 사용하지 않음
- 순환이 발생하지 않도록 하는 조치가 필요
- 링크만 허용
- Garbage Collection을 통한 접근 여부를 표시
용어
- 커널 영역?
- 운영체제를 실행시키 위한 메모리 공간
- 컴퓨터가 부팅될때 메모리 내에 따로 적재
- 커널?
- 운영체제의 핵심 부분
- 운영체제의 서비스를 담당
- 클러스터?
- 파일 시스템에서 실제 데이터를 저장하고 관리하는 논리적인 최소 단위
- 주로 섹터로 구성
- Cluster=Sector1+Sector2+...s
- offset이란?
- Access Methods란 파일시스템이 파일에 접근하는 방법?