드디어 마지막 운영체제이다.
오늘 노션에 운영체제와 컴퓨터 구조를 정리하고
내일부터는 네트워크를 복습해보려고 한다.
4월은 JSON과 JPA, DB를 공부하며 보내고
5월은 리눅스에 대해서 배워보려고 한다.
오늘은 파일 시스템에 대해 배웠다.
파일 시스템은 파일과 디렉터리를 관리하는 운영체제의 내부 프로그램이다
파일을 손쉽게 삭제하고 생성하고 수정할 수 있는 것은 파일시스템 덕분이다.
파일과 디렉토리는 보조기억장치에 있는 데이터 덩어리
운영체제는 이를 어떻게 파일과 디렉토리로 관리할까?
파일이란
하드디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합
의미있고 관련 있는 정보를 모은 논리적 단위
파일의 부가 정보
= 속성 또는 메타데이터
= 위치,형식, 크기
속성이름 | 의미 |
---|---|
유형 | 운영체제가 인지하는 파일의 종류 |
크기 | 파일의 현재 크기와 허용 가능한 최대 크기를 나타낸다. |
보호 | 어떤 사용자가 해당 파일을 읽고, 쓰고, 실행할 수 있는지를 나타낸다. |
생성 날짜 | 파일이 생성된 날짜를 나타낸다. |
마지막 접근 날짜 | 파일에 마지막으로 접근한 날짜 |
마지막 수정 날짜 | 파일이 마지막으로 수정된 날짜 |
생성자 | 파일을 생성한 사용자 |
소유자 | 파일을 소유한 사용자 |
위치 | 파일의 보조기억장치의 현재 위치 |
유형은 운영체제가 인지하는 파일 종류를 나타내는데 이는 우리가 확장자를 통해서 알려준다.
확장자 종류
파일 유형 | 대표적인 확장자 |
---|---|
실행 파일 | 없는 경우, exe, com,bin |
목적 파일 | obj, o |
소스 코드 파일 | c, cpp, cc, java, asm, py |
워드 프로세서 파일 | xml, rtf, doc, docx |
라이브러리 파일 | lib, a, so, dll |
멀티미디어 파일 | mpeg, mov, mp3, mp4, avi |
백업/보관 파일 | rar, zip, tar |
파일을 다루는 모든 작업은 운영체제에 의해서 이루어진다.
앞에서 배웠지만 자원에 접근하기 위해서는 운영체제에 시스템 호출을 통해서 접근이 가능하다.
파일 연산을 위한 시스템 호출은 아래와 같다.
윈도우에서는 "폴더"
파일들을 일목요연하게 관리
옛날에는 하나의 디렉터리만 존재 -> "1단계 디렉터리"
현재는 트리구조를 가지는 -> "트리 구조 디렉터리"
트리 구조 디렉터리의 최상위 디렉터리
= /
= 루트 디렉터리
따라서 자연스레 "경로"라는 개념이 생긴다.
같은 디렉토리에는 같은 이름의 파일 ❌
다른 디렉토리에는 같은 이름의 파일 ⭕
=> 따라서 모든 파일은 루트 디렉토리를 시작해서 자기 자신까지의 고유한 경로를 가진다. 이것이 "절대 경로"이다.
루트 디렉터리가 아닌 현재 위치의 디렉토리부터 시작하는 경로
= "상대 경로"
ex) ./home/name/운영체제.txt
운영체제는 디렉터리를 그저 특별한 형태의 파일로 간주
디렉터리에 포함된 정보는 내부에 담겨 있는 대상과 관련된 정보로 테이블의 형태로 구성되어져 있다.
파일 시스템마다 디렉터리 엔트리가 포함하는 정보가 달라진다.
그러나 공통적으로 "파일 이름"과 "위치를 유추할 수 있는 정보"가 포함된다.
또는 "파일 이름"과 "위치를 유추할 수 있는 정보" 외에 파일 속성(크기, 수정된 시간, 생성된 시간 등)을 포함할 수도 있다.
파일 이름 | 위치를 유추할 수 있는 정보 |
---|---|
.. | |
. | |
tool | |
Program Files |
위와 같이 자기 자신을 나타내는 "."과 상위 디렉터리로 가는 ".."도 함께 구성된다.
운영체제의 내부 프로그램인 파일 시스템은 보조기적장치에 있는 파일과 디렉터리를 관리한다.
이 파일 시스템은 다양한 종류가 있고 하나의 컴퓨터에 여러 개의 파일 시스템이 사용될 수 있다.
파일 시스템이 파일과 디렉터리를 보조기억장치에 어떻게 할당하고 접근하는지와 대표적인 파일 시스템인 FAT파일 시스템과 유닉스 파일 시스템에 대해서 배운다.
새 보조기억장치를 사용하려면 파티셔닝과 포매팅 작업을 거쳐야 한다,
파티셔닝
= 칸막이를 통해서 물건을 정리하는 것처럼
= 하드 디스크나 SSD처럼 용량이 큰 저장 장치를 하나 이상의 논리적인 단위로 구획하는 것
이렇게 나눠어진 영역 = 파티션
보면 내 컴퓨터의 C드라이브는 5개의 파티션이 있다.
포매팅
= 포맷하는 작업
= 파일 시스템을 설정 + 새로운 데이터를 쓸 준비
= 파일 시스템을 설정하여 어떻게 파일을 관리하고 저장할 것인지 결정 +
새로운 데이터를 쓸 준비를 하는 작업
파티셔닝과 포매팅을 마친 보조기억장치에 파일을 저장하는 방법
운영체는 파일과 디렉터리를 블록 단위로 읽고 쓴다.
이 블록에 파일과 디렉토리를 할당하는 방식은 아래와 같다.
가장 단순한 방식 앞서 배웠던 연속 메모리 할당과 똑같이 작동
따라서 똑같이 외부 단편화라는 단점이 존재
디렉터리 엔트리
파일이름 | 첫번째 블록 주소 | 길이 |
---|
LinkedList랑 비슷하다.
각 블록 일부에 다음 블록 주소를 저장하고 각 블록이 다음 블록을 가리키는 형태
따라서 파일들이 불연속적으로 흩어져 저장된다.
디렉터리 엔트리
파일이름 | 첫번째 블록 주소 | 길이 |
---|
단점
파일의 모든 블록 주소를 색인 블록이하는 하나의 블록에 모아 관리하는 방식이다. 저 하나의 블록을 색인 블록이라고 한다.
저 4번 색인 블록에는 7,13,11의 블록 주소가 저장되어 있다.
임의 접근 가능
i번째 데이터 블럭에 접근하려면 색인 블럭의 i번째 항목이 가리키는 블록에 접근하면 된다.
디렉터리 엔트리
파일이름 | 색인 블록 |
---|
연결 할당은 방식을 개선한 FAT 파일 시스템
최근까지 USB, SD 카드와 같은 저용량 저장 장치용 파일 시스템으로 많이 이용
각 블록에 포함된 다음 블록의 주소를 한데 모아서 테이블의 형태로 관리
이 테이블을 "파일 할당 테이블"(FAT:File Allocation Table)이라고 한다.
디렉터리 엔트리
파일이름 | 첫 번째 블록 주소 |
---|
+) 뒤에 파일 속성 정보가 붙는다
FAT 파일 시스템으로 설정된 파티션은 파티션의 앞 부분에 FAT를 저장한다.
파티션을 간략하게 도식화한 모습을 아래와 같다.
예약영역 | FAT 영역 | 루트 디렉터리 영역 | 데이터 영역 |
---|
색인 할당의 색인 블록 = 유닉스 파일 시스템은 이를 i-node
FAT 파일 시스템에 디렉터리 엔트리에 파일 속성 정보가 포함
➡️ 유닉스 파일 시스템은 i-node에 파일 속성 정보가 저장된다.
FAT 파일 시스템처럼 유닉스 파일 시스템을 설정한 파티션 내 특정 영역에 모여 있다.
예약영역 | i-node 영역 | 데이터 영역 |
---|
디렉터리 엔트리
i-node 번호 | 파일 이름 |
---|
아래와 같은 방법으로 저장된다
결국 아래와 같은 구조가 완성된다.