컴퓨터 공학/OS

메모리 용어 간단 정리 (2/2)

혼새미로 2022. 1. 14. 20:35
반응형

메모리 용어 간단 정리 (1/2) (tistory.com)

대기모드와 수정공간

대기모드

사용중이지만 그대로 파괴해도 상관없는 메모리 영역이다. 요구가 있다면 사용되지만 요구가 없다면 그대로 파괴되는 대기 상태의 것이며, 파일의 읽기 캐시와 프로그램 코드 캐시 등에서 이용된다. 파일은 먼저 캐시에 읽히지만 (대기모드) 여기서 데이터를 쓰면 수정공간으로 바뀌고, 이를 보조기억장치에 저장하면 (flush) 다시 대기모드로 변한다. 여유 공간과 함께 이용가능한 영역으로 분류된다.

수정공간

쓰기 작업이 수행된 공간으로 곧 보조기억장치에 저장될 데이터가 있는 공간이다.

페이지 폴트 (Page Fault)

프로세스에서 필요한 데이터가 가상 주소 공간에는 존재하지만 실제 메모리에는 없는 상황에서 해당 데이터에 접근하는 상황을 말한다. 운영체제에서는 페이지 폴트가 발생하면 보조기억장치에서 해당 데이터를 실제 메모리에 적재하여 마치 페이지 폴트가 전혀 발생하지 않은 것처럼 계속 프로세스가 동작하게 해준다.

페이지 폴트는 뱅크런 상황과 비슷하다. 은행은 실제로 1000억원 어치의 돈이 없지만, 마치 있는 것처럼 평소에 행동을 하며 여기저기 대출을 해주면서 이자를 받는다. 예치해둔 고객들에게는 돈이 그대로 있는 것처럼 말하지만, 만약 모든 고객들이 동시에 돈일 인출하려고 하면 은행은 돈이 부족해서 파산할 수도 있다. 페이지 폴트도 가상 주소 공간에는 해당 데이터가 있는 것처럼 되어 있지만, 실제로 그 주소공간을 물리 메모리에 조회해보면 없는 경우가 있다. 이를 페이지 폴트라고 하며, 그때는 해당 데이터를 보조기억장치에서 가져와야 한다.

쓰레싱 (Thrashing)

페이지 스와핑이 빈번하게 발생하는 현상. 보통 메모리 공간이 부족한 경우에 발생하므로, 메모리 공간을 늘려주어야 한다. 메모리의 모든 페이지가 활발히 사용되고 있어 어떤 페이지가 교체된 후 곧바로 반복적인 페이지 부재가 발생하는 현상을 말한다.

멀티 프로그래밍의 정도가 과도하게 높아지면 쓰레싱이 발생한다

쓰레싱이 발생하면 CPU 이용률이 감소하게 되어 성능이 악화된다.

만약 사람 손이 공 개수 만큼 존재했다면?

쓰레싱은 저글링과 같다. 활발하게 사용되는 페이지 집합을 지원해 줄 만큼의 프레임이 충분히 할당받지 못한 프로세스는 페이지 부재가 발생하게 된다. 공을 프로세스라고 보고, 손을 메모리 공간이라고 보면, 한 사람은 손이 두 개이므로 최대 2개의 공만 잡고 있을 수 있는데, 만약 공의 개수를 늘린다면 저글링과 같이 공을 순환적으로 돌리면서 보유하고 있는 공을 교체하는 수 밖에 없다.

이때 페이지 교체가 필요하지만, 이미 활발하게 사용되는 페이지만으로 이루어져 있으므로 어떤 페이지가 교체되든지 바로 다시 페이지 교체가 필요하게 된다. 결과적으로 바로 바로 반복해서 페이지 부재가 발생하며 교체된 페이지는 다시 얼마 지나지 않아 읽어올 필요가 생긴다. 이러한 과도한 페이징 작업을 쓰레싱이라고 한다.

윈도우 핸들 (=리눅스 디스크립터)

윈도우 OS에서 리소스을 구분하기 위한 인덱스 값으로, 전부 고유값을 갖는다. 클라이언트 프로그램에서 각각의 창과 컴포넌트들도 모두 고유값인 핸들을 갖고 있다. 작업관리자에서 10만개의 핸들이 있다고 표시된다면, 모든 프로세스와 스레드를 통해 구분할 수 있는 최소 단위의 요소들이 총 10만개 존재한다고 생각하면 된다. 각 요소들을 제어하기 위해 핸들 (고유값)을 윈도우 OS에게 전달하면서 작업 내용을 요청할 수 있다. 참고로, 리눅스에서는 디스크립터라고 부른다.

키보드의 각 키 또한 리소스로 볼 수 있다. 키보드는 여러 앱에서 동시에 사용하고 있는데, 특정 앱에서 갑자기 스페이스 키를 없애버리면 스페이스 키가 필요한 다른 앱에서는 문제가 발생할 것이다.
[Question] OS에서 관리하는 리소스들을 앱에서 직접 접근해서 사용하면 되지 않나?
> OS에서 관리하는 리소스의 메모리 주소를 앱에서 직접 접근할 경우, 앱이 해당 메모리 주소의 값을 다른 값으로 변경할 수 도 있고, 이로 인해 같은 주소를 참조하고 있던 다른 앱들에서 문제가 발생할 수 있다. 이러한 불상사를 막기 위해 특정 리소스의 메모리 주소에 대한 값을 '핸들' 이라는 정수 값으로 매핑한 후, 각 앱에게 핸들을 사용하도록 하였다. 이를 통해, 각 앱은 OS에게 핸들 값을 전달하여 리소스를 조회할 수는 있지만, 리소스의 메모리 주소에 있는 값을 직접 변경할 수는 없게 된다.

 

반응형

'컴퓨터 공학 > OS' 카테고리의 다른 글

메모리 용어 간단 정리 (1/2)  (0) 2022.01.14