파일 시스템과 관리
파일
사용자/응용 프로그램 관점
- 정보를 저장하고 관리하는 논리적인 단위
컴퓨터 시스템 관점
- 정보를 저장하는 컨테이너
- 저장된 0과 1의 데이터 덩어리, 바이트의 시퀀스
- 영구 저장 장치나 일시 저장 장치에 저장
운영체제의 역할
- 파일의 생성, 읽기, 기록 등 모든 과정 제어
- 응용 프로그램은 운영체제 없이 파일을 다루는 것은 불가능
하드 디스크 장치의 구조
스핀들 모터: 플래터 회전 장치
논리보드: 시스템의 입출력 연결회로
베이스: 하드디스크 몸체
파킹 램프: 헤드 주차 장치
헤드: 데이터 기록 판독 장치
플래터: 데이터 저장 공간
하드 디스크 장치의 구조
하드디스크는 호스트 컴터랑 입출력 버스로 연결되어있다. 하드디스크 내에는 디시크 제어 모듈이랑 디스크 매체 모듈이 잇고 디스크 제어 모듈에는 ㅍ로세서랑 디스크 ㅐ시가 있음. 디스크 캐시랑 디스크 매체 모듈이랑 연결되는데 여기에 암, 헤드, 플래터, 구동기, 스핀들 있음
섹터: 플래터에 정보가 저장되는 최소 단위, 512바이트거나 4096바이트이다
트랙: 플래터에 정보가 저장되는 하나의 동심원, 여러 개의 섹터들 포함
실린더: 가튼 반지름을 가진 모든 트랙 집합
블록: 운영체제가 파일 데이터를 입출력하는 논리적 단위
파일 입출력 주소
응용 프로그램: 파일내 바이트 주소(파일내에 바이트위치는 오프셋이라고함)
운영체제: 논리 블록 주소
디스크 장치: 디스크 물리 주소
응용 프로그램이라 운영체제, 디스크 장치 사이의 계층화와 주소변환
응용프로그램에서 사용자나 응용프로그램은 파일을 바이트 단위의 배열로 인식하다. 이 바이트 주소를 논리 블록주소로 바꿔서 운영체제에서 보고 이 논리 블록 주소를 chs물리 주소로 하드디스크에서 보는거
파일 시스템의 정의
파일 시스템이란.. 저장 매체에 파일을 생성하고 저장하고 읽고 쓰는 운영체제의 기능을 통칭한다
파일시스템은 디렌터리랑 파일로 이루어진 트리형태이고 저장 매체 속의 빈 블록을 유지하고 관리함. 커널 내에서 파일 입출력해서 파일 생성 열기 읽기 등등등…하고 메타 정보 읽거ㅏ 변경이 가능하게된다. 응용프로그램을 위한 파일 시스템 인터페이스도 알아둬야함(시스템콜…)
파일시스템은 저장소 내 파일 시슽ㅁ을 구축하고 ㅓ널 내 파일 입출력을 구현함
파일 시스템 입출력 계층
응용프로그램, 파일 입출력 라이브러리: 사용자 레벨
파일 입출력 계층(파일 입출력을 위한 커널 코드), 논리 블록 입출력 계층(디스크 디바이스 드라이버): 커널 레벨
물리 저장소 입출력 계층(하드디스크나 ssd): 하드웨어 레벨
파일읽을때.. 각 게층 간 역할 구분이 있다. 운영체제는 응용프로그램이 저장 잧의 종류, 구조, 위치 등 물리적인 특성에 무관하게 입출력하도록 지원함
디스크 디바이스 드라이버가 논리공간 물리공간 분리
파일 데이터는 이동할때 여러번 복사된다… 플래터, 캐시, 버퍼….
일케하면 복사하느라 시간은 많이쓰지만 동일한 파일 여러번 접근할때 시스템콜안해도 돼서 굳임. 글고 여러 응용 프로그램이 동일한 파일 가거나 한 프로그램이 순차적으로 읽을 때도 굳
파일 시스템 구조
계층구조: 루트 디렉토리, 서브 디렉토리, 파일
맨위에 루트 디렉토리있고 그 아래 서브 디렉토리가 있음. 맨 아래있는 리프라해야되나 거기에 파일이 있다.
디렉터리는 논리적인 관점에서는 여러 파일이나 서브디렉터리를 포함하는 컨테이너로 파일에 대한 경로를 제공한다. 물리적 관점에서는 파일로 구현되고 파일이나 서브 디렉터리 이름같은걸 저장하는 파일이다.
파일이름은 gun.exe, main.cpp이런식이고 파일 경로명은 루트 디렉토리부터 파일까지의 계층의 경로를 모두 포함한다. C:\User\user\Desktop이런거..
파일 시스템 메타정보/파일 메타 정보
파일 시스템 메타 정보: 파일 시스템 전체에 관한 정보를 가지고 있다. 전체 크기랑 현재 사용크기 등등등, 저장되는 위치는 운영체제마다 다르고 쉽고 읽고 쓸 수 있도록 저장 매체의 특별한 위치에 저장된다.
파일 메타 정보: 파일에 관한 정보를 다룸 파일이름이나 크기 만들어진 시간 이런거.. 파일 시스템마다 저장되는 위치는 다르고 디렉토리 내나 저장매체의 특별한 위치에 저장된다.
리눅스의 파일 속성중에 r은 읽기 허용 w은 파일 쓰기나 수정 허용 x는 파일의 실행허용임
파일 시스템 구축
파일 시스템의 종류와 구현 이슈
파일 시스템의 종류로는 ms-dos에서 최근에도 사용되는 fat이랑 유닉스에서 쓰는 ufs, 등등이 있음
FAT 파일 시스템
1980년대 pc의 개인용 운영체제인 ms-dos의 파일 시스템으로 개발되었다. 당시에 파일 개수나 크기ㅏ 작아서 거기에 맞춰서 설계됐고 현재는 개선해서 사용함
구조는 부트 섹터랑 FAT1, FAT2, 루트 디렉토리, 데이터 블록들로 이루어진다.
부트 섹터(boot sector): size of 1 sector, IO.sys랑 msdos.sys적재 및 실행하는 ㅗ드
FAT1, FAT2: FAT는 파일 블록들의 할당 테이블이고 2는 복사본임
루트 디렉토리: 고정 크기..
데이터 블록들; 파일 블록들이 저장되는 곳. 파일은 블록들로 분할되어 저장된다.
디렉토리는 파일이나 서브디렉토리 목록 담은 특수 파일: 파일 이름은 이름 8자 확장자 3자, 루트랑 서브디렉토리 구조는 같ㄱ음. 디렉터리 항목은 32바이트 크기로 하나의 파일에 대한 메타 정보를 저장한다.
디렉터리 항목은 파일이름(8) 확장자(3) 속성(1) 예약 공간(10) 시간(2) 날짜(2) 시작 블록 번호(2) 파일 크기(4) 일케 32바이트임
파일 블록 배치
FAT파일 시스템은 파일 블록 저장할때 파일 데이터는 블록 단위로 디스크에 분산하고 파일 메타 데이터는 디렉토리에 저장함. 저장된 파일 블록 위치는 fat테이블에 기록한다.
fat 테이블은 파일 시스테에 생성된 모든 파일에 대해 저장된 파일 블록 번호가 담긴 테이블이다
파일이 저장된 모든 블록 검색
파일이 포함된 디렉터리 항목을 검색하면 디렉터리 항목에는 해당 파일이 시작되는 fat항목 번호가 저장된다. 디렉터리 항목에는 해당 파일의 크기가 저장되어있고 디렉터리 항목을 이용해서 fat테이브를 연결 리스트 방식으로 검색해서 파일이 저장된 블록을 알아낸다.
이때 파일이 블록으로 쪼개져있으니까 디스크 탐색 여러번 해야되낟.
unix 파일 시스템 구조
부트블록: 부팅 시 메모리에 적재되어 실행되는 콬드로, 운영체제를 적재하는 기능
수퍼블록: 파일 시스템 메타 정보 저장
파일당 한개의 아이노드가 필요한데 아이노드는 파일 메타 정보를 저장한다. 아이 노드들의 테이블을 아이 노드 리스트라고 하고 파일이 생성될 때마다 빈 아이 노드가 할당되어 파일 메타 정보를 기록한다. 파일과 디렉토리는 데이터 블록들에 저장된다.
수퍼블록은 메타정보를 저장함. 파일 시스템의 크기와 정보 상태, 파일 시스템 내의 free 블록수, free블록들의 리스트 등등이 있고
아이노드는 파일의 메타정보?를 저장함. 그래서 파일 타입이나 접근 권한, 소유자, 그룹 크기 등등을 저장한다.
왜 둘다 메타정보라 저장했지 앞에는 시ㅡ템 메타정보고 후자는 파일 메타정보인듯?
아무튼 리눅스에서 ls -ial하면 파일의 아이노드 번호랑 메타 데이터 일부 정보를 출력할 수 있다.
하드링크와 소프트링크
하드링크는 파일의 데이터 블록에 직접 연결된 또다른이름임. 원본파일이랑 하드링클아은 동일한 아이노드 번호를 공유한다.
소프트 링크는 파일의 경로를 가리키는 또 다른 파일이라 일종의 바로가기 역할을 하는거고 심볼릭 링크라고도 함
Unix 파일시스템의 파일블록배치
Unix파일 시스템은 파일을 블록 단위로 분산배치한다. 아이노드는 15개 인덱스 두고 파일블록들이 위치 정보를 저장한다.
직접인덱스12, 간접인덱스1, 이중간접인덱스1, 삼중간접인덱스1
파일의 아이노드 찾기
파일을 읽고쓰려면 파일 블록들의 위치를 알아야됨. 이 위치는 15개 인덱스로 알수있으니까 아이노드를 찾아야된다.
어케찾음???
루트 디렉토리의 아이노드 번호를 알아내고 읽음. 거기서 /usr의 아이노드 알아내고 그 디렉터리 읽고 /usr/source파일의 아이노드 번호를 알아냄. 디렉토리 읽고 /usr/source/main.c 파일의 아이노드 번호를 알아내서 파일을 읽음
파일 IO 연산
파일 입출려 연산: 커널의 파일 시스템은 파일 입출력을 위한 시스템콜 함수롤 제공한다. open(), read()같은거..
파일찾기: 파일의 경로명으로부터 파일의 아이노드를 찾는 과정이고 ㅋ커널에 의해 수행된다.
파일 열기 open()
왜열까??? 파일 존재하는지 봐야하고 현재 프로세스가 파일에 접근해도 되는지 등등 확인해야됨 그리고 파일을 읽고 쓰기 위한 커널 내에 잘 구조를 형성해야되니까..
파일 입출력은 위한 커널 내 잘 구조들에는 메모리의 앙노드 테이블, 오픈 파일 테이블, 프로레스 별 오픈 파일 테이블, 버퍼 캐시가 있다.
메모리 i-node 테이블은 열린 파일의 디스크 i-node를 읽어 메모리 내에 저장한 테이블
오픈 파일 테이블은 시스템에서 열린 모든 파일에 대한 정보
프로세스별 오프 파일 테이블은 프로세스가 파일을 열때마다 한 항목이 할당되고 오픈파일 테이블을 가리킴
버퍼캐시는 읽고쓰느 파일 블록들 일시적으로 저장되는 메모리
파일열기는 어떤과정ㅇ로 될까..
파일 이름으로 i-node 번호를 알아내고 디스크 i-node를 커널 메모리의 i-node테이블에 적재한다. 오픈 파일 테이블의 새 항목을 만들어서 i-node주소 기록함 프리고 프로세스 별 오픈 파일 테이블에 새 항목을 만들고 프로세스별 오픈 파일 테이블 항목 번호를 리턴한다.
파일을 읽을때는???
read는 fd번호의 프로세스별 오픈 파일 테이블을 참조한다. 파일 테이브를 참조해서 r모드 아니면 오류로 리턴함 그리고 나서 i-node참조해서 파일 블록들의 리스트를 확보하고 팡ㄹ 테이블 항목에 적힌 오프셋을 확인하고 오프세은 파일 블록 번호로 변환함. 그리고 나서 해당 블록이 버퍼 캐시ㅔ 있는지 확인하고 버퍼캐시에서 사용자 영역으로 블록을 복사한다.
쓸때는??
write는 fd 번호의 프로세스별 파일 테이블을 참조함다. 그래서 파일 테이블참조하고 w아니면 오류로 냄. inode참조해서 파일 블록들의 리스트를 확보하고 오프셋확인해서 파일 블록 번호로 변환한다. 그리고나ㅓ 이 블록이 버퍼 캐시에 있는지 확인하고 있ㅇ면 상ㅇ자 영역에서 버퍼 캐시에 쓰고 없ㅇㅁㄴ 버퍼 캐시 할당받아서 디스크 블록을 버퍼 캐시로 읽어온다. 그리고 나서 다시 버퍼 캐시로 쓰면됨. 이후에 버퍼캐시 교체되면 내용은 저장장치로 기록함
닫을때….
프로ㅔ스의 오픈 파일 테이블 항목에 기록된 내용을 찾고 지우고 반환함
근데 그 전에 아이노드 사용 해체하고..
버퍼 캐시에 있는 파일의 블록이 수정되었거나 새로 만든 블록일때는 디스크에 기록해둠
'공부해요 > 운영체제' 카테고리의 다른 글
I/O 하드웨어 (기타) (1) | 2024.12.05 |
---|---|
파일 시스템 관리 퀴즈 (2) | 2024.11.28 |
가상메모리 퀴즈 (0) | 2024.11.14 |
가상메모리 (1) | 2024.11.14 |
메모리 관리 퀴즈 (0) | 2024.11.10 |