일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- HTML
- Do it
- 이벤트
- Git
- 코딩 자율학습 html + css + 자바스크립트]
- propschildren
- do it! html+css+자바스크립트 웹 표준의 정석
- 코딩
- css필수 속성
- CPU
- html 문서작성
- css박스 모델
- 코딩 자율학습
- CSS
- html 실무
- JS
- html 기본문서
- do it! 한권으로 끝내는 웹 기본 교과서 html+css+자바스크립트 웹 표준의 정석
- 코딩 자율학습 html + css + 자바스크립트
- css배경
- https://api.jquery.com/
- react
- 코딩자율학습
- JavaScript
- TS
- 혼자 공부하는 컴퓨터구조+운영체제
- 메모리와 캐시 메모리
- html 필수태그
- cpu 성능 향상 기법
- 자바스크립트
- Today
- Total
게으른 나에게
[혼자 공부하는 컴퓨터구조+운영체제] "chapter14. 가상 메모리" 본문
14-1 연속 메모리 할당
연속 메모리 할당: 프로세스에 연속적인 메모리 공간 할당하는 방식
스와핑
메모리에 적재된 프로세스들 중에는 현재 실행되지 않는 프로세스가 있을 수 있음.
스와핑: 위와 같은 프로세스들 임시로 보조기억장치 일부영역으로 내보냄. -> 메모리 상의 빈공간에 다른 프로세스 적재하여 실행.
스왑영역: 내보낸 프로세스들있는 보조기억장치의 일부영역.
스왑 아웃: 현재 실행되지 않는 프로세스 메모리에서 스왑 영역으로 옮겨지는 것.
스왑 인: 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것.
- 스왑 아웃되었던 프로세스가 다시 스왑 인이 될 때는 이전 물리 주소와 다른 주소에 적재될 수 있음
스와핑 이용해 프로세스들이 요구하는 메모리 공간 크기가 실제 메모리 크기보다 크더라도 모든 프로세스를 동시 실행 가능.
메모리 할당
프로세스는 메모리 내 빈공간에 적재되어야 함.
비어있는 메모리 공간에 프로세스 연속적으로 할당하는 방식
1. 최초적합
2. 최적적합
3. 최악적합
메모리의 사용자 영역 총 200MB, 20MB 크기의 프로세스 적재 예정.
최초적합
운영체제가 메모리 내의 빈 공간을 순서대로 검색하다 적재할 수 있는 공간 발견하면 그 공간에 프로세스를 배치하는 방식.
적재 될 수 있는 공간을 찾으면 바로 할당, 검색 최소화 빠른 할당 가능.
최적 적합
운영체제가 빈 공간을 모두 검색해 본 후, 적재 가능한 가장 작은 공간 프로세스 배치 방식.
최악 적합
운영체제가 빈 공간을 모두 검색해 본 후, 적재 가능한 가장 큰 공간에 프로세스 배치 방식.
외부 단편화
연속 메모리 할당은 효율적 방법 x. -> 외부단편화 문제 내포.
사용자 영역 총 200MB, A, B, C, D차례대로 적재 할때,
B, D 실행 끝나면 메모리를 떠나고 있던 자리에 빈 공간 생김.
남아있는 빈공간의 총합은 50MB.
하지만 총합이 50MB일지라도 어느 빈 공간에도 50MB 크기의 프로세스 적재 불가능.
외부 단편화: 프로세스들 메모리에 연속적으로 할당되는 환경에서 프로세스들이 실행, 종료 반복하면서 메모리 사이사이에 빈공간 생김. 하지만 그 공간보다 큰 프로세스 적재 어렵기 때문에 메모리 낭비 생김.
반드시 해결해야 할 문제의 대표적 방안
압축: 메모리 압축. 메모리 조각모음. 여기저기 흩어져 있는 빈공간들 하나로 모으는 방식. 메모리 내 저장된 프로세스 재배치시켜 작은 빈공간들 하나의 큰 빈공간으로 만드는 방식.
단점: 작은 빈 공간들을 하나로 모으는 동안 시스템은 하던일 중지 해야 함. 메모리에 있는 내용 옮기는 작업은 많은 오버헤드 야기.
14-2 페이징을 통한 가상 메모리 관리
메모리에 연속적으로 할당하는 방식 두가지 문제 내포.
1. 외부 단편화
2. 물리 메모리보다 큰 프로세스 실행 불가능.
가상 메모리: 실행하고자 하는 프로그램을 일부만 메모리에 적재해 실제 물리 메로리 크기보다 더 큰 프로세스 실행할 수 있게 하는 기술.
페이징
외부 단편화가 생긴 근본적 이유: 각 다른 크기의 프로세스가 메모리에 연속적으로 할당됐기 때문.
페이징: 메모리와 프로세스를 일정한 단위로 자르고, 이를 메모리에 불연속적으로 할당.
페이지: 페이징을 위해 프로세스 논리 주소 공간 일정한 단위로 자르는 단위.
프레임: 메모리 물리 주소 공간을 페이지와 동일한 크기의 일정한 단위로 자른 것.
페이징에서도 스와핑 사용 가능.
페이지 아웃 = 스왑 아웃
페이지 인 = 스왑 인
한 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요 없음.
페이지 테이블
프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU는 이를 순차적 실행 불가능. 실행할 명령어 위치 찾기 어려움.
페이지 테이블: 물리 주소(실제 메모리 내 주소)에 불연속적으로 배치되더라도 논리 주소(CPU가 바라보는 주소)에는 연속적으로 배치되도록 하는 방법. 페이지 번호와 프레임 번호 짝지어주는 일종의 일정표.
프로세스들 메모리에 분산되어 저장되어 있더라도 CPU는 논리 주소 순차적 실행.
내부 단편화: 모든 프로세스가 페이지 크기에 딱 맞게 잘리지 않음. 이때 남는 크기.
프로세스마다 각자의 페이지 테이블 가지고 있고 각 프로세스의 페이지 테이블들은 메모리에 적재됨.
페이지 테이블 베이스 레지스터(PRBR): 각 프로세스 페이지 테이블이 적재된 주소 가리키는 곳.
페이지 테이블을 메모리에 두면 생기는 문제
: 메모리 접근 시간이 2배로 늘어짐(1. 메모리 있는 페이지 테이블 보기 위해 / 2.그렇게 알게 된 프레임 접근하기 위해)
TLB: CPU 곁에 페이지 테이블의 캐시메모리 둠. 테이블의 일부내용 저장. 참조 지역성에 근거해 주로 최근사용 페이지 위주 저장.
TLB 히트: CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우. 메모리 접근 필요 x.
TLB 미스: 페이지가 TLB에 없을 경우 페이지가 적재된 프레임 알기 위해 메모리 내 페이지 테이블에 접근하는 것.
페이징에서의 주소 변환
여러 주소 포괄. 특정 주소에 접근하기 위한 2가지 정보.
1. 어떤 페이지 혹은 프레임에 접근하고 싶은지
2. 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지.
페이징 시스템에서의 모든 논리주소 = "페이지 번호 + 변위"
ex) CPU가 32비트 주소 = 페이지 번호(N비트) + 변위 (32-N비트)
페이지 번호: 접근하고자 하는 페이지 번호. 페이지가 어떤 프레임에 할당 되었는지 알 수 있음.
변위: 접근하려는 주소가 프레임의 시작 번지로부터 얼만큼 떨어져 있는지 알기 위한 정보.
하나의 페이지/프레임이 네 개의 주소로 구성.
CPU가 5번 페이지, 변위 2라는 논리 주소(<5,2>) -> CPU는 1번 프레임, 변위 2 접근. 10번지 접근.
페이지 엔트리
페이지 테이블 엔트리에 담기는 정보: 페이지 번호, 프레임 번호, 유표 비트, 보호 비트, 참조 비트, 수정 비트
유효 비트
현재 해당 페이지에 접근 가능 여부.
현재 페이지가 메모리에 적재 (유효비트: 1) / 보조기억장치에 있는지 알려주는 비트(유효비트: 0).
페이지 폴트: CPU가 유효 비트가 0인 메모리에 적재되어 있지 않은 페이지로 접근하려고 할 때 예외 발생.
CPU가 페이지 폴트를 처리하는 과정은 하드웨어 인터럽트 처리하는 과정과 유사
보호비트
페이지 보호 기능 위해 존재하는 비트.
해당 페이지가 읽고 쓰기가 모두 가능한 페이지(보호비트: 1) / 읽기만 가능한 페이지(보호비트: 0)
프로세스를 이루는 요소 중 코드 영역은 읽기 전용 영역. 이러한 읽기 전용 페이지에 쓰기 시도를 하면 운영체제가 이를 막아줌.
보호비트는 세개의 비트로 복잡하게 구현 가능.
읽기(Read)를 나타내는 r, 쓰기(Write)를 나타내는 w, 실행(eXecute)을 나타내는 x의 조합으로 읽기, 쓰기, 실행하기 권한조합 나타냄.
참조비트
CPU가 이 페이지에 접근한 적이 있는지 여부
적재 이후 CPU가 읽거나 쓴 페이지(참조비트: 1) / 적재 이후 한 번도 읽거나 쓴 적 없는 페이지(참조비트: 0)
수정 비트(= 더티비트)
해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부.
변경된 적이 있는 페이지(수정비트: 1) / 변경된 적이 없는 페이지(수정비트: 0)
수정비트는 페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야하는지, 할 필요가 없는지 판단하기 위해 존재.
한번도 수정된 적 없는 페이지 스왑 아웃될 경우, 추가 작업 없이 새로 적재된 페이지로 덮어쓰기
쓰기 작업을 수행한 페이지의 경우 보조장치에 저장된 페이지의 내용과 메모리에 저장된 페이지 내용 서로 다른 값.
수정된 적 있는 페이지가 스왑 아웃 될 경우, 변경된 값 보조기억장치에 기록하는 작업 추가 피룡.
이 작이 필요한 페이지인지 아닌지 판단하기 위해 페이지 테이블 엔트리에 수정 비트 두는 것.
페이징 이점- 쓰기시 복사
계층적 페이징
14-3 페이지 교체와 프레임 할당
물리 메모리 크기 한정.
요구 페이징
프로세스를 메모리에 적재할 때 처음부터 모든 페이지 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법.
아무런 페이지도 메모리에 적재하지 않은 채 실행 가능. 이 경우 프로세스의 첫 명령어를 실행하는 순간부터 페이지 폴트 계속 발생. 실행에 필요한 페이지 어느 정도 적재된 이후부터 페이지 폴트 발생빈도 떨어짐. => "순수 요구 페이징 기법"
페이징 시스템 안정적 작동 위한 문제 해결
1. 페이지 교체
2. 프레임 할당
요구 페이징 기법으로 페이지들 적재하다 보면 언젠가 메모리 가득 참. 이때 당장 실행에 필요한 페이지 적재 위해 메모리에 적재된 페이지 보조기억장치로 내보내야 함.
페이지 교체 알고리즘: 쫓아낼 페이지 결정하는 방법.
페이지 교체 알고리즘
페이지 폴트를 가장 적에 일으키는 알고리즘, 좋은 알고리즘
한 알고리즘 통해 고른 페이지 스왑아웃시켰을 때, 페이지 폴트 자주 발생하는 것. => 컴퓨터 성능 저해하는 나쁜 알고리즘.
그렇기에 페이지 교체 알고리즘을 제대로 이해하려면 페이지 폴트 횟수를 알 수 있어야 함.
그리고 페이지 폴트 횟수는 페이지 참조열(page reference string)을 통해 알 수 있음.
페이지 참조열: CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지 열
2 2 2 3 5 5 5 3 7이라는 연속된 페이지열,
페이지 참조열은 2 3 5 3 7.
연속된 페이지 생략하는 이유: 중복된 페이지 참조하는 행위, 페이지폴트 발생시키지 않기 때문.
FIFO(First-In First-Out) 페이지 교체 알고리즘
가장 먼저 올라온 페이지부터 내쫓는 방식.
단점: 프로그램 실행 내내 사용될 내용 포함. 이런 페이지는 메모리에 먼저 적재되었다고 해서 내쫓아서 안됨.
> 2차 기회(second-chance) 페이지 교체 알고리즘
FIFO 페이지 교체 알고리즘 부작용 개선. 한번 더 기회 주는 알고리즘
페이지의 참조 비트가 1일 경우(페이지를 참조한 적이 있을 경우) 참조 비트를 0으로 만든 뒤 현재 시간을 적재 시간으로 설정.
메모리에 가장 오래 머물렀다 할지라도 CPU가 최근에 접근한 적이 있다는 의미로 한번 더 기회 줌.
최적 페이지 교체 알고리즘
CPU에 의해 참조되는 횟수 고려하는 페이지 교체 알고리즘.
자주 사용될 페이지: 메모리에 오랫동안 남아야 할 페이지
오랫동안 사용되지 않을 페이지: 메모리에 없어도 될 페이지
가장 낮은 페이지 폴트율 보장하는 알고리즘
단점: 앞으로 오랫동안 사용되지 않을 페이지 예측 어려움.
LRU 페이지 교체 알고리즘
가장 오랫동안 사용되지 않은 페이지 교체하는 알고리즘
페이지마다 마지막 사용한 시간 토대로 최근에 가장 사용이 적었던 페이지 교체.
스래싱과 프레임 할당
페이지 폴트가 자주 발생하는 이유: 나쁜 페이지 교체 알고리즘 있는건 아님. 프로세스가 사용할 수 있는 프레임 수가 적어도 페이지 폴트 자주 발생.
스래싱: 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능 저해되는 문제
세로축: CPU 이용률.
-이 값이 높으면 CPU는 현재 일을 쉬지 않고 하고 있다는 의미 / 이 값이 낮으면 CPU 현재 일 많이 하고 있지 않다는 의미.
가로축: 멀티 프로그래밍 정도. 메모리에 올라와 있는 프로세스 수.
멀티프로그래밍 정도: 메모리에서 동시 실행되는 프로세스 수.
-정도가 높다면 현재 메모리에 많은 프로세스 동시 실행중 / 낮다면 현재 메모리에 적은 프로세스 동시에 실행중
동시에 실행되는 프로세스 수(멀티 프로그래밍 정도) 늘린다고 해서 CPU 이용률 그에 비례해서 증가하는 것 아님.
스래싱 발생 이유: 각 프로세스가 필요로하는 최소한 프레임 수가 보장되지 않았기 때문.
프레임 할당방식
정적 할당 방식
프로세스의 실행 과정 고려 X, 프로세스 혹은 물리 메모리 크기만 고려.
-균등 할당: 모든 프로세스들에게 균등하게 프레임을 할당.
-비례 할당: 프로세스 크기에 비례하여 프레임 할당.
프로세스가 필요로 하는 프레임 수는 실행해봐야 알 수 있음.
프로세스 크기가 큰 프로세스, 실행하니 많은 프레임을 필요로 하지 않음.
프로세스 크기가 작은 프로세스, 실행하니 많은 프레임을 필요로 함.
동적 할당 방식
프로세스가 실행하는 과정을 통해서 프레임을 할당하는 방식.
작업 집합 모델 : '프로세스가 일정 기간 동안 참조한 페이지 집합'을 기억하여 빈번한 페이지 교체를 방지하는 방식
페이지 폴트 빈도: 페이지 폴트의 빈도수의 상한선 하한선을 정해 상한선이면 프레임을 더 할당, 하한선이라면 프레임을 할당하는 방식
1. 페이지 폴트율이 너무 높으면 그 프로세스는 너무 적은 프레임을 갖고 있다.
2. 페이지 폴트율이 너무 낮으면 그 프로세스가 너무 많은 프레임을 갖고 있다.
작업 집합 구하기
작업 집합 : 프로세스가 일정 기간 동안 참조한 페이지 집합
1. 프로세스가 참조한 페이지
2. 시간 간격
출처
'My Study > 서적 공부' 카테고리의 다른 글
[혼자 공부하는 컴퓨터구조+운영체제] "chapter15. 파일 시스템" (2) | 2024.08.26 |
---|---|
[혼자 공부하는 컴퓨터구조+운영체제] "chapter13. 교착 상태" (0) | 2024.08.17 |
[혼자 공부하는 컴퓨터구조+운영체제] "chapter12. 프로세스 동기화" (0) | 2024.08.17 |
[혼자 공부하는 컴퓨터구조+운영체제] "chapter11. CPU 스케줄링" (1) | 2024.08.11 |
[혼자 공부하는 컴퓨터구조+운영체제] "chapter10. 프로세스와 스레드" (3) | 2024.08.05 |