• 혼자 공부하는 컴퓨터 구조 + 운영체제 : Ch.14 ~ Ch.15

    2023. 2. 19.

    by. 옛슬

    Chapter 14. 가상 메모리

    스와핑

    - 메모리에서 사용되지 않는 일부 프로세스를 보조기억장치로 내보내고 실행할 프로세스를 메모리로 들여보내는 메모리 관리 기법

    - 스왑 영역 : 프로세스들이 쫓겨나는 보조기억장치의 일부 영역

    - 스왑 아웃 : 현재 실행되지 않는 프로세스 메모리 → 스왑 영역

    - 스왑 인 : 스왑 영역 → 메모리로 옮겨지는 것

     

    장점

    - 프로세스들이 요구하는 메모리 주소공간의 크기가 실제 메모리 크기보다 큰 경우에도 프로세스들을 동시 실행할 수 있음.

     

    메모리 할당 (연속 메모리 할당)

    - 비어있는 메모리 공간에 프로세스를 연속적으로 할당하는 대표적인 방식으로 최초 적합, 최적 적합, 최악 적합이 있다.

     

    최초 적합

    - 운영체제가 메모리 내 최초로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방식

    - 장점 : 검색을 최소화, 빠른 할당 가능

     

    최적 적합

    - 운영체제가 빈 공간을 모두 검색 후 프로세스가 적재될 수 있는 가장 작은 공간에 배치하는 방식

     

    최악 적합 

    - 운영체제가 빈 공간을 모두 검색 후 프로세스가 적재될 수 있는 가장 큰 공간에 프로스세를 배치하는 방식

     

    외부 단편화

    - 연속 메모리 할당의 문제점 

    - 외부 단편화는 프로세스들이 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상

    - 작은 메모리 공간은 프로세스들이 실행되고 종료되기를 반복하면서 메모리 사이사이에 공간이 생기면서 발생됨.

     

    외부 단편화를 해결할 수 있는 대표적인 방안

    1. 메모리 조각모음

    - 메모리 내에 저장된 프로세스를 적당히 재배치시켜 여기저기 흩어져 있는 작은 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법

     

    단점

    - 작은 빈 공간들을 하나로 모으는 동안 시스템은 하던일을 중지해야 함

    - 메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기함

    - 오버헤드를 최소화하며 압축할 수 있는 명확한 방법을 결정하기 어려움 

     

    2. 페이징

    - 자세한 내용은 하단에

     

    가상 메모리

    - 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰  프로세스를 실행할 수 있게 하는 기술

    - 가상 메모리 관리 기법에는 크게 페이징, 세그멘테이션이 있음.

     

    페이징

    - 페이징은 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법

    - 페이징에서도 스와핑을 사용할 수 있음.

    - 페이지 단위로 스왑 아웃 / 스왑 인이 되며 이를 페이지 아웃, 페이지 인이라고 부르기도 함.

     

    ❗ 여기서 알 수 있는 것

    1. 프로세스들이 실행하기 위해서는 프로세스 전체가 메모리에 적재될 필요가 없음

    2. 물리 메모리보다 더 큰 프로세스를 실행할 수 있음.

     

    페이지 테이블

    - 프로세스가 메모리에 불연속적으로 배치되면 CPU입장에서 다음에 실행할 명령어 위치를 찾기가 어려움 → 그래서 페이지 테이블을 이용함

    - 페이지 테이블은 현재 어떤 페이지가 어떤 프레임에 할당되었는지를 알려움 

    - 페이징 시스템은 프로세스가 비록 물리주소에 불연속적으로 배치되더라도 논리 주소에는 연속적으로 배치되도록 함

    * 물리주소 : 실제 메모리 내의 주소

    * 논리주소 : CPU가 바라보는 주소

     

    내부 단편화

    - 페이징의 문제점

    - 모든 프로세스의 크기가 페이지의 배수가 아니기 때문에 마지막 페이지의 경우 공간이 남게됨 → 이를 내부 단편화라 함.

    - 그렇기에 내부 단편화를 적당히 방지하면서 너무 크지 않은 페이지 테이블이 만들어지도록 페이지의 크기를 조정하는 것이 중요함

     

    페이지 테이블 베이스 레지스터 (PTBR)

    - 각 프로세스의 페이지 테이블이 적재된 주소를 가리키고 있음.

    - 각 페이지 테이블을 메모리에 두면 문제가 있음 → 메모리 접근 시간이 두 배로 늘어난다는 점

    - 이러한 문제를 해결하기 위해 CPU 곁에 TLB라는 페이지 테이블의 캐시 메모리를 둔다.

     

    TLB

    - TLB는 페이지 테이블의 캐시로 페이지 테이블의 일부 내용을 저장함 ( 주로 최근에 사용된 페이지 위주로 가져와 저장)

    - TLB 히트 : 논리 주소에 대한 페이지 번호가 TLB에 있을 경우 메모리에 접근할 필요가 없고 이를 TLB히트라 함 ↔ TLB 미스

     

    페이징에서의 주소 변환

    - 특정 주소에 접근하려면 두가지 정보가 필요함

      1. 어떤 페이지 혹은 프레임에 접근하고 싶은지

      2. 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지

     

    - 페이징 시스템에서는 모든 논리 주소가 기본적으로 페이지 번호, 변위(offset)로 이루어져 있음.

    - 페이지 번호 : 페이지가 어떤 프레임에 할당되었는지를 알 수 있음

    - 변위 : 접근하려는 주ㅜ소가 프레임의 시작 번지로부터 얼마나 떨어져 있는지를 알기 위한 정보 (논리 주소의 변위 = 물리 주소의 변위)

     

    페이지 테이블 엔트리

    - 페이지 테이블의 각 엔트리, 페이지 테이블의 각각의 행들을 일컫음.

    - 페이지 테이블 엔트리에는 페이지 번호, 프레임 번호 뿐만 아니라 다른 중요한 정보도 포함됨

    - 대표적으로 중요한 정보로는 유효비트, 보호비트, 참조비트, 수정비트가 있음

     

    유효비트

    - 해당 페이지에 접근이 가능한지 ( = 스왑 영역에 적재되어 있는지 아닌지)

    - 보조기억장치에 적재 (0) / 메모리 적재 (1)

     

    유효비트가 0인 페이지에 접근하려고 한다면

    - 페이지 폴트 예외가 발생

    - 페이지 폴트를 처리하는 과정

      1. CPU는 기존의 작업 내역을 백업

      2. 페이지 폴트 처리 루틴을 실행

      3. 페이지 처리 루틴은 원하는 페이지를 메모리로 가져온 뒤 유효 비트를 1로 변경

      4. 페이지 폴트 처리 후 CPU는 해당 페이지에 접근할 수 있게 됨.

     

    보호비트

    - 페이지 보호 기능을 위해 존재하는 비트

    - 읽기만 가능 (0) / 읽기, 쓰기 모두 가능 (1)

    - 3개의 보호비트가 있는 경우도 있음

      - 읽기만 가능 (100) / 읽기,쓰기만 가능 (110) / 읽기, 쓰기, 실행 가능 (111)

     

    참조비트

    - CPU가 페이지에 접근한지 여부를 나타냄

    - 적재 이후 CPU가 읽거나 쓴 페이지 (1) / 읽거나 쓴 적 없는 페이지 (0)

     

    수정비트 (더티비트)

    - 데이터를 쓴적이 있는지 없는지 수정 여부를 알려줌

    - 변경된 적 있는 페이지 (1) / 없으면 (0)

     

    ❓ 수정비트가 존재하는 이유

    - 페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야하는 지, 할 필요가 없는지를 판단하기 위해 존재

    - 내용이 동일한 경우 스왑 아웃 시 아무런 추가 작업 없이 새로 적재된 페이지로 덮어 쓰기만 하면 됨.

    - 수정비트가 1인 경우 , 변경된 값을 보조기억장치에 기록하는 작업이 추가되어야 함.

     

    페이지 교체와 프레임 할당

    요구 페이징

    - 모든 페이지를 적대하지 않고 필요한 페이지만을 메모리에 적재하는 기법

    - 안정적으로 작동되기 위해서는 페이지 교체와 프레임 할당을 해결해야 됨

     

    순수 요구 페이징

    - 아무런 페이지를 메모리에 적재하지 않은 채 무작정 실행부터 했을 경우 

    - 이때 프로세스의 첫 명령어를 실행하는 순간부터 페이지 폴트가 계속 발생, 실행에 필요한 페이지가 어느정도 적재된 이후로 부터는 페이지 폴트 발생 빈도가 떨어짐.

     

    페이지 교체 알고리즘

    - 좋은 페이지 교체 알고리즘은 ? 일반적으로 페이지 폴트를 가장 적게 일으키는 알고리즘

    - 페이지 교체 알고리즘을 제대로 이해하기 위해서는 페이지 폴트 횟수를 알 수 있어야 함 →  페이지 참조열을 통해 알 수 있음.

     

    페이지 참조열

    - CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지열을 의미함

     

    ❓ 연속된 페이지를 생략한 이유

    - 중복된 페이지를 참조하는 행위는 페이지 폴트를 발생시키지 않기 때문

     

    FIFO 페이지 교체 알고리즘

    - 메모리에 가장 먼저 올라온 페이지부터 없애는 방식

    - 구현이 간단하지만 프로그램 실행 초기에 적재된 페이지 중 프로그램 실행 내내 사용된 내용을 포함할 수 도 있기 때문에 무조건 먼저 적재되었다고 내보내는 것은 바람직하지 않음.

     

    최적 페이지 교체 알고리즘

    - CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘

    - '앞으로 오랫동안 사용되지 않을 페이지'를 예측하기는 어려움 →   현실적으로 불가능에 가까움 

    - 주로 다른 페이지 교체 알고리즘의 이론상 성능을 평가하기 위한 목적으로 사용됨.

     

    LRU 페이지 교체 알고리즘

    - 최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을 것이라는 아이디어를 토대로 만든 알고리즘.

     

    스래싱과 프레임 할당

    - 스래싱: 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제

    - 멀티 프로그래밍의 정도를 통해 메모리에 동시 실행되는 프로세스의 수를 알 수 있음.

    - 멀티 프로그래밍의 정도 : 메모리에 동시 실행되는 프로세스의 수 

    - 멀티 프로그래밍의 정도가 높다면 현재 메모리에는 많은 프로세스가 동시에 실행 중임.

     

    - 프레임 할당 방식 : 스래싱을 해결하기 위한 가장 단순한 형태

    1. 정적할당 방식

    - 프로세스의 실행 과정을 고려하지 않고 단순히 프로세스 크기와 물리 메모리 크기만을 고려하는 방식

    - 균등 할당 : 모든 프로세스에 동일하게 프레임을 할당

    - 비례 할당 : 프로세스의 크기 비례 프레임을 할당

    2. 동적 할당 방식

    - 프로세스의 실행을 보고 할당할 프레임의 수를 결정함

    - 작업 집합 모델을 사용하는 방식 : 작업 집합의 크기만큼만 프레임을 할당

    - 페이지 폴트 빈도를 사용하는 방식 : 페이지 폴트 빈도율의 상한선, 하한선을 정한 후 그 내부 범위 안에서만 프레임을 할당하는 방식

     

    ❓ 작업 집합

    - 실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 집합


    Chapter 15. 파일시스템

    1️⃣ 파일과 디렉터리

    파일

    - 파일 : 하드 디스크나  SSD와 같은 보조기억장치에 저장된 관련 정보 집합

    - 속성 / 메타 데이터 : 부가 정보

    - 파일을 다루는 모든 작업은 운영체제에 의해 다뤄짐   파일 연산을 위한 시스템 호출을 제공함.

    ⭐ 파일 연산 : 생성 / 삭제 / 열기 / 닫기 / 읽기 / 쓰기

     

    디렉터리 (a.k.a 폴더)

    - 파일들을 일목요연하게 관리하기 위함

    - 옛날 운영체제에는 하나의 디렉터리만 존재함. 이를 1단계 디렉터리라고 함.

    - 여러 계층을 가진 디렉터리가 생겨났는데 이를 트리 구조 디렉터리라 함.

    - 최상위 디렉터리는 흔히 루트 디렉터리라고 부르고 슬래시 (/)로 표현됨.

     

    절대 경로와 상대경로

    - 절대 경로 : 루트 디렉토리로 부터 자기 자신까지 이르는 고유한 경로

    - 상대 경로 : 현재 디렉터리로부터 시작하는 경로

    - 디렉터리 연산을 위한 시스템 호출도 존재함.

     

    디렉터리 엔트리

    - 많은 운영체제에서는 디렉터리를 그저 특별한 형태의 파일로 간주 (즉 디렉터리 = 파일)

    - 디렉터리는 해당 디렉터리에 단겨있는 대상과 관련된 정보를 담고 주로 테이블 형태로 구성

    - 디렉터리 엔트리가 공통으로 포함하는 정보 : 디렉터리 내 포함된 대상의 이름 , 그 대상이 보조기억장치 내 저장된 위치를 유추할 수 있는 정보 

     

    2️⃣ 파일 시스템

    - 파일과 디렉터리를 보조기억장치에 일목요연하게 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램

    - 대표적인 파일시스템으로는 FAT 파일 시스템과 유닉스 파일 시스템이 있음.

     

    파티셔닝과 포매팅

    - 보조기억장치를 사용하기 위해 파티션을 나누는 작업 (파티셔닝)과 포맷 작업 (포매팅)을 거쳐야 함

    - 파티셔닝 : 저장 장치의 논리적인 영역을 구획하는 작업

    - 역역 하나하나를 파티션이라 함

    - 포매팅 : 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지 결정하고, 새로운 데이터를 쓸 준비를 하는 작업

     

    파일 할당 방법

    - 운영체제는 파일과 디렉터리를 블록 단위로 읽고 씀.

    - 파일을 보조기억장치에 할당하는 방법에는 연속할당, 불연속할당이 있음

    - 불연속 할당에는 크게 연결할당, 색인 할당이 있음.

     

    연속 할당

    - 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식

    - 문제점 : 외부단편화 

     

    불연속 할당

    1. 연결 할당

    - 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당하는 방식

    - 단점

    1) 반드시 첫번째 블록부터 하나씩 차례대로 읽어야 함 :

    파일 내 임의의 위치에 접근하는 속도 (임의 접근 속도)가 매우 느림    성능면에서 비효율적

    2) 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근이 불가능

    - 이를 변형한 대표적인 파일 시스템이 FAT 파일 시스템

     

    2. 색인 할당

    - 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식

    - 색인 할당을 사용하는 파일 시스템에는 디렉터리 엔트리에 파일 이름과 더불어 색인 블록 주소를 명시

    - 색인 할당을 기반으로 만든 파일 시스템이 유닉스 파일 시스템

     

    파일 시스템

    1. FAT  파일 시스템 - 파일 할당 테이블 (FAT : File Allocation Table) : 각 블록에 포함된 다음 블록의 주소들을 한데 모아 테이블 형태로 관리하는 테이블- FAT 파일 시스템 : FAT를 이용하는 파일 시스템- FAT는 파티션의 앞부분에 만들어지며, 이어서 루트 디렉터리가 저장되는 영역, 서브 디렉터리와 파일들을 위한 영역이 있음.- FAT는 실행하는 도정 메모리에 캐시 될 수 있으며 연결 할당 방식보다 임의 접근에도 유리해짐.

     

    2. 유닉스 파일 시스템

    - 색인 할당 기반의 방식

    - 유닉스 파일 시스템에서는 이 색인 블록을 i-node라고 부름.

     

    문제점 :

    - i-node의 크기는 유한함. 기본적으로 하나당 15개의 블롯 주소를 저장할 수 있기 때문에 15개 브록을 차지하는 파일까지 가리킬 수 있음.

    - 즉, 그 이상인 경우 하나로는 파일의 데이터 블록을 모두 가리킬 수 없음.

     

    해결 방법 :

    1. 블록 주소 중 열두 개에는 직접 블록 주소를 저장

    2. '첫째' 내용으로 충분하지 않다면 열세번째 주소에 단일 간접 블록 주소를 저장

    3. '둘째' 내용으로 충분하지 않다면 열네번째 주소에 이중 간접 블록 주소를 저장

    4. '셋째' 내용으로 충분하지 않다면 열다섯번째 주소에 삼중 간접 블록 주소를 저장

     

    * 직접 블록: 파일 데이터가 저장된 블록

    * 단일 간접 블록 : 파일 데이터가 저장된 블록이 아닌 파일 데이터를 저장한 블록 주소가 저장된 블록

    * 이중 간접 블록 : 단일 간접 블록들의 주소를 저장하는 블록

    * 삼중 간접 블록 : 이중 간접 블록 주소가 저장된 블록


    혼공단 미션

    기본미션

    p.400 (1번 문제)

    메모리 할당 방식에 대한 설명으로 올바른 것을 다음 보기에서 찾아 써 보세요

     

    - ( 최초적합 ) : 최초로 발견함 적재 가능한 빈 공간에 프로세스를 배치하는 방식- ( 최악적합 ) : 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식- ( 최적적합 ) : 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식

    선택미션

    Ch.14( 14-3 ) 프로세스가 사용할 수 있는 프레임이 3개 있고, 페이지 참조열이 '2414523423' 일 때 FIFO, 최적 페이지, LRU 페이지 교체 알고리즘으로 이 페이지를 참조한다면 몇 번의 페이지 폴트가 발생하는지 풀어보기

     

    1) FIFO 페이지 알고리즘

    - 메모리에 가장 먼저 올라온 페이지부터 내쫓는 방식

    - 총 4번 페이지 폴트가 발생함

     

     

     

    2) 최적 페이지 알고리즘

    - 사용빈도가 가장 낮은 페이지를 교체하는 알고리즘

    - 5로 교체되는 페이지는 1인데 그 이유는 그 뒤에 1을 사용하는 빈도가 가장 낮기 때문

    - 총 2번의 페이지 폴트가 발생함.

    3) LRU 페이지 교체 알고리즘

    - 가장 오랫동안 사용하지 않은 페이지 알고리즘

    - 지금 프레임이 3개니까 그 전 뒤 두개를 확인 후 아닌 하나를 교체하면 된다

    - 총 4번의 페이지 폴트가 발생함.


    오늘은 개요가 따로 없다 !

    오늘을 끝으로 혼공컴운이 끝났기 때문에 후기를 따로 작성해볼 예정😋

    여튼 그동안 혼공컴운 하신 모든 분들 고생하셨습니다 😎

    댓글