[혼공학습단 12기] 혼자 공부하는 컴퓨터구조+운영체제

[혼공컴운] 6주차

예지S2 2024. 8. 21. 15:42

드디어 마지막주! 이번엔 늦지 않게 제출하고 싶었는데 페이징 파트가 너무 어렵기도하고 머리에 잘 안들어오더라구요...ㅎㅎ 그래서 머리에 들어올 때까지 반복해서 읽고 정리하다보니 늦어졌습니다..! 

 

Chapter 14 가상메모리

 

14-1 연속 메모리 할당

프로세스들을 메모리에 연속적으로 할당할 때 무엇을 고려해야 하는지

 

1. 스와핑

현재 실행되고 있지 않은 프로세스들을 임시로 보조기억장치 일부 영역으로 쫓아내고, 그렇게 해서 생긴 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식을 스와핑이라고 한다.

스왑 영역 프로세스들이 쫓겨나는 보조기억장치의 일부 영역
스왑 아웃 현재 실행되지 않는 프로세스가 메모리에서 스왑영역으로 옮겨지는 것
스왑 인 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것

 

 

2. 메모리 할당

메모리 할당에는 대표적으로 최초 적합, 최적 적합, 최악 적합 세 가지의 방식이 있다.

최초 적합 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식
검색 최소화 + 빠른 할당
최적 적합 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식
최악 적합 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식

 

 

3. 외부 단편화

프로세스를 메모리에 연속적으로 배치하는 연속 메모리 할당은 메모리를 효율적으로 사용하는 방법이 아니다. 왜냐하면 연속 메모리 할당은 외부 단편화라는 문제를 내포하고 있기 때문이다.

외부단편화란 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상을 의미한다.

 

외부단편화를 해결할 수 있는 대표적인 방안으로는 메모리를 압축하는 방법이 있다. 압축은 흩어져 있는 빈 공간들을 하나로 모으는 방식으로 메모리 내에 저장된 프로세스를 적당히 재배치시켜 흩어져 있는 작은 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법이다.

다만 압축 방식은 빈 공간들을 하나로 모으는 동안 시스템은 하던 일을 중지해야 하고, 메모리에 있는 내용을 옮기는 작업은 오버헤드를 야기하며, 어떤 프로세스를 어떻게 움직여야 오버헤드를 최소화하며 압출할 수 있는지에 대한 명확한 방법을 결정하기 어렵다. 이에 또 다른 해결방안이 등장했다. → 페이징 기법

 

 

14-2 페이징을 통한 가상 메모리 관리

가상 메모리는 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술이다. 이를 가능케 하는 가상 메모리 관리 기법에는 크게 페이징세그멘테이션이 있다.

 

1. 페이징이란

연속 메모리 할당 방식에서 외부 단편화가 생긴 근본적인 이유는 각기 다른 크기의 프로세스가 메모리에 연속적으로 할당되었기 때문이다. 만일 메모리와 프로세스를 일정한 단위로 자르고, 이를 메모리에 불연속적으로도 할당할 수만 있다면 외부 단편화는 발생하지 않는다. 이것이 페이징이다. 페이징은 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법이다.

페이징 시스템에서 스왑 아웃/스왑 인은 페이지 단위로 이루어진다. 스왑 아웃은 페이지 아웃, 스왑 인은 페이지 인이라고 부르기도 한다.

이는 다르게 말하면 한 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요가 없다는 말과 같다. 프로세스를 이루는 페이지 중 실행에 필요한 일부 페이지만을 메모리에 적재하고, 당장 실행에 필요하지 않은 페이지들은 보조기억장치에 남겨둘 수 있다. 이와 같은 방식을 통해 물리 메모리보다 더 큰 프로세스를 실행할 수 있다.

 

 

2. 페이지 테이블

프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU 입장에서는 이를 순차적으로 실행할 수가 없다. 이를 해결하기 위해 페이징 시스템은 프로세스가 비록 물리 주소에 불연속적으로 배치되더라도 논리 주소에는 연속적으로 배치되도록 페이지 테이블을 이용한다.

페이지 테이블은 페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표 역할로 CPU로 하여금 페이지 번호만 보고 해당 페이지가 적재된 프레임을 찾을 수 있게 한다. 즉, 페이지 테이블은 현재 어떤 페이지가 어떤 프레임에 할당되었는지를 알려준다.프로세스마다 각자의 페이지 테이블을 가지고 있고 각 프로세스의 페이지 테이블들은 메모리에 적재되어 있다. 그리고 CPU 내의 페이지 테이블 베이스 레지스터(PTBR)는 각 프로세스의 페이지 테이블이 적재된 주소를 가리키고 있다.페이지 테이블을 메모리에 두면 메모리 접근 시간이 두 배로 늘어난다는 단점이 있는데, 이와 같은 문제를 해결하기 위해 CPU 곁에 TLB라는 페이지 테이블의 캐시 메모리를 둔다. TLB는 페이지 테이블의 캐시이기 때문에 페이지 테이블의 일부 내용을 저장한다. 참조 지역성에 근거해 주로 최근에 사용된 페이지 위주로 가져와 저장한다.CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우 이를 TLB 히트라고 하고 논리 주소에 대한 페이지 번호가 TLB에 없어 메모리 내의 페이지 테이블에 접근하는 것은 TLB 미스라고 한다.

 

 

3. 페이징에서의 주소 변환

하나의 페이지 혹은 프레임은 여러 주소를 포괄하고 있기 때문에 특정 주소에 접근하려면 두 가지 정보가 필요하다.

 

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

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

 

그렇기에 페이징 시스템에서는 모든 논리 주소가 기본적으로 페이지 번호변위로 이루어져 있다.

페이지 번호 접근하고자하는 페이지의 번호
변위 접근하려는 주소가 프레임의 시작 번지로부터 얼만큼 떨어져 있는지를 알기 위한 정보

 

 

4. 페이지 테이블 엔트리

페이지 테이블의 각각의 행들을 페이지 테이블 엔트리라고 한다. 페이지 테이블 엔트리에는 페이지 번호, 프레임 번호 외에도 다른 중요한 정보들이 있다. 대표적으로 유효 비트, 보호 비트, 참조 비트, 수정 비트이다.

유효 비트 현재 해당 페이지에 접근 가능한지 여부를 알려준다. 즉 현재 페이지가 메모리에 적재되어 있는지 아니면 보조기억장치에 있는지를 알려주는 비트이다.
페이지가 메모리에 적재되어 있다면 유효 비트가 1, 메모리에 적재되어 있지 않다면 유효 비트가 0이 된다.
유효 비트가 0인 페이지로 접근하려고 하면 페이지 폴트라는 예외가 발생한다.
보호 비트 페이지 보호 기능을 위해 존재하는 비트로 해당 페이지가 읽고 쓰기가 모두 가능한 페이지인지, 혹은 읽기만 가능한 페이지인지를 나타낼 수 있다.
읽기만 가능한 페이지인 경우 0, 읽고 쓰기가 가능한 페이지인 경우 1이 된다.
더 복잡하게 구현한 경우 r, w, x로 읽기, 쓰기, 실행하기 권한의 조합을 나타낼 수 있다.
 참조 비트 CPU가 이 페이지에 접근한 적이 있는지 여부를 나타낸다.
적재 이후 CPU가 읽거나 쓴 페이지는 참조 비트가 1, 한 번도 읽거나 쓴 적이 없는 페이지는 0으로 유지된다.
수정 비트 해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부를 알려준다.
변경된 적이 있으면 1, 변경된 적이 없으면 0으로 유지된다.

 

+) 더 알아보기는 따로 공부해서 정리하겠습니당

 

 

14-3 페이지 교체와 프레임 할당

요구 페이징의 개념과 페이지 교체 알고리즘, 그리고 프레임 할당에 대해서 학습

 

1. 요구 페이징

프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법을 요구 페이징이라고 한다. 이름 그대로 실행에 요구되는 페이지만은 적재하는 기법이다.

 

① CPU가 특정 페이지에 접근하는 명령어를 실행한다.

 해당 페이지가 현재 메모리에 있을 경우 CPU는 페이지가 적재된 프레임에 접근한다.

③ 해당 페이지가 현재 메모리에 없을 경우 페이지 폴트가 발생한다.

④ 페이지 폴트 처리 루틴은 해당 페이지를 메모리로 적재하고 유효 비트를 1로 설정한다.

⑤ 다시 ①번을 수행한다.

 

요구 페이지 시스템이 안정적으로 작동하려면 필연적으로 필요한 페이지를 적재하기 위해 메모리에 적재된 페이지를 보조기억장치로 내보내야한다. 메모리에 적재된 많은 페이지 중 어떤 페이지를 내보내는 것이 최선인지 이를 결정하는 방법이 페이지 교체 알고리즘이다.

 

 

2. 페이지 교체 알고리즘

좋은 페이지 교체 알고리즘은 일반적으로 페이지 폴트를 가장 적게 일으키는 알고리즘이다. 페이지 폴트가 일어나면 보조기억장치로부터 필요한 페이지를 가져와야 하기 때문에 메모리에 적재된 페이지를 가져오는 것보다 느려지기 때문이다.

 

페이지 폴트가 자주 발생했다 = 보조기억장치로 내쫓을 페이지를 잘못 골랐다.

 

페이지 교체 알고리즘을 제대로 이해하려면 페이지 폴트 횟수를 알 수 있어야 한다. 그리고 페이지 폴트 횟수는 페이지 참조열을 통해 알 수 있다.

 

FIFO 페이지 교체 알고리즘 가장 단순한 방법으로 이름 그대로 가장 먼저 올라온 페이지부터 내쫓는 방식이다.
프로그램 실행 초기에 프로그램 실행 내내 사용될 내용이 포함된 경우 비효율적이다.
최적 페이지 교체 알고리즘 CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘이다.
앞으로의 사용 빈도가 가장 낮은 페이지를 교체하는 알고리즘으로 가장 낮은 페이지 폴트율을 보장하지만 실제 구현이 어렵다.
LRU 페이지 교체 알고리즘 최적 페이지 교체 알고리즘과 비슷한 알고리즘으로 가장 오랫동안 사용되지 않은 페이지를 교하는 알고리즘이다.
'최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을 것'이라는 아이디어를 토대로 만들어진 알고리즘이다.

 

 

3. 스레싱과 프레임 할당

페이지 폴트가 자주 발생하는 더 근본적인 이유는 프레임 수가 적기 때문이다. 반대로 프로세스가 사용할 수 있는 프레임 수가 많으면 일반적으로 페이지 폴트 빈도는 감소한다. 프레임이 부족하면 CPU는 페이지 폴트가 자주 발생하고 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는데 이러한 문제를 스래싱이라고 한다.

스래싱이 발생하는 근본적인 원인은 각 프로세스가 필요로하는 최소한의 프레임 수가 보장되지 않았기 때문이다. 그렇기 때문에 운영체제는 각 프로세스들이 무리 없이 실행하기 위한 최소한의 프레임 수를 파악하고 프로세스들에 적절한 수만큼 프레임을 할당해 줄 수 있어야 한다.

균등 할당 세 개의 프로세스에 총 300개의 프레임을 할당할 수 있다면 각 프로세스에 100개씩 프레임을 할당하는 방식
프로세스들의 크기는 각기 다르기 때문에 동일한 프레임 개수를 할당하는 것은 비합리적
비례 할당 프로세스의 크기가 크면 프레임을 많이 할당하고 크기가 작으면 프레임을 적게 나눠 주는 방식

→ 정적 할당 방식

 

프로세스를 실행하는 과정에서 배분할 프레임을 결정하는 방식으로는 크게 두 가지 방식이 있다. → 동적 할당 방식

작업 집합 모델 '프로세스가 일정 기간 동안 참조한 페이지 집합'을 기억하여 빈번한 페이지 교체를 방지하는 것
실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 집합을 작업 집합이라고 한다. CPU가 과거에 주로 참조한 페이지를 작업 집합에 포함한다면 운영체제는 작업 집합의 크기만큼만 프레임을 할당해 주면 된다.
페이지 폴트 빈도 아래의 두 개의 가정에서 생겨난 아이디어이다.
① 페이지 폴트율이 너무 높으면 그 프로세스를 너무 적은 프레임을 갖고 있다. 
② 페이지 폴트율이 너무 낮으면 그 프로세스는 너무 많은 프레임을 갖고 있다.
페이지 폴트율에 상한선과 하한선을 정하고, 이 범위 안에서만 프레임을 할당하는 방식이다.

 

 

Chapter 15 파일 시스템

 

15-1 파일과 디렉터리

파일과 디렉터리에 대해 학습

 

1. 파일

파일이란 하드 디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합을 의미한다. 모든 파일에는 이름과 파일을 실행하기 위한 정보, 그리고 파일 관련 부가 정보가 있다. 이 부가 정보는 속성 또는 메타데이터라고 부른다. 파일 형식, 위치, 크기 등 파일과 관련된 다양한 정보를 파일 속성이라고 한다.

 

운영체제마다 유지하는 파일 속성을 조금씩 차이가 있지만, 대표적인 속성의 종류는 아래와 같다.

속성 이름 의미
유형 운영체제가 인지하는 파일의 종류를 나타낸다.
크기 파일의 현재 크기와 허용 가능한 최대 크기를 나타낸다.
보호 어떤 사용자가 해당 파일을 읽고, 쓰고, 실행할 수 있는지를 나타낸다.
생성 날짜 파일이 생선된 날짜를 나타낸다.
마지막 접근 날짜 파일에 마지막으로 접근한 날짜를 나타낸다.
마지막 수정 날짜 파일이 마지막으로 실행된 날짜를 나타낸다.
생성자 파일을 생성한 사용자를 나타낸다.
소유자 파일을 소유한 사용자를 나타낸다.
위치 파일의 보조기억장치상의 현재 위치를 나타낸다.

 

파일 속성 중 파일 유형을 운영체제가 인식하는 파일 종류는 나타낸다. 같은 이름의 파일일지다로 텍스트 파일, 실행 파일, 음악 파일 등 유형이 다르면 실행 양상도 달라진다. 그래서 파일을 실행할 운영체제에 파일 유형을 알려주어야한다. 파일 유형을 알리기 위해 가장 흔히 사용하는 방식은 파일 이름 뒤에 붙는 확장자를 이용하는 것이다. 확장자는 다들 많이 아니까 표 생략ㅎㅎ

 

파일을 다루는 모든 작업은 운영체제에 의해 이루어진다.

 

 

2. 디렉터리

파일들을 일목요연하게 관리하기 위해 디렉터리를 이용할 수 있다. 윈도우 운영체제에서는 디렉터리를 폴더라고 부른다.

옛날 운영체제에서는 하나의 디렉터리만 존재했다. 모든 파일이 하나의 디렉터리 아래에 있는 구조를 1단계 디렉터리라고 부른다. 컴퓨터 용량이 커지고 저장할수 있는 파일이 많아지면서 여러 계층을 가진 트리 구조 디렉터리가 생겨나게 되었다. 그러다 보니 자연스럽게 생긴 개념이 바로 경로이다.

절대 경로 루트 디렉터리(최상위 디렉터리)에서 자기 자신까지 이르는 고유한 경로
상대 경로 현재 디렉터리부터 시작하는 경로

 

파일과 디렉터리는 서로 다른 별개의 존재가 아니다. 많은 운영체제에서 디렉터리를 그저 '특별한 형태의 파일'로 간주한다. 즉, 디렉터리도 파일이다.

파일이 내부에 해당 파일과 관련된 정보를 담고 있다면, 디렉터리는 내부에 해당 디렉터리에 담겨 있는 대상과 관련된 정보를 담고 있다. 그리고 이 정보는 보통 테이블(표) 형태로 구성된다. 즉, 디렉터리는 보조기억장치에 테이블 형태의 정보로 저장된다.

 

 

15-2 파일 시스템

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

 

1. 파티셔닝과 포매팅

보조기억장치를 사용하려면 파티션을 나누는 작업(파티셔닝)과 포맷 작업(포맷팅)을 거쳐야한다. 파티셔닝은 저장 장치의 논리적인 영역을 구획하는 작업을 의미한다. 파티셔닝 작업을 통해 나누어진 영역 하나하나를 파티션이라고 한다. 포매팅이란 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업을 의미한다. 즉, 어떤 종류의 파일 시스템을 사용지 결정된다.

 

 

2. 파일 할당 방법

운영체제는 파일과 디렉터리를 블록 단위로 읽고 쓴다. 즉, 하나의 파일이 보조기억장치에 저장될 때는 하나 이상의 블록에 걸쳐 저장된다. 하드 디스크의 가장 작은 저장 단위는 섹터이지만, 운영체제는 하나 이상의 섹터를 블록이라는 단위로 묶은 뒤 블록 단위로 파일과 디렉터리를 관리한다. 파일을 보조기억장치에 할당하는 방법에는 크게 두 가지가 있다.

연속 할당 가장 단순한 방식으로 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식
파일을 그저 연속적으로 할당하는 방식이기에 구현은 간단하지만 외부 단편화를 야기한다.
불연속 할당 연결 할당 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당하는 방식
연결할당음 외부 단편화 문제를 해결하지만 이 또한 단점이 존재한다.
① 반드시 첫 번째 블록부터 읽어야 한다. 
하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근할 수 없다.
이를 변형하여 사용한 파일 시스템이 FAT 파일 시스템
색인 할당 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식
연결 할당과 달리 파일 내 임의의 위치에 접근하기 쉽다.
→ 이를 기반으로 만든 파일 시스템이 유닉스 파일 시스템

 

 

3. 파일 시스템 살펴보기

다양한 파일 시스템이 있지만 대표적으로 소개하는 파일 시스템에는 크게 두 가지가 있다.

FAT 파일 시스템 USB 메모리, SD 카드 등의 저용량 저장장치에서 사용
각 블록에 포함된 다음 블록의 주소를 한데 모아 테이블의 형태로 관리하면 앞서 설명한 연결 할당의 단점을 상당 부분 해소할 수 있다. 이러한 테이블을 파일 할당 테이블(FAT)이라고 한다.
FAT 파일 시스템에서 FAT는 파티션의 앞부분에 만들어진다. 그 뒤이어 루트 디렉터리가 저장되는 영역이 있고, 그 뒤에 서브 디렉터리와 파일들을 위한 영역이 있다.
유닉스 파일 시스템 유닉스 계열 운영체제에서 사용
유닉스 파일 시스템에서는 색인 블록은 i-node라고 부른다. i-node에는 열다섯 개의 블록 주소가 저장될 수 있다. .i-node들은 파티션 내 특정 영역에 모여 있다. i-node 영역에 i-node들이 있고, 데이터 영역에 디렉터리와 파일들이 있다. i-node는 유한하기 때문에 i-node 하나만으로 파일의 데이터 블록을 모두 가리킬 수 없다. 유닉스 파일 시스템은 이러한 문제를 아래와 같이 해결한다.

① 블록 주소 중 열두 개에는 직접 블록 주소를 저장한다.
② 첫번째 내용으로 충분하지 않다면 열세 번재 주소에 단일 간접 블록 주소를 저장한다.
③ 두번째 내용으로 충분하지 않다면 열네 번째 주소에 이중 간접 블록 주소를 저장한다.
④ 세번째 내용으로 충분하지 않다면 열다섯 번째 주소에 삼중 간접 블록 주소를 저장한다.

위의 방법으로 i-node만 알면 파일 속성뿐만 아니라 파일 크기가 크더라도 파일 데이터를 모두 가리킬 수 있다.

 


 

숙제

400p. 확인문제 1번

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

최초적합 : 최초로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방식

최악적합 : 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식

최적적합 : 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식

 


 

추가숙제

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

 

2 → 2

3 → 2 3

1 → 2 3 1

3 → 2 3 1

5 5 3 1 (오랫동안 사용하지 않은 페이지  2)

2 → 5 3 2 (오랫동안 사용하지 않은 페이지  1)

3 → 5 3 2

4 4 3 2 (오랫동안 사용하지 않은 페이지  5)

2 → 4 3 2

3 → 4 3 2

 

총 3번의 페이지 폴트가 발생한다.