9장 - 가상메모리의 관리

CHO·2023년 1월 3일
0

OS(운영체제)

목록 보기
17/18

너무어렵다 ㅠㅠㅠ

9.1 하드웨어의 사용

가상메모리를 효율적으로 사용하기 위해서는 사상에 걸리는 시간을 최소화해야지~!
tlb를 사용합니당!

엑세스타임을 높입시다! - 캐시 사용!(하드웨어 사용)

  • 페이지 테이블 일부분을 저장할 수 있는 다수의 레지스터 사용하는 방법도 있음
  • 페이지 효율적인 관리를 위해 참조비트, 갱신비트를 두는 것도 방법이다
    참조비트 : 해당 페이지가 참조되었는가?를 나타내는 비트
    갱신비트 : 페이지의 변경 여부 되었는가?를 나타내는 비트

9.2 관리를 위한 다양한 기법들

배치, 재배치, 할당, ?
-페이징기법을 전재로 한다고 생각해라

9.2.1 적재정책(fetch strategy)
: 요구적재(Demand Fetch) - 요구 페이징(Demand paging)이라고 한다. 페이지가 참조될 때 적재하는 기법이다. 적재해야 할 요구가 있을 때 하겠고, 참조시 페이지 부재일 경우, 페이지가 적재될 때까지 해당 프로세스를 대기상태로 만드는 문맥교환과 디스크와의 입출력의 부담이 존재한다

: 예측적재(Anticipatory Fetch) - 선페이징(prepaging)이라고 부른다. 예측을 통해 확률적으로 참조될 가능성이 높다고 판단되는 페이지를 미리 적재시킨다. 예측이 잘 될 경우 페이지 부재 빈도를 낮출 수 있다. 허나 그 반대일 경우에는 예측을 위한 오버헤드와 참조되지 않을 페이지를 적재하는 메모리 낭비가 발생한다.

-> 주로 요구적재를 사용함!

9.2.2 배치정책(Placement Strategy)
: 디스크로부터 가져온 페이지를 메모리 어데에 적재시킬까?를 결정하는 정책이다
: 페이징을 사용하는 시스템에서는 빈 프레임만 발견되면 어떤 프레임에 적재하던지 무넺가 없다.
: 세그멘테이션을 사용할 경우 세그먼트의 크기가 얼마든지 다를 수 있으므로 다양한 크기의 세그먼트를 수용할 수 있는 배치정책(최초적합?? - fit기법이 동원되어져야...) 등이 요구된다

9.2.3 할당정책과 교체범위(Allocation Strategy)
: 프로세스들에게 메모리를 얼마만큼씩 줄 것인가???를 결정하는 정책이다
: 페이징의 경우 각 프로세스에게 메모리 프레임을 몇개? 사용할 수 있도록 해줄 것인가? 를 결정하는 정책이다
: 시용하는 프레임이 많다면 페이징 많이 줘야하고, 프레임 적다면 페이징 적게 주면 됨
: 개수의 변동이 없도록!!! 운영한다면 고정할당(fixed allocation)이라 부른다. 반면에 실행 도중 프로세스에 부여된 프레임의 수에 변동이 있또록 한다면 가변할당(variable allocation)이라고 부른다.
: 해당 프로세스에게 할당된 프레임들 중에서~ 교체될 페이지를 선택한다면!???? 지역 교체(Local Replacement)라 하고, 메모리의 모든 프레임들이 대상이 되면 전역교체(Global Replacement)라고 한다.
: 고정할당을 한다는 것은!! 전역교체를 절대 하지 않는다는 것을 의미한다! 전역교체는 가변할당을 사용할 때만 사용된느 말이다!
: 할당된 프레임 수를 변경이 가능하도록 하되~~~교체 대상은~!! 자신의 프레임 내에서 선택하도록 하는 가변할당/지역교체가 가능하다!

지역교체 : 프로세스가 실행중인 프레임이 있는데(max 이용), 새로운 프레임이 올라오고자 하면, 기존 프레임 빼주고 새로운 애 받아들이는 것을 말한다.

전역교체: 자신의 페이지는 물론이고, 메모리 전부를 검사해서, 다른 프레임이 나가고 새로운 애가 들어오면 1개가 증가하게 되는데 이는 전역교체라고 한다. 즉 교체대상이 메모리 전체가 대상이 되면 이를 전역교체(global replacement)라고 한다.

9.2.4 교체정책(Replacement Strategy)
: 메모리에 빈 프레임이 없을 때나, 적재될 페이지를 위해서 적재된 페이지 중에서 하나는 자신이 차지한 프레임을 비워주어야 하는 교체의 대상이 될텐데 이때 어떤 페이지를 선택할 것인가??를 결정하는 정책을 말한다!!!
: 이 절에서는 고정할당을 기반으로 간다~!
: 최적기법, FIFO(First In First Out) 기법, LRU(Least Recently Used)기법, Second-chance(Clock) 기법, 개선된 Second-chance(NUR) 기법, LFU(Least Frequently Used)와 MFU(Most Frequently Used) 기법, 페이지 버퍼링(Page Buffering)기법 등등~~

1) 최적기법(Optimal 혹은 MIN)
: 현재 시점에서 앞으로 가장~오랫동안 참조되지 않을 페이지! 미래에 참조될 때까지의 시간이 가장~긴 페이지를 선택해 교체하는 기법이다
: 페이지 부재를 최소화 해준다, 프로세스들이 앞으로 어떤 페이지들을 참조할런지는....미리 알 수 없어서 현실적으로 구현이 불가능하다
: 다른 기법들과 성능 평가를위해! 사용한다!

시간
참조열 : Reference String

포트 내면서 갖고온다고?

7-0-1로 참조열을 페이지에 적재시킴
2번 참조
: 누가 나감? - optimal은 가장 오래 참조 안되는 애를 빼는 거임! 그렇다면 7번~~!!

0번 참조
: 누가 나감? 0 이미 적재되어있음. 걍 그대로 있으셈

3번 참조
: 누가나감? 2,0,1 중에서 제일 오래 안 보이는 애는 1번임. 1번 빼고 거기에 3번 적재

0번 참조
: 걍 있거라

4번 참조
: 누가 나감? 2,0,3 중에서 제일 오래 안보이는 애는 0번임. 0번에 적재시키셈

등등 이렇게 전재되는 것임

관건은! 누굴 빼고? 누굴 넣을거냐! 이건데, 이거 기준이 때에따라 다르겠지?
그 기준마다 달라지는 기법을~ 우리는 지금 배우고 있는거임!ㅋㅋㅋ

지금부터 실현가능한 기법!!

2) FIFO(First In First Out) 기법
: 적재된 지 가장 오래된 페이지를 교체한다!
: 적재된 시간이나 순서를 알아야 함(너 언제 적재됐냐?). 두 가지의 구현방법이 존재?함
-시간 기록법(Time Stamping) : 각 페이지가 적재될 때의 당시 시간을 기록한 뒤 교체할 때 이 시간이 가장 오래된 페이지를 선택하는 방식이다 (시간 기록할 약간의 스토리지가 필요하겠다)
-큐를 사용해서 큐에서의 상대적인 위치가 적재된 순서를 나타내는 것. 교체 대상은 항상 큐의 맨 앞이 되게끔 유지하고 관리하는 기법을 말한다 (큐의 상대적 위치가 적재된 순서를 말하니까!! 맨 앞에 있는 놈이 교체 대상이 되겠죠?)

:큐 예시 설명 더! - 7번 적재된 곳이, 큐의 헤더부분 즉 제일 앞부분이야~(상상하셈) 큐 안에 7-0-1이 순차적으로 쌓임. 2가 들어올라면? 제일 먼저 들어온 7을 빼주면 돼~ 그리고 맨 뒤에 2를 채워줘~ 0-1-2가 됨. 근데 다음에 0이 들어오네? 이미 있으니까 굳이 ㅋ 그냥 현상 유지하셈. 다음에 3이 들어올라면~ 앞에있는 0은 빠지쇼~ 3 맨 마지막에 들어와서 1-2-3이 된다~ 이걸 무한반복해~

!!FIFO의 모순!! (Belady's Anomaly)
:FIFO에서 부재율을 낮출라면~프레임을 더 주면! 오히려 부재율이 올라가는?현상이 발생할 수 있음 ㅋㅋㅋ배은망덕ㅋㅋㅋ

3) LRU(Least Recently Used)기법 - 실제로 써먹을 수 있을 정도의 알고리즘 ㅇㅇ
: 참조된 시간이 가장 오래된 페이지를 교체하는 기법!
: 쌓인 페이지들의 참조된 시간, 또는 순서를 알아야한디야...두 가지 구현방법이 존재한다
-시간 기록 기법 : 페이지들이 적재될 때의 시간을 기록한다. 이 페이지가 메모리에 있는 동안 참조될 때마다 가장 최근의 참조시간으로 갱신해두면, 가장 오래된 시간이 기록된 페이지가 교체 대상이 됨

  • lru-스택(stack)을 사용 : 스택의 가장 밑에 있는 페이지가 교체 대상이 되도록 스택에서의 '상대적인 위치를 참조'하는 순서를 나타내도록 관리하는 방식

: 그림을 설명해보면~~~
밑에 회색이 lru-스택임.
제일 밑에 있는 녀석이 나가야햄! (밑에서부터 쌓인다)
7-0-1로(밑에서부터 차곡차곡 쌓임_큐랑은 방향이 반대얌!)
7 삭제하고~ 0-1-2로 쌓아줌! 근데 0이 또 등장하네??
1-2 내려가게하고~ 다음에 0이 제일 위로 올라가게 한다!(이게 fifo의 큐와는 다른방식!!)

??부재여부?? 8번 있었음...
부재는? 새로운 참조가 들어오지 않은 것!

: LRU(Least Recently Used)는 최근에 자주 참조된 페이지가~ 앞으로도 당분간 자주~참조될 것이라는 판단에 근거한 기법이다.
: 대부분의 시스템이서는 LRU 혹은 이놈의 변형을 사용한다.

4)Second-chance(Clock) 기법
: 이 기법은 FIFO의 변형 또는 LRU에 근접한 기법이다.
: 적재된 뒤에 한번이라도 더 참조된 페이지를 바로 교체시키지 않고~~ 한번 더(second) 메모리에 머무를 수 있는 기회(chance)를 주는 기법이다.
: 적재된 페이지에 참조 비트를 둬서~~ 교체 대상인 페이지의 참조비트가 0이 되면 바로 교체한다! 1로 되어있다면~즉, 적재 후 한 번 이상 참조가 된 경우에는 이 비트를 0으로 만들면서 큐의 맨 뒤로 보낸다! 이를통해 메모리에 머무는 기회를 한번 더 ~준다는 의미!

포트를 낸다는게 무슨 의미일까?

7-0-1 순서로 채워진다.
2번이 들어올라하면~ 7-0-1의 중에서 7번을 보니까 다시 참조하는애가 없어! 그래서 참조비트 0으로하고~
0-1-2로 2를 넣어줬어. 그러고 다음 0을 넣으려고 보니까 0이 있네? 0을 빼지말고 기회를 한번 줘서 /1로 기회를 준다. 그리고 다음 3이 들어오려고 해~
현재 페이지에는!!!! 0/1 - 1 - 2 이렇게 적재되어 있자너!!
그러면~ 1을 빼버려 ㅋㅋㅋ 0/1은 살려줘..그리고 2보다 0의 순위가 높으니까 2를 위로 올려줘..
(즉 0/1 - 1 - 2 에서 -> 1-2-0/1로 바꿔주고 -> 1을 빼주고 -> 2 - 0/1 - 3 이렇게 해준다)
결론적으로 2 - 0/0 - 3 이렇게 된다~이 말씀이야!

0/1 - 1 - 2 이런 상황에서 새로운 값 3이 들어오면
2 - 0/0 - 3 이런 순서가 된다
쭉쭉 가보자~!
새로운 값인 0이 들어오면
2 - 0/1 - 3 이 된다. 다음으로 새로운 값 4가 들어온다고 하면!

시간 13을 봐보자!
0/1 - 2/1 - 3/1 로 큐가 적재되어있다! 0,2,3이 1번 이상 reference되어진 거다.
이럴때는 새로운 값이 들어오면 어떻게 해줘야할까? 새로운 값 1번이 들어오면 다른애를 빼줘야하니까 제일 위에 있는 0/1을 빼준다. 하여 2/1 - 3/1 - 1/0로 쌓이는 것이다!

즉 시간 13번을 다시~정해보면!

0/1 - 2/1 - 3/1이 있다. 그리고 새로운 값 1이 들어와야 하니까..! 그렇다면 중간에 얘네끼리 정렬을 해주는거야.

2/1 - 3/1 - 0/0으로 바뀌는거지! 그리고 나서 2/1도 1이니까, 또 정렬을 해주는거야. (각 1의 기회를 소멸시키는 작업을 하는 것임)
3/1 - 0/0 - 2/0 이 된다. 그리고 3의 1도 소멸시켜준다.
0/0 - 2/0 - 3/0으로 최종 정렬!! 그리고나서 새로운 값 1이 들어오게끔 맞이해~! 그러면, 0번이 제일 위에 있으니까~ 빼주고, 밑에서부터 0번을 채워주는거야!

그래서 시간 14는~~
2/0 - 3/0 - 1/0 으로 결과가 나오는 것!!
(2 - 3 - 1)

그리고 새로운 값으로 2가 들어오려고해~ 그러면 다시 또 기회를 주는! 요런 형식~~

시간 13은 특별한 상황이니까~잘 알아두는게 중요해!

second-chance기법은 적재된 애 중에 reference 된 경험이 1번 이상 있는 경우 한번 더 메모리에 머무를 수 있는 기회를 주겠다.라는 개념이다. 만약 모두 1번 이상의 reference 경험이 있어서 기회가 주어진다면, 그 기회가 모두 0이 되도록 재배치를 진행한다.

Second-chance(Clock) 기법에서 Clock은 뭘까?
: fifo와 동일한 환경을 Second-chance 기법으로 운영하는건데!

참조번호를 0 -> 1로 바꿔주고, 화살표(포인터)를 다음으로 바꿔준다. 그러면 포인터가 가리키는 자리에 새로운 값이 들어온다. element들은 가만히 있고, 포인터가 움직이는 방식이다.

5) 개선된 Second-chance(NUR) 기법
: 비트를 하나 더 쓴다! 2bit!! (reference, modified) 이렇게 사용한다!
: 정보가 하나 더 있으니까, 조금 더 정교한 교체대상을 찾을 수 있지 않을까? 하는 발상에서 나온 기법이다

: 그러나, 교체가 될 경우 변경된 내용을 디스크에 기록(write)해줘야 하는 부담이 있다. 하여 "가급적 교체를 미뤄서 디스크에 대한 쓰기 작업을 줄이고자 하는 의도"가 숨겨져있다.

: 그럼 어떻게 내보낼건데?
참조비트와 갱신비트 값의 조합은 4종류다.
(0, 0) 이면~참조도 변경도 되지 않은 경우이고
(1, 1)이면~ 참조도 되고 변경까지 된 경우를 말한다.

: 우리가 알아야 할 것은, modified bfield 값이 1이라는 것은, reference값이 무조건 1이 된다는 것이다. (디스크를 변경해야하는데, 그러려면 선제 액션이 바로 참조이기 때문이다. 변경을 하기 위해서는 참조값은 필수조건이다) (즉, (0,1) 조합은 말이 안됨) -> (0,0), (1,0), (1,1) 만 현실적으로 가능하다.

어떻게 실행될까? 어떤 놈을 내보낼건데?
: 첫번째 단계는 현재 포인터 위치에서 포인터를 이동시켜 참조와 갱신 비트가 모두 0인 페이지를 찾는거다. 그리고 이들을 교체하고 다음 페이지로 포인터를 위치시키는 것이다.
: 첫번째 단계에서 그런 페이지를 찾지 못했으면~~ 두번째로 참조는 0, 갱신은 1로 되어있는 페이지를 찾아서~~교체한다!
: (포인터를 이동하면서 모든 프레임의 참조비트를 0으로 바꾼다)
: 두 번째 단계에서도 해당 페이지를 찾지 못했다면 포인터는 제자리로 돌아와있을 거다. 모든 프레임의 참조비트는 0이 되어있을 것이다. 하여 다시 첫번째 단계를 시도하고 안되면 두번째 단계까지 시도해보면 교체 대상 페이지가 발견될 것이다.

: NUR 역시 참조와 갱신 비트를 사용한다. 그러면서도 참조비트는 "시스템에서 주기적으로 0으로 만들어준다".
: 교체의 대상은 참조와 갱신 비트의 짝이 (0,0)인 것부터 차례로 (0,1), (1,0), (1,1) 순서로 선택한다.

6) LFU(Least Frequently Used)와 MFU(Most Frequently Used) 기법
: 적재되어있는 동안 참조된 횟수를 누적해 기록한다. 그 값으로 교체 대상을 선택하는 기법이다.
: LFU는 많이 참조된 페이지는 앞으로도 참조될 확률이 높을거라고 판단한다. 그래서 그 값이 가장 적은 페이지를 선택한다
: MFU는 많이 참조된 페이지는 충분히 참조가 이루어졌다고 판단한다. 그래서 더이상 참조되지 않을거라 판단에 근거해 값이 가장 큰 페이지를 선택한다.
-> 두 기법 모두 편향된 시각에 근거한다. 실제로 구현은 드물다.

7) 페이지 버퍼링(Page Buffering)기법
: 단순한 교체기법과 함께 사용되는데 페이징의 성능을 향상시킬 수 있다는 장점이 있다
(나 교체기법 모르네....)
: 적재가 가능한 가용(available) 프레임 몇 개를 풀(pool)로 유지하면서 부재가 생긴 경우 적재될 페이지는 바로 풀의 한 프레임으로 가져오고, 교체 대상으로 선택된 페이지는 변경된 경우에 한해서 디스크로 쓰여지고 난 후 풀에 보태어진다. 변경되지 않은 페이지는 그냥 풀에 넣어둔다.
: 교체대상으로 선택된 페이지가 갱신된 경우에는 그 내용을 디스크에 쓰고 난 다음 프레임에 적재시키는 시간적인 순서를 지키지 않아도 되므로 빠른 응답을 기대할 수 있다.
: 교체될 페이지들을 가능한 메모리(가용 프레임 풀)에 남겨두어 디스크 입출력 횟수를 줄이고, 동시에 이 페이지가 다시 참조될 경우 바로 사용할 수 있다는 장점이 있다.

통상적으로 교체기법이라함은
1번 메모리의 원본(디스크에) 페이지를 한번 쓴다
2번 새로 들어와야 할 페이지가 메모리를 덮어쓴다 -> 시간갭이 생긴다. 근데, 버퍼를 쓰게 된다면

메모리에 일부 빈 프레임을 pool로 잡아둔다. 그러면 적재할 메모리가 바로 pool로 간다.

그래서 빈프레임 풀이 넓어진다. 시간차가 생기지 않고 바로 메모리를 받아서 적재할 수 있다.

: 교체될 페이지들을 가능한 메모리(가용 프레임 풀)에 남겨두어 디스크 입출력 횟수를 줄이고, 동시에 이 페이지가 다시 참조될 경우 바로 사용할 수 있다는 장점이 있다. (버퍼링 기법 사용이유. 중요함)

결론, 페이지 버퍼링 기법과 교체기법을 함께 쓴다면 페이징의 성능을 높일 수 잇을 것이다!
-시간차 발생 안해서 좋고
-디스크 운영체제를 줄일 수 있어서 성능을 높일 수 있게 된다.

삽화 내용 - 지역성(Locality), 스레싱(Thrashing)
지역성(Locality)-
시간적 지역성(temporal locality) : 최근에 참조된 기억장소가 가까운 미래에도 계속 참조될 가능성이 높다(반복문, 스택, 서브루틴 등)

  • 공간적 지역성(spacial locality) : 하나의 기억장소가 참조되면 그 근처의 기억장소가 계속 참조되는 경향이 있따(배열!)

스레싱(Thrashing)이란?
: 빈번한 페이지의 부재를 말한다
: 시스템의 성능을 현저히 떨어뜨리고 주로 잘못된 "교체정책"과 프로세스에 할당된 프레임수가 너무 작아서 발생하는 상황을 말한다

결론 : 지역성을 잘 조율하면 스레싱을 줄일 수 있다!

그래서 나왔다 아래의 이론이~~

9.2.5 Working set 이론과 PFF(Page Fault Frequency)
: 지역성을 고려한 가변 할당 이론이다

Working set 이론이란?
: 프로세스가 특정시점에서 집중적으로 참조하는 페이지들의 집합이다
: 메모리에 적재되도록 함으로써 페이지 부재를 최소화한다
: 결론적으로 각각의 프로세스가 현시점의 자신의 일한 양을 메모리에 유지될 수 있도록해서 시스템 성능을 최대화 하는 것을 의미한다
: 델타 t = 윈도우 크기라고 부른다. 시스템에 의해 적절한 값으로 정해지고, 길면 참조한게 많은거고, 짧으면 참조한게 적은거를 의미

Working set 은 시간에 다라 변하게 된다. 이를 공식적으로 정의하면 다음과 같다.

이 친구가 의미하는 바는 뭘까?

: Working set은 현 시점에서의 지역성을 표현한다. 이 페이지 집합은 앞으로도 당분간 집중적으로 참조될 것이라고 보는 것을 말한다
: Working set을 메모리에 적재되도록 해서 스레싱 때문에 겪게 될 성능 감소를 사전에 방지할 수 있다
: Working set 이론에서 윈도 크기를 정하는 건 중요하다 : 너무 크게 잡으면 지역성이 포함되는 페이지들 외에 다른 페이지들도 Working set 에 포함될 수 있게되기에 메모리 낭비가 발생한다. 그래서 적정한 다중프로그래밍 정도를 유지하기 힘들어진다
: 너무 작게 잡으면 지역성에 포함되는 페이지들조차 Working set에서 제외되어 스레싱을 겪을 수도 있다. 하여 시스템을 다양한 상황을 반영해서 세심하게 결정해야겠다.


: 윈도우 사이즈를 5개로 준 것
: t1이 현시점이라면~ (t1-t0) = 윈도우 사이즈가 된다
:??? 그러면...! 음... 일련의 시간이 기준이 아니라, 현재 시간에서 과거시간까지의 다른 기준으로 윈도우 사이즈를 잡아주는건가? 다른 기준이 뭐지?

{1}
{1,2}
{1,2,3}
{1,2,3,4,}
{1,2,3,4,5} 이렇게 나열된다

{3,4,5} - Working set이 변화하는 구간(loop1 -> loop2로 이동하는 구간}
{5}
{5,6}
{5,6,7}
{5,6,7,8}
{5,6,7,8,9}

: 시점별로 변하는 Working set의 크기를 쉽게 얻을 수 있다
: 프로그램의 실행이 시작된 후 t0부터 처음 참조되는 페이지들은 부재를 겪어 점차 Working set을 키워가다가 t1에서 최대 크기인 5가 된다
: 이후부터는 지역성을 보이면서 t2에서와 같이 일정한 크기(=3)으로 유지된다
: 실행이 진행되면 다음 지역성을 보이는 loop2부분으로 넘어가면서 t3에서 5개로 증가했던 Working set은 점점 둘어들어 t4에서와 같이 페이지 두 개로 구성되는 강한 지역성을 드러낸다
" 가변이 가능하다

Working set이론정리!!!
: 지역성을 표현하는~ Working set을 메모리에 유지함으로써~ 스레싱을 방지하겠다는 것임
: Working set이 작아지면~ 프레임을 회수한다. 커지게되면~ 그만큼 프레임을 더 할당한다. 이는 가변할당이 필요하다
: 프로세스 하나를 메모리에 추가한다. 즉, 다중 프로그래밍의 정도를 올리는 것도 그 프로세스의 Working set이 유지되기 힘든 상황이 되면 보류상태가 될 수 있다..

???지역성이 강해진다는게 무슨의미일까???

Working set 단점!!
: 지역성이 변화하는 구간처럼 Working set이 언제나 그 시점의 지역성을 표현하지는 못함
: 각 프로세스의 정확한 Working set을 추정하고 최적의 윈도우 크기를 정하는 것도 어렵다
: 매 페이지를 참조할 때마다 Working set을 조정하는 작업도 상당히 부담된다

최적의 윈도우 크기를 추정하기가 쉽지 않은상황에서 Working set을 페이지의 간격에 근거해 결정하는 방법이 있는데 이를 pff라고 한다.
: 페이지 부재 사이의 간격이 크다는 말은 프레임 수가 충분하거나 경우에 따라 과도한 프레임이 주어졌다는 것을 의미한다. 짧다는 말은 스레싱에 다가간다는 것이다. 현재 할당된 프레임이 부족하다는 의미가 된다
: 시스템에서 정한 적정 부재 간격의 크기를 초과하면 프레임을 줄이고 더 짧은 시간 안에 부재가 난다면 프레임을 늘려주는 유연함이 필요하겠다
: 구현에 따라서 부재 사이의 시간에 대한 상한값과 하한 값을 둬서 상한값을 초과하면 프레임의 축소로, 하한값을 하회하면 프레임의 증가로 대응할 수도 있다.

9.2.6 클리닝 정책(Cleaning Strategy)과 부하 조절(Load Control)

!!클리닝 정책(Cleaning Strategy)
: 클리닝이란 적재 중에 내용이 바ㄱ뀐 페이지를 언제 디크스에 기록할껴~!! 에 대한 정책
: 요구 클리닝(demand cleaning)은 교체 대상으로 선택되었을 때 기록한다
-변경된 페이지가 교체 시기에 한 번만 기록됨! 입출력을 최소화할 수 있쥐~~~ 그런데..! 부재를 발생시킨 프로세스는 교체 대상 페이지를 기록한 뒤 부재인 페이지를 쌓아줘야해서 응답성이 떨어져...
: 대부분의 시스템에서는 요구 클리닝을 쓰긴 함

: 예측클리닝(선클리닝precleaning)은 교체 전이더라도 디스크 부하가 적을 때~~ 미리미리 기록해두는 방식임!!
-기록 후에도 실제 교치까지 메모리에 남아있게 되고 이 기간 동안에 더 이상의 변경이 없다면~!! 교체할 경우 디스크 기록은 필요가 없음!! 그래서 응답성을 높일 수 있따~
: 대부분의 페이지를 일괄로 기록한다! 그렇게해서 입출력을 높인다!!!
: 기록 후에 교체되기 전에 다시 변경한다면~ 먼저 기록한 건...아무 효과가 없기에...(당연하지..) 낭비가 발생

: 클리닝 정책은 고정할당의 마지막에서 설명한 '페이지 버퍼링'과 함께 활용되면~ 상승효과를 가져올 수 있다고!!

!!부하 조절(Load Control)
: 다중 프로그래밍 정도(dgree)를 결정하는 것을 말한다. 메모리의 효율적인 관리와 밀접한 관계가 있다
: 너무 낮으면 메모리를 비롯한 시스템의 자원을 활용하지 못해서 성능이 떨어진다
: 너무 높을경우는 경쟁 특히 부족한 메모리로 인한 스레싱으로..성능이 떨어진다.
: Working set이론은 프로세스들을 Working set이 유지되는 한도 내에서 메모리에 올려 자연스럽게 부하 조절과 연동되고있다.

"L = S 법칙"은 부재간격의 평균(Mean Time Between Faults, MTBF)값과 부재의 처리에 걸리는 시간의 평균값을 같게끔 하는 것이 cpu의 활용도를 최대로 할 수 있다는 연구결과를 말함.
50%? 앞에서 나옴...

+고려할 점들
9.3.1 페이지 크기
: 페이징에서의 페이지 크기는 여러가지 측면 고려해야해
: 페이지 크기 작게갖고가면~ 크게 갖고가면~~..!!!
-프로그램에서 페이지 갯수 늘어나고..페이지 테이블 엔트리 갯수도 늘어나서...페이지 테이블 커질것여...페이지 테이블 커질수록..메모리 적재 부담도 커져..
-프레임 크기도 작아지고..메모리에서 전체 프레임 갯수가 늘어나게돼서..결과적으로 이를 관리할 커널의 부담도 커져..
-페이지 갯수가 증가하면 적재 교체의 횟수를 증가시켜서..잦은 입출력을 발생시켜....다만 페이지 하나의 전송시간은 줄어들겠지!
-꼭 필요한 내용을 담은 페이지들도 Working set이 구성될 것이야..(뭔소린가?)
-프로그램에서 마지막 페이지 반은 내부 단편화를 갖는데 페이지가 작으면 단편화의 크기도 줄어들지~!

?오버헤드?
?오버라이딩, 오버로딩

9.3.2 프로그램 구조
: 실행될 프로그램들을 메모리의 특성에 맞춰 작성하면 더 나은 성능 기대가 가능함
: c언어는 행우선(row-major)이므로 페이지 크기의 워드 크기의 행렬(MAT)의 각 행은 한 페이지에 들어가게 된다. 프로그램은 열단위로 초기화하게돼서, 결과적으로는 초기화마다 부재가 발생해....?

9.3.3 프레임 잠금(Frame Locking)
: 몇 몇 메모리 프레임을 일부 잠금을 한다! 그래서 교체되지 않게 하는 것
: 부재를 처리하는 루틴을 가진 프레임은 교체되어서는 안돼! 그래서 커널이 자리한 프레임들은 대부분~~ 잠금 처리!!
: 입출력해야할 페이지가 입출력 전에 교체되지 않게~~ 실시간으로 처리되어야 할 영역을 가지는 프레임이 교체될 경우 겪게 될 부재와 이로인해 시간 지연을 방지하기 위한 잠금장치가 필요한구당!!

profile
매일 개념 익히고 적용합니다

0개의 댓글