리눅스 파일 시스템
- 리눅스 커널에서 사용하는 데이터, 프로그램 저장
- 커널 동작을 위한 데이터/실행파일들이 루트파일시스템에 마운트되야 사용가능
- 모든 파일들을 계층적 구조로 관리 -> 최상위에 /가 있고 아래에 트리구조로 연결됨
기본 파일 시스템 "ext2"
- 가상 파일 시스템을 사용해서 다른 종류의 다양한 파일 시스템 지원
- 파일 시스템 생성 및 관리 도구 사용방법 숙지 필요
- 임베디드 시스템의 경우 램이나 플래시메모리로 파일 시스템 생성 및 관리
- 파일 시스템에 대한 기본적인 정보는 범용 컴퓨터와 동일하게 적용
(1) 파일 시스템 개요
1) 파일 시스템
2) 리눅스 파일 시스템
3) 리눅스 파일 유형
4) 가상 파일 시스템
5) 리눅스 파일 시스템 구조
6) /proc 파일 시스템
1) 파일 시스템
파일 시스템
- 운영체제가 파일들을 효율적으로 디스크에 저장하고 관리하기 위한 방법과 자료구조
- 데이터나 프로그램을 저장하고 있는 파일들을 저장, 탐색, 접근, 조작하기 위한 추상적 자료구조 집합체
- 디스크의 물리적인 트랙, 섹터, 실린더를 논리적 단위로 할당
파일 유형
- 일반 파일, 디렉토리
- 디바이스 파일 :문자디바이스, 블록디바이스
- 기타 파일 : 소켓, 파이플, 심볼릭/하드링크
- 모든 자원들을 파일과 동일하게 처리
저장 자원
- 하드 디스크
- 플로피
- CD롬
- DVD
- Flash ROM
루트파일시스템
- 리눅스 디렉토리 구조의 최상위 위치인 "/"에 연결된 파일 시스템
- 리눅스 리눅스 실행시 필요한 데이터와 프로그램 저장
루트 파일 시스템 최소 구성
-최소 디렉토리 : /dev, /proc, /bin, /etc, /lib, /lusr, /tmp
-기본 유틸리티 프로그램 : sh, ls, cp, mv, etc
- 최소 설정 파일 : rc, initab, fstab, etc.
- 기본 디바이스 : /dev/hd*, /dev/tty*, /dev/fd0, etc.
- 유틸리티 위한 런타임 라이브러리 준비되야함
마운트
- 마운팅 : 새 파일시스템을 루트파일시스템에 연결
- 마운팅포인트 : 새파일시스템이나 파일이 연결되는 위치
inode
- 파일에 대한 정보를 보관하는 커널 데이터 구조체
- 구성 정보 : 파일 유형, 접근권한, 소유권, 시간기록, 크기, 링크카운터, 데이터블록에대한 포인터
- include/linux/fs,h에서 정의
접근 권한
- 파일에대한 읽기 쓰기 실행에 대한 접근 허가권
- setuid, setgid, chmod, umask 로 설정
2) 리눅스 파일시스템
리눅스 파일시스템
- 가상 파일시스템 (VFS)를 사용하여 다양한 파일시스템 지원 및 통일된 접근 방법 제공
- 대표적인 파일시스템
ext2 : 기본파일 시스템
ext3 : ext2에 저널링 기능 추가
NTFS : 윈도우 파일시스템
리눅스 기본 파일시스템
- 초기 파일시스템 : Minix 파일시스템
- ext(extended file system) : 1992. 리눅스 버전 0.96c서 사용
- ext2 : 1993.1 개선된 ext파일 시스템 릴리즈
-> 최대 2gb 파일크기와 4TB 전체파일시스템 구성 가능
-> 가변 블록 크기 변경 및 파일시스템 확장 가능
3) 리눅스 파일 유형
일반 파일
- 데이터나 프로그램을 저장한 일반 파일은 커널 내에서 inode라는 데이터 구조체로 표현
-포인터로 직접 연결
- 포인터로 간접 연결
- 이중 연결
-> 많은 블록을 필요한 대용량 파일도 사용가능
디렉토리
- 계층적 파일시스템 구성
- 파일과 하위디렉토리에 대한 정보 저장
- indoe 번호와 파일이름을 테이블 형태로 저장하는 파일
디바이스 파일
-모든 디바이스는 디바이스 파일을 통해 접근
- 디스크 공간을 쓰지 않고, 디바이스 드라이버에 대한 접근 포인터 가능
- 입출력 장치 유형에 따른 디바이스 파일 사용
문자 디바이스 파일 : 문자 모드 입출력 동작
블록 디바이스 파일 : 버퍼캐쉬를 통한 블록 단위 입출력 동작
- 디바이스 파일에 대한 입출력요청은 디바이스드라이버에 전달
- 디바이스 식별은 주번호와 부번호를 사용
링크
- 하나의 파일에 여러개 indode 지정
- 동일한 파일에 서로 다른 파일명 지정 가능
- 하드링크 : inode 에 대한 포인터 사용. 동일 파일시스템 내에서 사용가능
- 심볼릭 링크 : inode에 대한 포인터를 사용안함. 해당 파일의 파일이름을 저장하고있는 파일
- 하드링크는 동일 시스템내에서만 링크가능, 심볼릭링크는 다른 파일시스템도 링크가능
4) 가상 파일시스템
- VFS
- 파일시스템과 커널 사이 가상의 파일시스템 층 생성
- 파일시스템에 통일된 인터페이스 제공
가상 파일 시스템 구조
- 다양한 파일 시스템 접근 가능하게 함
1. 사용자 프로세스는 시스템 콜로 파일 시스템 접근 요청
2. 가상 파일 시스템을 통해 실제 파일시스템에 접근
3. 어떤 파일시스템을 사용하더라도, 동일한 접근방식 사용 -> 안정성, 이식성 증가
VFS가 지원하는 파일시스템
1. 디스크 기반 파일 시스템
- 로컬 디스크 파티션의 저장공간 관리
- ext2, NTFS, MS-DOS, CD-ROM
2. 네트워크 기반 파일 시스템
- 네트워크상 다른 컴퓨터의 파일시스템에 접근가능
- NFS, SMB
3. 특수 파일시스템(가상 파일시스템)
- 디스크 공간을 사양하지 않음
- /proc : 사용자가 커널 데이터 구조에 접근할수 있는 인터페이스 제공
- /dev/pts : UNIX98 표준 가상 단말 제공
5) 리눅스 파일 시스템 구조
파일 시스템 개요
- / : 최상위 디렉토리
- bin : 중요한 명령어들 포함
- boot : 커널 시스템 부팅관련 파일 저장
- dev : 시스템 디바이스 파일 저장
- etc : 시스템 전체 환경 설정 파일 저장
- home : 사용자 홈 디렉토리
- initrd : 부팅과정에서 사용되는 초기 램디스크
- lib : 프로그램에 필요한 라이브러리 저장
- lostfound : 파일시스템 검사 명령어 fsck 가 사용하는디레게토리
- misc : 시스템 아키텍처에 독립적인 자료 저장
- mnt : 마운트 포인트 사용되는 디렉토리
- opt : add-on 패키지가 설치되는 패키지
- proc : 실행중인 프로세스나 현재 시스템 정보를 파일형태로 보여주는 가상파일시스템
- root : root사용자 홈디렉토리
- sbin : 시스템 관리자용 명령어들이 저장된 디렉토리
- tmp : 임시저장디랙토리
- usr: 각종어플리케이션
lib : /lib 에 있지않은라이브러리 디렉토리
include : C프로그램에 필요한 헤대 퍼일
local : 웹 서버등 추가 소프트웨어 설치
sbin : /bin에서 제외된 명령어와 네트워크 관련 명령어
src : 프로그램 소스 저장
- var : 시스템 운용중 생성되었다가 삭제되는 임시보관장서
6. /proc 파일 시스템
- 커널 내부데이터 구조에 대한 인터페이스 제공
- 커널 상태나 실행중인 프로세스에 대한 정보 제공
- 커널, 프로세서, 주변장치들의 운용상태 및 동작상태 정보 제공
- /proc/pid : 실행중인 프로세서에 대한 정보. 프로세서 번호별로 디렉토리 생성
- /proc/loadavg : 1,5,15분 단위 평균시스템 부하
- /proc/uptime : 시스템 시작후 지난 시간 초단위 표시
- /proc/meminfo : 메인메모리와 스환 전체 크기, 사용량, 여유공간을 바이트단위로 표시
- /proc/ksmg : 커널 메시지
- /proc/cpuinfo : 프로세서 파라미터
- /proc/pci : pci 슬롯 점유상호아
- /proc/scsi : scsi 디바이스 정보
- /proc/net : 리눅스 네트워크 레이어 관련 정보
unix : 사용중인 unix domain 소켓 정보 저장
arp : arp 테이블
route : 라우팅 테이블
tcp : TCP 소켓 정보
...
(2) ext2 파일 시스템
1) ext2 사양 비교
2) ext2 구조
3) ext3 및 ext4
1) ext2 사양 비교
ext2 사양비교
- 1993.1 기존 ext 파일시스템 개선한 파일시스템
- 데이터 블록 크기 : 1~8KB
- 디렉토리 당 최대 하위디렉토리 수 : 32,768
- 최대 파일 시스템 크기 : 2T ~ 32TB
- 최대 파일 사이즈 : 16G ~2TB
- ext2 파일시스템은 ext3,4 로 확장되어 리눅스에 사용
ext2 파일 시스템 구조
- /usr/include/linux/ext2_fs.h에 정의
- 맨 앞에 boot sector
- 뒤로 block group이 따라감
- block group은 boot sector, block group, data bitmap, inode bitmap, inode table, data block로 구성
슈퍼 블록
- 파일 시스템에 대한 메타 데이터 저장한 구조체
- 하드디스크 시작위치에서 1024 바이트 오프셋 위치에 저장된 메모리공간
- 파일 시스템 마운팅에 필수 정보
- 구성 : inode 수, 사용중인 블록, 블록 크기, 프래그먼트 수, 파일시스템 마운팅 시간, 마지막 쓰기 시간 등
inode
- 128 바이트로 구성
- 파일 타입, 접근권한, 생성시간, 접근시간, 소유자 아이디, 데이터 블록의 수와 데이터 포인터, 간접블록용 포인터
ext2 라이브러리
- libext2fs
- ext2 파일시스템 제어구조 처리할수있는 함수
- 파일 시스템 관련 함수
- 디렉토리 관련함수
- inode 관련함수 제공
유틸리티 프로그램
- e2fsprogs
- ext2 파일시스템을 생성 수정 변경 디버깅 할수있는 유틸리티 포함하는 패키지
- mke2fs : 파일시스템 초기화하여 ext2 파일시스템 생성
- tune2fs : 파일시스템 파라미터 수정
- e2fsck : 비정상 종료후 파일시스템 일관성 검사
3) ext3, ext4
ext3
- ext2+저널링 : 파일시스템 신뢰도 향상
저널링 파일 시스템
- 파일시스템 변동이력을 저널에 보관하여 신뢰도 향상
- 갑자기 전원공급 중단이나 시스템 다운시 복구를 용이하게함
ext4
- ext3의 개선
- pre-allocation : 파일 저장에 필요한 디스크 공간 미리 확보
- delayed allocation : 데이터가 디스크에 쓰여질떄까지 디스크 할당 지연
'컴퓨터과학 > 임베디드' 카테고리의 다른 글
ARM을 활용한 임베디드 시스템 설계 22 - 플래시 파일 시스템 (0) | 2020.05.05 |
---|---|
ARM을 활용한 임베디드 시스템 설계 21 - 램디스크 (0) | 2020.05.05 |
ARM을 활용한 임베디드 시스템 설계 19 - 커널 재구성 (0) | 2020.05.05 |
ARM을 활용한 임베디드 시스템 설계 18 - 리눅스 커널 (0) | 2020.05.04 |
ARM을 활용한 임베디드 시스템 설계 17 - 부트로더 분석 (0) | 2020.05.04 |