[혼공학습단] 컴퓨터 구조 + 운영체제 6주차 (chapter 14~15)

royalmilktea·2023년 8월 27일
0
post-thumbnail

Chpater 14. 가상 메모리

14-1. 연속 메모리 할당

스와핑

입출력 작업의 요구로 대기 상태가 된 프로세스라던지, 오랫동안 사용되지 않은 프로세스들을 임시로 보조기억장치 일부 영역으로 쫓아내고, 그렇게 해서 생긴 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식을 스와핑이라고 한다

이때 프로세스들이 쫓겨나는 보조기억장치의 일부 영역을 스왑 영역이라고 하고 현재 실행되지 않은 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것을 스왑 아웃, 반대로 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨지는 것을 스왑 인이라고 한다.

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

메모리 할당

메모리 공간에 프로세스를 연속적으로 할당하는 방식을 알아보자

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

외부 단편화

연속 메모리 할당은 외부 단편화라는 문제를 내포한다.

프로세스들이 메모리에 연속적으로 할당하는 환경에서는 프로세스들이 실행되고 종료되기를 반복하며 메모리 사이 사이에 빈 공간이 생긴다. 프로세스 바깥에 생기는 이러한 빈 공간들을 분명 빈 공간이지만 그 공간보다 큰 프로세스를 적재하기 어려운 상황을 초래하고, 결국 메모리 낭비로 이어진다. 이러한 현상을 외부 단편화라고 한다.

  • 외부 단편화를 해결할 수 있는 대표적인 방안으로 압축하는 방법이 있다. 메모리 조각 모음이라고도 부른다. 압축은 여기저기 흩어져 있는 빈 공간들을 하나로 모으는 방식으로 메모리 내에 저장된 프로세스를 적당히 재배치시켜 여기저기 흩어져있는 작은 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법이다.
    - 다만 압축 방식은 여러 단점이 있다. 작은 빈 공간들을 하나로 모으는 동안 시스템은 하던 일을 중지해야 하고, 메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기하며, 어떤 프로세스를 어떻게 움직여야 오버헤드를 최소화 할 수 있는지에 대한 명확한 방법을 결정하기 어렵다.
    • 이에 외부 단편화를 없앨 수 있는 또 다른 해결방안이 등장했는데, 이것이 오늘날까지도 사용되는 가상 메모리 기법, 그 중에서도 페이징 기법이다.

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

프로세스를 메모리에 연속적으로 할당하는 방식은 두 가지 문제를 내포한다.

  1. 외부 단편화
  2. 물리 메모리보다 큰 프로세스를 실행할 수 없다.

가상 메모리는 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술이다. 이를 가능케 하는 가상 메모리 관리 기법에는 크게 페이징세그멘테이션이 있지만, 이 책에서는 현재 대부분의 운영체제가 사용하는 페이징 기법을 다룬다.

페이징이란

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

페이징에서도 스와핑을 사용할 수 있다. 페이징을 사용하는 시스템에서는 프로세스 전체가 스왑 아웃/스왑 인되는 것이 아닌 페이지 단위로 스왑 아웃/스왑 인된다. 페이징 시스템에서의 스왑 아웃은 페이지 아웃, 스왑 인은 페이지 인이라고 부르기도 한다.

페이지 테이블

프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU 입장에서 이를 순차적으로 실행할 수 없는 문제가 있다. 프로세스를 이루는 페이지가 어느 프레임에 적재되어 있는지 CPU가 모두 알고 있기 어렵기 때문이다. 즉, 프로세스가 메모리에 불연속적으로 배치되면 CPU 입장에서 '다음에 실행할 명령어 위치'를 찾기가 어려워진다.

이를 해결하기 위해 페이징 시스템은 프로세스가 비록 물리 주소에 불연속적으로 배치되더라도 논리 주소에는 연속적으로 배치되도록 페이지 테이블을 이용한다.

페이지 테이블은 페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표이다. 다시 말해 페이지 테이블은 현재 어떤 페이지가 어떤 프레임에 할당되었는지를 알려준다.

프로세스마다 각자의 프로세스 테이블을 가지고 있고 각 프로세스의 페이지 테이블은 메모리에 적재되어 있다. 그리고 CPU 내의 페이지 테이블 베이스 레지스터는 각 프로세스의 페이지 테이블이 적재된 주소를 가리키고 있다.

페이징에서의 주소 변환

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

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

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

페이징 테이블 엔트리

페이지 테이블의 각각의 행들을 페이지 테이블 엔트리라고 한다. 페이지 엔트리에 담기는 정보로 페이지 번호, 프레임 번호만을 설명했지만, 유효 비트, 보호 비트, 참조 비트, 수정 비트도 있다.

  • 유효 비트: 현재 해당 페이지에 접근 가능한지 여부를 알려준다.
  • 보호 비트: 페이지 보호 기능을 위해 존재하는 비트이다.
  • 참조 비트: CPU가 이 페이지에 접근한 적이 있는지 여부를 나타낸다.
  • 수정 비트: 해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부를 알려준다. 더티 비트라고도 부른다.

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

요구 페이징

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

참고로 아무런 페이지도 메모리에 적재되지 않은 채 무작정 실행부터 할 수도 있따 .이 경우 프로세스의 첫 명령어를 실행하는 순간부터 페이지 폴트가 계속 발생하게 되고, 실행에 필요한 페이지가 어느 정도 적재된 이후부터는 페이지 폴트 발생 빈도가 떨어진다.
이를 순수 요구 페이징 기법이라고 한다.

요구페 페이징 시스템이 안정적으로 작동하려면 필연적으로 다음 두 가지를 해결해야 한다. 하나는 페이지 교체이고, 다른 하나는 프레임 할당이다.

메모리에 적재된 많고 많은 페이지 중 어떤 페이지를 내보내는 것이 최선일까? 이를 결정하는 방법이 페이지 교체 알고리즘이다. 즉, 쫓아낼 페이지를 결정하는 방법을 페이지 교체 알고리즘이라 한다.

페이지 교체 알고리즘

일반적으로 페이지 폴트를 가장 적게 일으키는 알고리즘을 좋은 알고리즘으로 평가한다. 그렇기에 페이지 교체 알고리즘을 제대로 이해하려면 페이지 폴트 횟수를 알 수 있어야 한다. 그리고 페이지 폴트 횟수는 페이지 참조열을 통해 알 수 있다.

FIFO 페이지 교체 알고리즘

메모리에 가장 먼저 올라온 페이지부터 내쫓는 방식이다. FIFO 페이지 교체 알고리즘은 아이디어와 구현이 간단하지만, 프로그램 실행 내내 사용될 내용이 먼저 적재되었다고 쫓아내는 상황이 발생할 수 있다.

최적 페이지 교체 알고리즘

CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘이다. 보조기억장치로 내보내야 할 페이지는 앞으로 사용 빈도가 가장 낮은 페이지임로, 앞으로의 사용 빈도가 가장 낮은 페이지를 교체하는 알고리즘을 페이지 교체 알고리즘으로 삼는 것이 가장 합리적이다.

LRU 페이지 교체 알고리즘

가장 오랫동안 사용되지 '않은'페이지를 교체하는 알고리즘이다. LRU 페이지 교체 알고맂므은 '최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을 것'이라는 아이디어를 토대로 만들어진 알고리즘이다.

스래싱과 프레임 할당

프레임이 부족하면 CPU는 페이지 폴트가 자주 발생할 수 밖에 없다. 실행의 맥이 탁 탁 끊기고, 결과적으로 CPU의 이용률도 떨어진다. 이처럼 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제를 스래싱이라고 한다.

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

Chpater 15. 파일 시스템

15-1. 파일과 디렉터리

파일

파일이란 하드 디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합을 의미한다. 달리 표현하면 파일은 의미 있고 관련 있는 정보를 모은 논리적 단위를 의미한다.

모든 파일에는 이름과 파일을 실행하기 위한 정보, 그리고 파일 관련 부가 정보가 있다. 이 부가 정보를 속성(attribute) 또는 메타데이터(metadata)라고 부른다.

디렉터리

파일들을 일목요연하게 관리하기 위해 디렉터리를 이용할 수 있다. 윈도우 운영체제에서는 디렉터리를 폴더라고 부른다. 옛날 운영체제에서는 하나의 디렉터리만 존재했다. 모든 파일이 하나의 디렉터리 아래에 있었는데 이를 디렉터리 구조를 1단계 디렉터리라고 부른다. 이와 같은 구조로는 많은 파일을 관리하기가 어렵기 때문에 여러 계층을 가진 트리 구조 디렉터리가 생겨나게 되었다.

최상위 디렉터리는 흔히 루트 디렉터리라고 부르고 슬래시(/)로 표현한다. 그러다 보니 자연스레 생긴 개념이 바로 경로(path)이다. 경로는 디렉터리를 이용해 파일 위치, 나아가 파일 이름을 특정 짓는 정보이다.

절대 경로와 상대 경로

  • 절대 경로: 모든 파일은 루트 디렉터리에서 자기 자신까지 이르는 고유한 경로를 가지고 있고, 이러한 경로를 절대 경로(absolute path)라고 부른다.
  • 상대 경로: 절대 경로구 루트 디렉터리부터 시작하는 경로라면 상대 경로(relative path)는 현재 디렉터리부터 시작하는 경로이다.

15-2. 파일 시스템

파티셔닝과 포매팅

파티셔닝(partitioning)은 저장 장치의 논리적인 영역을 구획하는 작업을 의미한다. 칸막이로 영역을 나누는 작업을 말하며, 하드 디스크나 SSD처럼 용량이 큰 저장 장치를 하나 이상의 논리적인 단위로 구획하는 것이다. 그리고 이렇게 파티셔닝 작업을 통해 누어진 영역 하나하나를 파티션(partition)이라고 한다.

포맷하는 작업, 즉 포맷팅(formating)은 저장 장치를 완전히 삭제하는 것으로 알고 있는 사람들이 많지만, 사실 이는 완벽하게 정확한 표현이라고 보기는 어렵다. 포매팅이란 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업을 의미한다. 즉, 어떤 종류의 파일 시스템을 사용할지는 바로 이때 결정된다.

파일 할당 방법

운영체제는 파일과 디렉터리를 블록(block) 단위로 읽고 쓴다. 즉 하나의 파일이 보조기억장치에 저장될 때는 하나 이상의 블록에 걸쳐 저장된다. 이런 상황에서 파일을 보조기억장치에 할당하는 방법에는 크게 두 가지가 있다. 연속 할당불연속 할당이다. 그리고 불연속 할당에는 크게 연결 할당, 색인 할당이 있다.

파일 시스템 살펴보기

다양한 파일 시스템이 있지만 여러 전공서에서 공통으로 소개하는 파일 시스템은 크게 두 가지이다. 하나는 USB 메모리, SD 카드 등의 저용량 저장 장치에서 사용되는 FAT 파일 시스템이고, 다른 하나는 유닉스 계열 운영체제에서 사용되는 유닉스 파일 시스템이다.

📌기본미션: P. 400 확인 문제 1번 풀고 인증하기

0개의 댓글