표준 Unix 파일 시스템 구조
- 부트 블록 : 파일 시스템 시작부에 위치, 보통 첫 번째 섹터에 위치
-> 부트 스트랩 코드가 저장되는 블록 : boot loader
- 슈퍼 블록 : 파일 시스템 전체에 대한 정보를 가지고 있다.
- i-리스트 : 데이터 블록의 정보를 가진 i-노드를 리스트 형태로 가짐
- 데이터 블록 : 데이터(파일 내용) 저장을 위한 블록들
i 노드
- 각 파일은 하나의 i-node로 표현
- i-node는 파일에 대한 모든 정보를 가지고 있다.
ex) 파일 타입, 파일 크기, 사용 권한, 파일 소유자 및 그룹, 파일 접근 및 갱신 시간, 데이터 블록에 대한 주소, ... 등
i-노드 내 블록 포인터
- 데이터 블록에 대한 포인터 : 데이터 블록의 주소
- 하나의 i node 내 블록 포인터 :
-> 직접 블록 포인터 : 10개 (크기가 작은 파일에 적합)
-> 간접 블록 포인터 : 1개 (10개 블록보다 큰 파일인 경우)
-> 이중 간접 블록 포인터 : 1개
파일 입출력 구현
- 파일 디스크립터 배열 : 각 프로세스마다 한 개씩 존재
- 열린 파일 테이블 : 시스템 전체에 하나, 파일이 하나 open될 때마다 table entry가 하나씩 생성
-> 열린 모든 파일 목록을 가짐
-> 파일 테이블 항목 : 파일 생태 플래그(read,write,appeend,...), 파일 내 현재 위치, i-node에 대한 포인터
- 활성 i-노드 테이블 : 시스템 전체에 하나, open된 파일들의 i-node를 저장하는 테이블
-> 열린 파일들의 i-node를 저장하는 테이블
-> i-노드 : 하드 디스크에 저장되어 있는 파일에 대한 자료구조
-> 한 파일에 하나의 i-node가 할당
파일 상태
- 파일에 대한 모든 정보
ex) 파일 유형 / 접근권한 / 링크수 / 사용자ID / 그룹ID / 파일크기 / 최종 수정시간 / 파일이름
상태 정보 : stat()
- 파일 하나당 하나의 i 노드 존재
int stat(const char*filename, struct stat *buf);
파일 타입
1. 일반 타입 : 데이터 포함 텍스트 파일 또는 이진 파일
2. 디렉토리 파일 : 파일/부디렉토리 이름, i-node에 대한 포인터 저장
3. 문자 장치 파일
4. 블록 장치 파일
5. FIFO 파일
6. 소켓
7. 심볼릭 링크
파일 유형 검사 함수도 있다.
파일 사용 권한
- 각 파일에 대한 권한 관리 : 각 파일마다 존재 (소유자 / 그룹/ 기타로 표기)
- 파일에 대한 권한 : 읽기 r 쓰기 w 실행 x
- read 권한이 있어야 O_RDONLY, O_RDWR 사용 가능
- write 권한이 있어야 O_WRONLY, O_RDWR, O_TRUNC 사용 가능
- 디렉토리에 write 권한과 execute 권한 있어야 디렉토링에 파일 생성, 삭제가능
-> 삭제할 시, 파일에 대한 read, write권한은 필요없다.
chmod(), fchmod
- 파일의 접근 권한을 변경
-> 성공시 0 실패시 -1
utime()
- 파일 filename의 최종 접근 시간과 최종 수정 시간 새로 설정
디렉토리 : 파일과 디렉터리들을 조직화
- 루트 디렉토리(/)로부터 시작하여 tree구조
- 디렉터리 자체도 일종의 파일이다.
디렉토리 구현
- 디렉토리는 디렉토리 엔트리들로 구성
- 디렉토리 엔토리는 파일 또는 부디렉토리를 나타낸다.
- 즉, 엔트리 = 파일명(또는 디렉토리명) + i-node번호
디렉터리 리스트
- opendir() : 디렉터리 열기 함수, DIR 포인터(열린 디렉터리 가리키는 포인터) 리턴
- readdir() : 디렉터리 읽기 함수
디렉터리 만들기
- mkdir()
디렉터리 삭제
- rmdir() : 디렉터리가 비어있으면 삭제
디렉터리는 일종의 파일이기에 파일처럼 구성이 되어있다.
링크 : 기존 파일에 대해 다른 이름을 부여하는 방법
1. 하드 링크
- link 링크 연결 -> new.txt를 you.txt에 링크시키면 내용복사, 링크 1증가
- unlink 링크 끊기 -> new.txt를 unlink하면 you.txt는 그대로 존재 new.txt는 삭제하는 것과 같은 효과(파일 자체를 삭제)
2. 심볼릭(소프트) 링크
- 간접적인 포인터 역할 (실제 파일/디렉토리의 경로명 원본에 대한 링크)
- symlink
-> l을 앞에 붙여 심볼릭 링크임을 표시
- 심볼릭 링크는 경로만 가지고있기에 크기가 매우 작다(하드 링크는 원본과 링크된 파일의 크기가 동일)
3. 윈도우에서 '바로가기'에 해당
'학교수업' 카테고리의 다른 글
게임공학개론 9주차 (0) | 2022.05.04 |
---|---|
컴퓨터구조 7주차 (0) | 2022.04.23 |
게임공학개론 7주차 (0) | 2022.04.21 |
인공지능개론 7주차 (0) | 2022.04.20 |
UNIX서버 6주차 (0) | 2022.04.20 |