✍️기본 미션
p. 400의 확인 문제 1번 풀고 인증하기

✍️선택미션
Ch.14(14-3) 프로세스가 사용할 수 있는 프레임이 3개 있고, 페이지 참조열이 '2313523423' 일 때 LRU 페이지 교체 알고리즘으로 이 페이지를 참조한다면 몇 번의 페이지 폴트가 발생하는지 풀어보기
2 3 1 -> 5 3 1 -> 5 3 2 -> 4 3 2 로 변화하는 과정에서 3번의 페이지 폴트가 발생한다.
🗒️내용 정리
Chap14. 가상 메모리
14.1 *연속 메모리 할당
* 프로세스에 연속적인 메모리 공간을 할당하는 방식
1) 스와핑 (swaping)
- 현재 실행되지 않는 프로세스들을 임시로 보조기억장치 일부 영역으로 쫓아내고, 그렇게 해서 생긴 메모리상의 빈 공간에 또 다른 프로세스를 적재해 실행하는 방식
- 스왑 영역 (swap space) : 프로세스들이 쫓겨나는 보조기억장치의 일부 영역
- 스왑 아웃 (swap out) : 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
- 스왑 인 (swap in) : 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것
- 프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메모리 크기보다 큰 경우에도 프로세스들을 동시에 실행 가능하다.
2) 메모리 할당
(1) 최초 적합 (first fit)
- 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스 배치
- 검색을 최소화할 수 있고, 빠른 할당이 가능하다.
(2) 최적 적합 (best fit)
- 운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치한다.
(3) 최악 적합 (worst fit)
- 운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치한다.
3) 외부 단편화 (external fragmentation)
- 연속 메모리 할당은 외부 단편화 문제를 내포한다.
- 프로세스들이 메모리에 연속적으로 할당되는 환경에서는 프로세스들이 실행되고 종료되기를 반복하며 메모리 사이에 빈 공간들이 생긴다.
- 프로세스 바깥에 생기는 빈 공간들은 그 공간보다 큰 프로세스를 적재하기 어려운 상황을 초래한다. → 메모리 낭비
- 외부 단편화의 해결 : 메모리를 압축(compaction)
- 메모리 내에 저장된 프로세스를 적당히 재배치해 흩어져 있는 작은 빈 공간을 하나의 큰 빈 공간으로 만든다.
- 작은 빈 공간들을 모으는 과정에서 시스템은 하던 일을 중단해야 한다.
- 메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기한다.
- 오버헤드를 최소화하면서 압축할 수 있는 것에 대한 명확한 방법을 결정하기 어렵다.
- 외부 단편화의 해결 : 가상 메모리 기법 중 페이징 기법
14.2 페이징을 통한 가상 메모리 관리
1) 페이징 (page)
- 가상 메모리 (virtual memory) : 실행하고자 하는 프로그램의 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술
- 페이징
: 프로세스의 논리 주소 공간을 페이지(page)라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임(frame)이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법
- 페이징에서도 스와핑을 사용 가능하다.
- 페이징 시스템에서의 스왑 아웃 : 페이지 아웃 (page out)
- 페이징 시스템에서의 스왑 인 : 페이지 인 (page in)
- 프로세스를 이루는 페이지 중 실행에 필요한 일부 페이지만을 메모리에적재하고, 당장 실행에 필요하지 않은 페이지들은보조기억장치에 남겨둔다.
2) 페이지 테이블 (page table)
- 프로세스가 메모리에 불연속적으로 배치되어 있다면 이를 순차적으로 실행할 수 없다.
- 논리 주소에는 프로세스가 연속적으로 배치되도록 페이지 테이블을 이용한다.
- 프로세스들이 메모리에 분산되어 저장되어 있더라도 CPU는 논리 주소를 순차적으로 실행하면 된다.
- 페이지 테이블 베이스 레지스터 (PTBR : Page Table Base Register)
- 각 프로세스의 페이지 테이블이 적재된 주소를 가리킨다.
- 페이지 테이블을 메모리에 두면 메모리에 있는 페이지 테이블을 보고, 알게 된 프레임에 접근한다. → 2번의 메모리 참조
- 위의 문제를 해결하기 위해 CPU(일반적으로 MMU 내에) TLB(Translation Lookable Buffer)라는 페이지 테이블의 캐시 메모리를 둔다. (참조 지역성에 근거)
- TLB 히트 (TLB hit) : CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 존재한다.
- TLB 미스 (TLB miss) : CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 존재하지 않는다.
* 내부 단편화 (internal fragmentation)
- 프로세스 크기가 페이지의 배수가 아닐 때 발생
- 내부 단편화는 하나의 페이지 크기보다 작은 크기로 발생
- 내부 단편화를 적당히 방치하면서 너무 크지 않은 페이지 테이블이 만들어지지 않도록 페이지 크기를 조정해야 한다.
3) 페이징에서의 주소 변환
- 특정 주소에 접근하기 위해 필요한 정보
- 접근하고 싶은 페이지나 프레임
- 접근하려는 주소가 그 페이지이나 프레임으로부터 떨어져 있는 정도
- 페이징 시스템에서는 모든 논리 주소가 페이지 번호(page number)와 변위(offset)로 이루어져 있다.
- 페이지 번호 : 접근하고자 하는 페이지 번호
- 변위 : 접근하려는 주소가 프레임의 시작 번지로부터 떨어져 있는지에 대한 정보
- 논리 주소 <페이지 번호, 변위>가 페이지 테이블을 통해 물리 주소 <프레임 번호, 변위>로 변환된다.
4) 페이지 테이블 엔트리 (PTE : Page Table Entry)
- 페이지 테이블의 각각의 행
- 페이지 번호, 프레임 번호 외에도 유효 비트, 보호 비트, 참조 비트, 수정 비트와 같이 중요한 정보가 담긴다.
- 유효 비트 (valid bit)
- 현재 해당 페이지에 접근 가능한지 여부를 알려준다.
- 현재 페이지가 메모리에 적재되어 있다면 1, 적재되어 있지 않다면(보조기억장치에 있다면) 0
- 페이지가 유효 비트가 0인 메모리에 접근하려 하면 페이지 폴트(page fault)라는 예외가 발생한다.
CPU의 페이지 폴트 처리 : 하드웨어 인터럽트 처리와 유사
① CPU는 기존의 작업 내역을 백업한다.
② 페이지 폴트 처리 루틴을 실행한다.
③ 페이지 처리 루틴은 원하는 페이지를 메모리로 가져온 뒤에 유효 비트를 1로 변경한다.
④ 페이지 폴트를 처리했다면 CPU는 이제 해당 페이지에 접근 가능하다.
- 보호 비트 (protection bit)
- 페이지 보호 기능을 위해 존재한다.
- 읽기만 가능한 페이지 : 0
- 읽고 쓰는 것이 가능한 페이지 : 1
- read, write, execute를 모두 표현하기 위해 3비트(rwx)로 복잡하게 구현할 수 있다.
- 참조 비트 (reference bit)
- CPU가 이 페이지에 접근한 적이 있는지 여부를 나타낸다.
- 적재 이후 CPU가 읽고 쓴 페이지 : 1
- 적재 이후 한 번도 읽거나 쓴 적이 없는 페이지 : 0
- 수정 비트 (modified bit)
- 해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부를 알려준다.
- 더티 비트(dirty bit)라고도 한다.
- 변경된 적이 있는 페이지 : 1
- 변경된 적이 없는 페이지 : 0
- 페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야 하는지 유무를 판단하는 데 사용된다.
5) 페이징의 이점 : 쓰기 시 복사 (copy on write)
- 프로세스 간에 페이지를 공유 가능하다.
- 부모 프로세스와 동일한 자식 프로세스가 생성되면 자식 프로세스가 부모 프로세스와 동일한 프레임을 가리킨다.
- 부모 혹은 자식 프로세스 중 하나가 페이지에 쓰기 작업을 하면 그 순간 해당 페이지가 별도의 공간으로 복제되어 각 프로세스는 자신의 고유한 페이지가 할당된 프레임을 가리킨다.
- 프로세스 생성 시간을 줄이고, 메모리 공간 절약이 가능하다.
6) 계층적 페이징 (hierarchical paging)
- 프로세스를 이루는 모든 페이지 테이블 엔트리를 항상 메모리에 유지하지 않아도 된다.
- 페이지 테이블을 여러 개의 페이지로 쪼개고, 이 페이지들을 가리키는 페이지 테이블(항상 메모리에 있어야 한다.)을 둔다.
- 논리주소 : 바깥 페이지 번호(페이지 테이블의 페이지 찾기), 안쪽 페이지 번호, 변위
- 페이지 테이블의 계층이 늘어날수록 페이지 폴트가 발생했을 경우 메모리 참조 횟수가 늘어난다.
14.3 페이지 교체와 프레임 할당
1) 요구 페이징 (demand paging)
- 프로세스를 메모리에 적재할 때 필요한 페이지만을 메모리에 적재하는 방법
- 요구 페이징의 기본적인 양상
- CPU가 특정 페이지에 접근하는 명령어를 실행한다.
- 해당 페이지가 현재 메모리에 있을 경우(유효비트가 1) CPU는 페이지가 적재된 프레임에 접근한다.
- 해당 페이지가 현재 메모리에 없을 경우(유효비트가 0) 페이지 폴트가 발생한다.
- 페이지 폴트 처리 루틴은 해당 페이지를 메모리로 적재하고 유효 비트를 1로 설정한다.
- 다시 1번을 수행한다.
- 순수 요구 페이징 (pure demand paging)
- 어떤 페이지도 메모리에 적재하지 않은 채 시작
- 프로세스의 첫 명령어를 실행하는 순간부터 페이지 폴트가 계속 발생
- 실행에 필요한 페이지가 어느 정도 적재된 이후부터는 페이지 폴트 발생 빈도가 떨어진다.
- 페이징 시스템이 안정적으로 작동하기 위해 페이지 교체, 프레임 할당을 해결해야 한다.
2) 페이지 교체 알고리즘
- 메모리가 가득 찼을 때 보조기억장치로 내보낼 페이지를 결정하는 알고리즘
- 페이지 폴트를 가장 적게 일으키는 알고리즘이 좋은 알고리즘이다.
- 페이지 폴트 횟수를 알아야 하고, 이를 위해 페이지 참조열(page reference string)을 이용한다.
- 페이지 참조열 : CPU가 참조하는 페이지 중 연속된 페이지를 생략한 페이지 열
(1) FIFO 페이지 교체 알고리즘 (First-In First-Out Page Replacement Algorithm)
- 메모리에 가장 먼저 올라온 페이지부터 내보낸다.
- 아이디어와 구현이 간단하지만, 자주 참조되는 페이지가 내보내질 수 있다.
- 2차 기회 페이지 교체 알고리즘 (second chance page replacement algorithm)
- FIFO 페이지 교체 알고리즘의 변형
- 기본적으로 메모리에서 가장 오래 머무른 페이지를 대상으로 내보낼 페이지를 선별한다.
- 페이지 참조 비트가 1일 경우, 참조 비트를 0으로 만들고 현재 시간을 적재 시간으로 설정한다.
(2) 최적 페이지 교체 알고리즘 (optimal page replacement algorithm)
- CPU에 의해 참조되는 횟수를 고려한다.
- 가장 낮은 페이지 폴트율을 보장한다.
- 실제 구현이 어려우므로 다른 페이지 교체 알고리즘의 이론상 성능을 평가하기 위한 목적으로 사용한다. (최적 페이지 교체 알고리즘을 실행했을 때 발생하는 페이지 폴트 횟수를 페이지 폴트의 하한선으로 간주)
(3) LRU 페이지 교체 알고리즘 (LRU ; Least Recently Used Page Replacement Algorithm)
- 가장 오랫동안 사용되지 않은 페이지를 교체하는 알고리즘
- 아이디어 : 최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을 것이다.
3) 스래싱과 프레임 할당
(1) 스래싱 (thrashing)
- 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요해 성능이 저해되는 문제
- 프레임이 부족하면 CPU는 페이지 폴트가 자주 발생할 수밖에 없다.
- 멀티프로그래밍의 정도 (degree of multiprogramming) : 메모리에서 동시 실행되는 프로세스의 수
- 멀티프로그래밍의 정도를 늘린다고 해서 CPU 사용률이 비례해서 증가하지 않는다.
(2) 프레임 할당
- 스래싱이 발생하는 근본적인 원인 : 각 프로세스가 필요로 하는 최소한의 프레임 수가 보장되지 않았다.
- 운영체제는 각 프로세스들이 무리없이 실행되기 위한 최소한의 프레임 수를 파악하고 프로세스들에 적절한 수만큼의 프레임을 할당해 줄 수 있어야 한다.
- 정적 할당 방식: 프로세스의 크기와 물리 메모리의 크기만 고려
- 균등 할당 (equal allocation) : 모든 프로세스에 균등하게 프레임 분배 → 비합리적
- 비례 할당 (proportional allocation) : 프로세스 크기에 비례하게 프레임 분배
- 하나의 프로세스가 필요로 하는 프레임의 양은 실제 실행해야 아는 경우가 많다.
- 동적 할당 방식: 프로세스를 실행하는 과정에서 배분할 프레임을 결정
- 작업 집합 모델 (working set model)를 사용하는 방식
- 프로세스가 일정 기간 참조한 페이지 집합을 기억해 빈번한 페이지 교체 방지
- 작업 집합 (working set) : 실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 집합
- 페이지 폴트 빈도(PFF; Page-Fault Frequency)를 사용하는 방식
- 페이지 폴트율이 너무 낮으면 해당 프로세스가 너무 많은 프레임을 가진다는 가정과 페이지 폴트율이 너무 높으면 그 프로세스는 너무 적은 프레임을 가지고 있다는 가정에서 출발
- 페이지 폴트율에 상한선과 하한선을 정하고, 그 내부 범위 안에서만 프레임 할당
- 작업 집합 모델 (working set model)를 사용하는 방식
Chap15. 파일 시스템
15.1 파일과 디렉터리
1) 파일 (file)
- 보조기억장치에 저장된 관련 정보의 집합
- 파일의 구성
- 이름
- 파일을 실행하기 위한 정보
- 속성(attribue) : 파일 관련 부가 정보, 메타데이터(metadata)라고도 한다.
2) 디렉터리(directory)
- 파일을 일목요연하게 관리하기 위해 사용
- 1단계 디렉터리 (single-level directory) : 모든 파일이 하나의 디렉터리 하에 있다.
- 트리 구조 디렉터리 (tree-structured directory) : 최상위 디렉터리(루트 디렉터리, root directory) 하에 여러 서브 디렉터리가 있고, 서브 디렉터리가 다른 서브 디렉터리를 가질 수 있다.
- 대부분의 운영체제에서 디렉터리는 특별한 형태의 파일로 간주한다.
- 디렉터리 엔트리 : 해당 디렉터리에 담겨 있는 대상과 곤련된 정보가 표의 형태로 저장되어 있다.
15.2 파일 시스템
1) 파티셔닝과 포매팅
- 파티셔닝 (partitioning)
- 저장 장치의 논리적인 영역을 구획하는 작업
- 파티션 (partition) : 파티셔닝 작업을 통해 나누어진 영역
- (논리적) 포매팅 (formating)
- 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업
- 포매팅까지 완료하여 파일 시스템을 설정했다면 파일과 디렉터리를 생성할 수 있다.
2) 파일 할당 방법
- 운영체제는 파일과 디렉터리를 블록 단위로 읽고 쓴다.
- 하드 디스크의 가장 작은 단위는 섹터이지만, 운영체제는 하나 이상의 섹터를 블록이라는 단위로 묶어 관리한다.
- 파일을 보조기억장치에 할당하는 방법
- 연속 할당
- 불연속 할당
- 연결 할당
- 색인 할당
(1) 연속 할당 (contiguous allocation)
- 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식
- 디렉터리 엔트리에 파일 이름과 첫 번째 블록 주소, 블록 단위의 길이를 명시한다.
- 구현이 단순하지만, 외부 단편화를 야기한다.
(2) 연결 할당 (linked allocation)
- 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당한다.
- 파일을 이루는 데이터를 연결 리스트로 관리한다.
- 디렉터리 엔트리에 파일 이름과 첫 번째 블록 주소, 블록 단위의 길이를 명시한다.
- 외부 단편화를 해결한다.
- 파일 내 임의의 위치에 접근하는 임의 접근(random access) 속도가 매우 느리다.(반드시 첫 번째 블록부터 하나씩 차례대로 읽어야 한다.)
- 하드웨어 고장이나 오류 발생 시 해당 블록 이후는 접근할 수 없다.
- 연결 할당을 조금 변형한 FAT 파일 시스템이 오늘날까지 많이 사용된다.
(3) 색인 할당 (indexed allocation)
- 파일의 모든 블록 주소를 색인 블록(indexed block)에 모아 관리한다.
- 파일 내 임의의 위치에 접근하기 쉽다.
- 디렉터리 엔트리에 파일 이름과 색인 블록 주소를 명시한다.
- 색인 할당을 기반으로 유닉스 파일 시스템이 만들어졌다.
3) 파일 시스템 살펴보기
(1) FAT 파일 시스템
- 연결 할당의 단점을 보완한 파일 시스템
- FAT을 이용하는 파일 시스템
- 파일 할당 테이블 (FAT; File Allocation Table) : 각 블록에 포함된 다음 블록의 주소들을 모아 테이블 형태로 관리한다.
- FAT는 파티션의 앞 부분에 만들어진다.

- FAT는 하드 디스크 파티션 시작 부분에 있지만, 실행 도중 FAT가 메모리에 캐시될 수있다. → 임의 접근의 성능 향상
(2) 유닉스 파일 시스템
- 색인 할당 기반
- 유닉스 파일 시스템에서는 색인 블록을 i-node(index-node)라고 부른다.
- i-node에는 15개의 블록 주소와 파일 속성 정보가 저장될 수 있다.
- 파일마다 i-node가 있고, i-node마다 번호가 부여되어 있다. i-node 들은 파티션 내 특정 영역에 모여 있다.

- i-node의 크기는 유한하다.
- 블록 주소 중 12개에는 직접 블록 주소를 저장한다.
- 파일 데이터가 저장된 블록 주소가 직접적으로 명시된다.
- 직접 블록(direct block) :파일 데이터가 저장된 블록
- 위의 내용으로 충분하지 않다면 13번째 주소에 단일 간접 블록 주소를 저장한다.
- 단일 간접 블록(single indirect block) : 파일 데이터를 저장한 블록 주소가 저장된 블록
- 위의 내용으로 충분하지 않다면 14번째 주소에 이중 간접 블록 주소를 저장한다.
- 이중 간접 블록 주소(double indirect block) : 데이터 블록 주소(단일 간접 블록의 주소)를 저장된 블록
- 위의 내용으로 충분하지 않다면 15번째 주소에삼중 간접 블록 주소를 저장한다.
- 삼중 간접 블록(triple indirect block) : 이중 간접 블록 주소가 저장된 블록
(3) 기타 파일 시스템 : NTFS, ext 파일 시스템
(4) 저널링 파일 시스템
- 파일 시스템 변경 도중 시스템 크래시(컴퓨터가 강제로 종료된 상황)가 발생하면 파일 시스템이 훼손될 수 있다.
- 저널링 파일 시스템 이전에는 부팅 직후 시스템을 검사하고 복구하는 프로그램을 실행해 파일 시스템 내 모든 블록에 대해 파일 시스템을 검사한다. → 시간이 매우 오래 걸린다.
- 저널링 파일 시스템
- 저널링(journaling) 기법을 이용한다.
- 저널링 기법 : 작업 로그를 통해 시스템 크래시가 발생했을 때 빠르게 복구한다.
- 파일 시스템 변경 작업 진행 순서
- 작업 직전 파티션의 로그 영역에 수행 작업에 대한 로그를 남긴다.
- 로그를 남긴 후 작업을 수행한다.
- 작업이 완료되면 로그를 삭제한다.
- 시스템 크래시가 발생한 직후에 로그 영역을 읽어 당시 실행 중이던 작업을 알아내고 해당 작업을 완료한다.

🤔 느낀 점
지난 기수에서 혼공자바를 완주하면서도 했던 생각이지만 책 1회독을 마치니 굉장히 뿌듯하네요. 이번 여름에도 혼공학습단을 할 생각이라 벌써 책도 골라뒀습니다. 아마 혼공머신을 할 것 같습니다.
6주동안 다들 수고 많으셨습니다. 행복한 설 연휴 보내세요!
'독학 > [책] 컴퓨터구조 + 운영체제' 카테고리의 다른 글
[혼공학습단 11기 혼공컴운💿] 컴퓨터구조+운영체제 week5 (0) | 2024.01.31 |
---|---|
[혼공학습단 11기 혼공컴운💿] 컴퓨터구조+운영체제 week4 (0) | 2024.01.22 |
[혼공학습단 11기 혼공컴운💿] 컴퓨터구조+운영체제 week3 (0) | 2024.01.16 |
[혼공학습단 11기 혼공컴운💿] 컴퓨터구조+운영체제 week2 (4) | 2024.01.08 |
[혼공학습단 11기 혼공컴운💿] 컴퓨터구조+운영체제 week1 (0) | 2024.01.03 |