저장장치 구조
레지스터
캐시
메인 메모리
보조저장장치
3차 저장 장치
백업 사본을 저장하기 위해 특수 목적으로만 사용하기에매우 느리고 충분히 큰 장치
시간 지역성
최근 사용한 데이터에 다시 접근 하려는 특성
공간 지역성
최근 접근한 데이터를 이루고 있는 공간이나 가까운 공간에 접근하는 특성
캐시히트와 캐시미스
캐시에서 원하는 데이터를 찾으면 캐시히트라 하며, 해당 데이터가 없으어 주 메모리로 가서 데이터를 찾아오면 캐시미스라고 한다.
캐시 매핑
캐시가 히트되기 위해 매핑하는 방법
쿠키의 동작 순서
로그인 상황
로컬 스토리지
만료기한이 없는 키-값 저장소이다.
데이터를 사용자가 지우지 않으면 계속 브라우저에 남아있다.
세션 스토리지
탭이나 브라우저가 닫히기 전까지 저장하는 키-값 저장소이다.
실제 프로그램 전체를 메모리에 올릴 필요는 없다. 보통 일부분만 사용하며 실질적으로는 거의 발생하지 않는 실행되지 않는 코드들이 많다. 즉 매번 프로세스 전부를 물리 메모리에 적재하는 것은 비효율적이다.
프로그램의 일부분만 메모리에 올려놓을 수 있다면 다음과 같은 장점이 있다.
가상 메모리(Virtual Memory)
프로세스를 실행할 때 필요한 메모리만 물리 메모리에 적재하며 작은 메모리로 가지고도 프로세스를 수행하게 해주는 기법이다.
물리 주소 공간이 연속되지 않는 방식이다.
주소가 연속하였을 때 생기는 외부 단편화와 압축의 비효율성을 피할 수 있다.
물리 메모리는 프레임, 논리 메모리는 페이지라는 고정 크기의 블록으로 나뉜다.
CPU에서 만들어진 주소는 페이지 번호와 페이지 오프셋의 두 개의 부분으로 나뉜다.
페이지 번호는 프로세스 페이지 테이블에 접근할 때 사용한다.
페이지 테이블은 물리 메모리의 프레임의 시작 주소를 저장하고 있다.
오프셋은 프레임 안에서의 위치를 나타낸다.
이 두 개를 합하여 물리 메모리 주소를 구한다.
페이지 테이블은 크기가 커 구현하기 위해 빠른 레지스터를 사용하는 것은 부적절하다.
따라서 대부분의 페이지 테이블을 메인 메모리에 저장하고 PTBR로 페이지 테이블을 가리키도록 한다.
요구 페이징(Demand paging)
프로그램 실행 중 필요할 때만 페이지가 적재되는 가상 메모리 시스템에서 사용되는 방식이다.
필요할 때만 페이지를 메모리에 적재하기 때문에 valid-invalid bit 기법으로 valid면 페이지가 메모리에 있고, invalid면 페이지가 메모리에 없다는 뜻이다.
프로세스가 메모리에 올라와 있지 않는 페이지에 접근하려면 페이지 폴트를 발생시킨다.
페이지 폴트를 처리하는 과정
프로세스가 내부 테이블을 검사하여 메모리 참조가 유효한지 무효한 지 검사한다.
무효한 페이지만 프로세스를 중단한다. 유효한 페이지가 아직 메모리에 올라오지 않았다면, 보조장치로부터 가져온다.
빈 프레임을 찾는다.
보조 저장장치에 새로 할당된 프레임으로 페이지를 읽어 들인다.
보조 저장장치에서 페이지를 메모리에 적재하면 페이지 테이블을 갱신하고 내부 테이블을 수정한다.
중단되었던 명령어를 다시 수행한다.
페이지 교체
가상 메모리 사용한다고 해서 물리 메모리가 항상 여유로운 것은 아님.
페이징 폴트가 계속 발생하여 메모리 초과 할당되어 위 과정에서의 3번 빈 프레임을 찾을 수 없다.
이러한 문제를 해결하기 위해 물리 메모리에 존재하는 페이지를 백업 저장장치에 보내고 새로운 페이로 교체하는 페이지 교체 기법이 필요하다.
페이지 교체 알고리즘
기본적으로 페이지 교체는 다음과 같은 과정을 거친다.
FIFO(First In First Out)
가장 오래된 페이지를 교체하는 방법이다.
가용 프레임이 증가하여도 오히려 페이지 폴트율이 증가하는 경우가 있는데 이 현상을 Belady's anomaly라 한다.
OPT(Optimal)
앞으로 가장 사용되지 않을 페이지를 교체하는 방법이다.
미래에 어떻게 참조될지 모두 알기는 어렵기 때문에 실제로 사용하기는 어렵다.
LRU(Least Recently Used)
가장 사용되지 않은 페이지를 교체하는 방법이다.
프레임 할당
프레임은 가용 프레임보다 많이 할당할 수 없으며 최소한의 할당을 해야만 한다.
균등 할당: 모든 프로세스에 같은 크기의 프레임을 할당하는 방법
비례 할당: 각 프로세스의 크기 비율에 맞추어할 달 하는 방법
전역 교체 : 프로세스가 교체할 프레임을 다른 프로세스의 속한 프레임까지 모두 대상으로 찾는 방법
지역 교체 : 프로세스가 자기에게 할당된 프레임만 교체 대상으로 찾는 방법
프로세스가 수행을 위한 충분한 프레임을 할당받지 못할 경우 페이지 폴트를 과하게 하여 프로세스 실제 실행보다 페이지 스와핑에 많은 시간을 사용하는 경우를 말한다.
프로세스가 실행 중에 백업 장치로 내보내어졌다가 다시 메모리에 되돌아올 수 있다.
모든 프로세스의 물리 주소 공간의 총합이 실제 물리 메모리보다 커도 스와핑을 사용하여 동시에 실행하는 것이 가능하다.
백업 저장장치로 이동하는 것을 스왑 아웃이라 하고 메모리에 되돌아오는 것을 스왑인 이라 한다.
작업 집합 모델(Working-Set Model)
작업 집합 모델은 지역성 모델을 기반으로 한다.
지역성이란 프로세스가 실행될 때 특정 지역에서 메모리를 집중적으로 참조함을 뜻한다.
PFF(Page-Fault Frequency)
페이지 폴트율에 상한 과 하한을 정하여 폴트율이 상한을 넘으면 프로세스에 프레임을 더 할당해 주고, 하한보다 낮아지면 프로세스의 프레임 수를 줄이는 방법이다.
주소 할당(Address Binding)
논리 주소(logical address) : CPU가 생성하는 주소
물리 주소(physical address) : 실제 메모리에서 취급되는 주소
프로세스를 물리 메모리에 적재하는 방법
바인딩하는 시점에 따라 구분된다.
컴파일 시간(Compile time)
컴파일할대 때 프로세스의 물리적 주소가 정해진다.
프로세스가 메모리 내에 들어갈 위치를 컴파일 시간에 미리 알 수 있으면 절대 코드를 생성한다.
컴파일 시간 바인딩은 주소가 고정되어 메모리에 빈 공간이 많이 생긴다.
적재 시간(Load time)
프레스가 메모리 내 어디로 적재될지 컴파일 시점에서 모르면 컴파일러는 재배치 가능 코드를 만든다.
바인딩은 프로그램이 메인 메로리에 실제로 적재되는 시간에 이루어진다.
실행 시간(Execution time)
프로세스가 실행 중에 메모리 주소를 변경한다.
실행시간 중에 주소를 할당하려면 MMU라는 하드웨어를 이용하여야 한다.
컴파일 또는 적재 시간에 바인딩을 하면 논리 주소와 물리 주소가 같다.
실행 시간에 바인딩을 하면 논리, 물리 주소가 다르며 이때 논리 주소를 가상 주소라 한다.
연속 메모리 할당(Contiguous Memory Allocation)
각 프로세스는 다음 프로세스가 적재된 영역과 인접하여 연속적이게 메모리 영역에 적재되는 방식이다.
Hole
고정 파티션 기법
가변 파티션 기법
동적 메모리 할당 문제(Dynamic storage allocation problem)
크기가 n인 프로세스가 가용 가능한 hole에 적절히 적재시키는 문제를 말한다.
최초 적합(First-fit)
첫 번째 사용 가능한 공간에 할당을 하는 방법이다.
최적 적합(Best-fit)
사용 가능한 공간 중에 가장 작은 것을 택하는 방법이다.
최악 적합(Worst-fit)
사용 가능한 공간 중에 가장 큰 것을 택하는 방법이다.
외부 단편화(External Fragmentation)
프로세스가 메모리에 적재되고 제거되는 일이 반복되면서 가용 공간이 연속하지 않고 작은 조각들로 분산되어 있을 때를 말한다.
내부 단편화(Internal Fragmentation)
프로세스가 요구한 공간보다 프로세스에 할당된 공간보다 커 메모리에 남는 부분이 발생하는 경우를 말한다.
출처
면접을 위한 CS 전공 지식 노트
정보통신 기술본 책자
KGITBANK 원격평생교육원
Google API 문서
Google 위키백과
https://dduddublog.tistory.com/28
https://velog.io/@rlaghdtlr012/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%86%A0%ED%8F%B4%EB%A1%9C%EC%A7%80-%EB%B3%91%EB%AA%A9%ED%98%84%EC%83%81
https://nearhome.tistory.com/129
https://edmblackbox.tistory.com/732
https://blog.voidmainvoid.net/201
https://blog.naver.com/PostView.naver?blogId=lool2389&logNo=220775214964&redirect=Dlog&widgetTypeCall=true&directAccess=false
https://imbf.github.io/computer-science(cs)/2020/08/21/What-is-The-Operating-System.html
https://judo0179.tistory.com/21