2020. 6. 27. 19:29ㆍ컴퓨터언어/운영체제
👍 이전까지의 기술 - 주기억장치의 다중프로그래밍
주기억장치의 다중프로그래밍방식은 주기억장치가 단 하나의 프로그램만을 다루어 CPU 이용률을 낮추는 한계를 보완했다.
즉 여러 프로그램을 같은 크기로 쪼갠 주기억장치(RAM)에 나누어 넣는 정적(고정)분할방식 또는 서로 다른 크기로 쪼갠 주기억장치에 나누어 넣는 동적(가변)분할방식을 채택하여 여러 프로그램들을 동시에 실행할 수 있게 한 것이다.
👍 이전 기술의 문제점과 해결방안
하지만 주기억장치의 다중프로그래밍방식은 이름 그대로 주기억장치"만" 사용하는 것이다.
주기억장치만 사용한다면, 아무리 멀티태스킹이 가능하다고 해도, 계속 발전하는 소프트웨어가 필요로 하는 시스템 요구사항을 만족시키기 어려워진다.
그렇다고 주기억장치를 늘리기에는 RAM의 가격 때문에 바람직하지 않다.
그리고 무엇보다 동시에 실행되는 프로그램이 많다는 것은 주기억장치에 적재되어 있는 프로그램이 많다는 것이기 때문에, 프로그램도 주기억장치라는 공간의 한계에 맞게 더욱 잘게 쪼갤 수 밖에 없어 실행 성능이 저하될 수밖에 없다.
큰 프로그램을 잘 돌리려고 잘게 쪼개놨더니, 막상 너무 잘게 쪼개져서 잘 안돌아가게 되는 역설이 발생하는 것이다.
그래서 이 한계를 해결하고자 다른 아이디어가 필요해졌다.
어차피 보조기억장치 내에 저장되어 있는 프로그램은 주기억장치에 올라와야만 CPU가 접근하여 실행될 수 있고, 주기억장치를 늘리는 것은 가격 차원에서 바람직하지 않다.
그렇다면 프로그램을 적재할 때 주기억장치의 용량을 신경쓰지 않도록 "지금 당장 필요한 부분만 적재"시키면 되겠네?
즉 기존처럼 프로그램의 전부를 주기억장치의 적재 대상으로 찜하는 게 아니라, 보조기억장치에 남겨놓고 필요한 부분만을 그때그때 선정하여 적재하는 새로운 방법을 적용한 것이다.
이러면 프로그램의 적재 크기 제한이 없는 것과 마찬가지임과 동시에, 보조기억장치의 특정 부분을 주기억장치처럼 사용하여 주기억장치의 용량이 증가한 것 같은 효과(주소공간이 커짐)를 가지게 된다.
따라서 이렇게 보조기억장치를 활용하는 것을 "가상기억장치 다중프로그래밍"이라고 한다.
왜 가상인가?
사용하지 않는 프로그램을 외부(보조)기억장치로 옮김으로써 주기억장치의 실제 크기보다 큰 프로그램을 실행 가능하게 하는 기억장치
주기억장치 안의 프로그램 양이 많아질 때, 사용하지 않는 프로그램을 보조기억장치 안의 "특별한 영역"으로 옮겨서 그 보조기억장치 부분을 주기억장치처럼 사용할 수 있다.
가상기억장치 다중프로그래밍은 프로그램을 여러 개의 작은 불록 단위로 나누어서 가상기억장치에 보관해 놓고, 프로그램 실행 시 요구되는 블록만 주기억장치에 불연속적(당장 필요한 페이지로 계속 바꿔끼기 때문이다. 주기억장치 다중프로그래밍방식이라면 연속적할당이 된다)으로 할당하여 처리한다.
이때 프로그램을 같은 크기로 분할하면 "페이지", 서로 다른 크기로 분할하면 "세그먼트"라고 한다.
페이지
보조기억장치 내 프로그램을 같은 크기로 분할하여 각 "페이지"로 만들고, 이를 주기억장치 내 같은 크기로 분할한 각 "페이지 프레임"에 적재하는 방식
페이지 프레임(주기억장치)이 꽉 차있다면 페이지(프로그램조각)를 교체하며, 이를 교체알고리즘이라고 한다.
TLB(Translation Look aside Buffer)
페이지를 이용한 가상기억장치 다중프로그래밍방식은 주기억장치의 용량 한계를 해결한 대신 속도에 패널티가 생긴 것이다.
즉 CPU가 페이지 프레임에 접근할 때, 처리할 명령어들을 기억하는 CPU 내 레지스터와 주기억장치에 해당하는 페이지 프레임 사이에는 속도 차이가 존재한다.
따라서 한번 접근했던 페이지 프레임을 캐시에 저장하는 "TLB 페이지 테이블"을 사용하면 속도 문제를 개선할 수 있다.
현재 필요한 페이지가 페이지 테이블에 이미 존재하여 빠르게 접근할 수 있는 것을 "성공"이라고 하며, 존재하지 않아 주기억장치 페이지 프레임으로부터 페이지를 불러와야 하는 경우를 "실패"라고 한다.
세그먼트
페이지와 달리 다른 크기로 분할
'컴퓨터언어 > 운영체제' 카테고리의 다른 글
페이징 기법 관련 용어 정리 (0) | 2020.06.30 |
---|---|
가상기억장치 다중프로그래밍 - 페이징 기법 (0) | 2020.06.30 |
주기억장치의 다중프로그래밍 (0) | 2020.06.24 |
주기억장치 할당 기법 (0) | 2020.06.24 |
주기억장치 관리전략 (0) | 2020.06.24 |