혼공학습단13기 6주차 활동의 일환으로 혼자공부하는 컴퓨터구조 + 운영체제 학습 내용을 정리해보는 포스팅입니다.
오늘은 챕터14 가상 메모리, 챕터15 파일 시스템에 대해 학습해보려고 합니다.
[목차]
1. 가상 메모리
1) 연속 메모리 할당
메모리에 프로세스들이 배치되는 걸 상상하면
보통 연속적으로 배치되는 상상이 됩니다.
이를 연속 메모리 할당 방식이라 합니다.
이 메모리에 올라간 프로세스들 중,
대기가 긴 프로세스, 오랫동안 안 쓰는 프로세스 등은
정리를 해주는 것이 효율적이겠죠?
그래서 이런 프로세스들을 보조기억장치 일부 영역으로 쫓아내고
메모리에 생긴 빈 공간에 다른 프로세스를 적재하여
실행하는 방식을 스와핑이라고 합니다.
보조장치 일부 영역은 스왑 영역이라 하고,
메모리에서 스왑 영역으로 프로세스가 옮겨지는 것을
스왑 아웃이라 합니다.
반대로 스왑 영역에서 메모리로 프로세스가
옮겨지는 것을 스왑 인이라고 합니다.
스와핑 덕분에 프로세스들이 요구하는 메모리 공간 크기가
실제 공간보다 커도 프로세스들을 실행할 수 있습니다.
참고로 유닉스에서 free, top 명령어로 Swap 영역을 확인할 수 있습니다.
회사에서 가끔 모니터링 메일로 Swap영역이 90%이상 찼다는
메일이 날라오는데요.
그때는 잘 이해를 못했는데 이제 좀 이해되네요!
위에서 메모리를 할당하는 방식인 연속 메모리 할당 방식에는
최초 적합, 최적 적합, 최악 적합 3가지 방식이 있습니다.
최초 적합은 프로세스가 메모리에 들어가고 싶을 때,
순서대로 빈 공간을 찾다가 첫번째 빈 공간에 적재되는 방식입니다.
메모리 빈공간 검색을 최소화할 수 있고 빠른 할당이 가능합니다.
최적 적합은 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에
프로세스를 배치합니다. 말 그대로 최적으로 적재합니다.
최악 적합은 반대로 가장 큰 공간에 배치하는 방식입니다.
이런 연속 메모리 할당 방식은 사실 문제를 갖고 있습니다.
프로세스A,B,C,D,E가 연속으로 적재된 메모리에서 B,D가 종료되어
메모리를 떠나면 B,D 공간이 남습니다.
B 공간이 30MB, D공간이 20MB라고 가정합니다.
그러면 50MB의 프로세스를 적재할 수 있을까요?
적재 할 수 없습니다...이를 외부 단편화라고 합니다!
이를 해결할 방법으로 메모리를 압축하는 방식이 있습니다.
빈 공간들을 하다로 모으는 방식입니다.
그러나 이 과정에서 시스템은 하던 일을 중지해야 하며
메모리 내용을 옮기는 작업은 많은 오버헤드를 야기합니다.
위의 문제를 해결하기 위해 다른 해결방안이 등장했고,
지금부터 배울 가상 메모리 기법, 페이징 기법입니다.
즉, 메모리 외부 단편화 문제 해결은 압축, 페이징기법이 있고
압축의 문제를 해결하기 위해 페이징기법이 등장했다고
이해하면 될 것 같습니다!
2) 페이징을 통한 가상 메모리 관리
앞에서 본 연속 메모리 할당은 외부 단편화 이외에도
물리 메모리보다 큰 프로세스를 실행할 수 없다는 문제가 있습니다.
4GB메모리가 설치된 컴퓨터는 4GB 프로그램을 적재할 수 없습니다.
가상메모리란 실행하고자 하는 프로그램 중 일부만 메모리 적재를 하여
실제 물리메모리보다 더 큰 프로세스를 실행하는 기술입니다.
가상 메모리 기술 중 페이징 기법을 다루려고 합니다.
메모리와 프로세스를 일정한 단위로 자르고, 이를 메모리에
불연속 할당을 할 수 있으면 외부단편화 문제를 해결할 수 있습니다.
이를 페이징 기법이라 하며, 프로세스 논리 주소 공간을 페이지라는
일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임이라는
일정 크기로 잘라서 페이지를 프레임에 할당하는 기법입니다.
연속 메모리 할당에서 알아본 스와핑이 페이징에서도 적용됩니다.
다만, 페이징에서는 프로세스 단위로 스왑 인,스왑 아웃이 아니라
페이지 단위로 페이지 인, 페이지 아웃이라고 부릅니다.
프로세스의 페이지 중에 실제 실행에 필요한 페이지만 적재하고,
당장 실행에 필요없는 페이지들은 보조기억장치에 남겨둘 수 있어서
물리 메모리보다 더 큰 프로세스들을 실행할 수 있습니다.
그런데 이 프로세스가 메모리에 불연속 배치되어 있으면
CPU는 이를 어떻게 알 수 있을까요?
예를 들어 프로세스A를 실행하려고 했는데 A의 페이지들이
메모리 어디에 적재되어 있는지 알기가 어렵습니다.
이를 해결하기 위해 페이징 시스템은 페이지 테이블을 사용합니다.
이것은 페이지번호와 프레임번호를 짝지어 주는 테이블이고,
CPU는 페이지번호만 보고 프레임을 찾을 수 있게 합니다.
프로세스마다 페이지 테이블이 있습니다.
그러면 페이징은 완벽할까요? 외부 단편화 문제는 없지만
내부 단편화 문제가 발생할 수 있습니다.
페이지의 배수가 프로세스 크기와 딱 맞게 떨어지지는 않습니다.
108KB 프로그램을 10KB씩 나누면 8KB는 2KB가 남습니다.
이를 적재하면 메모리에서 결국 2KB의 공간이 남고 이것이
내부 단편화입니다.
페이지 크기를 작게 설정하면 내부단편화 크기는 그만큼 줄어듭니다.
그러나 그만큼 페이지 테이블이 커지기 때문에 이를 적절히 조절해줘야 합니다.
프로세스별 페이지 테이블은 메모리에 적재가 되어 있습니다.
CPU 내의 페이지 테이블 베이스 레지스터(PTBR)은 각 프로세스의
페이지 테이블이 적재된 주소를 가리킵니다.
CPU는 PTBR을 통해 메모리의 페이지 테이블에 접근,
그리고 페이지 테이블을 보고 프레임에 접근합니다.
메모리에 2번 접근하기 때문에 문제가 있습니다.
이를 해결하기 위해 CPU 곁에 TLB라는 페이지 테이블 캐시 메모리를 둡니다.
TLB는 페이지 테이블 일부 내용을 저장합니다.
참조 지역성에 근거해 주로 최근에 사용된 페이지 위주로 저장합니다.
CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있으면
TLB 히트라고 합니다. 페이지 테이블을 찾으려고 메모리 접근할 필요가 없습니다.
반대로 TLB에 페이지 번호가 없을 경우, 메모리 2번 접근을 할 수 밖에 없습니다.
이를 TLB 미스라고 합니다.
하나의 페이지, 하나의 프레임은 여러 주소를 포괄하고 있습니다.
예를 들어 CPU가 프로세스 A의 페이지 2에서 10만큼 떨어진 주소로 접근하려고 합니다.
그래서 페이징 시스템은 모든 논리 주소가 페이지 번호+변위(Offset)로 이루어져 있습니다.
CPU가 32비트 주소를 내보냈다면 N비트는 페이지 번호, 32-N은 변위입니다.
페이지 번호를 통해 페이지 테이블의 해당 페이지 번호를 찾으면 어떤 프레임에 할당되었는지
알 수 있습니다. 이 프레임에서 변위만큼 떨어진 곳이 CPU가 접근을 원했던 주소가 됩니다.
아래와 같이 이해할 수 있습니다.
CPU → [페이지번호,변위] → 페이지테이블 → [프레임번호,변위] → 메모리
페이지 테이블을 좀 더 자세히 알아보려고 합니다.
페이지 테이블의 각 row를 페이지 테이블 엔트리라고 합니다.
실제로 페이지번호,프레임번호뿐만 아니라,
유효 비트, 보호 비트, 참조 비트, 수정 비트라는 정보도 담깁니다.
유효 비트는 현재 해당 페이지 접근 가능 여부를 알 수 있습니다.
모든 페이지가 메모리에 있지는 않습니다. 현재 메모리에 적재되어 있으면
유효비트 1, 그게 아니면 0으로 표기합니다.
CPU가 메모리에 적재 안 된 페이지(유효비트 0)로 접근하려고 하면
페이지 폴트(예외)가 발생합니다.
이 과정은 다음과 같습니다.
- 페이지 폴트 발생시, CPU가 기존 작업 내역 백업
- 페이지 폴트 처리 루틴 실행. 원하는 페이지를 메모리로 가져온 옴
- 유효비트1로 변경해줌
- CPU가 정상적으로 페이지 접근
보호 비트는 페이지 보호 기능을 위해 존재합니다.
읽고 쓰기가 모두 가능한 페이지인지, 읽기만 가능한 페이지인지 나타냅니다.
비트가 0이면 읽기만 가능하고, 1일 경우 쓰기도 가능합니다.
앞에 프로세스 학습할 때 코드 영역은 읽기 전용 영역이라고 설명했는데,
이런 읽기 전용 페이지에 쓰기를 시도하면 운영체제가 이를 막아줍니다.
보호비트는 3개로 구성해서 리눅스에서 쓰듯이 r,w,x로 나타낼 수도 있습니다.
참조 비트는 CPU가 페이지에 접근한 적이 있는지 여부를 나타냅니다.
적재 이후 읽거나 쓴 페이지는 참조비트1, 그게 아니면 참조비트0으로
나타낼 수 있습니다.
수정 비트는 해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부를 알려줍니다.
수정비트는 페이지가 메모리에서 페이지 아웃될 때 보조기억장치에 쓰기작업을 해야할지,
할필요가 없는지 판단하기 위해 사용합니다.
수정 비트가 1이라면, 기존 페이지가 수정되었기 때문에 보조기억장치에 저장된 페이지와
내용이 다르기 때문에 보조기억장치에 기록 작업이 추가되어야 합니다.
<추가 학습-계층적 페이징>
페이지 테이블 크기는 꽤 클 수 있기 때문에
프로세스를 이루는 모든 페이지 테이블 엔트리를 메모리에 유지하는 것은
효율적이지 않습니다.
그래서 페이지 테이블을 또 페이징하여 여러 단계의 페이지를 둘 수 있는데,
이를 계층적 페이징, 다단계 페이지 테이블 기법이라고 합니다.
OUTER 페이지 테이블을 두고, 이 페이지 테이블의 각 페이지에 또
페이지 테이블을 연결시키는 방식입니다.
그래서 OUTER 페이지 테이블만 메모리에 유지하면 모든 프레임을
찾아갈 수 있습니다.
3) 페이지 교체와 프레임 할당
프로세스 적재 시, 실행에 필요한 페이지만 적재하는 기법을
요구 페이징이라고 합니다.
참고로 아무런 프로세스 페이지도 적재하지 않고 실행할 수도 있습니다.
그러면 첫 명령어를 실행하는 순간부터 페이지 폴드가 발생하고,
실행에 필요한 페이지가 어느 정도 적재된 이후부터
페이지 폴트 발생 빈도가 떨어집니다.
이를 순수 요구 페이징이라고 합니다.
요구 페이징 기법 사용시 페이지 교체(페이지인,페이지아웃)와
프레임 할당 등이 원활해야 하며, 이것을 결정하는 것이
페이지 교체 알고리즘입니다.
좋은 페이지 교체 알고리즘은 페이지 폴트를 가장 적게 일으킵니다.
그래서 페이지 폴트 횟수로 평가할 수 있습니다.
우선 FIFO 페이지 교체 알고리즘이 있습니다.
FIFO(First In, First Out)는 큐 자료구조에서 배울 수 있는 내용으로
해석 그대로 처음 들어간 데이터가 처음으로 나가는 방식입니다.
페이지 교체 알고리즘에서는 메모리에 가장 먼저 적재된 페이지부터
메모리 바깥으로 나가는 방식입니다.
프레임이 3개, 페이지 참조열이 2,3,1,3,5,2,3,4,2,3이라고 가정합시다.
처음에 2,3,1이 순서대로 올라갑니다. 다음의 3은 이미 적재되어 있으므로
메모리에 적재할 필요가 없습니다. 그 다음 5는 어떻게 해야할까요?
프레임이 3개밖에 없기 때문에 2,3,1중 하나를 내보내야 합니다.
이 알고리즘에 기반하면 처음 들어간 2가 나가고 그 자리를 5로 적재합니다.
이런식의 알고리즘입니다!
단점은 먼저 들어온 것이 실제로 프로그램 실행 내내 사용될 내용을 포함할 수 있기에
비효율적인 페이지 인, 페이지 아웃이 발생할 수 있다는 점입니다.
이를 해결하기 위해 2차 기회 페이지 알고리즘이 나왔습니다.
참조 비트를 참고하여, 참조된적이 있으면 먼저들어왔더라도 한 번 더 기회를 줘서
메모리 맨 뒤로 보내고 참조비트를 0으로 변경시킵니다.
다음으로 최적 페이지 교체 알고리즘이 있습니다.
앞으로의 사용 빈도가 가장 낮은 페이지를 교체하는 알고리즘입니다.
2,3,1,3,5,2,3,4,2,3 페이지 참조열이 있다고 했을 때 먼저 2,3,1을 적재합니다.
그리고 5가 새로 적재되어야 할때, 1이 한번밖에 안 쓰이기 때문에 1을 페이지 아웃하고
5를 적재합니다.
가장 낮은 페이지 폴트율을 보장하나, 실제 구현이 어렵습니다.
말그대로 '앞으로' 오랫동안 사용 안 될 페이지를 예측하는 것이 어렵기 때문입니다.
그래서 성능 평가 목적으로 보통 사용되며, 다른 페이지 교체 알고리즘의 비교군으로
사용됩니다.
마지막으로 LRU 페이지 교체 알고리즘은 최적 페이지 교체 알고리즘과 비슷한데
구현은 좀 더 쉬운 알고리즘입니다. 가장 오랫동안 사용되지 '않은' 페이지를 교체하는
알고리즘입니다.
최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을 것이라는 생각에서 만들어졌습니다.
이외에도 다양한 알고리즘이 있으나, 기본적으로 위의 아이디어들을 숙지해두면 좋을 것 같습니다.
그리고 페이지 폴트가 자주 발생하는 이유에 페이지 알고리즘만 있는 것은 아니며,
프로세스가 사용할 수 있는 프레임 수가 적어도 자주 발생합니다.
이것이 더 근본적인 이유라고 합니다.
프레임이 부족하면 CPU는 페이지폴트를 자주 발생시키고,
CPU 이용률도 떨어집니다. 프로세스가 실제로 실행 되는 시간보다
페이징에 더 시간을 소요하여 성능 저하가 되는 문제를 스레싱이라고 합니다.
그래서 운영체제들이 프로세스들에 적절한 수만큼 프레임을 할당해 줄 수 있어야 하는데,
이를 프레임 할당 방식이라고 합니다.
모든 프로세스에 균등하게 프레임을 할당하는 방식은 균등 할당이라고 합니다.
프로세스마다 크기가 다른데 이런 방식은 사실 비효율적입니다.
그래서 프로세스 크기에 비례해서 할당하는 비례 할당 방식도 있습니다.
그러나 실제로는 프로세스 별로 실행 빈도가 다르기 때문에 이것도 그리 효율적이지 않습니다.
그래서 실행하는 과정에서 배분할 프레임을 결정하는 방식을 사용할 수 있는데,
작업 집합 모델을 사용하는 방식 페이지 폴트 빈도 방식이 있습니다.
전자는 프로세스가 일정 기간 동안 참조한 페이지 집합을 기억하여
빈번한 페이지 교체를 방지하는 방식이고, 실행 중인 프로세스가
일정 시간 동안 참조한 페이지 집합을 작업집합이라고 합니다.
페이지 폴트 기반 방식은 페이지 폴트율을 기반으로 평가하는 방식입니다.
페이지 폴트율이 높으면 프레임할당이 너무 적다는 것이고,
페이지 폴트율이 낮으면 프레임할당이 너무 많다고 판단할 수 있습니다.
이를 그래프로 그려서 상한선, 하한선을 그려서 상하한선 범위 내에서만
프레임을 할당하는 방식입니다.
2. 파일 시스템
1) 파일과 디렉터리
흔히 말하는 파일은 하드 디스크, SSD같은 곳에 저장된
관련 정보 집합을 의미합니다.
모든 파일은 부가정보(메타데이터)가 있습니다.
파일 속성에는 유형, 크기, 보호, 생성 날짜 등이 있습니다.
여기서 주의 깊게 볼 속성은 유형이 있는데요.
유형란에서 확장자를 확인할 수 있습니다.
운영체제가 파일 유형을 인식하기 위해서는 확장자를 봐야하며,
이 확장자를 토대로 운영체제가 실행할 수 있습니다.
운영체제는 파일 연산을 위해 시스템호출을 제공하는데
파일 생성, 삭제, 열기, 닫기, 읽기, 쓰기 등이 있습니다.
그리고 파일 이외에도 디렉터리가 있는데 윈도우의 폴더를 말합니다.
옛날에는 1단계 디렉터리라고 해서 모든 파일이 하나의 디렉터리 아래에
모여있었습니다.
지금은 트리 구조 디렉터리를 이용합니다.
트리구조에서는 최상위 디렉터리(/)가 있고
그 아래 서브 디렉터리와 파일이 있습니다.
최상위 디렉터리를 루트 디렉터리라고 하며
슬래시(/)로 표현됩니다.
트리구조 디렉터리가 생기면서 자연스럽게 경로(Path)가 생겼습니다.
이 경로는 매일 헷깔리는 절대경로와 상대경로로 구분됩니다.
절대경로는 루트 디렉터리부터의 경로를 말하며,
상대경로는 현재 디렉터리부터 시작하는 경로를 말합니다.
디렉터리 연산을 위한 호출도 파일과 동일하게 읽기, 쓰기 등이 있습니다.
디렉터리는 실제로 특별한 형태의 파일이라 볼 수 있으며,
디렉터리 내부 정보는 테이블 형태로 구성되어 있습니다.(보조기억장치에)
디렉터리 테이블의 디렉터리 엔트리(row)가 공통으로 포함하는 정보는
디렉터리에 포함된 대상(파일) 이름, 위치 유추 정보입니다.
2) 파일 시스템
여기서 배우는 파일 시스템이란 앞에서 배운 파일, 디렉터리 등을
효율적으로 보조기억장치에 저장하고 접근할 수 있게 하는
운영체제 프로그램을 뜻합니다.
우선 파티셔닝과 포매팅 개념에 대해 알아봅시다.
공장초기화 상태의 하드디스크,SSD에 우리는 파일을 생성하거나
저장할 수 없습니다.
이것을 사용하려면 파티션을 나누는 파티셔닝과
포맷 작업을 거쳐야 합니다.
파티셔닝은 저장 장치의 논리적인 영역을 구획하는 작업으로,
서랍에 구획칸막이를 놓는 상상을 해보면 될 것 같습니다.
파티셔닝을 통해 나눠진 영역을 파티션이라고 합니다.
포맷팅이란 일반적으로 하드디스크 데이터를 다 삭제한다는
의미로 많이 쓰이는데 실제로 파일 시스템을 설정하여
어떤 방식으로 파일을 저장,관리할지를 결정하는 작업입니다.
참고로 파티션마다 다른 파일 시스템을 사용할 수 있습니다.
파티셔닝, 포매팅이 끝나면 파일을 저장할 수 있습니다.
운영체제는 파일을 블록 단위로 읽고 씁니다.
하나의 파일이 보조기억장치에 저장될 때 하나 이상의 블록에
걸쳐서 저장됩니다.
하드디스크의 가장 작은 저장단위는 섹터지만, 운영체제는
블록단위로 관리합니다.
파일을 보조기억장치에 할당하는 방법은 크게
연속 할당, 불연속 할당이 있습니다.
불연속 할당은 다시 연결 할당과 색인 할당으로 나뉩니다.
먼저 연속 할당은 말 그대로 단순하게 연속적인 블록에
파일을 할당하는 방식입니다.
연속 할당 파일에 접근하려면 첫번째 블록주소와 블록단위 길이만
알면 됩니다.
그러나 단점이 있는데 외부 단편화를 초래할 수 있습니다.
연속할당 문제를 해결하기 위해 연결할당 방식을 사용할 수도 있습니다.
이는 블록에 다음 블록 주소를 저장하여 링크드 리스트 자료구조로
관리할 수 있는 방식입니다.(C의 포인터 개념을 생각하면 될 것 같습니다)
이 방법은 그러나 단점이 있는데 첫번째 블록을 하나씩 차례대로 읽어야 한다는 점과
블록에 오류가 발생하면 해당 블록 이후 블록을 읽을 수 없다는 단점이 있습니다.
그래서 위의 방식을 조금 변형하여 사용하는데 그것이 유명한 FAT 파일 시스템입니다.
FAT를 알아보기 전에, 색인 할당을 먼저 알아보겠습니다.
색인 할당은 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리합니다.
예를들어 보조기억장치에 색인블록이 4번이라면,
4번 블록에 다음 블록 주소 7,13,11이 있는 방식입니다.
연결할당과 다르게 임의 위치에 접근하기 쉽습니다.
색인 블록만 알면 해당 파일 데이터에 접근할 수 있습니다.
이 방식을 사용하면 디렉터리 엔트리 안에 색인 블록을 명시해줘야 합니다.
색인할당을 기반으로 만든 파일 시스템이 유닉스 파일 시스템입니다.
이제 실제로 많이 사용되는 FAT 파일 시스템과 유닉스 파일 시스템을 알아보겠습니다.
저용량 저장 장치(USB, SD카드 등)에는 보통 FAT 파일 시스템이 사용 되고,
유닉스 계열 운영체제에서는 유닉스 파일 시스템이 사용됩니다.
FAT 파일 시스템은 연결 할당의 단점을 보완했는데,
파일 할당 테이블(FAT: File Allocation Table)이라는 곳에
각 블록에 포함된 다음 블록 주소들을 한데 모아 관리합니다.
예전 MS-DOS 등에서 사용되었습니다.
버전에 따라 FAT12, FAT16, FAT32 등이 있습니다.
참고로 윈도우에서는 블록 대신 클러스터라는 용어를 씁니다.
FAT는 파티션에서 앞부분에 만들어집니다.
이 FAT가 메모리에 캐시가 될 수 있는데,
그러면 기존 연결 할당보다 다음 블록을 찾는
속도가 더 빨라집니다.
FAT에서 디렉터리 엔트리에는 첫번째 블록 주소가 명시되는데,
실제로 다양한 속성 정보들(파일 이름, 확장자, 시작블록, 파일크기 등)이 명시됩니다.
다음으로 살펴볼 유닉스 파일 시스템은 색인 할당 기반의 시스템입니다.
이 시스템에서는 색인 블록 대신 i-node(index-node)를 사용합니다.
i-node에는 파일 속성 정보와 15개의 블록 주소가 저장될 수 있습니다.
FAT 시스템에서는 속성 정보가 디렉터리 엔트리에 표현되었으나,
유닉스 파일 시스템에서는 파일 속성 정보는 i-node에 표현됩니다.
i-node는 15개 블록까지 저장이 가능해서 실제로 그 이상의 블록을 저장할 수 없습니다.
그래서 실제로 다음과 같은 순서로 저장됩니다.
우선 15개 블록중 12개 블록까지는 파일 데이터가 저장된 블록주소가
직접 명시됩니다.(파일데이터가 저장된 블록을 직접 블록이라고 함)
이것만으로 파일 블록을 다 가리킬 수 있다면 추가 작업은 필요 없습니다.
12개 블록만으로 충분하지 않으면 13번째 블록에
단일 간접 블록 주소를 저장합니다.
이 주소에 접근하면 파일데이터가 아닌
파일데이터를 저장한 블록주소가 저장된 블록에 접근합니다.
위 내용으로 충분하지 않으면 14번째 주소에 이중 간접 블록 주소를 저장합니다.
이거로도 부족하면 15번째 주소에 삼중 간접 블록 주소를 저장합니다.
이를 통해 모든 파일을 표현할 수 있습니다.
유닉스 파일 시스템에서는 디렉터리 엔트리도 파일이름과 i-node 번호로 구성되어 있습니다.
지금까지 모든 파일 시스템을 알아봤는데요.
사실 이외에도 윈도우에서 사용되는 NT파일시스템(NTFS)와 리눅스에서 사용되는
ext 파일 시스템 등이 있습니다.
<추가 학습-저널링 파일 시스템>
파일 시스템 변경 도중, 컴퓨터 사용 중 전원이 나가거나 강제 종료 되면
시스템 크래시가 발생할 수 있습니다.
저널링 파일 시스템이 있기 전에는 리눅스,유닉스에서는 fsck, 윈도우에서 scandisk 등
프로그램을 실행해서 파일 시스템을 검사 후 복구했는데 굉장히 느렸습니다.
지금은 저널링 파일 시스템이 등장해서 저널링 기법으로 작업로그를 통해
시스템 크래시를 빠르게 복구합니다.
윈도우 NTFS와 리눅스 ext3,ext4 파일 시스템 모두 저널링 기능을 지원합니다.
<추가 학습-마운트>
굉장히 자주 듣는 용어이지만 실제로 정확히 설명하기 어려운
용어중 하나였는데요.
이 책을 통해 알게 되었습니다.
마운트는 한 저장 장치의 파일 시스템에서 다른 저장 장치 파일 시스템에 접근할 수 있도록
파일 시스템을 편입시키는 작업을 말합니다.
USB메모리가 있고 이를 컴퓨터의 /mnt 경로에 마운트하면 /mnt 경로에 USB 메모리 파일시스템이
연결됩니다. 즉, /mnt 경로를 통해 USB 메모리에 접근 가능합니다.
유닉스, 리눅스에서는 mount 명령어로 마운트합니다.
3. 마무리
드디어 6주차 포스팅과 혼자공부하는 컴퓨터구조와 운영체제 학습을 마무리 했습니다!
오늘이 마감 날이라 과연 가능할지 조금 의문이었으나,
오전에 카페에서 몰입해서 약 2시간30분 정도 동안 포스팅을 진행하고 완료했네요.
최근 황농문 교수님의 몰입 책을 보면서 몰입력을 높이는 중인데
도움이 좀 되는 것 같습니다 ㅎㅎ
사실 혼공학습단이 없어도 책을 사서 한 번 정리하려고 하긴 했는데,
혼공학습단이 없었다면 아마 1달 내로 정리는 불가능 했을 것 같습니다.
혼공학습단 스터디와 족장님의 멱살잡이(?)를 통해 무사히 마무리할 수 있어서
감사합니다.
다음에도 관심 있는 스터디와 기회가 된다면 또 참여해보고 싶네요.
숙제를 인증하며 마무리합니다. 감사합니다!
'개발자 일지 > 컴퓨터구조, 운영체제' 카테고리의 다른 글
[혼공컴운] 혼공학습단13기 활동 회고 (0) | 2025.02.19 |
---|---|
[혼공컴운] 5주차 프로세스 동기화, 교착상태 (0) | 2025.02.14 |
[혼공컴운] 4주차 운영체제 시작하기, 프로세스와 스레드, CPU 스케줄링 (0) | 2025.02.09 |
[혼공컴운] 3주차 메모리와 캐시 메모리, 보조기억장치, 입출력장치 (0) | 2025.01.19 |
[혼공컴운] 2주차 CPU의 작동 원리, CPU 성능 향상 기법 정리 (0) | 2025.01.14 |
[혼공컴운] 1주차 컴퓨터 구조 시작하기, 데이터, 명령어 정리 (0) | 2025.01.09 |