서평활동
혼공 컴운 - 6주차 정리
디지털노마더
2023. 2. 19. 15:25
14장. 가상 메모리
14-1. 연속 메모리 할당
스와핑
- 메모리에서 미사용 상태인 일부 프로세스를 보조 기억 장치로 보내고 실행할 프로세스를 메모리에 적재하는 메모리 기법
- 스왑 영역 : 프로세스가 쫓겨나는 보조 기억 장치의 일부 영역
- 스왑 아웃 : 사용되지 않는 프로세스들이 메모리에서 스왑 영역으로 보내지는 것
- 스왑 인 : 스왑 영역에서 메모리로 적재되는 것.
메모리 할당
- 비어있는 메모리 공간에 프로세스를 연속적으로 할당하는 방식
최초 적합 (First Fit)
- 프로세스가 적재될 수 있는 공간을 발견하는 즉시 메모리를 할당하는 방식
- 검색 최소화, 빠른 할당 가능
최적 적합 (Best Fit)
- 운영체제가 메모리의 빈 공간을 모두 검색하고, 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스 배치
최악 적합 (Worst Fit)
- 운영체제가 메모리의 빈 공간을 모두 검색하고, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스 배치
외부 단편화 (External Fragmentation)
- 프로세스들이 메모리에 연속적으로 할당되고 종료되는 과정을 반복
- 프로세스 사이에 빈 메모리 공간이 생김
- 빈 메모리 공간을 합쳐서 보면 충분한 공간이지만, 프로세스를 적재할 수 없는 상황 : 외부 단편화
- 메모리 낭비!
압축
- 외부 단편화를 해결하는 방법. 메모리 조각 모음
- 비어있는 공간들을 하나로 모으는 방식
- 이 과정에서 시스템은 하던 일을 중지해야하고, 메모리의 내용 옮기는 과정에서 많은 오버헤드 야기
- -> 가상 메모리 기법 중 페이징 기법이 등장
14-2. 페이징을 통한 가상 메모리 관리
- 가상 메모리 : 실행하고자 하는 프로그램 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술
- 페이징, 세그멘테이션
페이징
- 프로세스의 논리 주소 공간을 페이지라는 단위로 자르고
- 메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크기의 단위로 자르고
- 페이지를 프레임에 할당하는 것이 페이징
- 프로세스 단위가 아닌 프레임 단위로 페이지 아웃, 페이지 인
페이지 테이블
- 프로세스가 메모리에 불연속적으로 적재되어 있으면 CPU는 순차적 실행 불가 : 다음에 실행할 명령어 위치 찾기 힘듦
- 실제 메모리 물리 주소에서는 불연속적이더라도 CPU가 바라보는 논리 주소에는 연속적으로 배치되도록 하는 것이 페이지 테이블
- 페이지 번호와 프레임 번호를 이어줌
- 프로세스마다 프로세스 페이지 테이블이 있음
- CPU에서 0, 1, 2를 페이지 테이블을 통해 물리 주소의 프레임 위치로 찾아 감
- 내부 단편화 발생 가능
- 프로세스를 페이지라는 단위로 자르는데, 남는 부분이 있음.
- 프레임보다 작은 크기의 페이지를 넣게 되면, 메모리에 남는 부분이 생긴다. -> 내부 단편화
- 일부 운영체제 (리눅스) 에서는 기본 페이지 크기보다 더 큰 페이지를 허용하여 메모리에 유지하는 경우도 있음 (대형 페이지 huge page) 라고 함
- 페이지 테이블 베이스 레지스터 (PTBR : Page Table Base Register) : CPU 내에서 각 프로세스의 페이지 테이블이 적재된 주소를 가리킴
- 메모리 접근 시간이 두 배로 늘어남
- 메모리에 있는 페이지 테이블을 보기 위해
- 페이지 테이블을 통해 알게 된 프레임에 접근하기 위해
- CPU 곁에 (MMU 내에) TLB Translation Lookaside Buffer라는 페이지 테이블 캐시 메모리를 둠
- 참조 지역성에 근거해 최근 사용된 페이지 위주로 저장
- TLB 히트 : 논리 주소에 대한 페이지 번호가 TLB에 있는 경우
- TLB 미스 : 논리 주소에 대한 페이지 번호가 TLB에 없는 경우 (메모리의 페이지 테이블에 접근해야 함)
페이징 주소 변환
- 특정 주소에 접근하기 위해 필요한 정보
- 어떤 페이지, 프레임에 접근하고 싶은지
- 접근하려는 주소가 그 페이지, 프레임으로부터 얼마나 떨어져 있는지
- 논리주소는 페이지 번호와 변위로 이뤄져있음
- 논리주소 <페이지 번호, 변위> -> 페이지 테이블 -> 물리주소 <프레임 번호, 변위> (변위 값은 동일)
페이지 테이블 엔트리
- 페이지 테이블 엔트리 PTE Page Table Entry : 페이지 테이블의 각 행
- 페이지 번호, 프레임 번호, 유효 비트, 보호 비트, 참조 비트, 수정 비트
유효 비트 (Valid Bit)
- 현재 해당 페이지 접근 가능 여부
- 페이지가 보조기억장치(스왑 영역)에 있는 경우는 메모리에 적재되어 있기 않기 때문에 접근 불가
- 메모리에 없는 페이지(유표비트가 0)로 접근하고자하면 페이지 폴트 예외 발생 - 하드웨어 인터럽트 처리 방식처럼 처리
- CPU는 기존 작업 백업
- 페이지 폴트 처리 루틴 실행
- 페이지를 메모리로 가져오고 유효 비트를 1로 변경
- CPU는 해당 페이지에 접근 가능
보호 비트 (Protection Bit)
- 페이지 보호 기능. 읽고 쓰기가 가능한 페이지인지, 읽기만 가능한 페이지인지 표기
- 접근권한을 제한하여 페이지 보호
- 읽기, 쓰기, 읽기/실행, 읽기/쓰기/실행
참조 비트 Reference Bit
- CPU가 이 페이지에 접근한 적 있는지
수정 비트 Modified bit, 더티 비트 Dirty bit
- 데이터를 쓴 적이 있는지 없는지 수정 여부
- 페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야하는지, 할 필요가 없는지 판단
14-3. 페이지 교체와 프레임 할당
요구 페이징
- 필요한 페이지만을 메모리에 적재하는 기법
- 순수 요구 페이징 기법 : 메모리에 페이지 적재하지 않은 채로 시작. 초기에는 페이지 폴트 발생. 이후에는 페이지 폴트 빈도 줄음
- 페이징 시스템이 안정적으로 작동하려면 페이지교체, 프레임할당이 원활히 이루어져야 함
페이지 교체 알고리즘
- 메모리에서 쫓아낼 페이지를 결정하는 방법
- 페이지 폴트 횟수를 알아야하며, 이는 페이지 참조열로 알 수 있음
- 페이지 참조열 : CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지열
FIFO 페이지 교체 알고리즘
- 메모리에 가장 먼저 올라온 페이지부터 내쫓음
- 구현 간단. 효율 낮음
- 2차 기회 페이지 교체 알고리즘 : FIFO 페이지 알고리즘 + 페이지의 참조 비트 참고
최적 페이지 교체 알고리즘
- 앞으로 사용할 빈도가 가장 낮은 페이지를 내쫓음
- 페이지 폴트율 제일 낮음
- 구현 어려움
LRU 페이지 교체 알고리즘
- 오랫동안 사용하지 않은 페이지를 내쫓음
스래싱과 프레임 할당
- 스래싱 (Thrashing) : 프로세스가 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저하되는 문제
- 값이 높으면 CPU 효율 높음
- 값이 낮으면 CPU 효율 낮음
- 멀티프로그래밍 정도 : 현재 메모리에 동시에 실행 중인 프로세스의 양
- 멀티프로그래밍 정도를 지나치게 높이면 각 프로세스가 사용가능한 프레임수가 적어지고, 페이지 폴트는 빈번하게 발생. CPU 효율 저하
- CPU 성능 좋아도 메모리에서 동시 실행 프로세스 수용 못하면 컴퓨터 성능 저하
프레임 할당 방식
- 정적 할당 방식 : 프로세스 실행 과정 고려 없이 프로세스 크기, 물리 메모리 크기만 고려
- 균등 할당 : 모든 프로세스에 균등하게 프레임 할당
- 프로세스 크기가 각기 다르므로 비추천
- 비례 할당 : 프로세스 크기 크면 많은 프레임을, 작으면 적은 프레임을 할당
- 균등 할당 : 모든 프로세스에 균등하게 프레임 할당
- 동적 할당 방식 : 프로세스 실행을 보고 할당할 프레임 수 결정
- 작업 집합 모델 사용 방식
- 작업 집합 : 실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 집합
- 스래싱은 빈번한 페이지 교체에 의해 발생
- 프로세스가 일정 기간 동안 참조한 페이지 집합을 기억하여 빈번한 페이지 교체 방지
- CPU가 과거에 주로 참조한 페이지를 작업 집합에 포함한다면, 운영체제는 작업 집합의 크기만큼만 프레임 할당
- 페이지 폴트 빈도 (PFF) 사용 방식
- 페이지 폴트율이 높으면 그 프로세스는 너무 적은 프레임을 갖고 있음
- 페이지 폴트율이 낮으면 그 프로세스는 너무 많은 프레임을 갖고 있음
- 페이지 폴트율에 상한선과 하한선을 정하고, 그 내부 범위 안에서만 프레임 할당
- 작업 집합 모델 사용 방식
15장. 파일 시스템
1. 파일과 디렉터리
(1) 파일
- 파일 : 보조기억장치에 저장된 관련 정보의 집합, 의미 있고 관련 있는 정보를 모은 논리적인 단위
- 파일은 이름, 파일을 실행하기 위한 정보, 파일 관련 부가 정보가 있으며 부가 정보를 속성(attribute) 또는 메타데이터(metadata) 라고 부름
- 파일 연산을 위한 시스템
- 파일을 다루는 모든 작업은 운영체제에 의해 이루어지며 어떤 응용 프로그램도 파일을 조작할 수 없고 운영체제에게 요청해야 함
- 이를 위해 운영체제는 파일 연산을 위한 시스템 호출을 제공
- 파일 생성 / 삭제 / 열기 /닫기 / 읽기 / 쓰기
- 파일 속성과 유형
유형 | 운영체제가 인지하는 파일의 종류를 나타냄, 파일 이름 뒤에 확장자를 이용 |
크기 | 파일의 현재 크기와 허용 가능한 최대 크기를 나타냄 |
보호 | 어떤 사용자가 해당 파일을 읽고 쓰고 실행할 수 있는지 나타냄 |
생성 날짜 | 파일이 생성된 날짜 |
마지막 접근 날짜 | 파일에 마지막으로 접근한 날짜 |
마지막 수정 날짜 | 파일이 마지막으로 수정된 날짜 |
생성자 | 파일을 생성한 사용자를 나타냄 |
소유자 | 파일을 소유한 사용자를 나타냄 |
위치 | 파일의 보조기억장치 상의 현재 위치를 나타냄 |
(2) 디렉터리
- 파일들을 일목요연하게 관리하기 위해 이용하며, 윈도우 운영체제에서는 디렉터리를 폴더라고 부름
- 트리 구조 디렉터리
- 최상위 디렉터리인 루트 디렉터리(/) 아래에 여러 서브 디렉터리가 존재
- 윈도우 운영체제 ex) C:\로 표현
- 경로(path) : 디렉터리를 이용해 파일 위치, 파일 이름을 특정 짓는 정보
- 절대 경로와 상대 경로
- 절대 경로(absolute path) : 루트 디렉터리부터 시작하는 경로
- /->home->user 구조에서 user 디렉터리 내의 test.jpg -> /home/user/test.jpg
- 상대 경로(relative path) : 현재 디렉터리부터 시작하는 경로
- 위의 구조를 가진 상황에서 현재 디렉터리가 /home일 경우 test.jpg -> user/test.jpg
- 상대 경로를 나타내는 또 다른 방법
- 대부분의 운영체제는 현재 작업 디렉터리를 마침표(.)로 나타냄
- 현재 작업 디렉터리의 상위 디렉터(부모 디렉터)는 마침표 두 번(..)으로 나타냄
- 위에서 알아본 상대 경로를 다음과 같이 표현할 수 있음
- ./user/test.jpg (home의 /user/test.jpg)
- 절대 경로(absolute path) : 루트 디렉터리부터 시작하는 경로
- 디렉터리 연산을 위한 시스템 호출
- 파일과 마찬가지로 운영체제는 디렉터리 연산을 위한 시스템 호출을 제공
- 디렉터리 생성 / 삭제 / 열기 / 닫기 / 읽기
- 디렉터리 엔트리
- 디렉터리와 파일은 다른 별개의 존재가 아니며, 디렉터리는 그저 특별한 형태의 파일로 간주
- 파일이 내부에 해당 파일과 관련된 정보를 담고 있다면 디렉터리는 내부 해당 디렉터리에 담겨 있는 대상과 관련된 정보를 담고 있으며 이는 테이블 형태로 구성됨
- 즉, 디렉터리는 보조기억장치에 테이블 형태의 정보로 저장됨
- 디렉터리 엔트리(행)에 담기는 정보는 파일 시스템마다 차이가 있으나, 공통적으로 디렉터리에 포함된 대상의 이름과 그 대상이 보조기억장치 내에 저장된 위치를 유추할 수 있는 정보가 담김
[ 기본 미션 ]
p. 400 - 확인 문제 1번
· (최초 적합) : 최초로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방식
· (최악 적합) : 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식
· (최적 적합) : 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식
[ 선택 미션 ]
프로세스가 사용할 수 있는 프레임이 3개 있고, 페이지 참조열이 '2414523423' 일 때 FIFO, 최적 페이지, LRU 페이지 교체 알고리즘으로 이 페이지를 참조한다면 몇 번의 페이지 폴트가 발생하는가?
FIFO 페이지 교체 알고리즘 (쌓인 순서대로 페이지를 교체)
: 페이지 폴트 횟수 4번
페이지 | 2 | 4 | 1 | 4 | 5 | 2 | 3 | 4 | 2 | 3 |
프레임 | 2 | 2 | 2 | 2 | 5 | 5 | 5 | 4 | 4 | 4 |
4 | 4 | 4 | 4 | 2 | 2 | 2 | 2 | 2 | ||
1 | 1 | 1 | 1 | 3 | 3 | 3 | 3 | |||
보조기억장치 | 2 | 4 | 1 | 5 |
최적 페이지 교체 알고리즘 (사용 빈도가 가장 낮은 페이지를 교체)
: 페이지 폴트 횟수 2번
페이지 | 2 | 4 | 1 | 4 | 5 | 2 | 3 | 4 | 2 | 3 |
프레임 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | ||
1 | 1 | 5 | 5 | 3 | 3 | 3 | 3 | |||
보조기억장치 | 1 | 5 |
LRU 페이지 교체 알고리즘 (가장 오랫동안 미사용한 페이지 교체)
: 페이지 폴트 횟수 4번
페이지 | 2 | 4 | 1 | 4 | 5 | 2 | 3 | 4 | 2 | 3 |
프레임 | 2 | 2 | 2 | 2 | 5 | 5 | 5 | 4 | 4 | 4 |
4 | 4 | 4 | 4 | 4 | 3 | 3 | 3 | 3 | ||
1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | |||
보조기억장치 | 2 | 1 | 4 | 5 |