14-1. 연속 메모리 할당
스와핑, 최초 적합, 최적 적합, 최악 적합, 외부 단편화
기본적인 메모리 관리 기법인 스와핑과 메모리에 프로세스를 할당하는 방식, 연속 메모리 할당의 부작용인 외부 단편화
스와핑(swapping)
오랫동안 사용안된 프로세스들을 임시로 보조기억장치로 보내고 해당 메모리 공간에 다른 프로세스 실행하는 방식
✔️ 스왑 영역(swap space) : 프로세스들이 쫓겨나는 보조기억장치의 일부 영역
✔️ 스왑 아웃 : 프로세스가 스왑 영역으로 옮겨지는 것
✔️ 스왑 인 : 스왑 영역의 프로세스가 다시 메모리로 돌아오는 것
➡️ 스왑 인 될 때 스왑 아웃 전의 물리 주소와 다른 주소에 적재될 수 있다.
메모리 할당
연속적으로 메모리 할당
✔️ 최초 적합(first fit)
적재 가능한 공간 발견하는 순간 프로세스 배치
검색 결과 최소화하므로 빠르게 할당할 수 있다.
✔️ 최적 적합(best fit)
빈공간 모두 검색하고 적재될 수 있는 가장 작은 공간에 배치
✔️ 최악 적합(worst fit)
빈공간 모두 검색 후 적재될 수 있는 가장 큰 공간에 배치
외부 단편화(external fragmentation)
연속 메모리 할당 시 발생하는 문제
프로세스들이 실행되고 종료되는데 연속적으로 할당하다 보니 전체적으로는 남은 공간이 쪼개질 수 있다.
➡️ 쪼개지므로 프로세스를 할당할 수 없는 작은 메모리 공간들로 인해 메모리가 낭비된다.
📍메모리 용량도 크고, 적재되는 프로세스도 많으므로 꼭 해결해야 하는 문제이다.
❗️ 압축하기(compaction) : 메모리 조각들을 하나로 모으기
❓
- 작은 공간을 하나로 모으는 동안 시스템이 원래 하던 일 중단해야 함
- 메모리의 내용 옮기는 데 많은 오버헤드 발생
- 프로세스 옮길 때 오버헤드 최소화하며 압축해야 하는지 결정하기 어려움
❗️페이징 기법 이용해 해결! (오늘날까지 사용중)
📌 기본 문제
- 최초 적합 : 최초로 발견한 적재 가능한 빈 공간에 프로세스 배치
- 최악 적합 : 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스 배치
- 최적 적합 : 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스 배치
14-2. 페이징을 통한 가상 메모리 관리
페이징, 페이지 테이블, PTBR, TLB
페이징과 세그멘테이션을 통해 가상 메모리(virtual memory)를 관리하여 실행하고자 하는 프로세스의 일부만 메모리에 적재해 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있다.
페이징이란(paging)
프로세스의 논리주소공간을 페이지(page)라는 일정한 단위로 자르고, 메모리 물리주소공간을 페이지와 똑같은 일정한 크기로 자른 프레임(frame)에 페이지를 할당하는 가상 메모리 관리 기법
✔️ 스와핑 : 페이징을 사용하면 프로세스 전체가 스왑 인아웃 되는게 아니라 페이지 단위로 인아웃
- 페이지 아웃(page out) : 보조장치로 감
- 페이지 인(page in) : 다시 메모리로 컴백
➡️ 프로세스 실행 위해 전체가 적재될 필요가 없다. 필요한 일부 페이지만 메모리에 적재해 실행하기
페이지 테이블
페이지 번호 - 프레임 번호 짝지어줌 ; 어떤 페이지가 어떤 프레임이 할당됐는지 파악가능
메모리에 적재됨
❓ 프로세스가 메모리에 불연속적으로 배치되면 CPU가 순차적으로 실행하는 것이 어렵다(다음에 실행할 명령어 위치 찾기 어려움)
❗️ 페이지 테이블(page table) 이용 ➡️ 실제 메모리 주소인 물리 주소에는 불연속적으로 배치되더라도 CPU가 바라보는 주소인 논리 주소에는 연속적으로 배치되도록 할 수 있다.
📍페이징은 외부단편화 문제를 해결할 수 있는데 내부 단편화 문제를 야기할 수 있다.
프로세스가 커서 중간중간 빈 메모리에 담을 수 없는게 외부 단편화라면, 내부 단편화는 페이지크기보다 적은 크기가 적재될 때 발생한다.
- 페이지 크기가 작음 : 내부단편화 크기 작아지지만 페이지테이블이 커져 공간이 낭비
- 적당히 적당히 만드는 것이 중요
cpu내의 페이지 테이블 베이스 레지스터(PTBR) : 각 프로세스의 페이지 테이블이 적재된 주소 가리킴
각 프로세스들의 페이지 테이블 정보들은 PCB에 기록되고 문맥교환시 다른 레지스터와 함께 변경됨
❓ 페이지 테이블이 메모리에 적재되므로 페이지 테이블 확인, 프레임에 접근하기 이렇게 2번 메모리 접근이 필요해 시간이 늘어남
❗️ TLB(Translation Lookaside Buffer): 일반적으로 MMU내에 페이지 테이블의 캐시 메모리를 둔다.
- 페이지 번호가 TLB 존재: TLB 히트(TLB hit) ➡️ 메모리에 접근할 필요가 없음(1회만 접근)
- 없음: TLB 미스 ➡️ 기존과 동일하게 두번 접근해야함..
페이징에서의 주소 변환
[특정 주소에 접근하는 데 필요한 정보]
- 어떤 페이지 혹은 프레임에 접근하고 싶은지
- 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지
➡️ 페이징 시스템의 모든 논리 주소 = 기본적으로 페이지 번호(page number) + 변위(offset)
- 페이지 번호 : 페이지 테이블에서 페이지 번호를 찾으면 어떤 프레임에 할당됐는지 확인가능 ➡️ 프레임 번호
- 변위 : 접근하려는 주소가 프레임의 시작번지로부터 얼만큼 떨어져 있는지 확인가능 ➡️ 변위(물리주소)-논리주소와 같다
e.g.논리주소<5, 2>에 접근 원하는 경우
페이지 테이블을 통해 5번 페이지는 1번 프레임에 위치 ➡️ 1번 프레임의 변위 2에 접근하는데 1번 프레임은 8번지부터 시작되므로 8번지에서 2떨어진 10번지에 접근
➡️ 논리주소 <5, 2> 가 물리주소 <1, 2> 로 변환돼 10번지로 접근
페이지 테이블 엔트리(PTE; Page Table Entry)
페이지번호, 프레임번호뿐만 아니라 페이지테이블에는 유효 비트, 보호 비트, 참조 비트, 수정 비트등이 포함된다
✔️ 유효비트(valid bit)
현재 해당 페이지에 접근가능한지 여부 확인
프로세스를 이루는 모든 페이지가 메모리에 있지 않고 일부 페이지는 스왑영역에 있는 경우가 많다.
- 0 : 메모리 적재 X
- 1 : 메모리 적재됨
유효비트가 0인 페이지로 접근하려면 페이지 폴트(page fault) 예외 발생
- CPU 기존 작업 백업
- 페이지 폴트 처리 루틴 실행
- 페이지 처리 루틴은 원하는 페이지 메모리로 가져오고 유효비트 1로 변경
✔️ 보호 비트(protection bit)
페이지보호 기능; 읽고 쓰기가 가능한지, 읽기만 가능한지 등
r, w, x 각각 1이면 가능 0이면 불가능 이렇게 해서 110 000 111 이런식으로 표현 가능
✔️ 참조 비트(reference bit)
CPU가 이 페이지에 접근한 적 있는지 여부
- 읽거나 쓴 페이지 : 1
- 적재 이후 한번도 없음 : 0
✔️ 수정 비트(modified bit) = dirty bit
변경 여부
- 1 : 변경된 적 있음
- 0 : 변경된 적 없음
수정됐으면 보조기억장치의 저장된 내용과 메모리에 저장된 내용이 달라 스왑 아웃 시 변경된 값을 보조기억장치에 기록하는 작업이 추가
➡️ 이거 판단하려면 수정비트가 필요하다
14-3. 페이지 교체와 프레임 할당
요구 페이징, 페이지 교체 알고리즘, 스래싱, 프레임 할당
요구 페이징
처음부터 모든 메모리 적재하는 것이 아니라 필요한 페이지만 메모리에 적재하는 기법
- CPU가 특정 페이지에 접근하는 명령어 실행
- 해당 페이지의 유효 비트가 1이면 CPU는 페이지가 적재된 프레임에 접근
- 유효비트가 0이면 페이지 폴트 발생
- 페이지 폴트 처리 루틴으로 메모리에 적재하고 유효비트 1로 설정
✔️ 순수 요구 페이징: 아예 메모리에 적재안하고 실행해서 계속 페이지 폴트 발생한거 처리하는것(어느정도 적재되면 페이지 폴트발생빈도 감소)
요구 페이징 시스템의 안정적인 작동을 위해서 페이지 교체와 프레임할당을 해결해야 한다.
페이지 교체 알고리즘
메모리가 다 차면 적재된 페이지 중 보조기억장치로 내보낼 페이지 고르기
페이지폴트를 가장 적게 일으키는 알고리즘이 좋은 알고리즘이다. (보조기억장치로 필요한 페이지 가져오지 않아도 됨)
📍 페이지 폴트 횟수를 알야아 하는데 페이지 참조열을 통해 알 수 있다(연속된 페이지를 생략한 페이지열)
e.g. 2223444337 -> 23537
FIFO 페이지 교체 알고리즘
가장 먼저 올라온 페이지부터 out
❓ 자주 참조되는데 먼저 올라왔다고 내쫓길 수 있음
❗️ 2차 기회 페이지 교체 알고리즘 : 기본적으로 FIFO기반인데 참조비트1이면 내보내지 않고 0으로 만들고 현재 시간을 적재 시간으로 설정한다.
최적 페이지 교체 알고리즘
앞으로의 사용 빈도가 낮은 페이지를 교체
2313523423 -> 2 3 1 에서 5를 넣어야 하는데 1이 앞으로 안나오니까 1 out 시켜 5 넣는 식
➡️ 가장 낮은 페이지 폴트율 보장
❓ 실제 구현이 어렵다. 앞으로 사용 빈도 낮은 페이지 예측이 어렵다.
➡️ 그 자체로 운영체제에 사용하기보다는 다른 알고리즘의 이론상 성능을 평가하기 위해 사용된다
LRU 페이지 교체 알고리즘
오래 사용하지 않은 페이지 교체
2313523423 -> 2 3 1 에서 5 넣을 때 2가 가장 오랫동안 사용되지 않았으므로 2빼고 5
그다음은 3은 최근에 사용됐으니까 1 빼고 2 넣고 이런식
스래싱과 프레임 할당
프로세스가 사용할 수 있는 프레임 수가 적어도 페이지 폴트가 자주 발생한다.
✔️ 스레싱(thrashing): 프로세스가 실제 실행되는 시간보다 페이징에 시간이 더 걸려서 성능 저해되는 문제
✔️ 멀티프로그램의 정도: 메모리에서 동시 실행되는 프로세스 수
❓프로세스 수 늘린다고 해서 CPU 이용률이 비래해 커지지 않는다. 너무 많아지면 페이지폴트가 너무 많이 발생해 스레싱 발생!
정적 할당 방식
✔️ 비례 할당
크기가 큰 프로세스에 프레임 더 많이 할당 -> 물리 메모리의 크기만 고려하고 프로세스 실행 과정은 고려하지 않음
동적 할당 방식
프로세스 실행 보고 할당 프레임 수 결정
✔️ 작업 집합 모델(working set model)
- 프로세스가 일정 시간 동안 참조한 페이지 집합(작업 집합, working set)을 기억해 빈번한 페이지 교체 방지
- 어떤 프로세스가 3초에 7개 페이지 집중 참조 시 최소 7개 프레임 할당하기(작업 집합의 크기만큼)
- 프로세스가 참조한 페이지가 2 1 1 2 3 4 5 5 5 5 6 6 7 7 8 1 1 2 4 이고 일정 시간 간격이 7이면?
- 시간 t1에서의 작업 집합: {5, 6, 7} -> t1에 최소3개의 프레임 필요
- t2에서의 작업 집합: {1, 2, 4, 7, 8} -> t2에 최소 5개의 프레임 필요
✔️ 페이지 폴트 빈도(PFP)
[가정]
- 페이지 폴트율이 너무 높으면 그 프로세스는 너무 적은 프레임을 갖고 있다
- 페이지 폴트율이 너무 낮으면 그 프로세스는 너무 많은 프레임을 갖고 있다
상한선보다 높아지면 프레임을 더 할당하고 상한선보다 낮아지면 프레임 회수 -> 적장한 프레임 범위 안에서만 프레임 할당
📌 추가 숙제
프로세스가 사용할 수 있는 프레임이 세 개 있고, 페이지 참조열이 2 3 1 3 5 2 3 4 2 3 인 경우 LRU 알고리즘으로 페이지 참조 시 몇 번의 페이지 폴트가 발생?
- 2 3 1 참조
- 3 : 2가 가장 오래전 참조
- 5 : 2out시키고 5 in -> 5 3 1 ; 1이 가장 오래전 참조
- 2 : 1out시키고 2 in -> 5 3 2 ; 3이 가장 오래전 참조
- 3 : 5가 가장 오래전 참조
- 4 : 5out시키고 4 in -> 4 3 2 ; 2가 가장 오래전 참조
- 2 : 3이 가장 오래전 참조
- 3 : 4가 가장 오래전 참조
➡️ 총 3번의 페이지 폴트가 발생한다.
15-1. 파일과 디렉터리
파일, 확장자, 속성, 디렉토리, 경로, 절대경로, 상대경로
파일시스템은 파일과 디렉토리를 관리한다.
파일
HDD나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합
= 의미 있고 관련 잇는 정보를 모은 논리적 단위
- 이름
- 파일을 실행하기 위한 정보
- 피일 관련 부가 정보 : 속성(attribute) = 메타데이터(metadata)
파일 속성과 유형
- 속성 : 유형, 크기, 보호(접근제어), 생성 날짜, 마지막 접근 날짜, 마지막 수정 날짜, 생성자, 소유자, 위치
- 유형 : 운영체제가 인식하는 파일 종류
- 텍스트파일, 실행 파일, 음악 파일 등
- 유형을 알리기 위해 확장자(extension) 이용 : myfile.exe(실행파일!)
- 유형 : 운영체제가 인식하는 파일 종류
파일 연산을 위한 시스템 호출
파일을 다루는 모든 작업은 운영체제가 하는데 어떤 응용프로그램도 임의로 파일 조작하면 안되고 무조건 운영체제한테 맡겨야 한다.
➡️ 파일 연산을 위한 시스템 호출이 있다 (파일 생성, 삭제, 열기, 닫기, 읽기, 쓰기)
디렉토리(=폴더)
여러 계층을 가진 트리 구조 디렉토리(tree-structured directory) 사용
최상위 디렉토리(루트 디렉토리, /) ➡️ 서브 디렉토리(자식 디렉토리) ➡️ 서브 디렉토리⋯ . 경로를 알아야 접근할 수 있다
절대 경로(absolute path)
루트 디렉토리 ➡️ 자기자신까지의 경로
파일명이 같아도 루트 디렉토리부터 파일까지 경로(절대경로)가 다르기 때문에 공존 가능하다.
상대 경로(relative path)
현재 디렉토리부터 시작하는 경로
- . : 현재 작업 디렉토리
- .. : 현재 작업 디렉토리의 상위 디렉토리(부모 디렉토리)
./rabbit/b.c 이렇게 표현 가능
디렉토리 연산을 위한 시스템 호출
디렉토리 생성, 삭제, 열기, 닫기, 읽기
디렉토리 엔트리
파일 시스템과 상관없이 디렉토리 엔트리의 정보를 통해 디렉토리에 포함된 대상의 이름과 그 대상이 보조기억장치 내에 저장된 위치를 유추할 수 있다.
많은 운영체제는 디렉토리를 특별한 형태의 파일로 간주하므로 디렉토리도 파일이다.
- 파일 : 내부에 해당 파일과 관련된 정보
- 디렉토리 : 내부에 해당 디렉토리에 담겨 있는 대상과 관련된 정보 ➡️ 보조기억장치에 테이블 형태로 저장
📌 cd(change directory)명령 : 현재 작업 디렉토리 이동
15-2. 파일 시스템
파티셔닝, 포메팅, 연속 할당, 연결 할당, 색인 할당, FAT 파일 시스템, 유닉스 파일 시스템
파일 시스템이 파일과 디렉토리를 보조기억장치에 어떻게 할당하고 접근하는지에 관한 이론적인 내용과 종류
파티셔닝과 포매팅
새 하드 디스크나 SSD같은 보조기억장치에 파일을 생성하거나 저장하려면 파티션을 나누는 작업(파티셔닝)과 포맷 작업(포매팅)을 해야 한다.
파티셔닝(partitioning)
저장 장치의 논리적인 영역을 구획하는 작업 (서랍 안에 칸막이 설치하는 것처럼)
✔️ 파티션(partition) : 파티셔닝 작업을 통해 나누어진 영역
파티션마다 다른 파일 시스템을 사용할 수 있다.
포매팅(formatting)
파일 시스템을 설정해 어떤 방식으로 파일을 저장하고 관리할 것인지 결정
새로운 데이터를 쓸 준비
➡️ 포매팅으로 어떤 종류의 파일 시스템을 쓸건지가 결정!
포매팅까지 해서 파일 시스템을 설정했으면 파일과 디렉토리를 생성할 수 있다.
파일 할당 방법
✔️ 블록(block) : 운영체제가 파일과 디렉토리를 읽고 쓰는 단위
하드디스크의 가장 작은 저장 단위는 섹터인데 운영체제는 하나 이상의 섹터를 모아 블록으로 묶고 블록 단위로 파일과 디렉토리를 관리한다. (모든 섹터를 운영체제가 관리하는 것은 너무 힘들다)
- 연속 할당
- 불연속 할당 (오늘날 사용)
- 연결 할당
- 색인 할당
연속 할당(contiguous allocation)
연속적인 블록에 파일을 할당하는 방식
✔️ 알아야 하는 것
- 파일의 첫 번째 블록 주소
- 블록 단위의 길이
➡️ 디렉토리 엔트리에 위의 내용 명시
❓ 외부 단편화
파일이 삭제되면 중간 중간 빈 공간이 생기는데 연속 할당해야 하는데 크기가 빈 공간보다 크다면 할당이 어렵다.
연결 할당(linked allocation)
각 블록의 일부에 다음 블록의 주소를 저장해 각 블록이 다음 블록을 가리키는 형태로 할당하는 방식(포인터같은개념)
➡️ 파일을 이루는 데이터를 연결 리스트로 관리
마지막 블록에는 다음 블록이 없다는 특별한 표시자를 기록한다.
디렉토리 엔트리에는 연속 할당처럼 파일 이름, 첫번째 블록 주소, 블록 단위 길이 명시(마지막 블록 주소 명시할 수도 있음)
❓
- 반드시 첫 번째 블록부터 하나씩 차례대로 읽어야 함
- 임의 접근(random access) 속도가 매우 느림
- 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근이 어려움
- 블록에 다음 블록의 주소가 있으므로 해당 블록에 문제가 발생하면 이후 블록에 접근할 수 없음
❗️ 연결 할당을 변형한 대표적인 파일 시스템인 FAT 파일 시스템 사용
색인 할당(indexed allocation)
파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식
➡️ 임의의 위치에 접근하기 쉽다.
색인 할당을 사용하는 파일 시스템에서는 디렉토리 엔트리에 파일 이름과 색인 블록 주소를 명시한다.
e.g. 유닉스 파일 시스템
파일 시스템 살펴보기
- FAT 파일 시스템 : USB, 메모리, SD카드 등의 저용량 저장 장치에서 사용
- 유닉스 파일 시스템 : 유닉스 계열의 운영체제에서 사용
FAT 파일 시스템
✔️ 연결 할당 방식의 근본적인 문제: 다음 블록 주소를 블록에 저장하는 것
❗️ 파일 할당 테이블(FAT; File Allocation Table): 각 블록에 포함된 다음 블록의 주소들을 모아 테이블 형태로 관리
e.g. FAT12, FAT16, FAT32가 있는데 뒤의 숫자는 블록을 표현하는 비트 수이다.
✔️ FAT는 파티션의 앞부분에 만든다
예약 영역 | FAT 영역 | 루트 디렉토리 영역 | 데이터 영역 |
- 하드 디스크의 파티션을 FAT 파일 시스템으로 포맷하면 해당 파티션은 위와 같이 구성된다.
- FAT는 실행 도중 메모리에 캐시될 수 있는데, 그러면 기존 연결 할당보다 다음 블록 찾는 속도가 매우 빨라지고, 결과적으로 임의 접근 성능도 개선된다.
✔️ FAT 파일 시스템의 디렉토리 엔트리
파일 이름 | 확장자 | 속성 | 예약 영역 | 생성 시간 | 마지막 접근 시간 | 마지막 수정 시간 | 시작 블록 | 파일 크기 |
- 속성 : 파일이 읽기 전용인지 숨김 파일인지, 시스템 파일인지, 일반 파일인지, 디렉토리인지 등 식별 위한 것
📍/home/minchul/a.sh 파일 읽어보기
1. 루트 디렉토리 영역에서 루트 디렉토리에서 home디렉토리가 몇 번 블록에 있는지 확인
2. 데이터 영역의 home디렉토리에서 minchul디렉토리가 몇 번 블록에 있는지 확인
3. 데이터 영역의 minchul데릭토리에서 a.sh파일의 첫번째 블록 주소 확인
4. FAT 영역의 FAT에서 a.sh 파일이 9, 8, 11, 13번 순서로 저장되어 있는 것 확인 후 접근
유닉스 파일 시스템
색인 블록인 i-node(index-node)를 기반으로 파일의 데이터 블록들을 찾는다.
- FAT 파일 시스템 : 파일 속성 정보가 디렉토리 엔트리 안에 표현
- 유닉스 파일 시스템 : 파일 속성 정보가 i-node에 표현
예약 영역 | i-node 영역 | 데이터 영역 |
i-node는 기본적으로 열다섯 개의 블록 주소를 저장할 수 있어 크기가 유한하다. ➡️ 열다섯 개의 블록을 차지하는 파일까지 가리킬 수 있음
❓ 블록이 20개, 30개 이렇게 대형 파일인 경우에는..?
- i-node가 가리킬 수 있는 15개 블록 주소 중 처음 12개에는 파일 데이터가 저장된 블록 주소 직접적으로 명시
- 직접 블록(direct block) : 파일 데이터가 저장된 블록
- 이렇게 하는것만으로 괜찮으면 추가 작업 필요 없다
- 첫째 내용으로 충분하지 않다면 열세 번째 주소에 단일 간접 블록 주소를 저장한다.
- i-node의 13번째 블록 주소에 단일 간접 블록의 주소를 저장한다.
- 단일 간접 블록(single indirect block) : 파일 데이터를 저장한 블록 주소가 저장
- 이것만으로 충분하지 않으면 14번째 주소에 이중 간접 주소 블록 주소를 저장한다.
- 14번째 블록 주소에 이중 간접 블록 주소를 저장한다.
- 이중 간접 블록(double indirect block) : 데이터 블록의 주소를 저장하는 블록 주소(단일 간접 블록)가 저장된 블록
- 또 충분하지 않으면 열다섯 번째 주소에 삼중 간접 블록 주소를 저장한다.
- 삼중 간접 블록(triple indirect block) : 이중 간접 블록 주소가 저장된 블록
➡️ i-node만 알면 파일 속성 + 파일 데이터 모두 가리킬 수 있다.
유닉스 파일 시스템은 루트 디렉토리의 i-node를 항상 기억하고 있다.
✔️ 유닉스 파일 시스템의 디렉토리 엔트리
i-node 번호 | 파일 이름 |
📍 /home/minchul/a.sh 에서 파일 읽어오기
- i-node 영역의 2번 i-node에 접근해 루트 디렉토리 위치 파악(루트 디렉토리는 1번 블록에 있음)
- 데이터 영역의 루트 디렉토리를 보면 home 디렉토리의 i-node 번호가 3번인 것을 확인할 수 있다.
- i-node영역의 3번 i-node에 접근해 home 디렉토리 위치가 210번 블록임을 확인한다.
- 210번 블록을 읽으면 home 디렉토리 내용을 볼 수 있는데 minchul 디렉토리의 i-node가 8번임을 확인한다.
- i-node 영역의 8번 i-node에 접근하여 minchul 디렉토리의 위치를 파악한다. 121번 블록에 있다.
- 121번 블록을 읽으면 minchul 디렉토리의 내용을 알 수 있다. 파일 a.sh의 i-node는 9번이다.
- 9번 i-node에 접근해 a.sh의 위치를 파악한다. 98, 12, 13 블록
- 파일 시스템은 9번, 12번 13번 블록에 접근하면 a.sh를 읽을 수 있다.
그 밖에도 NT파일시스템, ext 파일 시스템 등이 있다.
저널링 파일 시스템
저널링 기법(journaling)
작업 로그를 통해 시스템 크래시(컴퓨터 강제종료)가 발생했을 때 빠르게 복구 위한 방법
- 작업 직전 파티션의 로그 영역에 수행하는 작업(변경 사항)에 대한 로그를 남긴다.
- 로그를 남긴 후 작업을 수행한다.
- 작업이 끝났으면 로그를 삭제한다.
예약 영역 | 로그 영역 | i-node 영역 | 데이터 영역 |
➡️ 다시 부팅 시 파일 시스템 전체를 검사할 필요 없이 로그 영역에 남긴 로그만 검사해도 됨
마운트
한 저장 장치의 파일 시스템에서 다른 저장 장치의 파일 시스템에 접근할 수 있도록 파일 시스템을 편입시키는 작업
➡️ USB메모리의 파일 시스템을 /mnt 경로에 마운트하면 /mnt 경로를 통해 USB 메모리에 접근할 수 있다.
e.g. /mnt/homework/os/a.cpp
끝!
'CS > 혼자 공부하는 컴퓨터 구조 + 운영체제' 카테고리의 다른 글
[혼공학습단 13기] 완주 회고 (0) | 2025.02.23 |
---|---|
[혼공학습단 13기] 5주차 : 프로세스 동기화 | 교착 상태 (0) | 2025.02.13 |
[혼공학습단 13기] 4주차 : 운영체제 시작하기 | 프로세스와 스레드 | CPU 스케쥴링 (0) | 2025.02.07 |
[혼공학습단 13기] 3주차 : 메모리와 캐시 메모리 | 보조기억장치 | 입출력장치 (0) | 2025.01.20 |
[혼공학습단 13기] 2주차 : CPU의 작동 원리 | CPU 성능 향상 기법 (0) | 2025.01.19 |